Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

3D 스켈레톤 리타겟팅

여러 스켈레톤 간에 애니메이션을 공유하려면

Godot에는 뼈대 애니메이션을 위한 뼈에 대한 노드 경로가 있는 위치/회전/크기 조정 3D 트랙(이 문서에서는 "변환" 트랙이라고 함)이 있습니다. 즉, 동일한 본 이름을 사용하는 것만으로는 여러 스켈레톤 간에 애니메이션을 공유할 수 없다는 뜻입니다.

Godot는 각 뼈가 부모-자식 관계를 가질 수 있도록 하며 회전, 크기 및 위치를 가질 수 있습니다. 이는 이름을 공유하는 뼈가 여전히 다른 변환 값을 가질 수 있음을 의미합니다.

스켈레톤은 기본 포즈에 필요한 변환 값을 Bone Rest로 저장합니다. Bone Pose가 Bone Rest와 같다면 Skeleton이 기본 포즈에 있다는 의미입니다.

참고

Godot 3과 Godot 4는 서로 다른 뼈 포즈 동작을 가지고 있습니다. Godot 3에서 Bone Pose는 Bone Rest와 관련이 있지만 Godot 4에서는 Bone Rest를 포함합니다. 자세한 내용은 `기사 <https://godotengine.org/article/animation-data-redesign-40>`__을 참조하세요.

골격 모델은 내보낸 환경에 따라 다른 뼈대를 갖습니다. 예를 들어 Blender에서 출력된 glTF 모델의 뼈에는 뼈 나머지 회전으로 "뼈 방향 편집"이 있습니다. 그러나 Maya의 glTF 모델 출력과 같이 Bone Rest 회전이 없는 골격 모델이 있습니다.

Godot에서 애니메이션을 공유하려면, 경우에 따라 원하지 않는 트랙을 제거하기 위해 Bone Rests와 Bone Names를 일치시켜야 합니다. 씬 임포터를 사용하여 이를 수행할 수 있습니다.

리타겟팅을 위한 옵션

뼈 지도

고급 씬 가져오기 메뉴에서 Skeleton3D 노드를 선택하면 오른쪽에 "대상 변경" 섹션이 포함된 메뉴가 나타납니다. Retarget 섹션에는 단일 속성 ``bone_map``가 있습니다.

../../_images/retargeting1.webp

Skeleton 노드를 선택한 상태에서 먼저 새로운 BoneMap 및 :ref:`class_skeletonprofile`를 설정합니다. Godot에는 휴머노이드 모델을 위한 :ref:`class_skeletonprofilehumanoid`라는 사전 설정이 있습니다. 이 튜토리얼은 :ref:`class_skeletonprofilehumanoid`를 사용한다는 가정하에 진행됩니다.

참고

:ref:`class_skeletonprofilehumanoid`와 다른 프로필이 필요한 경우 Skeleton3D를 선택하고 3D 뷰포트 도구 모음의 Skeleton3D 메뉴를 사용하여 편집기에서 :ref:`class_skeletonprofile`를 내보낼 수 있습니다.

:ref:`class_skeletonprofilehumanoid`를 사용하는 경우 :ref:`class_skeletonprofile`가 설정되면 자동 매핑이 수행됩니다. 자동 매핑이 제대로 작동하지 않으면 뼈를 수동으로 매핑할 수 있습니다.

../../_images/retargeting2.webp

누락, 중복 또는 잘못된 상위-하위 관계 매핑은 자홍색/빨간색 버튼으로 표시됩니다(편집기 설정에 따라 다름). 가져오기 프로세스를 차단하지는 않지만 애니메이션이 올바르게 공유되지 않을 수 있다는 경고를 표시합니다.

참고

자동 매핑은 뼈대 이름에 대한 패턴 일치를 사용합니다. 따라서 뼈에는 일반적인 영어 이름을 사용하는 것이 좋습니다.

``bone_map``를 설정한 후 아래 섹션에서 여러 옵션을 사용할 수 있습니다.

../../_images/retargeting3.webp

모든 중단점 제거

공유할 리소스를 :ref:`class_animationlibrary`로 가져오는 경우 이러한 옵션을 활성화하는 것이 좋습니다. 그러나 리소스를 장면으로 가져오는 경우 경우에 따라 비활성화해야 합니다. 예를 들어 애니메이션 액세서리가 포함된 캐릭터를 가져오는 경우 이러한 옵션으로 인해 액세서리가 애니메이션되지 않을 수 있습니다.

변형 지우기

애니메이션에서 뼈대 변환 트랙을 제외한 모든 트랙을 제거합니다.

옵션 가져오기

