Thursday, February 4, 2010

The structure of DOF & 3D motion blur comparing to RenderMan & Mental Ray (1)

다음 회사는 정말이지 렌더러를 보고 가든지 해야지 이거..... 이쯤 됐으면 Mental ray에 정이 들 때도 된 것 같은데 근본적인 대안이 없는 문제들이 발생 할 때는 정말이지....  ray-tracing renderer의 장점을 충분히 살린 좋은 점도 많이 있지만 기본적으로 필요한 부분에서 막힌다는 것은 풀싸이즈로 가야 하는 영화 작업에서는 상당히 치명적이지 않나 싶다. 지금 회사도 멘탈레이를 현재 쓰고 있지만 결국은 다 고쳐 렌더맨 처럼 만들어 써야 되는 한계를 드러냈고 그렇다고 렌더맨의 기본 장점들을 쓸 수 있는 것도 아니고 이것 저것도 아닌 렌더러로 쓰고 있는 것 같다. 문제는 지금의 파이프 라인에서 조금만 옆으로 비켜 가야만 해도....음

그중에 하나인, mental ray 3d motion blur! 이 것 때문에 요즘 회사에서 골치를 앓고 있다. renderman에서는 아무 문제도 아닌 것이 왜 이리 mental ray는 3d motion blur와 depth of field에서 쥐약 먹은 듯 힘을 못 쓰는지 이 참에 한번 집고 넘어가 보기로 하겠다. 사실 거의 모든 ray tracing renderer의 공통적인 문제이고  Renderman을 더욱더 돋보이게 대조 되는 부분이기에 서로 비교 해가면서 살펴 보는게 좋을 것 같다.

먼저, 멘탈레이는 두가지 방식으로 모션 블러를 지원 하는데, 하나는 렌더링 과정에서 해결하는 3D motion blur와 다른 하나는 motion vector value를 Screen space에서 XY 전환하여 image RG채널로 뽑아서 composting tool 제일 마지막 단계에서 blur effect와 연결해 쓰게 하는 방식이다. 멘탈레이를 사용 하는 프로덕션이라면 이 두번째 방식을 거의 쓰리라 생각 된다. (설마 3D motion blur로 가는 곳이.....?)

간단하게 장단점만 언급 한다면 첫번째로 부정확성, 두번째 linear 모션 동선만 지원(프로펠라 같이 돌아가는 상황에서는 죽음) , 세번째 extremely motion blur 상황시에서는 작동이 안됨, 네번째 종종 튀어나오는 거친 값으로인한 artifacts 등등.... 뭐 이런 저런 단점이 수두룩 하지만 정말 값 싸게 모션블러 효과를 그럴듯 하게 줄 수 있다는 장점 하나만으로 이 모든 단점을 무시하고 쓰게 되는 것 같다.(후반 작업에서 노가다로 고치면서) 또 다른 이유는 멘탈레이의 3D motion blur의 죽음의 렌더링 타임으로 풀 싸이즈 영화 프로덕션에선 거의 쓸 수 없기 때문이다. (rhythm and hues에선 기존의 2D motion blur를 한단계 up 하여 사용한다고 들었다. 여기: http://www.rhythm.com/~ivan/mb.html)

ray tracing renderer의 3D motion blur는 distributed ray-tracing이 쓰이면서 가능하게 되었는데, 이는 over-sampling or multi-sampling이라 하여 단일 ray로 할 수 없었던 soft shadow, glossy reflection, blurry transparency, motion blur, depth of field를 가능하게 만들었다. 그 중 depth of field, 즉 DOF 와 motion blur는 rendering의 시작점인 primary ray에서 multi-sampling을 해야 하기에 고스란히 rendering time의 드라마틱한 증가를 피할 수가 없게 되는 것이다. 반면 나머지 것들은 secondary ray에서 multi-sampling을 하기에 primary ray보다는 그런 엄청난 부담을 주는 것도 아니고 여러 추가적인 옵션으로 optimizing도 가능하게 피신처를 남겨 주었다.

DOF는 보통의 renderer(renderman 포함) 방식인 pin-hole camera가 아닌 image plane 앞에 실제와 같이 가상의 lens(imaginary lens surface)를 만들어 거기서 multi-sampling을 random하게 쏘면서 거의 현실과 같은 방식으로 시뮬레이션을 하여 결과를 얻는다. lens를 사용하는 사진기의 원리를 이해 한다면 무슨 얘기인지 이해 하리라 생각한다. 조리개를 열면 열수록, 렌즈의 사용 범위가 커지면 커질 수록 심도가 얕아지게 되는 optic원리와 같은 원리를 사용한다.

아래 글 중에 ray-tracing renderer에서 sub-sampling을 위해 primary ray 수를 늘리면 rendering 시간에 어떻게 영향을 미치는지 언급 했었다. 3D motion blur, DOF도 같은 이치지만 기존 primary sub-samples 수에 플러스 되어 쏘고 더나가 anti-aliasing 이슈를 피하기 위해서는 더더 많은 sample 수가 요구되기에 rendering 계산이 상당히 오래 걸리게 되는 것이다. 그 뿐만 아니라 만약 secondary ray(ray tracing reflection, refraction, shadow 등등)라도 썼다면, 더나가 sedondary ray를 multi-sampling을 위해 썼다면, 매 primary sample마다 나무 가지 늘 듯이 주렁 주렁 계산 량은 늘어 날 것이다.

또한, mental ray 3D motion blur에서는 animated shader를 지원한다. (renderman과는 달리....) 지원한다고 전혀 좋은 소리는 아니다. 이 말은 곧 3D motion blur 계산 할때 visibility ray마다 매번 그 무거운(경우에 따라) shading 과정을 계산 해야만 한다는 것이다. 구조상 어쩔 수 없이 계산 해야 하기에 옵션으로 on, off 할 수도 없는 것이다. 과연 animated shader motion blur 쓸 일이 평생 몇 번이나 있을까? 반면, renderman은 3D motion blur에서 animated shader를 지원하지 않는다. motion blur의 시작되는 shutter opening time에서만 shading하여 나머지에 그 shading한 값을 쓰기 때문이다.

renderman의 경우는 3Dmotion blur, DOF를 계산을 하든 말든 그리 렌더링 타임이 차이가 나지 않는다. 무슨 마술도 아니고....  계속....

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home