ShaderLab 문법
ShaderLab: SubShader

ShaderLab: 프로퍼티

쉐이더는 Unity의 material inspector에서 아티스트가 설정가능한 파라미터 리스트을 정의할 수 있습니다. The Properties block in the shader file defines them.

문법

프로퍼티

Properties { Property [Property ...] }

프로퍼티의 블록을 정의합니다. 중괄호{} 안에 다음과 같이 여러 프로퍼티를 정의합니다.

Numbers and Sliders

name ("display name", Range (min, max)) = number
name ("display name", Float) = number
name ("display name", Int) = number

These all defines a number (scalar) property with a default value. The Range form makes it be displayed as a slider between min and max ranges.

Colors and Vectors

name ("display name", Color) = (number,number,number,number)
name ("display name", Vector) = (number,number,number,number)

Defines a color property with default value of given RGBA components, or a 4D vector property with a default value. Color properties have a color picker shown for them, and are adjusted as needed depending on the color space (see Properties in Shader Programs). Vector properties are displayed as four number fields.

Textures

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

Defines a 2D texture, cubemap or 3D (volume) property respectively.

상세정보

쉐이더의 각 프로퍼티는 name 에 의해 참조됩니다(Unity에서 쉐이더 프로퍼티 이름을 밑줄로 시작하는 것은 일반적). 프로퍼티는 메테리얼 인스펙터에서 display name 으로 표시됩니다. 각 프로퍼티의 기본값은 등호 다음의 식으로 주어집니다:

  • RangeFloat 프로퍼티에서는 단일 숫자. 예를 들면 “13.37”.
  • ColorVector 프로퍼티는 괄호()로 둘러싸인 네 개의 숫자. 예를 들면, “1,0.5,0.2,1)”.
  • 텍스처(2D, Rect, Cube)에서는 기본값은 빈 문자열 또는 내장된 기본 텍스처: “white”, “black”, “gray”, “bump”.

Later on in the shader’s fixed function parts, property values can be accessed using property name in square brackets: [name]. For example, you could make blending mode be driven by a material property by declaring two integer properties (say “SrcBlend“ and ”DstBlend”), and later on make Blend Command use them: Blend [_SrcBlend] [_DstBlend].

Shader parameters that are in the Properties block are serialized as Material data. Shader programs can actually have more parameters (like matrices, vectors and floats) that are set on the material from code at runtime, but if they are not part of the Properties block then their values will not be saved. This is mostly useful for values that are completely script code-driven (using Material.SetFloat and similar functions).

Property attributes and drawers

In front of any property, optional attributes in square brackets can be specified. These are either attributes recognized by Unity, or they can indicate your own MaterialPropertyDrawer classes to control how they should be rendered in the material inspector. Attributes recognized by Unity:

  • [HideInInspector] - does not show the property value in the material inspector.
  • [NoScaleOffset] - material inspector will not show texture tiling/offset fields for texture properties with this attribute.
  • [Normal] - indicates that a texture property expects a normal-map.
  • [HDR] - indicates that a texture property expects a high-dynamic range (HDR) texture.
  • [Gamma] - indicates that a float/vector property is specified as sRGB value in the UI (just like colors are), and possibly needs conversion according to color space used. See Properties in Shader Programs.
  • [PerRendererData] - indicates that a texture property will be coming from per-renderer data in the form of a MaterialPropertyBlock. Material inspector changes the texture slot UI for these properties.

예제

// properties for a water shader
Properties
{
    _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) = "" {}
}

텍스처 프로퍼티 옵션 (5.0버전부터 제거됨)

Before Unity 5, texture properties could have options inside the curly brace block, e.g. TexGen CubeReflect. These were controlling fixed function texture coordinate generation. This functionality was removed in 5.0; if you need texgen you should write a vertex shader instead. See Implementing Fixed Function TexGen page page for examples.

관련 항목

ShaderLab 문법
ShaderLab: SubShader