UE에서는 모바일 디바이스에서 사용하기 적합한 포워드(forward) 및 디퍼드(deferred) 셰이딩 모드를 모두 제공하며, 실험단계로 데스크톱 렌더러(desktop renderer) 도 지원합니다. 각 셰이딩 모드는 서로 다른 방식으로 퍼포먼스와 퀄리티를 절충합니다. 이 페이지에서는 모바일용 포워드 및 데스크톱 셰이딩 모드에 대해 간략하게 살펴보고, 데스크톱 렌더러에 대해서는 별도의 가이드에서 다룹니다.
셰이딩 모드 설정 방법
사용할 모바일 셰이딩 모델은 Engine.ini 파일에서 r.Mobile.ShadingPath CVar를 통해 설정할 수 있습니다. 사용할 수 있는 값은 다음과 같습니다.
| 값 | 셰이딩 모드 | 설명 |
|---|---|---|
| 0 | 모바일 포워드 셰이딩(Mobile Forward Shading) | 런타임에 라이팅 및 섀도를 처리합니다. 프리컴퓨티드 라이팅을 사용하는 프로젝트에 적합합니다. |
| 1 | 모바일 디퍼드 셰이딩(Mobile Deferred Shading) | 라이팅 및 섀도를 처리합니다. |
아니면 고급 모바일 디바이스에서 데스크톱 렌더러 를 사용할 수도 있지만, 이 경우에는 상당한 퍼포먼스 비용이 발생한다는 점에 유의하세요. 이에 대한 자세한 내용은 모바일용 데스크톱 렌더러를 참조하세요.
이러한 렌더링 모드에 대한 자세한 내용은 아래 섹션을 참조하세요.
어떤 셰이딩 모드를 사용해야 할까요?


