MotionForge

🇺🇸 English | 🇰🇷 한국어

캐릭터가 무엇을 해야 하는지 입력하세요. Blender에서 애니메이션을 받아보세요.

MotionForge는 NVIDIA의 ARDY 모션 모델을 Blender 옆에서 실행하고, 결과를 일반 리그처럼 편집할 수 있는 키프레임으로 변환합니다. 캐릭터를 실시간으로 조종하거나, 반드시 거쳐야 할 포즈를 고정하거나, 모션을 내 캐릭터에 옮기거나, Cascadeur로 바로 전송할 수도 있습니다.

0.5.0 새 기능

새로 추가

MotionBricks 캐릭터가 사람처럼 서 있음 - 새 MotionBricks 캐릭터가 로봇의 기본 자세 대신 idle 스타일처럼 팔을 내리고 서 있습니다.

변환한 스타일이 원본 클립을 따라감 - Import FBX / BVH가 Speed를 클립이 원래 움직인 속도로 채우고, 생성 길이를 모두 허용합니다. - 씬에 이미 있는 아마추어를 Source로 골라도 Speed가 똑같이 채워집니다. 제자리 댄스는 제자리에서 춥니다. - 그 스타일로 걷는 캐릭터가 클립의 앞 몇 프레임만 맴돌지 않고 클립을 순서대로 따라갑니다. - 원본과 프레임 단위로 비교해서, 비틀거리며 걷기는 18 cm에서 13 cm로, 제자리 도발 동작은 15 cm에서 8 cm로 가까워졌고 이제 제자리에 머뭅니다.

FBX / BVH 파일이 MotionBricks 스타일이 됩니다 - MotionBricks 패널의 Import FBX / BVH로 모캡이나 애니메이션 파일을 씬으로 가져오면 컨버터가 그 리그를 가리킵니다. Convert to Style을 누르면 클립이 MotionBricks가 걷는 스켈레톤으로 옮겨져 파일로 저장됩니다. - MotionBricks 캐릭터를 먼저 만들 필요도, 변환 뒤에 남는 것도 없습니다. 파일이 들어가고 .mbstyle이 walk 등과 같은 스타일 폴더에 나옵니다. - Rig Type은 그 파일이 뼈를 어떻게 부르는지입니다 - Mixamo, UE4, UE5 Mannequin, Fortnite, MetaHuman, Rigify, metarig, TF2, SMPL-X 등 - Auto-Detect가 이름을 읽으므로 대개는 고를 필요가 없습니다. mixamorig: 접두사가 없는 Mixamo식 이름(CMU 변환본과 대부분의 BVH가 쓰는 이름)도 인식합니다. - BVH는 파일에 적힌 프레임 레이트를 읽어 씬을 그에 맞추고, 어떤 레이트든 런타임의 30 fps로 리타이밍합니다 - 120 fps 테이크가 4배 빠르게 재생되지 않고 길이를 유지합니다. - Style Name, Speed, Allowed Durations는 직접 바꿀 수 있고, 뒤의 둘은 Import가 클립에서 채웁니다. 런타임이 검사할 항목을 파일을 쓰기 전에 모두 검사하므로, 엔진이 거부할 스타일은 이유와 함께 여기서 먼저 거부되고 반쯤 쓰인 파일이 남지 않습니다.

씬에 있는 애니메이션도 스타일로 - 이미 MotionBricks 캐릭터에 올라간 애니메이션은 같은 패널의 Save as Style로 같은 방식으로 저장할 수 있습니다.

바뀐 점

새 스타일이 즉시 나타남 - 변환하거나 저장할 때 스타일 폴더를 다시 읽습니다. 이전에는 엔진이 시작할 때 읽은 목록을 그대로 들고 있어서, 같은 이름으로 다시 저장해도 예전 동작이 남아 있었습니다.

Rig Type에 UE4 추가 - UE4와 UE5 마네퀸은 같은 스켈레톤을 씁니다 - UE5는 IK 뼈만 더했습니다 - 그래서 둘 다 목록에 있고 매핑도 동일합니다.

