2편에서 probe를 공간의 대표 지점이라고 설명했다. 하지만 위치와 RGB 하나만 저장한다면 정보가 부족하다. 같은 위치에서도 천장을 향한 표면과 바닥을 향한 표면은 서로 다른 빛을 받기 때문이다.
Light probe의 핵심은 공간의 한 점에서 주변 방향에 대한 빛을 표현하는 것이다. 그 표현을 주변 위치로 옮겨 쓸 때 공간 보간(spatial interpolation)과 가시성(visibility) 문제가 생긴다.
Probe는 광원이 아니라 측정점이다
Probe가 주변 물체에 빛을 쏘는 것은 아니다. 그 위치에서 주변 빛을 측정하거나 계산한 결과를 저장한다.
blue sky
|
v
red wall -------> o <------- dark corner
probe
^
|
floor
실제 카메라로 큐브맵(cubemap)을 렌더링해 수집할 수도 있고, 여러 방향으로 ray를 보내 입사 방사휘도(incident radiance)를 추정할 수도 있다. 이후 확산 셰이딩(diffuse shading)에 적합한 형태로 압축하거나 적분한다.
Probe라는 말은 용도가 넓다. 반사 프로브(reflection probe)는 반사에 사용할 환경 radiance를 저장하고, 확산 조명 프로브(diffuse light probe)는 표면이 받는 diffuse 조명을 재구성하는 데 쓰인다. Cubemap이나 SH는 데이터 표현 방식이다. 이름만 보고 저장 내용과 갱신 방식을 단정하기보다 실제 구현을 확인해야 한다.
공중의 점에는 고정된 표면 법선(surface normal)이 없다
Probe 위치를 $p$라고 하자. 주변의 incident radiance는 $L_i(p,\omega)$로 생각할 수 있다. 여기에 가상의 표면 법선 $n$을 지정하면 복사조도(irradiance)를 계산할 수 있다.
$S^2$는 모든 방향을 나타내는 단위 구면(unit sphere)이다. 음의 내적을 0으로 만들기 때문에 실제 합산 영역은 해당 법선의 반구가 된다.
same position p
surface faces up surface faces sideways
n ^ n -->
---- |
하늘 쪽 빛을 많이 받음 옆 벽 쪽 빛을 많이 받음
따라서 irradiance probe의 방향 데이터는 보통 표면이 어느 방향을 향하는지에 따라 받을 빛을 표현한다. Radiance map의 방향이 입사 방향을 가리키는 것과 구분해야 한다. 두 표현은 코사인 가중 적분(cosine-weighted integration)으로 연결된다.
구면 조화 함수(Spherical Harmonics, SH): 방향 함수를 적은 계수로 표현한다
구면 조화 함수(Spherical Harmonics, SH)는 구면 위 함수의 기저(basis)다. 푸리에 급수(Fourier series)가 복잡한 파형을 여러 주파수의 조합으로 표현하듯, SH는 방향에 따른 함수를 여러 구면 기저의 조합으로 표현한다.
Irradiance 함수의 계수를 $c_{lm}$이라고 두면 다음처럼 근사할 수 있다.
여기서 $c_{lm}$은 이미 irradiance를 표현하는 계수라고 정의했다. Incident radiance의 SH 계수를 저장한 경우에는 코사인 커널(cosine kernel)과의 합성곱(convolution) 계수까지 적용해야 한다. 두 계수를 같은 것으로 취급하면 조명의 크기와 방향 응답이 달라진다.
Diffuse irradiance의 방향 변화는 입사광보다 완만한 경우가 많다. 이 성질과 낮은 차수(low-order)의 SH 표현은 Ramamoorthi와 Hanrahan의 An Efficient Representation for Irradiance Environment Maps에 설명되어 있다. 이 결과는 방향 변화에 관한 설명이며, 벽이나 가림 때문에 생기는 공간상의 급격한 변화까지 없애주지는 않는다.

