Three.js:在移动设备上浏览对象伪像

时间:2018-11-07 12:27:32

标签: three.js

我最近在移动设备上尝试了我的应用程序,发现了一些奇怪的行为,似乎飞机靠近平面时正在修剪几何体,但是其他距离相同的对象都没有被修剪...材料为StandarMaterials,depthTest和depthWrite设置为true

我必须补充,我无法在桌面上重现此问题。由于一见钟情,所以很难理解正在发生的事情。

以下是显示该问题的2个gif文件:

see through wall & floor

在下一个gif中,您可以在左侧看到同一堵墙

see through cabinet top

谢谢!

编辑:

(在移动设备上)透明的面孔似乎是由于logarithmicDepthBuffer = true(但不知道为什么?)引起的,而且由于相机近平面和远平面彼此之间的距离太深,我还产生了其他伪影问题(请参阅Flickering planes)...

编辑2:

好吧,我不是在搜索正确的词...今天才发现:https://github.com/mrdoob/three.js/issues/13047#issuecomment-356072043

因此logarithmicDepthBuffer使用EXT_frag_depth,根据WebGLStats,只有2%的手机支持。一种解决方法是修饰几何形状...

2 个答案:

答案 0 :(得分:0)

好吧,我不是在搜索正确的词...今天才发现:https://github.com/mrdoob/three.js/issues/13047#issuecomment-356072043

因此logarithmicDepthBuffer使用EXT_frag_depth,根据WebGLStats,只有2%的手机支持。一种解决方法是修饰几何形状或保留线性深度缓冲区...

由于相机的近平面和远平面彼此距离太远而引起的其他伪影会产生深度问题(请参见Flickering planes)...

答案 1 :(得分:0)

您不需要对数深度缓冲区即可解决此问题。您已屈从于经典的诱惑,将近夹真正靠近眼睛,而远夹又非常远。这会产生非常非线性的深度精度分布,并且可以通过将合理的数量推近夹平面轻松地缓解这种情况。尝试将3D数据尽可能紧密地夹在近裁剪平面和远裁剪平面之间,并容许一些近平面裁剪。