고친 점

  • Mixamo에서 받은 파일로 변환한 스타일이 캐릭터를 바닥 아래 수십 m로 날려 보내던 문제.
  • 로봇보다 다리가 긴 캐릭터(Fortnite 댄스 등)에서 변환한 스타일이 떠서 위아래로 흔들리던 문제. 이제 발이 바닥에 붙어 있습니다.
  • Convert to Style 뒤의 검사가 스타일 자기 속도로 걷게 해서, 제자리 동작을 "폭주"로 잘못 알리지 않습니다.

없어진 것

  • Pull the Arms Back if Refused - 이 옵션이 살리던 클립들이 이제 팔 동작 그대로 제대로 변환됩니다.

초기 설정 (한 번만)

1. 애드온 설치. Blender에서: Edit ▸ Preferences ▸ Add-ons ▸ Install로 이동해 motionforge 폴더를 선택하고 활성화합니다.

2. 엔진 설치. 같은 애드온 환경 설정에서 Engine Folder를 약 18 GB 여유가 있는 드라이브의 빈 폴더로 지정하고 Install Engines를 누릅니다. MotionBricks, Kimodo, ARDY가 모두 그 폴더 하나에 설치됩니다. 다운로드가 약 18 GB라서 시간이 오래 걸립니다 — 인터넷 속도에 따라 몇 분에서 한 시간 넘게 걸릴 수 있습니다. 같은 패널의 진행률 바에 받는 파일이 차례로 표시되고, 그동안 Blender는 계속 쓸 수 있습니다. 중간에 멈추면 Install Engines를 다시 누르세요. 이미 받은 파일은 그대로 두고 나머지만 받습니다. 끝나면 세 엔진 모두 ready로 표시됩니다. MotionBricks는 Blender 5.2 이상이 필요합니다.

3D 뷰포트에서 N을 누르면 MotionForge 탭이 표시됩니다.


전체 구조 (30초 요약)

MotionForge는 두 부분이 함께 작동합니다.

  • 엔진 — NVIDIA의 ARDY 모델. 문장을 애니메이션 프레임으로 변환합니다.
  • 애드온 — Blender 내에서 실행됩니다. 리그를 만들고, 프레임을 재생하며, 포즈를 조종·고정하고, 결과를 내 캐릭터에 복사합니다.

모든 애니메이션은 먼저 MotionForge가 만든 소스 리그(Create Rig 버튼)에 적용됩니다. 이후 다른 아마튜어(타겟 리그)로 복사하여 내 캐릭터에서 모션을 재생할 수 있습니다.


일곱 개의 패널

3D 뷰포트에서 N을 누르면 오른쪽 사이드바에 MotionForge 탭이 나타납니다. 사용 순서에 따라 일곱 개의 패널이 있습니다.

1. MotionForge — 연결 및 리그 생성

항목 설명
Skip Text Encoder 프롬프트를 읽지 않고 연결합니다. ARDY가 켜지는지 확인할 때만 씁니다.
Connect ARDY 엔진을 로드합니다. 약 1초면 준비됩니다.
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. Kimodo — 내 컴퓨터에서 텍스트로 모션 만들기

컨트롤 기능
캐릭터 목록 씬에 있는 Kimodo 캐릭터가 한 줄씩. 체크박스가 참여 여부를 정하고, 강조된 줄은 지금 편집 중인 캐릭터입니다. 줄마다 77(손가락 있음) 또는 30(손가락 없음)이 표시됩니다.
+ / − 3D 커서 위치에 캐릭터를 추가하거나, 선택한 캐릭터를 목록에서 뺍니다. −는 아마추어까지 지울지 묻습니다.
스포이드 선택한 아마추어에 Kimodo 본이 있으면 목록에 추가합니다.
With a Body 새 캐릭터에 몸 메쉬를 함께 만듭니다.
With Fingers 새 캐릭터에 손가락이 있는 손을 만듭니다. 해제하면 손가락 없는 단순한 스켈레톤이 됩니다.

캐릭터마다 자기 설정을 갖고, 목록 아래에 표시됩니다:

