세션 개요
새 기능만 쓰는 것이 정답은 아니다
UE5 신규 그래픽 기능을 멀티플랫폼에 얹을 때 어디서 무너지는지, 그리고 UE4 시절 기능이 왜 아직 유효한지.
UE5에는 매력적인 신규 그래픽 기능이 다수 추가됐지만, 그중 상당수는 높은 하드웨어 성능을 요구합니다. 이 세션은 기술 지원 현장에서 반복적으로 마주친 사례를 모아, 루멘·나나이트·메가라이트·서브스트레이트 같은 기능을 여러 플랫폼에 동시에 내보낼 때 실제로 무엇이 문제가 되는지를 기능별로 짚습니다. 결론은 신기능 목록의 반대편에 있습니다 — LOD와 캐스케이드 섀도 맵처럼 UE4 시절부터 있던 기능이 지금도 스케일러빌리티를 실현하는 데 매우 유효합니다.
여기서 소개하는 것은 일상적인 기술 지원에서 얻은 지견이며, 모든 프로젝트에 적용 가능한 만능 해결책이 아닙니다. 게임 디자인과 그 게임이 요구하는 사양에 따라 베스트 어프로치는 달라집니다. 참조로만 활용하고, 본인 프로젝트에 정말 적용 가능한지 주의 깊게 검증하는 것이 가장 중요합니다.
이 문서를 관통하는 하나의 논점
중간에 나오는 대안 세 가지(DFAO / Skylight Fade Volume / Stationary 라이트 베이크)는 서로 달라 보이지만 전부 같은 질문에 대한 답입니다 — 루멘 없이 스카이라이트 오클루전을 어떻게 확보할 것인가.루멘을 끄는 것이 왜 “GI만 끄는 것”이 아닌지 이해하면 이 세 갈래가 한 줄기로 보입니다.
| 다루는 기능 | 멀티플랫폼에서 걸리는 지점 |
|---|---|
| 스케일러빌리티 설정 구조 | 프리셋은 CVar 묶음이고, 플랫폼별 상세는 디바이스 프로파일이 담당 |
| 루멘 / 루멘 라이트 | GI가 아니라 스카이라이트 오클루전이 사라지는 것이 본질 |
| 나나이트 폴백 메시 | 폴백은 평범한 폴리곤 메시라 결국 LOD 설계로 돌아온다 |
| VSM / 캐스케이드 섀도 맵 | 미지원 플랫폼에서는 기존 방식으로 떨어지므로 그쪽을 따로 세팅해야 한다 |
| 메가라이트 | 도입 결정을 늦게 할수록 되돌리기 어려운 기능 |
| TSR / TAAU | 업스케일러 자체의 비용이 내부 해상도 이득을 잡아먹을 수 있다 |
| 서브스트레이트 | 플랫폼별 G-Buffer 분기보다 통일이 안전한 실무적 이유 |
| 모바일 렌더러 | 이름이 오해를 부르는, 경량 렌더러 옵션 |
전제
스케일러빌리티는 콘솔 문제가 아니라 PC 문제다
“콘솔 발매는 생각 없다”는 프로젝트에도 이 절이 그대로 적용됩니다.
콘솔 게임은 각 플랫폼에서 매끄럽게 돌아가기 위해 항상 엄격한 최적화를 요구받습니다. 그래서 멀티플랫폼 대응은 콘솔 개발자의 숙제로 여겨지기 쉽습니다. 그런데 발표가 먼저 꺼낸 근거는 콘솔이 아니라 PC였습니다 — PC야말로 훨씬 더 많은 하드웨어 바리에이션이 존재하기 때문입니다.
포트나이트가 공개한 권장 GPU 스펙을 Steam 하드웨어·소프트웨어 서베이와 대조하면 티어별로 커버되는 유저 규모가 크게 달라집니다.[1]
| 티어 | 기준 GPU | 커버되는 Steam 유저 |
|---|---|---|
| 최고 스펙 | RTX 3070 이상 | 약 25% (4명 중 1명) |
| 권장 환경 | GTX 960 이상 | 약 75% (4명 중 3명) |
| 최소 스펙 | HD 4000 | 90% 이상 |
같은 게임을 낮은 티어까지 지원하는 것만으로 도달 가능한 유저가 25%에서 90%로 올라갑니다. 이 숫자 하나가 세션 전체의 명분입니다.
레이트레이싱 보급률도 같은 구조
레이트레이싱 대응 GPU는 Steam 유저의 상당수까지 보급됐지만, 반대로 말하면 나머지는 아직 레이트레이싱 미탑재 GPU를 쓰고 있습니다. 이 그룹에게도 게임을 전달하려면 하드웨어 레이트레이싱을 전제로 한 기능은 반드시 대안 경로를 함께 준비해야 합니다.[2]
기초 다지기
루멘은 레이트레이싱 GPU가 없어도 돌아간다
루멘이 “레이트레이싱 기능”으로 오해되는 일이 많습니다. 공식 문서 기준으로 루멘은 두 개의 레이 트레이싱 방식을 갖고 있습니다. 기본값인 소프트웨어 레이 트레이싱은 메시 디스턴스 필드를 대상으로 추적하며, Shader Model 6(SM6)를 지원하는 모든 하드웨어에서 동작하고 프로젝트 설정의 Generate Mesh Distance Fields만 켜져 있으면 됩니다.
하드웨어 레이 트레이싱은 품질이 더 높지만 별도 요구사항이 있습니다 — 문서는 Windows 10 이상 + DirectX 12, NVIDIA RTX 2000 시리즈 이상 또는 AMD RX 6000 시리즈 이상, 그리고 PS5 / Xbox Series S·X / Switch 2를 지원 대상으로 명시합니다. 그리고 프로젝트 설정 설명이 “Lumen will fall back to Software Ray Tracing otherwise”입니다. 즉 미지원 환경에서 루멘이 꺼지는 게 아니라 소프트웨어 경로로 내려갑니다. 이 절의 40%가 곧 “루멘을 못 쓰는 유저”는 아니라는 뜻입니다.
기반
언리얼의 스케일러빌리티 설정은 결국 CVar 묶음이다
Low ~ Cinematic 프리셋의 실체와, 플랫폼별 설정이 어디서 결정되는지.
언리얼 엔진은 그래픽스 항목별로 Low ~ Cinematic 프리셋을 기본 제공합니다. 이 프리셋들의 실체는 콘솔 변수(CVar)의 집합이고, 그 집합은 엔진의 BaseScalability.ini에 기술되어 있습니다.
사진 · 자료
Scalability Groups — 프리셋을 직접 고르는 창

