인프런 커뮤니티 질문&답변

김도형님의 프로필 이미지
김도형

작성한 질문수

[게임 프로그래머 도약반] DirectX11 입문

T-Pose Local에서 Animation-Pose Global로 변환

해결된 질문

작성

·

213

0

애니메이션 강의를 듣던 도중 T-Pose의 Global->Local 행렬에서 Animation-Pose의 Local->Global 행렬을 곱해주어 Vertex의 좌표를 애니메이션 기준으로 바꾸어 주는 부분이 이해가 가지않아 질문드립니다.

가장 마지막줄인 invGlobal이 T-Pose의 Global->Local 행렬이고 tempAnimBoneTransforms[b]가 Animation-Pose의 Local->Global 행렬인데 저 두 행렬에 어떠한 상관관계도 없다고 생각되는데 단지 이렇게 곱해주기만 한다고 해서 T-Pose의 Global이 어떻게 Animation-Pose의 Global로 변환이 될 수 있나요?

제가 이러한 의문을 제기하는 이유은 두가지 입니다.
1. 두 행렬이 동일한 Bone을 기준으로 변환이 되는 행렬들이라고 해도 Animation-Pose에서는 그 Bone이 움직여서 만들어진 행렬이기 때문에 동일한 좌표계라고 생각할수 없다.
2. 지금까지 T-Pose의 Local->Global 또는 Animation-Pose의 Local->Global로 변환이 되는 행렬들은 전부 자신과 부모간의 계층구조에 의해서 좌표값이 상대적으로 구성된 아이들이였는데 사진에서 나온 InvGlobal과 tempAnimBoneTransforms[b]는 계층관계도 있지 않습니다.

글이 길어서 죄송합니다 계속 생각해봐도 잘 이해가 가지 않아 질문드립니다.ㅜ

답변 1

0

안녕하세요 김도형 님, 인프런 AI 인턴이에요.

T-Pose의 Global->Local 행렬과 Animation-Pose의 Local->Global 행렬을 곱하는 과정은 좌표 변환의 개념입니다. 이 과정을 통해 T-Pose를 기준으로 된 Vertex의 좌표를 Animation-Pose를 기준으로 변환할 수 있습니다.

  1. 두 행렬이 동일한 Bone을 기준으로 변환이 되는 것은 맞습니다. Animation-Pose에서 Bone은 움직이기 때문에 T-Pose와는 다른 로컬 좌표계를 갖게 됩니다. 그렇기 때문에 T-Pose의 Global 좌표계에서 Animation-Pose의 Global 좌표계로 변환하기 위해서는 두 행렬의 곱셈을 통해 좌표를 변환해줘야 합니다.

  2. InvGlobal 행렬은 T-Pose의 Local 좌표계를 기준으로 한 것입니다. tempAnimBoneTransforms[b]는 Animation-Pose의 Local 좌표계를 기준으로 한 것입니다. 두 행렬은 계층 구조에 따라 좌표 값이 구성되기 때문에 부모-자식 관계가 아니더라도 두 행렬을 곱하여 좌표 변환이 가능합니다.

이해가 어려운 부분이 있다면 추가적인 설명이나 도움을 드릴 수 있습니다. 감사합니다!

김도형님의 프로필 이미지
김도형

작성한 질문수

질문하기