유니버설 렌더 파이프라인(URP)의 셰이더는 다양한 기능을 지원하기 위해 셰이더 키워드를 사용합니다. 즉 Unity는 많은 셰이더 배리언트를 컴파일합니다.
URP 에셋의 기능을 비활성화하면 URP는 관련 셰이더 배리언트를 자동으로 제외합니다(스트리핑). 이렇게 하면 빌드 속도가 빨라지고 메모리 사용량과 파일 크기가 줄어듭니다.
예를 들어 프로젝트에서 방향 광원 그림자를 사용하지 않는 경우에도 Unity는 기본적으로 빌드에 방향 광원 그림자를 지원하는 배리언트를 포함합니다. URP 에셋에서 Cast Shadows를 비활성화하면 URP가 이러한 배리언트를 스트리핑합니다.
URP에서 셰이더를 스트리핑하는 코드를 확인하려면 Editor/ShaderPreprocessor.cs 파일을 확인하십시오. 해당 파일은 IPreprocessShaders API를 사용합니다.
셰이더 배리언트 스트리핑에 대한 자세한 내용은 다음 페이지를 참조하십시오.
Unity가 컴파일하고 스트리핑하는 배리언트의 총 개수를 기록하려면 다음 과정을 따르십시오.
Editor.log 로그 파일을 열고 ShaderStrippingReport를 검색합니다. Editor.log의 위치는 로그 파일을 참조하십시오.더 자세한 셰이더 배리언트 정보를 기록하려면 다음 과정을 따르십시오.
Temp/graphics-settings-stripping.json과 Temp/shader-stripping.json를 엽니다.자세한 내용은 Unity 사용자 매뉴얼의 다음 내용을 참고하십시오.
기본적으로 URP는 기능이 활성화된 배리언트와 기능이 비활성화된 배리언트를 컴파일합니다.
배리언트 수를 줄이려면 URP Graphics 설정에서 Strip Unused Variants를 활성화하고 다음을 수행하십시오.
Strip Unused Variants setting 설정을 비활성화하면 URP는 기능이 비활성화된 배리언트를 스트리핑할 수 없습니다. 따라서 배리언트 수가 증가할 수 있습니다.
Unity가 기능과 관련된 배리언트를 스트리핑하도록 하려면 빌드의 모든 URP 에셋에서 해당 기능을 비활성화해야 합니다.
Unity는 빌드에 다음 URP 에셋을 포함합니다.
빌드에 서로 다른 렌더링 경로를 사용하는 URP 에셋을 포함하지 마십시오. 그렇게 하면 Unity가 각 키워드에 대해 두 개 세트의 배리언트를 생성합니다.
| 기능 | 기능 비활성화 방법 | 비활성화되는 셰이더 키워드 | 렌더링 경로 |
|---|---|---|---|
| 정확한 G-버퍼 노멀 | 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 에셋이 사용하는 모든 렌더러에서 Decals 렌더러 기능을 제거합니다. |
_DBUFFER_MRT1, _DBUFFER_MRT2, _DBUFFER_MRT3, _DECAL_NORMAL_BLEND_LOW, _DECAL_NORMAL_BLEND_MEDIUM, _DECAL_NORMAL_BLEND_HIGH, _DECAL_LAYERS
|
포워드 및 디퍼드 |
| 신속한 sRGB-리니어 전환 | URP 에셋의 Post-processing 섹션에서 Fast sRGB/Linear conversions를 비활성화합니다. | _USE_FAST_SRGB_LINEAR_CONVERSION |
포워드 및 디퍼드 |
| 터레인의 구멍 | URP 에셋의 Rendering 섹션에서 Terrain Holes를 비활성화합니다. | _ALPHATEST_ON |
포워드 |
| 광원 쿠키 | 프로젝트의 모든 광원에서 Cookie textures를 제거합니다. | _LIGHT_COOKIES |
포워드 및 디퍼드 |
| 광원의 렌더링 레이어 | Rendering Layers for Lights를 비활성화합니다. | _LIGHT_LAYERS |
포워드 및 디퍼드 |
| 반사 프로브 블렌딩 | Probe Blending을 비활성화합니다. | _REFLECTION_PROBE_BLENDING |
포워드 및 디퍼드 |
| 반사 프로브 박스 투영 | Box Projection을 비활성화합니다. | _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 Graphics 설정에서 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 Graphics 설정에서 Strip Screen Coord Override Variants도 활성화해야 합니다.
XR 또는 VR을 사용하지 않는 경우 XR 및 VR 모듈을 비활성화할 수 있습니다. 이를 통해 URP는 표준 셰이더에서__ XR__XR은 VR(가상 현실), AR(증강 현실)과 MR(혼합 현실) 애플리케이션을 모두 포함하는 포괄적인 용어입니다. 이러한 형태의 인터랙티브 애플리케이션을 지원하는 기기를 XR 기기라고 합니다. 자세한 정보
See in Glossary 및__ VR__가상 현실입니다. 자세한 정보
See in Glossary 관련 셰이더 배리언트를 스트리핑할 수 있습니다.
커스텀 렌더러 기능을 생성하는 경우 URP 에셋에서 설정을 활성화하거나 비활성화할 때 FilterAttribute API를 사용하여 셰이더 배리언트를 제거할 수 있습니다.
예를 들어 다음을 수행할 수 있습니다.