Three.JS:来自聚光灯的怪异阴影伪影,但仅限于Android

问题描述

使用Three.js v0.113.2,我在一个带有两个聚光灯(一个在后面,一个在前面)和一个环境光的飞机上渲染杯子的场景。前部聚光灯投射阴影,杯子设置为投射阴影(但 not 不能接收阴影),飞机设置为可以接受阴影。我使用的阴影半径为20(iirc)。阴影mapSize为1024x1024。

在Android上,并且仅在Android(可在iPhone,Windows和Mac桌面上正确呈现)上,我从对象的照明中看到了这些奇怪的带状伪像。它在杯子上最明显,但也存在于窗格中。该工件具有明显可分辨的线条,与杯子对象的几何形状不匹配。

enter image description here

我尝试将camera.nearcamera.far平面设置为紧密封装场景,并最终将这些值设置为50/200。没有效果

我尝试将shadow.bias的值设置为非常接近零的-.001。也没有效果

不幸的是,这就是我可以从Three.js存储库和其他StackOverflow问题中找到的建议的范围。如果任何人都对这种工件看起来很熟悉,我很想找出解决方法

编辑:我已将Spotlight上的castShadow设置为false删除了环境光,删除castShadowreceiveShadow所有网格,并且工件仍然显示在Android上(仅)。

解决方法

万一将来有人发现:

目前,仅影响Android的不幸伪像是由于将任何聚光灯的angle值设置得太低引起的。在上面的场景中,有一个聚光灯,角度为0.091。将其提高到0.171时,奇怪的条纹消失了。