Company
교육 철학

Splatting indirect illumination

Abstract

이 논문에서는 확산 및 비확산 표면에 대한 간접 조명 효과를 실시간으로 그럴듯하게 렌더링하는 새로운 방법을 제시해요. 간접 조명을 유발하는 장면의 기하학은 이전 연구에서 제안된 확장된 그림자 맵으로 포착되고, 2차 광원은 직접 조명이 있는 표면에 분포됩니다. 이 방법의 새로운 점은 이러한 2차 광원의 기여를 지연 셰이딩 과정에서 스플래팅하여, 렌더링 시간을 장면 복잡성과 분리한다는 것이에요. GPU에서 완전히 구현된 중요도 샘플링 전략은 2차 광원을 효율적으로 선택할 수 있게 해줘요. 또한, 표면의 광택에 맞춰 광원의 스플랫 모양을 조정하면, 카우스틱을 효율적으로 렌더링할 수 있답니다. 이전 접근 방식과 달리, 근사된 간접 조명은 불리한 시청 및 조명 조건에서도 거의 거친 아티팩트를 나타내지 않아요. 현대 그래픽 하드웨어에서의 구현을 설명하고, 이전 접근 방식과의 비교를 보여주며, 게임에 적합한 응용에서의 적응과 결과를 제시합니다.

1 Introduction

간접 조명은 사실적인 렌더링을 위한 미묘하지만 중요한 요소입니다. 그 전역적인 특성 때문에 간접 조명의 계산은 악명 높게 느립니다. 따라서 인터랙티브 그래픽에서는 간접 조명이 주로 사전 계산된 라디오시티 라이트 맵의 형태로 존재하거나, 간단하지만 인상적인 근사치로 앰비언트 오클루전을 사용합니다.
반면에, 간접 조명에 대한 대략적인 근사치는 보통 만족스럽습니다. 대부분의 경우, 한 번 반사된 간접 조명은 시각적으로 충분하며 [Tabellion and Lamorlette 2004], 심지어 간접 조명에 대한 오클루전도 많은 경우 무시할 수 있습니다. 그러나 간접 조명은 시간적으로 일관되어야 하며 깜박임을 보여서는 안 됩니다.
이 논문에서는 간접 조명의 근사 계산을 위한 새로운 알고리즘을 소개해요. 이 알고리즘은 앞서 언급한 단순화 가정에 의존하거든요. 우리 알고리즘은 일반적인 게임 시나리오에서 실시간으로 작동해요. 점 광원으로부터의 근사적이고 시간적으로 일관된 한 번 반사된 간접 조명을 계산하죠. 카메라와 광원 모두 동적으로 움직일 수 있어요. 이 알고리즘은 Reflective Shadow Maps [Dachsbacher and Stamminger 2005]의 아이디어에 기반하고 있어요. 점 광원에 대해, 한 번 반사된 간접 조명을 일으키는 모든 표면은 그림자 맵에 포착되죠. 이러한 표면으로부터 간접 조명을 계산하기 위해, Reflective Shadow Map은 각 픽셀에 대해 표면 위치, 법선, 반사된 방사 플럭스 같은 추가 정보를 저장해요. 간접 조명은 이러한 표면 샘플, 즉 픽셀 라이트의 잘 선택된 부분 집합으로부터 기여를 모아 근사화해요. 우리는 간접 조명의 계산을 재구성해서 평균적으로 훨씬 적은 간접 광원을 사용해도 좋은 결과를 얻을 수 있게 했어요. 이로 인해 성능이 크게 향상되죠. 기본적으로 Reflective Shadow Maps에서 간접 조명을 모으는 대신, 우리는 발사 접근법을 사용해요. 각 간접 조명에 대해, 그 기여를 화면 공간의 이웃에 퍼뜨리죠. 이를 통해 간접 조명의 영향 범위를 더 잘 제한할 수 있어요. 간접 광원 세트는 이미지의 모든 픽셀에 대해 동일하므로, 노이즈가 줄어들고 눈에 띄는 편향도 훨씬 적어요. 프레임 사이에 간접 광원 위치를 일관되게 유지하면 깜빡임을 크게 줄일 수 있어요. 전체적으로, 간접 광원의 수를 줄이고 성능을 크게 향상시킬 수 있답니다.
또한, 우리는 반짝이는 반사체로부터 간접 조명을 계산할 수 있어요. 이를 통해 간접 확산광과 고품질의 카우스틱스를 통합된 방법으로 얻을 수 있답니다. 이것은 티저 이미지에서 보여주고 있는데요, 확산 장면과 반짝이는 장면에서의 일부 간접 조명을 볼 수 있어요(첫 번째와 세 번째 이미지). 그리고 간접 확산광과 반짝이는 조명이 적용된 결과 이미지도 볼 수 있죠(두 번째와 네 번째 이미지). 다섯 번째 이미지는 Quake 게임의 실시간 간접 조명 스크린샷을 보여줍니다.

2 Previous Work

