이미지-베이스드 라이팅을 요즘에 좀 조사했는데, 아직도 잘 모르겠습니다.
IBL로 반사광(specular)을 얻는 방식은 cube-mapped reflection과 차이가 없는 듯합니다. 카메라에서 물체 표면을 향하는 벡터, 물체 표면 법선 벡터, 그리고 반사 벡터를 이용해서 큐브 맵 텍셀을 얻어 오면 됩니다. Cube-mapped reflection을 쓰면 해당 큐브 맵이 텍스쳐로 사용되고, IBL로 반사광을 얻으면 해당 큐브 맵이 반사광 조명으로 사용된다는 차이뿐인 듯합니다. 하지만 정확한 차이점을 모르겠네요.
재미있는 것은 IBL을 이용해서 분산광(diffuse)을 실시간으로 얻을 수 있다는 것입니다. 굉장히 많은 수의 정적 조명이나 global illumination 효과를 움직이는 객체에 적용하고 싶은 게임에서는 쓸모가 있을 수도 있겠습니다. 예를 들어, 밝게 빛나는 파란 건물 앞에 캐릭터를 세우면 캐릭터 앞이 살짝 파래지는 효과를 낼 수 있습니다. 하지만 저는 굳이 이렇게까지 할 필요가 있을까란 생각이 듭니다. 많은 수의 분산광 조명을 활용하려면 deferred shading을 활용하는 게 나을 듯하고, global illumination은 별로 티도 안 나니 큰 이득이 없어 보입니다.
IBL로 분산광을 실시간으로 얻는 과정을 제가 이해하고 생각한 대로 정리하면 다음과 같습니다.
우선 전처리 과정이 필요합니다. 월드의 몇몇 지점에서 큐브 맵을 만듭니다. 그 다음, 각 큐브의 중앙으로부터 모든 방향에 대한 분산광을 계산해서 저장합니다. 각 방향의 분산광은 그 방향과 큐브 맵이 이루는 각도에 따라 큐브 맵 색상에 가중치를 곱한 것을 모두 더해서 평균을 구하면 됩니다. 좀 더 빠르게 하려면 HDRI로 큐브 맵의 빛 강도를 미리 추출해서 강도가 센 텍셀 위주로만 계산할 수도 있고, 특정 방향의 큐브 맵 텍셀 몇 개만 추출해서 계산할 수도 있습니다. 만약 global illumination을 적용해서 렌더링할 수 있으면, 렌더링한 것을 그대로 큐브 맵으로 써도 됩니다.
전처리가 끝났으면 전처리된 텍스쳐의 정보, 그리고 정점이나 픽셀의 법선을 이용해서 해당 방향에 맞는 텍셀을 얻으면 됩니다. 객체가 큐브 안에 있을 때엔 그 큐브의 맵을 이용하면 되고, 그렇지 않으면 가장 가까운 큐브의 맵을 이용하면 될 것입니다. 또는 주변 큐브와의 거리에 따라 가중치를 둬서 여러 큐브의 맵을 혼합해서 사용하면 좀 더 정확하겠습니다.
추가적으로, 큐브 맵 안에서의 좌표에 따라 좀 더 정확한 큐브 맵 텍스쳐의 좌표를 얻어 오도록 개량할 수도 있습니다.
다음 문서를 읽어 보면 도움이 될 것입니다.
적어 놓고 보니, 그림이 없어서 이해가 쉽지 않겠네요. 나중에 그림을 추가해야겠습니다.

댓글을 달아 주세요
3번째 문서가 보는것이 재일 편한거 같네요. 여기까지는 이해라던지, 가능한한 적용도 생각해볼만한 수준인거 같은데, 여기서 확장된 내용이라고 해야되나...
precomputed radiance transfer정도만 가도...ㅜ.ㅜ... 내용이해가 너무 어렵더라구요.
위에 적으신 내용만 하더라도 큐브맵용량이 그냥 택스쳐*6인데 영역별로 써야 되는것도 같고, 괜찮은 효과를 위해서는 많은 배치를 해야되잖아요, 위에서 언급하신 내용을 보면 정적인 오브젝트에만 적용되는 내용인것도 같나요....
IBL이라던지 PRT는 현실적인 랜더링에 정말 가깝긴 하지만, 이를 위해 치려야할 대가가 너무 큰거 같네요...ㅜ.ㅜ..
저는 몇 년간 3D쪽과 담을 쌓고 지내다 보니 아는 게 없네요 ㅎㅎ 3D는 알아야 할 게 너무 많지만, 어려운 만큼 도전해 볼 만한 일인 듯해요.