리깅 파이썬: Maya Python — cmds와 OpenMaya, 언제 무엇을 쓰나

마야 파이썬, 두 개의 문이 있어요
마야(Maya)는 영화나 게임에 나오는 3D 캐릭터를 만드는 프로그램이에요. 이 프로그램에게 "팔을 움직여!" 하고 말을 걸려면 파이썬이라는 언어를 써요. 그런데 재미있게도, 마야에게 말을 거는 문이 두 개 있어요.
하나는 cmds라는 문이에요. 또 하나는 OpenMaya라는 문이에요. 둘 다 같은 마야 안으로 들어가요. 그런데 들어가는 방식이 아주 달라요.
cmds는 식당 카운터 주문이에요
cmds를 쓰는 건 식당 카운터에서 주문하는 것과 비슷해요.
"김밥 하나 주세요!" 하고 말하면, 주방에서 알아서 만들어서 갖다 줘요. 내가 주방에 들어갈 필요가 없어요. 칼을 잡을 필요도 없어요. 말만 하면 돼요.
cmds도 똑같아요. cmds.setAttr() 하고 한 줄만 쓰면, 마야가 알아서 뼈를 움직여 줘요. 쉽고 안전해요.
대신 느려요. 주문을 하면 점원이 듣고, 주방에 전달하고, 요리하고, 다시 갖다 주는 과정을 매번 거쳐야 하거든요. 김밥 한 줄이면 괜찮아요. 그런데 김밥 만 개를 시키면? 만 번 주문하고 만 번 기다려야 해요.
OpenMaya는 주방에 직접 들어가는 거예요
OpenMaya는 내가 직접 주방에 들어가서 요리하는 거예요.
재료가 어디 있는지, 칼은 어떻게 잡는지 다 알아야 해요. 배울 게 훨씬 많아요. 처음엔 손을 벨 수도 있어요.
대신 정말 빨라요. 주문하고 기다리는 과정이 없으니까요. 김밥 만 개도 내 손으로 슥슥 만들면 금방이에요. 마야의 데이터에 직접 손을 대기 때문에 그래요.
리깅에서는 왜 이게 중요할까요?
리깅은 캐릭터 안에 뼈와 관절을 심어서, 움직일 수 있게 만드는 일이에요. 인형에 실을 다는 것과 비슷하죠.
그런데 진짜 캐릭터는 뼈가 수백 개예요. 점(버텍스)은 수만 개고요. 이 많은 것을 하나하나 만지려면, 명령을 수만 번 내려야 해요. 그래서 어느 문으로 들어가느냐에 따라 작업 시간이 몇 초가 되기도 하고, 몇 분이 되기도 해요.
실제로 리깅 도구를 만드는 사람들은 이렇게 나눠 써요. 컨트롤러를 만들거나 노드를 연결하는 것처럼 몇 번만 하는 일은 cmds로 해요. 스킨 웨이트를 수만 개 점에 한꺼번에 적는 것처럼 수만 번 반복하는 일은 OpenMaya로 해요.
직접 써 보면 이래요
cmds — 쓸 때 좋은 점
생각한 걸 바로 코드로 옮길 수 있어요. 마야에서 손으로 해 본 작업이 있으면, 스크립트 에디터에 그 명령이 그대로 찍혀 나와서 베끼기만 해도 돼요. 그리고 실수해도 Ctrl+Z 한 번이면 되돌아가요. 되돌리기(undo)가 공짜로 따라오거든요. 급하게 "이거 자동으로 좀 해줘"라는 부탁을 받았을 때, 10분 만에 뚝딱 만들어 줄 수 있는 게 cmds예요.
cmds — 쓸 때 힘든 점
결과가 전부 글자(문자열)로 돌아와요. 뼈를 하나 만들면 뼈 자체가 아니라 "joint1"이라는 이름표만 손에 쥐어져요. 그런데 누가 이름을 바꾸거나 같은 이름이 두 개 생기면, 이름표가 엉뚱한 걸 가리켜서 스크립트가 터져요. 그리고 점 5만 개짜리 캐릭터의 웨이트를 cmds 반복문으로 돌리면, 마야가 멈춘 것처럼 굳어서 커피 한 잔 마시고 와야 해요. 이 기다림이 하루에 몇 번씩 쌓이면 정말 진이 빠져요.
OpenMaya — 쓸 때 좋은 점
속도가 다른 세상이에요. cmds로 몇 분 걸리던 웨이트 복사가 1초 안에 끝나는 걸 처음 보면 웃음이 나요. 그리고 이름표가 아니라 물건 자체를 손에 쥐어요. 누가 이름을 바꿔도 내 손안의 물건은 그대로라서, 큰 장면에서도 스크립트가 잘 안 깨져요. 마야가 스스로 계산하는 방식 그대로 데이터를 만지니까, 디포머나 커스텀 노드 같은 깊은 도구도 만들 수 있어요.
OpenMaya — 쓸 때 힘든 점
첫 줄부터 벽이에요. 뼈 하나 이름을 얻는 데도 MSelectionList, MDagPath 같은 낯선 상자를 서너 개 거쳐야 해요. cmds면 한 줄인 일이 열 줄이 돼요. 더 무서운 건 되돌리기가 공짜가 아니라는 거예요. 직접 데이터를 고치면 Ctrl+Z를 눌러도 안 돌아와요. 되돌리기까지 내가 직접 만들어야 해요. 실수로 장면을 망가뜨리고 저장도 못 되돌릴 때의 그 서늘함은, 겪어 본 사람만 알아요.
그래서 결론은?
둘 중 하나만 고르는 게 아니에요. 요리사도 간단한 건 시켜 먹고, 중요한 요리는 직접 하잖아요.
리깅 스크립트도 똑같아요. 기본은 cmds로 편하게, 수만 번 반복되는 무거운 부분만 OpenMaya로 빠르게. 이게 실무에서 제일 많이 쓰는 방법이에요.
처음 배운다면 cmds부터 시작하세요. 그러다 "왜 이렇게 느리지?" 하고 답답해지는 날이 오면, 그때가 OpenMaya의 문을 열 때예요.
출처
리깅 파이프라인 자동화 도구
반복 작업은 스크립트에게. 현업에서 쓰는 리깅 툴 모음.
리깅 도구 보기