캐릭터별 기능
Prompt 평문 문장. 예: "a person walks forward".
Seed -1은 매번 새 결과, 고정 숫자는 같은 결과를 반복합니다.
공통 기능
Duration 테이크 길이(초).
Denoising Steps 적을수록 빠르고 거칩니다.
Prompt Strength 프롬프트를 얼마나 따를지. 높을수록 문자 그대로지만 덜 자연스럽습니다.
Constraint Strength 그대로 두세요.
Reduce Foot Skating 발이 바닥에 서 있는 동안 미끄러지지 않게 합니다. 기본으로 켜져 있습니다.
Generate Motion 체크된 캐릭터마다 차례로 테이크를 만들고, 끝나는 대로 각자 키프레임을 넣습니다.
상태 줄 지금 만드는 캐릭터, 걸린 시간, GPU인지 CPU인지를 표시합니다.
Export SOMA BVH 선택한 캐릭터의 애니메이션을 NVIDIA SOMA Retargeter용으로 저장합니다. 그 도구가 휴머노이드 로봇 모션으로 바꿉니다.
Reload Engine Kimodo를 내립니다. 다음 테이크에서 다시 불러옵니다.

5. MotionBricks — 입력 없이 걷게 하기

컨트롤 기능
캐릭터 목록 씬에 있는 MotionBricks 캐릭터가 한 줄씩. 체크박스가 참여 여부를 정하고, 강조된 줄은 지금 편집 중인 캐릭터입니다.
+ / − 3D 커서 위치에 캐릭터를 추가하거나, 선택한 캐릭터를 목록에서 뺍니다.
스포이드 선택한 아마추어가 MotionBricks 캐릭터라면 목록에 추가합니다.
With a Body 새 캐릭터에 간단한 몸을 함께 만듭니다. 스켈레톤에 웨이트되어 같이 움직입니다. 걸어다니는 캐릭터를 뼈만으로 보기는 어렵습니다. 체크를 해제하면 뼈만 만듭니다.

캐릭터마다 자기 설정을 갖고, 목록 아래에 표시됩니다:

캐릭터별 기능
Style 이 캐릭터가 움직이는 방식. 걷기, 느리게, 몰래, 겁먹은, 좀비, 복싱, 손·팔꿈치로 기기, 신나는 춤, 절뚝이기, 총 들고 걷기. 목록 줄에도 표시되어 여럿을 한눈에 봅니다.
Go In a Direction은 정한 방향으로 계속 가고, 라이브 중에는 3D 커서를 따라갑니다. To a Target은 커서와 무관하게 자기 오브젝트로 걸어가 멈춥니다.
Heading 방향을 골랐을 때 이 캐릭터가 걸을 방향.
Target 이 캐릭터가 걸어갈 오브젝트. 옆의 +로 만듭니다. 오브젝트를 돌려두면 도착했을 때 그쪽을 봅니다.
Speed 초당 미터. 0으로 두면 스타일 고유의 속도를 씁니다. Idle처럼 고유 속도가 없는 스타일은 제자리에 섭니다.
Seed 발걸음이 시작되는 지점을 바꿉니다. 걸음이 어색하면 다른 숫자를 넣어보세요.
공통 기능
Duration 체크된 모든 캐릭터에 대해 만들 길이(초).
Reduce Foot Skating 발이 바닥에 서 있는 동안 미끄러지지 않게 합니다. 기본으로 켜져 있습니다.
Continue 직전 결과가 끝난 지점부터 같은 애니메이션에 이어 붙입니다.
Generate Motion 체크된 캐릭터 전부를 한 번에 생성합니다. 바로 걷기 시작하며 아직 키프레임은 만들지 않습니다.
Bake 지금 보고 있는 것을 전부 키프레임으로 씁니다.
Discard 대신 버립니다.
Steer With 라이브 조종 방식: 3D Cursor(아무 곳이나 Shift+우클릭하면 그쪽을 보며 걸어갑니다) 또는 Target Object(각자 자기 오브젝트로).
Move Characters Too 아래 Share With Characters의 캐릭터들이 함께 걷습니다. 포즈만 잡고 키프레임은 만들지 않습니다.
Lead 미리 계획해 둘 프레임 수. 높이면 느린 프레임을 넘기고, 낮추면 조작에 더 빨리 반응합니다.
Start Live 바로 걷기 시작하고, 걷는 동안 조종합니다. Esc로 정지.

