MotionForge

🇺🇸 English | 🇰🇷 한국어
캐릭터가 무엇을 해야 하는지 입력하세요. Blender에서 애니메이션을 받아보세요.
MotionForge는 NVIDIA의 ARDY 모션 모델을 Blender 옆에서 실행하고, 결과를 일반 리그처럼 편집할 수 있는 키프레임으로 변환합니다. 캐릭터를 실시간으로 조종하거나, 반드시 거쳐야 할 포즈를 고정하거나, 모션을 내 캐릭터에 옮기거나, Cascadeur로 바로 전송할 수도 있습니다.
Please subscribe to Cascadeur via the link below. Thank you.
https://cascadeur.com/?ref=chamiseul
0.2.0 신기능 — Cascadeur로 전송. 캐릭터 또는 애니메이션만 FBX 파일을 수동으로 주고받지 않고도 Cascadeur로 전송됩니다. Cascadeur로 전송하기를 참조하세요.
추가 신기능 — 돌아오는 기능. Cascadeur에서 받기는 작업 결과를 보낸 리그로 되돌려줍니다. 전송 시 속도 그대로, 또는 원하는 속도로 가져올 수 있습니다. Team Fortress 2 Trifecta 리그처럼 여러 스켈레톤으로 구성된 리그는 전송 시 하나로 합쳐지므로 모자, 파우치, 무기가 함께 도착하고, Cascadeur의 Rig Mode도 자동으로 채워집니다. 돌아오기를 참조하세요.
초기 설정 (한 번만)
1. 엔진 설치. install.bat을 더블클릭합니다. 현재 폴더에 .venv 폴더를 만들고 모든 것을 그 안에 넣습니다. 다른 곳은 변경되지 않습니다. Python 3.12, Git, NVIDIA GPU, 약 10 GB의 디스크 공간이 필요합니다.
2. 애드온 설치. Blender에서: Edit ▸ Preferences ▸ Add-ons ▸ Install로 이동해 motionforge 폴더를 선택하고 활성화합니다.
3. 엔진 경로 설정. 애드온 환경 설정에서 ARDY Python을 install.bat이 완료 시 출력한 .venv\Scripts\python.exe 경로로 설정합니다.
4. 텍스트 인코더 접근 권한 획득. ARDY는 Meta Llama 모델로 프롬프트를 읽으며, 라이선스 동의가 필요합니다.
huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct에서 동의- 터미널에서
huggingface-cli login실행 후 토큰 붙여넣기
3D 뷰포트에서 N을 누르면 MotionForge 탭이 표시됩니다.
전체 구조 (30초 요약)
MotionForge는 두 부분이 함께 작동합니다.
- 엔진 — NVIDIA의 ARDY 모델. 문장을 애니메이션 프레임으로 변환합니다.
- 애드온 — Blender 내에서 실행됩니다. 리그를 만들고, 프레임을 재생하며, 포즈를 조종·고정하고, 결과를 내 캐릭터에 복사합니다.
모든 애니메이션은 먼저 MotionForge가 만든 소스 리그(Create Rig 버튼)에 적용됩니다. 이후 다른 아마튜어(타겟 리그)로 복사하여 내 캐릭터에서 모션을 재생할 수 있습니다.
다섯 개의 패널
3D 뷰포트에서 N을 누르면 오른쪽 사이드바에 MotionForge 탭이 나타납니다. 사용 순서에 따라 다섯 개의 패널이 있습니다.
1. MotionForge — 연결 및 리그 생성
| 항목 | 설명 |
|---|---|
| Model | 사용할 ARDY 스켈레톤. Core를 유지하세요 — 거의 모든 경우를 커버합니다. |
| Text Encoder | 선택 사항이지만 강력히 권장합니다 (아래 공유 텍스트 인코더 참조). |
| Connect ARDY | 엔진을 로드합니다. 첫 실행 시 수 GB를 다운로드합니다. Ready 상태가 될 때까지 기다리세요. 처음엔 약 1분, 이후엔 약 5초 — 텍스트 인코더는 연결 사이에도 로드된 상태를 유지합니다. |
| Create Rig | 아마튜어를 생성합니다 — 모델이 애니메이션할 스켈레톤인 소스 리그입니다. |
| Generated Rigs 목록 | 생성한 모든 소스 리그. Use \<name>을 클릭하면 해당 리그를 활성 소스로 설정합니다. |
| Active source | 현재 테이크가 생성되는 리그입니다. |
2. Text to Motion — 텍스트로 애니메이션 생성
| 항목 | 설명 |
|---|---|
| Takes | 샷 목록. +로 추가, −로 선택 항목 삭제. |
| — Source Rig | 이 테이크가 적용될 리그. 비어 있으면 활성 소스를 사용합니다. |
| — Prompt | 평문 문장. 예: "a person walks forward". "a person"으로 시작하세요 — 모델이 그렇게 학습되었습니다. |
| — Duration | 테이크 길이(초). |
| — Seed | -1은 매번 새 결과, 고정 숫자는 동일한 결과를 반복합니다. |
| — Continue | 위 테이크의 끝에서 시작하여 연속 퍼포먼스를 만듭니다. |
| Shared | 모든 테이크에 적용되는 옵션: Reduce Foot Skating(발이 깔끔하게 착지하며 웨이포인트/포즈에 정확히 맞춤 — 켜두세요), Denoising Steps(적을수록 빠르고 거침), Prompt Strength, Constraint Strength. |
| Waypoints | "이 프레임에서 여기 있어라" 마커로 경로를 설정합니다. Face Waypoint Direction은 캐릭터가 보는 방향도 제어합니다. |
| Pose Keys | "이 프레임에서 이 모습을 취해라". 각 키에는 편집 가능한 리그 사본이 있습니다. |
| Generate Take / Generate All | 선택한 테이크 또는 체크된 모든 테이크를 생성합니다. |
3. Live Path — 재생 중 실시간 조종

