UNPKG

@babylonjs/viewer

Version:

The Babylon Viewer aims to simplify a specific but common Babylon.js use case: loading, viewing, and interacting with a 3D model.

68 lines (65 loc) 2.11 kB
import { Q as PBR_HAS_ALPHA_BLEND, M as MAX_LIGHTS } from './index-By0tcgYN.esm.js'; const PBR2_HAS_SHADOW_ONLY = 1 << 30; function createShadowOnlyFragment() { const unrolled = []; for (let i = 0; i < MAX_LIGHTS; i++) { unrolled.push(`so_shadowMin = min(so_shadowMin, shadowFactors[${i}]);`); } const bc = ` { var so_shadowMin = 1.0; ${unrolled.join("\n")} color = material.shadowOnlyColor; alpha = saturate((1.0 - so_shadowMin) * material.shadowOnlyFalloff) * material.shadowOnlyOpacity; } `; return { _id: "shadow-only", _uboFields: [ { _name: "shadowOnlyColor", _type: "vec3<f32>" }, { _name: "shadowOnlyOpacity", _type: "f32" }, { _name: "shadowOnlyFalloff", _type: "f32" } ], _fragmentSlots: { BC: bc, // Overwrite finalAlpha after the alpha block's luminanceOverAlpha fold so // environment/direct specular can't make the shadow catcher opaque. `alpha` // holds the shadow term set in BC. FA: `finalAlpha = alpha * material.materialAlpha;` } }; } function writeShadowOnlyUBO(data, material, offsets) { if (!material.shadowOnly) { return; } if (offsets.has("shadowOnlyColor")) { const off = offsets.get("shadowOnlyColor") / 4; const tint = material.shadowOnlyColor ?? [0, 0, 0]; data[off] = tint[0]; data[off + 1] = tint[1]; data[off + 2] = tint[2]; } if (offsets.has("shadowOnlyOpacity")) { data[offsets.get("shadowOnlyOpacity") / 4] = material.shadowOnlyOpacity ?? 1; } if (offsets.has("shadowOnlyFalloff")) { data[offsets.get("shadowOnlyFalloff") / 4] = material.shadowOnlyFalloff ?? 1; } } const pbrExt = { id: "shadow-only", phase: "fragment", detect(mat) { return mat.shadowOnly ? { f: PBR_HAS_ALPHA_BLEND, f2: PBR2_HAS_SHADOW_ONLY } : { f: 0, f2: 0 }; }, frag(ctx) { if (!(ctx._features2 & PBR2_HAS_SHADOW_ONLY)) { return null; } return createShadowOnlyFragment(); }, writeUbo: writeShadowOnlyUBO }; export { createShadowOnlyFragment, pbrExt, writeShadowOnlyUBO }; //# sourceMappingURL=shadow-only-fragment-D5wIoMG3.esm.js.map