6. 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 여러 캐릭터에 한 번에 각 테이크를 복사합니다 (아래 참조).

7. Send to Cascadeur — 모션 전달

항상 표시되며, 올바른 항목이 선택될 때까지 숨기지 않고 필요한 것을 안내합니다.

항목 설명
Live: Mirror This Rig 여기서 포즈하거나 Cascadeur에서 포즈하면 반대쪽이 실시간으로 따라옵니다. 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로 전송하기를 참조하세요.


Kimodo

모션을 만드는 세 번째 방법입니다. Text to Motion처럼 캐릭터가 할 행동을 입력하지만, Kimodo는 설치 콘솔도 먼저 연결할 것도 없이 혼자 실행됩니다.

테이크 만들기

  1. Kimodo 패널을 엽니다.
  2. +를 누릅니다. 3D 커서 위치에 캐릭터가 생깁니다.
  3. 목록 아래 Prompt를 입력합니다 — "a person walks forward"로 시작하세요.
  4. Duration을 정하고 Generate Motion을 누릅니다.

테이크는 시간이 좀 걸립니다 — GPU보다 CPU에서 더 오래 걸립니다. 그동안 Blender는 계속 쓸 수 있고 상태 줄에 초가 올라갑니다. 끝나면 캐릭터에 이미 키프레임이 들어가 있으니 재생하면 됩니다. Esc는 기다리기만 멈추고, 이미 돌고 있는 테이크는 중단되지 않습니다.

+를 먼저 누르지 않았다면 Generate Motion이 캐릭터를 만들어 줍니다.

여러 캐릭터

각각 +를 누르고 줄마다 Prompt와 Seed를 따로 정하세요. Generate Motion이 차례로 만들고, 각 캐릭터는 자기 테이크가 끝나는 대로 모션이 들어갑니다. 체크를 해제한 캐릭터는 빠집니다.

휴머노이드 로봇으로 보내기

Export SOMA BVH는 캐릭터의 애니메이션을 BVH 파일로 저장합니다. NVIDIA의 SOMA Retargeter가 이 파일을 읽어 Unitree G1과 H2, Booster T1, AgiBot X2와 A3의 관절 애니메이션으로 바꾸고, 로봇 제어·시뮬레이션 도구가 쓰는 CSV로 내보냅니다.

파일에는 지금 캐릭터가 하는 동작이 그대로 들어가므로, Blender에서 수정한 내용도 함께 갑니다. 리타게터는 따로 설치하세요. 별개의 프로젝트이고, 실행에 이 애드온은 필요 없습니다.

내 캐릭터에 옮기기

Retarget 패널은 Text to Motion과 똑같이 작동합니다. 마지막에 추가한 캐릭터가 이미 소스로 지정되어 있습니다.

Cascadeur로 보내기

Send to Cascadeur에서 Character and Bones를 고르고, Fill Rig Mode를 켠 채로 Send Frame Range를 누릅니다. Cascadeur에서 캐릭터가 열리고 Quick Rigging Tool이 손가락까지 채워집니다.

Quick Rigging Tool은 조금 기다렸다가 여세요. 캐릭터가 Cascadeur에 나타나고 약 30~40초 뒤에 관절이 채워집니다. 그때까지 Send 패널에 Quick Rig: waiting for Cascadeur to settle이, 끝나면 Quick Rig: … registered as SOMA (Kimodo)가 표시됩니다. 너무 일찍 열면 다리, 목, 척추가 군데군데 비어 보입니다.

Live: Mirror This Rig도 타임라인까지 양방향으로 작동합니다.

MotionBricks

캐릭터를 움직이는 다른 방법입니다. Text to Motion은 문장을 받고, 이쪽은 스타일과 방향을 받습니다. 다섯 번 시도해도 부담이 없을 만큼 빠릅니다.

