GLTF形式もしくは、GLB形式にファイルをエクスポートする設定が細かく、逐一設定を行うのが面倒なのでbpy (Blender Python API)を用いて自動化しておく。

将来的にはUnityやTree.js等でモデルをインポートすることを考えてオプションの設定を随時更新します。

▼Three.jsへのモデル読み込み例


動作確認環境 : Blender 4.2


GLTF/GLB形式ファイルエクスポート


GLTF形式:
  • テキスト(JSON形式
  • テクスチャやバイナリデータを別々に保持する
  • GLSL:カスタムシェーダー作成可能
  • Three.js:GLTFLoaderで読み込み可能、テクスチャ差し替えが容易
  • Unity:GLTFプラグインを用いてインポート可能
  • 別ファイルとしての管理が問題とならず、柔軟なデータ編集や外部リソースの差し替えが望ましい場面に使用

GLB形式:
  • GLTFのバイナリ形式
  • 1つのファイルにメッシュ、マテリアル、テクスチャ、アニメーションデータを含む
  • GLSL:マテリアル情報をカスタマイズして表示可能
  • Three.js:GLTFLoaderで読み込み可能
  • Unity:GLTFプラグインを用いてインポート可能
  • Webアプリの軽量化が求められる場合や、統合されたファイルが望ましい場面に使用(例: モバイルアプリ、ブラウザアプリなど)

Python :
import bpy
import os
import sys

# Root Path
root_path = "../"

# スクリプト名
script_text = bpy.context.space_data.text

# スクリプトのディレクトリを取得
script_dir = os.path.dirname(bpy.path.abspath(script_text.filepath))

# モジュールの親ディレクトリへのパスを取得
module_path = os.path.abspath(os.path.join(script_dir, root_path))
if module_path not in sys.path:
    sys.path.append(module_path)


def export_gltf(output_path, export_format='GLTF_SEPARATE'):
    """
    GLTF形式でモデルをエクスポートする。
    
    Args:
        output_path (str): エクスポート先のGLTFファイルパス。
        export_format (str): 'GLB' または 'GLTF_SEPARATE'。
    """
    # GLTFエクスポートのオペレータを呼び出し
    bpy.ops.export_scene.gltf(
        filepath=output_path,
        check_existing=True,
        export_format=export_format,    # 'GLB' または 'GLTF_SEPARATE'
        use_selection=False,            # シーン全体をエクスポート
        use_visible=True,               # 可視オブジェクトのみをエクスポート
        export_animations=True,         # アニメーション含む
        export_skins=True,              # スキン(ボーン)含む
        export_materials='EXPORT',      # マテリアル含む
        export_yup=True,                # Y軸を上にする
        export_apply=True               # モディファイアを適用
    )

# エクスポート先のディレクトリを作成
output_directory = os.path.join(bpy.path.abspath(module_path+"/Output"), "exports")
os.makedirs(output_directory, exist_ok=True)

# GLTFファイルのパス
gltf_filepath = os.path.join(output_directory, "my_model.gltf")

# エクスポートを実行
export_gltf(gltf_filepath, export_format="GLB")

print(f"ファイルがエクスポートされました: {gltf_filepath}")

06行目:
実行スクリプトのあるディレクトリから、相対的にどの位置にモデルをアウトプットするためのディレクトリを作成するかを決めます。

43,44行目:
エクスポート先のディレクトリを作成します。
今回はこのような構成を想定しています。

ディレクトリ構成:
.
├── Output
│   └── exports         # ファイルのエクスポートディレクトリ
├── Tools
│   ├── export_filr.py  # ファイルのエクスポートスクリプト

46行目:
GLB/GLTFのエクスポートファイル名を指定します。

29~39行目:
エクスポートのオプションを指定してエクスポートします。
  • モディファイア
  • アニメーション
  • ボーン
  • マテリアル
等々の項目を設定しています。ここは必要に応じて更新します。

20行目:
"export_format"によって、GLTF形式かGLB形式にエクスポートするかを選択します。


以上
このエントリーをはてなブックマークに追加
コメントを閉じる

コメント

コメントフォーム
記事の評価
  • リセット
  • リセット