애니메이션에서 class_skeletonprofile`에 정의된 ``root_bone`scale_base_bone 이외의 위치 트랙을 제거합니다. :ref:`class_skeletonprofilehumanoid`에서 이는 "루트" 및 "엉덩이" 이외의 위치 트랙을 제거한다는 의미입니다. Godot 4부터 애니메이션에는 변환 값에 Bone Rest가 포함됩니다. 이 옵션을 비활성화하면 애니메이션에서 신체 모양이 예기치 않게 변경될 수 있습니다.

매핑되지 않은 뼈대

애니메이션에서 매핑되지 않은 뼈 변환 트랙을 제거합니다.

일괄 이름 바꾸기

휴식 본

매핑된 뼈의 이름을 바꿉니다.

씬 노드(Scene Node)

Skeleton을 ``skeleton_name``에 지정된 이름을 사용하여 고유한 노드로 만듭니다. 이를 통해 애니메이션 트랙 경로를 씬 계층 구조와 독립적으로 통합할 수 있습니다.

휴식 본

:ref:`class_skeletonprofilehumanoid`에 정의된 참조 포즈에는 다음 규칙이 있습니다.

  • 휴머노이드가 T자세

  • 휴머노이드는 오른손잡이 Y-UP 좌표계에서 +Z를 향하고 있습니다.

  • 휴머노이드는 노드와 같은 변환을 가져서는 안 됩니다.

  • +Y축의 방향을 상위 관절에서 하위 관절로 지정합니다.

  • +X 회전은 근육이 수축하는 것처럼 관절을 구부립니다.

이러한 규칙은 블렌드 애니메이션 및 역운동학(IK)에 대한 편리한 정의입니다. 모델이 이 정의와 일치하지 않으면 다음 옵션을 사용하여 문제를 수정해야 합니다.

변형 지우기

공유를 위해 자산을 올바르게 내보내지 않은 경우 가져온 뼈대에 노드로 변환이 있을 수 있습니다. 예를 들어 "Apply Transform"을 실행하지 않고 Blender에서 내보낸 glTF가 그러한 경우 중 하나입니다. 모델이 정의와 일치하는 것처럼 보이지만 내부 변환은 정의와 다릅니다. 이 옵션은 가져올 때 변환을 적용하여 이러한 모델을 수정합니다.

참고

가져온 씬에 뼈대 이외의 개체가 포함된 경우 이 옵션은 부정적인 영향을 미칠 수 있습니다.

표준화

포지션 트랙은 주로 모델 이동에 사용되지만, 높이가 다른 모델 간에 움직이는 애니메이션을 공유하면 보폭 차이로 인해 미끄러지는 것처럼 보일 수 있습니다. 이 옵션은 scale_base_bone 높이를 기준으로 위치 트랙 값을 정규화합니다. scale_base_bone 높이는 스켈레톤에 ``motion_scale``로 저장되며 정규화된 위치 트랙 값은 재생 시 해당 값으로 곱해집니다. 이 옵션이 비활성화되면 위치 트랙이 정규화되지 않으며 스켈레톤의 ``motion_scale``는 항상 ``1.0``로 가져옵니다.

:ref:`class_skeletonprofilehumanoid`의 경우 ``scale_base_bone``는 "엉덩이"이므로 엉덩이 높이가 ``motion_scale``로 사용됩니다.

축 덮어쓰기

:ref:`class_skeletonprofile`에 정의된 참조 포즈와 일치하도록 모델의 뼈 받침대를 덮어써서 통합합니다.

참고

이것은 Godot 4에서 애니메이션을 공유하는 데 가장 중요한 옵션이지만, 이 옵션은 외부적으로 설정된 원본 Bone Rest가 중요한 경우 끔찍한 결과를 초래할 수 있다는 점에 유의하세요. 원본 Bone Rest를 유지하면서 애니메이션을 공유하려면 `Realtime Retarget Module <https://github.com/TokageItLab/realtime_retarget>`__을 사용하는 것이 좋습니다.

실루엣 수정

모델의 실루엣을 T-Pose 등 :ref:`class_skeletonprofile`에 정의된 참조 포즈와 일치시키려고 합니다. 이는 너무 다른 실루엣을 수정할 수 없으며 뼈 롤을 수정하는 데 작동하지 않을 수 있습니다.

class_skeletonprofilehumanoid`를 사용하면 T 포즈 모델에서는 이 옵션을 활성화할 필요가 없지만 A 포즈 모델에서는 활성화해야 합니다. 하지만 이 경우 모델의 힐 높이에 따라 고정된 발 결과가 나쁠 수 있으므로 아래 예시와 같이 ``filter` 배열에 고정하고 싶지 않은 SkeletonProfile 뼈 이름을 추가해야 할 수도 있습니다.

../../_images/retargeting4.webp

또한 무릎이나 발이 구부러진 모델의 경우 scale_base_bone 높이 조정이 필요할 수 있습니다. 이를 위해 base_height_adjustment 옵션을 사용할 수 있습니다.