ShaderLab syntax: Properties

쉐이더는 Unity의 material inspector에서 아티스트에 의해 세팅된 파라미터의 리스트를 정의할 수 있습니다. 쉐이더 파일의 속성 블록은 그들을 정의합니다.

Syntax

:_Properties_ { Property [Property …] }: 속성 블록을 정의합니다. 중괄호안에 다수의 속성은 다음과 같이 정의됩니다. :name ("display name", _Range_ (min, max)) = number: 인스펙터에서 minmax 사이의 슬라이더로 나타나는 소수점 속성을 정의합니다. :name ("display name", _Color_) = (number,number,number,number): 색상 속성을 정의합니다. :name ("display name", _2D_) = "name" { options }: 2D 텍스쳐 속성을 정의합니다. :name ("display name", _Rect_) = "name" { options }: 직사각형 (2의 지수가 아닌) 텍스쳐 속성을 정의합니다. :name ("display name", _Cube_) = "name" { options }: Cubemap 텍스쳐 속성을 정의합니다. :name ("display name", _Float_) = number: 소수점 속성을 정의합니다. :name ("display name", _Vector_) = (number,number,number,number): 네 개의 컴포넌트 벡터 속성을 정의합니다.

Details

쉐이더 내부의 각 속성은 _name_에 의해 참조됩니다 (Unity에서 밑줄과 함께 쉐이더 속성 이름을 시작하는 것이 공통적입니다). 속성은 _display name_로서 재질 인스펙터에 나타날 것입니다. 각 속성을 위해서 기본값은 등호 이후에 주어집니다:

  • RangeFloat 속성을 위해서 그것은 단순한 하나의 숫자입니다.
  • ColorVector 속성을 위해서 그것은 괄호안의 네 개의 숫자입니다.
  • 텍스쳐를 위해서 (2D, Rect, Cube) 기본값은 빈 스트링이거나 또는 내장된 기본 텍스쳐 중 하나입니다: "white", "black", "gray" 또는 "bump".

이후에 이 쉐이더에서 속성 값은 사각 괄호안에 속성 이름을 사용해서 접근됩니다: _[name]_.

Example

Properties {
    // properties for water shader
    _WaveScale ("Wave scale", Range (0.02,0.15)) = 0.07 // sliders
    _ReflDistort ("Reflection distort", Range (0,1.5)) = 0.5
    _RefrDistort ("Refraction distort", Range (0,1.5)) = 0.4
    _RefrColor ("Refraction color", Color)  = (.34, .85, .92, 1) // color
    _ReflectionTex ("Environment Reflection", 2D) = "" {} // textures
    _RefractionTex ("Environment Refraction", 2D) = "" {}
    _Fresnel ("Fresnel (A) ", 2D) = "" {}
    _BumpMap ("Bumpmap (RGB) ", 2D) = "" {}
} 

Texture property options

텍스쳐 속성의 괄호안의 옵션은 선택적입니다. 가능한 옵션은 다음과 같습니다:

:_TexGen_ texgenmode: 이 텍스쳐를 위한 자동적인 텍스쳐 좌표 생성 모드. ObjectLinear, EyeLinear, SphereMap, CubeReflect, CubeNormal 중 하나일 수 있습니다; 이러한 것들은 직접적으로OpenGL texgen 모드와 관련됩니다. 사용자 정의 꼭지점 프로그램이 사용되면 TexGen이 무시되는 것을 참고하시기 바랍니다. :_LightmapMode_: 주어지면 이 텍스쳐는 렌더러 당 lightmap 파라미터에 의해서 영향을 받을 것입니다. 즉 사용하는 텍스쳐는 재질안에 있을 수 없습니다. 그러나 그것은 렌더러의 세팅으로부터 취해질 수 있습니다. Renderer scripting documentation을 참고하시기 바랍니다.

Example

// EyeLinear texgen mode example
Shader "Texgen/Eye Linear" {
    Properties {
        _MainTex ("Base", 2D) = "white" { TexGen EyeLinear }
    }
    SubShader {
        Pass {
            SetTexture [_MainTex] { combine texture }
        }
    }
} 

역링크