Sunday, February 7, 2010

Spherical Harmonics for Irradiance Environment Maps


요즘 한참 관심있는 "Pre-filtered irradiance environment map for a diffuse reflection map"이다. (precomputing separate reflection maps for the diffuse and specular)

다시 말해 chrome 구를 이용해 실제 세상의 light를 캡쳐한 incident radiance, 즉 illumination environment map을 low frequency reflection으로 쓰기 위해 미리 diffuse illumination as Ambient light로 전환하는 방식인 pre-filtering(pre-computing)을 하여 보다 효율적으로 쓸 수 있게 만든 irradiance environment map for a diffuse reflection map이다. 결과가 간단히 blurry env map으로 보여 단순하게 photoshop blur 정도로 생각했던 내게 띵~하고 머리에 뭔가 맞은 느낌이였다.

첫째로, illumination environment map에서 각각의 pixel을 point P로 놓고 평면 uv 좌표계가 아닌 3D space에서 두 angle과 단위 distance로 구성된 sphere coordsys (r, θ, φ)으로 전환해 정확하게 filtering이 이루어지고 둘째로는, 실제 가상의 3D sphere상에서의 normal 값을 산출해내 hemi-sphere sampling 과정을 Monte Carlo 적분법으로(Hemispherical Integration) 상당한 정확하게 low frequency diffuse illumination 계산이 이루어 진다는 것이다. (The env map should be in linear space)

diffuseConvolution(outputEnvironmentMap, inputEnvironmentMap)
{
for_all {T0: outputEnvironmentMap}
sum = 0
N = envMap_direction(T0)
for_all {T1: inputEnvironmentMap}
L = envMap_direction(T1)
I = inputEnvironmentMap[T1]
sum += max(0, dot(L, N)) * I
T0 = sum
return outputEnvironmentMap
}


위에 설명 한 것 처럼 illumination environment map에서 standard 방식으로 전체 pixel point를 다 sampling을 하여 average 값을 얻으려고 하면 너무 과다한 연산 시간과 메모리를 필요로 하게 되는데(물론 아주 정확한 결과를 얻겠지만....) 이를 좀 더 효율적으로 하기 위해 sampling 방식을 Spherical Harmonics Function과 접목해서 쓰게 되면 정말로 드라마틱하게 연산 시간을 줄일 수 있게 된다.(거짓말 같이 2시간 걸릴 것을 1~2초만에) 조금의 에러율을 얻게 되지만 High frequency(High pass)로 가지 않는 한 전혀 문제가 되지 않는다.

이미 게임쪽에서는 2000년대 들어오면서 실시간 global illumination을 위해 획기적으로 발전되고 있는 원리로 듣기로는 벌써 몇몇 게임에서 쓰고 있다고 들었다.

영화 CGI쪽에서는 여기 설명한 Irradiance Environment Maps을 빠르게 계산해 내기 위해서 그리고 RenderMan에서는 directly illuminated surface color값이 포함된 point cloud radiance caches에서 Color Bleeding과 Ambient Occlusion을 point-based approximate 방식으로 접근 계산 할때 빠르게 계산해 내기 위해 쓰이고 있다. 이 모든 현상들이 low frequency라는 공통점이 있기에 가능한 것이다.

처음 듣는 분들에게는 상당히 당혹스런 전문용어가 아닐까 한다. 나역시 이제야 이해가 가기 시작한 시점에서 자세히 정확하게 설명하기에는 그렇다. 부수적으로 딸린 수학원리 식구들이 많아 한국에서의 내가 배운 고등 수학을 뛰어 넘어야 정확한 이해를 할 수 있을 것 같다. 게다가 영어로 된 이런 수학, 물리 용어들은 너무 생소하고 전혀 다른 뜻으로 해석이 되니 이해하는데 상당히 부담을 준다. 한국어로 된 자료는 그리 많지 않지만 게임쪽의 몇몇분과 카이스트 대학에서 올려놓은 자료가 있어 지금 이해하는데 상당히 많은 도움을 얻고 있다.

해마다 이 Spherical Harmonics와 접목 된 Global illumination 분야가 게임은 물론 영화 CGI쪽에서 정말 빠르게 연구 되고 발전 된다는 것을 눈치 챘다면 주목 안 할수가 없는 부분인것 같다.

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home