夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

BlenderでPythonスクリプトで選択しているメッシュをエクスポートする

本日はBlender Python枠です。

今回は選択されているオブジェクトをPythonスクリプトを使用してエクスポートしていきます。

通常エクスポートはGUIで行いますが、コードで行うことで将来的なアドオン内でのオブジェクトの書き出しを行うことを想定して学んでいきます。

〇コード

今回は次のようなコードを実行しました。

import bpy

# アクティブなオブジェクトを選択して、選択したオブジェクトのリストを作成
selected_objects = bpy.context.selected_objects

# 選択したオブジェクトがメッシュであることを確認
mesh_objects = [obj for obj in selected_objects if obj.type == 'MESH']

if not mesh_objects:
    print("選択したオブジェクトにメッシュが含まれない。")
else:
    # メッシュを選択して、エクスポートパスを指定
    export_path = "(エクスポート先パス)/file.fbx"
    
    # FBXエクスポートオプションを設定
    bpy.ops.export_scene.fbx(
        filepath=export_path,
        use_selection=True,  # 選択したオブジェクトのみをエクスポート
        mesh_smooth_type='OFF'  # スムージングを無効にするか適切な設定に変更
    )
    print(f"FBXファイルが {export_path} にエクスポートされました。")

今回のコードでは①選択しているメッシュを取得②エクスポート先パスを定義③エクスポートオプションを付けエクスポートしています。

bpy.ops.export_scene.fbx()はBlenderで提供されているメソッドです。

ドキュメントによると次のようにかなりの量の引数を持っています。

bpy.ops.export_scene.fbx(filepath='', check_existing=True, filter_glob='*.fbx', use_selection=False, use_visible=False, use_active_collection=False, global_scale=1.0, apply_unit_scale=True, apply_scale_options='FBX_SCALE_NONE', use_space_transform=True, bake_space_transform=False, object_types={'ARMATURE', 'CAMERA', 'EMPTY', 'LIGHT', 'MESH', 'OTHER'}, use_mesh_modifiers=True, use_mesh_modifiers_render=True, mesh_smooth_type='OFF', colors_type='SRGB', prioritize_active_color=False, use_subsurf=False, use_mesh_edges=False, use_tspace=False, use_triangles=False, use_custom_props=False, add_leaf_bones=True, primary_bone_axis='Y', secondary_bone_axis='X', use_armature_deform_only=False, armature_nodetype='NULL', bake_anim=True, bake_anim_use_all_bones=True, bake_anim_use_nla_strips=True, bake_anim_use_all_actions=True, bake_anim_force_startend_keying=True, bake_anim_step=1.0, bake_anim_simplify_factor=1.0, path_mode='AUTO', embed_textures=False, batch_mode='OFF', use_batch_own_dir=True, use_metadata=True, axis_forward='-Z', axis_up='Y')

docs.blender.org

この引数がエクスポートする際のオプションになります。

引数名 日本語 説明
filepath ファイルパス エクスポートするファイルパス
check_existing --- 既存ファイルを上書きする際の警告を出すか?
filter_glob --- エクスポートファイルの種類を指定 fbxなら*.fbx
use_selection 選択したオブジェクトのみ Trueの場合シーン全t内ではなく選択したオブジェクトのみエクスポート
use_visible 表示されているオブジェクトのみ Trueの場合表示されているオブジェクトのみエクスポート対象
use_active_collection アクティブオブジェクトのみ Trueの場合アクティブオブジェクトのみがエクスポート対象 
global_scale スケール スケーリングするかどうか?
apply_unit_scale 単位の使用 Trueの場合現在のBlenderの単位を使用したスケーリングが行われれる。
use_space_transform 座標変換の使用  座標の変換を行うか?
bake_space_transform 変換座標のベイク  変換した座標を焼きこむか?
object_type オブジェクトタイプ エクスポートするオブジェクトの種類の決定
mesh_smooth_type メッシュのスムースタイプ メッシュのスムースタイプを指定する
colors_type カラータイプ エクスポートするカラーのタイプ指定
prioritize_active_color  アクティブカラーの優先度 アクティブなカラーの優先を行う
use_subsurf サブサーフの適応  サブサーフの適応
 use_mesh_edges  メッシュエッジの使用 メッシュエッジを適応する
use_triangles 3角ポリゴンの使用 エクスポート時に3角面化モディファイアを実行する
use_custom_props カスタムプロパティの使用 エクスポート時にカスタムプロパティを適応する
add_leaf_bones リーフボーンの追加 エクスポート時にリーフボーンを追加してエクスポートするか
primary_bone_axis ボーン軸の優先 エクスポート時のプライマリボーンの軸を設定(XYZ)
secondary_bone_axis セカンダリボーン軸 セカンダリボーンの軸を設定(XYZ)
use_armature_deform_only アーマーチュア変形のみしよう エクスポート時にアーマーチュアの変形のみを適応する
bake_anim アニメーションのベイク エクスポート時にアニメーションを含める
bake_anim_use_all_bones すべてのボーンでアニメーションをベイク エクスポート時にすべてのボーンを使用してアニメーションをベイクするか
bake_anim_use_nla_strips NLAストリップを使用するか? エクスポート時にNLPストリップを使用してベイクするかどうかの

このオプションは大体がFBXのエクスポート設定のUIと共通化しており、UIによるFBXのエクスポートはこちらのコマンドが動いていることがわかります。

自身のアドオン内で上記コードを使用することでFBXファイルを生成できそうです。(一時的に生成して通信で送信後破棄などできそう)