셰이더 스트리핑
유니버설 렌더 파이프라인(URP)의 셰이더는 다양한 기능을 지원하기 위해 셰이더 키워드를 사용합니다. 즉 Unity는 많은 셰이더 배리언트를 컴파일합니다.
URP 에셋에서 기능을 비활성화하면 URP는 관련 셰이더 배리언트를 자동으로 제외('스트리핑')합니다. 이렇게 하면 빌드 속도가 빨라지고 메모리 사용량과 파일 크기가 줄어듭니다.
예를 들어 프로젝트에서 방향 광원 그림자를 사용하지 않는 경우에도 Unity는 기본적으로 빌드에 방향 광원 그림자를 지원하는 배리언트를 포함합니다. URP 에셋에서 Cast Shadows를 비활성화하면 URP가 이러한 배리언트를 스트리핑합니다.
URP에서 셰이더를 스트리핑하는 코드를 살펴보려면 Editor/ShaderPreprocessor.cs
파일을 참조하십시오. 이 파일은 IPreprocessShaders API를 사용합니다.
셰이더 배리언트 스트리핑에 대한 자세한 내용은 다음 페이지를 참조하십시오.
- 보유하고 있는 셰이더 배리언트 수 확인.
- 모든 렌더 파이프라인에 적용되는 셰이더 스트리핑에 대한 표준 지침 참조.
기능 셰이더 배리언트 스트리핑
기본적으로 URP는 기능이 활성화된 배리언트와 기능이 비활성화된 배리언트를 컴파일합니다.
배리언트 수를 줄이려면 URP 전역 설정에서 Strip Unused Variants를 활성화하고 다음을 수행하십시오.
- 빌드의 모든 URP 에셋에서 기능을 비활성화합니다. 그러면 URP는 기능이 비활성화된 배리언트만 유지합니다.
- 빌드의 모든 URP 에셋에서 기능을 활성화합니다. 그러면 URP는 기능이 활성화된 배리언트만 유지합니다.
Strip Unused Variants 설정을 비활성화하면 URP는 기능이 비활성화된 배리언트를 스트리핑할 수 없습니다. 따라서 배리언트 수가 증가할 수 있습니다.
기능 비활성화
Unity가 기능과 관련된 배리언트를 스트리핑하도록 하려면 빌드의 모든 URP 에셋에서 해당 기능을 비활성화해야 합니다.
Unity는 빌드에 다음 URP 에셋을 포함합니다.
- 그래픽스 설정에서 기본 렌더 파이프라인 에셋으로 설정한 URP 에셋.
- 현재 빌드 타겟에 대해 활성화한 품질 설정 레벨에서 Render Pipeline Asset으로 설정한 모든 URP 에셋.
빌드에 서로 다른 렌더링 경로를 사용하는 URP 에셋을 포함하지 마십시오. 그렇게 하면 Unity가 각 키워드에 대해 두 개 세트의 배리언트를 생성합니다.
기능 | 기능을 비활성화하는 방법 | 비활성화되는 셰이더 키워드 | 렌더링 경로 |
---|---|---|---|
정확한 GBuffer 노멀 | URP 에셋에서 Accurate G-buffer normals를 비활성화합니다. 이 기능은 Vulkan 그래픽스 API를 사용하는 플랫폼에는 영향을 주지 않습니다. | _GBUFFER_NORMALS_OCT |
디퍼드 |
추가 광원 | URP Asset의 Lighting 섹션에서 Additional Lights를 비활성화합니다. | _ADDITIONAL_LIGHTS , _ADDITIONAL_LIGHTS_VERTEX |
포워드 |
앰비언트 오클루전 | URP 에셋이 사용하는 모든 렌더러에서 앰비언트 오클루전 렌더러 기능을 제거합니다. | _SCREEN_SPACE_OCCLUSION |
포워드 및 디퍼드 |
데칼 | URP 에셋이 사용하는 모든 렌더러에서 데칼 렌더러 기능을 제거합니다. | _DBUFFER_MRT1 , _DBUFFER_MRT2 , _DBUFFER_MRT3 , _DECAL_NORMAL_BLEND_LOW , _DECAL_NORMAL_BLEND_MEDIUM , _DECAL_NORMAL_BLEND_HIGH , _DECAL_LAYERS |
포워드 및 디퍼드 |
신속한 sRGB-리니어 전환 | URP Asset의 Post-processing 섹션에서 Fast sRGB/Linear conversions를 비활성화합니다. | _USE_FAST_SRGB_LINEAR_CONVERSION |
포워드 및 디퍼드 |
터레인 구멍 | URP Asset의 Rendering 섹션에서 Terrain Holes를 비활성화합니다. | _ALPHATEST_ON |
포워드 |
광원 쿠키 | 프로젝트의 모든 광원에서 쿠키 텍스처를 제거합니다. | _LIGHT_COOKIES |
포워드 및 디퍼드 |
광원용 렌더링 레이어 | 광원용 렌더링 레이어를 비활성화합니다. | _LIGHT_LAYERS |
포워드 및 디퍼드 |
반사 프로브 블렌딩 | 프로브 블렌딩을 비활성화합니다. | _REFLECTION_PROBE_BLENDING |
포워드 및 디퍼드 |
반사 프로브 박스 투영 | 박스 투영을 비활성화합니다. | _REFLECTION_PROBE_BOX_PROJECTION |
포워드 및 디퍼드 |
렌더 패스 | URP 에셋이 사용하는 모든 렌더러에서 Native Render를 비활성화합니다. | _RENDER_PASS_ENABLED |
포워드 및 디퍼드 |
추가 광원이 드리우는 그림자 | URP 에셋의 Additional Lights 섹션에서 Cast Shadows를 비활성화합니다. | _ADDITIONAL_LIGHT_SHADOWS |
포워드 및 디퍼드 |
메인 광원이 드리우는 그림자 | URP 에셋의 Main Light 섹션에서 Cast Shadows를 비활성화합니다. Unity가 제거하는 키워드는 설정에 따라 다릅니다. | _MAIN_LIGHT_SHADOWS , _MAIN_LIGHT_SHADOWS_CASCADE , _MAIN_LIGHT_SHADOWS_SCREEN |
포워드 및 디퍼드 |
소프트 섀도우 | URP 에셋의 Shadows 섹션에서 Soft shadows를 비활성화합니다. | _SHADOWS_SOFT |
포워드 및 디퍼드 |
포스트 프로세싱 셰이더 배리언트 스트리핑
URP 전역 설정에서 Strip Unused Post Processing Variants를 활성화하여 사용하지 않는 볼륨 오버라이드를 스트리핑합니다.
예를 들어 프로젝트에서 블룸 효과만 사용하는 경우 URP는 블룸 배리언트를 유지하지만, 다른 모든 포스트 프로세싱 배리언트는 스트리핑합니다.
Unity는 모든 씬에서 볼륨 오버라이드를 확인하므로, 빌드에서 씬을 제거해도 프로젝트에서는 그대로 유지하여 배리언트를 스트리핑할 수 없습니다.
제거되는 볼륨 오버라이드 | 비활성화되는 셰이더 키워드 |
---|---|
블룸 | _BLOOM_HQ , BLOOM_HQ_DIRT , _BLOOM_LQ , BLOOM_LQ_DIRT |
색 수차 | _CHROMATIC_ABERRATION |
필름 그레인 | _FILM_GRAIN |
HDR 그레이딩 | _HDR_GRADING |
렌즈 왜곡 | _DISTORTION |
톤 매핑 | _TONEMAP_ACES , _TONEMAP_NEUTRAL , _TONEMAP_GRADING |
또한 많은 수의 다중 디스플레이('클러스터' 디스플레이)에서 포스트 프로세싱을 지원하기 위해 화면 좌표를 오버라이드하지 않는 한, URP 전역 설정에서 Strip Screen Coord Override Variants도 활성화해야 합니다.
XR 및 VR 셰이더 배리언트 스트리핑
XR 또는 VR을 사용하지 않는 경우 XR 및 VR 모듈을 비활성화할 수 있습니다. 이를 통해 URP는 표준 셰이더에서 XR 및 VR 관련 셰이더 배리언트를 스트리핑할 수 있습니다.
커스텀 렌더러 기능을 사용하는 경우의 배리언트 제거
커스텀 렌더러 기능을 생성하는 경우 FilterAttribute API를 사용하여, URP 에셋에서 설정을 활성화 또는 비활성화할 때 셰이더 배리언트를 스트리핑할 수 있습니다.
예를 들어 다음을 수행할 수 있습니다.
- [SerializeField]를 사용하여 커스텀 렌더러 기능에 부울 변수를 추가하고 URP 에셋 인스펙터에서 체크박스로 추가합니다.
- ShaderKeywordFilter.RemoveIf를 사용하여, 체크박스를 활성화할 때 셰이더 배리언트를 제거합니다.