๊ทธ๋๋ธ ํจ์ค์์ ํ์ฌ ํ๋ฉด ์บก์ฒํ๊ณ
์บก์ฒ๋ ์ด๋ฏธ์ง๋ฅผ ํ๋ฉด์ ํ ์ค์ฒ์ฒ๋ผ ์ ์ฉํด์ ํฌ๋ช ํ ์ ๋ฆฌ์ฐฝ์ฒ๋ผ ๋ง๋๋ ์์ด๋๋ฅผ ๋ฐ๋ผํ๊ณ ์์๋ค
๊ทผ๋ ์ด๋ฐ ์ฝ๋๊ฐ ๋์ค๋๊ฑฐ ์๋๊ฒ๋ ธ
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
ย ย ย ย ย ย ย ย ย
ย ย ย ย ย ย ย ย //add this to check if the image needs flipping
# if UNITY_UV_STARTS_AT_TOP
ย ย ย ย ย ย ย ย float scale = -1.0;
ย ย ย ย ย ย ย ย # else
ย ย ย ย ย ย ย ย float scale = 1.0f;
ย ย ย ย ย ย ย ย # endif
ย ย ย ย ย ย ย ย ย
ย ย ย ย ย ย ย ย //include scale in this formulae as below
ย ย ย ย ย ย ย ย o.uvgrab.xy = (float2(o.vertex.x, o.vertex.y * scale) + o.vertex.w) * 0.5;
ย ย ย ย ย ย ย ย ย
ย ย ย ย ย ย ย ย o.uvgrab.zw = o.vertex.zw;
o.uv = TRANSFORM_TEX( v.uv, _MainTex );
o.uvbump = TRANSFORM_TEX( v.uv, _BumpMap );
return o;
}
o.uvgrab.xy = (float2(o.vertex.x, o.vertex.y * scale) + o.vertex.w) * 0.5;
์ด๊ฒ ์๊ณ ๋ณด๋๊นย ์ ๋ํฐ์์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ ComputeScreenPos ํจ์๋ ๋๊ฐ์ด ์๋ํ๋๋ฐ
์ฌ๊ธฐ์ ํด๋ฆฝ ์คํ์ด์ค์ ์๋ ํ๋ฉด์ uv ์๋ค๊ฐ ์ ์ ์ w ๋ฅผ ๊ฐ๊ฐ ๋ํ๋ ์ด์ ๊ฐ ๋จธ์? 0.5 ๊ณฑํ๋ ์ด์ ๋ ๋ชจ๋ฅด๊ฒ์
๋์ ์๋งํ๋คย
์ ๊ฑธ ํ๋๊ทธ๋จผํธ ์์ด๋๋ก ๋ณด๋ด์ ์ด์ vertex.w๋ก ๋๋๊ฒ ๋ ๊ฑฐ์ผ. ๊ทธ๋ผ ๊ฒฐ๊ณผ์ ์ผ๋ก (vertex.x/vertex.w +1, v.y/v.w +1) * 0.5๊ฐ ๋ผ vertex.xy/vertex.w๋ ํด๋ฆฝ ์คํ์ด์ค ์์ ์ ์ผ๋ก -1๋ถํฐ 1 ์ฌ์ด์ ๊ฐ์ ๊ฐ์ ธ ๊ฑฐ๊ธฐ์ 1 ๋ํ๊ณ 0.5๊ณฑํด์ 0๋ถํฐ 1 ์ฌ์ด๊ฐ์ผ๋ก ๋ฐ๊พธ๋๊ฑฐ์ง