세 개의 파일이 각각 하는 일
| 파일 | 위치 | 역할 |
|---|---|---|
BaseScalability.ini | [UE_InstallPath]/Engine/Config | 각 그래픽스 항목의 기본값이 기술되어 있는 원본. 직접 수정하지 않습니다 |
DefaultScalability.ini | <프로젝트>/Config | 프로젝트별로 만들어 덮어쓰기(Override)하는 파일. 같은 섹션 이름을 다시 선언해 값만 바꿉니다[3] |
DefaultDeviceProfiles.ini | <프로젝트>/Config | 각 플랫폼·기기 고유의 설정을 기술. 공식 문서가 “PC/Mac의 스케일러빌리티 버킷이나 모바일 기기별 스케일러빌리티를 다루는 권장 방식”이라고 명시하는 자리입니다 |
엔진 파일은 Base*, 프로젝트 파일은 Default*라는 규칙이 config 전체에 일관되게 적용됩니다. 프로젝트에서 엔진 기본값을 덮어쓰려면 같은 카테고리 이름을 유지한 채 접두어만 바꿔 파일을 만들면 됩니다.
프리셋의 실체 — sg.ShadowQuality를 열어보면
공식 문서가 sg.ShadowQuality의 각 단계에 어떤 CVar가 들어가는지 그대로 공개합니다. Low가 0, Epic이 3입니다.
; sg.ShadowQuality 0 (Low) r.LightFunctionQuality=0 r.ShadowQuality=0 r.Shadow.CSM.MaxCascades=1 r.Shadow.MaxResolution=512 r.Shadow.RadiusThreshold=0.06 ; sg.ShadowQuality 3 (Epic) r.LightFunctionQuality=1 r.ShadowQuality=5 r.Shadow.CSM.MaxCascades=4 r.Shadow.MaxResolution=1024 r.Shadow.RadiusThreshold=0.03
여기서 이 문서의 결론이 미리 드러납니다. 엔진이 그림자 스케일러빌리티를 실제로 조절하는 손잡이가 r.Shadow.CSM.MaxCascades, 즉 캐스케이드 섀도 맵의 캐스케이드 수입니다. UE4 시절부터 있던 기능이 여전히 스케일러빌리티 프리셋의 중심에 놓여 있습니다.
기초 다지기
디바이스 프로파일은 스케일러빌리티보다 나중에 적용된다
두 시스템이 같은 CVar를 건드릴 때 누가 이기는지가 실무에서 매번 문제가 됩니다. 공식 문서의 답은 명확합니다 — “Scalability groups apply their console variable settings before device profiles. Settings defined in specific device profiles will override those in scalability groups chosen by the user.”엔진은 CVar마다 “누가 설정했는가” 우선순위를 들고 있고, SetByScalability가 SetByDeviceProfile보다 낮습니다.
그래서 실전 패턴은 이렇게 됩니다. 디바이스 프로파일에서 먼저 sg.PostProcessQuality 같은 그룹 값을 지정해 기준선을 잡고, 그 위에서 개별 CVar만 다시 덮어쓴다. 프로파일은 부모-자식 계층을 가지므로 Android 같은 상위 프로파일의 값이 먼저 적용되고, 그 아래 성능 버킷과 특정 GPU 프로파일이 순서대로 덮어씁니다.
; <프로젝트>/Config/DefaultDeviceProfiles.ini [iPhone5S DeviceProfile] DeviceType=IOS BaseProfileName=IOS +CVars=r.MobileContentScaleFactor=2 +CVars=r.BloomQuality=1 +CVars=r.DepthOfFieldQuality=1 +CVars=r.LightShaftQuality=1
BaseProfileName이 부모 프로파일을 가리키는 키이고, +CVars=가 config 배열에 항목을 덧붙이는 표준 연산자입니다. 엔진이 넣어둔 배열을 통째로 비우려면 !CVars=ClearArray를 씁니다.
짚어둘 점
플랫폼별 .ini는 파일 이름이 곧 경로 규칙이다
config 파일은 카테고리별로 계층 구조를 이루고, 같은 카테고리 안에서 중복된 키가 있으면 나중에 읽힌 파일이 이깁니다. 공식 문서가 12단계 로드 순서를 그대로 공개하는데, 그중 플랫폼 관련만 뽑으면 다음과 같습니다.
Engine/Config/Base.ini Engine/Config/Base<CATEGORY>.ini Engine/Config/<PLATFORM>/Base<PLATFORM><CATEGORY>.ini Engine/Platforms/<PLATFORM>/Config/Base<PLATFORM><CATEGORY>.ini <프로젝트>/Config/Default<CATEGORY>.ini Engine/Config/<PLATFORM>/<PLATFORM><CATEGORY>.ini <프로젝트>/Config/<PLATFORM>/<PLATFORM><CATEGORY>.ini <프로젝트>/Platforms/<PLATFORM>/Config/<PLATFORM><CATEGORY>.ini
여기서 두 가지를 읽어야 합니다. 첫째, 프로젝트의 Default*보다 플랫폼 파일이 나중에 읽히므로 플랫폼 설정이 항상 이깁니다. 둘째, 파일 이름은 “플랫폼 + 카테고리” 조합으로 기계적으로 정해집니다. 그래서 안드로이드의 디바이스 프로파일은 Config/Android/AndroidDeviceProfiles.ini가 되고, 윈도우의 엔진 설정은 Config/Windows/WindowsEngine.ini가 됩니다. 규칙을 외우는 것이 아니라 조합을 이해하면 됩니다.
메인 토픽
루멘을 끈다는 것은 GI만 끄는 것이 아니다
가장 많은 프로젝트가 시행착오를 겪는 항목이라, 발표에서 가장 큰 비중을 차지한 파트입니다.
루멘은 UE5부터 등장한 글로벌 일루미네이션 솔루션입니다. 루멘이 없으면 전체적으로 라이팅은 되지만 음영의 상당수가 소실되고, 루멘을 켜면 음영이 늘고 광원으로부터의 2차·3차 반사가 깔끔하게 이뤄집니다. 여기서 많은 사람이 걸리는 질문이 하나 있습니다.
빛 전파(2차·3차 반사)가 추가됐는데 왜 화면 전체가 오히려 어두워지는가?
답 — 루멘이 계산하는 것은 GI만이 아니다
루멘은 스카이라이트 오클루전(스카이라이트의 그림자)을 동적으로 계산합니다. 공식 문서 표현이 정확히 이렇습니다 — “Sky lighting is solved as part of Lumen’s Final Gather process. It includes sky shadowing, allowing indoor spaces to be much darker than outdoor lighting, providing a much more natural effect.”
루멘 ON
스카이라이트 오클루전이 계산됨
- 스카이라이트에 의한 그림자가 제대로 생성된다
- 실내가 실외보다 확실히 어두워진다
- 2차·3차 반사로 음영 안쪽에도 빛이 돈다
루멘 OFF
차폐 계산이 사라짐
- 스카이라이트가 전방위에서 씬을 균일하게 비춘다
- 음영이 사라진 납작한 화면이 된다
- GI가 없는 것보다 “그림자가 없는 것”이 먼저 눈에 띈다
루멘을 끄면 간접광과 함께 하늘 그림자도 잃고, 화면에서 먼저 눈에 띄는 것은 하늘 그림자입니다.
이것이 이 문서 전체를 관통하는 핵심 논점입니다. 뒤에 나오는 대안들은 전부 “루멘 없이 스카이라이트 오클루전을 어떻게 흉내 낼 것인가”의 문제입니다.
기초 다지기
스카이라이트 오클루전이 왜 그렇게 중요한가
스카이라이트는 하늘 전체를 하나의 거대한 광원으로 취급하는 라이트입니다. 차폐 계산이 없으면 하늘이 보이지 않는 실내의 픽셀도 하늘이 그대로 보이는 실외 픽셀과 같은 양의 빛을 받습니다. 결과가 “어디를 봐도 밝은 회색”인 납작한 화면입니다.
디렉셔널 라이트의 그림자는 섀도 맵으로 해결됩니다. 광원이 하나고 방향이 하나이기 때문입니다. 반면 스카이라이트는 모든 방향에서 들어오므로 섀도 맵 한 장으로 표현할 수 없습니다. 반구 전체에 대해 “이 픽셀에서 하늘이 얼마나 보이는가”를 물어야 하고, 그것이 레이 트레이싱이나 디스턴스 필드 같은 공간 표현을 요구하는 이유입니다. 아래 대안 세 가지가 전부 “공간을 다르게 표현하거나, 아예 수작업으로 대체하는” 방향인 것도 여기서 나옵니다.
루멘 라이트(Lumen Lite) — 스케일러빌리티 Medium의 새 이름
스케일러빌리티의 GI Quality를 Medium으로 설정하면 자동으로 루멘 라이트가 됩니다. 즉 별도 토글이 아니라 스케일러빌리티 단계 자체입니다.
sg.GlobalIlluminationQuality 1 ; Medium = 루멘 라이트 경로 sg.ReflectionQuality 1 ; Medium = 루멘 리플렉션 대신 SSR ; Medium GI가 내부적으로 쓰는 파이널 개더 방식 r.Lumen.FinalGatherMethod 0
| 스케일러빌리티 단계 | 공식 문서가 명시하는 타깃 |
|---|---|
| Cinematic | Movie Render Queue 등 오프라인 렌더링 |
| Epic | 콘솔 30fps |
| High | 콘솔 60fps |
| Medium | Switch 2 60fps 및 중간 스펙 PC (= 루멘 라이트) |
| Low | 루멘 기능을 끔 |
Medium이 “대충 낮춘 값”이 아니라 특정 하드웨어를 목표로 설계된 단계라는 점이 중요합니다.
에픽의 공식 설명
UE 5.8 발표 자료는 루멘 라이트를 “irradiance fields with probe occlusion을 사용해 시각적 임팩트를 상당 부분 유지하면서 GPU 비용을 크게 낮춘 모드”로 소개하고, Lumen High Quality 대비 2배 빠르다고 기술합니다. 그리고 그 결과로 Nintendo Switch 2에서 60fps가 가능하며 PC에서도 지원된다고 덧붙입니다. 세션이 제시한 “약 2배 고속화”는 이 기술과 같은 방향입니다. 다만 세션이 든 개별 실측 수치는 별개입니다.[4]
알고리즘 상에서 무엇이 바뀌었나
| 영역 | 변경 방식 | 시사점 |
|---|---|---|
| 프로브 업데이트 | 기존 콘솔 변수를 조정해서 구현 | 직접 더 세밀하게 조정 가능. Medium 프리셋에 머물지 말고 다양한 성능/품질 조합을 스스로 만들 수 있습니다 |
| 프로브로부터 GI 계산 | 알고리즘 자체를 크게 변경 | 기존 Screen Probe Gather에서 프로브를 성기게 두고 프레임마다 예산 안에서만 갱신하는 방식으로 교체[5] |
Screen Probe Gather
High 이상에서 쓰는 기존 방식
- 화면상에 촘촘한 프로브를 배치해 세밀한 정보를 수집
- 표현력이 더 좋다
- 부하가 무겁다
필드 기반 개더
Medium = 루멘 라이트 경로
- 비교적 성긴 프로브 배치
- 1프레임에 일정 수만, 내부 비용을 견적해서 갱신
- 표현력은 다소 떨어지고 부하는 훨씬 가볍다
세션은 Unreal Insights의 Diffuse Indirect and AO 항목을 기준으로 두 방식을 비교했고 약 2배 차이를 보고했습니다. 씬 구성에 따라 좌우되는 부분이 있다는 단서도 함께 달렸습니다.
짚어둘 점
루멘 라이트는 GI 한정이고, 리플렉션은 SSR로 떨어진다
Reflection Quality를 Medium으로 낮추면 “루멘 라이트 리플렉션”이 되는 게 아닙니다. 공식 문서 표현이 정확히 이렇습니다 — “On Medium Quality Reflections (sg.ReflectionQuality 1), Lumen Reflections are disabled and Screen Space Reflections (SSR) is used instead on smooth surfaces, together with rough specular from Lumen GI.”
실무적으로 이건 화면 밖에 있는 물체가 반사에서 사라진다는 뜻입니다. SSR은 이름 그대로 스크린 스페이스 정보만 쓰기 때문입니다. 거울 같은 매끈한 재질이 화면 구성에서 중요한 씬이라면 GI와 리플렉션 단계를 같이 내리지 말고 따로 판단해야 합니다.
Switch 2가 기준선이라는 것의 함의
공식 자료가 루멘 라이트의 타깃으로 Switch 2 60fps를 명시하는데, Switch 2는 꽤 고성능인 편입니다. 따라서 더 낮은 스펙 PC 등에서는 루멘 라이트조차 무거울 수 있습니다. 그럴 땐 루멘 전체를 포기하는 접근이 필요할 수도 있고, 그 지점부터 다음 절의 이야기가 시작됩니다.
대안
루멘을 못 쓸 때 — 실제 사례가 있는 세 갈래
목표는 하나입니다. 루멘 없이 스카이라이트 오클루전을 어떻게 확보할 것인가.
대안 A — DFAO
엔진 기능으로 근사
디스턴스 필드로 스카이라이트 차폐를 근사합니다. 설정이 가볍고 비용도 낮습니다
대안 B — Skylight Fade Volume
수작업으로 대체
실내에 들어가면 스카이라이트를 스스로 낮추는 커스텀 볼륨을 배치합니다
대안 C — Stationary 라이트 베이크
하이브리드 구성
로우스펙에서는 베이크, 하이엔드에서는 루멘. 모든 라이트를 Stationary로 통일합니다
대안 A — DFAO (Distance Field Ambient Occlusion)
앰비언트 오클루전이므로 GI에는 영향을 주지 않습니다. 다만 스카이라이트 오클루전에 대해서는 근사적이지만 매우 좋은 효과를 냅니다. 공식 문서의 정의가 이 성격을 그대로 설명합니다 — “Shadowing for Movable Sky Lights is provided by using Signed Distance Field Volumes precomputed around each rigid mesh to generate medium scale Ambient Occlusion.”
Generate Mesh Distance Fields를 ON
프로젝트 세팅의 Rendering 섹션에서 켭니다. 공식 문서가 “This feature requires that Generate Mesh Distance Fields be enabled in your Project Settings in the Rendering section.”라고 전제 조건을 명시합니다
스카이라이트의 Mobility를 Movable로
문서의 활성화 절차가 “drag a Sky Light into the scene and set its Mobility to Movable”입니다. Static 스카이라이트에는 적용되지 않습니다
스카이라이트의 Distance Field Ambient Occlusion 설정 조정
Occlusion Max Distance 등 스카이라이트 컴포넌트의 항목을 씬에 맞게 조절합니다
| 비교 항목 | 결과 |
|---|---|
| 품질 | 루멘 쪽이 더 매끄럽고 자연스러운 그림자인 것은 분명합니다 |
| 핵심 효과 | DFAO만으로도 스카이라이트가 전 방향을 균일하게 비춰 평탄해 보이는 현상은 회피됩니다 |
| 세션 실측 (동일 플랫폼) | DFAO 라이팅 약 0.75ms vs 루멘 ON 약 7ms — 약 10배 차이[6] |
짚어둘 점
DFAO는 “스카이 오클루전”이 아니라 “AO”다
공식 문서의 Limitations 항목이 이 차이를 못박아 둡니다 — “Only Ambient Occlusion is provided, which is different from Sky Occlusion because it has a limited blocking distance.” 즉 차폐가 유한한 거리 안에서만 계산됩니다. 좁은 실내처럼 차폐물이 가까운 공간에서는 잘 먹지만, 거대한 구조물이 멀리서 하늘을 가리는 상황은 표현되지 않습니다.
그래도 이 절의 목적에는 맞습니다. 루멘 공식 성능 가이드가 스케일러빌리티를 낮출 때의 대체 관계를 직접 기술합니다 — “For large-scale ambient occlusion, Distance Field Ambient Occlusion replaces Lumen Global Illumination.” 엔진이 스스로 “루멘을 내리면 DFAO로 대신한다”는 설계를 갖고 있다는 뜻이고, 세션의 대안 A는 그 설계를 명시적으로 쓰는 것입니다.
대안 B — Skylight Fade Volume (수동 조정)
기본 아이디어 — 루멘이 없으면 스카이라이트에 그림자가 없어지므로, 건물 안에 들어가면 스스로 스카이라이트 인텐시티를 낮추는 커스텀 볼륨을 배치해서 넘깁니다. 알고리즘이 아니라 레벨 디자인으로 푸는 접근입니다.[7]
| 상황 | 문제 | 대응 |
|---|---|---|
| 실내에서 밖을 볼 때 | 본래 실외는 스카이라이트가 제대로 닿아 밝아야 하는데, 볼륨 단위로 인텐시티를 낮췄기 때문에 실외까지 어둡게 보입니다 | 해당 타이틀에서는 이를 타협점으로 수용했습니다 |
| 실외에서 실내를 볼 때 | 자신이 실외에 있어 인텐시티가 높게 유지되므로, 본래 더 어두워야 할 실내가 매우 밝게 보입니다 | 반투명 플레인으로 차폐를 만들고, 문에 가까워질수록 투명도를 낮춰 안이 보이게 해 의사적으로 실내 명암을 표현했습니다 |
실내가 어둡지 않은 이유는 스카이라이트가 아니다
재현 테스트에서 실내 조명이 적은데도 밝은 이유는, 창문에서 들어오는 빛이 스카이라이트가 아니라 별도로 배치한 에리어 라이트이기 때문입니다. 스카이라이트 영향이 약해져도 에리어 라이트가 메인 라이팅을 담보합니다. 이 기법을 쓸 때 조명 설계를 어디에 의존시킬지 보여주는 지점입니다.
장점
- 새 알고리즘 처리(루멘, 디스턴스 필드)가 일절 들어가지 않아 매우 경량
- 제한된 스펙 안에서 원하는 그래픽스 표현을 정확히 뽑아낼 수 있다
단점
- 특수 볼륨을 설계하는 것부터 배치까지 작업 코스트가 든다
- 씬에 따라 세밀한 추가 설정이 필요하다
수작업이지만 견실한 기법입니다. 씬 수가 적고 아트 통제가 강한 프로젝트에 맞습니다.
대안 C — 라이트 베이크와 루멘의 하이브리드
해당 타이틀은 동적 라이트 변화나 동적 씬 변화가 거의 없어 라이트 베이크를 채용했습니다. 그러면서도 하이엔드 플랫폼에서는 루멘으로 고품질 GI와 반사를 얻고 싶었기 때문에, 루멘이 안 돌아가는 로우스펙 플랫폼에서만 베이크를 쓰는 하이브리드 구성을 취했습니다.
| 라이트 Mobility | 라이트 베이크 | 루멘 (동적 라이팅) |
|---|---|---|
| Static | 완전 대응 | 기여하지 않음.공식 문서가 “Lights with their Mobility set to Static are not supported because Static Lights are stored completely in lightmaps and their contribution is disabled when Lumen is enabled.”라고 명시합니다 |
| Movable | 베이크에 기여하지 않음 | 완전 대응 |
| Stationary | 섀도 맵 베이스이지만 베이크에 참여 | 루멘 상에서 다이내믹 라이트로 취급 |
“라이트 베이크도 루멘도 둘 다”라면 Static도 Movable도 답이 아닙니다. 중간인 Stationary만 양쪽에 걸칩니다.
그래서 모든 라이트를 Stationary로 — 제약을 정면으로 맞는 선택
공식 문서는 Stationary 라이트의 겹침 제약을 이렇게 기술합니다 — “Only four or fewer Stationary Lights can overlap one another or any single piece of geometry in the Level” 그리고 “Once the channel limit is reached, only dynamic (or whole scene shadows) are used, which brings with it considerable performance cost.” 즉 한계를 넘기면 정적 섀도잉을 잃고 비용이 크게 뜁니다.[8]
제약 돌파 방법 — 두 단계
- 라이트의 반경을 매우 작게 만들어 라이트가 최대한 오버랩되지 않도록 합니다.
- 그만큼 라이트가 GI에 주는 기여도 줄어들므로, Direct Lighting Intensity 값을 매우 강하게 설정해 GI에 제대로 기여하도록 보정합니다.
UE4 시절 라이트 모빌리티를 세밀하게 조정해본 사람에게는 매우 놀라운 선택입니다. 제약을 우회하는 게 아니라 “제약이 발동하지 않는 배치”를 만들어 넘긴 사례입니다.
라이트 베이크와 루멘의 멀티플랫폼 조합을 시도한 사람들이 있었지만, Lightmass 베이크와 루멘 사이의 색감 일치를 달성하기가 너무 어려워 대부분 단념했습니다. 그래서 그동안은 “라이트 베이크 + 루멘 조합은 어렵다”고 이야기해왔는데, 이를 극복한 실제 사례가 나와서 소개하게 됐습니다.
더 깊이
색감 일치가 왜 그렇게 어려운가
Lightmass는 오프라인 패스 트레이서이고 루멘은 실시간 근사입니다. 두 시스템이 같은 씬을 두고 계산하는 바운스 횟수, 스카이라이트 차폐의 정밀도, 서피스 캐시의 해상도가 모두 다릅니다. 루멘 공식 문서가 루멘 활성 시 “precomputed static lighting contributions are disabled and all lightmaps are hidden”이라고 못박는 것도 두 결과를 섞어 쓰는 것을 전제하지 않았기 때문입니다.
그래서 하이브리드의 실제 난점은 “둘 다 켜기”가 아니라 두 플랫폼 빌드에서 아트 디렉션이 같아 보이게 만드는 것입니다. 이 사례가 Stationary로 통일한 이유도 여기 있습니다 — 라이트 배치와 인텐시티라는 입력을 하나로 묶어두면 출력 차이를 조정할 손잡이가 줄어듭니다.
이 절의 결론
스카이라이트 오클루전에는 현재도 하나의 정답이 없습니다.여러 개발자가 각자 프로젝트에 맞는 접근을 모색하는 중이며, 위 세 갈래는 “선택지”이지 “권장 순서”가 아닙니다.
지오메트리
나나이트를 끄면 결국 LOD로 돌아온다
폴백 메시는 평범한 폴리곤 모델입니다. 그래서 UE4 시절의 숙제가 그대로 살아납니다.
나나이트도 일정한 코스트가 들며, 특정 플랫폼에서는 나나이트 기능 자체를 꺼야 하는 경우가 있습니다. 이때 대신 그려지는 것이 폴백 메시입니다. 공식 문서 정의가 그 역할을 그대로 설명합니다 — “When you enable Nanite for a static mesh, it generates a coarse representation, the fallback mesh, of the highly detailed mesh. The fallback mesh is used when Nanite rendering is not supported.”
| 상황 | 무엇이 그려지는가 |
|---|---|
| 나나이트 ON, 나나이트를 쓸 수 있는 패스 | 나나이트가 클러스터 단위로 직접 래스터화합니다 |
| 나나이트 ON, 나나이트를 쓸 수 없는 패스 | 폴백 메시가 사용됩니다. 문서가 드는 예가 복잡 콜리전, 라이트맵 베이크, 그리고 루멘의 하드웨어 레이 트레이싱 반사입니다 |
| 나나이트를 완전히 끈 경우 | 모든 렌더링 패스에서 폴백 메시가 사용됩니다. 즉 통상 폴리곤 렌더링으로 되돌아갑니다 |
여기서 UE4 시절의 숙제가 되살아난다
폴백 메시는 곧 평범한 폴리곤 모델입니다. 따라서 UE4 시절과 마찬가지로 LOD를 주의 깊게 만들어야합니다. 이 세션이 “UE4 시절 기능이 여전히 유효하다”고 말하는 첫 번째 근거가 여기입니다.
기초 다지기
폴백 메시의 밀도를 결정하는 두 개의 손잡이
스태틱 메시 에디터의 Nanite 설정에는 Fallback Target이 있고, 여기서 어떤 기준으로 폴백을 만들지 고릅니다. 공식 문서가 정의하는 두 기준은 이렇습니다.
| 설정 | 공식 문서 설명 |
|---|---|
| Fallback Triangle Percent | “원본 소스 메시의 삼각형 중 몇 퍼센트를 폴백 메시 생성에 쓸지”를 0~100 사이로 지정합니다 |
| Fallback Relative Error | 디테일을 덜어낼 때 허용할 상대 오차의 최대치를 지정합니다. 문서는 “The relative error does not have a unit size and is relative to the size of the mesh”라고 단서를 붙입니다 — 절대 단위가 아니므로 큰 메시와 작은 메시에서 같은 값이 같은 결과를 주지 않습니다 |
문서가 드는 극단값 예시가 이해에 도움이 됩니다 — 원본을 전혀 줄이지 않으려면 Triangle Percent 100 + Relative Error 0.
그리고 나나이트를 끈 환경을 흉내 내는 공식 방법이 있습니다 — “Nanite rendering can be enabled and disabled globally at runtime using the console variable r.Nanite 0. Disabling Nanite is a good way to emulate platforms where it is not supported.” 타깃 하드웨어를 구하기 전에 폴백 품질을 점검하는 가장 값싼 수단입니다.
r.Nanite 0 ; 런타임에 나나이트 전체를 끔 (미지원 플랫폼 흉내)
r.Nanite.ProxyRenderMode 0 ; 폴백 메시 또는 스크린 스페이스 기반 LOD로 그림
; (스태틱 메시 에디터의 Min LOD 설정도 이때 반영됨)자동 생성 vs 수동 제작
- 폴백 메시는 엔진이 내부적으로 자동 생성할 수 있고, 대부분의 에셋은 자동 생성으로 충분합니다.
- 다만 중요한 에셋처럼 아티스트가 정성껏 LOD 모델을 만들고 싶은 경우도 있습니다. 공식 문서도 이 필요를 인정합니다 — “there are times when it is desirable to use a manually specified fallback mesh, or a series of traditional LODs, rather than an auto-generated one.”
- 솔직히 말해 워크플로가 아직 잘 정비되어 있지 않고 설정이 독특합니다. 향후 개선될 수 있으나, 현재는 공식 문서에 절차가 공유되어 있으니 그것을 따라 시도해볼 것을 권합니다.
Fallback Triangle Percent를 0으로
자동 생성 폴백을 사실상 비워 수동 LOD가 쓰이도록 준비합니다
전통적인 LOD 절차로 LOD를 추가
스태틱 메시 에디터의 일반 LOD 세팅 절차를 그대로 씁니다
LOD Settings에서 Import LOD Level 1로 임포트
직접 만든 저폴리 메시를 LOD 1 슬롯에 넣습니다
Minimum LOD를 1로 설정
문서 설명이 “This causes the Nanite-generated fallback mesh to be ignored”입니다. 이 한 줄이 수동 LOD 워크플로의 핵심입니다
콜리전을 이 LOD에 맞추려면 General Settings의 LOD for Collision속성을 함께 지정합니다. Q&A에서 나온 “폴백 메시가 깨진다”는 현상도 결국 이 수동 경로로 해결하는 문제입니다.
파생 문제 — 메모리, 그리고 Mesh Streaming
폴백 메시로 오브젝트 단위 폴리곤 수는 조정했더라도, 통상 폴리곤 렌더링이 되면서 나나이트가 갖고 있던 스트리밍 기능이 사라집니다. 많은 에셋이 많은 LOD 모델을 보유하게 되어 메모리 소비량이 매우 커질 우려가 있습니다.
| 해결 | 내용 |
|---|---|
| 기능 | Mesh Streaming — 프로젝트 세팅에서 켜면 끝날 정도로 설정이 간단합니다 |
| CVar | r.MeshStreaming — 프로젝트 세팅이 이 CVar를 DefaultEngine.ini에 기록합니다 |
| 오브젝트 단위 제어 | 스태틱 메시의 Num Streamed LODs속성이 “스트리밍할 LOD의 최대 개수”를 지정합니다 |
| 안정성 | 세션은 실제 프로덕션에서 쓰이고 있는 기능이라고 소개했습니다[9] |
LOD는 아직도 스케일러빌리티의 1급 손잡이다
폴백 경로로 내려오면 “무엇을 언제 바꿔 그릴지”가 다시 프로젝트의 책임이 됩니다. 엔진이 스케일러빌리티 프리셋에서 직접 제공하는 손잡이도 그대로 살아 있습니다.
r.SkeletalMeshLODBias ; 스켈레탈 메시의 LOD 레벨을 전역으로 바이어스 r.ViewDistanceScale ; 컬링 거리에 곱해지는 전역 배율 (0.4 / 0.7 / 1.0 …) r.DetailMode ; 0=Low, 1=Medium, 2=High — 액터의 Detail Mode 기준선
사진 · 자료
r.SkeletalMeshLODBias — 거리 기반 LOD 위에 얹는 전역 바이어스