가운데 왼쪽 구는 irradiance 텍스처, 오른쪽 구는 9개 SH 계수로 조명한 결과다. 위·아래 구는 복잡한 입사 조명을 보여주지만, 확산 조명의 방향 변화는 훨씬 부드럽다.
$l=0,1,2$의 세 밴드(band)를 사용하면 계수 수는 다음과 같다.
RGB 각각에 9개를 저장하면 27개다. Unity의 전통적인 Light Probe 데이터도 L2 SH와 27개의 부동소수점 값을 사용한다고 공식 데이터 형식 문서에 명시되어 있다.
낮은 차수의 SH는 방향 데이터를 작게 저장하는 대신 세부 방향 정보를 버린다. 날카로운 정반사(specular reflection)나 좁은 하이라이트(highlight)를 그대로 표현하기에는 부족하다. 제한된 차수 때문에 링잉(ringing)이 생길 수도 있다. 이는 공간상의 샘플 밀도와는 별개의 표현 오차다.
표면에서는 주변 probe를 보간(interpolation)한다
표면점 $x$와 법선 $n$에서 주변 probe $p_i$를 읽는 단순한 모델은 다음과 같다.
분모가 충분히 양수인 경우에만 이 식을 쓸 수 있다. 유효한 샘플이 없으면 별도 대체값(fallback)이 필요하다.
규칙적인 격자에서는 셀의 여덟 꼭짓점 값을 삼선형 보간(trilinear interpolation)으로 섞을 수 있다. 불규칙한 배치에서는 사면체 보간(tetrahedral interpolation) 같은 방법을 사용할 수 있다. SH를 사용하는 경우 계수부터 보간하고 현재 법선에서 평가할 수도 있다. 기저 평가가 계수에 대해 선형이기 때문이다.
중요한 가정은 이 부분이다.
주변 probe에서 측정한 방향별 빛이 현재 위치의 빛과 충분히 비슷하다.
공간의 빛 분포가 완만하면 이 가정이 유용하다. 기하 구조(geometry)가 빛을 단절하면 단순한 거리 보간만으로는 부족하다.
빛 누출(light leaking)은 잘못된 이웃을 섞을 때 생긴다
밝은 방과 어두운 방을 얇은 벽으로 나눠보자.
bright room dark room
o A | wall | x o B
| | shading
distance(A, x)는 짧아도 A의 빛을 그대로 가져오면 안 된다.
Probe A에서 측정한 빛이 정확해도, 표면점 $x$에 그 값을 적용하는 일이 잘못될 수 있다. 측정과 조회는 다른 문제다.
SH 계수를 늘리는 것만으로 이 문제를 해결할 수는 없다. A의 방향 정보를 더 정확하게 저장해도 A와 $x$ 사이의 차폐(occlusion)가 보간에 반영되지 않기 때문이다. Probe 밀도를 높이면 일부 오차가 줄어들지만, 가시성을 전혀 고려하지 않는 필터는 여전히 벽 너머 값을 섞을 수 있다.
DDGI: 방향별 거리 정보로 보간을 제어한다
Dynamic Diffuse Global Illumination with Ray-Traced Irradiance Fields는 probe ray로 조명과 방향별 거리의 통계를 갱신한다. Irradiance는 팔면체 맵(octahedral map)으로 표현하며, SH가 모든 probe 시스템의 필수 구성은 아니다.

DDGI 논문의 실시간 probe 결과(왼쪽)와 오프라인 path tracing 기준 영상(오른쪽). 왼쪽 아래에는 직접광만의 결과와 probe 배치가 함께 보인다. 최종 영상에는 별도의 정반사와 직접광 계산도 결합되어 있다.
거리의 평균과 제곱 평균으로 분산(variance)을 구할 수 있다.
예를 들어 probe에서 $x$ 방향으로 가까운 벽이 반복해서 관측되는데 $x$까지의 거리는 훨씬 멀다면, $x$가 그 벽 뒤에 있을 가능성을 보간에 반영할 수 있다. DDGI는 거리 모멘트(distance moment)에서 얻는 가시성 가중치와 방향·거리 관련 항을 함께 사용한다. 완벽한 가시성 검사를 대신하는 근사이며, 바이어스(bias)와 필터의 선택에 따라 오차가 남을 수 있다.
아래 식은 이런 역할을 설명하는 개념적 분해다. DDGI 구현의 정확한 수식은 아니다.
이제 probe를 읽는 과정은 가까운 값을 평균하는 데서 끝나지 않는다. 현재 표면과 조명을 공유해도 되는 probe인지를 함께 판단한다.
왜 빛을 공중에 저장할까?
공간의 probe는 특정 mesh의 UV에 묶이지 않는다. 그래서 이동하는 캐릭터나 여러 표면이 같은 공간 조명을 읽을 수 있고, 법선 방향도 각 표면에 맞게 평가할 수 있다. 그 대가로 측정점에서 실제 표면으로 조명을 옮기는 근사가 필요하다.
다른 선택도 가능하다. 빛이 필요한 곳이 표면이라면, 샘플을 처음부터 표면에 붙일 수 있다. 그러면 고정된 위치뿐 아니라 그 표면의 법선과 대표 영역을 함께 저장하게 된다.
다음 글 「Surfel: 공간이 아니라 표면에 빛을 저장한다면」에서는 이 선택이 캐시의 성격을 어떻게 바꾸는지 살펴본다.
References
- Ravi Ramamoorthi, Pat Hanrahan, An Efficient Representation for Irradiance Environment Maps, SIGGRAPH 2001. Irradiance의 방향 표현과 SH 근사.
- Unity, Light Probe data format. L2 SH 데이터 형식.
- Zander Majercik et al., Dynamic Diffuse Global Illumination with Ray-Traced Irradiance Fields, JCGT, 2019. 방향별 irradiance, 거리 moment와 가시성 보간.