一劳永逸地渲染阴影
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
这样阴影贴图在第一次渲染时渲染一次,如果场景需要实时阴影贴图,则必须在渲染循环中对其进行精确处理。否则释放计算能力
鉴于阴影投射的成本,我想知道是否有一个功能或 possible/experimental 方法可以在 three.js 中(甚至在 webgl 中)仅渲染一次阴影贴图,用于静态对象定位动态(例如:程序城市)。因此,结果可以免费用于静态对象的下一帧。只有在有物体移动时才会进行阴影渲染。
编辑
mrdoobs 批准:
renderer.shadowMap.autoUpdate = false;
renderer.shadowMap.needsUpdate = true; // when scene changes
原回答:
我找到了方法:我复制了 verticesNeedUpdate
的工作方式。我向 WebGLRenderer 添加了一个 shadowMapNeedsUpdate = true
参数。在 ShadowMapPlugin 的渲染函数中,我检查此参数是否为 true 并在 :
if( _renderer.shadowMapEnabled===false || _renderer.shadowMapNeedsUpdate===false ) return; _renderer.shadowMapNeedsUpdate = false
这样阴影贴图在第一次渲染时渲染一次,如果场景需要实时阴影贴图,则必须在渲染循环中对其进行精确处理。否则释放计算能力