一劳永逸地渲染阴影

Render the shadows once for all

鉴于阴影投射的成本,我想知道是否有一个功能或 possible/experimental 方法可以在 three.js 中(甚至在 webgl 中)仅渲染一次阴影贴图,用于静态对象定位动态(例如:程序城市)。因此,结果可以免费用于静态对象的下一帧。只有在有物体移动时才会进行阴影渲染。

编辑

mrdoobs 批准:

renderer.shadowMap.autoUpdate = false;
renderer.shadowMap.needsUpdate = true; // when scene changes

原回答:

我找到了方法:我复制了 verticesNeedUpdate 的工作方式。我向 WebGLRenderer 添加了一个 shadowMapNeedsUpdate = true 参数。在 ShadowMapPlugin 的渲染函数中,我检查此参数是否为 true 并在 :

之后将其设置为 false
if( _renderer.shadowMapEnabled===false || _renderer.shadowMapNeedsUpdate===false ) return;

_renderer.shadowMapNeedsUpdate = false

这样阴影贴图在第一次渲染时渲染一次,如果场景需要实时阴影贴图,则必须在渲染循环中对其进行精确处理。否则释放计算能力