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
api에 따라 달라서 그런가?
위치를 말하신거라면 관련 없을거 같네요 값 범위를 말하신거라면 원래 0~1사이 값이 ndc공간이긴합니다 근데 저기엔 아무런 설명없이 ndc라면서 버택스 함수 기준으로 나와서 생각안하고 하면 uv인줄알수도 있으니 - dc App