pudding81 2024. 2. 26. 11:29

 

Shader "Custom/matcap"
{
    Properties
    {
       
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _MatcapTex("MatcapTex",2D) = "white" {}
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        

        CGPROGRAM
     
        #pragma surface surf _Nolight noambient

        
        #pragma target 3.0

        sampler2D _MainTex;
        sampler2D _MatcapTex;

        struct Input
        {
            float2 uv_MainTex;
            float3 worldNormal;
        };

       
        void surf (Input IN, inout SurfaceOutput o)
        {
           
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
            
            //월드노멀을 뷰노멀로 바꿈
            float3 viewNormal =mul((float3x3)UNITY_MATRIX_V,IN.worldNormal.rgb );
            float2 uv = viewNormal.xy*0.5+0.5;
            // matcap 컬러
            float4 matcapColor =tex2D(_MatcapTex,uv);

            o.Emission = c.rgb * matcapColor.rgb;
            o.Alpha = c.a;
        }


         //커스텀라이트
          float4 Lighting_Nolight(SurfaceOutput s,float3 lightDir, float atten)
        {
            
           
            return float4(0,0,0,s.Alpha);

        }


        ENDCG
    }
    FallBack "Diffuse"
}

 

NormalMap

 

Shader "Custom/matcap"
{
    Properties
    {
       
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _MatcapTex("MatcapTex",2D) = "white" {}
        _Bump("NormalMap",2D)= "white" {}
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        

        CGPROGRAM
     
        #pragma surface surf _Nolight noambient

        
        #pragma target 3.0

        sampler2D _MainTex;
        sampler2D _MatcapTex;
        sampler2D _Bump;

        struct Input
        {
            float2 uv_MainTex;
            float3 worldNormal; INTERNAL_DATA
        };

       
        void surf (Input IN, inout SurfaceOutput o)
        {
           
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
            //노멀맵 적용
            o.Normal = UnpackNormal(tex2D(_Bump, IN.uv_MainTex));
           // o.Emission = WorldNormalVector(IN, o.Normal).rgb; //노멀맵 

            //월드노멀을 뷰노멀로 바꿈
           // float3 viewNormal =mul((float3x3)UNITY_MATRIX_V,IN.worldNormal.rgb );
           // float2 uv = viewNormal.xy*0.5+0.5;
           
            //노멀맵 적용
            float4 matcapColor =tex2D(_MatcapTex,WorldNormalVector(IN, o.Normal));

          
          

            o.Emission = c.rgb * matcapColor.rgb;
            o.Alpha = c.a;
        }


         //커스텀라이트
          float4 Lighting_Nolight(SurfaceOutput s,float3 lightDir, float atten)
        {
            
           
            return float4(0,0,0,s.Alpha);

        }


        ENDCG
    }
    FallBack "Diffuse"
}