【发布时间】:2020-12-20 01:36:56
【问题描述】:
使用 Three.js v0.113.2 我在飞机上渲染这个杯子场景,带有两个聚光灯(一个在后面,一个在前面)和一个环境光。前面的聚光灯投射阴影,杯子被设置为投射阴影(但不接收它们),而飞机被设置为接收阴影。我使用的阴影半径为 20 (iirc)。阴影贴图大小为 1024x1024。
在 Android 上,并且仅在 Android 上(这可以在 iPhone、Windows 和 Mac 桌面上正确呈现)我从物体上的照明中看到这些奇怪的条带伪影。它在杯子上最明显,但它也出现在窗格上。工件有清晰可辨的线条,与杯子对象的几何形状不匹配。
我尝试设置 camera.near 和 camera.far 平面以紧密封装场景,最终这些值的值为 50/200。没有效果。
我尝试将 shadow.bias 值设置为非常接近零的值 -.001。也没有效果。
不幸的是,这就是我可以从 Three.js 存储库和其他 StackOverflow 问题中找到的建议的范围。如果有人觉得这个工件很熟悉,我很想知道如何解决这个问题。
编辑:我已将 Spotlight 上的 castShadow 设置为 false,移除了环境光,从所有网格中移除了 castShadow 和 receiveShadow,工件仍然显示在 Android 上(仅限)。
【问题讨论】:
-
我从未见过负阴影贴图偏差。你有没有尝试过一些积极的东西,比如 0.001?另外,请确保您设置了
material.side = THREE.FrontSide,因为这决定了哪个面会投射阴影as outlined here 看起来您可能会让这些面在自己身上投射阴影。 -
@Marquizzo 我刚刚尝试了一个小的正偏差,将
material.side和material.shadowSide设置为THREE.FrontSide(适用于所有网格),但仍然会出现完全相同的阴影伪影杯子和飞机。同样,仅适用于 Android(所有浏览器),不适用于 iOS 或任何桌面浏览器。