Wednesday, November 11, 2009

What is color bleeding(secondary one bounce diffuse Inter-reflection)?

사실 'secondary diffuse inter-reflection'이라는 말이 더 정확 하겠지만 일반적으로 color bleeding으로 더 많이 알려져 있어 그냥 color bleeding이라 쓰겠다.

Color bleeding이 무엇이고 현제 어떤 시점까지 와 있는지 얘기해를 해보면 Color bleeding은 Ambient Occlusion이 그랬 듯이 현 헐리우드의 메인 프로덕션을 중심으로 빠르게 확산되어 가는, 더욱 사실적인 효과를 주기 위한 lighting의 한 요소로 빠르게 자리 잡아 가고 있는 기능 중에 하나일 것이다. 선택과목에서 필수 과목으로 빠르게 들어 오려 하는 과정이라고나 할까?

Color bleeding은 좀 더 정확하게 secondary diffuse inter-reflection이라 정의 내릴 수 있겠는데 앞서 얘기 했듯이 좀 더 이해하기 쉽게 하기 위해 color bleeding이란 용어가 일반적이로 쓰이고 있는 것 같다.

중요한 것은 'secondary'라는 것. 즉, 1차적으로 light emitter에서 나온 direct light가 물체의 surface을 맞은 후에 일어나는 2차 반응 중에 one bounce diffuse inter-reflection만 계산해 낸 것이다.

더 자세히 말하면,
1차, light emitters에서 direct light를 쏘아줌,
2차, 1차에서 쏜 rays에서 hit된 surface의 point P에서 정의 된 distance만큼 반구의 볼륨안에서 정의된 개수만큼 rays를 쏴줌. 그리고 그 쏜 rays가 어느 물체의 surface에 hit을 했으면 그 hit한 surface point P에서 shader의 color값을 모두 가져와 average값을 구하여 1차의 light color 값과 2차의 surface color값을 곱해 준 것이 final output color value가 된다.

이런 효과를 표현하기 위해선 현재로써는 세가지 방식으로 접근 할 수 있겠는데,

첫째는 현재 가장 효율적인 방식으로 점점 유명해져가는 irradiance caches의 한 종류인 point cloud로 caching 하여 octree로, 혹은 brick maps 형태로 그 data를 organization한 상태에서 spherical harmonic functions을 이용한 point-based approximated 방식으로 빠르게 연산하여 얻어내는 방법이겠다. 완벽하게 정확한 값을 얻어내는 것은 아니지만 가장 안정적이고 현 프로덕션 상황에 맞게 고급 퀄러티를 얻을 수 있는 최고의 방법이라 말 할 수 있겠다. 단점은 구조상 pixel만큼 조밀한 point cloud가 가능한(each micropolygon vertex가 point cloud caching이 되기때문) Reyes algorithm의 renderer들만 지원을 한다는 것이다. ray-tracing based render도 이론상 가능은 하지만 screen space안의 부족한 vertex 수로 인해 현재로써는 불가능하다고 본다.

둘째로는 distribution ray tracing 방식을 이용한 방식으로 현재 Fake 방식으로 많이 쓰이는 것으로 알고 있는데(참고로 지금 회사에서 쓰는 방식임) 쉽게 말하면 Ambient Occlusion 방식에서 floating point value 대신 RGB color 값을 가져오는데 AO처럼 hit 유무만 알아 오는것이 아니라 hit 했을시 그 surface point에서 shader에 있는 color 속성도 빼오는 방식이다. 앞에서 얘기 했듯이 이것은 Fake다. secondary diffuse inter-reflection에서 1차 light 계산과의 거래는 완전 무시하고 surface shader에서 color attribute만 뽑아 오기에 계산이 가볍고 어느 ray-tracing 렌더러에서나 가능하다는 것이다. 1차 direct light 계산과의 거래가 없는 관계로 너무 원색적인 final color값을 얻기에 compositing tool에서 또 한번더 부정확한 fake로 만들어 주어야 한다는 단점이 있겠다.

세째로는 뭐 다들 알고 있듯이 photon mapping 방식의 Global illumination을 써서 얻어 내는 것으로 가장 정확한 계산 결과를 얻지만 죽음의 렌더링 타임과 노이즈와의 싸움으로 인해 현실적인 feature production에서 아직까지는 사용이 힘들다는 것이다. 듣기로는 PDI는 Shrek 2부터 이 방식으로 쓰고 있는 듯 하지만 그냥 스탠다드한 방식으로 쓰는 것이 아니라 위의 첫번째 방식인 point based같은 효율성을 얻기 위해 uv space상에서 filtering 및 이와 관련된 2차적인 효과를 주어 보완해서 쓰는 것으로 알고 있다.

어쩌면 color bleeding이란 건 global illumination 방식으로 가는 과도기에서 나온 과도기적 효율적인 방식일지도 모른다. 하지만 현 하드웨어적 상황으로 볼때 당분간은 이것을 유지 할 것으로 예상된다.(늘 하드웨어의 발전 속도는 나의 예상을 뛰어 넘기에.... 과연?)

Ambient Occlusion 사용만으로 오는 포토리얼리즘 속의 비사실성이 보인다면 다음 스텝으로 color bleeding으로 다가가야 한다고 강력히 강조하고 싶다.

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home