0

我在 Unity 中使用顶点片段雾着色器时遇到了一些困难。我有一个很好的视觉效果,但问题是渐变是基于相机的位置的,它随着相机的移动而移动。我不知道如何解决它。

这是着色器代码。

struct v2f {
    float4 pos : SV_POSITION;
    float4 grabUV : TEXCOORD0;
    float2 uv_depth : TEXCOORD1;
    float4 interpolatedRay : TEXCOORD2;
    float4 screenPos : TEXCOORD3;
};

v2f vert(appdata_base v) {
    v2f o;
    o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
    o.uv_depth = v.texcoord.xy;
    o.grabUV = ComputeGrabScreenPos(o.pos);
    half index = v.vertex.z;
    o.screenPos = ComputeScreenPos(o.pos); 
    o.interpolatedRay = mul(UNITY_MATRIX_MV, v.vertex);
    return o;
}

sampler2D _GrabTexture;

float4 frag(v2f IN) : COLOR {
    float3 uv = UNITY_PROJ_COORD(IN.grabUV);
    float dpth = UNITY_SAMPLE_DEPTH(tex2Dproj(_CameraDepthTexture, uv));
    dpth = LinearEyeDepth(dpth);
    float4 wsPos = (IN.screenPos + dpth * IN.interpolatedRay); // Here is the problem but how to fix it
    float fogVert = max(0.0, (wsPos.y - _Depth) * (_DepthScale * 0.1f));
    fogVert *= fogVert; 
    fogVert = (exp (-fogVert));
    return fogVert;
}
4

1 回答 1

0

好像是矩阵问题

o.interpolatedRay = mul(UNITY_MATRIX_MV, v.vertex);
于 2013-06-14T19:30:09.757 回答