101won 2024. 9. 4. 23:45

골렘 어디가찌..

Shader "Custom/golem"
{
    Properties
    {
          _MainTex ("Albedo (RGB)", 2D) = "white" {}
          _MainTex2 ("Albedo (RGB)", 2D) = "white" {}
          _MainTex3 ("Albedo (RGB)", 2D) = "white" {}

          _BumpMap("BumpMap", 2D) = "bump" {} // 노말을 위한 범프맵, 백터 수치 집함. 디테일이 있는 것처럼 보이게~
         
          _Metallic ("Metallic", Range(0, 1))= 0 // 반사로 금속 재질 효과 적용 0난반사, 1정반사(매끈)
          _Smoothness ("Smoothness", Range(0, 1)) = 0 // 표면을 부드럽고 매끈하게~
          _NormalX ("Normal X", Range(1, 2)) = 1 
          _NormalY ("Normal Y", Range(1, 2)) = 1
          _Occlusion ("Occlusion", 2D) = "white" {} // 음영 조절을 통한 디테일 추가 //반드시 _MainTex와 같은 uv를 사용
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }

        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows
        #pragma target 3.0

        sampler2D _MainTex;
        sampler2D _MainTex2;
        sampler2D _MainTex3;
        sampler2D _BumpMap;
        sampler2D _Occlusion;

        float _Metallic;
        float _Smoothness;
        float _NormalX;
        float _NormalY;

        struct Input
        {
            float2 uv_MainTex;
            float2 uv_MainTex2;
            float2 uv_MainTex3;
            float2 uv_BumpMap;

            float4 color : COLOR; // 버택스 칼라
        };

        void surf (Input IN, inout SurfaceOutputStandard o)
        {
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
            fixed4 c2 = tex2D (_MainTex2, IN.uv_MainTex2);
            fixed4 c3 = tex2D (_MainTex3, IN.uv_MainTex3);

            float4 normalColor = tex2D(_BumpMap, IN.uv_BumpMap);
            float3 normal = UnpackNormal(normalColor);
            o.Normal = float3(normal.x * _NormalX, normal.y * _NormalY, normal.z);
            
            // o.Albedo = IN.color.rgb; // 버택스 칼라 보기
           
            o.Albedo = lerp(c.rgb, c2.rgb, IN.color.r * 0.5);
            o.Albedo = lerp(o.Albedo, c3.rgb, IN.color.g * 0.5);
            o.Metallic = _Metallic;
            // o.Metallic = _Metallic* c.rgb; // 얼굴만 적용
            o.Smoothness = _Smoothness;

            float4 occlusion = tex2D(_Occlusion, c);
            o.Occlusion = occlusion;

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