簡體   English   中英

僅在MacBook Pro(Retina)上在Three.js中使用SSAO的偽像

[英]Artefacts with SSAO in Three.js only on MacBook Pro (Retina)

我目前正在使用Three.js示例中提供SSAO着色器 除了MacBook Pro Retina之外,它在我的大多數計算機上都能完美運行。 MBP在數周之前(可能是在MBP上進行固件升級之后)完美地實現了SSAO。

就目前而言,MBP渲染SSAO場景,並在屏幕上顯示出大量閃爍的偽像,如下所示:

場景代碼在這里 在此處輸入圖片說明

在這里找到場景 在此處輸入圖片說明

相同的代碼可以在其他計算機上完美呈現。 我已經在其他MBP上看到了此問題,因此我相信這不是一個單一的問題。

除了固件更新之外,在此MBP正常工作和出現的偽像之間,我沒有進行任何更改(代碼相同)。

如果刪除SSAO效果,則場景將完美呈現。

有任何想法嗎?

我認為您需要考慮devicePixelRatio。 請看以下示例http://uihacker.blogspot.gr/2013/03/javascript-antialias-post-processing.html

這在Retina Macbook的所有瀏覽器上都發生了,但在其他設備上也可以顯示(在Chromebook Pixel上看起來還不錯),這一事實表明這可能是OSX上的驅動程序錯誤。 WebGL中可能有解決此問題的方法,但我建議至少向Apple提交錯誤報告

我在非視網膜MacBook Pro上遇到了完全相同的問題,因此似乎是NVidia圖形驅動程序中的錯誤。 似乎影響行為的一件事是材料混合。 將depthmaterial混合設置為THREE可獲得更好的結果。

// 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

相機的近平面設置似乎也對渲染產生影響。

我通過將相機對象的“ near”屬性更改為大於1的值來解決此問題。仍不確定為什么可以解決此問題,但SSAO現在可以在Retina MacBook上完美運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM