Unity/Shader

[5.4] 색깔 영역에 각각 다른 텍스쳐 삽입

ljw4104 2021. 5. 4. 11:19

예제 VertexColor 및 결과물

Shader "Custom/Test"
{
    Properties
    {
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _MainTex2 ("Albedo (RGB)", 2D) = "white" {}
        _MainTex3 ("Albedo (RGB)", 2D) = "white" {}
        _MainTex4 ("Albedo (RGB)", 2D) = "white" {}
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }

        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows

        sampler2D _MainTex;
        sampler2D _MainTex2;
        sampler2D _MainTex3;
        sampler2D _MainTex4;

        struct Input
        {
            float2 uv_MainTex;
            float2 uv_MainTex2;
            float2 uv_MainTex3;
            float2 uv_MainTex4;
            float4 color:COLOR;
        };

        void surf (Input IN, inout SurfaceOutputStandard o)
        {
            float4 c = tex2D (_MainTex, IN.uv_MainTex);
            float4 d = tex2D (_MainTex2, IN.uv_MainTex);
            float4 e = tex2D (_MainTex3, IN.uv_MainTex);
            float4 f = tex2D (_MainTex4, IN.uv_MainTex);

            o.Albedo = lerp(c.rgb, d.rgb, IN.color.r);
            o.Albedo = lerp(o.Albedo, e.rgb, IN.color.g);
            o.Albedo = lerp(o.Albedo, f.rgb, IN.color.b);
            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}
  • Vertex Color의 R영역, G영역, B영역에 각각 다른 텍스쳐를 삽입. ( 텍스쳐 4장을 받아야된다 )
  • Input 구조체의 color:COLOR는 현재 오브젝트의 Vertex Color를 가져올 수 있다.