FBX 解析 材質與貼圖
阿新 • • 發佈:2018-12-13
本文采用 AUTODESK的FBX SDK來解析fbx檔案,使用語言為python。
下面結合程式碼解析出fbx檔案中的材質與貼圖,以及簡單介紹涉及到的類的關係。
1.sdk中的一些基本概念
FbxScene 該類包含了整個3D場景的描述。對檔案進行解析時,要先獲得場景物件,然後在解析該物件裡的內容。 FbxObject 大多數FBX物件的基類。物件之間通過connections進行連線。通過連線,物件間相互關聯以形成層次結構或結構。即fbx的場景中物件的關係都表示為物件的連線。 FbxObject提供了Property(屬性)這種機制來描述場景中物件的特徵。 FbxProperty
2.解析fbx檔案
下面是本次解析內容(mesh的名字,材質名稱,貼圖名稱,材質貼圖引用關係)的的關係結構圖:
1)載入scene
lSdkManager,lScene = InitializeSdkObjects()
LoadScene(lSdkManager,lScene,"xxx.FBX")
2)獲取節點node以及名字 scene中包含了所有node中的root節點。
rootNode = pScene.GetRootNode()
node之間通過樹狀結構連線,通過 GetChild() 與遞迴即可獲得所有node
if rootNode:
for i inrange(rootNode.GetChildCount()):
ChildNode = rootNode.GetChild(i)
if ChildNode:
AllNodes.append(ChildNode)
FindChildNodes(AllNodes,ChildNode)
獲取node名字
lNode.GetName()
3)獲取材質Material以及名字 獲取材質
NodeMaterial = lNode.GetMaterial(0)
獲取材質名字
NodeMaterial.GetName()
4)獲取貼圖Texture以及檔案路徑
貼圖可以直接從scene中獲得
tex_num = lScene.GetTextureCount()
#print(tex_num)
for i inrange(tex_num):
tex = lScene.GetTexture(i)
貼圖檔案路徑
path = tex.GetFileName()
5)獲取材質,貼圖關係 根據材質擁有的屬性去獲取相應的關係
#DiffuseTextures
lProperty = pMaterial.FindProperty(FbxSurfaceMaterial.sDiffuse)
#BumpTextures
lProperty = pMaterial.FindProperty(FbxSurfaceMaterial.sBump)
可以通過關係去獲取相應材質
num_textures = pProperty.GetSrcObjectCount(FbxCriteria.ObjectType(FbxTexture.ClassId))
texture = pProperty.GetSrcObject(FbxCriteria.ObjectType(FbxTexture.ClassId),i)