https://gamedev.stackexchange.com/questions/135375/animated-textures-for-models-how-to-write-a-shader


์ด๊ฑฐ ๋ณด๊ณ  ๋”ฐ๋ผํ•˜๋Š”๋ฐ


๊ธฐ๋ฆฐ ์‚ฌ์ง„์ด ์›ํ˜•์œผ๋กœ ๋น™๊ธ€๋น™๊ธ€ ๋Œ๋ฉด์„œ ์™ธ๋ถ€๋กœ ์›€์ง์ด๋Š” ์‰์ด๋”์ž„




fixed4 frag (v2f i) : SV_Target

{

ย  ย  // Convert our texture coordinates to polar form:

ย  ย  float2 polar = float2(

ย  ย  ย  ย  ย  ย atan2(i.uv.y, i.uv.x)/(2.0f * 3.141592653589f), // angle

ย  ย  ย  ย  ย  ย length(i.uv)ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  // radius

ย  ย  ย  ย  );


ย  ย  // Apply texture scale

ย  ย  polar *= _MainTex_ST.xy;


ย  ย  // Scroll the texture over time.

ย  ย  polar += _ScrollSpeeds.xy * _Time.x;


ย  ย  // Sample using the polar coordinates, instead of the original uvs.

ย  ย  // Here I multiply by MainTex

ย  ย  fixed4 col = tex2D(_MainTex, polar);


ย  ย  // apply fog

ย  ย  UNITY_APPLY_FOG(i.fogCoord, col);

ย  ย  return col;ย 

}




๊ทผ๋Œ€ ์•„๋ž˜ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ


tHOFz.gif


์ค‘์•™์—์„œ๋Š” ๊ธฐ๋ฆฐ์ด ํ™€์ญ‰ํ•ด์ง€๊ณ  ๋ฐ–์— ๊ฐˆ์ˆ˜๋ก ๋‚ฉ์ž‘ํ•ด์ง€๋Š” ํšจ๊ณผ๊ฐ€ ์ž‡์–ด์„œ ์ด๊ฑธ ๋ฐ”๋กœ์žก๊ธฐ ์œ„ํ•ด์„œ ๋กœ๊ทธ ํ•จ์ˆ˜๋ฅผ ์“ด๋‹ค๋Š”๊ฑฐ์•ผ


๊ทธ๋ž˜์„œย 


ย float2 polar = float2(

ย  ย  ย  ย  ย  ย atan2(i.uv.y, i.uv.x)/(2.0f * 3.141592653589f), // angle

ย  ย  ย  ย  ย  ย length(i.uv)ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  // radius

์ € ๊ธธ์ด ๋ถ€๋ถ„์„

float2 polar = float2(

ย  ย  ย  ย  ย  ย atan2(i.uv.y, i.uv.x) / (2.0f * 3.141592653589f), // angle

ย  ย  ย  ย  ย  ย log(dot(i.uv, i.uv)) * 0.5fย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย // log-radius

ย  ย  ย  ย  );

๋กœ๊ทธ ํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฐ”๊ป๋”๋‹ˆ ๊ธฐ๋ฆฐ์ด ์„ ํ˜•์ ์œผ๋กœ ์ž˜ ์ปค์ง€๊ฒŒ ๋ฐ”๊ผ‡์Œ

๊ทผ๋Œ€ ๋กœ๊ทธ ํ•จ์ˆ˜๊ฐ€ ๋ญ˜ ํ•˜๊ธธ๋ž˜ ๊ธฐ๋ฆฐ์ด ๊ท ์ผํ•˜๊ฒŒ ์ž˜ ์ปค์ง€๊ฒŒ ๋ฐ”๊ผ‡๋Š”์ง€ ๋ชจ๋ฅด๊ฒŸ๋‹ค

์งˆ๋ฌธ์„ ์š”์•ฝํ•˜๋ฉด

log(dot(i.uv, i.uv)) ์ด๊ฒŒ ๋ญ” ๋ง์ธ์ง€ ์•„๋Š” ๊ฒŒ์ด ์ž‡๊ฒŸ๋…ธ

๋กœ๊ทธ ํ•จ์ˆ˜๊ฐ€ ๋ญ˜ ๋ฆฌํ„ดํ•˜๋Š”์ง€๋Š” hlsl ๋ฌธ์„œ ๋ด์„œ ์•Œ๊ฒŸ๋Š”๋ฐ ์™œ ๊ธฐ๋ฆฐ์ด ๊ท ์ผํ•˜๊ฒŒ ์ปค์ง€๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒŸ์Œ

ย