【问题标题】:Strange behaviour of shadowing in ThreeJSThreeJS中阴影的奇怪行为
【发布时间】:2016-04-19 03:30:14
【问题描述】:

所以我有一个threeJS 场景,并添加了一些球体(多材质)。我还添加了定向灯:

this.light = new THREE.DirectionalLight( 0xFFFFFF, 1 );
this.light.position.set( 2, 10, 2 );  
this.light.castShadow = true;
this.light.shadowMapSoft = true;
this.light.shadowCameraVisible = true;
this.light.shadowCameraNear = 1;
this.light.shadowCameraFar = 10; 
this.light.shadowBias = 0.0009;
this.light.shadowDarkness = 0.3;
this.light.shadowMapWidth = 1024;
this.light.shadowMapHeight = 1024;
this.light.shadowCameraLeft = -8;
this.light.shadowCameraRight = 8;
this.light.shadowCameraTop = 8;
this.light.shadowCameraBottom = -8;

因此,当用户添加或删除球体时,执行“改造”阴影相机平截头体的函数如下所示:

    this.light.position.set( posV.x, posV.y, posV.z); 

    this.light.shadowCamera.far = l2*3;
    this.light.shadowCamera.left = -l2;
    this.light.shadowCamera.right = l2;
    this.light.shadowCamera.bottom = -l2;
    this.light.shadowCamera.top = l2;           
    this.light.shadowCamera.updateProjectionMatrix(); 

上面代码的一个可能结果是这样的:

上述确切情况的另一个方面:

我已将相机的视锥体可见性设置为开启,所以它就是这样。问题是无缘无故生成的阴影(由红色箭头指出)。此时场景中没有其他物体,球体完全位于相机截锥体内。

在更新球体(添加/删除)后,此类阴影问题很常见,有人知道吗?

我使用 three.js r72 , 谢谢!

【问题讨论】:

  • 它可能是自我阴影。尝试调整偏差(正面和负面)。我还建议您更新到当前版本。
  • 我尝试了一个负值,现在看来它工作正常。但是我怎么能确定在任何情况下阴影都会表现得很好呢?我现在不能升级到 r73,你认为它对影子很重要吗?
  • 还有,如何避免自阴影?
  • 每个版本都修复了许多错误。更新是您的选择。
  • 避免自阴影伪影的唯一方法是调整偏差参数。

标签: javascript three.js shadow shadow-mapping


【解决方案1】:

根据您的 cmets,您看到的是自阴影伪影。

您需要调整shadowBias(现在称为shadow.bias)参数。

改变阴影偏差会导致在“peter-panning”(过多的正偏差)和自阴影伪影(过多的负面偏差)之间进行权衡。

three.js r.73

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 2011-12-17
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多