간접 조명은 보통 오프라인 렌더링에서 레이 트레이싱이나 라디오시티를 사용해 생성돼요. [Tabellion and Lamorlette 2004]에서는 Tabellion 등 연구진이 영화 제작 렌더링에 사용된 간접 조명 모델을 제시했어요. 그들의 높은 품질 요구에도 불구하고, 한 번의 반사로 인한 간접 조명만으로도 충분하다는 것이 밝혀졌답니다.
간접 라디오시티와 같은 조명을 도입한 첫 번째 논문은
그림 1: 2차 광원에 의해 발생하는 확산 간접 조명. 이들의 위치는 RSM의 균일한 샘플링에 의해 결정됩니다.
인터랙티브 그래픽스에서 Instant Radiosity [Keller 1997]가 있었어요. 소수의 광자(예: 200개)를 광원에서 확률적으로 추적하죠. 광자의 경로를 따라 간접 광원을 배치해서 간접 조명을 근사해요. 이 간접 광원의 기여도는 shadow map과 누적 버퍼를 사용해서 계산해요.
Ambient occlusion과 bent normals는 간접 조명을 흉내 내기 위해 지역 조명을 수정하는 간단한 근사 방법이에요 [Landis 2002]. 이 방법은 약간의 사전 계산이 필요하지만, 거의 성능 저하 없이 간접 조명 효과를 얻을 수 있답니다. 하지만 동적 장면은 특별한 처리가 필요해요. Bunnell [Bunnell 2005]은 동적 장면에 대해 정점 단위로 ambient occlusion을 계산해요. 그는 또한 지속적으로 빛을 방출하는 표면에 의해 발생하는 간접 조명도 언급했어요.
Reflective Shadow Maps [Dachsbacher and Stamminger 2005]는 간접 조명을 인터랙티브 애플리케이션에 포함시키기 위한 더 일반적인 접근 방식이에요. 조명이 필요한 장면의 각 지점에 대해, shadow map의 픽셀 집합이 간접 광원으로 간주돼요. 이들의 간접 기여도는 프래그먼트 프로그램에 의해 수집되며, 이 간접 광원의 차폐는 무시돼요. 앨리어싱 없는 이미지를 얻으려면 꽤 많은 샘플이 필요해서 높은 계산 비용이 들어요. 간접 조명을 위한 화면 공간 보간 단계와 함께, 중간 정도의 장면에서는 인터랙티브에서 실시간 프레임 속도가 가능해요.
우리 방법은 지연 셰이딩 단계에서 간접 조명을 계산해요. Hargreaves [Hargreaves 2004]는 지연 셰이딩에 대해 자세히 논의하고 성능 팁과 구현 전략을 제공해요.
Wyman [Wyman 2005a; Wyman 2005b]은 동적 장면에서 먼 거리와 가까운 거리의 기하학을 위한 굴절 렌더링 기법을 제시해요. Shah 등 [Shah and Pattanaik 2005]은 굴절 및 반사 표면에서의 카우스틱을 실시간으로 렌더링하는 방법을 shadow-map만을 기반으로 설명해요.
우리 방법은 복잡한 조명을 표현할 수 있는 광원 집합을 빠르게 결정하는 방법이 필요해요. [Clarberg et al. 2005]에서는 haar wavelet 기반의 확률 분포에 대해 우아한 방법을 제시했어요. 먼저, 광원 집합을 균일하게 분포시켜요. 그런 다음, 원하는 확률 분포의 wavelet 표현을 위에서 아래로 탐색하면서, wavelet 계수에 따라 광원 샘플을 이동시켜요. 이렇게 하면 샘플 밀도가 확률 분포에 맞게 조정되죠. 이 과정은 반복이 필요 없고, 상호작용 애플리케이션에서도 사용할 만큼 빠르답니다.

3 Algorithm

우리 방법은 Reflective Shadow Maps (RSMs) [Dachsbacher and Stamminger 2005] 아이디어에 기반하고 있어요. 확장된 그림자 맵을 사용해서 첫 번째 반사 간접 광원을 생성하죠.
하지만 이러한 간접 조명이 결정되는 방식과 이 조명의 기여도를 계산하는 방식은 달라요. 그 결과, 훨씬 더 견고하고 빠른 알고리즘을 얻을 수 있었어요. 알고리즘의 개요는 그림 1에 나와 있어요.
다음 섹션에서는 새 알고리즘의 아이디어를 설명하고, 이 알고리즘이 어떻게 광택 있는 간접 조명에 적응할 수 있는지, 그리고 빠른 중요도 샘플링과 효율적인 splatting을 사용해 성능을 더 향상시킬 수 있는 방법을 보여드릴게요. 먼저 확산 장면에 대한 설명으로 시작하고, 광택 있는 간접 조명으로의 확장은 가능하며 나중에 설명할게요.

3.1 Reflective Shadow Maps

우리 알고리즘은 장면에서 첫 번째 반사로 인한 간접 조명을 결정하기 위해 shadow map을 사용해요. 깊이 정보만으로는 부족하기 때문에, 각 픽셀에 세계 공간 위치, 표면 법선, 반사된 플럭스를 추가로 저장해요. 이 확장된 shadow map은 Reflective Shadow Map과 동일하기 때문에, 계속해서 Reflective Shadow Map (RSM)이라고 부를게요.
RSM의 각 픽셀은 2차 광원으로 간주할 수 있어요. 간접 조명은 모든 2차 광원을 지역적인 점 광원으로 고려하여 계산해요. 이 점 광원들은 작은 표면 광원을 나타내며, 표면 법선을 주 방향으로 하는 반구형이에요. 이런 광원을 픽셀 라이트라고 부르죠. 세계 공간 위치 xp, 방향 nₚ, 플럭스 Φₚ를 가진 확산 픽셀 라이트 p의 경우, 방향 w로 방출되는 방사 강도는 이렇게 계산돼요.
여기서 O는 내적을 나타내요. 표면 법선 n을 가진 표면 점 x에서 p로 인한 조사선량은 이렇게 계산돼요.
원래 Reflective Shadow Map 접근법에서는 [Dachsbacher and Stamminger 2005], 특정 점 p에 대한 간접 조명을 RSM에서 수집해요. 모든 픽셀에서 수집하는 것은 너무 비싸기 때문에, 조명할 점에 의존하는 부분 집합만 사용해요. 이 부분 집합은 p의 shadow map 주변을 샘플링하여 p에 가까운 픽셀에 집중돼요. 예제에서 만족스러운 결과를 얻으려면 대략 300개의 샘플이 필요해요. 빠른 근사를 위해서는 지연 셰이딩 기술과 화면 공간 보간이 필요해요. 샘플링 패턴이 이미지 전체에서 변하기 때문에, 샘플 수가 너무 적으면 노이즈와 줄무늬 아티팩트가 빠르게 나타나요. 불필요한 고비용 프래그먼트 셰이더 패스를 피하기 위해 지연 셰이딩을 사용해요. 화면 공간 보간 기술을 통해 프래그먼트 셰이더 패스의 수를 더 줄일 수 있어요.
그림 2: 확산 및 광택 픽셀 조명의 방출 (각각 왼쪽과 오른쪽).

3.2 Splatting Indirect Illumination