그림자
VSM이 안 되는 플랫폼은 결국 캐스케이드 섀도 맵이다
VSM에 관해 멀티플랫폼 관점에서 할 이야기는 사실 한 문장으로 끝납니다.
버추얼 섀도 맵(VSM)은 버추얼 텍스처를 활용한 섀도 맵입니다. 섀도 맵을 타일 단위로 분할해 카메라에 가까운 부분은 세밀하게, 먼 부분은 거칠게 해상도를 배분합니다. 품질 높은 깨끗한 그림자를 낼 수 있지만, 성능이 가벼워지는 것은 아니며 오히려 매우 비싼 기법입니다.
기초 다지기
가상 16k 해상도를 128×128 페이지로 쪼갠다
공식 문서 기준으로 VSM은 가상 해상도 16k × 16k의 섀도 맵입니다. 그만한 텍스처를 매 프레임 실제로 그리는 건 불가능하고 대부분 낭비이기도 합니다 — 화면에 보이는 픽셀을 셰이딩하는 데 쓰이는 텍셀만 의미가 있으니까요. 그래서 물리적으로는 128 × 128 텍셀 페이지 단위로 쪼개서 필요한 페이지만 할당해 그립니다.
멀티플랫폼 관점에서 중요한 문장은 비용 쪽입니다. 문서가 두 가지를 명시합니다 — “Non-Nanite geometry is much more expensive to render into VSMs than Nanite geometry.” 그리고 “Virtual Shadow Maps are designed to be used with Nanite. If your target platform or project does not use Nanite, Virtual Shadow Maps is likely not a good fit.” 즉 앞 절에서 나나이트를 끈 플랫폼은 자동적으로 VSM에도 맞지 않는 플랫폼이 됩니다. 두 결정이 사실 하나입니다.
사진 · 자료
실제로 할당된 페이지만 보이는 VSM 페이지 시각화