걷게 하기

  1. MotionBricks 패널을 엽니다.
  2. Style을 고릅니다 — Walk로 시작하세요.
  3. Duration을 정하고 Generate Motion을 누릅니다.
  4. 재생해 보고, 마음에 들면 Bake를 누릅니다.

캐릭터가 없었다면 하나 생기고(뼈대 위에 몸이 덮인 채로), 바로 걷습니다. Generate Motion은 키프레임을 쓰지 않기 때문에 열 번을 시도해도 부담이 거의 없습니다. 마음에 든 것만 Bake로 키프레임으로 만들고, 아니면 Discard로 버립니다. 굽기 전까지는 Blender의 다른 기능이 이 모션을 보지 못하므로, 리타겟과 내보내기는 그 다음입니다.

어딘가로 보내기

  1. Go를 To a Target으로 바꾸고 +를 누릅니다.
  2. 캐릭터가 도착할 자리로 표식을 옮깁니다.
  3. 도착했을 때 바라볼 방향으로 표식의 화살표를 돌립니다.
  4. Generate Motion, 그리고 Bake.

걸어가서, 도착하며 속도를 줄이고, 화살표 쪽을 보고 멈춰 섭니다. 필요한 것보다 넉넉하게 초를 주세요 — 도착해서 서 있는 건 아무 문제가 없지만, 초가 모자라면 가는 도중에 끊깁니다.

계속 이어가기

Continue를 켜고 Generate Motion을 다시 누릅니다. 구웠든 안 구웠든 이미 있는 것에 이어 붙으므로, 긴 연기를 몇 초씩 쌓아 올린 다음 마지막에 한 번만 구울 수 있습니다. 먼저 스타일이나 표식을 바꾸면 캐릭터가 가는 도중에 하는 행동이 바뀌고, 이음새는 보이지 않습니다.

여러 캐릭터

각각 +를 누르고 줄마다 Style을 지정하세요. 라이브든 생성이든 전부 동시에 움직입니다 — 하나는 걷고, 하나는 가만히 있고, 하나는 기어가고, 각자 자기 속도로.

줄의 체크를 해제하면 그 캐릭터는 빠집니다. 가진 것은 그대로 두고 다음 Generate Motion이나 Start Live에만 참여하지 않습니다. 다시 체크하면 다시 움직입니다.

라이브 중에는 In a Direction인 캐릭터가 3D 커서를 따라가고, To a Target인 캐릭터는 자기 오브젝트로 갑니다. 그래서 한 번의 클릭으로 대부분을 어딘가로 보내면서 몇몇은 자기 볼일을 보게 할 수 있습니다. Idle처럼 고유 속도가 없는 스타일은 끌려가지 않고 제자리에 섭니다.

씬에서 캐릭터를 삭제하면 줄도 함께 사라집니다.

걷는 동안 조종하기

Generate Motion은 정해진 길이를 한 번에 만듭니다. Start Live는 반대로, 캐릭터가 바로 걷기 시작하고 조종하는 동안 계속 걷습니다.

  1. Live 아래 Steer With를 3D Cursor로 둡니다.
  2. Start Live를 누릅니다.
  3. 뷰포트 아무 곳이나 Shift+우클릭합니다. 캐릭터가 그쪽을 보며 걸어가고, 도착하면 그 자리에서 기다립니다. 다른 곳을 클릭하면 다시 출발합니다.

바닥의 어느 지점인지만 의미가 있습니다. 벽이나 소품을 클릭해도 커서는 바닥에 남아서, 고른 자리가 항상 보입니다. 높이는 Start Live를 누른 순간의 커서 높이를 유지하고, 멈추면 원래대로 돌아갑니다. 4. Esc로 멈춥니다. 마음에 들면 Bake를 누릅니다.

커서가 가장 빠릅니다 — 선택할 것도, 끌 것도 없이 가리키는 곳으로 갑니다. Target Object는 도착했을 때 바라볼 방향까지 정하고 싶을 때 쓰세요. 걸어온 방향이 아니라 오브젝트의 화살표 쪽을 봅니다.

