從Blender裡萃取模組資料(6)
前言
續前篇從Blender裡萃取模組資料(5),這次來說明SkinedMesh的權重資料如何取得,在此做個紀錄。內容
SkinedMesh的權重資料指的是什麼呢?可以參考下圖SkinedMesh的權重資料 |
接著,就來看如何取得權重資料,範例程式如下
import bpy tagMesh = bpy.data.meshes["Cube"] #Create bmesh from mesh tagBMesh = bmesh.new() tagBMesh.from_mesh(tagMesh) # tagBMesh.verts.ensure_lookup_table() layer_deform = tagBMesh.verts.layers.deform.active #Start extract baseIndex = 0 for face in tagBMesh.faces: for i in range(len(face.loops) ): print("Position:",face.loops[i].vert.co," ",end="") print("Normal:",face.normal," ",end="") if layer_deform!=None: vertData = tagBMesh.verts[face.loops[i].vert.index] weightKeyList = vertData[layer_deform].keys() for weightKey in weightKeyList: print("WeightIndex:",weightKey," WeightValue:",vertData[layer_deform][weightKey]," ",end="") print("Loop vertex end") loopLen = len(face.loops) for i in range( len(face.loops) - 2): print("index0:",baseIndex," ",end="") print("index1:",baseIndex + i + 1," ",end="") print("index2:",baseIndex + i + 2," ",end="") print("Loop index end") #Free bmesh... tagBMesh.free()
這個範例相似於從Blender裡萃取模組資料(1)的範例,但這次會去拿權重的資料。在開頭新增了取的"layer_deform",如果這個值是None表示這個Mesh沒有權重資料,取得權重的部分可以看到事先取得Vertex的資料後再取得權重資料,跟之前的"位置"與"Normal"並不一樣,這一點要注意,再來是取得"weightKeyList",在於List的Key來取得權重數值,這個部分有點特別,"weightKey"並不是Bone的名稱,而只是一個數字!這個數字其實是"Armature.bones"的陣列索引 ,如果忘記"Armature.bones"可以參考從Blender裡萃取模組資料(4)。所以如果要得到名稱的話還需要搭配Armature的資料才可以取得。權重數值的部分取出來就會跟編輯器看到的是一樣的不需要再處理。
參考內容
Blender Documentation Contents相關文章
從Blender裡萃取模組資料(5)從Blender裡萃取模組資料(7)
沒有留言:
張貼留言