# 3-3 [Flow Map, Control Intensity&Time]

Ricon·2024년 8월 9일

URP Shader Basic

목록 보기
12/17

본 게시물은 Unity Korea 채널의 URP Shader Training 시리즈와 강의에 사용된 도큐먼트를 공부하며 정리한 게시물입니다.

강의 링크
도큐먼트 링크


Flow Map을 활용한 UV Animation Shader 제작

다른 텍스쳐를 사용해서 UV 움직임에 임의의 값을 추가해서 변화를 주는 방식 사용.

Texture Sampling 추가

Properties
{
	_TintColor("Test Color", Color) = (1, 1, 1, 1)
	_Intensity("Range Sample", Range(0, 1)) = 0.5
	_MainTex("Main Texture", 2D) = "white"{}
	[NoScaleOffset] _FlowMap("Flow Map", 2D) = "white" {}
}

[NoScaleOffset]은 Properties에서 tile과 offset을 숨김.
앞의 텍스쳐에 사용되는 Sampler값을 같이 사용하기 떄문에 Inspector 창에 노출될 필요가 없기 때문.

스크롤되는 Time값은 시간이 지날수록 계속 커지게 되므로, 잘라서 사용하기 위해 frac함수 사용.

frac(x) : x의 소수점 이하 부분 Return

half4 frag(VertexOutput i) : SV_TARGET
{
	float4 flow = _FlowMap.Sample(sampler_MainTex, i.uv);
	i.uv += frac(_Time.x) + flow.rg;
	float4 color = _MainTex.Sample(sampler_MainTex, i.uv);
	color.rgb *= _TintColor * _Intensity;
	return color;
}


Flow Intensity, Flow Time

Flow Intensity, Flow Time과 같은 Properties 추가로 Shader 조정 가능

Properties
{
	_TintColor("Test Color", Color) = (1, 1, 1, 1)
	_Intensity("Range Sample", Range(0, 1)) = 0.5
	_MainTex("Main Texture", 2D) = "white"{}
	[NoScaleOffset] _FlowMap("Flow Map", 2D) = "white" {}
	_FlowIntensity("Flow Intensity", range(0, 1)) = 1
	_FlowTime("Flow Time", Range(0, 10)) = 1
}
half4 frag(VertexOutput i) : SV_TARGET
{
	float4 flow = _FlowMap.Sample(sampler_MainTex, i.uv);
	i.uv += frac(_Time.x * _FlowTime) + flow.rg * _FlowIntensity; 
	float4 color = _MainTex.Sample(sampler_MainTex, i.uv);
	color.rgb *= _TintColor * _Intensity;
	return color;
}

0개의 댓글