| 항목 | 설명 |
|---|---|
| Live takes list | 실행 중인 캐릭터당 한 행. +로 행 추가. 각 행은 고유한 프롬프트, 리그, 시드, 타겟을 가집니다. |
| Target | 캐릭터가 걸어갈 콘. 옆의 +로 생성합니다. 타겟이 없는 행은 프롬프트대로만 움직입니다. |
| Start Live / Stop | 모든 행의 실시간 조종을 동시에 시작하거나 종료합니다. Esc도 정지합니다. |
| Stop After | 설정한 초 후 자동 종료. 0은 수동 정지 전까지 계속 실행합니다. |
| Face Target Direction | 콘의 회전이 방향을 제어하여 캐릭터가 옆으로 걷거나 뒤로 걷거나 무언가를 바라보며 돌 수 있습니다. |
| Bake / Discard | 보유한 테이크를 실제 Action으로 쓰거나 삭제합니다. |
4. Retarget — 내 캐릭터에 모션 적용

| 항목 | 설명 |
|---|---|
| Source | 모션이 담긴 리그. 보통 생성된 리그를 그대로 사용합니다. |
| Target | 내 캐릭터의 아마튜어. |
| Rig Type | 타겟의 명명 규칙 (UE5, Fortnite, Mixamo, Rigify, SMPL-X…). Auto-Detect가 보통 맞게 감지합니다. |
| Auto-Align Rest Pose | 먼저 타겟의 사지를 소스의 레스트 포즈에 맞추어 A포즈 캐릭터가 이상하게 보이지 않게 합니다. |
| Auto Scale Motion | 타겟의 키에 맞게 이동 거리를 스케일합니다. |
| Match Floor Contact | 매 프레임마다 타겟을 올리거나 낮춰 발이 바닥에 닿게 합니다. |
| Retarget | 복사를 실행합니다. |
| Share With Characters | 여러 캐릭터에 한 번에 각 테이크를 복사합니다 (아래 참조). |
5. Send to Cascadeur — 모션 전달