우리의 새로운 접근 방식에서는 평가 과정이 반대로 이루어집니다. 모든 이미지 픽셀을 순회하며 Reflective Shadow Maps (RSM)으로부터 간접광을 수집하는 대신, RSM 픽셀의 하위 집합인 pixel lights를 선택하고 screen space에서 splat을 사용하여 그 빛을 이미지 픽셀로 분산시킵니다.
본질적으로, 이 splatting 알고리즘은 deferred shading 패스입니다. 따라서 관찰자의 카메라에서 본 각 화면 픽셀에 대해 world space 위치와 법선(normal), 그리고 재질 파라미터를 포함하는 버퍼가 필요합니다. 이들은 렌더 타겟으로 사용할 수 있는 텍스처로 저장되며, 카메라가 움직일 때마다 업데이트됩니다. 최종 이미지를 렌더링할 때, 간접 조명이 계산되기 전에 deferred shading 버퍼를 사용하여 광원으로부터의 지역 조명(local illumination)과 그림자를 계산합니다.
그 다음, 간접광의 기여도가 deferred shading 버퍼 위에서 직접 계산됩니다. 일반적으로 이러한 간접광은 직접적인 인접 영역에서만 유의미한 간접 조명을 생성합니다. 이를 고려하여, 우리는 점광원(point light)의 위치에서 screen space에 사각형(quadrilateral)을 splat합니다. splat은 유의미한 빛을 받을 수 있는 모든 fragment를 덮을 수 있을 만큼 충분히 커야 합니다. 이 크기는 pixel light의 강도와 카메라까지의 거리로부터 쉽게 계산할 수 있습니다. 이 계산에 대한 세부 사항과 더 정밀한 경계(tighter bounds)는 다음 섹션에서 설명합니다.
포함된 각 픽셀에 대해 deferred shading 버퍼로부터 가시 기하학 정보를 가져옵니다. fragment shader는 (사각형과 연관된) 광원 파라미터와 함께 Eq. 2에 따라 하위 픽셀에 대한 pixel light의 기여도를 평가하고 이를 프레임 버퍼에 누적합니다. 이와 같이 우리는 각 보조 광원의 기여도를 최종 이미지 위에 splat합니다.
사각형의 계산은 vertex shader에서 효율적으로 구현될 수 있으며, 여기서 간접 조명을 유발하는 표면에 대한 정보를 저장하는 RSM이 샘플링되고 사각형이 배치됩니다. vertex shader는 기하 구조를 처리만 하고 생성하지는 않으므로, 사각형을 위한 정점 데이터는 파이프라인을 통해 전달되며 그에 따라 수정됩니다. RSM을 위한 샘플링 패턴은 텍스처로 제공되며, 각 사각형은 이 텍스처에서 샘플링 위치를 선택하기 위한 텍스처 좌표를 가집니다.

3.3 Non-diffuse Surfaces

우리의 방법은 caustic과 glossy 표면으로부터의 간접 조명을 렌더링하도록 쉽게 조정될 수 있습니다. 이를 위해 비확산(non-diffuse) 방출 특성을 가진 pixel lights를 사용해야 합니다. Fig. 2는 diffuse 및 glossy pixel lights의 방출을 비교합니다.
Phong 스타일의 표면에 대해, Phong 지수 PPPP를 가진 glossy pixel light pppp의 방출은 다음과 같습니다.
그림 3: 우리는 2차 광원의 경계 기하를 표면의 반사 특성에 맞춰 조정해요. 왼쪽 이미지는 확산 반사를, 오른쪽 이미지는 광택 반사를 보여줍니다.
여기서 rₚ는 p에서의 주 광원 방향인데, 이는 p에 입사하는 빛의 반사 방향이에요. rₚ는 광택 픽셀 조명마다 미리 계산될 수 있으며, 그런 다음 P와 같은 광원의 매개변수가 됩니다. 방출은 p의 표면에서 클램프되어야 하며, 뒤로 빛이 방출되지 않도록 해야 한다는 점을 유의하세요.
우리의 새로운 접근 방식에서는 평가 과정이 역전돼요. 모든 이미지 픽셀을 반복하며 RSM에서 간접 조명을 수집하는 대신, RSM 픽셀의 일부, 즉 픽셀 조명을 선택하고, 이들의 빛을 화면 공간에서 스플랫을 사용하여 이미지 픽셀에 분배합니다.
이런 빛을 사용해서 렌더링을 하면, 글로벌 조명 알고리즘에서 자주 보이는 것처럼 벽의 공통 경계에서 문제가 발생해요. 이는 조명 적분에 특이점이 있어서 수치적으로 적분하기 어렵기 때문이에요. RSMs[Dachsbacher and Stamminger 2005]에서는 픽셀 라이트를 약간 음의 법선 방향으로 이동시켜서 이런 문제를 크게 줄였어요. 이 방법은 확산 조명에는 가능한 해결책이지만, 광택 반사에서는 문제가 더 두드러지게 나타나요. 이를 위해, 우리는 상수 지수 P를 P'ₚ(x) = 로 대체해요. 여기서 a > 0은 사용자가 정의하는 매개변수랍니다. 그 결과, 높은 강도의 좁은 특이점이 광원 근처에서 넓어져서 덜 눈에 띄게 돼요.
본질적으로, 이 splatting 알고리즘은 지연 셰이딩 패스예요. 그래서 우리는 화면의 각 픽셀에 대해 관찰자의 카메라에서 본 월드 공간 위치와 법선, 그리고 재료 매개변수를 포함하는 버퍼가 필요해요. 이들은 렌더 타겟으로 사용할 수 있는 텍스처로 저장되고, 카메라가 움직일 때마다 업데이트돼요. 최종 이미지를 렌더링할 때, 지연 셰이딩 버퍼를 사용해서 광원으로부터의 지역 조명과 그림자를 계산한 후, 간접 조명이 계산돼요.
그 다음에 간접 조명의 기여도는 지연 셰이딩 버퍼에서 직접 계산돼요. 일반적으로 이런 간접 조명은 직접적인 이웃에서만 의미 있는 간접 조명을 생성해요. 이를 고려하기 위해, 화면 공간에서 점 광원의 위치에 사각형을 splat해요. 이 splat은 의미 있는 빛을 받을 수 있는 모든 프래그먼트를 덮을 만큼 커야 해요. 이 크기는 픽셀 라이트의 강도와 카메라와의 거리로부터 쉽게 계산할 수 있어요. 이 계산과 더 엄격한 경계에 대한 자세한 내용은 다음 섹션에서 설명돼요.
화면 공간 쿼드는 그 형태가 좁아서, glossy pixel light를 표현하기에는 매우 비효율적이에요. 대신, 더 타이트한 경계 기하학이 필요하답니다. 다음 세션에서 설명할게요. 이렇게 타이트한 경계를 사용하면, 간접 glossy 조명을 diffuse 경우와 비슷한 속도로 구현할 수 있어요. 보통 glossy pixel light가 더 많이 필요하지만, 그 영향 범위는 더 작고 픽셀을 덜 차지하죠. 그림 4는 우리 방법으로 생성된 caustics 예시를 보여줘요.
vertex 엔진에 더 많은 부담을 줄 수 있고, 더 타이트한 bounding volume을 만들 수 있어요. 이상적으로는, 이 경계들이 world space에서 계산되고 렌더링되는데요, 이렇게 하면 early-z 테스트를 활용해서 fragment shader의 실행을 줄일 수 있답니다.
목표는 조명 강도가 특정 임계값 아래로 떨어지는 간단한 경계 영역을 계산하는 거예요. Fig. 3에서 볼 수 있듯이, diffuse pixel light의 경우 이 영역은 달걀 모양이고, glossy 표면의 경우 Phong lobe와 비슷한 모양이에요. 이 표면들은 공간 감쇠를 포함하는 조명의 iso-surface이지, 출사 복사의 극좌표 그래프가 아니랍니다!
실용적인 이유로, 두 경우 모두에서 경계로 타원체를 사용해요. 각 pixel light에 대해 타원체의 매개변수를 계산하고, 이에 맞춰 구형 삼각형 메쉬(삼각형 수가 적은)를 변환합니다. 부록에서는 Phong 지수에 따라 diffuse와 Phong 유사 표면에 대해 타원체의 매개변수를 빠르게 계산하는 방법을 설명해요.

