Unity 셰이더 키워드 사용 가이드
이 문서는 Unity에서 셰이더 키워드를 생성하고 관리하는 방법에 대한 내용을 설명합니다. 셰이더 키워드는 셰이더의 다양한 동작을 조정하는 데 사용되며, 이 안내서에서는 로컬 및 전역 키워드의 차이점, 키워드 활성화 및 비활성화 방법 등을 다룹니다.
셰이더 키워드 개요
- 로컬 셰이더 키워드: 셰이더 소스 파일 내에서 정의되며, 특정 셰이더나 컴퓨트 셰이더에만 영향을 미칩니다.
- 전역 셰이더 키워드: C#에서 코드로만 정의되며, 여러 셰이더와 컴퓨트 셰이더에 동시에 영향을 줍니다.
로컬 및 전역 셰이더 키워드
| 구분 | 설명 |
|---|---|
| 로컬 셰이더 키워드 | 셰이더 소스에서 정의된 키워드로, 특정 셰이더에만 적용됩니다. |
| 전역 셰이더 키워드 | C# 코드에서만 정의되며 여러 셰이더에 동시에 적용됩니다. |
키워드 활성화 및 비활성화
셰이더의 키워드는 런타임에 활성화하거나 비활성화할 수 있습니다. 이를 통해 원하는 셰이더 동작을 조정할 수 있습니다.
활성화 방법
- 로컬 셰이더에서 활성화:
Material.EnableKeyword,Material.DisableKeyword - 전역 셰이더에서 활성화:
Shader.EnableKeyword,Shader.DisableKeyword
코드 예제
아래 코드는 Unity에서 특정 셰이더의 키워드 상태를 확인하는 방법을 보여줍니다.
using UnityEngine;
public class KeywordExample : MonoBehaviour
{
public Material material;
void Start()
{
CheckShaderKeywordState();
}
void CheckShaderKeywordState()
{
var shader = material.shader;
var keywordSpace = shader.keywordSpace;
foreach (var localKeyword in keywordSpace.keywords)
{
if (localKeyword.isOverridable && Shader.IsKeywordEnabled(localKeyword.name))
{
Debug.Log("Local keyword " + localKeyword.name + " is overridden by a global keyword and is enabled");
}
else
{
var state = material.IsKeywordEnabled(localKeyword) ? "enabled" : "disabled";
Debug.Log("Local keyword " + localKeyword.name + " is " + state);
}
}
}
}
셰이더 배리언트 및 동적 브랜치
셰이더 키워드는 셰이더 배리언트 및 동적 브랜치와 함께 사용될 수 있습니다. 여기서 동적 브랜치는 특정 조건에 따라 실행되는 코드 블록을 의미합니다.
사용 시 유의 사항
- 키워드가 동적 브랜치에 사용될 때
LocalKeyword.isDynamic값을 통해 확인할 수 있습니다. - 배리언트 선택 시 여러 개의 키워드가 활성화된 경우 “충분히 일치하는” 배리언트를 선택하게 됩니다.
성능 고려 사항
셰이더 키워드와 배리언트는 성능에 영향을 줄 수 있으며, 런타임 중 키워드 상태를 변경할 때는 주의가 필요합니다.
| 사항 | 설명 |
|---|---|
| 성능 영향 | 키워드 상태 변경 시 셰이더 배리언트가 변경되어 성능 저하 가능성 |
| 응용 예제 | 복잡한 셰이더에서는 예열 전략을 고려해 키워드 사용 |
결론
Unity에서 셰이더 키워드는 다양한 셰이더의 동작을 조정하는 데 중요한 역할을 하며, 적절한 관리와 사용이 필요합니다. 로컬 및 전역 키워드의 개념을 이해하고, 키워드의 활성화 및 비활성화를 적절하게 실행하면 보다 유연한 그래픽스를 구현할 수 있습니다.