-
[유니티 쉐이더 스타트업] 2개의 텍스쳐를 섞어서 출력하는 방법(lerp 함수)프로그래밍/Unity Shader 2019. 5. 21. 16:21
https://zerodeg.tistory.com/41
[유니티 쉐이더] 이미지를 흑백으로 만들기
https://zerodeg.tistory.com/40 [유니티 쉐이더] 쉐이더 코드를 깔끔하게 정리하는법 https://zerodeg.tistory.com/39 [Unity Shader] 색상을 입력 받아 출력해보기 - 2 https://zerodeg.tistory.com/36?category..
zerodeg.tistory.com
안녕하세요. 저번 시간에는 이미지를 흑백으로 만드는 방법에 대해서 알아보았었는데요. 오늘은 두 개의 텍스쳐를 하나의 오브젝트에 섞어서 출력하는 방법에 대해서 알아보려고 합니다. 두 개의 텍스쳐를 섞기 위해서 lerp라는 함수를 사용할건데, 여기서 lerp란 Linear Interpolation 의 약자로 '선형보간'이라고 번역할 수 있습니다. 말로는 어렵지만 쉽게 말하면 그라데이션과 같은 것을 이야기 하는데요. 비어진 곳 없이 서서히 변화되어 가는 것을 뜻한다고 생각하면 될 것 같습니다.
lerp(rgb, rgb, float);
lerp 함수는 위와 같이 사용되는데요. rgb 두개와 float 하나의 매개변수로 이루어져 있습니다. 그럼 아래 코드처럼 텍스쳐를 받는 인터페이스를 하나 더 생성해주겠습니다.
Shader "Custom/lerp" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _MainTex2("Albedo (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM // Physically based Standard lighting model, and enable shadows on all light types #pragma surface surf Standard fullforwardshadows // Use shader model 3.0 target, to get nicer looking lighting #pragma target 3.0 sampler2D _MainTex; sampler2D _MainTex2; struct Input { float2 uv_MainTex; float2 uv_MainTex2; }; void surf (Input IN, inout SurfaceOutputStandard o) { // Albedo comes from a texture tinted by color fixed4 c = tex2D (_MainTex, IN.uv_MainTex); fixed4 d = tex2D(_MainTex2, IN.uv_MainTex2); o.Albedo = c.rgb; o.Alpha = c.a; } ENDCG } FallBack "Diffuse" }
이제 o.Albedo 에 lerp 함수를 적용시켜 보겠습니다. 인자는 lerp(c.rgb, d.rgb, 0) 입니다. 코드를 수정한 뒤에 유니티로 돌아와서 방금 작성한 쉐이더를 적용한 Material을 Plane에 적용한 뒤에 살펴보겠습니다. 텍스쳐 두개는 원하는 것으로 하시면 되겠습니다. 저는 풀과 바닥으로 했습니다.
o.Albedo = lerp(c.rgb, d.rgb, 0);
plane에 작성한 쉐이더를 적용한 Material을 적용했지만 그대로이다. 자 그럼 이번에는 마지막 인자에 1을 줘보도록 하겠습니다.
o.Albedo = lerp(c.rgb, d.rgb, 1);
1로 주었더니 두번째 텍스쳐가 나타났다. 대충 감이 오시죠?? 즉 0일 때는 첫번째 인자의 텍스쳐가, 1일 때는 두번째 인자의 텍스쳐가 출력되었습니다. 그럼 두 텍스쳐를 섞으려면 그 사잇값을 넣어주면 되겠지요. 0.5를 넣어서 확인해보겠습니다.
o.Albedo = lerp(c.rgb, d.rgb, 0.5);
두 텍스쳐가 적절히 섞였다. 사진처럼 두 텍스쳐가 섞여있는 것을 확인하실 수 있을겁니다. 오늘은 두 텍스쳐를 어떻게 섞어서 출력하는지에 대해서 알아보는 시간을 가져봤습니다. 유튜브 채널에도 블로그에 포스팅한 내용을 바탕으로 영상이 업로드 되고 있으니 찾아와주세요^^ 오늘 포스팅은 여기까지입니다.
https://www.youtube.com/channel/UC9A518WfCL5Ubh-NQ08jduw/
제로딕 코딩공부
www.youtube.com
'프로그래밍 > Unity Shader' 카테고리의 다른 글
[유니티 쉐이더 스타트업] UV가 뭘까? (0) 2019.05.28 [유니티 쉐이더 스타트업] 이미지를 흑백으로 만들기 (2) 2019.05.20 [유니티 쉐이더 스타트업] 쉐이더 코드를 깔끔하게 정리하는법 (0) 2019.05.19 [유니티 쉐이더 스타트업] 색상을 입력 받아 출력해보기 - 2 (0) 2019.05.18 [유니티 쉐이더 스타트업] 색상을 입력받아 출력해보기 - 1 (0) 2019.05.13