셰이더는 Unity의 머티리얼 인스펙터에서 아티스트의 설정을 위한 파라미터 리스트를 정의할 수 있습니다. 셰이더 파일의 프로퍼티 블록이 이를 정의합니다.
Properties { Property [Property ...] }
프로퍼티 블록을 정의합니다. 중괄호 안에 다음과 같이 여러 프로퍼티를 정의합니다.
name ("display name", Range (min, max)) = number
name ("display name", Float) = number
name ("display name", Int) = number
모두 디폴트로 숫자(스칼라) 프로퍼티를 정의합니다. Range
형식은 min, max 범위 사이에서 슬라이더로 표시됩니다.
name ("display name", Color) = (number,number,number,number)
name ("display name", Vector) = (number,number,number,number)
주어진 RGBA 컴포넌트 또는 4D 벡터 프로퍼티의 디폴트로 컬러 프로퍼티를 정의합니다. 컬러 프로퍼티에는 컬러 피커가 표시되며 필요한 색 공간에 따라서 조절됩니다. 셰이더 프로그램 프로퍼티를 참조하십시오. 벡터 프로퍼티는 숫자 필드 4개로 표시됩니다.
name ("display name", 2D) = "defaulttexture" {}
name ("display name", Cube) = "defaulttexture" {}
name ("display name", 3D) = "defaulttexture" {}
각각 2D 텍스처, 큐브맵, 3D(영역) 프로퍼티를 정의합니다.
셰이더에서 각 프로퍼티는 name으로 참조됩니다. Unity에서는 밑줄 표시로 셰이더 프로퍼티 이름을 시작하는 것이 일반적입니다. 프로퍼티는 머티리얼 인스펙터에서 display name으로 나타납니다. 각 프로퍼티에서 디폴트는 등호 뒤에 부여됩니다.
차후 셰이더의 고정 함수 파트에서 프로퍼티 값은 대괄호 프로퍼티 이름을 사용하여 액세스될 수 있습니다([name]). 예를 들어, 머티리얼 프로퍼티로부터 두 정수 프로퍼티(“SrcBlend“, ”DstBlend”)를 선언하여 블렌딩 모드를 구동할 수 있으며, 차후 Blend 커맨드가 이것을 사용하도록 할 수 있습니다(Blend [_SrcBlend] [_DstBlend]
).
Properties
블록에 존재하는 셰이더 파라미터는 머티리얼 데이터로 직렬화됩니다. 셰이더 프로그램은 실제로 런타임의 코드로부터 머티리얼에 설정된 더 많은 파라미터(매트릭스, 벡터, 플로트)를 보유할 수 있지만 프로퍼티 블록의 일부가 아닌 경우 이 값은 저장되지 않습니다. 이것은 대개 완전히 스크립트 코드 기반인 값에 유용합니다(Material.SetFloat 및 유사한 함수 사용).
모든 프로퍼티 앞 대괄호 안에는 선택적 속성을 지정할 수 있습니다. Unity에서 인식되는 속성이나 머티리얼 인스펙터에서 어떻게 렌더링돼야 ㅎ는지 제어하기 위한 자체적인 MaterialPropertyDrawer 클래스를 나타낼 수 있습니다. Unity에서 인식되는 속성은 다음과 같습니다.
[HideInInspector]
- 머티리얼 인스펙터에 프로퍼티 값을 표시하지 않습니다.[NoScaleOffset]
- 머티리얼 인스펙터는 이 속성을 포함한 텍스처 프로퍼티에 대해 텍스처 타일링/오프셋 필드를 표시하지 않습니다.[Normal]
- 텍스처 프로퍼티의 노멀맵 예상 여부를 나타냅니다.[HDR]
- 텍스처 프로퍼티의 HDR 텍스처 예상 여부를 나타냅니다.[Gamma]
- 플로트/벡터 프로퍼티가 UI에서 sRGB로 지정되고(컬러와 동일) 사용되는 색 공간에 따라 변환이 필요할 수도 있음을 나타냅니다. 셰이더 프로그램 프로퍼티를 참조하십시오.[PerRendererData]
- 텍스처 프로퍼티가 MaterialPropertyBlock의 형태로 렌더러당 데이터에서 생성됨을 나타냅니다. 머티리얼 인스펙터는 프로퍼티용 텍스처 슬롯 UI를 변경합니다.// 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) = "" {}
}
Unity 5 이전에 텍스처 프로퍼티는 중괄호 블록 내에 TexGen CubeReflect
과 같은 옵션을 보유할 수 있었습니다. 이것은 고정 함수 텍스처 좌표 생성을 제어했습니다. 이 기능은 5.0 버전에서 제거됐습니다. TexGen이 필요한 경우 대신 버텍스 셰이더를 사용해야 합니다. 예제는 고정 함수 TexGen 구현 페이지를 참조하십시오.