Unity 셰이더 프로퍼티 정의 가이드
이 가이드에서는 Unity의 ShaderLab 코드를 사용하여 머티리얼 프로퍼티를 정의하는 방법을 설명합니다. 머티리얼 프로퍼티를 통해 아티스트들은 다양한 머티리얼을 생성하고, 수정 및 공유할 수 있습니다.
개요
셰이더 오브젝트의 머티리얼 프로퍼티를 정의하면 다음과 같은 이점이 있습니다:
- 머티리얼에 대한 함수 호출 시 셰이더의 변수를 가져오거나 설정할 수 있습니다.
- 머티리얼 인스펙터를 통해 값을 확인하고 수정할 수 있습니다.
- 변경 사항은 세션 간 지속되어 저장됩니다.
머티리얼 프로퍼티를 사용하지 않는 경우도 있으며, 주로 스크립트를 통해만 셰이더 프로퍼티를 설정하려는 경우 사용됩니다.
렌더 파이프라인 호환성
| 기능 이름 | 빌트인 렌더 파이프라인 | 유니버설 렌더 파이프라인(URP) | 고해상도 렌더 파이프라인(HDRP) |
|---|---|---|---|
| ShaderLab: Properties 블록 지원 | 지원 | 지원 | 지원 |
| HLSL 코드에서 SRP 배처 호환성 | 지원 | 지원 | 지원 |
Properties 블록 사용
머티리얼 프로퍼티를 정의하기 위해서는 Shader 블록 안에 Properties 블록을 추가합니다.
예시 구문
Properties
{
<Material property declaration>
<Material property declaration>
}
머티리얼 프로퍼티 선언 형식
모든 머티리얼 프로퍼티 선언은 다음의 형식을 따릅니다:
[optional: attribute] name("display text in Inspector", type name) = default value
타입별 머티리얼 프로퍼티 선언 예시
| 타입 | 예제 구문 | 주석 |
|---|---|---|
| Integer | _ExampleName ("Integer display name", Integer) = 1 | 실제 정수가 뒤에 붙습니다. |
| Float | _ExampleName ("Float display name", Float) = 0.5 | 플로트 값을 사용합니다. |
| Texture2D | _ExampleName ("Texture2D display name", 2D) = "" {} | Unity의 기본 텍스처를 사용하려면 "white" 등으로 설정합니다. |
| Color | _ExampleName("Example color", Color) = (.25, .5, .5, 1) | 셰이더의 float4에 매핑됩니다. |
예약된 머티리얼 프로퍼티 이름
Unity는 특정 예약된 이름을 가진 머티리얼 프로퍼티에 대해 미리 정의된 작업을 수행합니다. 예를 들면:
| 이름 | 예제 구문 | 기능 |
|---|---|---|
| _MainTex | _MainTexture ("Main Texture", 2D) = "white" {} | 머티리얼의 메인 텍스처를 설정합니다. |
| _Color | _MainColor ("Main Color", Color) = (1, 1, 1, 1) | 머티리얼의 메인 컬러를 설정합니다. |
| _TransparentLM | _TransparencyLM ("Transmissive Texture", 2D) = "white" {} | 라이트매핑 동안 RGB 투명도를 활성화합니다. |
C# 코드로 머티리얼 프로퍼티 사용하기
C# 코드에서 머티리얼 프로퍼티는 MaterialProperty 클래스로 표시됩니다. 다음 메소드를 사용하여 HLSL 변수에 액세스합니다:
Material.GetFloatMaterial.SetFloat
예시
Material material = GetComponent<Renderer>().material;
float offsetValue = material.GetFloat("_OffsetUnitScale");
material.SetFloat("_OffsetUnitScale", newOffsetValue);
결론
이 문서는 Unity의 ShaderLab에서 머티리얼 프로퍼티를 정의하고 사용하는 기본 개념을 다뤘습니다. 추가적인 정보나 활용 가능성을 원하신다면 Unity 공식 문서를 참고하세요.
추가 자료
이 가이드를 통해 Unity에서 셰이더를 더 잘 활용할 수 있기를 바랍니다!