builtinShadowContext
builtinShadowContext
builtinShadowContext 用于为某个节点建立一个“内置阴影上下文”,在 three.js 标准光照计算过程中,将指定光源的阴影项与一个自定义的 ShadowNode 相乘,从而只对这盏光的阴影进行二次加工。
核心优势
可以在不改写整套光照/阴影管线的前提下,对单个光源的阴影做额外控制(噪声、遮罩、距离衰减等),同时继续复用 three.js 的阴影贴图、偏移、滤波等现有设置。
常见用途
给某个平行光或聚光灯的阴影叠加噪声、软边或遮罩,只影响这一盏光
在体积光、雾、区域光照等特殊场景中,对特定光源的阴影做额外衰减或裁剪
在同一材质中区分不同光源的阴影效果(例如主光正常阴影,辅光只投很浅的阴影)
如何调整
builtinShadowContext 本身没有可调属性,它只是把你传入的 shadowNode 和 light 挂到内置阴影流程上。实际调节方式包括:1)在传入前先对 shadowNode 做数学运算(如乘以噪声、距离因子或遮罩贴图),以控制阴影强度和形状;2)确保第二个参数始终是同一个 THREE.Light 实例,否则不会命中对应光源;3)继续通过 light.shadow.bias、light.shadow.radius、light.shadow.mapSize 等常规参数调整基础阴影质量,再叠加 shadowNode 的自定义控制。
代码示例
1// 为该光源构建基础阴影节点(通常来自 shadow())
2const shadowNode = shadow( dirLight );
3
4// 将该阴影作为“内置阴影上下文”注入,只作用于 dirLight
5material.colorNode = baseColor.builtinShadowContext( shadowNode, dirLight );