미지원 플랫폼에서의 동작 — 매우 단순하다
자동으로 캐스케이드 섀도 맵 등 기존 섀도 메서드로 전환됩니다. 이후에는 평소처럼 캐스케이드 수나 크기 등 가능한 조정을 수동으로 해나가면 됩니다.
엔진 쪽 스위치도 명시적입니다. 프로젝트 세팅의 Engine > Rendering > Shadows 섹션에 Shadow Map Method가 있고, Virtual Shadow Maps와 Shadow Maps(이전 릴리스에서 쓰던 기존 방식) 중 하나를 고릅니다. CVar는 r.Shadow.Virtual.Enable입니다.
r.Shadow.Virtual.Enable=0 ; 기존 섀도 맵 경로(CSM 포함)로 전환 ; 그 다음부터는 CSM 손잡이를 직접 잡는다 r.Shadow.CSM.MaxCascades ; 캐스케이드 최대 개수 (sg.ShadowQuality가 1/1/2/4로 설정) r.Shadow.MaxResolution ; 섀도 뎁스 렌더링의 최대 정사각 크기 (512 / 1024 …) r.Shadow.RadiusThreshold ; 너무 작은 오브젝트를 그림자 대상에서 제외 r.Shadow.DistanceScale ; 디렉셔널 라이트의 그림자 거리 vs 성능 트레이드오프
r.Shadow.RadiusThreshold는 VSM 문서에도 등장합니다 — “Non-Nanite objects still respect the regular shadow CPU culling settings, such as r.Shadow.RadiusThreshold.” 두 경로가 공유하는 손잡이라, 여기서 익혀둔 감각이 VSM 쪽에도 그대로 쓰입니다.
캐스케이드 섀도 맵을 손으로 조율하는 법
CSM은 뷰 프러스텀을 거리 기반 캐스케이드로 나누고, 카메라에서 멀어질수록 해상도를 낮추는방식입니다. 디렉셔널 라이트 액터의 Cascaded Shadow Map 카테고리에서 조절하는 항목들이 곧 이 세션이 말하는 “캐스케이드 수나 크기 등 가능한 조정”입니다.
| 속성 | 공식 문서 설명 |
|---|---|
| Dynamic Shadow Distance | 카메라로부터 캐스케이드 섀도 맵이 적용되는 거리. 이 거리를 넘으면 미리 계산된 섀도 맵만 보입니다. 0으로 두면 동적 그림자가 사실상 꺼집니다. Movable용과 Stationary용 설정이 각각 있습니다 |
| Num Dynamic Shadow Cascades | 동적 그림자 거리를 몇 개 구간으로 나눌지. 레벨이 많으면 원거리 그림자 해상도가 좋아지지만 성능 비용이 커집니다 |
| Cascade Distribution Exponent | 캐스케이드 전환이 카메라에서 얼마나 가까운 곳에서 일어날지. 1이면 해상도에 비례한 거리에서, 1보다 크면 전환이 카메라 쪽으로 당겨집니다 |
| Cascade Transition Fraction | 한 캐스케이드에서 다음으로 넘어가는 페이드 비율. 0에 가까울수록 전환이 좁아지고, 0이면 캐스케이드 경계가 딱딱하게 보입니다 |
| Shadow Distance Fadeout Fraction | 캐스케이드 섀도 맵 전체가 사라질 때의 부드러움. 0.1 정도가 일반적으로 좋으며 성능 비용이 없습니다 |
마지막 항목은 특히 기억해둘 만합니다 — 공식 문서가 “There is no performance cost to this value”라고 명시한, 공짜로 품질을 사는 설정입니다.
도해
같은 씬, 두 개의 그림자 경로
VSM 경로 (나나이트 있는 플랫폼)
CSM 경로 (VSM 미지원 / 나나이트 미사용)
더 깊이
VSM은 LOD보다 나나이트에 가깝다
Q&A에서 “VSM과 LOD의 차이”를 묻는 질문이 나왔고, 답이 이 기법의 성격을 잘 정리해줍니다. VSM은 버추얼 텍스처라는 “텍스처”의 기능이고 LOD는 폴리곤 “모델”의 기능이므로 서로 다릅니다. 다만 사고방식은 가깝습니다 — 가까운 것은 정밀하게, 먼 것은 거칠게.
오히려 VSM이 더 가까운 것은 LOD보다 나나이트입니다.VSM이 하는 일은 같은 한 장의 텍스처 안에서도 화면에 표시되는 부분만 고밀도 밉맵을 내고, 멀리 비치는 부분은 저해상도로 처리하는 것입니다 — 랜드스케이프처럼 하나의 거대한 대상에서 특히 강력합니다. 나나이트가 하나의 메시 안에서 클러스터 단위로 디테일을 배분하는 것과 구조가 같습니다. 두 기능이 “세트로 설계됐다”고 문서가 말하는 이유도 여기 있습니다.
라이팅
메가라이트 — 멀티플랫폼에서 가장 늦게 되돌리기 어려운 결정
기술 자체보다, 플랫폼별로 거동을 바꿀 수 있는지가 도입 판단의 핵심입니다.
메가라이트는 그림자를 가진 라이트를 대량으로 배치해도 일정한 성능으로 실시간 렌더링되게 하는 기술입니다. 공식 문서 소개가 “a whole new direct lighting path in Unreal Engine 5 enabling artists to place orders of magnitudes more dynamic and shadowed area lights than they could ever before”입니다. 기존에는 하이엔드 플랫폼에서도 통상 라이팅 계산으로는 그림자를 가진 동적 라이트를 몇 개밖에 놓을 수 없었습니다.
기존 라이팅
정확성 우선
- 각 라이트를 제대로 평가한다
- 안정적이고 정확한 라이팅
- 라이트가 늘면 코스트가 비례해 증가
메가라이트
샘플 예산 우선
- 1프레임당 픽셀마다 쓸 수 있는 샘플 수를 일정 범위로 제한한다
- 씬에 라이트가 늘어도 렌더링 코스트가 안정적이다
- 정확도와의 트레이드오프로 대량의 라이트를 효율적으로 처리
모든 라이트를 항상 정확히 평가하지 않습니다. 라이트 수가 아주 많아지면 제한된 샘플 안에서 전부를 충분히 평가할 수 없어 샘플링 노이즈나 부정확함이 보일 수 있습니다.
지원 범위 — 문서가 명시적으로 선을 긋는다
“MegaLights are designed for current gen consoles (such as PlayStation 5, Xbox Series X | S) and PCs with ray tracing capabilities. MegaLights do not support mobile, Switch, or previous-generation consoles (such as PlayStation 4 and Xbox One).”
프로젝트 세팅의 Rendering > Direct Lighting에서 켜며, 이때 엔진이 Support Hardware Ray Tracing도 함께 켜라고 안내합니다. 문서는 이를 권장 설정으로 기술합니다.
멀티플랫폼에서 가장 중요한 주의점
현재 언리얼 엔진에는 “플랫폼별로 특정 라이트나 그 그림자를 무효화하는” 구조가 표준으로 준비되어 있지 않습니다. 따라서 메가라이트를 여러 플랫폼에 전개하려면 사전에 확실한 검증이 필요합니다.
제시된 선택지는 두 가지였습니다 — 모든 플랫폼에서 일률적으로 유효화 또는 무효화하거나, 스케일러빌리티를 고려해 플랫폼별로 거동을 바꿀 수 있는 독자적인 라이트를 직접 구현하거나.
현재 공식 문서가 제공하는 스위치
문서 정리 시점 기준으로 공식 문서에는 세 개의 스위치가 기술되어 있습니다.[10]
| 범위 | 수단 | 공식 문서 표현 |
|---|---|---|
| 플랫폼 / 품질 단계 | r.MegaLights.Allow 0 | “MegaLights can be disabled per scalability level or device profile with r.MegaLights.Allow 0.” |
| 라이트 개별 | Allow MegaLights (라이트 컴포넌트 속성) | “MegaLights can be disabled per light using Allow MegaLights light component property.” |
| 그림자 소스 선택 | MegaLights Shadow Method | “select the source of shadowing to either be Ray Tracing (Default) or Virtual Shadow Maps (VSMs)” |
앞 절에서 본 디바이스 프로파일 계층이 그대로 재사용됩니다 — 프로파일에서 r.MegaLights.Allow 0을 주면 그 플랫폼만 기존 라이팅 경로로 돌아갑니다.
그래도 세션의 실무적 결론은 유효합니다. 메가라이트 사용을 고려 중이라면 조기에 모든 타깃 플랫폼에서 이 방식으로 갈 수 있는지 체크할 것을 강력히 권합니다. 라이팅 경로를 바꾸는 결정은 레벨의 라이트 배치 자체를 바꿔놓기 때문에, 도입 결정을 늦게 할수록 되돌리는 비용이 커집니다.
업스케일링
TSR vs TAAU — 업스케일러 자체의 비용을 계산에 넣기
내부 해상도를 낮춰 얻은 이득을 업스케일러가 다시 먹어버리면 본말전도입니다.
TSR(Temporal Super Resolution)은 DOF까지를 저해상도로 렌더링한 뒤 타깃 해상도까지 업스케일하는 기법입니다. 나나이트나 루멘의 부하도 출력 해상도에 의존하므로, 내부 해상도를 낮추면 그 부하를 극적으로 낮춰줍니다. 다양한 회사가 유사한 업스케일러를 제공하지만, 범용성이라는 의미에서 루멘·나나이트의 사용을 지탱하는 매우 중요한 기능입니다.
사진 · 자료
해상도 스케일과 안티에일리어싱은 한 세트로 움직인다

