메가라이트(MegaLights)는 언리얼 엔진 5.5에서 새롭게 선보이는 직접 조명 패스로, 아티스트가 이전보다 훨씬 많은 다이내믹 및 섀도 에어리어 라이트를 배치할 수 있게 해줍니다.
메가라이트는 현세대 콘솔을 지원하도록 설계되었으며, 레이 트레이싱을 활용하여 다양한 타입의 에어리어 라이트에서 사실적인 소프트 섀도를 구현할 수 있습니다.
메가라이트를 사용하면 다이내믹 섀도잉의 비용이 감소하는 것은 물론, 섀도 없는 라이트 평가 비용도 감소합니다. 따라서 콘솔에서 텍스처링된 에어리어 라이트처럼 비용이 많이 소모되는 라이트 소스를 사용할 수 있습니다.
메가라이트는 볼류메트릭 포그도 지원합니다.
메가라이트 사용하기
프로젝트 세팅(Project Settings)의 렌더링(Rendering) > 다이렉트 라이팅(Direct Lighting) 카테고리에서 메가라이트를 활성화할 수 있습니다. 메가라이트를 활성화하면 메가라이트의 권장 세팅인 하드웨어 레이 트레이싱 지원(Support Hardware Ray Tracing) 도 활성화하라는 메시지가 표시됩니다.
활성화한 다음에는 모든 로컬 라이트를 메가라이트 시스템이 처리합니다. 메가라이트는 메가라이트 허용(Allow MegaLights) 라이트 컴포넌트 프로퍼티를 사용하여 라이트별로 비활성화할 수 있습니다. 또한, 메가라이트 섀도 메서드(MegaLights Shadow Method) 를 설정하여 레이 트레이싱(디폴트)(Ray Tracing (Default)) 또는 버추얼 섀도 맵(Virtual Shadow Maps, VSMs) 을 섀도잉 소스로 설정할 수도 있습니다.
버추얼 섀도 맵은 단순화되지 않은 나나이트 지오메트리에서 직접 섀도를 드리우지만, 에어리어 섀도만 근사치를 계산합니다. VSM의 경우 미리 섀도 맵 깊이를 준비하기 위해 라이트별로 CPU, 메모리 및 GPU 시간 오버헤드가 발생합니다.
단일 프로젝트 내에서 더 정밀한 제어를 위해 포스트 프로세스 볼륨(Post Process Volume) 세팅을 사용하여 메가라이트를 활성화하거나 비활성화할 수 있습니다.
r.MegaLights.Allow 0 를 사용하여 엔진 퀄리티 레벨 또는 디바이스 프로파일별로 메가라이트를 비활성화할 수 있습니다.
기술 개요
메가라이트는 확률적 다이렉트 라이팅 기법으로 라이트의 임포턴스 샘플링을 통해 직접 조명을 해결합니다. 메가라이트는 중요한 라이트 소스 방향으로 픽셀당 고정된 레이 수를 트레이싱합니다. 레이가 라이트 소스에 충돌하면 해당 라이트의 기여도가 현재 픽셀에 추가됩니다.
이 접근 방식에는 몇 가지 중요한 의미가 있습니다.
- 통합된 방식으로 직접 조명을 하나의 패스에서 처리하여 기존의 여러 디퍼드 렌더러(Deferred Render) 섀도잉 및 셰이딩 기술을 대체합니다.
- 메가라이트를 사용하면 섀도잉 비용과 더불어 셰이딩 자체 비용도 감소합니다.
- 메가라이트는 퍼포먼스 오버헤드가 일정하지만, 주어진 픽셀에서 라이팅 복잡도가 증가할수록 퀄리티가 저하될 수 있습니다.
디퍼드 셰이딩(Deferred Shading)은 라이팅 퀄리티가 일정하지만, 라이트 수에 따라 GPU 비용이 증가합니다. 반대로 메가라이트는 퍼포먼스는 일정하지만, 주어진 픽셀에서 라이팅 복잡도에 따라 퀄리티가 달라집니다.
메가라이트는 다음과 같은 기능을 대체합니다.
- 섀도 맵 디스턴스 필드 섀도
- 레이 트레이싱된 섀도
- 디퍼드 셰이딩(BRDF 및 라이트 평가)
- 볼류메트릭 포그(Volumetric Fog) 섀도잉 및 라이트 평가
- 버추얼 섀도 맵(Virtual Shadow Map) 투영
- 개별 라이트 액터의 세팅에서 섀도 메서드로 버추얼 섀도 맵을 선택할 경우 메가라이트와 함께 계속 사용할 수 있습니다.
기본적으로 메가라이트는 단순화된 레이 트레이싱 씬에서 사용할 수 없는 작은 디테일을 포착하기 위해, 짧고 제한된 스크린 스페이스를 먼저 트레이스합니다. 그러한 레이가 화면을 벗어나거나 오브젝트 뒤로 들어가거나 최대 길이에 도달하면, 메가라이트는 하드웨어 또는 소프트웨어 레이 트레이싱을 사용하여 마지막 유효 위치부터 계속 트레이스합니다. 버추얼 섀도 맵을 레이 트레이싱하도록 메가라이트를 환경설정할 수도 있지만, 섀도 맵은 라이트별로 생성되어야 하므로 초기 비용이 추가로 발생합니다. 하지만 BVH(레이 트레이싱 씬)는 씬의 모든 라이트에 대해 한 번만 생성됩니다.
메가라이트의 레이 가이딩은 중요한 라이트 소스를 선택하는 데 유용하며, 주어진 픽셀에 영향을 미칠 가능성이 높은 라이트에 더 많은 샘플을 보내는 데 매우 중요합니다. 즉, 레이 가이딩은 가려질 가능성이 높은 라이트처럼 영향이 적은 라이트에 더 적은 샘플을 보냅니다. 이야말로 이 기술의 중요한 부분으로, 메가라이트는 이를 통해 픽셀당 고정된 라이트 샘플 예산으로 가능한 최고의 라이팅 퀄리티를 추출할 수 있습니다. 레이 가이딩은 가려진 라이트 소스로 보내는 레이 수를 줄이지만, 현재 프레임에서 보이는지 확인하기 위해 주기적으로 그러한 광원을 계속 샘플링해야 합니다. 이러한 점을 고려하면 전체 씬에 영향을 주는, 바운드가 큰 라이트 소스는 배치하지 않는 것이 좋습니다.
마지막으로, 모든 축적된 라이팅은 디노이저를 거치는데, 이 디노이저는 노이즈가 있을 수 있는 확률적 입력으로부터 고퀄리티 직접 조명을 재구성하려 시도합니다. 씬에서 라이팅 복잡도가 증가함에 따라 디노이저는 이 복잡도를 처리하기 위해 더 많은 작업을 수행해야 합니다. 라이팅 복잡도가 증가하면 라이팅이 블러링되거나 고스트 현상이 발생할 수 있습니다. 이러한 문제는 작은 라이트 소스를 큰 에어리어 라이트로 병합하고 광원의 바운드를 신중하게 좁혀 최종 라이팅 퀄리티를 개선함으로써 방지할 수 있습니다.
라이팅 복잡도
예산과 픽셀당 샘플 수가 고정되어 있으므로 디노이저에 크게 의존해야 하기 전에 단일 픽셀에 영향을 줄 수 있는 중요한 라이트 수에는 한계가 있으며, 이로 인해 디노이저가 흐릿한 라이팅을 생성하고 결국 씬에 노이즈나 고스트 현상이 발생할 수 있습니다. 라이트 어테뉴에이션 범위를 좁히고 라이트 소스 클러스터를 단일 에어리어 라이트로 대체함으로써 라이트 배치를 최적화하는 것은 여전히 중요합니다.
씬 내에서 메가라이트가 계속 잘 작동하도록 하려면 씬 지오메트리 안에 라이트를 배치하지 않고 라이트의 바운드를 최적화하는 것이 가장 좋습니다. 콘솔 명령 r.MegaLights.Debug 1 을 사용하면 선택한 픽셀에서 레이가 전송되는 위치를 시각화할 수 있습니다. 이 콘솔 명령 r.ShaderPrint.Lock 1 을 사용하여 선택한 레이를 고정할 수 있으며, 이를 통해 씬에 있는 트레이스된 레이를 검사할 수 있습니다.
메가라이트는 정식 버전 언리얼 엔진 기능으로 개발되었으므로 추가 시각화 툴을 제작할 예정입니다.
아래 예시에서 텍스처링된 렉트 라이트의 일부는 벽 내부에 있는데, 비록 눈에 보이지 않더라도 여전히 메가라이트가 샘플링해야 합니다. 이는 시각화를 통해 볼 수 있는데, 일부 레이가 벽으로 트레이스되는 것을 보여줍니다. 이상적으로는 라이트 소스가 이 아치를 채우면서도 그 너머로 확장되지 않도록 텍스처링된 렉트 라이트의 소스 너비(Source Width) 와 소스 높이(Source Height) 를 좁혀야 합니다.
노이즈를 최소화하려면 지오메트리 내부에 라이트를 배치하지 말고, 라이트 어테뉴에이션 범위와 스포트라이트 원뿔 각도, 렉트 라이트 반 도어를 최적화하여 라이트의 영향을 좁혀야 합니다.
레이 트레이싱 씬
메가라이트는 기본적으로 레이 트레이싱을 사용하며, 섀도 퀄리티는 레이 트레이싱 씬(Ray Tracing Scene) 표현의 퀄리티에 따라 달라집니다. 퍼포먼스를 위해 레이 트레이싱 씬은 단순화된 나나이트 메시를 사용하여 자동으로 빌드되며 메인 뷰보다 더 적극적으로 컬링하도록 세팅되어 있습니다. 그렇기 때문에 섀도 아티팩트, 누수나 섀도 누락이 발생할 수 있습니다.
레이 트레이싱 씬 시각화는 섀도잉 문제를 조사하는 데 좋은 시작점입니다. 이 시각화는 메가라이트가 레이 트레이싱하는 실제 씬 표현을 보여줍니다. 레이 트레이싱 씬을 시각화할 수 있는 방법은 다음과 같습니다.
- 레이 트레이싱 디버그(Ray Tracing Debug) 뷰 모드 중 하나를 사용합니다. 이러한 뷰 모드는 뷰 모드(View Modes) 메뉴의 레벨 뷰포트(Level Viewport)에서 찾을 수 있습니다. 레이 트레이싱 디버그 뷰 모드는
show RayTracingDebug 1및r.RayTracing.DebugVisualizationMode = "World Normal"콘솔 명령을 통해서도 사용할 수 있습니다. - 루멘 개요(Lumen Overview) 뷰 모드를 사용합니다. 이 모드는 레이 트레이싱 씬 및 메인 뷰를 동시에 볼 수 있는 화면 속 화면 시각화를 활성화합니다. 루멘 개요 뷰 모드는
r.Lumen.Visualize 1콘솔 명령을 통해서도 사용할 수 있습니다.
![]() |
![]() |
| 씬 뷰 | 레이 트레이싱 월드 노멀 시각화 뷰 모드 |
멀리 있는 섀도 일부가 누락되거나 사라진다면, 레이 트레이싱 씬 컬링 때문일 수 있습니다. r.RayTracing.Culling.* 아래의 콘솔 명령을 사용하여 컬링을 조정할 수 있습니다. 컬링 모드와 반경, 입체각 변수를 살펴봐야 합니다.
컬링 목적으로 작은 오브젝트를 레이 트레이싱 그룹 ID(Ray Tracing Group Id) 를 사용하여 병합할 수 있습니다. 그러면 그룹의 병합된 바운드를 사용하여 함께 컬링됩니다.
레이 트레이싱 씬 컬링 컨트롤에 대한 자세한 내용은 레이 트레이싱 퍼포먼스 가이드를 참조하세요.
레이 트레이싱 씬은 자동으로 단순화된 나나이트 예비 메시를 기반으로 합니다. 디폴트 세팅을 사용하면 섀도잉 목적에 비해 퀄리티가 너무 낮은 예비 메시가 생성될 수 있으며, 수동으로 조정해야 할 수 있습니다. 수동 조정하는 방법은 다음과 같습니다.
- 스태틱 메시 에디터(Static Mesh Editor)에서 메시를 엽니다.
- 디테일(Details) 패널의 나나이트 세팅(Nanite Setting) 에서 예비 타깃(Fallback Target) 을 상대 오차(Relative Error) 로 설정합니다.
- 그러면 예비 상대 오차(Fallback Relative Error) 라는 새로운 세팅이 표시되고 그 값을 설정할 수 있습니다. 이 값을 줄이면 트라이앵글 수와 나나이트 예비 메시의 충실도가 증가합니다.
- 설정이 끝나면 변경사항 적용(Apply Changes) 을 클릭하여 나나이트 예비 메시를 리빌드합니다.
나나이트 예비 메시 세팅에 대한 자세한 내용은 나나이트 가상화된 지오메트리를 참조하세요.
나나이트 예비 메시 트라이앵글 수와 레이 트레이싱 씬에 포함된 인스턴스 수는 레이 트레이싱 BVH 빌드 시간, 메모리 사용량 및 레이 트레이싱 퍼포먼스에 영향을 줍니다. 프로젝트의 가용 퍼포먼스 및 메모리 예산에 따라 신중하게 이 값을 올리는 것이 좋습니다.
리얼타임 렌더링이 아닌 경우, 전체 디테일 나나이트 메시로 레이 트레이싱 씬을 빌드하는 r.RayTracing.Nanite.Mode 1 을 사용할 수도 있습니다. 이 방식은 퍼포먼스 및 메모리 비용이 많이 소모되며, 나나이트 LOD 컷이 변경되고 BVH를 리빌드해야 할 때 씬이나 카메라 애니메이션 중에 히치가 발생할 수 있습니다.
스크린 스페이스 트레이스
메가라이트는 큰 지오메트리 디테일에 섀도를 드리울 때는 레이 트레이싱 씬을 사용하지만, 단순화된 레이 트레이싱 씬에서 누락될 수 있는 작은 스케일의 지오메트리에 대해서는 스크린 스페이스 트레이스를 활용합니다. 스크린 스페이스 트레이스는 씬 뎁스(Scene Depth)를 사용하며 이는 화면에 표시되는 모든 것과 충돌합니다. 이로 인해 씬 뎁스에 영향을 주지 않고 레이 트레이싱 씬에만 존재하는, 보이지 않는 섀도 캐스터와 같은 특정 아트 디렉션 조정에 문제가 발생할 수 있습니다.
r.MegaLights.ScreenTraces.MaxDistance 콘솔 명령을 사용하여 스크린 스페이스 레이 길이를 줄일 수 있습니다. 또는, 레이 트레이싱 씬이 이미 충분히 정확한 경우에는 스크린 트레이스를 완전히 비활성화할 수도 있는데, 그러면 다양한 스크린 스페이스 및 뷰에 따른 아티팩트를 최소화하는 데 도움이 됩니다.
섀도잉 메서드
메가라이트는 두 가지 섀도잉 메서드를 노출하며, 이 메서드는 라이트 컴포넌트의 프로퍼티를 사용하여 라이트별로 선택할 수 있습니다.
- 레이 트레이싱 은 권장되는 디폴트 메서드입니다. 라이트당 추가 비용이 발생하지 않으며 정확한 에어리어 섀도를 달성할 수 있습니다. 단점은 섀도의 퀄리티가 단순화된 레이 트레이싱 씬에 따라 달라진다는 것입니다.
- 버추얼 섀도 맵 은 버추얼 섀도 맵에 대해 레이를 트레이스합니다. 버추얼 섀도 맵은 래스터화를 사용하여 라이트별로 생성되며 전체 나나이트 메시 디테일을 캡처할 수 있습니다. 단점은 에어리어 섀도의 근사치만 구할 수 있으며 섀도 뎁스를 생성하는 데 사용되는 메모리, CPU 및 GPU 오버헤드 측면에서 상당한 라이트당 비용이 추가된다는 점입니다. 이 메서드는 신중하게 사용해야 합니다.
기본적으로 모든 라이트, 특히 소프트 섀도가 있으며 큰 에어리어 라이트 소스나 덜 중요한 라이트는 레이 트레이싱을 사용해야 합니다. 소프트 라이트에는 정확한 섀도 캐스터가 필요하지 않기 때문입니다. 또한, 레이 트레이싱 씬에 예산을 조금 더 할당하는 것도 좋습니다. 레이 트레이싱 표현 퀄리티가 높을수록 더 많은 라이트가 더 저렴한 레이 트레이싱 패스를 거치기 때문입니다.
라이트 함수
라이트 함수(Light Functions)는 라이트 함수 아틀라스와 호환되고 프로젝트 세팅에서 라이트 함수 아틀라스가 활성화된 경우 지원됩니다.
알파 마스크 적용
기본적으로 스크린 스페이스 트레이스만 알파 마스크 적용된 표면을 올바르게 처리할 수 있습니다. r.MegaLights.HardwareRayTracing.EvaluateMaterialMode 1 콘솔 명령을 사용하여 레이 트레이싱에 대한 알파 마스크 적용(Alpha Masking) 지원을 활성화할 수 있습니다. 이 옵션을 활성화하면 무시할 수 없는 퍼포먼스 오버헤드가 발생하므로, 콘텐츠에서는 알파 마스크 적용을 사용하지 않는 것이 좋습니다.
퀄리티 스케일링
라이팅 퀄리티를 고사양 PC나 오프라인 렌더링 수준으로 스케일링하는 기능은 아직 개발 중입니다. 현재는 다음과 같은 콘솔 명령을 사용하여 픽셀당 샘플 수만 제어할 수 있습니다.
r.MegaLights.NumSamplesPerPixel 16: 불투명 표면에 대해 더 높은 라이팅 퀄리티를 제공합니다.r.MegaLights.Volume.NumSamplesPerVoxel 4: 볼류메트릭 포그 같은 볼륨에 대해 더 높은 라이팅 퀄리티를 제공합니다.
메가라이트는 아직 무비 렌더 큐에 대한 전용 지원은 제공하지 않지만, 템포럴 슈퍼 해상도(Temporal Super Resolution, TSR)를 안티 에일리어싱 메서드로 사용하거나 라이팅을 제대로 해석할 수 있는 8 정도로 템포럴 샘플 수를 설정하면 좋은 결과를 얻을 수 있습니다.
퍼포먼스
퍼포먼스를 비교할 때 메가라이트는 모든 직접 조명을 해결하며 다음과 같은 다양한 디퍼드 렌더러 패스를 대체한다는 점을 이해해야 합니다.
- 섀도 뎁스(Shadow Depths): 섀도 맵 또는 버추얼 섀도 맵 사용 시
- RenderDeferredLighting::Lights
- VolumetricFog::Shadowed Lights
- VolumetricFog::LightScattering 에서 라이트 평가 제거
퍼포먼스에 영향을 주는 요인:
- 퍼포먼스는 주로 내부 렌더링 해상도에 의해 좌우됩니다.
- 레이 트레이싱은 메가라이트에서 두 번째로 많은 비용을 소모합니다. 이 비용은 레이 트레이싱 씬의 인스턴스 수, 그 복잡도, 오버래핑 인스턴스 양 및 각 프레임에서 업데이트해야 하는 다이내믹 트라이앵글의 양과 같은 여러 요인에 따라 달라집니다. 레이 트레이싱 씬 최적화에 대한 더 자세한 내용은 레이 트레이싱 퍼포먼스 가이드를 참조하세요.
- 섀도잉에 레이 트레이싱 대신 버추얼 섀도 맵을 사용하면 라이트당 섀도 맵 뎁스를 생성하기 위해 추가 메모리, CPU 및 GPU 오버헤드가 발생합니다.
- 복잡한 BRDF가 있고 무거운 라이트 타입(텍스처링된 렉트 라이트)에 영향을 받는 화면의 픽셀에 대해 약간의 비용이 발생합니다.
메가라이트 비용은 대체로 일정하며, 섀도를 드리우지 않은 라이트와 섀도를 드리운 라이트 간에 큰 차이가 없으므로 씬의 모든 라이트에 섀도를 활성화할 수 있습니다.
메가라이트는 루멘 HWRT와 함께 사용하는 것이 이상적인데, 두 시스템 간에 레이 트레이싱 씬 오버헤드와 최적화를 공유할 수 있기 때문입니다.
Stat GPU 는 메가라이트 패스를 포함한 GPU 시간 개요를 보여줍니다. 자세한 시간은 내장된 ProfileGPU 또는 서드 파티 프로파일러를 사용하여 확인할 수 있습니다.
언리얼 엔진은 비동기 계산(Async Compute)을 사용하여 다양한 기능의 여러 디스패치를 오버랩합니다. Stat GPU 및 ProfileGPU 타이밍은 r.RDG.AsyncCompute 0 콘솔 명령을 사용하여 비동기 계산을 비활성화할 때까지 디스토션됩니다.
메가라이트는 완전히 GPU 기반이지만, 여전히 라이트당 약간의 레거시 CPU 비용이 발생합니다. 모든 라이트가 레이 트레이싱을 사용하는 메가라이트라면, r.Visibility.LocalLightPrimitiveInteraction 0 콘솔 명령을 사용하여 대부분의 라이트당 CPU 비용을 제거할 수 있습니다.
제한 사항
일반 제한 사항:
- 메가라이트는 포워드 렌더러(Forward Renderer)와 호환되지 않습니다.
개선해야 할 현재 제한 사항:
- 메가라이트에는 필요하지 않은 프리미티브 인터랙션을 추적하는 라이트당 레거시 CPU 오버헤드가 있습니다.
- 디렉셔널 라이트가 지원되지 않습니다.
- 현재 메가라이트는 프로젝트 세팅에 따라 버추얼 섀도 맵이나 레이 트레이스된 섀도로 예비 전환됩니다.
- 서브서피스 스캐터링 두께 추정이 지원되지 않습니다.
- 스트랜드 기반 헤어가 지원되지 않습니다.
- 반투명이 지원되지 않습니다.
- 메가라이트는 섀도를 드리우지 않고 더 느린 디퍼드 렌더러 라이팅된 반투명으로 예비 전환됩니다.
- 워터, 클라우드, 불균질 볼륨 및 로컬 볼류메트릭이 지원되지 않습니다.
- 루멘은 합리적인 퍼포먼스로 많은 라이트를 처리하지만, 메가라이트가 루멘과 완전히 통합되면 퍼포먼스가 크게 향상될 것입니다.
- 소프트웨어 레이 트레이싱(Software Ray Tracing) 패스는 개발 중이며 섀도 퀄리티가 제한적입니다.
플랫폼 지원
- 메가라이트는 PlayStation 5, Xbox Series X | S 같은 현세대 콘솔 및 레이 트레이싱 기능을 지원하는 PC용으로 설계되었습니다.
- 메가라이트는 모바일, Switch 또는 PlayStation 4와 Xbox One 같은 이전 세대 콘솔을 지원하지 않습니다.

