본문 바로가기

Unity3D C#/유니티 쉐이더 공부

UV 숫자로 변화시키기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Shader "Custom/FirstSurfaceShader" {  
    Properties{
        _MainTex("Albedo (RGB)", 2D) = "white" {}
    }
    SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 200
 
        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows
 
        sampler2D _MainTex;
 
        struct Input {
            float2 uv_MainTex;
        };
        void surf (Input IN, inout SurfaceOutputStandard o) {
            fixed4 c = tex2D(_MainTex, IN.uv_MainTex);
            o.Emission = c.rgb;
            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}
cs

위와 같은 코드가 있을 때 


            fixed4 c = tex2D(_MainTex, IN.uv_MainTex);

이렇게 적용하면 텍스쳐는 다음과 같이 된다.

오른쪽 아래에서 연속되던 텍스쳐가 밀려 내려와 보임

내가 사용한 그림의 경우에선 오른쪽 아래에서 연속되던 것인지는 확인 불가능

모든 vertex에 있는 UV의 값이 0.5씩 증가했으므로, UV의 값이 변했기 때문이고 결과적으로는 왼쪽 아래로 이동한 것



텍스쳐의 Wrap Mode에 따라 다양한 응용 가능할 듯 함

Wrap Mode에는 

Repeat - 반복

Clamp - 끝날 때 색상으로 남은 화면 채우기

Mirror - 거울 효과

Mirror Once - 거울 효과 한 번 후에는 Clamp인 듯

Per-axis - U axis와 V axis 따로 위의 설정을 줌


Repeat / Mirror 

Per-axis - Mirror, Repeat / Per-axis - Clamp, Mirror



UV가 Time으로 흘러가게 하기



내장된 변수인 _Time 사용하여 _Time.y가 일반적인 시간이니 더해줌

            fixed4 c = tex2D(_MainTex, IN.uv_MainTex + _Time.y);


Animated Materials가 켜져있다면 이미지가 움직임. U와 V에 동시에 _Time.y를 더해주기 때문에 대각선으로 움직임

x와 y로 나누어 연산해주면 U 또는 V 방향으로만 흘러가게 할 수 있음


X 방향으로 흘러가게 하고싶을 때

fixed4 c = tex2D(_MainTex, float2(IN.uv_MainTex.x + _Time.y, IN.uv_MainTex.y));

Y 방향으로 흘러가게 하고싶을 때

fixed4 c = tex2D(_MainTex, float2(IN.uv_MainTex.x, IN.uv_MainTex.y + _Time.y));



결과물