카테고리 없음

쉐이더의 이름 변경과 변수의 활용

zelkova 2021. 3. 9. 10:22

<목차로 돌아가기>

 

이름 변경방법

이전 포스팅에서 만든 쉐이더를 열어보면 제일 상단에 아래와 같이 나와 있을겁니다.

빨간색 부분이 쉐이더의 이름입니다. 

' / '으로 그룹을 지을 수 있씁니다.

이전 포스팅에서는 Custom  안에 CGTest_CreateSurface 라고 명명되어 있었습니다.

/를 제거하고

Shader "CGTest_CreateSurface"를 입력하면 메테리얼에서 쉐이더를 선택할 때 바로 보이는것을 확인할 수 있습니다.

 

Properties 적용해보기

 

▷ 변수 지정 방법

_변수명 ("인스펙터에 보여지는 이름", 데이터타입) = 데이터 타입에 초기 값

Shader "Custom/colorShader" {
    Properties {
        _MainTex ("Albedo (RGB)", 2D) = "white" {}5
        _Metallic("Metallic", Range(0,1)) = 0.0
        _FloatValue("floatValue", float) = 0.3
        _ColorValue("ColorValue", Color) = (0,0,0,0)
        _VectorValue("VectorValue",Vector) = (0,1,2,3)
    }
}


▷Range

_Metallic ("Metallic", Range(0,1)) = 0.0

 

▷Float

_FloatValue("floatValue", float) = 0.3

 

▷Color

_ColorValue("ColorValue", Color) = (0,0,0,0)

▷Vector

 _VectorValue("VectorValue",Vector) = (0,1,2,3)

▷2D Tex

_MainTex ("Albedo (RGB)", 2D) = "white" {}

 

변수를 이용한 색상값 변경하기

 

Shader "Custom/CGTest_CreateSurface"
{
    Properties{
        _ColorValue("ColorValue", Color) = (0,0,0,0)
    }
    SubShader{
        Tags { 
            "RenderType"="Opaque" 
        }
        Pass{
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"

            CBUFFER_START(UnityPerMaterial) 
                float4 _ColorValue;
            CBUFFER_END
            
            struct appdata
            {
                float4 vertex : POSITION;
                float3 normal : NORMAL;
            };
            struct v2f
            {
                float4 vertex : SV_POSITION;
                float3 normal : COLOR2;
            };

            v2f vert(appdata v){
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.normal = v.normal;
                return o;
            }

            fixed4 frag(v2f i) : SV_Target{
                fixed4 testColor;
                testColor = float4(1, 1, 1, 1) * _ColorValue;
                return testColor;
            }
            ENDCG
        }
    }
    FallBack "Diffuse"
}

 

PS. ㅠ_ㅠ.. CG를 URP로 호환시키는 방법 몰라서.. 삽질했음.. 책에도 안나오고.. 구글형님도 배신하고...
결국은 git가서 외쿡님들의 소스보고 분석해서 해결! 감격!

 

 

슬라이드바를 사용한 RGB조절하기.

Shader "Custom/CGTest_SliderColorChange"{
    Properties{
            _Red("Red", Range(0,1)) = 0.5
            _Green("Green", Range(0,1)) = 0.5
            _Blue("Blue", Range(0,1)) = 0.5
    }

    SubShader{
        Tags {
            "RenderType" = "Opaque"
        }
        Pass{
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"

            CBUFFER_START(UnityPerMaterial)
                float _Red;
                float _Green;
                float _Blue;
            CBUFFER_END

            struct appdata
            {
                float4 vertex : POSITION;
                float3 normal : NORMAL;
            };
            struct v2f
            {
                float4 vertex : SV_POSITION;
                float3 normal : COLOR2;
            };

            v2f vert(appdata v) {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.normal = v.normal;
                return o;
            }

            fixed4 frag(v2f i) : SV_Target{
                fixed4 testColor;
                testColor = float4(_Red, _Green, _Blue, 1);
                return testColor;
            }
            ENDCG
        }
    }
    FallBack "Diffuse"
}

 

반응형