3.4 Tighter Bounding Geometry

각각의 픽셀에 대해, 우리는 deferred shading 버퍼에서 보이는 기하학 정보를 가져와요. 그리고 광원 파라미터(사각형과 연관된)를 함께 사용해서, fragment shader가 Eq. 2에 따라 픽셀 light의 기여도를 평가하고 이를 프레임 버퍼에 누적시켜요. 이렇게 해서 각 2차 광원의 기여도를 최종 이미지에 splat하는 거죠.
그림 4: 금속 반지와 나무 판 위의 caustics를 실시간으로 렌더링한 모습이에요. 초당 95 프레임 이상이고, 굴절 유리 트위티(뒤쪽 표면에서만 굴절)도 초당 150 프레임으로 렌더링했어요.
우리 방법에서는 성능 병목이 fragment shader 실행과 메모리 대역폭이에요. 화면 공간에서 축에 맞춘 박스는 비효율적인 표현이기 때문에, vertex 처리 과정이 중요한 요소가 되지 않는 한, 우리는
Phong과 유사한 표면에서는, Phong 지수 P를 가진 광택 있는 픽셀 조명 p의 방출이 이루어져요.
사각형의 계산은 vertex shader에서 효율적으로 구현할 수 있어요. 여기서 간접 조명을 유발하는 표면 정보를 저장하는 RSM을 샘플링하고, 사각형의 위치를 정하거든요. vertex shader는 기하학적 처리를 할 뿐 기하학을 생성하지 않기 때문에, 사각형의 vertex 데이터는 파이프라인을 통해 전달되고 적절히 수정됩니다. RSM의 샘플링 패턴은 텍스처로 제공되며, 각 사각형은 이 텍스처에서 샘플링 위치를 선택하기 위한 텍스처 좌표를 가지고 있어요.
그림 5: 섹션 3.5에서 설명한 계층적 중요도 샘플링의 단일 레벨에 대한 중요도 왜곡입니다.
우리 방법은 광택 있는 표면에서의 카우스틱스와 간접 조명을 쉽게 렌더링할 수 있도록 조정할 수 있어요. 이를 위해서는 비확산 방출 특성을 가진 픽셀 조명을 사용해야 해요. 그림 2는 확산 픽셀 조명과 광택 픽셀 조명의 방출을 비교하고 있어요.

3.5 Importance Sampling

