【Blender】特定ノード以下のグループをそれぞれglTF形式に一括出力するPythonスクリプト

Pocket
LinkedIn にシェア
LINEで送る

一括出力シリーズです。例えばこんな風にBlenderのOutlinerがあって、子の子の子のノードをルートとして、ルートの子供達をそれぞれ個別にglTF形式でエクスポートしたい、なんて場合に使えるスクリプトです。

やり方

例えばこんなOutlinerのデータでやってみます。
[ie_heya]オブジェクト以下に100個くらい子ノードがぶら下がっていているデータです。

考え方

  1. まずはルートオブジェクトを取得します。
  2. 次にルートオブジェクトの子供を取得します。list型となります。
  3. 子供を得るには関数を作る必要があります。他のサイトで教えてもらいました。

  4. それぞれの子ノード全体をGLB出力します。その際にポイントがあります。
  5. ・子ノード以下のオブジェクトを全選択しておく必要があります。
    ・GLBエクスポート時に[Selected Object(選択したオブジェクトだけを出力対象とする)]オプションをONにします。

スクリプト

#
# 特定のオブジェクトの子をそれぞれGLBファイルで出力するスクリプト
# 出力先はフォルダ以下です。
# ファイルのネーミングルールは<{100000000+file_countの値}.glb>です。

# func
def getChildren(myObject):
  children = []
  for ob in bpy.data.objects:
    print(myObject.name)
    if ob.parent == myObject:
      children.append(ob)
  return children 

# get children. ルートオブジェクトを取得
object = bpy.data.objects['ie_heya']

# ルートオブジェクトの子ノードを取得
children = getChildren(object)

#export glb file recursive
output_directory = 'C:/Temp/'
file_base_name = 100000000
file_count = 0
for c in children:
  print(c.name)
  # select children recursive. 子ノードと子ノード以下をすべて選択したことにします。
  myObj = c
  print('c: ' + myObj.name)
  bpy.context.view_layer.objects.active = myObj
  bpy.ops.object.select_grouped(type='CHILDREN_RECURSIVE')
  myObj.select_set(True)
  #export glb.
  file_out_str = output_directory + str(file_base_name + file_count) + '.glb'
  print('file_out_str: ' + file_out_str)
  # use_selection: 選択したオブジェクトだけを対象にする
  bpy.ops.export_scene.gltf(filepath=file_out_str, export_format='GLB', ui_tab='GENERAL', use_selection=True)
  file_count = file_count + 1

補足説明

getChildren()関数

自作する必要があります。

bpy.ops.object.select_grouped(type=’CHILDREN_RECURSIVE’)

子ノード以下をすべて選択します。

myObj.select_set(True)

ここまで呼ぶことで子ノード自体の選択も行われます。

bpy.ops.export_scene.gltf(filepath=file_out_str, export_format=’GLB’, ui_tab=’GENERAL’, use_selection=True)

選択したオブジェクトだけを出力対象にします

結果

こんな風に出力されました。

参考サイト

Import Scene Operators – Blender Python API
Get children name and move it to a separated collection automatically – Blender Stack Exchange

記事の情報はお役に立ちましたか?

ご支援も承っています。
ご注意:返金のご対応はいたしかねます。あくまでも投げ銭としての位置付けであり、優待・特典等はございません。ご了承下さい。

22364:【Blender】特定ノード以下のグループをそれぞれglTF形式に一括出力するPythonスクリプト

v3

管理人が読んだおすすめの建築本

    

コメントを残す