기초 다지기
AA 방식은 하나의 CVar로 갈아끼운다
안티에일리어싱 방식은 r.AntiAliasingMethod 하나로 전환됩니다. 엔진의 EAntiAliasingMethod 열거형이 값을 그대로 정의합니다.
r.AntiAliasingMethod 0 ; AAM_None r.AntiAliasingMethod 1 ; AAM_FXAA r.AntiAliasingMethod 2 ; AAM_TemporalAA (TAA / TAAU) r.AntiAliasingMethod 3 ; AAM_MSAA (포워드 셰이딩에서만 지원) r.AntiAliasingMethod 4 ; AAM_TSR r.ScreenPercentage ; 내부 렌더 해상도 r.TSR.History.ScreenPercentage ; TSR 히스토리 해상도 (Epic/Cinematic AA 그룹은 200) r.TemporalAA.Quality ; TAA 품질 0 / 1 / 2
여기서 실무적으로 중요한 것은 이 전환이 CVar 하나라는 사실입니다. 그래서 플랫폼별 디바이스 프로파일에서 방식을 바꿀 수 있고, PC라면 유저 설정 화면에 그대로 노출할 수도 있습니다. TAAU 쪽은 별도 CVar가 아니라 프로젝트 세팅의 Temporal Upsampling 항목으로 켜고 끕니다.
하지만 TSR도 비용이 든다
공식 문서가 TSR의 비용 구조를 정확히 지목합니다 — “The History Update is the most expensive pass in TSR’s total GPU cost because the history is rendered at display resolution.” 즉 TSR의 주 비용은 내부 해상도가 아니라 출력 해상도에 붙습니다. 내부 해상도를 낮춰도 이 부분은 줄지 않습니다. 그래서 저스펙 환경에서는 내부 해상도를 과도하게 낮춰야 하는 상황이 되어 본말전도가 됩니다.
| 케이스 | 결과 |
|---|---|
| 내부 70% → 1080p (동일 하드웨어) | 세션 실측 TSR 7.0ms vs TAAU 1.3ms — TSR 단독으로 7.0ms는 사실상 사용 불가 수준[11] |
| 내부 50% → 2배 확대 | TAA(U)에 비해 TSR 쪽이 압도적으로 선명합니다. 선명도가 중요한 게임이라면 큰 차이 |
TSR
- 내부 해상도가 상당히 낮아도 고품질
- 1080p → 4K 업스케일 결과가 4K 네이티브와 큰 차이가 없다
- 렌더링 코스트가 매우 높다
TAAU
- 업스케일 품질은 TSR보다 떨어진다
- 렌더링 코스트를 크게 억제할 수 있다
- 내부 해상도를 높게 유지하면 실용적인 타협점이 된다
TSR을 쓰기엔 부하가 너무 높은 플랫폼에서는, 내부 렌더링 해상도를 가능한 한 높게 유지하면서 TAAU를 쓰는 것이 현실적인 선택지입니다.
에픽 자신도 같은 결론을 문서화하고 있다
TSR FAQ의 서술이 세션의 결론과 정확히 맞물립니다 — “you could still expose TAA on D3D11 or D3D12 for those users with lower end GPUs where TSR at low anti-aliasing scalability is still too costly. Fortnite is set up this way with these players in mind.” 즉 PC에서는 유저에게 선택하게 하는 것이 세션의 권장이면서 동시에 에픽의 실제 출하 구성입니다.
짚어둘 점
얇은 메시의 플리커링은 업스케일러로 해결되지 않는다
Q&A에서 “가는 선이나 얇은 메시에서 플리커링이 심하고 안티에일리어싱을 걸어도 변하지 않는다”는 질문이 나왔습니다. 답은 현재 TSR 등 업스케일링 메서드의 제약사항 중 하나이며 해소가 매우 어렵다는 것이었습니다. 저해상도로 렌더된 프레임에는 그 얇은 형상의 정보가 프레임마다 들어오거나 빠지고, 시간축 누적은 그 진동을 없애지 못합니다.
현장에서 쓰는 우회책은 렌더러가 아니라 에셋 쪽입니다 — 멀어지면 해당 오브젝트를 교체하는 LOD를 만들어, 세밀한 고주파 오브젝트 자체를 만들지 않는 것. 버추얼 텍스처도 동일합니다. 세밀한 버추얼 텍스처를 쓰면 같은 플리커링이 발생하므로, 고주파 텍스처에는 버추얼 텍스처를 쓰지 않는 방법을 취하는 개발자도 있습니다. 업스케일링 시대에도 LOD 설계가 화질 문제의 답이 되는 사례입니다.
머티리얼
서브스트레이트 — 플랫폼별 분기보다 통일이 안전하다
기술적으로 가능한 것과 워크플로가 받쳐주는 것은 다릅니다.
서브스트레이트는 복잡한 머티리얼 표현이나 여러 머티리얼을 겹친 표현에 대응하기 위해, 머티리얼의 복잡도에 따라 G-Buffer에 넣는 데이터량이 변화하는 구조입니다. 장점은 유연하고 리치한 머티리얼 표현이고, 단점은 성능 코스트와 메모리 사용량 증가입니다.
두 가지 G-Buffer 포맷
공식 문서 표현은 “Substrate supports two different GBuffer formats for storing material data, Blendable GBuffer and Adaptive GBuffer”이고, 프로젝트 세팅 항목 이름이 Substrate GBuffer Format (Project)입니다.[12]
Adaptive GBuffer
리치 표현용
- “targets visual fidelity and enables the full potential of Substrate”
- 복잡도에 따라 확장되는 G-Buffer — 픽셀별 토폴로지, 레이어드 클로저 같은 표현이 가능
- 지원 플랫폼이 한정된다 (아래 참조)
- 쿡 용량이 약 15% 증가한다고 문서가 명시
Blendable GBuffer
성능 중시용
- “targets fixed-memory footprint and predictable speed”
- 기존 방식과 동일하게 고정 출력 — 픽셀당 하나의 셰이딩 모델
- 문서가 “primary usage is for 60Hz projects”라고 용도를 명시
- “Performance is in parity with the non-Substrate path”
표현력을 일부 제한하는 대신 콘솔에서도 60fps를 노리기 쉽게 만든 구성이 Blendable 쪽입니다.
지원 플랫폼이 곧 분기의 실체
“This format is only supported on current-generation consoles Xbox Series X/S, PlayStation 5 and PlayStation 5 Pro, Windows PC (SM6), MacOS (SM6), and Linux (SM6). On other platforms (including SM5 platforms), materials are simplified and the platforms run with Blendable GBuffer format.” 즉 Adaptive를 골라도 미지원 플랫폼은 자동으로 Blendable로 떨어집니다. 원하든 원하지 않든 멀티플랫폼 프로젝트는 두 포맷을 동시에 상대하게 됩니다.[13]
r.Substrate.BytesPerPixel ; 자동 단순화 전까지 허용할 픽셀당 저장 바이트 (기본 80) r.Substrate.MaxClosureCount ; 픽셀당 클로저 개수 상한 r.Substrate.BlendableGBuffer ; 강제로 모든 머티리얼을 레거시 G-Buffer로 변환
멀티플랫폼 실무상의 결론
두 G-Buffer 포맷을 플랫폼별로 전환해 쓰는 것 자체는 가능합니다. 문제는 도구 쪽입니다.
현재 에디터 상에서 이 둘을 간단히 전환할 수 없습니다. 머티리얼 에디터에서 두 모드를 손쉽게 오가며 겉모습을 프리뷰하거나 비교하는 효율적인 워크플로가 준비되어 있지 않습니다.
그래서 권장은 통일
실제 멀티플랫폼 개발을 생각하면, 플랫폼마다 G-Buffer 포맷을 바꾸기보다 모든 플랫폼에서 하나로 통일해두는 편이 안전한 선택지입니다. 근거가 “성능”이 아니라 “아티스트가 두 결과를 비교할 수 없다”는 워크플로 문제라는 점이 중요합니다. 눈으로 확인할 수 없는 분기는 결국 출하 직전에 문제로 돌아옵니다.
참고로 새 프로젝트의 기본값은 Blendable이고, Automotive·Architectural 템플릿이 Adaptive를 씁니다. 게임 프로젝트라면 엔진의 기본 선택이 이미 “성능 중시 쪽으로 통일”이라는 뜻입니다.
부하 컨트롤
VRS — 픽셀을 묶어서 셰이딩한다
멀티플랫폼 전용 기능은 아니지만, 부하 컨트롤에 쓸 수 있어 참고로 다룬 파트입니다.
VRS(Variable Rate Shading)는 모든 픽셀을 같은 해상도로 셰이딩하지 않고, 더 거친 픽셀 단위로 묶어서 셰이딩해 GPU 부하를 억제하는 구조입니다. GPU 측이 대응해야 하며, 많은 현행 GPU가 대응합니다. 공식 문서가 지원 레이트를 그대로 나열합니다 — “The default shading rate in any setup is 1:1… With VRS, you can specify alternate shading rates, specifically 1x2, 2x1, 2x2, 2x4, 4x2, and 4x4.”
r.VRS.Enable ; 엔진 전체의 VRS 활성화 (머티리얼 기반 + 이미지 기반) r.VRS.EnableImage ; 이미지 기반 VRS만 활성화 r.VRS.ContrastAdaptiveShading 1 ; Contrast Adaptive Shading 활성화
방식 1 — 머티리얼 기반 VRS
- 머티리얼의 Allow Variable Rate Shading을 활성화합니다(기본적으로 ON).
- 머티리얼에 대해 어느 셰이딩 레이트를 쓸지 설정합니다.
가장 효과적인 대상 — 반투명 이펙트
연기처럼 세밀한 디테일이 그다지 눈에 띄지 않는 반투명 이펙트가 최적의 후보입니다. 세션이 든 기준은 4×4는 그리드가 눈에 보이고, 2×2는 화면상 큰 문제 없어 보인다였습니다.
기초 다지기
왜 반투명에서 특히 이득이 큰가
셰이딩 계산은 지정한 단위로 1회만수행됩니다. 불투명 표면이라면 픽셀당 한 번이므로 절약분이 곧 “묶은 배수”입니다. 그런데 반투명은 겹쳐지면서 같은 픽셀에 여러 번 쓰기가 발생합니다. 겹치는 레이어 수만큼 셰이딩이 반복되던 것을 한 번에 묶으므로, 절약분이 레이어 수와 곱해집니다.
엔진의 머티리얼 속성 설명도 적용 범위를 명확히 합니다 — “Allows the use of variable rate shading when evaluating this material. This will only apply to the base/translucency pass.” 베이스 패스와 반투명 패스에만 걸린다는 뜻이므로, 포스트 프로세스 부하를 줄이려는 목적에는 이 방식이 답이 아닙니다.
방식 2 — Contrast Adaptive Shading (CAS)
이전 프레임의 묘화 결과를 보고 변화가 적고 시각적으로 매끄러운 영역을 자동 검출해, 그런 영역의 셰이딩 레이트를 자동으로 낮춰 GPU 부하를 삭감합니다. 엔진의 공식 릴리스 노트 설명이 “a new approach that analyzes the preceding frame to determine which areas can be rendered at rougher shading rates”입니다.
| 디버그 뷰 색상 | 셰이딩 레이트 |
|---|---|
| 빨강 | 1×1 (통상) |
| 초록 | 2×2 (거칠게 묶음) |
OFF/ON 비교에서 겉보기 차이는 거의 없으면서, ON일 때는 화면의 많은 부분이 2×2로 처리됩니다.
흥미로운 지점 — 고주파 영역은 자동으로 지켜진다
벽의 요철이 있는 부분은 고주파 영역이므로, 이 기법이 자동으로 인식해 그 부분만 1×1로 통상 렌더링합니다. 머티리얼 기반 방식과 달리 아티스트가 대상을 지정하지 않아도 되는 것이 CAS의 장점입니다.
공짜가 아니다
이 판정 이미지를 만들기 위한 추가 처리가 별도로 들어갑니다. 셰이딩에서 아낀 만큼을 판정 비용이 먹을 수 있으므로, 어느 쪽 처리가 가벼운지 실측해서 판단해야 합니다.[14]
재평가
“모바일 렌더러”는 이름이 잘못됐다
시간 관계상 마지막에 핵심만 언급된 파트지만, 이 문서의 주제와 가장 직접적으로 맞물립니다.
모바일 렌더러 이야기를 꺼내면 “우리는 모바일 개발할 예정 없어서”라며 단번에 흥미를 잃는 분이 꽤 많습니다. 그래서 던지고 싶은 질문은 이것입니다 — 모바일 렌더러는 정말 모바일 디바이스만을 위한 것인가?
세션이 근거로 든 사례는 포트나이트가 PC의 퍼포먼스 모드에서 모바일 멀티패스 디퍼드 렌더러를 사용하고 있다는 것이었습니다. 즉 이름은 “모바일 렌더러”지만, 경량 렌더러로서 PC나 콘솔에서도 충분히 사용 가능한 렌더러라는 뜻입니다.[15]
기초 다지기
공식 문서가 확인해주는 부분과 확인해주지 않는 부분
“모바일 렌더러가 PC에서 돌아간다”는 것 자체는 공식 문서로 확인됩니다. 모바일 디퍼드 셰이딩 문서의 디바이스 호환성 서술이 “Unreal Engine supports Mobile Deferred shading on all platforms that use the Mobile renderer, including PC platforms, iOS, Android Vulkan, and Android GLES.”입니다. including PC platforms가 이 절의 핵심 단어입니다.
전환 자체도 CVar 하나입니다 — “You can set which mobile shading model you want to use in your Engine.ini file with the CVar r.Mobile.ShadingPath”. 0이 모바일 포워드 셰이딩, 1이 모바일 디퍼드 셰이딩입니다.
; <프로젝트>/Config/DefaultEngine.ini [/Script/Engine.RendererSettings] r.Mobile.ShadingPath=1 ; 0 = Mobile Forward, 1 = Mobile Deferred
공식 문서가 확인해주지 않는부분은 “PC에서 성능 옵션으로 모바일 렌더러를 쓰라”는 권장입니다. 문서는 가능하다는 사실만 기술하고, 어떤 타이틀이 그렇게 하고 있는지는 다루지 않습니다.
더 깊이
포워드와 디퍼드 사이에서 무엇이 트레이드되는가
모바일 포워드는 공식 문서 설명대로 “라이팅과 그림자를 런타임에 처리하며, 미리 계산된 라이팅을 쓰는 프로젝트에 적합”합니다. 라이트마다 셰이딩을 다시 하므로 동적 라이트 개수에 민감합니다.
모바일 디퍼드는 라이트 수에 강하지만 G-Buffer를 만들어야 합니다. 모바일 하드웨어에서는 이 G-Buffer가 GPU 타일 메모리에만 존재하도록 설계되어 시스템 메모리 대역폭을 아끼는데, 그 대가로 나중에 도는 패스가 G-Buffer를 읽을 수 없습니다. PC에서 이 경로를 “경량 렌더러”로 쓸 때도 같은 제약을 물려받는지가 실무 검증 포인트입니다. 데스크톱 디퍼드에서 당연하게 쓰던 포스트 프로세스가 그대로 동작하지 않을 수 있습니다.
이 절을 이 문서의 결론과 연결하면
모바일 렌더러 재평가는 이 문서 전체와 같은 형태의 주장입니다. 로우엔드 대응의 실질적 도구는 신기능 목록이 아니라, 이미 엔진에 있으면서 이름 때문에 검토 대상에서 빠지는 기능들 쪽에 있습니다. LOD, 캐스케이드 섀도 맵, 라이트 베이크, 그리고 모바일 렌더러가 모두 같은 자리에 있습니다.
Q&A
그래픽스만 낮추면 되는 문제가 아니다
GPU 외에 CPU·SSD·메모리도 고려해야 하는가
세션이 보여준 것은 GPU 스펙 비교표뿐이었지만, SSD와 메모리도 매우 중요한 문제라는 답이 돌아왔습니다. 특히 콘솔은 메모리가 이상하게 적거나 디스크 로드가 매우 느린 등 고유하게 편중된 시스템인 경우가 있어 반드시 고려해야 합니다.
핵심 논지
그래픽스는 퀄리티를 낮추면 어느 정도 타협이 가능하지만, “게임이 부드럽게 동작한다”는 의미에서는 다릅니다. 예컨대 적이 100체 나오는 게임을 만드는데 메모리에 안 올라가면 게임 사양 자체가 무너집니다. 매우 엄밀하게 체크해야 합니다.
이 답이 앞의 Mesh Streaming 절과 이어집니다. 폴백 메시로 인한 LOD 증가가 메모리 문제로 번지는 것이 정확히 이 유형의 위험입니다.
폴백 메시가 깨지는 현상
질문자는 “하나의 메시 안에서 트라이앵글 고밀도 부분과 저밀도 부분이 크게 나뉠 때 발생하는 것 같다”고 짚었고, 답은 그대로 맞다였습니다. 폴백 메시 자동 생성에는 한도가 있고, 엔진이 자동으로 잘 만들어내지 못하는 것은 수동으로 준비하는 수밖에 없습니다. 앞 절의 수동 LOD 워크플로가 이 답의 실행 절차입니다.
AI 도구로 최적화를 자동화할 수 있는가
어느 정도의 최적화 지시는 가능하다고 보지만, 현재로서는 GPU에 맞춰 조정했을 때 “그대로 출시해도 좋다”고 할 수 있는 상황은 아니다는 답이었습니다. 여전히 세밀한 수동 조정이 필요합니다.
정리
이 세션에서 가져갈 것
스케일러빌리티는 콘솔 문제가 아니라 PC 문제다
최고 티어만 지원하면 유저의 약 4분의 1, 최소 티어까지 열면 9할에 도달합니다. 이 숫자 하나가 세션 전체의 명분이고, 콘솔 발매 계획이 없는 프로젝트에도 그대로 적용됩니다.
루멘을 끄면 GI와 함께 스카이라이트 오클루전도 잃는다
이걸 이해해야 대안 세 종(DFAO / Skylight Fade Volume / Stationary 라이트 베이크)이 왜 전부 “그림자를 되찾는 방법”인지 보입니다. 공식 문서도 루멘의 파이널 개더가 sky shadowing을 포함한다고 명시합니다.
UE4 시절 기법이 여전히 스케일러빌리티의 중심에 있다
sg.ShadowQuality가 실제로 조절하는 값이 r.Shadow.CSM.MaxCascades이고, 나나이트를 끄면 폴백 메시가 곧 LOD 설계 문제가 되며, 라이트 베이크는 로우스펙 하이브리드의 축입니다. 신기능 목록의 반대편에 있는 것들이 로우엔드 대응의 실질적 도구입니다.
나나이트와 VSM은 하나의 결정이다
공식 문서가 “VSM은 나나이트와 함께 쓰도록 설계됐고, 타깃 플랫폼이 나나이트를 쓰지 않으면 VSM은 적합하지 않다”고 못박습니다. 나나이트를 끄는 플랫폼은 자동으로 CSM 튜닝 대상이 되므로, 두 파이프라인을 각각 세팅해야 합니다.
메가라이트는 도입 결정을 늦출수록 되돌리기 어렵다
현재 공식 문서에는 r.MegaLights.Allow와 라이트별 Allow MegaLights가 있지만, 라이팅 경로를 바꾸는 결정은 레벨의 라이트 배치 자체를 바꿔놓습니다. 조기에 모든 타깃 플랫폼에서 검증하는 것이 유일한 안전장치입니다.
업스케일러의 비용은 출력 해상도에 붙는다
TSR의 최대 비용 패스가 디스플레이 해상도에서 도는 History Update이므로, 내부 해상도를 낮춰도 그 부분은 줄지 않습니다. 그래서 저스펙에서는 내부 해상도를 높게 유지하며 TAAU가 현실적이고, 에픽 자신도 저스펙 유저를 위해 TAA를 선택지로 남기는 구성을 문서화하고 있습니다.
워크플로가 없는 분기는 하지 않는 편이 낫다
서브스트레이트의 두 G-Buffer 포맷을 플랫폼별로 쓰는 것은 기술적으로 가능하지만, 에디터에서 두 결과를 비교할 수 없습니다. 성능이 아니라 검증 가능성을 근거로 통일을 택하는 판단이 이 세션에서 가장 실무적인 조언입니다.
가장 이른 단계에서 실제 타깃 하드웨어로 검증할 것
스카이라이트 오클루전처럼 아직 정답이 없는 영역이 남아 있습니다. 발표의 마지막 문장이 그대로 결론입니다 — 개발 가능한 한 이른 단계부터 여러 방법을 시도하고, 실제 타깃 하드웨어에서 검증하며 자기 프로젝트에 가장 맞는 방법을 찾아갈 것.
참고 자료
이 문서의 사실 확인에 사용한 자료
세션에서 직접 언급된 자료와, 정리 과정에서 대조한 공식 문서를 함께 정리했습니다.
세션에서 직접 언급된 이전 강연
발표 초반에 소개 · Unreal Fest Bali 2025
Beyond Scalability: Multi-Platform Insights from Japan“개발 전반이나 멀티플랫폼 개발의 오버뷰를 원하면 이걸 참고하라”며 직접 소개된 강연입니다. 이번 세션이 그래픽스에 집중했다면 이쪽은 플랫폼 홀더 요구사항 대응과 워크플로 전반을 다룹니다. 슬라이드는 Docswell(Epic Games Japan 공식)에도 공개되어 있습니다.
이번 세션의 직접적 전편 · Unreal Fest 2025
UE5 Graphics Deep Insights from JapanMegaLights, Virtual Texture, Lumen, Nanite, GPU 프로파일링을 다룬 강연. 이 문서의 루멘~메가라이트 절을 이해하는 데 가장 직접적인 배경입니다.
기초편 · Unreal Fest Gold Coast 2024
TSR, Nanite, Lumen, VSM: UE5 Graphics Features Insights from JapanTSR/TAAU 비교와 VSM 파트의 기초편. 이번 세션이 “어떻게 대체할 것인가”라면 이쪽은 “무엇인가”를 다룹니다.
세션 자료 · Epic Games Japan 공식
Docswell — Epic Games Japan발표 중 여러 차례 “자료가 공개되면 참조해달라”는 안내가 있었고, 특히 모바일 렌더러 파트는 시간 부족으로 자료 쪽에 남아 있습니다. 강연 자료가 올라오는 공식 계정입니다.
스케일러빌리티와 설정 구조
Epic Games 공식 문서
Scalability Reference for Unreal EngineBaseScalability.ini의 위치, sg.ShadowQuality·sg.PostProcessQuality 등 각 단계의 실제 CVar 목록, r.ViewDistanceScale·r.DetailMode·r.SkeletalMeshLODBias, 그리고 프로젝트 오버라이드 파일 DefaultScalability.ini 생성 절차.
Epic Games 공식 문서
Setting Up Device Profiles in Unreal EngineDefaultDeviceProfiles.ini가 “PC/Mac의 스케일러빌리티 버킷이나 모바일 기기별 스케일러빌리티를 다루는 권장 방식”이라는 서술, [iPhone5S DeviceProfile] 섹션 문법, BaseProfileName, +CVars= 배열, 안드로이드의 계층형 프로파일 카테고리.
Epic Games 공식 문서
Configuration Files in Unreal EngineBase → Default → 플랫폼 → User로 이어지는 로드 순서와 “나중에 읽힌 파일이 이긴다”는 규칙, 그리고 +/-/./! 배열 연산자.
Epic Games 공식 샘플 문서
Scalability and Device Profiles in Lyra“스케일러빌리티 그룹이 디바이스 프로파일보다 먼저 적용되고, 프로파일이 그 위를 덮어쓴다”는 우선순위 서술과 SetByScalability / SetByDeviceProfile 우선순위 표.
루멘과 라이팅
Epic Games 공식 문서
Lumen Global Illumination and Reflections“Sky lighting is solved as part of Lumen’s Final Gather process. It includes sky shadowing…”, Static 라이트가 루멘에 기여하지 않는다는 서술, 하드웨어 레이 트레이싱 미지원 시 소프트웨어로 폴백한다는 프로젝트 설정 설명.
Epic Games 공식 문서
Lumen Performance Guidesg.GlobalIlluminationQuality·sg.ReflectionQuality의 단계별 타깃(Cinematic / Epic 30fps / High 60fps / Medium Switch 2 60fps / Low), Medium에서 리플렉션이 SSR로 전환된다는 서술, r.Lumen.FinalGatherMethod, 그리고 스케일을 더 내릴 때 DFAO가 루멘 GI를 대체한다는 서술.
Epic Games 공식 문서
Lumen Technical Details소프트웨어 레이 트레이싱이 SM6와 Generate Mesh Distance Fields만 요구한다는 서술, 하드웨어 레이 트레이싱의 GPU·OS·콘솔 요구사항.
Epic Games 공식 문서
Distance Field Ambient OcclusionDFAO의 정의, Generate Mesh Distance Fields 전제 조건, 스카이라이트 Mobility를 Movable로 두는 활성화 절차, 그리고 “Sky Occlusion과 달리 차폐 거리가 제한적”이라는 한계 서술.
Epic Games 공식 문서
Stationary Light Mobility“Only four or fewer Stationary Lights can overlap…”과 채널 한계 초과 시의 동작.
Epic Games 공식 문서
MegaLights in Unreal Engine메가라이트의 정의와 지원·미지원 플랫폼 목록, r.MegaLights.Allow 0으로 스케일러빌리티 단계·디바이스 프로파일별 무효화, 라이트별 Allow MegaLights, MegaLights Shadow Method.
지오메트리 · 그림자 · 업스케일링 · 머티리얼
Epic Games 공식 문서
Nanite Technical Details폴백 메시의 정의와 사용 시점, Fallback Target / Fallback Triangle Percent / Fallback Relative Error, 수동 LOD 워크플로(Fallback Triangle Percent 0 → LOD 임포트 → Minimum LOD 1), r.Nanite 0과 r.Nanite.ProxyRenderMode.
Epic Games 공식 문서
Virtual Shadow Maps in Unreal Engine가상 16k 해상도와 128×128 페이지, Shadow Map Method 프로젝트 설정과 r.Shadow.Virtual.Enable, 비(非)나나이트 지오메트리의 VSM 비용 경고, 그리고 r.Shadow.RadiusThreshold가 양쪽 경로에 공통이라는 서술.
Epic Games 공식 문서
Dynamic Scene Shadows — Cascaded Shadow Map PropertiesCSM의 동작 설명과 Dynamic Shadow Distance / Num Dynamic Shadow Cascades / Cascade Distribution Exponent / Cascade Transition Fraction / Shadow Distance Fadeout Fraction 속성 정의.
Epic Games 공식 문서
Temporal Super Resolution · TSR FAQHistory Update가 TSR 최대 비용 패스라는 서술, r.ScreenPercentage·r.TSR.History.ScreenPercentage, 그리고 FAQ의 “저스펙 GPU 유저를 위해 TAA를 선택지로 남긴다”는 서술.
Epic Games 공식 API 문서
EAntiAliasingMethodAAM_None / AAM_FXAA / AAM_TemporalAA / AAM_MSAA / AAM_TSR 순서, 즉 r.AntiAliasingMethod의 값 매핑.
Epic Games 공식 문서
Overview of Substrate MaterialsBlendable GBuffer와 Adaptive GBuffer의 공식 명칭과 성격, Adaptive의 지원 플랫폼 목록과 미지원 시 Blendable로 떨어지는 동작, r.Substrate.BytesPerPixel.
Epic Games 공식 문서 · 릴리스 노트
XR Performance Features · UE 5.2 Release Notes (VRS)지원 셰이딩 레이트(1x2 / 2x1 / 2x2 / 2x4 / 4x2 / 4x4)와 r.VRS.Enable·r.VRS.EnableImage. Contrast Adaptive Shading과 r.VRS.ContrastAdaptiveShading 1은 UE 5.2 릴리스 노트에서 확인됩니다.
Epic Games 공식 문서
Using the Mobile Deferred Shading Mode“Unreal Engine supports Mobile Deferred shading on all platforms that use the Mobile renderer, including PC platforms…”와 r.Mobile.ShadingPath 값 정의.
부록
각주
세션이 제시했지만 공개 자료로 확정하지 못한 항목을 여기에 모았습니다.
각주
- 티어별 Steam 유저 커버리지 수치 — 세션은 포트나이트 권장 GPU 스펙을 Steam 하드웨어·소프트웨어 서베이와 대조해 약 25% / 약 75% / 90% 이상이라는 값을 제시했습니다. 두 출처 모두 실재하고 접근 가능하지만(에픽의 포트나이트 시스템 요구사항 페이지, Valve의
store.steampowered.com/hwsurvey), Steam 서베이는 월 단위로 갱신되고 포트나이트 요구사항도 개정되므로 특정 퍼센트를 고정값으로 확인할 수 없습니다. 티어 폭을 넓힐 때 도달 유저가 크게 늘어난다는 논지 자체는 두 자료의 구조에서 그대로 성립합니다. ↩ - 레이트레이싱 대응 GPU 보급률 — 세션은 약 60% 보급 / 약 40% 미대응이라는 값을 제시했습니다. 위와 같은 이유로 고정 수치로는 확인되지 않습니다.다만 “미대응 GPU가 상당 규모로 남아 있다”는 전제는 루멘이 소프트웨어 레이 트레이싱 경로를 기본값으로 유지하는 공식 설계와 일치합니다. ↩
- 프로젝트 스케일러빌리티 오버라이드 파일 이름 — 공식 문서가 안내하는 파일명은
DefaultScalability.ini이며, 프로젝트의Config폴더에 새로 만들라고 기술합니다.Scalability.ini라는 이름의 프로젝트 오버라이드 파일은 공식 문서에서 확인되지 않았습니다. 엔진 원본이BaseScalability.ini라는 점은 문서에 반복해서 명시됩니다. ↩ - 루멘 라이트의 개별 실측 수치 — 세션은 Unreal Insights의 Diffuse Indirect and AO 기준으로 1.4ms → 0.7ms라는 값을 제시했습니다. 에픽의 공식 발표는 “Lumen High Quality 대비 2배 빠르다”는 상대 비교만 기술하고, 개별 밀리초 수치는 공식 자료에서 확인되지 않습니다. 세션의 테스트 씬에서 측정된 값으로 보이며, 발표에서도 씬 구성에 좌우된다는 단서가 함께 달렸습니다. ↩
- 새 개더 알고리즘의 명칭— 세션 정리 단계에서 이 알고리즘을 “Radiance Field Gather”로 추정했으나, 공식 자료에서 이 명칭은 확인되지 않습니다. 공식 성능 가이드가 쓰는 표현은 Irradiance Field Gather(같은 문서 안에서 “Irradiance Final Gather”로도 표기)이며, 활성화 CVar는
r.Lumen.FinalGatherMethod 0입니다. 반대편의 Screen Probe Gather는 공식 문서에 그대로 등장하는 명칭입니다. 본문은 혼동을 피하기 위해 확정된 쪽만 고유명으로 적었습니다. ↩ - DFAO와 루멘의 비용 비교 — 세션이 제시한 약 0.75ms 대 약 7ms는 동일 플랫폼 테스트 케이스의 실측값이며 공식 자료에는 대응하는 수치가 없습니다. 다만 스케일을 내릴 때 DFAO가 루멘 GI를 대체하는 관계는 공식 성능 가이드에 기술되어 있어, 두 기법이 비용 계층상 다른 급이라는 논지 자체는 문서와 일치합니다. ↩
- 대안 B·C의 출처 세션— 각각 “2년 전 언리얼 페스트”와 “2025년 언리얼 페스트” 발표 사례로 언급됐으나 정확한 개최지와 세션명은 확인되지 않았습니다. 두 사례의 기법 설명은 발표 내용을 그대로 옮긴 것이며, 원 강연을 찾으려면 언리얼 페스트 아카이브에서 별도 확인이 필요합니다. ↩
- Stationary 라이트 한계 초과 시의 동작 — 세션은 겹치는 라이트가 5개 이상이 되면 일부를 Movable로 전환하는 사양이라고 설명했습니다. 공식 문서의 서술은 “Once the channel limit is reached, only dynamic (or whole scene shadows) are used, which brings with it considerable performance cost”로, “정적 섀도잉을 잃고 동적 그림자만 쓰게 된다”는 결과를 기술합니다. 결과적으로 해당 라이트가 동적으로 처리된다는 점은 같지만, “랜덤하게 Mobility가 바뀐다”는 표현은 문서에서 확인되지 않습니다. 한계를 넘기지 않도록 반경을 줄이는 대응책의 유효성은 어느 서술에서도 동일합니다. ↩
- Mesh Streaming의 프로덕션 사용 사례 — 세션은 이 기능이 실제 대규모 타이틀에서 사용 중이라 안정적이라고 소개했습니다.
r.MeshStreamingCVar가 존재하고 프로젝트 세팅이 이를DefaultEngine.ini에 기록하는 것, 스태틱 메시의Num Streamed LODs속성이 있는 것은 확인됩니다. 다만 이 기능을 다루는 전용 공식 문서 페이지와, 특정 타이틀이 사용 중이라는 공식 서술은 확인되지 않았습니다. 엔진 개발자의 포럼 답변에서 실험적 표기가 제거됐다는 언급만 확인됩니다. ↩ - 플랫폼별 라이트 무효화 구조의 부재— 세션은 “플랫폼별로 특정 라이트나 그 그림자를 무효화하는 구조가 표준으로 준비되어 있지 않다”고 문제를 제기했습니다. 문서 정리 시점의 공식 메가라이트 문서에는
r.MegaLights.Allow 0(스케일러빌리티 단계·디바이스 프로파일 단위), 라이트 컴포넌트의 Allow MegaLights, MegaLights Shadow Method 세 가지가 기술되어 있습니다. 발표 시점의 엔진 버전과 문서 상태가 달랐을 가능성이 있어 본문에는 양쪽을 모두 남겼습니다. 조기 검증을 권하는 실무적 결론은 어느 쪽이든 유효합니다. ↩ - TSR과 TAAU의 실측 비교 — 내부 해상도 70%에서 1080p로 업스케일할 때 TSR 7.0ms, TAAU 1.3ms라는 값은 세션의 동일 하드웨어 테스트 케이스 결과이며 공식 자료에 대응하는 수치는 없습니다. TSR의 주 비용이 디스플레이 해상도에서 도는 History Update라는 구조적 설명, 그리고 저스펙 GPU를 위해 TAA를 남기라는 권고는 공식 문서로 확인됩니다. ↩
- 서브스트레이트 두 G-Buffer 모드의 명칭 — 세션 정리 단계에서는 두 모드의 정확한 명칭을 확정하지 못했습니다. 공식 문서가 쓰는 명칭은 Blendable GBuffer와 Adaptive GBuffer이며, 프로젝트 설정 항목은 Substrate GBuffer Format (Project)입니다. 본문의 기능적 구분은 이 공식 명칭에 맞춰 다시 정리했습니다. ↩
- 성능 중시 모드와 하드웨어 레이트레이싱의 관계 — 세션은 두 모드 중 성능 중시 쪽이 하드웨어 레이트레이싱에 대응한다는 구분을 제시했습니다. 공식 문서에서 하드웨어 레이트레이싱 지원을 특정 G-Buffer 포맷에 묶는 서술은 확인되지 않았습니다. 확인되는 것은 Adaptive GBuffer의 지원 플랫폼이 한정되어 있고, 미지원 플랫폼에서는 머티리얼이 단순화되어 Blendable로 동작한다는 서술입니다. ↩
- Contrast Adaptive Shading의 추가 비용 — 세션은 판정 이미지를 만들기 위해 별도의 컴퓨트 셰이더가 돌아간다고 설명했습니다. 공식 릴리스 노트는 이 기법이 “이전 프레임을 분석해 거친 셰이딩 레이트로 그릴 수 있는 영역을 판정한다”고만 기술하고, 별도 컴퓨트 패스라는 구현 세부와 그 비용은 공식 자료에서 확인되지 않습니다. 어느 쪽이든 “아낀 만큼과 판정 비용을 실측해 비교하라”는 결론은 그대로 유효합니다. ↩
- PC 퍼포먼스 모드가 모바일 디퍼드 렌더러를 쓴다는 사례 — 세션은 이를 작년 언리얼 페스트 올랜도 발표에서 공개된 포트나이트 사례로 인용했습니다. 특정 타이틀의 퍼포먼스 모드가 어떤 렌더러를 쓰는지에 대한 공식 문서 서술은 확인되지 않았습니다. 반면 모바일 렌더러가 PC 플랫폼에서도 동작한다는 사실은 공식 문서로 명확히 확인되므로(“including PC platforms”), 이 절의 논지인 “경량 렌더러 옵션으로 재평가할 가치가 있다”는 유지했습니다. ↩