Generate Motion이 쓰는 것과 같은 보관 모션에 이어 붙기 때문에 둘을 한 테이크에서 섞을 수 있습니다 — 라이브로 얼마간 걷다가, 타겟까지 10초를 더 요청하고, 마지막에 한 번에 굽는 식입니다.

걷는 동안 내 캐릭터도 같이

Move Characters Too를 켜두면 Share With Characters에 등록한 캐릭터가 조종하는 동안 함께 걷습니다. 구운 뒤가 아니라 그 자리에서요. 포즈만 잡고 키프레임은 만들지 않으므로 되돌릴 것도 없습니다. 애니메이션은 여전히 Bake와 Retarget이 씁니다.

머리 문제의 답도 이것입니다. MotionBricks 스켈레톤에는 목도 머리도 없지만 내 캐릭터에는 있고, 리타겟은 양쪽이 공유하는 뼈만 건드립니다. 그래서 목과 머리가 없는 로봇에 끌려다니지 않고 내 리그가 두는 자리에 그대로 있습니다.

내 캐릭터에 적용

아래 Retarget 패널이 Text to Motion과 똑같이 동작합니다 — 걸음이 내 캐릭터로 옮겨가고, 체격에 맞게 크기가 조정되고, 발이 바닥에 붙습니다. 머리와 목은 그대로 있습니다. MotionBricks는 몸통과 팔다리를 움직이고 머리에 대해서는 아무것도 말하지 않습니다.

파일에서 스타일 만들기

스타일은 MotionBricks가 무언가를 요청받기 전에 보여주는 짧은 클립이고, 가지고 있는 애니메이션이면 무엇이든 재료가 됩니다:

  1. Import FBX / BVH를 누르고 파일을 고릅니다 - CMU 테이크, Mixamo 다운로드, 게임 엔진 내보내기 등 스켈레톤이 들어 있는 파일이면 됩니다.
  2. Source가 채워지고 Rig Type은 뼈 이름에서 읽습니다. unrecognised라고 나오면 직접 고르세요: Mixamo, UE4, UE5 Mannequin, Fortnite, MetaHuman, Rigify, metarig, TF2, SMPL-X.
  3. Style Name, Speed(이 스타일을 쓸 기준 걷기 속도), Allowed Durations (이 스타일을 쓸 수 있는 생성 길이 개수)를 정합니다. Import가 둘 다 채워 둡니다(Source를 고르면 Speed가 채워집니다): 클립 자기 속도와, 원본을 가장 잘 따라가는 11(전부 허용).
  4. Convert to Style을 누릅니다. 파일은 스타일 폴더에 저장되고 곧바로 Style 목록에 나타납니다.

클립은 런타임의 30 fps로 리타이밍되므로 파일에서의 초 단위 길이가 그대로 유지됩니다. 씬에 미리 준비할 것은 없고, 가져온 리그는 그 자리에 남습니다.

직접 스타일 저장하기

MotionBricks 캐릭터가 이미 하고 있는 동작 - 생성한 테이크, 리타겟한 걸음, 직접 찍은 키 - 도 같은 패널의 Save as Style로 똑같은 방식으로 스타일이 됩니다.

소스 리그와 타겟 리그

  • 소스 리그 = MotionForge가 만들어 애니메이션하는 아마튜어. 리깅할 필요 없이 모델이 스켈레톤을 이미 알고 있습니다.
  • 타겟 리그 = 모션을 적용할 다른 아마튜어. 언리얼 엔진 마네킹, Mixamo 캐릭터, Rigify 리그, SMPL-X 바디 등 프리셋 중 하나와 일치하고 합리적으로 이름 붙여진 본이 있으면 됩니다.

흐름은 항상 같습니다: 소스에서 생성 → 타겟으로 리타겟.


