Unity3D/Shader

Unity) [Shader] 불 이펙트 만들기

HSH12345 2023. 3. 16. 09:28
Shader "Custom/fire"
{
    Properties
    {
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _MainTex2 ("Albedo (RGB)", 2D) = "white" {}
        _Strength ("Strength", Range(0,10)) = 0
    }
    SubShader
    {//"Queue" = "Transparent" 불투명 렌더타입의 렌더순서를 정해줘서 카메라를 통해 순서에 맞게 출력되도록 설정
        Tags { "RenderType"="Transparent" "Queue" = "Transparent"}
        CGPROGRAM

        #pragma surface surf Standard alpha:fade
        #pragma target 3.0

        sampler2D _MainTex;
        sampler2D _MainTex2;
        float _Strength;

        struct Input
        {
            float2 uv_MainTex;
            float2 uv_MainTex2;
        };

        void surf (Input IN, inout SurfaceOutputStandard o)
        {
            fixed4 d = tex2D(_MainTex2, float2(IN.uv_MainTex2.x, IN.uv_MainTex2.y - (_Time.y * +_Strength)));
            fixed4 c = tex2D(_MainTex, IN.uv_MainTex + d.r);

            o.Emission = c.rgb;
            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

 

 - 배경을 반투명하게 만늘기 위해 렌더타입을 Transparent로 지정한다.

  - 두 개의 텍스쳐를 활용하여, 하나의 텍스쳐에는 uv의 y좌표 값에 -연산을 하여 아래에서 위로 흐르는 듯한 효과를 주고, 다른 하나는 이전 텍스쳐의 r 값을 활용하여 흰색 부분만 출력되록 한다.