이 페이지는__ ShaderLab__셰이더 오브젝트의 구조를 정의하기 위한 Unity 언어입니다. 자세한 정보
See in Glossary 코드에서 Properties 블록을 사용하여 셰이더 오브젝트의 머티리얼 프로퍼티를 정의하는 방법에 대한 정보를 포함합니다.
| 기능 이름 | 유니버설 렌더 파이프라인(URP) | 고해상도 렌더 파이프라인(HDRP) | 커스텀 SRP | 빌트인 렌더 파이프라인 |
|---|---|---|---|---|
| ShaderLab: 프로퍼티 블록 | 지원 HLSL 코드에서 SRP 배처 호환성을 위해 머티리얼당 변수를 같은 CBUFFER에 삽입해야 합니다. |
지원 HLSL 코드에서 SRP 배처 호환성을 위해 머티리얼당 변수를 같은 CBUFFER에 삽입해야 합니다. |
지원 HLSL 코드에서 SRP 배처 호환성을 위해 머티리얼당 변수를 같은 CBUFFER에 삽입해야 합니다. |
지원 |
| 서명 | 기능 |
|---|---|
Properties{<Material property declaration><Material property declaration>}
|
특정한 프로퍼티를 머티리얼 에셋의 일부로 저장하며, 렌더링 중 머티리얼 에셋에 저장된 값을 사용합니다.Properties 블록은 수에 관계없이 머티리얼 프로퍼티 선언을 포함할 수 있습니다. |
모든 머티리얼 프로퍼티 선언은 다음의 기본 포맷을 따릅니다.
[optional: attribute] name("display text in Inspector", type name) = default value
정확한 구문은 유형별로 다릅니다.
이 섹션에는 다음 정보가 있습니다.
유형 이름과 기본 값의 구문은 프로퍼티 유형에 따라 다릅니다.
보통 셰이더 코드에서는 모든 프로퍼티 이름이 밑줄로 시작합니다. 이 페이지의 예시는 이러한 규범을 따릅니다.
| 유형 | 예제 구문 | 주석 |
|---|---|---|
| Integer | _ExampleName ("Integer display name", Integer) = 1 |
뒤에 플로트가 붙는 레거시 Int 유형(아래 설명 참조)과 달리, 이 유형은 실제 정수가 뒤에 붙습니다. 정수를 사용하려면 Int 대신 사용하십시오. |
| Int(레거시) | _ExampleName ("Int display name", Int) = 1 |
참고: 이 레거시 유형은 정수가 아닌 플로트가 뒤에 옵니다. 이전 버전과의 호환성을 위해서만 지원됩니다. 대신 Integer 유형을 사용하십시오. |
| Float |
_ExampleName ("Float display name", Float) = 0.5_ExampleName ("Float with range", Range(0.0, 1.0)) = 0.5
|
범위 슬라이더의 최대값과 최소값은 범위에 포함됩니다. |
| Texture2D |
_ExampleName ("Texture2D display name", 2D) = "" {}_ExampleName ("Texture2D display name", 2D) = "red" {}
|
Unity의 빌트인 텍스처를 사용하려면 기본값 문자열에 다음 값을 추가합니다. “white” (RGBA: 1,1,1,1), “black” (RGBA: 0,0,0,1), “gray” (RGBA: 0.5,0.5,0.5,1), “bump” (RGBA: 0.5,0.5,1,1) 또는 “red” (RGBA: 1,0,0,1). 문자열을 비워 두거나 잘못된 값을 입력하면 ‘gray’로 기본 설정됩니다. 참고: 이 기본 텍스처는 인스펙터에 표시되지 않습니다. |
| Texture2DArray | _ExampleName ("Texture2DArray display name", 2DArray) = "" {} |
자세한 내용은 텍스처 배열을 참조하십시오. |
| Texture3D | _ExampleName ("Texture3D", 3D) = "" {} |
기본값은 ‘gray’(RGBA: 0.5,0.5,0.5,1) 텍스처입니다. |
| Cubemap | _ExampleName ("Cubemap", Cube) = "" {} |
기본값은 ‘gray’(RGBA: 0.5,0.5,0.5,1) 텍스처입니다. |
| CubemapArray | _ExampleName ("CubemapArray", CubeArray) = "" {} |
큐브맵 배열을 참조하십시오. |
| Color | _ExampleName("Example color", Color) = (.25, .5, .5, 1) |
셰이더 코드의 float4에 매핑됩니다. 머티리얼 인스펙터에는 컬러 피커가 표시됩니다. 값을 4개의 개별 플로트로 편집하려면 Vector 유형을 사용하십시오. |
| Vector | _ExampleName ("Example vector", Vector) = (.25, .5, .5, 1) |
셰이더 코드의 float4에 매핑됩니다. 머티리얼 인스펙터에는 4개의 개별 플로트 필드가 표시됩니다. 컬러 피커를 사용하여 값을 편집하려는 경우 Color 유형을 사용합니다. |
Unity에는 머티리얼 프로퍼티에 대해 일부 예약된 이름이 있습니다. 이 이름 중 하나로 머티리얼 프로퍼티를 생성하면 Unity는 사전 정의된 작업을 수행합니다. 이 기능을 사용하려는 경우를 제외하고는 이러한 이름을 사용하지 마십시오.
| 이름 | 예제 구문 | 기능 |
|---|---|---|
| _TransparencyLM | _TransparencyLM ("Transmissive Texture", 2D) = "white" {} |
라이트매핑 중에 커스텀 RGB 투명도를 활성화합니다. 자세한 내용은 라이트매핑 및 셰이더를 참조하십시오. |
머티리얼 프로퍼티 선언에는 Unity에게 처리 방법을 알려주는 선택적 속성이 있을 수 있습니다.
여기에 나열된 속성 외에도 동일한 구문을 사용하여 머티리얼 프로퍼티에 MaterialPropertyDrawer를 추가할 수 있습니다. 이를 통해 머티리얼 프로퍼티가 인스펙터 창에 표시되는 방식을 제어할 수 있습니다.
| 속성 | 기능 |
|---|---|
[Gamma] |
플로트 또는 벡터 프로퍼티가 sRGB 값을 사용하며, 따라서 프로젝트의 색 공간이 요구하는 경우 다른 sRGB 값과 함께 변환되어야 함을 나타냅니다. 자세한 내용은 셰이더 프로그램의 프로퍼티를 참조하십시오. |
[HDR] |
텍스처 또는 컬러 프로퍼티가 HDR(High Dynamic Range) 값을 사용하는지 여부를 나타냅니다. 텍스처 프로퍼티의 경우 Unity 에디터는 LDR 텍스처가 할당된 경우 경고를 표시합니다. 컬러 프로퍼티의 경우 Unity 에디터는 HDR 컬러 피커를 사용하여 이 값을 편집합니다. |
[HideInInspector] |
Unity 에디터에게 인스펙터에서 이 프로퍼티를 숨길 것을 지시합니다. |
[MainTexture] |
Material.mainTexture를 사용하여 액세스할 수 있는 머티리얼의 메인 텍스처를 설정합니다. 기본적으로 Unity는 프로퍼티 이름 _MainTex가 있는 텍스처를 메인 텍스처로 간주합니다. 텍스처의 프로퍼티 이름이 다르지만 Unity가 메인 텍스처로 간주하도록 하려는 경우 이 속성을 사용합니다.이 속성을 두 번 이상 사용하면 Unity는 첫 번째 프로퍼티를 사용하고 후속 프로퍼티는 무시합니다. 참고: 이 속성을 사용하여 메인 텍스처를 설정하면 텍스처 밉맵 스트리밍 디버깅 뷰 모드 또는 커스텀 디버그 툴을 사용할 때 텍스처가 게임 뷰에 표시되지 않습니다. |
[MainColor] |
Material.color를 사용하여 액세스할 수 있는 머티리얼의 메인 컬러를 설정합니다. 기본적으로 Unity는 프로퍼티 이름 _Color가 있는 컬러를 기본 컬러로 간주합니다. 컬러의 프로퍼티 이름이 다르지만 Unity가 메인 컬러로 간주하도록 하려면 이 속성을 사용합니다. 이 속성을 두 번 이상 사용하면 Unity는 첫 번째 프로퍼티를 사용하고 후속 프로퍼티는 무시합니다. |
[NoScaleOffset] |
Unity 에디터에게 이 텍스처 프로퍼티의 타일링과 오프셋 필드를 숨기도록 지시합니다. |
[Normal] |
텍스처 프로퍼티의 노멀 맵 예상 여부를 나타냅니다. 호환되지 않는 텍스처를 할당하면 Unity 에디터에 경고가 표시됩니다. |
[PerRendererData] |
텍스처 프로퍼티가 렌더링별 데이터에서 MaterialPropertyBlock 형식으로 제공됨을 나타냅니다. 머티리얼 인스펙터는 이러한 프로퍼티를 읽기 전용으로 표시합니다. |