如何从 fbx 文件中获取所有节点或多边形的名称?

How can I get the names of all nodes or polygons from an fbx file?

我有一个以 FBX 格式保存的 3D 角色模型。我想知道每个模型或关节的名称列表,这样我就可以决定角色的那部分是否与我相关。我没有使用 Maya 软件。我从第三方获得了 3D 模型,我打算将该模型用于 unity3D 中的动画,但在将模型导入 unity3d 之前,我想知道模型标签,如头发、头部等,所以有什么方法可以获取标签以编程方式从 FBX 文件?谢谢

关于 FBX 格式

"FBX" 是一种编译格式,由 Autodesk 创建,即使 FBX 是一种专有文件格式,也可以被许多 3D 软件使用。因为它是经过编译的,所以你最终会得到一个 wide-range 的 "NULL" 格式符号; IE。 -

€«±µÈ7L—C«‚›ìŸn»yàn´ZÌ'>ï¯Óp>¸z±ú‘uá#OFªƒû·Pð>U>j}jp[7)

因此,最好导出为 DAE / Collada 格式或 OBJ 格式,如果您不使用骨骼结构。

关于 Collada / DAE_FBX / DAE 格式

这种格式是开源的,过去通常用于视频游戏。该文件是一个基于 XML 的文件,在 Java / Java 脚本中应该很容易操作。因此,该文件完全支持在您最喜欢的记事本程序/应用程序...甚至您最喜欢的编程语言中打开文件。

使用此格式,您的几何图形将列在子 "geometry" 下。

可能的解决方案(在 Maya 中 Python)

如果您使用的是 Maya 并且可以在导出 FBX 文件之前插入一些代码...请在导出之前尝试 运行 这个 (Python):

import maya.cmds as cmds

# Create the location and fileName
yourDesktopVar = "C:\Users\[Your user]\Desktop\"
saveFileName   = "Joints_Models_Groups.txt"
documentToSave = open((yourDesktopVar + saveFileName), "w")

# Setup arrays full of relative information

jointNames     = [jn for jn in cmds.ls(type = "joint")]
meshNames      = [cmds.listRelatives(mn, parent=1)[0] for mn in cmds.ls(type = "mesh")]

# ================================
# Writing Joints
# ================================

documentToSave.write("Joints\n\r")
documentToSave.write("--------------")

for eachJointName in jointNames:
    documentToSave.write(eachJointName + "\n\r")

# Create a blank space
documentToSave.write("\n\r\n\r)

# ================================
# Writing Meshes
# ================================
documentToSave.write("Meshes\n\r")
documentToSave.write("--------------")

for eachMeshName in meshNames:
    documentToSave.write(eachMeshName + "\n\r")

显然,您必须对其进行编辑以适合您的格式,但这将生成一个基本的文本文档,应该为您提供足够的信息作为开始。