Radiance Cascades 심층 기술 해설
고객사 프로젝트의 원거리 그림자 처리문제를 해결하기 위해 Distance Field Shadow 솔루션인 Erebus 디스코드 커뮤니티에서 이런 저런 글을 읽던 도중 최근 지주 언급되는 Radiance Cascades 에 대한 제이슨 맥기의 멋진 글을 보고 내용을 좀 확장 해 봤습니다. AI 와 함께 정리 한 글이지만 지하철에서 읽어보기에는 무리가 없는 글이 될 것입니다.
Building Real-Time Global Illumination: Radiance Cascades
jason.today Building Real-Time Global Illumination Radiance Cascades An Interactive Walkthrough This is the second post in a series. Checkout the first post, which walks through raymarching, the jump flood algorithm, distance fields, and a noise-based glob
jason.today
또한 아주대학교 소프트콘에서 Radiant 팀이 발표 한 “Radiance Cascades를 활용한 실시간 Global Illumination 구현”에 관한 깃허브 저장소가 있습니다.
GitHub - n01r1r/radiance-cascades-urp: 2025 Fall Media Project Repository
2025 Fall Media Project Repository. Contribute to n01r1r/radiance-cascades-urp development by creating an account on GitHub.
github.com
좋은 참고자료가 되겠네요.
Radiance Cascades: A Novel High-Resolution Formal Solution for Multidimensional Non-LTE Radiative Transfer
Non-LTE radiative transfer is a key tool for modern astrophysics: it is the means by which many key synthetic observables are produced, thus connecting simulations and observations. Radiative transfer models also inform our understanding of the primary for
arxiv.org
들어가며
컴퓨터 그래픽스에서 글로벌 일루미네이션(Global Illumination, GI)은 오랜 시간 동안 가장 도전적인 문제 중 하나로 남아있었습니다. 빛이 표면에서 반사되어 다른 표면을 간접적으로 비추는 현상을 시뮬레이션하는 것은 사실적인 렌더링의 핵심이지만, 그 계산 비용은 실시간 애플리케이션에서 항상 큰 장벽이었습니다.
2023년, Grinding Gear Games(Path of Exile 개발사)의 시니어 그래픽스 프로그래머 Alexander Sannikov가 발표한 Radiance Cascades는 이 오래된 문제에 대한 혁신적인 해결책을 제시했습니다. 이 기법은 노이즈 없이 실시간으로 글로벌 일루미네이션을 계산할 수 있으며, 기존 방식들이 가진 근본적인 한계를 우회하는 독창적인 접근법을 사용합니다.
이 글에서는 Jason McGhee의 "Building Real-Time Global Illumination: Radiance Cascades" 블로그 포스트를 바탕으로, Radiance Cascades의 핵심 원리와 구현 세부사항을 심층적으로 분석하고, 기존 GI 기법들과의 기술적 비교를 통해 이 기법이 왜 주목받는지 살펴보겠습니다.
1. 기존 글로벌 일루미네이션의 근본적 한계
1.1 전통적인 레이 캐스팅 방식의 문제
글로벌 일루미네이션을 계산하는 가장 직관적인 방법은 각 픽셀에서 여러 방향으로 레이(광선)를 발사하여 광원에 도달하는지 확인하는 것입니다. 이 방식은 물리적으로 정확하지만, 계산 비용이 급격히 증가한다는 치명적인 문제가 있습니다.
구체적인 수치로 살펴보면, 1024×1024 해상도의 화면에서 각 픽셀마다 512개의 레이를 발사한다고 가정해봅시다. 이 경우 약 100만 픽셀에서 512개씩, 총 5억 개 이상의 레이를 매 프레임마다 계산해야 합니다. Distance Field를 활용한 Sphere Marching 최적화를 적용하더라도, 레이당 평균 10회의 텍스처 룩업이 필요하고, 최종적으로 시작과 종료 지점에서 추가 룩업이 발생하여 대략 10억 회의 텍스처 접근이 필요합니다. 텍스처 룩업 한 번에 1나노초가 걸린다고 가정해도, 이는 프레임당 약 1초의 처리 시간을 의미합니다. 60fps를 달성하려면 약 16밀리초 내에 모든 계산을 완료해야 하므로, 대략 100배의 성능 향상이 필요한 셈입니다.
1.2 노이즈 기반 접근법의 딜레마
이러한 계산 비용 문제를 해결하기 위해, 대부분의 실시간 GI 기법들은 노이즈를 활용합니다. 각 픽셀에서 적은 수의 레이만 발사하되, 발사 방향에 랜덤성을 부여하여 시간적 축적(temporal accumulation)을 통해 결과를 수렴시키는 방식입니다. 이 방법은 계산 비용을 크게 줄여주지만, 본질적으로 두 가지 문제를 안고 있습니다.
첫째, 시각적 노이즈입니다. 프레임마다 다른 방향으로 레이를 발사하기 때문에 결과가 불안정하고, 이를 숨기기 위한 디노이징(denoising) 과정이 필요합니다. 둘째, 정확도 손실입니다. 적은 수의 샘플링으로는 특히 작은 광원이나 복잡한 기하구조에서 정확한 조명 정보를 얻기 어렵습니다.
여기서 핵심적인 질문이 제기됩니다. 과연 품질 손실 없이 계산량을 줄일 수 있는 방법이 존재할까요? Radiance Cascades는 바로 이 질문에 대한 긍정적인 답변입니다.
2. Penumbra Hypothesis: Radiance Cascades의 이론적 기반
2.1 반그림자 가설의 물리적 직관
Radiance Cascades의 핵심은 "Penumbra Hypothesis(반그림자 가설)"라고 불리는 관찰에 기반합니다. 이 가설은 그림자의 물리적 특성에서 출발합니다.
반그림자(penumbra)란 완전한 그림자(umbra)와 완전한 빛 사이의 전이 영역을 말합니다. 면광원(area light)이 물체에 의해 부분적으로 가려질 때, 그림자의 경계는 날카롭지 않고 점진적으로 흐려지는데, 이 흐린 영역이 바로 반그림자입니다.
핵심적인 관찰은 다음과 같습니다. 차단체(occluder)에 가까운 위치에서는 그림자 경계가 날카롭게 형성되고, 차단체에서 멀어질수록 그림자 경계가 부드러워집니다. 이는 광원의 겉보기 크기(subtended angle)가 거리에 따라 달라지기 때문입니다.
2.2 선형 해상도와 각도 해상도의 역관계
Penumbra Hypothesis는 이 물리적 현상을 수학적으로 정형화합니다. 어떤 지점에서 정확한 조명 정보를 얻기 위해 필요한 해상도는 두 가지 차원에서 고려되어야 합니다.
Linear Resolution(선형 해상도)은 공간상에서 샘플링해야 하는 지점의 밀도를 의미합니다. 쉽게 말해 "얼마나 촘촘하게 픽셀을 배치해야 하는가"의 문제입니다.
Angular Resolution(각도 해상도)은 각 지점에서 얼마나 많은 방향으로 레이를 발사해야 하는가를 의미합니다. 즉 "얼마나 많은 레이 방향을 샘플링해야 하는가"의 문제입니다.
Penumbra Hypothesis의 핵심 주장은 이 두 해상도가 거리에 따라 역관계를 가진다는 것입니다. 어떤 픽셀 위치에서 가까운 광원/차단체에 대해서는 높은 선형 해상도와 낮은 각도 해상도가 필요하고, 먼 광원/차단체에 대해서는 낮은 선형 해상도와 높은 각도 해상도가 필요합니다.
이것이 왜 합리적인지 직관적으로 이해해봅시다. 가까이 있는 물체의 그림자 경계는 날카롭기 때문에, 이를 정확히 포착하려면 공간적으로 촘촘한 샘플링이 필요합니다. 하지만 가까이 있는 광원은 큰 각도를 차지하므로, 상대적으로 적은 방향의 레이로도 충분히 정보를 얻을 수 있습니다. 반대로 멀리 있는 광원은 작은 점처럼 보이므로, 이를 "맞추려면" 더 많은 방향으로 레이를 발사해야 합니다. 하지만 멀리서 오는 빛의 영향은 공간적으로 천천히 변하므로, 촘촘한 공간 샘플링은 불필요합니다.
2.3 수학적 정형화
Alexander Sannikov의 원 논문에서는 이 관계를 다음과 같이 수학적으로 표현합니다. 선형 이산화 단계(linear discretization step)를 Δx, 각도 이산화 단계(angular discretization step)를 Δω, 그리고 원점에서의 거리를 D라고 할 때, penumbra criterion은 다음 조건을 만족해야 합니다.
Δx는 D에 비례하고, Δω는 1/D에 비례합니다.
이를 더 일반적인 형태로 표현하면, Δx = F(D)이고 Δω = G(1/D)가 됩니다. 여기서 F와 G는 임의의 선형 함수입니다. 이 조건이 성립할 때, 선형 해상도와 각도 해상도의 곱은 거리에 상관없이 일정하게 유지됩니다.
이것이 의미하는 바는 심오합니다. 전통적인 레이 캐스팅에서는 모든 거리에 대해 동일한 각도 해상도를 사용했기 때문에, 가까운 광원에 대해서는 과도한 샘플링을, 먼 광원에 대해서는 부족한 샘플링을 수행하는 비효율이 발생했습니다. Penumbra Hypothesis를 활용하면 각 거리 구간에 최적화된 해상도를 사용할 수 있어, 전체 계산량을 극적으로 줄이면서도 정확도를 유지할 수 있습니다.
3. Radiance Cascades 구현의 핵심 메커니즘
3.1 Radiance Interval의 개념
Radiance Cascades의 구현은 "Radiance Interval"이라는 개념에서 시작합니다. 전통적인 레이 캐스팅에서는 하나의 레이가 원점에서 시작하여 무한대(또는 화면 경계)까지 뻗어나갑니다. 하지만 Radiance Cascades에서는 각 레이를 거리에 따라 여러 구간으로 분할합니다.
예를 들어, 원점에서 최대 거리 D_max까지의 레이를 [0, D_0], [D_0, D_1], [D_1, D_2], ... 와 같은 구간으로 나눕니다. 각 구간은 독립적인 "Radiance Interval"로 처리되며, 해당 구간에 최적화된 해상도 설정을 사용합니다.
핵심적인 통찰은 이 구간들이 나중에 "병합(merge)"될 수 있다는 것입니다. 방사 전달 방정식(radiative transfer equation)의 선형성 덕분에, 개별 구간에서 계산된 조명 정보는 간단한 연산으로 합쳐져 원래의 전체 레이와 동등한 결과를 생성합니다.
3.2 Cascade 구조와 스케일링
Radiance Cascades에서 "Cascade"는 특정 거리 구간을 담당하는 데이터 구조입니다. 가장 낮은 레벨인 Cascade 0은 원점에 가장 가까운 구간을 담당하고, 레벨이 올라갈수록 더 먼 구간을 담당합니다.
각 Cascade의 파라미터는 특정 스케일링 팩터에 따라 결정됩니다. 2D 구현에서 일반적으로 사용되는 base가 4인 경우를 살펴보면, Cascade N에서 Cascade N+1로 갈 때 다음과 같은 변화가 일어납니다.
Probe 수(선형 해상도)는 1/4로 감소합니다. 각 차원에서 1/2씩 감소하므로, 면적 기준으로는 1/4입니다.
레이 수(각도 해상도)는 4배로 증가합니다.
레이 시작 거리는 4배 더 멀어집니다.
레이 길이도 4배로 늘어납니다.
이 스케일링 규칙은 Penumbra Hypothesis를 직접적으로 구현한 것입니다. 먼 거리를 담당하는 Cascade일수록 더 많은 레이 방향이 필요하지만, 공간적으로는 더 긴 샘플링으로 충분합니다.
3.3 Probe 기반 레이 분배와 메모리 레이아웃
Radiance Cascades의 가장 혁신적인 최적화 중 하나는 "Probe" 개념을 통한 레이 분배입니다. 전통적인 방식에서는 각 픽셀이 독립적으로 모든 방향의 레이를 발사했습니다. 하지만 이는 엄청난 중복 계산을 야기합니다.
Radiance Cascades에서 "Probe"는 여러 레이의 출발점을 공유하는 공간적 단위입니다. 예를 들어 base가 4인 경우, Cascade 1에서 2×2 = 4픽셀 그룹이 하나의 Probe를 형성합니다. 이 Probe에서 16개의 레이를 발사해야 한다면, 각 픽셀이 4개씩 담당하여 총 16개 방향을 커버합니다.
이것이 왜 효율적인지 수치로 확인해봅시다. 만약 256개의 레이를 발사해야 하는 Cascade가 있다고 가정합니다. 전통적인 방식에서는 각 픽셀이 256개의 레이를 모두 계산해야 합니다. 하지만 Probe 기반 분배에서는 16개의 픽셀이 Probe를 형성하고, 각 픽셀은 16개의 레이만 담당합니다. 결과적으로 같은 정보를 1/16의 비용으로 얻을 수 있습니다.
메모리 레이아웃 측면에서, 이 Probe 데이터를 어떻게 텍스처에 저장하느냐에 따라 성능이 크게 달라집니다. Yaazarai(Alex)의 구현에서 제안된 "Direction-First" 레이아웃은 같은 방향을 가리키는 모든 레이를 메모리상에서 연속적으로 배치합니다. 이렇게 하면 병합 단계에서 하드웨어 보간(bilinear interpolation)을 활용할 수 있어, 텍스처 샘플링 횟수를 크게 줄일 수 있습니다.
3.4 Pre-Averaging 최적화
또 다른 중요한 최적화는 "Pre-Averaging"입니다. 병합 과정에서 상위 Cascade의 4개 이웃 Probe에서 각각 4개의 레이(같은 방향)를 가져와 평균을 낸다는 사실을 활용합니다.
어차피 평균을 낼 것이라면, 굳이 모든 레이를 개별적으로 저장할 필요가 있을까요? Pre-Averaging에서는 4개의 레이를 발사한 후 즉시 평균을 내어 하나의 값만 저장합니다. 이를 통해 메모리 사용량을 75% 줄이고, 병합 시 텍스처 샘플링 횟수도 16회에서 4회로 감소시킵니다.
Direction-First 레이아웃과 Pre-Averaging을 결합하면, 병합 과정의 텍스처 샘플링을 단 1회로 줄일 수 있습니다. 하드웨어 보간이 4개의 이웃 Probe 값을 자동으로 보간해주기 때문입니다.
3.5 Cascade 병합 알고리즘
Radiance Cascades의 마지막 핵심 단계는 개별 Cascade를 병합하여 최종 조명 결과를 얻는 것입니다. 병합은 가장 높은 Cascade(가장 먼 거리)부터 시작하여 아래로 내려오며 진행됩니다.
병합 과정의 핵심 원리는 다음과 같습니다. Cascade N의 특정 레이가 아무것도 맞추지 못한 경우(즉, 해당 구간에서 빛이나 차단체를 만나지 않은 경우), 그 레이는 더 먼 거리의 정보가 필요합니다. 이때 Cascade N+1에서 해당 방향의 조명 정보를 가져와 합칩니다.
구현 측면에서, 레이의 알파 채널은 "가시성(visibility)" 플래그로 사용됩니다. 레이가 무언가를 맞추면 알파가 0이 되고, 아무것도 맞추지 못하면 알파가 1이 됩니다. 병합 시에는 알파가 1인 레이에 대해서만 상위 Cascade의 값을 참조합니다.
병합 시 주의해야 할 세부사항도 있습니다. 첫째, 최상위 Cascade는 병합할 대상이 없으므로 그대로 사용됩니다. 둘째, Direction-First 레이아웃에서 이웃 Probe 그룹의 경계에서 보간할 때, 잘못된 방향의 데이터가 섞이지 않도록 클램핑(clamping)이 필요합니다. 셋째, Cascade 사이의 미세한 간격에서 빛 누출(light leak)을 방지하기 위해, 레이 구간을 약간 겹치게 설정하는 것이 좋습니다.
4. 구현 세부사항과 셰이더 코드 분석
4.1 핵심 변수와 초기화
실제 셰이더 구현에서 필요한 핵심 변수들을 살펴보겠습니다. GLSL 스타일의 의사코드로 설명하면, Cascade 레벨에 따른 파라미터 계산은 다음과 같은 구조를 따릅니다.
먼저 base 값(일반적으로 4 또는 16)과 현재 Cascade 인덱스를 입력받습니다. 각도 해상도는 base의 (cascadeIndex + 1) 제곱으로 계산됩니다. 예를 들어 base가 4이고 Cascade 0이면 4개, Cascade 1이면 16개, Cascade 2면 64개의 레이 방향을 사용합니다.
선형 해상도(Probe 간격)는 sqrt(base)의 cascadeIndex 제곱으로 계산됩니다. base가 4일 때 Cascade 0에서는 1픽셀 간격, Cascade 1에서는 2픽셀 간격, Cascade 2에서는 4픽셀 간격이 됩니다.
레이 구간의 시작점과 길이는 기하급수적으로 증가합니다. 초기 구간 길이를 t_0이라 할 때, Cascade N의 시작점은 t_0 (1 - 4^N) / (1 - 4)로 계산되고(기하급수의 합), 구간 길이는 t_0 4^N입니다.
4.2 레이마칭 함수
레이마칭은 Distance Field를 활용한 Sphere Marching 방식을 따릅니다. 핵심적인 차이점은 레이가 특정 구간 내에서만 진행한다는 것입니다. 레이의 시작점은 Probe 중심에서 offset만큼 떨어진 위치이고, 레이는 최대 range만큼만 진행합니다.
구현 시 주의해야 할 점이 있습니다. 2D에서 광원은 영역(area)이 아닌 경계(edge)에서만 빛을 발산합니다. 따라서 레이가 광원 내부에서 시작하는 경우(Distance Field 값이 0이고 이동 거리도 0인 경우), 해당 레이는 아무런 조명 정보 없이 종료되어야 합니다. 그렇지 않으면 광원 내부가 밝게 렌더링되는 아티팩트가 발생합니다.
또한 Distance Field의 스케일링에 주의해야 합니다. Distance Field가 UV 공간이 아닌 픽셀 공간에서 계산된 경우, 비정방형 해상도에서 왜곡이 발생할 수 있습니다. 이를 방지하기 위해 화면의 대각선 길이로 정규화하는 것이 좋습니다.
4.3 병합 함수
병합 함수는 현재 Cascade의 레이 결과와 상위 Cascade의 데이터를 결합합니다. Direction-First 레이아웃을 사용할 때, 상위 Cascade에서 올바른 위치를 샘플링하는 것이 핵심입니다.
현재 레이의 방향 인덱스를 기반으로, 상위 Cascade에서 해당 방향을 담당하는 텍셀 그룹의 위치를 계산합니다. Pre-Averaging을 사용하는 경우, 현재 레이 인덱스에 4를 곱하면 상위 Cascade의 대응하는 Pre-Averaged 인덱스를 얻을 수 있습니다.
보간 가중치는 현재 Probe가 상위 Cascade의 4개 이웃 Probe 사이에서 어느 위치에 있는지에 따라 결정됩니다. 현재 Probe 위치를 2로 나누면 상위 Cascade에서의 상대적 위치가 됩니다. 하드웨어 보간을 활용하기 위해 0.25를 더해 중심을 약간 오프셋합니다.
4.4 sRGB 색공간 처리
정확한 조명 계산을 위해서는 선형 색공간에서 연산을 수행해야 합니다. WebGL을 포함한 많은 그래픽스 API는 기본적으로 sRGB 색공간을 사용하므로, 텍스처에서 읽은 값을 선형 공간으로 변환하고, 최종 결과를 다시 sRGB로 변환해야 합니다.
근사적인 변환으로는 감마 2.2를 사용합니다. 읽을 때는 pow(color, vec3(2.2))로 선형화하고, 쓸 때는 pow(color, vec3(1.0/2.2))로 sRGB로 변환합니다.
이 처리를 하지 않으면 조명 결과가 전체적으로 어둡게 나타나고, 특히 간접광의 색상 혼합이 부정확해집니다.
5. 기존 GI 기법들과의 기술적 비교
Radiance Cascades의 혁신성을 이해하기 위해, 기존의 실시간 GI 기법들과 상세히 비교해보겠습니다.
5.1 Ray Tracing (레이 트레이싱)
레이 트레이싱은 물리적으로 가장 정확한 GI 방법입니다. 각 픽셀에서 다수의 레이를 발사하여 빛의 경로를 추적하며, NVIDIA RTX와 같은 하드웨어 가속이 가능합니다.
레이 트레이싱의 장점은 물리적 정확성입니다. 반사, 굴절, 부드러운 그림자 등 거의 모든 광학 현상을 정확하게 시뮬레이션할 수 있습니다. 3D 공간에서 완전히 동작하며, 복잡한 기하구조에도 강건합니다.
하지만 레이 트레이싱에는 몇 가지 한계가 있습니다. 첫째, 노이즈 문제입니다. 실시간 성능을 위해 레이 수를 줄이면 필연적으로 노이즈가 발생하고, 이를 제거하기 위한 디노이징 과정이 필요합니다. 디노이징은 추가적인 계산 비용뿐 아니라 고스팅(ghosting)이나 과도한 블러링 같은 아티팩트를 유발할 수 있습니다. 둘째, 고성능 GPU 요구입니다. RTX 시리즈나 동급의 레이 트레이싱 하드웨어 없이는 실시간 성능을 달성하기 어렵습니다. 셋째, 레이 수에 따른 선형적 비용 증가입니다. 품질을 높이려면 레이 수를 늘려야 하고, 이는 직접적인 성능 저하로 이어집니다.
Radiance Cascades와 비교하면, Radiance Cascades는 노이즈가 전혀 없는 결과를 생성합니다. Penumbra Hypothesis를 활용한 지능적인 샘플링 덕분에, 적은 레이로도 높은 각도 해상도를 달성합니다. 다만 현재 구현은 주로 2D에 최적화되어 있으며, 3D 확장은 아직 연구 단계입니다.
5.2 Voxel Cone Tracing (복셀 콘 트레이싱)
Voxel Cone Tracing(VCT)은 씬을 3D 복셀 그리드로 변환한 후, 콘 형태로 레이를 발사하여 GI를 근사합니다. NVIDIA VXGI가 대표적인 구현입니다.
VCT의 작동 원리는 다음과 같습니다. 먼저 씬을 복셀화(voxelization)하여 직접광 정보를 3D 텍스처에 저장합니다. 그 다음 이 텍스처의 밉맵 체인을 생성합니다. 렌더링 시 각 픽셀에서 여러 방향으로 콘을 발사하고, 콘이 진행함에 따라 더 높은 밉맵 레벨을 샘플링합니다.
VCT의 장점은 다양한 효과를 하나의 프레임워크로 처리할 수 있다는 것입니다. 간접 조명, 앰비언트 오클루전, 광택 반사, 부드러운 그림자 등을 복셀 데이터로부터 추출할 수 있습니다. 또한 GPU 친화적인 파이프라인으로 구현 가능합니다.
VCT의 단점은 메모리 요구량이 큽니다. 고해상도 복셀 그리드는 수백 MB에서 수 GB의 메모리를 사용할 수 있습니다. 또한 복셀화 해상도의 한계로 인해 얇은 물체나 세밀한 디테일이 손실될 수 있습니다. 동적 오브젝트에 대한 실시간 재복셀화도 비용이 큽니다.
Radiance Cascades와 비교하면, Radiance Cascades는 별도의 복셀화 단계가 필요 없습니다. 2D Distance Field만으로 동작하며, 메모리 효율이 훨씬 높습니다. 다만 VCT는 3D 공간에서 완전한 GI를 제공하는 반면, 현재의 Radiance Cascades 구현은 2D 또는 스크린 스페이스에 한정됩니다.
5.3 Light Propagation Volumes (광전파 볼륨)
Light Propagation Volumes(LPV)는 Crytek에서 개발한 기법으로, 복셀 그리드 내에서 빛을 반복적으로 전파시켜 GI를 근사합니다. Unreal Engine 4에서도 지원됩니다.
LPV는 먼저 Reflective Shadow Maps(RSM)를 생성하여 1차 반사 지점의 정보를 수집합니다. 그 다음 이 정보를 3D 그리드에 주입하고, 반복적인 전파 단계를 통해 빛을 확산시킵니다. 최종적으로 각 픽셀에서 그리드를 샘플링하여 간접광을 얻습니다.
LPV의 장점은 대규모 환경에 적합하다는 것입니다. 그리드 기반 접근이므로 오픈 월드 게임에서 효과적입니다. 동적 광원과 동적 오브젝트를 비교적 저렴하게 처리할 수 있습니다.
LPV의 단점은 품질이 상대적으로 낮다는 것입니다. 확산 간접광(diffuse indirect)만 처리하며, 광택 반사(specular)는 지원하지 않습니다. 그리드 해상도에 의한 빛 누출 문제가 발생하기 쉽고, 결과가 전반적으로 "평평한" 느낌을 줄 수 있습니다.
Radiance Cascades와 비교하면, Radiance Cascades는 LPV보다 훨씬 정확한 penumbra 표현이 가능합니다. LPV가 diffuse만 처리하는 반면, Radiance Cascades는 원리적으로 모든 방향의 radiance를 정확하게 캡처합니다. 다만 LPV는 대규모 3D 환경에서 검증된 기법인 반면, Radiance Cascades는 아직 2D 중심의 기법입니다.
5.4 Screen Space Global Illumination (SSGI)
SSGI는 G-buffer와 깊이 버퍼를 활용하여 스크린 스페이스에서 GI를 근사하는 기법입니다. Unreal Engine 5의 Lumen도 SSGI 요소를 포함합니다.
SSGI는 화면에 보이는 정보만을 사용하므로 추가적인 자료구조가 필요 없습니다. 구현이 상대적으로 간단하고, 기존 디퍼드 렌더링 파이프라인에 쉽게 통합됩니다.
하지만 SSGI에는 본질적인 한계가 있습니다. 화면에 보이지 않는 영역의 정보는 사용할 수 없습니다. 카메라 밖의 밝은 광원이나 오클루전 뒤의 물체는 GI 계산에 반영되지 않습니다. 이로 인해 카메라 회전 시 조명이 급격히 변하는 아티팩트가 발생할 수 있습니다.
Radiance Cascades와 비교하면, 2D 구현에서 Radiance Cascades는 전체 씬을 대상으로 하므로 SSGI의 "보이는 것만" 제한이 없습니다. 정확한 penumbra와 노이즈 없는 결과라는 점에서 품질이 우월합니다. 다만 3D에서 Radiance Cascades를 스크린 스페이스로 구현하면 유사한 제한이 적용될 수 있습니다.
5.5 종합 비교
각 기법의 특성을 정리하면 다음과 같습니다.
Ray Tracing은 물리적 정확도가 매우 높지만 노이즈가 있고, 하드웨어 요구사항이 높으며, 메모리 사용량은 중간 수준입니다. 3D에서 완전하게 동작합니다.
Voxel Cone Tracing은 정확도가 중간에서 높음이며, 노이즈는 낮습니다. 메모리 사용량이 매우 높고, 3D에서 동작하지만 복셀 해상도에 제한됩니다.
Light Propagation Volumes는 정확도가 낮음에서 중간이며, 노이즈는 낮습니다. 메모리 사용량은 중간이고, 3D에서 동작하지만 diffuse만 처리합니다.
SSGI는 정확도가 중간이며, 노이즈는 중간 수준입니다. 메모리 사용량이 낮고, 스크린 스페이스로 제한됩니다.
Radiance Cascades는 정확도가 매우 높고, 노이즈가 없습니다. 메모리 사용량이 낮으며, 현재는 주로 2D에서 동작하고 3D 확장이 연구 중입니다.
6. Radiance Cascades의 한계와 알려진 아티팩트
6.1 Ringing Artifact
Radiance Cascades의 가장 눈에 띄는 아티팩트는 "ringing"입니다. 특히 sRGB 보정을 켠 상태에서 점광원 주변을 관찰하면, 동심원 형태의 밝기 변동이 보일 수 있습니다.
이 현상은 Cascade 간의 불연속성과 보간 과정에서 발생합니다. Cascade 경계에서 해상도가 급격히 변하기 때문에, 완벽한 연속성을 보장하기 어렵습니다.
현재 제안된 완화 방법으로는 Cascade 구간을 약간 겹치게 설정하거나, 경계에서의 블렌딩을 더 부드럽게 처리하는 것이 있습니다. 하지만 완전한 해결책은 아직 연구 중입니다.
6.2 Base 값에 따른 차이
Base 값(4 vs 16 등)에 따라 아티팩트의 양상이 달라집니다. Base 16을 사용하면 더 높은 각도 해상도를 적은 Cascade로 달성할 수 있지만, 아티팩트가 더 심해지는 경향이 있습니다.
Jason McGhee의 구현에서는 base 16 이상에서 구간 길이에 보정 계수를 곱하는 휴리스틱을 사용했습니다. 이는 경험적인 해결책으로, 근본적인 원인에 대한 분석이 더 필요합니다.
6.3 3D 확장의 도전
현재 공개된 Radiance Cascades 구현은 대부분 2D입니다. 3D로 확장할 때 몇 가지 도전이 있습니다.
첫째, 메모리 폭발입니다. 2D에서 방향은 원 위의 점으로 1차원이지만, 3D에서는 구 위의 점으로 2차원입니다. 이로 인해 각도 해상도에 필요한 저장 공간이 제곱으로 증가합니다.
둘째, 구면 조화 함수(Spherical Harmonics) 또는 다른 압축 기법의 필요성입니다. 전체 방향별 radiance를 저장하는 대신 압축된 표현을 사용해야 할 수 있습니다.
셋째, Distance Field 생성 비용입니다. 3D SDF는 2D보다 훨씬 비용이 크고, 동적 씬에서의 업데이트가 어렵습니다.
Alexander Sannikov의 원 논문에서는 3D 확장에 대한 이론적 기반을 제시하고 있으며, 커뮤니티에서 활발히 연구가 진행 중입니다.
7. 결론 및 전망
Radiance Cascades는 글로벌 일루미네이션 분야에서 패러다임 전환을 제시합니다. Penumbra Hypothesis라는 물리적 통찰을 기반으로, "레이 수 = 품질"이라는 기존의 공식을 깨뜨렸습니다. 지능적인 샘플링 분배를 통해, 기존 방식 대비 수십 배 적은 레이로도 노이즈 없는 고품질 결과를 달성합니다.
특히 2D 게임이나 탑다운 시점의 애플리케이션에서, Radiance Cascades는 즉시 적용 가능한 실용적인 해결책입니다. Pre-Averaging과 Direction-First 레이아웃 같은 최적화 기법을 통해, 일반적인 GPU에서도 실시간 성능을 달성할 수 있습니다.
3D 확장은 아직 도전적인 영역이지만, 기본 원리의 견고함과 활발한 커뮤니티 연구를 고려할 때 머지않아 실용적인 3D 구현이 등장할 것으로 기대됩니다.
그래픽스 프로그래밍에 관심 있는 개발자라면, Radiance Cascades는 반드시 이해하고 실험해볼 가치가 있는 기법입니다. 단순히 새로운 GI 기법을 넘어, 문제를 바라보는 새로운 관점을 제시하기 때문입니다.

참고 자료
이 글은 다음 자료들을 참고하여 작성되었습니다.
Jason McGhee의 "Building Real-Time Global Illumination: Radiance Cascades"
Yaazarai(Alex)의 "GM Shaders Guest: Radiance Cascades" 시리즈
Alexander Sannikov의 Radiance Cascades 논문
tmpvar의 Radiance Cascades 인터랙티브 데모
Graphics Programming Discord의 Radiance Cascades 채널
Christopher M. J. Osborne와 Alexander Sannikov의 학술 논문 "Radiance cascades: a novel high-resolution formal solution for multidimensional non-LTE radiative transfer"