lerp 함수의 응용
lerp 함수는 lerp(X,Y,s) 형태로 사용되고 X와 Y는 반드시 같은 단위여야 함(float/float2/float3/float4)
s인자는 반드시 한 자리의 수인 float 사용. 이 수치가 0이면 X가 출력되고 1이면 Y가 출력되고, 0.5면 X,Y가 반씩 섞여서 출력됨
마지막 인자인 s를 인터페이스와 연결하여 X 텍스쳐가 Y 텍스쳐로 변하는 기능 생성 가능
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 26 27 28 29 30 31 | Shader "Custom/NewSurfaceShader" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _MainTex2 ("Albedo (RGB)", 2D) = "white" {} _lerpTest("lerp 인터페이스", Range(0,1)) = 0; } SubShader { Tags { "RenderType"="Opaque" } CGPROGRAM #pragma surface surf Standard fullforwardshadows sampler2D _MainTex; sampler2D _MainTex2; float _lerpTest; struct Input { float2 uv_MainTex; }; void surf (Input IN, inout SurfaceOutputStandard o) { fixed4 c = tex2D (_MainTex, IN.uv_MainTex); fixed4 d = tex2D (_MainTex2, IN.uv_MainTex2); o.Albedo = lerp(c.rgb, d.rgb, _lerptest); o.Alpha = c.a; } ENDCG } FallBack "Diffuse" } | cs |
인터페이스를 조절하여 텍스쳐1번과 2번 사이를 오갈 수 있음
만약 c가 알파채널이 존재하는 텍스쳐라면
o.Albedo = lerp(c.rgb, d.rgb, c.a);
이와 같이 입력했을 때 알파 채널의 강도에 의해 합쳐지게 됨.
알파채널의 강도에 의해 합쳐지는 것을 응용하면
반복된 타일로 이루어진 벽에 검은 물이 흐른 자국 등을 만들거나 마을의 벽돌 바닥에 새겨진 마크 등을 그릴 수 있음.
'Unity3D C# > 유니티 쉐이더 공부' 카테고리의 다른 글
UV 숫자로 변화시키기 (0) | 2018.01.09 |
---|---|
UV의 기본개념과 시각적 확인 (0) | 2018.01.08 |
쉐이더 조절로 이미지 흑백 만들기와 Lerp 함수의 기본 (0) | 2018.01.06 |
기본 쉐이더 코드의 텍스쳐 부분 알아보기 (0) | 2018.01.05 |
변수와 인터페이스 활용 (0) | 2018.01.01 |