리깅 파이썬: 3ds Max Python — MAXScript와 같이 쓰는 리깅 툴
한 집에서 두 가지 말을 쓰는 리깅 툴 — 3ds Max의 Python과 MAXScript
여러분 집에 할머니가 계신다고 상상해 보세요. 할머니는 이 집에 수십 년을 사셔서, 어느 서랍에 뭐가 있는지 다 아세요. 그런데 할머니는 이 동네 사투리만 쓰세요. 한편 여러분은 표준어를 쓰고, 스마트폰도 잘 다루죠. 두 사람이 힘을 합치면? 집안일이 엄청 빨라집니다.
3ds Max라는 3D 프로그램 안에서 캐릭터에게 뼈대를 달아 주는 일, 즉 리깅을 할 때도 똑같은 일이 벌어져요. 사투리 담당이 MAXScript, 표준어 담당이 Python(파이썬)이에요. 오늘은 이 둘을 한 툴 안에서 어떻게 섞어 쓰는지 알아봅시다.
3ds Max는 어떤 프로그램일까?

3ds Max는 컴퓨터로 3D 모형과 애니메이션을 만드는 프로그램이에요. 게임 회사, 광고 회사, 건물을 미리 그려 보는 회사에서 많이 씁니다. 윈도우 컴퓨터에서만 돌아가요.
위 그림처럼 상자, 공, 원기둥 같은 기본 도형에서 시작해서, 이걸 깎고 붙여 캐릭터도 만들고 자동차도 만들어요. 그리고 이 프로그램에는 아주 중요한 특징이 하나 있어요. 자기만의 명령 언어를 가지고 있다는 거예요. 그게 바로 MAXScript입니다.
리깅이 뭐길래 코딩이 필요할까?
리깅은 캐릭터 인형에 뼈와 관절, 조종 손잡이를 달아 주는 일이에요. 마리오네트 인형을 떠올려 보세요. 인형 몸에 실을 달고, 그 실을 나무 막대에 연결하죠. 그래야 애니메이터가 막대만 움직여도 인형이 춤을 춥니다.
문제는 이 일이 지독하게 반복된다는 거예요. 손가락 하나에 뼈가 3개, 손가락은 10개, 캐릭터는 20명… 뼈 이름 짓고, 손잡이 달고, 색깔 칠하는 일을 수백 번 해야 해요. 그래서 리깅하는 사람들은 이 반복을 코드로 자동화합니다. "버튼 한 번 누르면 손가락 뼈 30개가 착착 생기는 툴"을 직접 만드는 거죠.
두 개의 말: MAXScript와 Python
MAXScript는 3ds Max가 태어날 때부터 함께한 전용 언어예요. 아까 말한 할머니 같아요. 3ds Max 안의 구석구석을 다 알고, 짧은 한마디로 뼈를 만들거나 색을 바꿀 수 있어요. 대신 3ds Max 밖에서는 아무도 이 말을 안 씁니다.
Python은 전 세계 프로그래머가 쓰는 인기 언어예요. 표준어 같은 존재죠. 엑셀 파일 읽기, 인터넷에서 자료 받기, 예쁜 버튼 창 만들기 같은 온갖 도구(라이브러리)가 이미 잔뜩 준비되어 있어요. 마야(Maya) 같은 다른 3D 프로그램에서도 Python을 쓰기 때문에, 한 번 배우면 여기저기서 써먹을 수 있고요.
그래서 요즘 리깅 툴은 이렇게 역할을 나눠요.
- Python — 툴의 두뇌와 얼굴. 버튼 창(UI)을 만들고, 순서를 정하고, 파일을 읽고 씁니다.
- MAXScript — 현장의 손. 3ds Max 안에서 실제로 뼈를 만들고 연결하는 일을 합니다.
한 툴 안에서 어떻게 섞일까?
둘 사이에는 pymxs라는 통역사가 있어요. Python 코드 안에서 "통역사님, 이 말 좀 전해 주세요" 하면, 통역사가 MAXScript 명령으로 바꿔서 3ds Max에게 전달합니다. 그림으로 보면 이런 구조예요.
예를 들어 볼게요. 리깅 툴에서 "팔 리그 만들기" 버튼을 누르면 이런 일이 순서대로 일어나요.
- Python이 버튼 클릭을 알아채고, 설정 파일에서 "뼈 길이, 이름 규칙"을 읽어요.
- Python이 pymxs 통역사를 통해 MAXScript에게 "여기서 저기까지 뼈를 놓아라"라고 시켜요.
- MAXScript가 3ds Max 안에서 실제로 뼈를 만들고 관절을 이어요.
- 결과가 다시 Python으로 돌아오고, 툴 화면에 "완료!"가 뜹니다.
조종 손잡이도 도형에서 시작해요

