0504 버텍스에 컬러 입히고 다중 텍스쳐 반영하기

2021. 5. 4. 12:36unity/쉐이더

버텍스의 컬러를 확인하는 인풋
위처럼 코드를 입력하면 Green 부분만 1로 표시 된다.

 

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.Emission = lerp(c.rgb, d.rgb, IN.color.r);
            o.Emission = lerp(o.Emission, e.rgb, IN.color.g);
            o.Emission = lerp(o.Emission, f.rgb, IN.color.b);
        }
        ENDCG
    }
    FallBack "Diffuse"
}

각각의 rgb 영역마다 각기 다른 텍스쳐를 입힐 수 있다.

 

폴리브러쉬를 이용해 메터리얼의 버텍스에 색을 칠해주고,

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

        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows


        sampler2D _MainTex;
        sampler2D _MainTex2;
        sampler2D _MainTex3;

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

        void surf (Input IN, inout SurfaceOutputStandard o)
        {
           
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
            fixed4 d = tex2D(_MainTex2, IN.uv_MainTex2);
            fixed4 e = tex2D(_MainTex3, IN.uv_MainTex3);
            
            o.Albedo = lerp(c.rgb, d.rgb, IN.color.r);
            o.Albedo = lerp(o.Albedo, e.rgb, IN.color.b);

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

o.Aldebo = IN.color.rgb;
텍스쳐 3개가 잘 섞였는지 확인