2

我目前正在使用Three.js 示例中提供的 SSAO 着色器。除了我的 MacBook Pro Retina 之外,它在我的大多数机器上都能完美运行。直到几周前,MBP 才完美呈现 SSAO(可能在 MBP 上进行固件升级之后)。

就目前而言,MBP 渲染 SSAO 场景时,屏幕上会出现大量闪烁的伪影,如下所示:

场景代码在这里 在此处输入图像描述

在这里找到的场景 在此处输入图像描述

同样的代码在其他机器上也能完美呈现。我在其他 MBP 上看到过这个问题,所以我相信这不是一个问题。

除了固件更新之外,我没有在这个 MBP 上在它工作和出现伪像之间进行任何更改(代码是相同的)。

如果我移除 SSAO 效果,那么场景渲染完美。

有任何想法吗?

4

4 回答 4

0

我通过将相机对象的“近”属性更改为大于 1 的值来解决此问题。仍然不确定为什么会修复它,但 SSAO 现在可以在 Retina MacBook 上完美运行。

于 2013-07-16T13:28:12.900 回答
0

我认为您需要考虑 devicePixelRatio。看看这个例子http://uihacker.blogspot.gr/2013/03/javascript-antialias-post-processing.html

于 2013-05-26T10:36:45.820 回答
0

Retina Macbook 上的所有浏览器都发生这种情况,但在其他设备上似乎也能正常工作(在 Chromebook Pixel 上看起来不错),这表明这可能是 OSX 上的驱动程序错误。在 WebGL 中可能有一种解决方法,但我建议至少向 Apple 提交错误报告。

于 2013-05-26T15:38:07.900 回答
0

我在非视网膜 MacBook Pro 上遇到了完全相同的问题,所以这似乎是 NVidia 图形驱动程序中的一个错误。似乎影响行为的一件事是材料混合。将depthmaterial blending设置为THREE.NoBlending,我得到了更好的结果:

// depth
var depthShader = THREE.ShaderLib[ "depthRGBA" ];
var depthUniforms = THREE.UniformsUtils.clone( depthShader.uniforms );

depthMaterial = new THREE.ShaderMaterial( { fragmentShader: depthShader.fragmentShader, vertexShader: depthShader.vertexShader, uniforms: depthUniforms } );
depthMaterial.blending = THREE.NoBlending; //add this

此外,相机的近平面设置似乎对渲染有影响。

于 2013-07-09T09:44:25.673 回答