URP에서 GetVertexPositionInputs라는 함수가 존재한다(위치는 버전마다 다릅니다)

VertexPositionInputs GetVertexPositionInputs(float3 positionOS)
{
    VertexPositionInputs input;
    input.positionWS = TransformToWorld(positionOS);
    input.positionVS = TransformWorldToView(input.positionWS);
    input.positionCS = TransformWorldToHClip(input.positionWS);
    
    float4 ndc = input.positionCS * 0.5f;
    input.positionNDC.xy = float2(ndc.x, ndc.y * _ProjectionParams.x) + ndc.w;
    input.positionNDC.zw = input.positionCS.zw;
        
    return input;
}

이렇게 되있는데 

여기서 의문점이 분명 우리는 ndc공간은 clip w로 나눈값이라 알고있다

하지만 여기선 클립공간에 1/2를 해버리고 w를 더한다 그냥 보기엔 이해하기 힘들수있어서 한번 전개해봤다

어차피 픽셀로 가므로 /w까지 넣은 다음 전개해보면

(clip.xy*0.5 + clip.w*0.5)/clip.w
(clip.xy/2 + clip.w/2)/clip.w
(clip.xy+clip.w)/(2*clip.w)
clip.xy/(2*clip.w)+clip.w/(2*clip.w)
clip.xy/(2*clip.w)+1/2
clip.xy/clip.w*1/2 +1/2
=clip.xy/clip.w*0.5 +0.5

즉 우리가 익숙한 -1~1이 아닌 0~1사이의 uv값이 되는걸 알수있다

- dc official App