2012년 12월 4일 화요일

Maya 2012 OpenEXR 압축방식

maya 2011 까지는 mental ray file output 에서 OpenEXR(exr) 을 선택 할 경우 활성화 되지 않던 압축 방식을 지정하는 부분이 2012 에서 활성화가 되었습니다.

OpenEXR 은 비손실 압축을 지원하므로 지금까지 render passes 셋팅으로 단일 파일에 레이어를 다 포함하여 랜더를 걸경우 이미지 한장당 100M 넘기는건 우스운 일이었습니다.(half float -16bit 일경우에도 어마어마한 용량을 보여주죠..)


위 그림처럼 Image compression 탭이 활성화가 됩니다.

간단한 테스트로 900x1200 사이즈의 캐릭터를 랜더를 걸었으며
패스는 다음과 같습니다.(기본적으로 제가 mental ray 를 사용하여 랜더를 할때 2d 에 넘겨주는 패스 구조 입니다.)


이러한 셋팅에 frame buffer 에서 리니어 워크 플로우를 적용 한뒤 랜더를 걸었습니다.
위는 32bit floating point 셋팅입니다.

이처럼 랜더를 하였을때 각 압축 방식별 용량입니다.

위처럼 b44 압축 방식을 제외 하고 랜더를 걸어 보았습니다.

비손실 압축 외에 pxr24 압축 방식도 테스트를 해 보았으며 b44 방식은 손실이 많다고 하여 테스트에서 제외 했습니다.

실제 용량문제로 인해 여태까지 영화 작업을 하면서 half float (16bit) 형태로 랜더를 걸었었으며 2d 합성중에 손실로 인한 문제가 발생 하지 않았기에 pxr24 방식은 랜더를 걸어 보았습니다.

위중에 zip 방식과 pxr24 방식은 시퀀스 랜더를 통해 nuke 에서의 로딩 속도등도 테스트 할 예정이며(언제가 될지는 잘... ^^;) 실제 걸어본 이미지를 nuke에서 간단하게 gamma 와 gain  을 조절 하며 밝기가 극명한 부분과 어두운 부분의 픽셀 포인트를 비교 해본결과 무손실 압축인 rle와 zip 방식은 무압축인 none 과 동일 하였으며 pxr24 방식의 경우 간혹 0.00001~0.00002 의 오차가 확인 되었습니다.

실제 컴퍼지팅에서 얼마나 문제가 될지는 알 수 없지만 32bit 를 24bit 로 압축하는것이니 half float 형태로 진행해왔던 그간 문제가 되지 않았기에 문제가 없을것으로 판단됩니다.(지극히 개인적인 견해 입니다.^^;)

시퀀스로 랜더를 하였을경우 nuke 에서 로딩이 얼마나 차이가 나는지는 다시 체크를 해보아야겠지만 실제 랜더된 이미지의 사이즈 만으로도 크게 부하가 줄 것으로 예상됩니다.

http://en.wikipedia.org/wiki/OpenEXR

위는 위키의 OpenEXR 포맷에 관련된 페이지 입니다. 참고 하시면 도움이 되실 겁니다.


추가)  한글로 된 문서가 있어 추가 합니다.

http://ettrends.etri.re.kr/PDFData/19-1_033_042.pdf

2012년 11월 14일 수요일

maya only one instance of this panel type allowed 에러 관련


종종 Maya 에서는 레이아웃 관련된 문제가 생기곤 한다. 

그리고 여러 사람이 작업할때 가장 짜증 나는 부분이 다른 사람이 하던 작업을 받아서 하게 될때

그 사람만의 레이아웃이나 여러 패널들이 화면을 가득 채우곤 하는데.. 

특히나 maya only one instance of this panel type allowed 이런 메세지가 나오면서 열고 싶은 패널이 열리지 

않을때는 뚜껑이 먼저 열리게 되죠.. 전 작업자를 탓하면서 말이죠.. 

이를 해결할 간단한 방법을 알려드리겠습니다. 


Window > Settings/Preferences > Preferences ... > UI Elements > Save Panel Layouts with File


Window > Settings/Preferences > Preferences ... > UI Elements > Restore Saved Layout from File


두가지 항목의 체크를 꺼주시고 저장 하면 됩니다. 


더 간단한 방법으로는 스크립트 에디터에 buildNewSceneUI 를 입력하면 됩니다.

참고로 위의 방법을 모두 적용하길 원하는 부분은 스튜디오 환경 내에서 여러 사람이 같은 씬을 넘겨 받으며

