본문 바로가기

카테고리 없음

Unity 쉐이더 Lerp 함수

반응형

 

Lerp함수 이용시 텍스쳐 이미지 섞었을때 

1.Lerp 함수란

 

Linear Interpolation = 선형보간이라고 한다.

- 어떤 수치에서 값이 변경될때 한번에 변경되지않고 ( 계단식), 부드럽게 변경되는것

- 오브젝트를 부드럽게 이동시키거나, 회전할때 사용

- 카메라 추적 스크립트에도 적용 가능

 

Lerp(X,Y,s)

X와 Y는 같은단위이며 s는 float여야 한다.

 

 

Shader "Custom/BasicShader_lerp"
{
    Properties
    {
       //_Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _MainTex2 ("Albedo (RGB)", 2D) = "white" {}
        _lerpTest ("lerp 기능 테스트" , Range(0,1)) =0
       
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 200

        CGPROGRAM
  
        #pragma surface surf Standard fullforwardshadows

       
        sampler2D _MainTex;
        sampler2D _MainTex2;
        float _lerpTest;
        struct Input
        {
            float2 uv_MainTex;
            float2 uv_MainTex2;
        };

    

        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"
}

 

 

 

 

  • lerp함수를 사용하기위해서는 두개의 텍스쳐를 받아야함
  • Lerp 기능 테스트를 위한 인터페이스 추가










     
  • 2개의 텍스쳐를 입력받기위한 코드 추가
  • 슬라이드 바에서 받는 숫자값 


  • 두번째 텍스쳐의 uv 값 선언

 

 

  • 입력 받은 C 이미지 표출
  • 입력 받은 D 이미지 표출
  • lerp함수를 활용(c이미지, d이미지,슬라이더 값대로 표출)

 

나는 고양이사진과 안경을 준비했다.

슬라이더를 조절하는 결과는?

float 로받은 _lerptest 가 0이면 고양이사진(c.rgb) , 1일때 선글라스 사진(d.rgb) 이 표출된다

그 사이값인 0.5이면 겹쳐진 모습이겠다.

 

그렇다면 저 선글라스를 고양이에게 씌울순 없을까?

 

 

2. Lerp함수 응용

 

내가 가져온 선글라스 이미지는 알파값을 가지고있다.

이걸 활용해서 고양이에게 선글라스를 씌워보겠다.

이 흰부분만 남기고 검은색 부분에는 고양이 사진으로 채워야한다.

그렇다면 d이미지(선글라스) 의 알파값을 활용해야한다.

 

 

  • (c 이미지,d이미지, d의 알파값)

 

 

결과가 잘나올까?

선글라스 크기가 좀만 작았으면 딱이였겠다.

다음엔 사이즈 맞게 잘 가져와야지 

 

 

사용된 고양이 사진은 저희집 공주입니다 
이름이 공주에요 .
자랑맞아요..

 

반응형