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

Three.JS: Weird shadow artifacts from a spotlight, but only in Android

使用 Three.js v0.113.2 我正在用两个聚光灯(一个在后面,一个在前面)和一个环境光渲染一个杯子在平面上的场景。前面的聚光灯投射阴影,杯子设置投射阴影(但 接收阴影),平面设置接收阴影。我使用的阴影半径为 20 (iirc)。阴影贴图大小为1024x1024.

在 Android 上,并且仅在 Android 上(这在 iPhone、Windows 和 Mac 台式机上正确呈现)我看到这些来自照明的奇怪条带伪影在物体上。它在杯子上最为明显,但它也出现在窗格上。该工件具有清晰可辨的线条,与杯子对象的几何形状不匹配。

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

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

不幸的是,这就是我可以从 Three.js 存储库和其他 Whosebug 问题中找到的建议的范围。如果任何人都觉得这种伪造很熟悉,我很想知道如何解决这个问题。

编辑: 我已经将 Spotlight 上的 castShadow 设置为 false,移除了环境光,移除了 castShadowreceiveShadow 来自所有网格,伪影仍然出现在 Android(仅)。

万一以后有人发现这个:

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