2018年7月30日 星期一

從Blender裡萃取模組資料(3)

從Blender裡萃取模組資料(3)

前言

  續前篇從Blender裡萃取模組資料(2),這次說明物件的Hierarchy如何萃取,在此做個紀錄。

內容
  在Blender設定Hierarchy有3種常用的方法,一個是直接設定物件的Relations的Parent,如下圖
設定Relations的Parent
這個方法我認為是最好的方式,因為這個方法支援當Parent是Bone的狀況,第二種是"Set Parent To",用法很直覺,選取Child物件後再押住"Shift"選取Parent物件,然後按下Ctrl+p,選取需要的Parent選項即可,這方法很直覺而好用,還可以用來綁骨架,但這個方法有個缺陷,就是無法將物件的Parent設定到Bone,操作狀況如下圖
使用"Set Parent To"
接著是第三種方法,使用"Child Of Constraint",操作狀況如下圖
使用"Child Of Constraint"
這個方法雖然也可以達成Hierarchy效果,但有些相當棘手的問題,問題一,在操作狀況圖片可以看到物件的Hierarchy並沒有真正的改變,這會造成匯出模組時有些物件(Child Of Constraint的Parent物件)必須先匯出,問題二,這個方法並不會防止循環Hierarchy或是2個以上的Parent,如果先用第一或第二種方法設定Hierarchy為A物件的Child為B物件,B物件的Child為C物件,接著利用
"Child Of Constraint"將C物件的Parent設成A物件,造成循環Hierarchy且C物件具有2個Parent,Blender並不會阻止這件事的發生,所以這第三種方法就不打算支援了。
  接著就來看看由第一與第二種設定Hierarchy的資料如何萃取,萃取的範例如下
tagObj = bpy.data.objects["Cube"]
#
for obj in tagObj.children:
  print("child name:",obj.name)
#
if obj.parent != Nome:
  if obj.parent_type=='OBJECT':
    print("parent name:",obj.parent.name)
  elif obj.parent_type=='ARMATURE':
    print("parent name:",obj.parent.name)
  elif obj.parent_type=='Bone':  
    print("parent name:",obj.parent.name," bone name:",parent_bone)

只要存取物件的"Children"就可以得到該物件的Child物件,然後可以透過"Parent"來得到Parent物件,唯一要記住的特例是當物件的Parent是Bone的狀況,實際狀況會到萃取骨架資料時再詳細說明。

參考資料

Blender Documentation Contents

相關文章

從Blender裡萃取模組資料(2)
從Blender裡萃取模組資料(4)

沒有留言:

張貼留言