【发布时间】:2021-12-14 06:01:35
【问题描述】:
我有一个一般场景,我想展示不同类型的模型。根据模型的来源,有时模型包含MeshPhongMaterial,有时包含MeshStandardMaterial,有时同时包含两者。
我还有一个带有AmbientLight 和DirectionalLight 的特定照明模型,它们始终指向与相机相同的方向,因此您将清楚地看到您现在正在看什么。
为了让MeshStandardMaterial 看起来更好,我还在场景中添加了环境贴图(不是材质),我对结果非常满意。
这是 r130 的结果(左侧是 Phong 材料,右侧是标准材料):
在我将 three.js 更新为 r131 后,结果如下所示:
我了解环境贴图会从 r131 自动转换为 PMREM,这会导致更改。我也明白这比使用非 PMREM 环境贴图更正确,但现在它弄乱了我的场景。
在其他一些主题上,建议移除环境光和定向光(因为现在光照来自环境),但结果如下:
现在使用标准材质的对象看起来不错,但是使用 phong 材质的对象完全是黑色的。我也失去了我之前的功能,即定向光总是指向相机所看到的地方。
通过仅移除环境光,我得到了这个(仍然不是我想要实现的):
所以基本上我的问题是:虽然我知道这在物理上是不正确的,但有没有办法应用不影响场景照明但影响标准材质反射的环境贴图?
您可以在此处找到上述场景的代码: https://github.com/kovacsv/Online3DViewer/blob/dev/sandbox/three_envmap_issue/three_viewer.html
在这里你可以看到它的直播: https://raw.githack.com/kovacsv/Online3DViewer/dev/sandbox/three_envmap_issue/envmap_issue.html
【问题讨论】:
-
有什么方法可以共享创建材料的代码?也许它是属性之一,例如envMapIntensity 或类似的东西。我正在查看changelog between r130 -> r131,但没有发现任何适用于您的 StandardMaterial 的值得注意的内容。
-
好点,我已经用代码链接编辑了问题。
-
@kovacsv 您说“建议移除环境和定向光”。不,仅移除环境光是合理的——并且仅当您使用
MeshStandardMaterial或MeshPhysicalMaterial时。另见github.com/mrdoob/three.js/pull/22178#issuecomment-887950445。
标签: javascript three.js