Unity3d 使用正交摄影机的屏幕空间环境遮挡度?

Unity3d 使用正交摄影机的屏幕空间环境遮挡度?,unity3d,shader,unity5,Unity3d,Shader,Unity5,标准资源效果似乎不适用于正交摄影机。这很奇怪,因为基本脚本工作得非常好。我怀疑问题在于碎片深度计算不当 有没有办法编辑效果,使其与正交摄影机的预期效果一致 可能有点晚了,但我也遇到了同样的问题, 以下是解决问题的方法: (更改ScreenSpaceAmbinetObsurance.shader) 更改后,它将在正交摄影机中正确渲染。如果有帮助,其他人似乎已设法修复“原始”着色器(请参见)。我试图做同样的改变,但没有成功。也就是说,Unity着色器已经从原始着色器更改。three.js与Unity

标准资源效果似乎不适用于正交摄影机。这很奇怪,因为基本脚本工作得非常好。我怀疑问题在于碎片深度计算不当


有没有办法编辑效果,使其与正交摄影机的预期效果一致

可能有点晚了,但我也遇到了同样的问题, 以下是解决问题的方法:

(更改ScreenSpaceAmbinetObsurance.shader)


更改后,它将在正交摄影机中正确渲染。

如果有帮助,其他人似乎已设法修复“原始”着色器(请参见)。我试图做同样的改变,但没有成功。也就是说,Unity着色器已经从原始着色器更改。three.js与Unity有什么关系?没有什么,但他们(似乎)谈论使用原始着色器(这是通用的)。该着色器已移植到Unity,但已做了相当多的更改。
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);
    ...
}