Unity 매뉴얼 - 셰이더 배리언트 스트리핑 개념
이 문서는 Unity에서 셰이더 배리언트 스트리핑의 개념과 이를 사용하여 프로젝트 메모리와 빌드 성능을 최적화하는 방법에 대해 설명합니다.
개요
- 셰이더 배리언트: 셰이더의 다양한 조합으로, 특정 키워드와 조건에 따라 생성됩니다.
- 스트리핑: 필요 없는 배리언트를 제거하여 메모리 사용량, 빌드 시간, 로딩 시간을 줄이는 과정입니다.
셰이더 배리언트 스트리핑의 필요성
큰 프로젝트나 복잡한 셰이더를 사용하는 경우, 불필요한 배리언트를 제거하는 것은 다음을 통해 성능을 개선할 수 있습니다:
- 빌드 시간 감소
- 파일 크기 감소
- 런타임 메모리 감소
이와 같은 최적화는 특히 메모리가 제한된 플랫폼에서 중요합니다.
셰이더 배리언트 확인 및 추가 방법
셰이더 배리언트를 확인하는 방법은 다음과 같습니다:
- 보유하고 있는 셰이더 배리언트 확인
- Always Included Shaders 리스트에 추가
셰이더 키워드 관리
셰이더 키워드를 선언할 때 주의해야 할 점은 다음과 같습니다:
multi_compile
보다는shader_feature
사용을 권장합니다.- 사용하지 않는 키워드는
multi_compile
로 정의하지 않습니다. - 특정 셰이더 단계에만 영향을 주는 키워드는 적절하게 표시합니다.
프리 프로세서 매크로 사용
Unity 2021.3 이상에서는 프리 프로세서 매크로를 사용하여 조건부 셰이더 코드를 생성할 수 있습니다. 예를 들어, 특정 플랫폼에 대해 배리언트 생성을 제어할 수 있습니다.
# ifdef SHADER_API_DESKTOP
#pragma multi_compile _ RED GREEN BLUE WHITE
# else
#pragma shader_feature RED GREEN BLUE WHITE
# endif
품질 설정 생성
사용자가 품질 설정을 간단히 전환할 수 있게 하여 배리언트를 제한할 수 있습니다. 예를 들어:
- 저품질:
DYNAMIC_LIGHTING
활성화 - 고품질: 여러 키워드 활성화
이 접근법은 특정 키워드가 비활성화될 경우 배리언트를 생성하지 않도록 설정할 수 있습니다.
에디터 UI에서의 셰이더 스트리핑 설정
Unity 에디터의 UI에서 셰이더 배리언트 스트리핑을 설정하는 방법은 다음과 같습니다:
- Graphics Settings 창의 Shader Stripping 섹션에서 설정 관리
- 불필요한 셰이더를 Always-included shaders에서 제외
셰이더 배리언트 스트리핑 API 사용
에디터 스크립트를 사용하여 특정 셰이더 배리언트의 스트리핑을 진행할 수 있습니다. 다음과 같은 API를 사용합니다:
IPreprocessShaders.OnProcessShader
IPreprocessComputeShaders.OnProcessComputeShader
결론
셰이더 배리언트를 스트리핑하고 최적화하는 것은 Unity 프로젝트의 성능을 향상시키는 중요한 방법입니다. 이 문서에서 언급한 접근 방식을 참고하여 메모리와 성능 최적화를 달성하세요.