4 – 03 쉐이더 Properties (Unity Shader)

Unity Standard Surface Shader 를 적용하는 기본적인 적용 방법과 여러 속성들에 대하여 설명합니다.

Version : Unity 2021.3.5f1

Test Material과 Standard Surface Shader를 생성해준다

shader를 material에 적용해주고 material을 생성한 sphere에 적용 시켜준다.

이제 Test Material shader를 열어보자

Shader "Custom/Test Material"
{
    Properties
    {
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _Glossiness ("Smoothness", Range(0,1)) = 0.5
        _Metallic ("Metallic", Range(0,1)) = 0.0
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 200

        CGPROGRAM
        // Physically based Standard lighting model, and enable shadows on all light types
        #pragma surface surf Standard fullforwardshadows

        // Use shader model 3.0 target, to get nicer looking lighting
        #pragma target 3.0

        sampler2D _MainTex;

        struct Input
        {
            float2 uv_MainTex;
        };

        half _Glossiness;
        half _Metallic;
        fixed4 _Color;

        // Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader.
        // See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing.
        // #pragma instancing_options assumeuniformscaling
        UNITY_INSTANCING_BUFFER_START(Props)
            // put more per-instance properties here
        UNITY_INSTANCING_BUFFER_END(Props)

        void surf (Input IN, inout SurfaceOutputStandard o)
        {
            // Albedo comes from a texture tinted by color
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
            o.Albedo = c.rgb;
            // Metallic and smoothness come from slider variables
            o.Metallic = _Metallic;
            o.Smoothness = _Glossiness;
            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

Shader

쉐이더가 시작한다는 의미이며 큰 의미는 없습니다.


“Custom/Test Material”

메터리얼에서 선택할 수 있는 쉐이더의 이름입니다.

/  를 사용하면 트리구조가 생기고 없으면 루트 위치에 쉐이더가 생성됩니다.

많은 쉐이더를 관리할떄 사용합니다. 

( ” 를 확실하게 닫는 것에 주의합니다.)


Properties

쉐이더의 인터페이스 부분입니다.

이 부분에 코드를 작성하면 아래와 같이 메터리얼에서 인터페이스로 볼 수 있습니다.

주석 처리 시 사라집니다.

https://docs.unity3d.com/kr/530/Manual/SL-Properties.html <- 한글

https://docs.unity3d.com/Manual/SL-Properties.html <- 영문

위의 사이트에서 Float / Float4 / Sampler를 받는 인터페이스를 확인 할 수 있습니다.


Range는 최솟값 / 최댓값을 입력하면 이 값에 해당하는 슬라이더가 나오는 명령입니다.

= 0 은 초기 값입니다. 나중에 인터페이스에서 값을 조절하면 무시됩니다.

_TestRange 에 입력되는 값은 flaot 입니다. 

Float은 한 자리의 소수점을 입력받는 인터페이스를 만들어 줍니다.

인터페이스에서 값을 직접 입력하는 방식이 Range와 차이점입니다.

_TestFloat 입력되는 값은 flaot 입니다. 

Color 인터페이스를 만들게 됩니다.

Color는 R G B A 라는 4자리 숫자를 입력받을 수 있으므로

_TestColor는 float4를 받게 됩니다.

Vector 는 float4를 직접 숫자로 입력받을 수 있는 인터페이스입니다.

color 와 같은 데이터지만 색상이 아닌 값으로 입력을 받는다는 것이 다릅니다.

_TestVector 는 float4를 받게 됩니다.

text2D 

float 계열로 분류되지 않는 sampler 들입니다.

텍스처는 UV 좌표와 함께 계산되어야 float4로 출력될 수 있기 때문에,

아직 UV와 계산이 되지 않은 텍스처는 색상(float4)으로 나타낼 수 없습니다.

그래서 이때까지는 sampler라고 부릅니다.

그 중 text2D는 2D 텍스처를 받는 인터페이스를 만들어 줍니다.

(나중에 UV와 결합되어야 float4로 사용 가능합니다.)

2D는 이 인터페이스가 2D 텍스처를 받는 다는 의미입니다. 

name ("display name", 2D) = "defaulttexture" {}

name ("display name", Cube) = "defaulttexture" {}

name ("display name", 3D) = "defaulttexture" {}

위와 같이 사용합니다.

“Albedo (RGB)” 는 이 프로퍼티에는 Albedo 텍스쳐를 사용 / A 채널을 제외한 RGB채널을 사용한다는 뜻입니다.

” ”   안은 해당 프로퍼티가 제어하고 사용할 수 있는지를 설명해주는 영역입니다.

white” {}는 이 텍스쳐 인터페이스가 처음 생겨서 아무것도 들어있지 않을 때,

기본으로 white 텍스쳐가 출력된다는 의미입니다.

white / black / red 등 다른 색도 가능합니다.

확인 시 _TestTex  ->  _MainTex 로 변경  


Properties 의 추가 기능

[HideInInspector]

– 존재하지만 Inspector에 보이지 않게 만들어 줍니다.

  스크립트로 접근해야 하지만 아티스트가 Inspector 에서 건드리면 곤란할 때 사용하면 좋습니다.

[NoScaleOffset]

– 텍스처의 UV 스타일링과 옵셋 메뉴가 없어집니다.

   UV 타일링이나 옵셋을 다른 인터페이스로 조절하도록 만든 경우에 사용하면 좋습니다.

[Normal]

 – 텍스쳐 속성에 노말맵이 들어올 것으로 예상시킵니다.

    만약 노말맵이 들어오지 않으면 경고를 표시하고 노멀맵으로 강제 변환을 물어봅니다.

[HDR]

– 텍스쳐 속성에 HDR 텍스쳐가 들어올 것으로 예상시킵니다.

  컬러 Properties 에서 사용하면 HDR 컬러 입력 인터페이스를 만들 수 있습니다.

[Toggle]

– toggle 메뉴가 생깁니다.

  출력되는 값은 0.0 과 1.0 입니다.

[Enum(이름1, 1의값, 이름2, 2의값)]

– float 값의 팝업메뉴를 생성합니다.

 ( ) 안에는 네임스페이스로 규정된 유형을 넣거나 이름, 값으로 이루어진 한 쌍의 데이터로 작성될 수 있습니다.

 최대 7개 까지 가능합니다.

[PowerSlider( )]

– 제곱이 적용된 슬라이더를 만듭니다.  ( )안에 4.0 을 넣으면 4의 제곱 3.0을 넣으면 3의 제곱이 됩니다.

  처음에는 값을 천천히 올라가다가 나중에는 값이 급격하게 올라가는 슬라이더를 만들 때 사용합니다.

  스펙큘러 값처럼, 처음에는 민감하게 반응하다가 값이 커질수록 둔감해지는 옵션을 위한 조절자를 생성하는 데 이용하면 좋습니다.

[KeywordEnum(이름1, 이름2 ….)]

– 각 이름의 이넘(Enum)이 생성됩니다.  각각 0, 1, 2 값이 들어옵니다.

  최대 9개까지 가능합니다. 

[Space]   /  [Space(number)]

– [Space]  한칸 아래로 이동시킵니다. 여러번 사용 시 중첩됩니다.

– [Space(number)] number 의 숫자 포인트 만큼 아래로 이동시킵니다.

  아래의 예제는 56포인트 이동입니다.

[Header (A group of thiongs)] 

– 볼드체의 제목이 생깁니다

   쉐이더 메뉴를 정리하는데 유용합니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