@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
JavaScript
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