Thursday, August 27, 2009

How does the renderer know the point of origin of the light as a shadow emitting point in renderman?

When camera at the time that the shadow map was made-in other words, the emitting point. The shadow() function knows to look for this information in the shadow map file. Notice that since the shadow origin comes from the shadow map file rather than the light shader, it's permissible(and often useful) for the shadows to be cast from an entirely different position than the point from which the light shader illuminates.

개인적인 생각으로 Renderman lighting의 장점 중에 하나가 depth map shadow을 쓸때 Shadowing을 lighting으로 부터 완전히 분리 시켜 다룰 수 있다는게 아닌가 싶다.

실제로 종종 composition 이유로 light와 상관없이 shadow 방향을 틀어야 할때가 있겠고 더 나가 shadow map을 여러개 만들어 한 light에 연결하여 쓸 수도 있겠고(예:주로 넓은 배경에서 아주 큰 쉐도우 맵이 필요로 할때) shadow를 다른 light와 공유해서 쓰고 싶을때도 움직이는 물체와 고정된 물체를 같이 렌더링 할때 움직이는 물체만을 위해선 매 프래임마다 쉐도우를 만들게 해주고 고정된 물체에는 한장으로 재사용이 가능하게 만들어 그 두 쉐도우를 한 라이트에 연결기켜 사용하기 등등등....

이런 자유로움을 가능하게 해주는 이유 중에 하나가 shadow depth map 안에 그 shadow를 제너레이션 했던 camera의 정보가 들어 있기에 어디서든 어느 다른 light와 연결하거나 share가 가능한 것이다.

아직까지 큰 스튜디오에서 ray-tracing shadow 대신 depth map 방식을 쓰는 이유 중에 하나가 이런 자유로움에서 오는 optimization과 cinematic flexibility 같은 장점이 있기 때문일 것이다. 뭐 요즘은 거의 deep map shadow을 쓰지만....

Wednesday, August 26, 2009

BMRT: A Global Illumination Implementation of the RenderMan Standard

http://www.siggraph.org/education/materials/HyperGraph/radiosity/jgt96.pdf


레리 그리즈가 BMRT를 만들어 워신텅 대학에 발표한 논문!

이런 자료들을 20년이 지나도 이렇게 누구나 쉽게 찾아 볼 수 있게 항상 문서화하는 부분은 정말 우리가 배워야 할 부분이 아닐까 한다. 좋은 프로덕션일수록 이런 문서화 시스템이 잘 되어 있는 것은 당연한것 같다. 지금 내가 있는 부서도 제대로 된 슈퍼바이져로 바뀌면서 제일 먼저 한 것이 모든 것을 문서화 시켜 누구나 볼 수 있게 만든 것이었다. 개인적으로 이부분은 정말로 상당히 중요하다고 생각한다.

Wednesday, August 19, 2009

simplicity vs. Complication

사람들은 모르면 모를 수록 복잡하게 만드는 경향이 있다. 그리고 쓸데 없는 곳에 힘이 들어간다.

정말 수고 하셨습니다.

어제는 또 한분의 큰 사람이 가셨습니다. 외국에선 아시아의 만델라라는 칭호와 고국에선 빨갱이라는 칭호를 갖고 계셨던 분이 셨습니다. 고국은 몇번이나 그분을 죽이려 했고 세계는 한 목소리로그분을 살리려 했습니다. 이제 세계의 양심들과 지식인들이 슬퍼하고 있습니다. 그를 빵갱이로 불렀던 사람, 모든것을 알면서도 권력과 돈앞에 앞서고 가슴안에 양심을 닫은 무리들과 그리고 무식으로 앞과 과거를 못보는 아둔한 시민들이여.....

Tuesday, August 18, 2009

Mid-point (or Mid-distance) depth shadow

mental ray의 숨겨진 mid-point 옵션에 대해 바로 전에 얘기를 했는데 생각 난김에 한번 정리를 해보고 넘어 가보도록 하겠다. (참고로 maya에서는 mid-distance로 renderman에서는 mid-point라고 부른다.)

depth map을 이용한 shadow 방식에서 가장 이슈화 된 것은 늘 최적의 값으로 맞춰 주어야 하는 shadow bias 일 것이다. 늘 일정치 않은 값으로 매번 조절을 해야 한다는 것, 그것도 rendering을 걸어 봐야 확인이 가능하다는 것 때문에 lighting artist들에게 이만 저만 귀찮은 존재가 아닐 수 없다.

shadow bias는 shadow camera origin에서 rendering된 z-depth value image를 가지고 rendering 할 real camera에서의 distance 값을 같은 좌표계로 변환해서 거리 값을 비교 할 때 shadow z-depth 값을 (+) 쪽으로 살짝 밀어 너어 겹치지 않게, 즉 self-shadowing이 않나오도록 하는 옵션으로 값이 너무 높으면 object와 유격이 일어 나기에 늘 가장 타이트한 값을 선택해 주어야 한다.

가장 이상적인 shadow를 shadow map에서 얻을 수 있는 방법은 shadow camera coordinate space에서 X,Y 축으로 타이트하게 만드는 것 뿐만 아니라 Z축으로도 타이트하게 만들어 허용 할 수 있는 가장 큰 범위의 Z-depth contrast를 얻어 내어 real camera depth 값과 비교 하게 만드는 것이다. 이는 shadow camera에서 near/far clipping plane을 조절 하므로써 가능하게 되는데 아쉽게도 maya와 mental ray는 자동적으로 shadow camera에 들어온 objects의 bounding boxs를 체크해서 clipping 하는 auto-focus 기능만 지원한다. (경험상 이 같은 auto 기능들은 쉽고 편리함을 주지만 늘 문제의 원인이 되는 경우가 많다.)