언리얼 엔진이 지원하는 대부분의 디바이스는 모바일 디퍼드 셰이딩(Mobile Deferred Shading)을 사용하기 위한 하드웨어 요구 사항을 충족하며, 모바일 디퍼드 셰이딩은 일반적으로 머티리얼 복잡도 감소로 인한 뛰어난 퍼포먼스는 물론 우수한 라이팅 기능을 제공합니다.
프리컴퓨티드 라이팅을 사용하는 프로젝트의 경우에는 모바일 포워드 셰이딩(Mobile Forward Shading)을 사용하는 것을 강력히 권장합니다.
모바일 포워드 셰이딩
포워드 셰이딩(Forward shading) 은 드로 시간에 머티리얼과 라이트 및 섀도의 인터랙션을 처리하며, 모바일의 디폴트 셰이딩 모드입니다.
장점
-
베이스라인 퍼포먼스가 가장 빠르고 가장 다양한 하드웨어와 호환됩니다.
-
프리컴퓨티드 라이팅 사용으로 렌더링 속도가 더 빠릅니다.
-
안티 에일리어싱 옵션의 다양성과 퀄리티가 가장 좋습니다.
-
많은 수의 리플렉션 캡처를 사용할 때 퍼포먼스가 더 뛰어납니다.
단점
-
다이내믹 라이팅, 섀도 및 리플렉션에 대한 지원이 제한적입니다.
-
머티리얼에 다른 모든 파라미터와 함께 라이트 및 섀도 코드가 포함되어야 합니다.
-
이로 인해 다음이 증가합니다.
-
머티리얼이 사용하는 인스트럭션 수
-
머티리얼이 사용하는 샘플러 수
-
머티리얼/셰이더 컴파일 시 컴파일 시간
-
-
그 결과, 디퍼드 셰이딩보다 히치가 더 많이 발생하고 메모리를 더 많이 소모할 수 있습니다.
-
포워드 셰이딩을 사용해야 하는 경우
포워드 셰이딩은 다음과 같은 프로젝트에 적합합니다.
-
프리컴퓨티드 라이팅을 사용하는 프로젝트
-
로컬 라이트 또는 다수의 리플렉션 캡처를 사용하는 프로젝트
-
타일 기반 GPU를 사용하지 않는 디바이스를 대상으로 하는 프로젝트
모바일 디퍼드 셰이딩
디퍼드 셰이딩(Deferred shading) 은 지오메트리 및 라이팅/셰이딩을 런타임에 모두 처리하는 대신 별도의 패스로 처리합니다. 이를 통해 고퀄리티 리플렉션, 여러 개의 다이내믹 라이트, 릿 데칼, 그리고 일반적으로 모바일용 디폴트 포워드 렌더링 모드에서는 사용할 수 없는 기타 고급 라이팅 기능을 지원합니다. 디퍼드 셰이딩의 퀄리티와 퍼포먼스 향상에 대한 자세한 내용은 모바일 디퍼드 셰이딩을 참조하세요.
장점
-
타일 기반 GPU를 사용하는 모바일 디바이스에서 퍼포먼스가 더 좋습니다.
-
복잡한 라이팅을 사용하는 프로젝트에서 메모리 사용량이 적고 퍼포먼스가 더 좋습니다.
-
포워드 셰이딩에서 제공하지 않는 고급 라이팅 기능을 사용할 수 있습니다.
단점
-
상대적으로 고급 모바일 하드웨어가 필요합니다.
-
프리컴퓨티드 라이팅에 대해 디폴트 릿(DefaultLit) 및 언릿(Unlit) 셰이딩 모델만 제공합니다.
-
안티 에일리어싱 옵션이 더 제한적입니다.
디퍼드 셰이딩을 사용해야 하는 경우
디퍼드 셰이딩은 다음과 같은 프로젝트에 적합합니다.
-
다이내믹 라이팅을 사용하는 프로젝트
-
방대한 야외 환경이 있는 프로젝트
라이팅 기능
모바일 디퍼드 셰이딩 모드에서는 다음과 같은 라이팅 기능을 제공합니다.
-
라이트 함수
-
라이트 프로파일
-
IES 라이트 프로파일
-
릿 데칼
-
로컬 라이트 렌더링 효율성 향상
자세한 내용은 모바일 디퍼드 셰이딩을 참조하세요.
렌더링 제한 사항
-
프리컴퓨티드 라이팅 및 셰이딩 모델 제한 사항: 프로젝트에서 프리컴퓨티드 라이팅을 사용한다면, 디퍼드 셰이딩에서는 디폴트 릿(DefaultLit) 및 언릿(Unlit) 셰이딩 모델만 제공합니다. 프로젝트에서 프리컴퓨티드 라이팅을 사용하는 경우, 디퍼드 셰이딩 대신 포워드 셰이딩을 사용하는 것을 강력히 권장합니다.
-
반투명 패스: 디퍼드 셰이딩 모드에서 반투명은 사용할 수 있지만, 반투명 패스는 항상 포워드 셰이딩을 사용합니다. 유리나 물 같은 반투명 머티리얼은 라이팅 모드(Lighting Mode) 가 서피스 포워드 셰이딩(Surface ForwardShading) 으로 설정되어 있어야 합니다.
-
멀티 샘플 안티 에일리어싱(MSAA): 디퍼드 렌더링은 GBuffer에 필요한 공간 크기 때문에 MSAA를 지원하지 않습니다. 또한, 각 픽셀이 아닌 각 샘플을 셰이딩해야 하므로 셰이딩 패스가 더 리소스 집약적입니다.
-
릿 데칼 제한 사항: 데칼에 추가 버퍼가 필요하므로 디퍼드 모드의 스태틱 라이팅에서 릿 데칼이 지원되지 않습니다. 모바일 디바이스에서는 메모리 제약 때문에 이 기능을 사용할 수 없습니다. 하지만, 이미시브(emissive) 데칼은 스태틱 라이팅에서 잘 작동합니다.
-
기타 데칼 제한 사항: GBuffer의 공간 제한 때문에 데칼은 크기를 줄이기 위해 노멀에 8면체 인코딩을 사용합니다. 이 인코딩을 사용하면 GBuffer에서 노멀의 블렌딩이나 수정이 불가능합니다. 그러나, 대신 노멀을 완전히 덮어쓸 수는 있습니다.
-
셰이딩 모델 제한 사항: 모바일 디퍼드 셰이딩으로 동시에 여러 셰이딩 모델을 지원하려면 비용이 매우 많이 소모됩니다. 따라서 복잡한 셰이딩 모델은 꼭 필요한 오브젝트에만 사용해야 합니다.
타일 메모리 사용
모바일 플랫폼마다 서로 다른 방식으로 타일 메모리에서 셰이딩을 수행합니다.
-
iOS 에서는
framebuffer_fetch와 비슷한 함수 기능을 사용하여 타일 메모리에서 GBuffer에 액세스합니다. -
Android Vulkan 에서는 Vulkan의 서브 패스를 사용합니다.
-
Android GLES 에는 익스텐션이 필요하며 모든 GPU에 범용으로 사용하는 메서드는 없습니다.
-
Mali 및 PowerVR 에서는 PLS 익스텐션을 사용합니다.
-
Adreno GPU에서는
framebuffer_fetch익스텐션을 사용합니다.
다른 GPU에서는 즉시 모드(immediate-mode) 렌더러를 사용하므로 이러한 타일 메모리 기술이 적용되지 않습니다. 이러한 경우, GBuffer는 시스템 메모리에 일반 텍스처로 할당되며 메모리 측면에서 이점이 없을 수 있습니다.
하드웨어 제한 사항
UE가 지원하는 대부분의 모바일 하드웨어는 모바일 디퍼드 셰이딩 모델 사용에 필요한 요구 사항을 충족합니다. 그렇지만, Android Vulkan을 실행하는 Mali 디바이스는 컬러 및 입력 어태치먼트에 대해 엄격한 제한 사항이 있습니다.
-
GBuffer에서 픽셀당 16바이트, 즉 128비트여야 합니다.
-
최대 4개의 입력 어태치먼트만 사용할 수 있습니다.
-
라이팅 패스 중에 최대 3개의 컬러 어태치먼트와 1개의 뎁스 어태치먼트만 가져올 수 있습니다.
모바일 디퍼드 셰이딩 모드는 이러한 제한 사항을 기본적으로 적용하여 모든 디바이스에서 일관성을 보장합니다. 이러한 제한 사항을 제거하려면, Engine.ini 파일에서 MobileUsesExtendedGBuffer 파라미터를 true 로 설정합니다. 그러면 모바일 디퍼드 셰이딩 모드는 사용자의 디바이스 모든 기능을 사용하도록 GBuffer를 확장합니다.