【问题标题】:Shadow aliasing with ShaderMaterial on three.js在 Three.js 上使用 ShaderMaterial 实现阴影锯齿
【发布时间】:2015-07-24 15:24:56
【问题描述】:

这是我的问题的图片,就像你可以看到我的 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

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

所以任何帮助将不胜感激!

【问题讨论】:

  • 您是说您的“PhongMaterial 副本”的行为与实际 PhongMaterial 不同吗?

标签: three.js shadow


【解决方案1】:

可能是自阴影造成的。尝试设置一个较小的 shadowBias 值,例如 0.05 或 -0.05。

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

如果物体某个点的光线和法线之间的角度接近 90 度,您可以尝试根据斜率缩放偏差。有一种称为 slope scaled bias 的方法,它包括根据光矢量和法线矢量之间的角度来缩放偏差。公式为:

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

希望对你有所帮助。

【讨论】:

  • 您好,谢谢您的回答!为 0.001;我尝试 0.05 但什么也没发生,并且 -0.05 阴影消失
  • 尝试(非常耐心地)使用该参数。我从来没有找到一种方法来设置该值以使第一次看起来不错。如果 0.001 很好但不够,请尝试负值
  • 我已经非常耐心地尝试使用 shadowBias,但它只是使阴影或多或少可见,但仍然具有我奇怪的效果。但是我已经改变了我的阴影贴图平截头体(宽度 shadowCameraRight/left/... 对吗?),看起来这个参数在渲染上没有任何改变(也许是一个线索?)
  • 还有两件事:阴影贴图的大小是多少?光线是否过于倾斜物体?
  • 当前阴影贴图是 1024,是的,光线像日落时的太阳一样倾斜;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
  • 2018-12-06
  • 2019-11-27
  • 2021-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多