작업 할때 생기는 문제들을 해결 가능하다는 점입니다.

2012년 9월 11일 화요일

Maya Tearable Ncloth Motion Vector 에 관하여

ncloth 를 사용하여 시뮬레이션을 할때 tearing을 할 경우가 있습니다.

캐쉬를 잡고 여타 랜더는 잘 되지만 모션 블러를 주거나 모션 벡터 패스를 뽑게 되면

vertex 가 나뉘는 지점에서 오브젝트가 찢어져 보이는 현상(단순 tearing으로 인한 찢어짐이 아니라 버텍스가 여기 저기 날라가는 모습)을 목격할 수 있습니다.

구글링 열심히 해봐도 딱히 제대로 된 해결방안은 찾기 힘들더군요. 뭐 블로그 포스팅 하면서 매번 하는 얘기지만 영어가 짧아 찾질 못한다고 해야 맞는 말인것 같네요.

계속된 tearing을 사용하다 보니 노드 몇가지가 생성되는것을 알게 되었고 그 부분을 만지게 되면서 다음과 같은 방법을 사용하게 되었습니다.

ncloth가 적용된 오브젝트에 tearable surface 를 적용하면 node 3개가 생성이 됩니다.

polySoftEdge, polyMergeVert, polySplitEdge


ncloth 만 적용했을때에는 생성되지 않던 노드 입니다.

위의 노드를 보면 tearing 프로세스는 생각외로 간단(보여지는것만.. ^^)합니다. 선택된 버텍스를 나누고 시뮬레이션의 영향에 따라 합쳐둔 상태에서 나누어질 시점이 되면 merge 가 풀리는 형태 입니다. 풀리는 시점이나 영향등은 tearable surface 로 생긴 constraint 노드에서 조절을 하구요.

저기서 생성된 softEdge는 이런 과정에서 나누어진 오브젝트 간의 엣지가 각이지는것을 방지 하기 위함이구요.

뭐 중요한건 이런 노드가 생긴다 라는것이지 작동은 아니니 다음으로 넘어 가면..

버텍스 포인트로 인해 생성되는 패스(모션 벡터, 노멀 등)를 랜더링 하기 위해서는 위의 3가지 노드중 polyMergeVert 를 지워 주는것으로 간단하게 해결이 가능합니다.

위와 같이 하이퍼 그래프에서 polyMergeVert를 선택하여 del키를 살포시 눌러주면


위와 같이 그냥 사라지죠..







하지만 위의 2가지 그림에서 처럼 polyMergeVert를 지운 오브젝트는 잘리는 부분이 각이 생기게 됩니다. 당연히 오브젝트의 포인트가 나뉘어져 있으니  polySoftEdge 가 잘린 부분엔 작용을 하지 않게 되는것이지요..

그래서 버텍스 포인트에 관련된 패스는 따로 랜더를 걸고 룩에 관련된 패스는 polyMergeVert를 지우지 않은 녀석으로 랜더를 걸어 합성에서 합쳐주는 방식을 사용합니다.

참고로 랜더를 할때 룩에 관련된 랜더레이어는 랜더 셋팅에서 Motion Blur 를 off 해야 하고
모션 벡터를 랜더할 녀석은 full 로 셋팅을 합니다.

추가 적으로 모션 블러를 full 로 놓고(모션블러가 켜진상태) 랜더를 하게 되면 현재 프레임이 1일때 1.2 혹은 1.4 등의 프레임이 랜더가 되게 되므로(셋팅에 따라 랜더 걸리는 프레임은 변화 됩니다.) 몇가지 셋팅을 해주어야 합니다. layer override 기능을 사용해서 말이죠.

모션 벡터만을 거는 것이기 때문에 sutter open 과 shutter close 는 1(동일한 값을 주는것으로 이미지 자체에 블러가 먹지 않게 됩니다.)
Motion Offsets에서 Custom Motion Offsets 을 체크 해주고 Motion Back Offset 의 값을 1로 해주는 것으로 셋팅은 완료가 됩니다.
누크에서 사용할 패스는 2D Motion Vector 라는 이름의 패스이고 생성 하면 mv2DToxik 이라는 패스가 랜더 패스에 생성이 될것입니다.


 이렇게 뽑은 룩관련 패스와 모션 벡터를 이용해서 nuke 에서 vector blur를 주게 되면 끝~

사실 귀찮을때는 머지노드 지우고 그냥 다 걸어서 사용하기도 합니다. 각진 부분이 눈에 안띄길 바라면서 말이죠~~ ^^;;;