항상 표시되며, 올바른 항목이 선택될 때까지 숨기지 않고 필요한 것을 안내합니다.
| 항목 | 설명 |
|---|---|
| Send | Character and Bones는 리그 자체(본, 메쉬, 애니메이션)를 Cascadeur가 열 수 있는 씬으로 전송합니다. Keyframes Only는 Cascadeur에 이미 있는 캐릭터에 모션을 적용합니다. |
| Rig Type | 키프레임 모드 전용. 리그의 명명 규칙으로 본을 Cascadeur에 매칭합니다. 자동 감지되며, 틀린 경우 수동 설정합니다. |
| With Mesh | 캐릭터 모드 전용. 리그에 바인딩된 메쉬를 포함합니다. |
| Unify Skeleton | 캐릭터 모드 전용. 리그의 내부 파트 대신 단일 스켈레톤으로 전송하여 모자, 파우치, 무기가 함께 도착합니다. 켜두세요. 리그는 수정되지 않습니다. |
| Fill Rig Mode | 이 리그의 조인트로 Cascadeur의 Quick Rigging Tool을 채워 Rig Mode가 이름으로 추측할 필요가 없게 합니다. |
| Send Frame Range | 씬의 프레임 범위를 한 번에 전송합니다. |
| Current Frame | 현재 보고 있는 포즈만 전송합니다. |
| ⓘ | Cascadeur가 받은 프레임 수를 확인합니다. |
순서에 대한 자세한 내용은 Cascadeur로 전송하기를 참조하세요.
소스 리그와 타겟 리그
- 소스 리그 = MotionForge가 만들어 애니메이션하는 아마튜어. 리깅할 필요 없이 모델이 스켈레톤을 이미 알고 있습니다.
- 타겟 리그 = 모션을 적용할 다른 아마튜어. 언리얼 엔진 마네킹, Mixamo 캐릭터, Rigify 리그, SMPL-X 바디 등 프리셋 중 하나와 일치하고 합리적으로 이름 붙여진 본이 있으면 됩니다.
흐름은 항상 같습니다: 소스에서 생성 → 타겟으로 리타겟.
초보자를 위한 전체 순서
- 설치 및 연결 (위의 초기 설정 참조). Ready 상태가 될 때까지 기다립니다.
- Create Rig — 버튼을 누릅니다. 아마튜어가 나타납니다.
+로 테이크를 추가하고, 원하는 내용을 입력한 뒤 Generate Take를 누릅니다.- 타임라인을 스크럽하여 확인합니다. 리그가 움직입니다.
- 내 캐릭터에 적용하려면: Retarget을 열고 캐릭터를 Target으로 선택하고 Rig Type을 선택한 뒤 Retarget을 누릅니다.
- 특정 순간을 조종하거나 고정하려면 웨이포인트 또는 포즈 키를 추가하고 다시 생성합니다.
이것이 전체 과정입니다. 이 가이드의 나머지는 이 여섯 단계를 더 좋게 만드는 내용입니다.
용어집
| 용어 | 의미 |
|---|---|
| Action | 애니메이션 클립에 대한 Blender의 명칭. 각 테이크에는 고유한 Action이 있습니다. |
| Take | 하나의 샷: 고유한 프롬프트, 길이, Action을 가집니다. |
| 소스 리그 | 생성된 애니메이션을 보유하는 MotionForge 빌드 아마튜어. |
| 타겟 리그 | 모션을 받는 내 캐릭터의 아마튜어. |
| 리타겟 | 소스 리그에서 타겟 리그로 애니메이션을 복사하는 것. |
| Waypoint | "이 프레임에서 이 위치에 있어라." |
| Pose key | "이 프레임에서 이 모습을 취해라." |
| 공유 인코더 | 한 번 로드되어 공유되는 텍스트 처리 모델로, 연결이 빠릅니다. |
| Foot skating | 발이 지면에 고정되어야 할 때 미끄러지는 현상. |
첫 번째 애니메이션
ARDY 연결. 처음에는 수 GB를 다운로드합니다. Ready 상태가 될 때까지 기다리세요.
Create Rig. 아마튜어가 나타납니다 — 모델이 애니메이션할 스켈레톤입니다.
+를 누르고, 원하는 내용을 입력하고, Generate Take를 누릅니다.
a person walks forward
a person sits down on a chair
a person waves with the right hand
a person jumps over something
평문 문장이 가장 잘 작동합니다. 모델이 "a person"으로 학습되었으므로 그렇게 시작하세요. 몇 초 후 리그에 애니메이션이 적용되어 타임라인을 스크럽할 수 있습니다.
테이크
테이크는 하나의 샷으로, 고유한 프롬프트, 길이, Action을 가집니다.
☑ a person walks forward 100f ▶
☑ a person sits down 60f ▶
☐ a person waves ○
+와−로 테이크를 추가하고 제거합니다- 체크박스는 Generate All에 포함할지 결정합니다
▶는 해당 테이크의 애니메이션을 리그에 다시 적용합니다○는 아직 생성되지 않았음을 의미합니다
Generate Take는 선택된 것을 생성합니다. Generate All은 체크된 모든 것을 생성합니다.
테이크 연결
테이크의 🔗를 체크하면 위 테이크가 끝난 위치, 방향, 포즈에서 정확히 시작합니다. 여러 개를 연결하면 Generate All이 별도의 지시로 구성된 하나의 연속 퍼포먼스를 만들어줍니다.
첫 번째 테이크는 앞에 아무것도 없으므로 연결할 수 없습니다.
조종하기
웨이포인트 — 이 시간에 여기를 지나가라
3D 커서를 이동하고, +를 누르고, 프레임을 설정합니다. 캐릭터는 해당 프레임에 그 위치에 있게 됩니다. 경로를 위해 여러 개를 추가합니다.
Face Waypoint Direction을 켜면 엠프티의 초록 화살표가 캐릭터가 그곳에 도착했을 때 바라볼 방향도 결정합니다.
포즈 키 — 이 프레임에서 이 모습을 취해라
원하는 프레임으로 이동하고, +를 누른 뒤 포즈를 잡습니다.
각 키는 고유한 리그 — 생성된 것의 사본으로 cskel27_001, cskel27_002 등으로 명명됩니다 — 를 가지며, +를 누르면 해당 리그의 포즈 모드로 바로 들어갑니다. 애니메이션 리그가 아닌 그 사본을 포즈를 잡으세요. 자체 애니메이션이 없으므로 포즈가 얼마나 스크럽해도 유지됩니다.
원하는 만큼 추가하세요: 30프레임, 60프레임, 100프레임. Generate를 누르면 테이크가 모든 포즈를 순서대로 A→B→C로 통과하도록 만들어집니다.
- Whole Body는 모든 조인트를 고정합니다. 해당 프레임은 포즈 잡은 모습 그대로 나옵니다.
- Parts는 체크한 손과 발만 고정하고, 모델이 나머지 몸을 자유롭게 만들게 합니다.
자유롭게 혼합하세요: 첫 프레임은 완전히 고정하고, 나중에는 손 하나만 고정하는 식으로.
IK On을 켜면 선택된 키의 리그에 손발 핸들이 생겨 27개 본을 회전시키는 대신 드래그로 포즈를 잡을 수 있습니다.
- 손발의 파란 큐브 — 드래그하면 사지가 따라옵니다.
- 팔꿈치와 무릎의 노란 피라미드 — 폴 타겟입니다. 이동하여 관절이 굽는 방향을 지정합니다.
- IK Off는 IK가 보여주는 것을 본에 베이크하고 핸들을 제거합니다. 포즈가 보이던 그대로 유지됩니다.
IK를 켜도 포즈가 이동하지 않습니다: 핸들은 사지가 이미 있는 위치에 만들어지고, 각 폴 각도는 이미 포즈가 가진 굽힘에서 측정됩니다. IK를 켰을 때 사지가 튀면 그건 버그입니다.
포즈는 +를 누를 때가 아닌 Generate를 누를 때 읽힙니다. 따라서 포즈를 수정하고 다시 Generate하면 됩니다. 패널의 Pose \<name>은 해당 키의 프레임으로 돌아가 편집을 위해 리그를 선택합니다. 키를 삭제하면 해당 리그도 함께 삭제됩니다.
포즈 리그를 이동하면 루트 위치가 포즈의 일부이므로 해당 프레임에서 캐릭터가 있을 위치가 바뀝니다. 의도하지 않았다면 그대로 두세요.
"Reduce Foot Skating"을 켜두세요. 이것이 모션을 웨이포인트와 포즈 키에 정확히 맞추는 단계이기도 합니다. 끄면 이들은 단순 참고 사항이 됩니다.
Live Path — 재생 중 실시간 조종
가장 재미있는 기능입니다.
- Live Path를 열고 +를 누릅니다. 행이 나타나면 프롬프트를 입력하고 구동할 리그를 선택합니다.
- Target 옆의 +를 누릅니다. 콘이 나타납니다 — 콘의 끝부분이 캐릭터가 향할 방향입니다.
- Start Live를 누릅니다. 캐릭터가 움직이기 시작합니다.
- 콘을 드래그합니다. 캐릭터가 콘을 향해 걸어갑니다.
Esc 또는 Stop으로 종료합니다. Bake를 누르기 전까지는 키프레임이 저장되지 않습니다.
콘을 드래그하는 대신 애니메이션으로 만드세요. 키프레임을 적용하거나, 커브에 페어런트하거나, 원하는 방식으로 구동하면 됩니다 — MotionForge는 모션이 더 필요할 때마다 콘의 현재 위치를 읽습니다. 이를 통해 다른 프롬프트나 시드로 재실행할 수 있는 반복 가능한 경로와 타이밍에 대한 정밀한 제어가 가능합니다.
Face Target Direction을 체크하면 콘의 회전이 방향도 제어하여 캐릭터가 뒤로 걷거나, 옆으로 걷거나, 무언가를 바라보며 원을 그릴 수 있습니다.
여러 캐릭터 동시 조종. 캐릭터당 행을 추가하고 Start Live를 한 번만 누릅니다. 각 캐릭터는 자신의 콘을 향해, 자신의 프롬프트로 걸어갑니다. 타겟은 세계 좌표가 아닌 해당 리그가 서 있는 위치를 기준으로 읽힙니다.
Stop After는 설정한 초 후에 자동으로 종료합니다. 0으로 두면 멈출 때까지 계속 실행되며, 숨겨진 한계가 없고 테이크가 늘어남에 따라 앞의 공간도 늘어납니다.
예상되는 동작
- 조종 반응이 약 2초 후에 나타납니다. 지금 보고 있는 것은 이미 결정된 것입니다. Core, short horizon 모델은 0.4초 만에 반응하지만 품질이 다소 낮습니다.
- 콘을 캐릭터보다 한 걸음 정도 앞에 두세요. 너무 멀리 두면 캐릭터가 달리고, 급격히 이동하면 발이 엉킵니다.
- Live는 발 미끄러짐 보정 단계를 건너뜁니다. 라이브 경로가 정확히 원하는 결과라면 더 깔끔한 결과를 위해 웨이포인트로 다시 빌드하세요.
따라잡지 못할 경우, 패널에서 시간이 어디서 소요되는지 표시됩니다.
12.4s generated, 1.8s ahead
gen 130 + hold 0 of 2000 ms
마지막 숫자는 하나의 윈도우가 재생되는 시간입니다. 처음 두 숫자의 합이 그보다 작으면 루프가 앞서 가고 있는 것입니다.
- gen은 생성 시간입니다. RTX 5080에서 캐릭터 한 명은 약 130ms, 네 명은 약 490ms입니다(캐릭터가 순차적으로 생성되기 때문). gen이 수천이면 텍스트 인코더가 그래픽 카드를 점유하고 있는 것입니다 — 아래 텍스트 인코더가 CPU에서 실행되는 이유를 참조하세요.
- hold는 윈도우를 메모리에 유지하는 비용으로, 사실상 0입니다.
MotionForge는 사이클이 길어지면 더 미리 생성하므로 캐릭터가 늘어나도 버벅거리지 않습니다. 필요할 때만 추가 공간을 요청하는데, 너무 미리 생성하면 콘 드래그 반응이 느려지기 때문입니다.
Bake
Live는 실행 중 키프레임을 쓰지 않습니다. 키프레임 저장은 모든 윈도우의 모든 프레임마다 뷰포트를 다시 그려야 하므로(실제 에디터에서 2000ms 예산 중 658ms) 테이크는 대신 메모리에 유지되고 루프가 원활하게 유지됩니다.
멈추면 패널에 대기 중인 초 수가 표시되고 Bake 버튼이 전체 테이크를 한 번에 씁니다. 대기 중인 것이 있으면 항상 표시되므로 원하는 만큼 생성하고 나중에 결정할 수 있습니다. Bake를 누르기 전까지 리그는 이동하지 않습니다. Discard는 테이크를 삭제합니다.
로드맵: SMPL-X 바디
MotionForge는 모션을 만들지만 바디가 없습니다. SMPL-X는 반대입니다 — 파라메트릭 인체 모델(10개 형태 숫자, 55개 조인트)과 변형 연구를 결합한 것입니다. Meshcapade의 Blender 애드온은 Blender에서 이를 빌드하고, Perceiving Systems의 Unreal 플러그인은 포즈 교정 블렌드 셰이프를 프레임마다 베이크하는 대신 런타임에 계산합니다. 이것이 잘 맞는 이유입니다: 녹화된 모션과 마찬가지로 생성 및 스트리밍된 모션도 베이크 단계 없이 작동합니다.
네 단계(구축 순서대로):
| # | 단계 | 상태 |
|---|---|---|
| 1 | SMPL-X / SMPL-H로 리타겟 — Retarget 패널에서 다른 리그처럼 바디 선택 | 완료 |
| 2 | .smpl / .npz 내보내기 — AMASS, BEDLAM, Meshcapade 도구를 위한 포즈 파라미터 자체 |
완료 |
| 3 | 언리얼 라이브 링크 — 생성 중 테이크를 UE로 스트리밍, 교정 실시간 계산 | UE에서 스트림 확인됨 |
| 4 | 형태 인식 리타겟 — 바디 체형에 맞게 모션 교정 | 완료 |
순서는 의도적입니다. 1단계는 UE5, Fortnite, Mixamo, Rigify에서 이미 작동하는 리타겟 엔진을 재사용하므로 가장 적은 새 기계로 가장 많은 결과를 냅니다. 2단계는 1단계가 조인트 매핑을 정의하면 작은 쓰기 작업입니다. 3단계가 가장 가치 있는 것 — 텍스트 프롬프트로 언리얼에서 실사 캐릭터를 조종하며 아무것도 베이크하지 않음 — 이지만 1단계와 2단계가 필요합니다.
3단계: 모션 스트림
Live Path에서 Stream to Unreal을 켜면 각 윈도우가 생성되는 즉시 포트에서 대기 중인 모든 수신자에게 TCP로 전송됩니다. 한 줄에 하나의 JSON 객체이므로 수신자는 소켓과 json.loads만 있으면 됩니다.
{"type":"hello","protocol":1,"skeleton":"cskel27",
"joints":["Hips",...],"parents":[null,0,...],
"rest":[[x,y,z],...],"fps":20.0,"up":"y"}
{"type":"frame","index":0,"time":0.0,
"translation":[x,y,z],"pose":[[rx,ry,rz],...]}
pose는 레스트 포즈를 기준으로 한 joints 순서의 조인트당 하나의 축-각도 회전으로, 순방향 기구학을 실행하기에 충분합니다. Y가 위쪽입니다. 늦게 접속한 수신자는 헬로와 이후 내용을 받습니다. 연결이 끊긴 수신자는 생성을 방해하지 않고 제거됩니다.
언리얼 플러그인
MotionForgeLiveLink는 MetaHuman_FAB58 프로젝트의 Plugins 폴더에 있습니다. Live Link의 Add Source 목록에 MotionForge를 추가합니다: 127.0.0.1:9560을 입력하면 Blender가 생성하는 동안 테이크가 애니메이션 서브젝트로 나타납니다.
4단계: 같은 바닥에 서기
Match Floor Contact가 각 프레임마다 타겟을 올리거나 낮춰 가장 낮은 조인트가 소스와 같은 위치에 오게 합니다. 지면에 닿는 발은 바닥에 착지하고, 점프는 여전히 점프입니다.
하나의 테이크, 여러 캐릭터
생성 전에 캐릭터를 설정하면 모든 테이크가 한 번에 모두에게 적용됩니다.
Retarget 패널의 Share With Characters 아래에서: 캐릭터를 선택하고, +를 누르고, Auto가 틀린 경우 리그 타입을 선택합니다. 두세 개를 추가합니다. 이후 Generate(라이브 테이크 후에는 Bake)하면 모든 캐릭터에 모션이 복사됩니다.
내 캐릭터에 모션 적용하기
Retarget을 열고, Target에서 아마튜어를 선택하고, 계열을 선택한 뒤(UE5, Fortnite, MetaHuman, Mixamo, Rigify, TF2 Trifecta, SMPL-X…) Retarget을 누릅니다. Auto-Detect가 보통 자동으로 정확하게 감지합니다.
Cascadeur로 전송하기
여기서 만든 모션을 Cascadeur의 캐릭터로 바로 보낼 수 있습니다. FBX를 수동으로 내보내거나 가져오기 대화상자가 필요 없습니다.
먼저 Cascadeur 측을 켜세요. Cascadeur에서: Animation Scripts → Receive Poses (Blender). 127.0.0.1:9564에서 수신 대기를 시작합니다. 다시 실행하면 중지됩니다. Cascadeur 플러그인이 설치되어 있어야 합니다.
순서가 중요합니다
- Send Character — 이 리그, 메쉬, 애니메이션을 전송합니다. Cascadeur가 자체 탭에서 엽니다.
- Send Frame Range (Keyframes Only) — 이제 거기 있는 캐릭터에 새 모션을 전송합니다.
순서를 바꾸면 키프레임이 적용될 곳이 없습니다.
Cascadeur를 재시작한 후 캐릭터를 다시 보내세요. 캐릭터가 도착하면 Cascadeur는 모든 조인트가 들어온 방향을 기록하고, 키프레임은 그 기록을 기준으로 측정됩니다. Cascadeur를 재시작하면 그 기록이 사라져 이후 전송된 키프레임이 잘못된 방향이 됩니다.
돌아오기
Receive from Cascadeur는 작업을 돌려받습니다. 먼저 받을 아마튜어를 선택하세요.
Animation Only는 이미 있는 리그에 키프레임을 적용합니다. Mesh + Animation은 캐릭터를 새 오브젝트로 가져옵니다.
타이밍
| 타이밍 | 결과 |
|---|---|
| Match Timing | 전송 속도 그대로 돌아옵니다. |
| Fit Scene Range | 이 씬의 프레임 범위에 맞게 늘어납니다. |
| One For One | Cascadeur 프레임 하나가 Blender 프레임 하나가 됩니다. |
알아두면 좋은 설정
| 설정 | 설명 |
|---|---|
| Seed | -1은 매번 새 결과. 고정하면 동일한 모션이 반복됩니다. |
| Duration | 이 테이크의 길이. |
| Reduce Foot Skating | 미끄러지는 발을 정리하고 웨이포인트와 포즈 키를 강제 적용합니다. 켜두세요. |
| Denoising Steps | 0은 모델 기본값 사용. 적을수록 빠르고 거칩니다. |
| Prompt Strength | 텍스트를 얼마나 강하게 따를지. |
| Constraint Strength | 웨이포인트와 포즈를 얼마나 강하게 따를지. |
모델
| 모델 | 용도 |
|---|---|
| Core (27 joints) | 모든 용도. 기본값입니다. |
| Core, short horizon | 빠른 반응이 필요한 라이브 조종. |
| Unitree G1 | 휴머노이드 로봇. MuJoCo qpos CSV 내보내기 추가. |
| SOMA | NVIDIA가 아직 미공개. 연결 시 실패합니다. |
공유 텍스트 인코더
프롬프트를 읽는 데 14GB 언어 모델이 필요합니다. 한 번 로드되어 별도 프로세스에서 유지되므로 연결이 약 5초 걸립니다. Connect가 처음 실행 시 자동으로 시작합니다. 작업하는 동안 켜두세요. Stop으로 메모리를 해제합니다.
텍스트 인코더가 CPU에서 실행되는 이유
두 모델이 관여하며 매우 다른 요구사항을 가집니다.
| 역할 | 빈도 | |
|---|---|---|
| 텍스트 인코더, 14GB | 프롬프트를 숫자로 변환 | 테이크 시작 시 한 번 |
| 모션 모델, ~1GB | 실제 움직임 생성 | 모든 윈도우, 실행 내내 |
16GB 카드에서는 둘 다 들어가지 않습니다. RTX 5080에서 측정한 결과:
| 윈도우 하나 | 인코더 GPU | 인코더 CPU |
|---|---|---|
| 캐릭터 한 명 | 2059 ms | 131 ms |
| 타겟을 따르는 캐릭터 한 명 | 8084 ms | 140 ms |
| 캐릭터 네 명 | 36829 ms | 490 ms |
Text Encoder On 옵션:
| Auto | 카드를 측정합니다. 20GB 미만이면 CPU에 올립니다. 기본값이며 거의 모든 경우에 맞습니다. |
| CPU | 항상 CPU. |
| GPU | 항상 카드. 24GB 이상에서 합리적입니다. 테이크당 프롬프트 읽기가 약간 빠릅니다(1.6초 대신 0.8초). |
브라우저에서 사용하기
start_web.bat은 http://localhost:2333에서 NVIDIA의 대화형 데모를 엽니다. 타임라인 방식으로 Blender 없이 작업하는 또 다른 방법입니다.
한 번에 하나만 실행하세요. 데모는 14GB 텍스트 인코더의 자체 사본을 로드하므로 16GB 카드에서는 다른 것을 위한 공간이 남지 않습니다. 시작하기 전에 Blender에서 연결을 끊고 공유 인코더를 중지하세요.
문제 해결
"ARDY is still loading the model" — 엔진이 준비되기 전에 시작됩니다. Ready 상태가 될 때까지 기다리세요.
"This bridge was started without a text encoder" — Skip Text Encoder가 체크되어 있습니다. 체크를 해제하고 다시 연결하세요.
연결이 바로 실패 — 애드온 환경 설정의 ARDY Python이 실제 .venv\Scripts\python.exe를 가리키는지 확인하세요.
캐릭터가 제자리걸음 — 모델의 특성이며 버그가 아닙니다. 일부 시드는 거의 이동하지 않는 걸음을 생성합니다. 시드를 변경하거나 의도를 명확히 하세요: "a person runs forward quickly".
포즈 키가 무시되는 것 같음 — Reduce Foot Skating이 켜져 있는지 확인하세요. G1 로봇은 이 단계를 완전히 건너뛰므로 포즈가 안내만 합니다.
리타겟이 이상하게 보임 — Target 아래의 계열이 선택한 리그와 일치하는지 확인하세요.
"Cascadeur is not listening on 127.0.0.1:9564" — Cascadeur 측이 꺼져 있습니다. Cascadeur에서: Animation Scripts → Receive Poses (Blender).
키프레임이 도착하지만 캐릭터가 잘못된 방향 — 캐릭터를 전송한 후 Cascadeur가 재시작되었습니다. Send Character를 다시 누른 뒤 키프레임을 전송하세요.
키프레임이 전송되지 않고 이유도 없음 — 전송된 조인트 이름이 Cascadeur에 열려 있는 것과 맞지 않습니다. 버튼 위의 줄에서 얼마나 많은 본이 매칭되었는지 확인하세요.
Live가 버벅거리거나 한 윈도우가 수초 걸림 — Live 패널 두 번째 줄 gen X + hold Y of 2000 ms를 읽어보세요. gen이 수천이면 텍스트 인코더가 그래픽 카드에 있는 것입니다. Text Encoder On을 Auto 또는 CPU로 설정하고 다시 연결하세요.
Windows가 메모리 부족을 경고하거나 연결 중 Python이 충돌 — 14GB 텍스트 인코더의 두 사본이 동시에 로드되어 있습니다. Stop을 누르고, MotionForge를 실행 중인 다른 Blender를 닫은 뒤 다시 연결하세요.
그 외의 문제는 Blender 시스템 콘솔(Window ▸ Toggle System Console)에서 엔진 자체 메시지를 확인하세요.