Version: 2020.1
언어: 한국어
ShaderLab 구문
ShaderLab: 서브셰이더

ShaderLab: 프로퍼티

셰이더는 Unity의 머티리얼 인스펙터에서 아티스트의 설정을 위한 파라미터 리스트를 정의할 수 있습니다. 셰이더 파일의 프로퍼티 블록이 이를 정의합니다.

구문

프로퍼티

Properties { Property [Property ...] }

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

숫자(Numbers) 및 슬라이더(Sliders)

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

모두 디폴트로 숫자(스칼라) 프로퍼티를 정의합니다. Range 형식은 min, max 범위 사이에서 슬라이더로 표시됩니다.

컬러(Colors) 및 벡터(Vectors)

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

주어진 RGBA 컴포넌트 또는 4D 벡터 프로퍼티의 디폴트로 컬러 프로퍼티를 정의합니다. 컬러 프로퍼티에는 컬러 피커가 표시되며 필요한 색 공간에 따라서 조절됩니다. 셰이더 프로그램 프로퍼티를 참조하십시오. 벡터 프로퍼티는 숫자 필드 4개로 표시됩니다.

텍스처(Textures)

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

각각 2D 텍스처, 큐브맵, 3D(영역) 프로퍼티를 정의합니다.

세부 정보

셰이더에서 각 프로퍼티는 name으로 참조됩니다. Unity에서는 밑줄 표시로 셰이더 프로퍼티 이름을 시작하는 것이 일반적입니다. 프로퍼티는 머티리얼 인스펙터에서 display name으로 나타납니다. 각 프로퍼티에서 디폴트는 등호 뒤에 부여됩니다.

  • RangeFloat 프로퍼티에서는 “13.37”과 같은 단일 숫자입니다.
  • ColorVector 프로퍼티에서는 “(1,0.5,0.2,1)”와 같은 괄호 속 숫자 4개입니다.
  • 2D 텍스처에서 디폴트는 빈 문자열 또는 다음과 같은 빌트인 기본 텍스처 중 하나입니다. “white” (RGBA: 1,1,1,1), “black” (RGBA: 0,0,0,0), “gray” (RGBA: 0.5,0.5,0.5,0.5), “bump” (RGBA: 0.5,0.5,1,0.5) or “red” (RGBA: 1,0,0,0)
  • 2D가 아닌 텍스처(큐브, 3D, 2D 배열)에서 디폴트는 빈 문자열입니다. 머티리얼에 큐브맵/3D/배열 텍스처가 할당돼있지 않으면 회색(RGBA: 0.5,0.5,0.5,0.5)이 사용됩니다.

차후 셰이더의 고정 함수 파트에서 프로퍼티 값은 대괄호 프로퍼티 이름을 사용하여 액세스될 수 있습니다([name]). 예를 들어, 머티리얼 프로퍼티로부터 두 정수 프로퍼티(“SrcBlend“, ”DstBlend”)를 선언하여 블렌딩 모드를 구동할 수 있으며, 차후 Blend 커맨드가 이것을 사용하도록 할 수 있습니다(Blend [_SrcBlend] [_DstBlend]).

Properties 블록에 존재하는 셰이더 파라미터는 머티리얼 데이터로 직렬화됩니다. 셰이더 프로그램은 실제로 런타임의 코드로부터 머티리얼에 설정된 더 많은 파라미터(매트릭스, 벡터, 플로트)를 보유할 수 있지만 프로퍼티 블록의 일부가 아닌 경우 이 값은 저장되지 않습니다. 이것은 대개 완전히 스크립트 코드 기반인 값에 유용합니다(Material.SetFloat 및 유사한 함수 사용).

프로퍼티 속성 및 드로어

모든 프로퍼티 앞 대괄호 안에는 선택적 속성을 지정할 수 있습니다. Unity에서 인식되는 속성이나 머티리얼 인스펙터에서 어떻게 렌더링돼야 ㅎ는지 제어하기 위한 자체적인 MaterialPropertyDrawer 클래스를 나타낼 수 있습니다. Unity에서 인식되는 속성은 다음과 같습니다.

  • [HideInInspector] - 머티리얼 인스펙터에 프로퍼티 값을 표시하지 않습니다.
  • [NoScaleOffset] - 머티리얼 인스펙터는 이 속성을 포함한 텍스처 프로퍼티에 대해 텍스처 타일링/오프셋 필드를 표시하지 않습니다.
  • [Normal] - 텍스처 프로퍼티의 노멀맵 예상 여부를 나타냅니다.
  • [HDR] - 텍스처 프로퍼티의 HDR 텍스처 예상 여부를 나타냅니다.
  • [Gamma] - 플로트/벡터 프로퍼티가 UI에서 sRGB로 지정되고(컬러와 동일) 사용되는 색 공간에 따라 변환이 필요할 수도 있음을 나타냅니다. 셰이더 프로그램 프로퍼티를 참조하십시오.
  • [PerRendererData] - 프로퍼티가 MaterialPropertyBlock의 형태로 렌더러당 데이터에서 생성됨을 나타냅니다. 머티리얼 인스펙터는 이러한 프로퍼티를 읽기 전용으로 표시합니다.
  • [MainTexture] - indicates that a property is the main texture for a Material. By default, Unity considers a texture with the property name name _MainTex as the main texture. Use this attribute if your texture has a different property name, but you want Unity to consider it the main texture. If you use this attribute more than once, Unity uses the first property and ignores subsequent ones. When the main texture is set using the [MainTexture] attribute, it is not visible in the Inspector in Debug mode. When the main texture is set using the [MainTexture] attribute, it is not visible in the Game view when you use the texture streaming debugging view mode or a custom debug tool.
  • [MainColor] - 프로퍼티가 머티리얼용 메인 컬러임을 나타냅니다. 기본적으로 Unity는 프로퍼티 이름이 _MainTex인 컬러를 메인 컬러로 간주합니다. 컬러에 다른 프로퍼티 이름이 있지만, Unity가 해당 컬러를 메인 컬러로 간주하도록 만들려면 이 속성을 사용하십시오. 이 속성을 두 번 이상 사용하면 Unity는 첫 번째 프로퍼티를 사용하고 후속 프로퍼티는 무시합니다.

예제

// 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) = "" {}
}

참고 항목

  • 2019.3에서 [MainTexture 및 MainColour 속성] 추가됨 NewIn20193
ShaderLab 구문
ShaderLab: 서브셰이더