使用正交相机的屏幕空间环境遮蔽?

3
似乎标准资产效果 屏幕空间环境遮蔽 不能与正交相机一起使用。这很奇怪,因为基本的 SSAO 脚本完全正常工作。我怀疑问题在于片段深度的错误计算。
有没有办法编辑该效果以使其可与正交相机一起按预期工作?

如果有帮助的话,似乎其他人已经修复了“原始”的着色器(请参见https://github.com/mrdoob/three.js/issues/6446#issuecomment-96634340)。我尝试进行了相同的更改,但没有成功。话虽如此,Unity着色器已经从原始版本进行了更改。 - Meirion Hughes
three.js 和 Unity 有什么关系? - TZubiri
仅谈论使用原始着色器(通用着色器),但它已被移植到Unity,但已经进行了相当大的更改。 - Meirion Hughes
1个回答

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);
    ...
}

这个变化后,在你的正交相机中它会正确地呈现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接