【问题标题】:Ambient occlusion not showing in three.js环境遮挡未在three.js中显示
【发布时间】:2019-02-05 19:08:26
【问题描述】:

我在three.js 中使用MeshStandardMaterial,当我创建和应用材质时,所有贴图都可以正常工作,除了aoMap,它对模型没有影响。我怀疑这是因为我没有第二组 UV(我的 UV 展开是通过 Blender 完成的,我根本没有在 three.js 中手动应用任何 UV),正如 documentation 所说:

这个纹理的红色通道被用作环境光遮蔽贴图。 默认为空。 aoMap 需要第二组 UV,并且 因此将忽略重复和偏移纹理属性。

我尝试使用下面的代码来解决这个问题:

var geometry = mesh.geometry;
geometry.addAttribute( 'uv2', new THREE.BufferAttribute( geometry.attributes.uv.array, 2 ) );

但没有运气。如何将我的 UV 贴图复制到 uv2 属性,或任何需要使环境光遮蔽起作用的地方?

【问题讨论】:

    标签: three.js


    【解决方案1】:

    你用的是什么灯?我重新创建了您的情况,它按预期工作。需要注意的是,aoMap 显示为 THREE.AmbientLight,但不显示为 THREE.Spotlight。如果您使用envMap on your MeshStandardMaterial,它也可以工作

    【讨论】:

    • 你是对的,MeshStandardMaterialMeshPhysicalMaterial 使用envMap 建模的镜面反射将被aoMap 衰减。这实际上在物理上并不正确,但添加它是为了减少闪亮表面裂缝中的反射。认为这是一个合理的妥协。
    【解决方案2】:

    aoMap 是一个环境光遮蔽贴图,正如它的名字所说,它会遮蔽环境光。这就是它所遮挡的全部内容。

    目前在three.js 中有三种环境(或间接)光源:AmbientLightHemiSphereLightLightMap

    所以aoMap 屏蔽了这三个来源。它不会遮挡直接光源。直接光源包括DirectionalLightSpotLightPointLightAreaLight

    three.js r.95

    【讨论】:

      猜你喜欢
      • 2022-01-24
      • 2013-11-23
      • 1970-01-01
      • 2014-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多