101won 2024. 9. 6. 18:28

 

Shader "Custom/axe"
{
    Properties
    {
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _Gloss ("Gloss", Range(0,1)) = 0.25
        _Specular("Spec",  Range(0,1)) = 0.8
        _SpecColor("Specular Color", color) = (1,1,1,1)
        
        _NoiseStrangth("Noise Strangth", float) = 2 // 강도 제어 슬라이더
        _NoiseSpeed("Noise Speed", Range(0,5)) = 0.1 // 속도 제어 슬라이더

         _RedTex ("Red Tex", 2D) = "white" {}
         _NoiseAniTex ("Noise AniTex", 2D) = "white" {}
         _GreenTex ("Green Tex", 2D) = "white" {}
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }

        CGPROGRAM
        #pragma surface surf BlinnPhong
        #pragma target 3.0

        sampler2D _MainTex;
        sampler2D _RedTex;
        sampler2D _NoiseAniTex;
        sampler2D _GreenTex;

        float _Gloss;
        float _Specular;
        float _NoiseStrangth;
        float _NoiseSpeed;
       // float4 _SpecColor; // 변수 선언하면 안된다

        struct Input
        {
            float2 uv_MainTex;
            float2 uv_RedTex;
            float2 uv_NoiseAniTex;
            float2 uv_GreenTex;
            float4 color:Color;
        };

        void surf (Input IN, inout SurfaceOutput o)
        {
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
            
         //   fixed4 GreenTex = tex2D (_GreenTex, IN.uv_GreenTex);

             // 노이즈 애니매이션 적용
            fixed4 NoiseAniTex = tex2D (_NoiseAniTex, float2(IN.uv_NoiseAniTex.x, IN.uv_NoiseAniTex.y - (_Time.y *_NoiseSpeed))); // 시간에 보정 속도를 곱함
            fixed4 RedTex = tex2D (_RedTex, IN.uv_RedTex + NoiseAniTex * _NoiseStrangth); // r애니매이션
            fixed4 GreenTex = tex2D (_GreenTex, IN.uv_GreenTex + NoiseAniTex * _NoiseStrangth); // g애니매이션 (b도 하고 싶었는데 텍스쳐가 넘 많다함ㅠㅠ)

            // o.Albedo = IN.color; // 버택스 확인용
              o.Albedo = c.rgb *_Gloss * _Specular;
           // o.Gloss= _Gloss;
            //  o.Specular = _Specular;

            o.Emission = lerp(o.Albedo, RedTex.rgb, IN.color.r);
            o.Emission = lerp(o.Emission, GreenTex.rgb, IN.color.g);
            o.Alpha = o.Alpha;
        }
        ENDCG
    }
    FallBack "Diffuse"
}