Saturday, January 9, 2010

Why RenderMan needs Displacement Bounds?

왜 renderman류의 renderer에서만 displacement bound 옵션이 있을까? 라는 물음으로 시작하겠다. 이 옵션의 역활은 단순하다. 말 그대로 해당 geometry의 bounding box 사이즈를 정의된 unit단위로 늘리는 것뿐이다. 그럼 왜 bounding box 싸이즈를 displacement 되어 움직여지는 grid vertices 만큼 늘여야만 하는 것일까? 첫번째 이유는 bucket단위로 독립적인 rendering을 하기 때문이고 그 bucket안에 geometry가 안에 있냐 밖에 있냐를 계산할때 bouncing box 단위로 체크를 하기 때문이다.

두번째 이유는 displacement는 shading과정에서 계산되어지기 때문이다. shading을 하기 전까지는 이 grid상태의 micropolygons vertices이 후의 과정인 displacement shading에 의해 어디로 튈지 모르기 때문에 렌더링 초기 과정인 bucket안에 들어와 있는지 여부를 (bounding box 단위로 check & culling) 확인할때 그 bounding box 싸이즈를 크게 하여 계산되고 있는 bucket안에 들어오게 하여 실제 계산인 쉐이딩 까지 그 데이타를 계속 끌고 오게 만드는 것이다. 이 옵션은 상당히 비 계산적인 방식으로 조절해야 하는 것이 사실이다.

그럼 이런 비 계산적인 방식 말고 정확하게 계산해여 displacement bound value를 얻을 수 없는 것도 아니다. extremedisplacement attribute을 씀으로써 정확한 값을 뽑아 올 수가 있다. 이 방식은 먼저 해당 geometry마다 displacement shading을 연산하여 정확한 displacement bounds 값을 산출하여 제공하므로써 메모리를 낭비하는 것을 방지하는 것이다. shading을 먼저 한다는 것 또한 rendering 과정에 상당한 부담을 줄것이지만 어떤 경우에는 이 부담을 안고서도 정확한 값을 필요로 하기에 이 attribute가 있는 것이다. 흔히 Extreme Displacement가 이루어질때 이것이 효과적으로 쓰이기 되는데 Extreme 같은 경우에는 보다 정확한 displacement bounds value가 요구되어 진다. 잘못 쓰인 값은 엄청난 메모리 낭비로 직결되기 때문이다.

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home