간단한 테스트를 해본다면 renderman에서 box object를 작게 만들어서 depth map shadow를 뽑아 렌더링 해본후 다음번엔 그 box를 10배 이상 키워서 렌더링 해보면 shadow가 어떻게 바뀌는지 보일 것이다.

자, 그럼 본론으로 들어가자. 이런 shadow bias의 불편함으로 벗어 나기위해 생각 해 낸 것이 mid-point depth map shadow방식이다. woo algorithm이라고도 불리는데 bias free로 zero bias 값으로도 self-shadowing 이슈 없이 shadow를 만들어 낼 수 있는 방법이다. (renderman에서는 과거 디즈니의 다이노소어 영화에서 처음 소개 되었다.)

원리는 아주 아주 간단하다. shadow depth map을 두 장 rendering 하는데 하나는 기존과 같은 방식으로 그리고 다른 하나는 obejcts의 back-facing 면만 보이게 한후 depth 값을 rendering 하여 이 두 depth maps을 가지고 중간값(mid-point)만 갖는 제 3의 depth map을 만들어 이를 shadow에 쓰면 bias free가 되는 것이다.

내가 좋아하는 간단하면서도 좋은 아이디어이지만 여기에도 단점이 따라다니게 된다. 디테일이 필요하는 상황(예: hair)에서는 geometry의 중간 값을 얻기가 힘들어 지기에 무리가 따르고 어떤 특정한 geometry상황(예: 갑지기 안으로 들어가 깊은 구덩이를 만드는 상황)에서도 중간 값을 못찾아 에러를 낸다는 것이다. 그래서 영화 파이널판타지에서는 이런 상황 때문에 depth map shadowing을 위해 extra geometry를 만들어 미리 메꾸어야 하는 extra work을 해야만 했었다고 한다.

One of the hidden shadow Options in Mental Ray.

To choose between the Woo and Bias depth-value algorithms discussed earlier in the chapter, you simply enable or disable the Bias algorithm. You do this by specifying a Bias value. Thus, when Bias has a nonzero value, the Woo algorithm is disabled.


Mental ray가 사용자 편의는 별로 고료하는 것 같지 않다. 어떻게 보면 중요한 옵션인데 이렇게 숨겨 놨는지..... 말은 된다. zero bias는 depth map shadow에서 사용 할 수 없기에 mid-point를 사용한다는 얘기인데 사용자를 너무 생각 한 것인지 아님 반대인지.... 하여튼 그리 편한 옵션 방식은 아닌것 같다. renderman과 비교하면 이런 경우의 0은 renderman이 미리 정의 내린 defaul 값으로 대처가 된다. 아님 global setting에서 우리가 수치 값을 제어 할수가 있던지. 그리고 mid-point 옵션은 따로 밖에서 제어 할수 있게 해 놨다.

Wednesday, August 12, 2009

한국에서의 컴퓨터 그래픽스 책

최근에 한국에서 렌더맨의 관한 책이 나왔다고 해서 흥미를 갖고 보게 되었다. 아직 책을 읽어 보진 못했지만 목차와 몇몇 글을 보고 책의 내용을 조심스럽게 상상해 보았다. 아마 한국에서는 최초로 나온 렌더맨 책이 아닐까 한다.(번역서를 제외했을때) 책 내용을 볼 수는 없어 뭐라 말할수는 없는것 같고....우선 랜더맨 책이 나왔다는 것 만으로도 축하할 일이고 출발을 위한 좋은 포인트가 되길 진심으로 바란다.

개인적인 생각으로 렌더맨 책은 렌더맨 프로그램 자체가 가진 무게가 있기에 그리 가볍게 다루어 질 수가 없다고 생각한다. 여기에서 조차 몇몇 책들이 발매 되었지만 어드밴스 랜더맨만큼 깊이있게 잘 쓰여진 책은 15년이 지난 지금도 아직 찾을 수가 없다.그런 이유인지 다들 렌더맨에 대해서 조심 스럽게 책을 쓰는 것 같다. 가장 최근에 나온 책인 렌더맨 쉐이딩 가이드라는 책은 내 기대에 미치지 못했다거나 할까 라는 건방진 생각이 든다. 이유인즉 어드밴스 렌더맨과 비교하여 그리 다른것도 없고 그렇다고 더 깊은 내용을 담은것도 아니다. 그책이 못쓰인것은 아니다. 다만 어드밴스 렌더맨이란 책이 너무도 잘 나왔기에 그런 현상이 나온 것이다. 자 그럼 한국에 나온 컴퓨터 그래픽스 책 중에 10년 혹은 5년을 넘어 사랑을 받고 있는 책이 과연 몇권이 있냐냐고 물어보고 싶다. 우리의 책꽃이에 아직도 놓여 있는 책이 과연 있냐라고 좀 강하게 묻고 싶다. 프로그램 버전업과 더블어 빠르게 출판되는 메뉴얼 책이 판치는게 현 주소라고 생각한다. 물론 그런 책들도 필요로 하고 상업적인 측면도 생각 안할순 없지만...씨지의 기술력은 버전업된 프로그램의 빠른 적응이 아니다. 그 프로그램 안에 있는 내면을 보고 그에 따른 지식과 원리를 습득하는 것이라고 본다. 단 이런 지식들은 모든 이들이 다 필요한건 아니다. 최소한 씨지를 앞으로 이끈다는 사람들은 필수적인 요소라 생각 된다.