집게사장의 꿈

[Unity URP Shader] 웨이브 본문

그래픽

[Unity URP Shader] 웨이브

Krapboss 2024. 4. 17. 02:52

[출처] Unty Shader Training

https://youtu.be/mlNWoROvavY?si=7XpTECHR_CJ5u62d

 

 

Properties{
,...[생략]
    //NoScaleOffset : tile과 offset을 숨기는 명령
    [NoScaleOffset] _Flowmap("Flowmap", 2D) = "white" {}
}

....[생략]
sampler2D _Flowmap;

VertexOutput vert(VertexInput v)
{
    VertexOutput o; 	 
    o.vertex = TransformObjectToHClip(v.vertex.xyz);    			     		 
    o.uv = v.uv.xy * _MainTex_ST.xy + _MainTex_ST.zw;
    
    //[노이즈 발생]
    half4 noise = tex2Dlod(_Flowmap, float4(o.uv, 0, 0));
    o.vertex.y += sin(_Time.y + v.vertex.x + v.vertex.z) * noise.r * _FlowIntensity ;

    return o;    
}   				 

half4 frag(VertexOutput i) : SV_Target
{
	float4 tex01 = _MainTex.Sample(sampler_MainTex, i.uv);
    float4 color = tex01;
    return color;
}

 

 

# 오브젝트좌표계 vertex 위치에 따른 웨이브 만들기

half4 noise = tex2Dlod(_Flowmap, float4(o.uv, 0, 0));
o.vertex.y += sin(_Time.y + v.vertex.x + v.vertex.z) * noise.r * _FlowIntensity ;

# 오브젝트의 위치에서의 x값과 z값에 따른 사선으로 생성된 파형에 시간값을 더해 움직임을 만듦
sin(_Time.y + v.vertex.x + v.vertex.z)

# Flowmap에서 uv좌표에 해당하는 rgb값을 읽어옵니다.
#float4의 앞에 값을 uv, 뒤에 zw는 LOD에 대한 상세 정보
 half4 noise = tex2Dlod(_Flowmap, float4(o.uv, 0, 0));


# 대각선으로 웨이브를 주며 텍스쳐에 따 노이즈를 주어 일정하지 않은 파동 만들기
o.vertex.y += sin(_Time.y + v.vertex.x + v.vertex.z) * noise.r * _FlowIntensity ;

 

 

 

 

인스펙터

 

 

결과