Разбираемся с FbxAnimStack в Fbx без сетки

Я загрузил несколько файлов MIXAMO, чтобы провести небольшое тестирование. У меня есть YBot, который включает Mesh (Vertices), Layer (UVs, Normals) и Skin (Transform, LinkTransform и Bone Weights).

Также скачал несколько анимаций без скина. Таким образом, они содержат Skeleton + AnimStack + Frames.

Данные сетки и рендеринг позы работают хорошо, но, поскольку я изучаю это по ходу дела, а формат FBX, кажется, не очень четко документирован с точки зрения использования в игровых движках, я немного застрял. У меня есть следующие данные, извлеченные из обоих файлов:

  • Mesh (Vertices + UVs + Normals) - файл #1
  • Скелет (костная структура) - файл №1
  • Кожа (Mesh + Bone Combo = Cluster/Deforms = Transforms/BoneWeights) - файл №1
  • Анимация (кадр + скелет + вычисление * преобразование () с использованием времени кадра) - файл №2

(структура узла Skeleton - это связь между двумя файлами)

И это данные, связанные со скелетом / анимацией, которые я храню:

// mesh file #1
// I use FBXSDK_TIME_INFINITE here as this is the static part of the data
XMMATRIX aMeshGeometricTransform, // (mesh) aFbxNode->GetGeometric*() combo
XMMATRIX aMeshNodeGlobalTransform, // (mesh) lFbxNode->EvaluateGlobalTransform(FBXSDK_TIME_INFINITE)
XMMATRIX aMeshNodeLocalTransform, // (mesh) lFbxNode->EvaluateLocalTransform(FBXSDK_TIME_INFINITE)
XMMATRIX aClusterTransformMatrix, // (cluster) lFbxCluster->GetTransformMatrix()
XMMATRIX aClusterTransformLinkMatrix, // (cluster) lFbxCluster->GetTransformLinkMatrix()
XMMATRIX aClusterNodeGlobalTransform, // (cluster) lFbxClusterNode->EvaluateGlobalTransform(FBXSDK_TIME_INFINITE)
XMMATRIX aClusterNodeLocalTransform, // (cluster) lFbxClusterNode->EvaluateLocalTransform(FBXSDK_TIME_INFINITE)
// animation file #2
// here are the animation frames (lTime = FbxTime.SetFrame(#Frame, FbxTime::EMode::eFrames60))
XMMATRIX aFrameSkeletonGlobalTransform, // (take/frame) lFbxNode->EvaluateGlobalTransform(lTime)
XMMATRIX aFrameSkeletonLocalTransform // (take/frame) lFbxNode->EvaluateLocalTransform(lTime)

Затем я использую эти промежуточные точки данных для объединения в Vertex/Constant Buffer. Также запуститеFbxSystemUnit::m.ConvertScene + DirectX.DeepConvertScene + Triangulate против сцены.

Как мне объединить все эти переменные, чтобы правильно разместить анимированную вершину? Мне нужно извлечь больше данных, чтобы анимация работала? Должен ли я загружать файлы анимации со скинами и извлекать анимацию, пройдя черезAnimStack/Mesh/Deformer/Cluster даже если бы я предпочел просто разделить их?

0 ответов

Другие вопросы по тегам