애니메이터가 잡아당기는 조종 손잡이(컨트롤러)는 사실 동그라미나 네모 같은 단순한 도형이에요. 위 그림 같은 여러 도형 중 알맞은 모양을 골라, 코드로 크기를 맞추고 뼈에 붙여 주는 거죠. 이런 "도형을 만들어라" 명령이 바로 MAXScript가 제일 잘하는 일이고, "어떤 도형을 몇 개, 어떤 이름으로"를 정하는 게 Python의 일이에요.
직접 써 본 사람이 느끼는 좋은 점
- 남이 만든 도구를 그냥 가져다 쓸 수 있어요. 뼈 위치를 엑셀로 정리해 달라는 부탁을 받았을 때, Python 라이브러리 하나 불러오면 끝이에요. MAXScript만 쓰던 시절엔 이런 걸 전부 손으로 짜야 했어요.
- 실험이 빨라요. MAXScript 리스너 창에 한 줄 쳐 보면 뼈가 바로 생겨요. "이 명령이 진짜 되나?"를 1초 만에 확인하고, 되는 걸 확인한 다음 Python 툴에 옮겨 담으면 됩니다.
- 마야와 코드를 나눠 쓸 수 있어요. 이름 짓는 규칙이나 계산 부분을 Python으로 만들어 두면, 3ds Max에서도 마야에서도 같은 코드를 씁니다. 두 번 만들 일이 한 번으로 줄어요.
직접 써 본 사람이 느끼는 힘든 점
- 에러가 나면 범인 찾기가 두 배로 힘들어요. 빨간 에러 메시지가 떴는데, 이게 Python 잘못인지 MAXScript 잘못인지 통역사(pymxs) 잘못인지부터 알아내야 해요. 국경 두 개를 오가며 범인을 쫓는 기분이에요.
- 이름 쓰는 법이 미묘하게 달라요. 같은 명령인데 MAXScript에서는 점(.)으로, Python에서는 살짝 다른 표기로 불러야 할 때가 있어요. 문서도 두 곳을 다 뒤져야 하고, 오래된 좋은 예제는 MAXScript로만 있는 경우가 많아서 매번 머릿속에서 번역해야 합니다.
- 다리를 너무 자주 건너면 느려져요. 뼈 1000개를 하나씩 통역사를 거쳐 만들면 눈에 띄게 굼떠요. 그래서 "잔심부름은 몰아서 MAXScript 쪽에 한 번에 시키기" 같은 요령이 필요해지는데, 처음엔 이걸 몰라서 툴이 왜 느린지 한참 헤매게 돼요.
정리 — 두 언어는 경쟁자가 아니라 한 팀
3ds Max 리깅 툴 만들기는 "어느 언어가 이기나"의 문제가 아니에요. 집안 구석구석을 아는 할머니(MAXScript)와, 세상 물건을 잘 다루는 손주(Python)가 한 팀이 되는 이야기입니다. 통역사 pymxs가 가운데 서고, 각자 잘하는 일을 맡으면, 수백 번 반복하던 리깅 작업이 버튼 한 번으로 끝나요. 두 가지 말을 오가는 게 처음엔 헷갈리지만, 역할만 확실히 나누면 이만큼 든든한 조합도 드뭅니다.
출처
리깅 파이프라인 자동화 도구
반복 작업은 스크립트에게. 현업에서 쓰는 리깅 툴 모음.
리깅 도구 보기