이런 분이 읽으면 좋습니다!
- 언리얼 엔진5를 사용하면서 빛이 어떻게 계산되는지 궁금했던 분
- PBR, Lumen, Nanite 같은 용어가 수학적으로 어떤 의미인지 알고 싶은 분
이 글로 알 수 있는 내용
- 카지야 렌더링 방정식의 각 항이 무엇을 의미하는지
- UE5의 Nanite, Lumen, VSM이 방정식의 어느 부분을 담당하는지
- UE5 PBR 재질(GGX BRDF)이 수학적으로 어떻게 작동하는지
1986년 James Kajiya가 발표한 렌더링 방정식은 빛의 전파를 수학적으로 정의한다. 이 방정식이 실시간 엔진에서 어떻게 근사되고 구현되는지 살펴본다.
00 — 그래픽스 파이프라인그래픽스 파이프라인 개요
InitViews는 "계산할 x를 고른다", Rasterization은 "x 좌표를 확정한다", Shading은 "방정식의 핵심 항들을 주로 평가한다", Output Merger는 "각 패스의 조명 결과를 render target에 누적한다". 방정식의 항들은 Base Pass, Shadow, GI, Reflection 등 여러 패스에 걸쳐 계산되고, 그 결과가 합산되어 최종 픽셀 색이 만들어진다.
각 항이 의미하는 것
점 x에서 방향 ωo(카메라 방향)로 나가는 빛의 총량. 최종적으로 픽셀에 기록되는 값.
재질 자체가 발광하는 경우 추가되는 항. 모니터, 네온사인, 불꽃 같은 발광 오브젝트가 해당.
양방향 반사 분포 함수. "들어온 빛 중 얼마나 반사되어 나가는가"를 결정하는 재질의 핵심.
방향 ωi에서 점 x로 들어오는 빛의 양. 이 값 자체도 재귀적으로 렌더링 방정식을 풀어야 한다.
빛이 표면에 비스듬히 입사할수록 에너지가 넓게 퍼지는 물리 현상. 법선과 입사 방향의 내적.
표면 법선을 기준으로 모든 방향에서 들어오는 빛을 다 더한다. 이 적분이 실시간 렌더링의 핵심 난제.
Li(x, ωi)를 구하려면 다시 렌더링 방정식을 풀어야 한다. 즉 빛은 재귀적으로 튕기고, 그 모든 경로를 추적하면 무한 연산이 필요하다. 실시간 엔진은 이 무한 재귀를 영리하게 근사한다.
언리얼 엔진5가 방정식을 푸는 방법
기하 처리 및 재질 입력 생성 — Nanite + Base Pass
Nanite가 픽셀 단위 정밀도로 가시 기하를 결정하고, 이어지는 Base Pass에서 재질 셰이더가 실행되어 위치(x), 법선, BaseColor, Roughness, Metallic 등이 G-Buffer에 저장된다. Nanite는 rasterization과 visibility를 담당하고, G-Buffer 저장은 deferred base pass의 결과다. 이후 모든 조명 계산의 입력값이 여기서 만들어진다.
직접광 — Li × fr × cosθ 직접 계산
태양, 포인트 라이트, 스팟 라이트 등 명시적 광원에서 오는 빛은 방정식을 해석적으로 적용한다. 광원 방향이 정해져 있으므로 반구 적분이 단순화된다. UE5는 Disney식 metallic/roughness 워크플로의 영향을 받은 실시간 PBR 모델을 사용하며, GGX 기반 specular BRDF와 Lambert 계열의 diffuse 근사를 조합한다.
Lumen — 간접광 (GI) 근사
방정식에서 가장 어려운 부분: 다른 표면에서 한 번 이상 튕겨온 빛. Lumen은 Surface Cache(Mesh Cards), Screen Probe Gather, Radiance Cache, Software Ray Tracing(SDF), Hardware RT fallback을 계층적으로 조합해 scene-space에서 간접광을 근사한다. 단순한 SDF 레이마칭이 아니라 여러 기법의 하이브리드 시스템이다.
반사 — 거울 방향 Li 추적
광택 있는 표면에서의 반사는 특정 방향 ωi에 집중된 샘플링으로 근사한다. 매끈한 표면일수록 반사 방향성이 강해져 더 높은 정확도의 추적이 필요하며, Lumen은 screen trace, surface cache 조회, hardware ray tracing 등을 플랫폼·설정·hit 여부에 따라 상황에 맞게 조합해 사용한다.
그림자 — 가시성 함수 V(x, ωi)
빛이 점 x에 실제로 도달하는지 여부를 결정하는 가시성 함수. UE5에서는 이를 Virtual Shadow Maps, screen-space visibility, distance field 기반 occlusion, ray tracing, Lumen 내부의 tracing hit/miss 등 여러 시스템이 나누어 담당하며 상황에 따라 혼합해 사용한다. Nanite VSM은 그 중 주요한 하나로 픽셀 단위 정밀도의 그림자를 메모리 효율적으로 제공한다.
포스트 프로세스 — 최종 Lo 보정
계산된 Radiance 값을 실제 디스플레이에 맞게 변환한다. Tone Mapping(HDR → LDR 변환), Exposure, Bloom(발광 오브젝트 Le 항 강조), Temporal Anti-Aliasing이 여기서 처리된다. TSR(Temporal Super Resolution)은 낮은 해상도로 렌더링 후 업스케일해 성능을 확보한다.
방정식 항 ↔ UE5 시스템 매핑
| 방정식 항 | 물리적 의미 | UE5 구현 | 방식 |
|---|---|---|---|
| Lo(x, ωo) | 최종 픽셀 색 | Final Color Buffer | 합산 결과 |
| Le(x, ωo) | 재질 자체 발광 | Emissive Channel + Bloom | 직접 추가 |
| fr(x, ωi, ωo) | BRDF (재질 반응) | PBR Material (GGX + Lambert) | Disney 근사 |
| Li (직접광) | 광원에서 직접 오는 빛 | Directional / Point / Spot Light | 해석적 계산 |
| Li (간접광) | 다른 표면에서 반사된 빛 | Lumen GI (Surface Cache · Screen Probe · Radiance Cache · Tracing) | 하이브리드 근사 |
| Li (환경광) | Sky / IBL | Sky Atmosphere + SkyLight | 큐브맵 컨볼루션 |
| cos θi | Lambert 코사인 항 | N · L (Shader 내적 연산) | 셰이더 내적 계산 |
| V(x, ωi) | 가시성 (그림자) | VSM · DFAO · RT Occlusion 등 | 복수 시스템 조합 |
| ∫Ω dωi | 반구 적분 | 분석적 조명 · 환경맵 사전적분 · Lumen probe · 시간적 누적 | 복수 기법 조합 |
UE5의 PBR 재질
D — 노멀 분포 함수
GGX/Trowbridge-Reitz 모델. Roughness에 따라 반사 로브의 날카로움을 결정.
G — 기하 감쇠 함수
Smith's Schlick-GGX. 미세면이 서로 가리거나 반사광을 막는 효과(Shadowing/Masking).
F — 프레넬 반사율
Schlick 근사. 빛이 표면에 비스듬히 입사할수록 반사율이 증가하는 프레넬 효과.
Metallic과 BaseColor가 함께 specular reflectance(F0)를 결정한다. 비금속의 경우 F0는 약 0.04로 고정되고, Metallic=1에 가까울수록 BaseColor가 specular reflectance를 직접 구성하며 diffuse 기여가 줄어든다. Roughness는 GGX 분포의 α값을 제어해 반사 로브의 날카로움을 결정한다. 이 두 파라미터로 BRDF를 실용적인 수준에서 제어한다.
Lumen이 GI를 근사하는 방법
Surface Cache & Mesh Card
씬의 모든 메시에 대해 Mesh Card(텍스처 형태의 표면 캐시)를 생성한다. 각 카드에는 해당 표면의 Radiance가 저장되며, 빛이 바뀌면 점진적으로 갱신된다. Screen Probe Gather가 이 Surface Cache를 scene-space에서 샘플링해 간접광을 누적한다. 인접 표면 간 다중 바운스 간접광도 이 캐시를 통해 반복적으로 근사한다.
Software Ray Marching (SDF)
Signed Distance Field를 활용해 레이를 빠르게 전진시킨다. 정확한 삼각형 교차 검사 없이 "얼마나 가까운 표면이 있는가"만 확인해 레이를 진행시키므로 GPU에서 효율적으로 작동한다. 먼 거리의 GI에 주로 사용된다.
Hardware Ray Tracing (선택적)
DXR/Vulkan RT 지원 GPU에서는 실제 레이트레이싱으로 근거리 GI 및 반사를 계산한다. Lumen은 Software RT(원거리)와 Hardware RT(근거리)를 혼합해 품질과 성능을 동시에 달성한다.
실시간 엔진은 반구 적분을 직접 계산하지 않는다. UE5는 분석적 직접광 계산, 환경맵 사전적분(IBL convolution), Screen Probe 기반 중요도 샘플링, Radiance Cache를 통한 공간 재사용, Temporal Accumulation을 통한 시간적 누적을 조합해 적분을 근사한다. 각 기법은 적분의 서로 다른 주파수 영역을 담당한다 — 저주파 영역(diffuse GI, irradiance)은 probe와 캐시로, 고주파 영역(glossy reflection, sharp visibility)은 tracing과 screen-space 기법으로 처리하는 방식이다.
마치며
렌더링 방정식은 "이상"이고, UE5는 "현실"이다
카지야의 방정식은 빛의 완벽한 물리적 거동을 기술하지만, 완전히 푸는 것은 오프라인 레이트레이싱에서도 수 시간이 걸린다. UE5는 Nanite, Lumen, VSM, TSR 등의 시스템으로 각 항을 지능적으로 근사해 초당 60프레임의 실시간 렌더링으로 구현해낸다. 이것이 "Physically Based Rendering"의 본질이다 — 물리를 흉내 내되, 영리하게.