RSM의 실제 flux 분포에 맞춰 샘플링 패턴을 조정하기 위해, Clarberg 등 [Clarberg et al. 2005]이 제안한 대로 계층적 왜곡을 통해 importance sampling을 수행해요. 우선, 장면이 오직 diffuse 표면으로만 구성되어 있다고 가정하고, 더 많은 샘플이 더 높은 flux를 가진 장면의 부분에 배치되도록 해요. 즉, 확률 분포로 정규화된 flux를 사용합니다.
계층적 워핑의 각 단계는 플럭스 분포에 따라 수직 및 수평 워핑 단계로 구성돼요. 우리는 균일하게 분포된 샘플 점 집합 sᵢ = (xᵢ,yᵢ)⁺, xᵢ,yᵢ ∈ [0;1)에서 시작하며, 샘플 가중치 wᵢ = 1이에요. 그림 5는 가장 거친 단계에 따른 워핑을 보여줘요. 초기 샘플 집합(그림 5b)은 상단과 하단의 평균 플럭스(Φₜₒₚ과 Φbottom, 그림 5a)에 따라 두 개의 행으로 나뉘어요. 샘플 점들은 분리 경계가 샘플 영역을 절반으로 나누도록 스케일링돼요(그림 5c). 새로운 샘플 점의 y'ᵢ는 다음과 같이 얻어져요.
샘플링 밀도의 변화를 보상하기 위해, 샘플 가중치는 모든 샘플의 총 가중치가 동일하게 유지되도록 계산돼요.
수직 워핑 후, 상단과 하단 절반은 유사하게 워핑되어 각 샘플에 대해 x'ᵢ를 얻어요(그림 5d). 워핑된 샘플링 패턴(그림 5e)은 RSM을 샘플링하고 2차 광원을 결정하는 데 사용돼요. RSM에서 가져온 플럭스는 장면에 기여하기 전에 샘플의 가중치와 곱해져요. 우리는 이 워핑 전략을 방법 A라고 부르죠. 또한, 더 단순하고 빠른 변형(방법 B)도 실험했어요. 이 방법은 상단과 하단 절반을 독립적으로 처리하지 않고 모든 샘플에 대해 수평 워핑을 수행해요. 샘플 워핑은 계층적으로 이루어지며, 수직 및 수평 단계 후에 네 개의 사분면으로 재귀적으로 진행돼요.
중요 샘플링은 비확산 표면이 있는 장면에서 특히 중요해요. 이런 표면들은 전역 조명 효과를 더 정확하게 근사하기 위해 더 많은 샘플이 필요하거든요. 우리는 플럭스뿐만 아니라 플럭스와 BRDF의 최대값의 곱으로 얻은 확률 분포에 따라 중요 샘플링을 수행할 것을 제안해요. 에너지를 보존하는 Phong 조명 모델을 사용할 때, 그 정규화된 BRDF의 최대값은 Phong 지수 P랍니다.
또 다른 관찰을 통해 중요도 샘플링에 대한 추가 기준을 알 수 있어요. 많은 컴퓨터 게임과 영화 제작에서 사용되는 ambient occlusion 항목 O는 표면 지점이 받을 가능성이 있는 환경 빛의 비율이에요. 이는 표면 지점 위의 반구에 광선을 쏘고, 다른 표면과 교차하지 않는 광선과 전체 광선 수의 비율을 계산함으로써 이루어져요. 보통 이 항목을 계산할 때는 근처에 있는 차폐물만 고려해요. 즉, ambient occlusion 항목은 특정 표면 지점 근처에 다른 표면이 있는지 여부를 알려줘요. 만약 다른 표면이 가까이 없다면, 그곳에 위치한 2차 광원은 장면에 거의 영향을 미치지 않아요.
앞서 언급한 휴리스틱을 중요도 왜곡 시 고려하기 위해, 우리는 식 4의 플럭스를 확률로 대체해요: рф = (1 P. 이 항목을 조명 뷰에 저장하는 해당 텍스처는 중요도 샘플링 버퍼라고 불리며, 중요도 샘플링을 위해 RSM 플럭스 버퍼를 대체해요.

3.6 Fast Rendering with Ambient Occlusion

위에서 설명한 중요도 왜곡 방법은 스포트라이트에 사용되는 2차원 그림자 맵에 완벽하게 작동해요. 전방향성 조명에는 대부분 큐브 그림자 맵이나 이중 포물면 그림자 맵이 사용돼요. 각 큐브 면이나 포물면 맵에 대한 개별 중요도 샘플링을 생각할 수 있거나, 샘플을 하위 텍스처에 분배하기 위한 초기 사전 왜곡 단계를 수행할 수 있지만, 이는 항상 성능 측면에서 중요해요. 기하학적 처리, 즉 광원 수가 아니라 프래그먼트 처리가 병목이라는 점을 염두에 두고, 우리는 확산 표면에 잘 작동하는 또 다른 절차를 제안해요 (스포트라이트와 포인트 라이트 같은 모든 유형의 1차 광원에 대해): 장면의 정규 샘플링을 가정하면서.
그림 6: 우리 방법(왼쪽)과 Instant Radiosity(레이 트레이서에 통합된)의 비교입니다. 후자는 부드러운 그림자를 생성하고 간접 조명에 대한 가림 처리를 하지만, 결과는 비슷해요. 두 이미지 모두 quasi-random walk로 생성된 1000개의 간접 광원을 사용했어요.
그림자 맵 텍스처에서는 그림자 맵에서 광원을 균일하게 분포시키고, 플럭스를 ambient occlusion 항으로 조정해요. 이렇게 하면 중요하지 않은 2차 광원들이 작아져서 처리 시간과 메모리 대역폭을 절약할 수 있답니다. 이 방법의 결과는 그림 13과 표 3에 나와 있어요.

3.7 RSM 없이 간접 조명

우리 방법은 2차 광원을 결정하는 데 다른 방법을 사용할 때 Reflective Shadow Maps에 의존하지 않아요. 많은 게임의 일반적인 상황, 예를 들어 실내 게임에서는 공간 분할 트리가 기하 구조와 함께 저장돼요. 사실 이 데이터 구조는 충돌 감지에 사용되지만, 광원에서 장면 기하 구조와 교차하는 데도 사용할 수 있어요. 기본 광선이나 Instant Radiosity처럼 quasi-random walk를 계산할 수 있고, RSM을 계산하지 않고도 장면에 간접 조명을 추가할 수 있답니다. 그림 6은 Instant Radiosity로 렌더링한 Cornell Box를 보여줘요.

4 Implementation

우리는 Direct3D9와 High-Level Shader Language, 그리고 Vertex Shader 3.0 프로필을 지원하는 프로그래머블 그래픽 하드웨어를 사용해 이 방법을 구현했어요. RSM에서 2차 광원의 위치, 방향, 플럭스를 읽어들이는 데 사용됩니다. 추가적인 렌더 패스와 소위 vertex-textures를 사용하면 이 프로필을 우회하고, 우리 방법을 구형 그래픽 하드웨어와 함께 사용할 수 있어요. Instant Radiosity 접근법을 사용할 경우, 당연히 RSM이 필요 없고, 광원 데이터를 정적 버텍스 배열로 하드웨어에 전달할 수 있답니다.
최종 이미지를 얻기 위해서는 여러 번의 패스가 필요해요. RSMs를 사용할 때, 첫 번째 패스의 작업은 광원에서 본 장면을 렌더링하고, 보이는 표면의 월드 공간 위치, 노멀, 반사된 플럭스를 저장하는 거예요. 원래 RSM 구현처럼, 간접 조명의 깜빡임을 피하기 위해 필터링된 텍스처 조회를 사용해서 플럭스를 렌더링해요. 비확산 표면을 사용할 때는 중요 샘플링을 위해 Phong 모델의 지수도 저장해요. 버텍스 처리 중에 RSM 텍스처를 읽으려면, 현대 하드웨어는 텍셀당 32비트 플로트 4중체의 내부 포맷을 요구해요.
다음 단계는 지연 셰이딩 버퍼를 만드는 거예요. 이를 위해 카메라 뷰로 장면을 렌더링해서 메모리 소비가 적은 텍스처에 저장해요. 월드 공간 위치는 광원까지의 거리와 함께 저장되는데, 이는 그림자 테스트를 위해 필요해요.
3+1개의 16비트 플로트로 저장되죠. 표면 노멀과 파라미터는 4x8비트 텍스처로 표현돼요. 이 동적 텍스처들은 뷰에 의존적이어서, 광원이나 카메라가 움직일 때마다 업데이트해야 해요.
간접 조명을 렌더링하기 위해, 미리 계산된 균일 샘플링 패턴을 색상으로 인코딩한 RGB 삼중체로 저장하는 텍스처를 준비해요. 중요 샘플링 단계가 사용된다면, 이 샘플링 위치와 RSM 플럭스 버퍼(또는 중요 샘플링 버퍼)의 mip-mappable 버전을 입력으로 받아서 새로운 샘플링 위치를 계산하고 다른 텍스처에 출력해요. 이 작업은 단일 사각형을 렌더링하고, 각 샘플링을 개별적으로 왜곡하는 프래그먼트 셰이더를 적용해서 할 수 있어요. mip-mappable 플럭스 또는 중요 샘플링 버퍼는 각각 32비트 부동 소수점 텍스처에서 만들어야 해요. 현재 하드웨어는 이러한 텍스처에 대한 자동 mip-map 생성을 지원하지 않거든요.
보조 광원의 기여를 렌더링하기 위해, 구형 메쉬를 그래픽 하드웨어로 보냅니다. 이때 샘플링 위치가 위에서 언급한 텍스처에서 발견되는 텍스처 좌표도 함께 보냅니다. 각 메쉬의 정점에서 vertex shader는 샘플링 위치를 읽고, RSM에서 광원 데이터를 가져옵니다. 그런 다음 접선 공간을 계산하고 반사 특성의 타원형 근사를 계산해요. 이후 정점은 월드 공간으로 변환됩니다. fragment shader는 각 픽셀에 대한 기여를 계산합니다. 모든 광원으로부터 표면 지점에 대한 기여를 계산하고 누적한다는 점을 유의하세요. 빛을 받는 표면 자체는 diffuse로 가정하고, 마지막 단계에서 표면의 매개변수를 누적된 기여에 적용합니다. 예를 들어, 누적된 빛을 표면의 diffuse 색상과 곱하는 식이죠. 반구형 메쉬와 샘플 위치 텍스처에 대한 텍스처 좌표의 제출은 인스턴싱 기술을 사용하여 효율적으로 수행할 수 있습니다. 그럼에도 불구하고, 우리는 텍스처 좌표만 다른 중복된 메쉬를 사용하여 성능을 측정했는데, 거의 동일한 시간을 얻었습니다.

5 Results and Comparison

우리는 새로운 방법을 다양한 상황, 특히 게임에서 흔히 볼 수 있는 상황에서 테스트해 봤어요. 이 섹션에서 제공되는 시간 측정은 350 MHz 클럭 속도와 16개의 셰이더 파이프라인을 가진 GeForce 6800 GT 그래픽 보드를 사용했어요. 우리 방법은 모든 계산을 GPU에서 수행하기 때문에 CPU는 렌더링 성능에 영향을 미치지 않아요. 별도로 언급하지 않는 한, 모든 이미지는 512x512 해상도로 렌더링되었습니다. 실험 결과, 성능 병목 현상은 사용된 그래픽 하드웨어에 따라 fragment 처리 또는 (더 자주) 메모리 대역폭 중 하나였습니다. 후자의 이유로, 우리는 간접 광원의 기여를 누적하고 이를 적용합니다.
표 1: 카우스틱 링 렌더링 성능 분석 (그림 4, 왼쪽 참조). Importance sampling(3단계, 방법 B)을 사용하여 4096개의 렌더링된 2차 광원을 처리했으며, 이미지 크기는 512²입니다. '정적 카메라'가 첫 번째 옵션보다 느린 이유는 깊이 버퍼 테스트로 간접 조명의 스플래팅 중에 조각이 버려지지 않기 때문이에요. 이 예제 설정에서는 지연 셰이딩 버퍼, 즉 동적 카메라가 업데이트될 때만 깊이 버퍼가 유효합니다.
그림 7: Sec. 3.5에 설명된 대로 рф = Φ (1 - 0) n에 따른 Importance sampling. 세 개 이상의 레벨이 좋은 샘플링을 제공하며, 두 방법 모두 비슷한 결과를 보여줍니다.
최종 렌더 패스에서의 표면 색상. 그림 11은 광원의 중요한 기여를 결정하기 위한 다른 컷오프 값, 즉 다른 경계가 이미지 품질과 성능에 미치는 영향을 보여줍니다. 큰 값은 더 작은 경계 볼륨을 유도하여 조각 셰이더 실행과 메모리 트래픽을 줄입니다. 동일한 효과는 표 3에서도 확인할 수 있으며, 이는 2차 광원의 분포에 대한 앰비언트 오클루전 고려의 영향을 보여줍니다(결과는 그림 13에 표시됨). RSM과 지연 셰이딩 버퍼의 계산에 필요한 시간과 이에 연결된 렌더 타겟 전환은 표 1에서 확인할 수 있습니다. Importance sampling의 소요 시간은 표 2에 나와 있습니다. RSM과 우리 방법의 다양한 품질 설정 및 렌더링 속도 비교는 그림 12에 나와 있습니다.
표 2: GeForce 6800 GT에서 필요한 렌더 타겟 변경을 포함한 importance warping의 소요 시간(밀리초 단위).
표 3: 티저와 그림 13에 표시된 장면의 렌더링 시간(초당 프레임 수)으로, 256개의 2차 광원이 앰비언트 오클루전 항에 의해 변조된 경우와 그렇지 않은 경우를 비교합니다.

6 Discussion

원래의 Reflective Shadow Map 접근법과 우리 방법을 직접적으로 비교하기는 어렵지만, 결과 이미지의 주관적인 비교 외에도 필요한 계산에 대한 질적 분석을 제공할 수 있어요. 간접 조명 계산과 그로 인한 메모리 전송이 성능에 가장 큰 영향을 미치거든요. 이 논의에서는 각 광원과 관련된 데이터(위치, 방향, 플럭스)와 조명된 표면의 위치 및 법선만을 고려해요. 표면 색상은 조명의 기여도를 계산한 후에 적용할 수 있답니다(Section 5에 설명되어 있어요).
처음에는 RSM 접근법을 전체 픽셀 단위로 평가해 볼게요. 즉, 화면 공간 보간 없이요. 이미지 해상도가 P 픽셀이고, 샘플 수가 SRSM이라고 하면, 식 2의 평가 횟수는 P. SRSM이고 메모리 전송은 P SRSM 112 비트예요. 메모리 사용량은 텍스처에서 샘플 위치를 읽기 위한 16비트,
광원 위치를 위한 48비트(3개의 16비트 float), 광원 방향을 위한 24비트, 플럭스를 위한 24비트로 구성돼요. 이 데이터를 위한 모든 조회는 느린 종속 텍스처 읽기로 수행해야 한다는 점을 유의하세요. 수신기 데이터는 한 번만 읽으면 되며, 여기서는 무시해도 될 만큼 영향이 미미해요.
우리의 splatting 방법에 대해서는 비용을 다음과 같이 정량화할 수 있어요. 각 이미지 픽셀에 대해 평균 오버드로우를 추정할 수 있거든요. 그림 8에 표시된 예에서는 Oₛ₁₁ ≈ 125예요. 광원의 데이터는 광원의 경계 기하학과 관련되어 있어서 프래그먼트 셰이더에 직접 제공되기 때문에, 각 픽셀에 대해 수신기 데이터를 읽어야 하고, 이는 비종속 조회로 수행할 수 있어요(48비트 위치와 24비트 법선 데이터). 메모리 전송은 P OSII 72 비트랍니다.
물론 SRSM과 OSII를 직접 비교할 수는 없지만, 몇 가지 결론을 내릴 수 있어요. 우리 방법은 계산 작업과 특히 메모리 전송이 brute-force RSM 구현보다 훨씬 적어요. 그리고 느린 종속 텍스처 조회를 더 빠른 비종속 조회로 대체했답니다. RSM에서는 각 렌더링된 픽셀마다 독립적으로 광원을 선택하는데, 샘플 수가 적으면 블록 같은 아티팩트가 생길 수 있어요. 우리 방법을 사용하면, 각 픽셀에 대한 간접 조명의 평균 수가 Oₛ₁₁로, 일반적인 상황에서 SRSM보다 훨씬 낮아요. 비록 더 적은 샘플로 간접 조명을 재구성하지만, 광원 샘플이 전체 렌더링된 프레임에 대해 일정하기 때문에 시각적으로 더 만족스럽고 일관된 결과를 얻을 수 있답니다.
인터랙티브한 프레임 속도를 달성하기 위해, RSM 접근법은 더 거친 이미지에서 간접 조명을 화면 공간에서 보간하여 조명 계산 수를 줄여요. 단점은 구현 작업이 많고, 렌더 패스가 더 필요하며, 장면 복잡성에 크게 의존한다는 점이에요. 우리 방법은 보간 패스 없이도 충분히 빠르지만, 그것도 간단하지는 않아요. 초기의 거친 이미지를 정교하게 다듬으려면 개별 픽셀에 대한 간접 조명 계산이 필요하거든요.
그림 8: 이 이미지는 768개의 간접 조명 스플래팅으로 인한 오버드로우를 보여줍니다. 이 시나리오에서 평균 오버드로우는 125이며, 순수한 흰색은 256배에 해당합니다. 픽셀당 조명 조각의 평균 수는 512² 125/768 ≈ 42600입니다.

7 Conclusion

우리는 실시간으로 간접 조명 효과를 근사하여 렌더링하는 방법을 제시했어요. 이 방법을 Reflective Shadow Maps와 함께 사용하면 모든 계산이 GPU에서 완전히 수행돼요. 2D 그림자 맵의 경우 성능을 향상시키기 위해 importance sampling을 어떻게 사용할 수 있는지 보여줬고, 다른 유형의 그림자 맵을 사용할 때 속도를 높일 수 있는 가능성도 제시했어요. 확산 표면과 비확산 표면 모두에 대한 결과를 게임에서 흔히 볼 수 있는 상황에서 제시했답니다. 이전의 상호작용 방법과 마찬가지로, 간접 조명에 대한 자체 그림자는 고려할 수 없어서 렌더링된 모델에 대해 ambient occlusion 방법을 사용할 것을 제안해요.
앞으로는 반사 및 굴절 표면에 대해 splat 모양을 국소 표면 곡률에 맞게 조정하고 싶어요. 이렇게 하면 이러한 표면에서의 간접 조명 효과를 더 적은 아티팩트로, 날카로운 특징을 더 잘 근사하여 렌더링할 수 있답니다.

부록 - 간접 조명 경계

이 부록에서는 간접 확산 및 광택 있는 광원으로부터 상당한 빛을 받는 영역의 경계 계산을 설명해요. 조명이 임계값 Iₗₒw 이상일 때 이를 의미 있는 것으로 간주해요.
픽셀 조명 p에 대한 중요한 영역을 설명하는 가장 쉬운 방법은 p를 중심으로 한 구면 좌표계에서 하는 거예요. 즉, 각 월드 공간의 점은 방향 w와 거리 r로 설명돼요. p의 출사광은 Eqs. 1과 3에 주어진 대로, 그리고 Fig. 2에 표시된 대로 w에 따라 달라져요. 극좌표 (w,r)에서의 조사 E는 w에 따라 달라지지만, 광원까지의 거리 r에도 의존해요: E(w,r) Iₚ(w)/r². E는 입사각의 코사인에도 의존하지만, 이를 미리 알 수 없으므로 이 항목에 대해 1로 경계를 설정해야 해요. 그래서 (w,r)에서의 조사량을 Iₚ(w)/r²로 경계 지을 수 있어요.
이 시점에서 우리는 diffuse와 glossy 조명을 쉽게 통합할 수 있어요. diffuse 조명에 대해서는 표면 법선 nₚ에 대한 각도를 α로, specular 조명에 대해서는 반사 방향 rₚ에 대한 각도를 α로 나타내요 (식 1과 식 3). diffuse 조명에 대해 지수 n = 1을 사용하면, 조사량은 2D 극좌표 함수 B(α,r) = I₀cos(α)ⁿ/r²로 제한될 수 있어요. 다음으로 우리는 2D 경우로 제한할 수 있는데, 3D 모양은 회전 대칭이랍니다.
그럼 p의 영향 영역은 등고면 B(α,r) = Iₗₒₘ으로 제한돼요. B는 r에 따라 계속 감소하기 때문에, 이 표면을 극좌표 함수 r(w) = Ilow로 설명할 수 있어요. 그림 9는 I₀ = 1, Iₗₒₘ = 1, 그리고 Phong 지수가 1, 10, 100일 때의 등고면을 보여줘요.
그림 9: 왼쪽: 픽셀 조명에 의한 조명 계산. 오른쪽: 지수가 1, 10, 100인 픽셀 조명의 중요한 영역.
이 등고면의 윗부분은 명시적 함수로 설명할 수 있어요.
다음의 휴리스틱을 사용하여 이러한 모양 주위에 타원을 맞춰요. 먼저, F의 최대값을 계산해요. 최대값이 Xmax에 있을 때, 타원의 중심을 (xmax,0)⁷에 놓아요. x축과 y축을 타원의 주축으로 사용해요. 높이는 (xmax)로 선택하고, 타원이 x-구간을 덮도록 너비를 선택해요 [0,1]. 그림 10은 n = 1과 n = 10일 때 검은색으로 등고면을, 회색으로 경계 타원을 보여줘요.
Figure 10: n = 1과 n = 10에 대한 등고선과 경계입니다.
최대값은 F의 도함수의 근을 찾아서 구할 수 있어요. x-위치는 c(n) = n+2, n+2 (8)에서 찾을 수 있답니다. 그래서 타원의 중심을 (c(n),0)⁷로 설정하고, 높이는 h(n) = F(c(n))을 사용하며, 너비는w(n)=max{c(n),1−c(n)}을 사용합니다.

References

BUNNELL, M. 2005. Dynamic ambient occlusion and indirect lighting. GPU Gems 2 - Programming Techniques for High-Performance Graphics and General-Purpose Computation, Edited by Matt Pharr.
CLARBERG, P., JAROSZ, W., AKENINE-MÖLLER, T., AND JENSEN, H. W. 2005. Wavelet importance sampling: Efficiently evaluating products of complex functions. In ACM Trans. Graph., ACM Press, 11661175.
CROW, F. C. 1977. Shadow algorithms for computer graphics. vol. 11, 242-248.
DACHSBACHER, C., AND STAMMINGER, M. 2005. Reflective shadow maps. In SI3D '05: Proceedings of the 2005 symposium on Interactive 3D graphics and games, ACM Press, New York, NY, USA, 203-231.
HARGREAVES, S. 2004. Deferred shading. Game Developers Conference.
KELLER, A. 1997. Instant radiosity. SIGGRAPH 97의 컴퓨터 그래픽 프로시딩, 연례 컨퍼런스 시리즈에서, 49-56.
LANDIS, H. 2002. Production-ready global illumination. Siggraph Course Notes #16, 2002.
REEVES, W.T., SALESIN, D. H., 그리고 COOK, R. L. 1987. 깊이 맵을 사용한 안티앨리어싱 그림자 렌더링. 컴퓨터 그래픽스 (SIGGRAPH 87 프로시딩), vol. 21, 283-291.
SHAH, M., 그리고 PATTANAIK, S. 2005. Caustics mapping: 실시간 카우스틱스를 위한 이미지 공간 기법. 기술 보고서, 중앙 플로리다 대학교 공학 및 컴퓨터 과학부, CS TR 50-07, 2005년 7월 29일 (출판 제출됨).
TABELLION, E., 그리고 LAMORLETTE, A. 2004. 컴퓨터 생성 영화용 근사 전역 조명 시스템. ACM Trans. Graph. 23, 3, 469-476.
WILLIAMS, L. 1978. 곡면에 곡선 그림자 투영. 컴퓨터 그래픽스 (SIGGRAPH 78 프로시딩), vol. 12, 270-274.
WYMAN, C. 2005. 상호작용적인 굴절을 위한 근사적인 이미지 공간 접근법. ACM Trans. Graph. 24, 3, 1050-1053.
WYMAN, C. 2005. 근처 기하학의 상호작용적인 이미지 공간 굴절. 아이오와 대학교, 컴퓨터 과학과, 기술 보고서 UICS-05-04.
100%
Iₗₒw = 1%I₀, 14 fps
100%
Iₗₒₘ = 5%I₀, 54 fps
100%
Iₗₒw = 7%I₀, 74 fps
그림 11: 서로 다른 강도 컷오프 값과 그에 따른 빛의 경계 부피 크기가 렌더링 속도와 품질에 미치는 영향이에요.
100%
SII, 768개의 조명, Iₗₒₘ = 5%I₀, 48 fps SII, 768개의 조명, Iₗₒw = 10%I₀, 83 fps SII, 108개의 조명, Iₗₒw = 5%I₀, 254 fps
그림 12: Reflective Shadow Maps (RSM)와 우리 방법(SII)의 비교: RSM의 성능은 2차 광원과의 거리에 의존하지 않지만, 불리한 조명 상황에서는 아티팩트가 발생해요. RSM 이미지의 타이밍은 64² 화면 공간 서브 샘플링으로 측정했어요. 우리 방법은 부드러운 간접 조명과 더 높은 프레임 속도를 제공한답니다. 또한, 속도와 품질 간의 절충이 심각한 아티팩트를 유발하지 않아요. 두 방법 모두 RSM이나 지연 셰이딩 버퍼 업데이트 없이 타이밍을 측정했어요.
100%
secondary light sources는 간접 조명만 제공하며, 균일하게 분포되고 동일한 가중치를 가집니다.
ambient occlusion 항목이에요.
secondary light sources는 간접 조명만 제공하며 ambient occlusion 항목에 의해 조절됩니다.
그림 13: fragment 처리와 메모리 대역폭이 병목 현상이기 때문에, importance sampling 단계를 생략하고 ambient occlusion으로 조절된 광원을 사용하면 성능을 향상시킬 수 있습니다.
100%
그림 1: 금속 반지와 나무 판 위의 caustics를 실시간으로 렌더링한 모습이에요. 초당 95 프레임 이상으로 보여주고 있답니다. 가운데 이미지는 광택 있는 픽셀 조명의 일부를 보여주고 있어요. 굴절 유리 tweety(뒤쪽 표면에서만 굴절)도 초당 150 프레임으로 실행됩니다.
100%
그림 2: 우리 방법(왼쪽)과 Instant Radiosity(오른쪽)의 비교입니다. 후자는 부드러운 그림자를 생성하고 간접 조명에 대한 차폐를 처리해요. 두 이미지 모두 1000개의 간접 광원을 사용했어요.
100%
Iₗₒw = 1%I₀, 14 fps Iₗₒw = 5%I₀, 54 fps Iₗₒw = 7%I₀, 74 fps 그림 3: 서로 다른 강도 컷오프 값과 따라서 다른 크기의 광원의 경계 부피가 렌더링 속도와 품질에 미치는 영향을 보여줍니다.
100%
SII, 768 lights, Iₗₒw = 5%I₀, 48 fps SII, 768 lights, Iₗₒw = 10%I₀, 83 fps SII, 108 lights, Iₗₒw = 5%I₀, 254 fps
그림 4: Reflective Shadow Maps(RSM)과 우리 방법(SII)의 비교입니다. RSM의 성능은 2차 광원과의 거리와는 상관없지만, 불리한 조명 상황에서는 아티팩트가 발생해요. RSM 이미지의 타이밍은 64² 화면 공간 서브샘플링으로 측정했어요. 우리 방법은 부드러운 간접 조명과 더 높은 프레임 속도를 제공해요. 또한, 속도와 품질 간의 균형이 심각한 아티팩트를 유발하지 않아요. 두 방법의 타이밍은 RSM이나 지연 셰이딩 버퍼 업데이트 없이 측정했어요.
100%
2차 광원 간접 조명만 주변 폐색 항 2차 광원 간접 조명만 주변 폐색 항에 의해 조절됨
균일 분포, 동일 가중치
그림 5: 프래그먼트 처리와 메모리 대역폭이 병목 현상이기 때문에, importance sampling 단계를 생략할 수 있어요. 그리고 ambient occlusion을 조절한 광원을 사용하면 성능을 높일 수 있답니다.