초보자를 위한 전체 순서

  1. 설치 및 연결 (위의 초기 설정 참조). Ready 상태가 될 때까지 기다립니다.
  2. Create Rig — 버튼을 누릅니다. 아마튜어가 나타납니다.
  3. +로 테이크를 추가하고, 원하는 내용을 입력한 뒤 Generate Take를 누릅니다.
  4. 타임라인을 스크럽하여 확인합니다. 리그가 움직입니다.
  5. 내 캐릭터에 적용하려면: Retarget을 열고 캐릭터를 Target으로 선택하고 Rig Type을 선택한 뒤 Retarget을 누릅니다.
  6. 특정 순간을 조종하거나 고정하려면 웨이포인트 또는 포즈 키를 추가하고 다시 생성합니다.

이것이 전체 과정입니다. 이 가이드의 나머지는 이 여섯 단계를 더 좋게 만드는 내용입니다.


용어집

용어 의미
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 — 재생 중 실시간 조종

가장 재미있는 기능입니다.

  1. Live Path를 열고 +를 누릅니다. 행이 나타나면 프롬프트를 입력하고 구동할 리그를 선택합니다.
  2. Target 옆의 +를 누릅니다. 콘이 나타납니다 — 콘의 끝부분이 캐릭터가 향할 방향입니다.
  3. Start Live를 누릅니다. 캐릭터가 움직이기 시작합니다.
  4. 콘을 드래그합니다. 캐릭터가 콘을 향해 걸어갑니다.

Esc 또는 Stop으로 종료합니다. Bake를 누르기 전까지는 키프레임이 저장되지 않습니다.

콘을 드래그하는 대신 애니메이션으로 만드세요. 키프레임을 적용하거나, 커브에 페어런트하거나, 원하는 방식으로 구동하면 됩니다 — MotionForge는 모션이 더 필요할 때마다 콘의 현재 위치를 읽습니다. 이를 통해 다른 프롬프트나 시드로 재실행할 수 있는 반복 가능한 경로와 타이밍에 대한 정밀한 제어가 가능합니다.

Face Target Direction을 체크하면 콘의 회전이 방향도 제어하여 캐릭터가 뒤로 걷거나, 옆으로 걷거나, 무언가를 바라보며 원을 그릴 수 있습니다.

여러 캐릭터 동시 조종. 캐릭터당 행을 추가하고 Start Live를 한 번만 누릅니다. 각 캐릭터는 자신의 콘을 향해, 자신의 프롬프트로 걸어갑니다. 타겟은 세계 좌표가 아닌 해당 리그가 서 있는 위치를 기준으로 읽힙니다.

Stop After는 설정한 초 후에 자동으로 종료합니다. 0으로 두면 멈출 때까지 계속 실행되며, 숨겨진 한계가 없고 테이크가 늘어남에 따라 앞의 공간도 늘어납니다.

예상되는 동작

  • 조종 반응이 약 2초 후에 나타납니다. 지금 보고 있는 것은 이미 결정된 것입니다.
  • 콘을 캐릭터보다 한 걸음 정도 앞에 두세요. 너무 멀리 두면 캐릭터가 달리고, 급격히 이동하면 발이 엉킵니다.
  • Live는 발 미끄러짐 보정 단계를 건너뜁니다. 라이브 경로가 정확히 원하는 결과라면 더 깔끔한 결과를 위해 웨이포인트로 다시 빌드하세요.

따라잡지 못할 경우, 패널에서 시간이 어디서 소요되는지 표시됩니다.

12.4s generated, 1.8s ahead
gen 130 + hold 0 of 2000 ms

마지막 숫자는 하나의 윈도우가 재생되는 시간입니다. 처음 두 숫자의 합이 그보다 작으면 루프가 앞서 가고 있는 것입니다.

  • gen은 생성 시간입니다. RTX 5080에서 캐릭터 한 명은 약 130ms, 네 명은 약 490ms입니다(캐릭터가 순차적으로 생성되기 때문).
  • 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에서 실시간으로 보기

전송 버튼은 완성된 테이크를 넘깁니다. Send to Cascadeur 패널의 Live: Mirror This Rig는 그보다 앞선 단계로, Blender에서 리그를 포즈하면 Cascadeur의 캐릭터가 실시간으로 같이 움직입니다. 이것에는 아무것도 설치되지 않습니다 - 플러그인도, 관리자 권한도 필요 없습니다.

