不透明对象上的Three.js透明伪影



透明度伪影问题

你好,我对three.js有一个问题。我在场景中导入了一个"大"glb模型,它是不透明的,但如果模型在相机视图中被自己覆盖,前景就会变得透明。(如图所示,背景蒙太因在前景(

我尝试了一些解决方案,比如:

  • depthglb材料测试为假
  • sortOrder为false
  • 使用对数DepthBuffer
  • 将材质透明更改为假
  • 按0.1步将alphaTest从0更改为1

但什么都不管用。如果有人有解决方案:(

谢谢!

不能很好地渲染透明对象。首先需要渲染任何不透明对象,然后从后到前渲染透明曲面,这样任何新曲面都会在其后面的曲面上混合。在许多情况下,无法做到这一点,尤其是在渲染可能重叠的透明对象时。

解决这一问题需要将有问题的对象(甚至是单个三角形(切成更小的块,以便保留排序,而这通常几乎是不可能的。由于您正在使用Three.js,请查看是否可以更改您的设计,这样就不会出现问题,或者不正确渲染顺序的工件不会太明显。

感谢donmccurdy在three.js论坛上找到了我的解决方案。

最后,我的glb文件是透明的:(所以有两个解决方案

解决方案1:

找到模型的透明性并修复它。

解决方案2:

将其更改回不透明,并恢复默认的depthWrite值。

mesh = content.getObjectByName('mesh_0');
mesh.material.transparent = false;
mesh.material.depthWrite = true;

最新更新