今回は選択されているオブジェクトを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')
この引数がエクスポートする際のオプションになります。
引数名 | 日本語 | 説明 |
---|---|---|
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ファイルを生成できそうです。(一時的に生成して通信で送信後破棄などできそう)