2016-02-04 46 views
3

它會出現標準資產效應Screen Space Ambient Obscurance不適用於正交相機。這很奇怪,因爲基本的SSAO腳本工作得很好。我懷疑這個問題是由於片段深度的計算錯誤造成的。正視相機的屏幕空間環境遮擋?

有沒有一種方法可以編輯效果以使其與正交相機一樣按預期工作?

+0

如果有幫助,似乎其他人設法修復「原始」着色器(請參閱https://github.com/mrdoob/three.js/issues/6446#issuecomment-96634340)。我試圖改變它,但它不起作用。也就是說,Unity着色器已經從原來的改變了。 –

+0

three.js與團結有什麼關係? –

+0

沒有什麼,但他們(似乎)談論使用原着色器(這是通用的)。該着色器已移植到Unity,但已經發生了很大變化。 –

回答

0

也許這是一個有點晚了,但我只是面臨着同樣的問題,這裏 是如何解決:

(更改ScreenSpaceAmbientObscurance.shader

float LinearEyeDepthOrth(float z) 
{ 
    // uniform float4 _ProjectionParams; 
    // x = 1 or -1 (-1 if porject is flipped) 
    // y = near plane 
    // z = far plane 
    // w = 1/far plane 

    // http://www.derschmale.com/2014/03/19/reconstructing-positions-from-the-depth-buffer-pt-2-perspective-and-orthographic-general-case/ 
    // Z_view = Z_near + Z_ndc(Z_far - Z_near) 
    return _ProjectionParams.y + z * (_ProjectionParams.z - _ProjectionParams.y); 
} 

float3 ReconstructCSPosition(float2 S, float z) 
{ 
    float linEyeZ = LinearEyeDepthOrth(z); 
    //return float3(((S.xy * _MainTex_TexelSize.zw) * _ProjInfo.xy + _ProjInfo.zw) * linEyeZ, linEyeZ); 
    return float3(((S.xy * _MainTex_TexelSize.zw) * _ProjInfo.xy + _ProjInfo.zw), linEyeZ); 
    ... 
} 

這種變化之後,將在你的正交相機中正確渲染。