먼저 Cascadeur에서 Receive Poses (Blender)를 실행하세요 - 커맨드 메뉴. 이 패널 전체가 그걸 필요로 하고, Live도 마찬가지입니다. 실행 중이 아니면 아무것도 작동하지 않습니다. 그다음 캐릭터를 한 번 보내고 Live를 누르세요. Live는 Send가 쓰는 것과 같은 본 매핑과 기준 포즈를 그대로 씁니다. 아직 보내지 않은 캐릭터는 Live가 구동할 대상이 없습니다.

어느 방향으로 비출지는 버튼 옆 드롭다운입니다:

  • Follow the Focus - 지금 작업 중인 창 쪽을 포즈하면 반대쪽이 따라옵니다. Cascadeur 쪽을 클릭하면 그때부터는 그쪽이 보내는 쪽이 됩니다.
  • Blender to Cascadeur - 여기서 한 것만 전송됩니다.
  • Cascadeur to Blender - 거기서 한 것만 돌아옵니다.

리그를 얼마나 움직일지는 그 옆 드롭다운입니다: Send가 항상 쓰는 매핑된 본, 또는 전체 스켈레톤(Cascadeur의 캐릭터가 이 리그에서 보낸 바로 그 캐릭터일 때만).

Blender에서 애니메이션을 재생하면 Cascadeur에서도 재생되고, 그만큼 키가 생깁니다. Stop Mirroring을 누르면 세션이 끝나고, 이미 Cascadeur에 도착한 것은 그 자리에 남습니다.

Cascadeur로 전송하기

여기서 만든 모션을 Cascadeur의 캐릭터로 바로 보낼 수 있습니다. FBX를 수동으로 내보내거나 가져오기 대화상자가 필요 없습니다.

먼저 Cascadeur 측을 켜세요. Cascadeur에서: Animation Scripts → Receive Poses (Blender). 127.0.0.1:9564에서 수신 대기를 시작합니다. 다시 실행하면 중지됩니다. Cascadeur 플러그인이 설치되어 있어야 합니다.

순서가 중요합니다

  1. Send Character — 이 리그, 메쉬, 애니메이션을 전송합니다. Cascadeur가 자체 탭에서 엽니다.
  2. 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 웨이포인트와 포즈를 얼마나 강하게 따를지.

문제 해결

"ARDY is still loading the model" — 엔진이 준비되기 전에 시작됩니다. Ready 상태가 될 때까지 기다리세요.

"This bridge was started without a text encoder" — Skip Text Encoder가 체크되어 있습니다. 체크를 해제하고 다시 연결하세요.

연결이 바로 실패 — 애드온 환경 설정을 여세요. ARDY가 ready가 아니면 Install Engines를 누르세요.

캐릭터가 제자리걸음 — 모델의 특성이며 버그가 아닙니다. 일부 시드는 거의 이동하지 않는 걸음을 생성합니다. 시드를 변경하거나 의도를 명확히 하세요: "a person runs forward quickly".

포즈 키가 무시되는 것 같음 — Reduce Foot Skating이 켜져 있는지 확인하세요.

리타겟이 이상하게 보임 — Target 아래의 계열이 선택한 리그와 일치하는지 확인하세요.

"Cascadeur is not listening on 127.0.0.1:9564" — Cascadeur 측이 꺼져 있습니다. Cascadeur에서: Animation Scripts → Receive Poses (Blender).

키프레임이 도착하지만 캐릭터가 잘못된 방향 — 캐릭터를 전송한 후 Cascadeur가 재시작되었습니다. Send Character를 다시 누른 뒤 키프레임을 전송하세요.

키프레임이 전송되지 않고 이유도 없음 — 전송된 조인트 이름이 Cascadeur에 열려 있는 것과 맞지 않습니다. 버튼 위의 줄에서 얼마나 많은 본이 매칭되었는지 확인하세요.

그 외의 문제는 Blender 시스템 콘솔(Window ▸ Toggle System Console)에서 엔진 자체 메시지를 확인하세요.