在 three.js 上使用 ShaderMaterial 进行阴影混叠

Shadow aliasing with ShaderMaterial on three.js

这是我的问题的图片,你可以看到我的阴影在我的 ShaderMaterial 上不平滑,它是 PhongMaterial 的副本。

目前我已经尝试了所有这些在互联网上找到的解决方案,但似乎没有任何效果:

groundGeometry.computeFaceNormals();
groundGeometry.computeVertexNormals();
groundGeometry.verticesNeedUpdate = true;
renderer.shadowMapType = THREE.PCFShadowMap; //And all options possible
renderer.shadowMapCullFace = THREE.CullFaceBack; //And the other one
renderer = new THREE.WebGLRenderer({ antialias : true });

我还尝试使用 SpotLight 的不同参数(也尝试使用定向光:

shadowMapWidth
shadowMapHeight
shadowCameraLeft
shadowCameraRight
shadowCameraBottom
shadowCameraTop
shadowCameraNear
shadowCameraFar
shadowBias

老实说,我现在不知道该怎么办了:/

任何帮助将不胜感激!

可能是自阴影引起的。尝试设置较小的 shadowBias 值,例如 0.05 或 -0.05。

如果您的场景允许,请尽可能减少阴影贴图截锥体,更改 shadowCamera 选项的值以准确适合您想要的对象。

如果物体某点的光线与法线的夹角接近90度,你可以尝试根据斜率来缩放偏差。有一种叫做 slope scaled bias 的方法,它根据光向量和法向量之间的角度来缩放偏差。公式为:

float slope_bias = bias * tan(acos(dot(normal,-lightDirection)));

希望对您有所帮助。