【大注目】CREALITY「K2 Plus Combo」を開封&セットアップする様子を公開!大型マルチカラーの特徴は?(詳細をチェック!)

【2024最新】コピペ可能!Blenderによる3DモデリングをPythonで自動化する方法【バージョン4対応】

〜景品表示法に基づく表記:本サイトのコンテンツにはプロモーションが含まれている場合があります〜

こんにちは、管理人のウノケンです。

今回は、

BlenderをPythonで簡単に操作する方法について初心者向けに解説

していきます。

Blenderは、3Dモデリングやアニメーション制作などに利用されるオープンソースの3Dアプリケーションです。Pythonとの親和性も高く、うまく使いこなすことができれば手作業による面倒な反復作業を自動化することが可能です。

この記事では、画像を豊富に用いてPythonスクリプトを使ったBlender操作の基本について解説していきます。3Dモデリング初心者の方や、Pythonになじみのない方でもコピペで操作を実行することができるので、ぜひ自分でも操作して自動化の利便性を感じてみてください。

それでは見ていきましょう!


YouTubeでも動画でわかりやすく解説しています!

この記事の内容は、YouTubeでより詳しく解説しています。記事とあわせて活用してみてください。




「Pythonを使ったBlenderの自動化」の基本

そもそもBlenderって?

Blenderは、アニメやゲーム、映画の制作に使用されるオープンソースの3DCGソフトです。誰でも無料で使えるソフトながら、非常に高度で豊富な機能を備えています。

メタバースやVTuberをはじめとする3D制作需要の高まりに伴って使用するユーザ数が急増している、いま注目のソフトウェアです。

その導入のしやすさから、Blenderは3Dプリンター用のデータ作成にも用いられています。3Dプリントすることによって、モデリングしたオリジナルキャラを、PCの中だけでなく現実世界で楽しむことが可能です。

Blender Python APIを使ってできること

Blenderは、プログラミング言語であるPythonを使って多くの操作を自動化することが可能です。Blender Python APIと呼ばれるインターフェースを用いることで、GUIを使わずにPythonスクリプトから直接Blenderの機能を操作することができます。

通常はBlenderのGUI上でマウスやキーボードのショートカットキーを使って実行している操作も、Pythonスクリプトを賢く用いることで、自動化や高速なバッチ処理が可能になります。

Blender Python APIを使ってできることは、簡単なオブジェクトの配置や移動だけではありません。マテリアルやアニメーションの設定、ファイル入出力といった、さまざまなタスクを処理することが可能です。

この記事の後半では、Blender Python APIを使ってできる多くの具体的な操作について、基本事項を中心に解説しています。

 



Pythonを使ってBlenderを自動化する際の準備【画像あり】

個別の操作の解説に入る前に、BlenderをPythonスクリプトで操作するための準備について簡単に説明していきます。

この記事に記載の内容は最新(2024年8月時点)のBlender4.2以降に対応します。以下に記載のPythonスクリプトは、すべてバージョン4.2で機能することを確認しています。

BlenderとPythonのインストール

BlenderをPythonスクリプトで操作するためには、Blenderのソフトウェア自体をインストールする必要があります。公式ページからダウンロードすることが可能なので、使用するPCのOS(Mac/Windows/Linux)に合わせて適切なものをダウンロードしましょう。

Pythonは個別にインストールする必要はありません。BlenderをインストールしてしまえばデフォルトでPythonスクリプトを使用することが可能です。

Pythonスクリプトの記述

「Scripting」ワークスペースに移動

画面上部中央の「Scripting」をクリックし、「Scripting」ワークスペースに移動します。

デフォルトでは3Dビューポートが左上に小さく表示され、左下に対話形式のPythonコンソールが表示されます。

「新規」を押してPythonスクリプトを記述

つづいて、画面上部中央の「新規」ボタンをクリックします。

中央のテキストエディタがアクティブになり、Pythonスクリプトを記述できるようになります。

すでに記述されたPythonスクリプトを使用する場合、「新規」ではなく「開く」からファイルを開いて編集・実行することも可能です。

「実行ボタン▷」を押して実行

試しに簡単な操作を実行してみましょう。後述する「既存のメッシュを削除」するスクリプトを記述し、実行してみます。

無事立方体(Cube)メッシュが削除されました。

「実行ボタン▷」を押す代わりに、ショートカット「Alt(Macの場合はOption)」+「Pキー」を使って「実行」することも可能です。

Blender Python APIを使用する際の注意点

Blender Python APIを使用する際には、バージョンアップに伴う仕様変更に注意しましょう。

例えば、バージョン2.Xとバージョン3.X、バージョン4.Xでは「プリンシプルBSDF」の各パラメータに対応するインデックスが異なります。後述する「マテリアルの設定」のスクリプトにおいて、バージョンにあわせて適切に設定する必要が生じる項目です。

バージョン2.9とバージョン3.4におけるプリンシプルBSDFの各パラメータと対応するインデックス。「サブサーフェスIOR」と「サブサーフェス異方性」の2つが加わったことにより、バージョン3.4では「メタリック」以降のインデックスが変更されている。

このように、Blenderのバージョンアップに応じて仕様変更になる項目が存在するため、注意しておきましょう。

使用中のバージョンにおけるインデックスの確認方法については後述しています。

 



【バージョン4以降対応】Pythonを使ったBlender自動化の基本操作7選

Pythonを使ったBlender自動化の基本操作を7つ取り上げて解説してきます。

Pythonを使ってBlenderを自動化する際の準備」の項目まで準備ができていれば、以下の項目はすべてコピペで実行することが可能です。Blender初心者の方や、Pythonに不慣れな方もぜひ手元の環境で実行してみてください。

基本操作の紹介の最後で、これらの基本操作を組み合わせて実行できる自動化処理の例も掲載しています。

この記事に記載の内容は最新(2024年8月時点)のBlender4.2以降に対応します。以下に記載のPythonスクリプトは、すべてバージョン4.2で機能することを確認しています。

既存のオブジェクトを削除

Blenderを起動したときにデフォルトで表示されている立方体(Cube)を削除したいときなどに使用します。

import bpy

for mesh in bpy.data.meshes:
    bpy.data.meshes.remove(mesh)

以降のスクリプトではbpyモジュールのインポートに関する記述(import bpy)を省略します。

メッシュの追加

新しくメッシュを追加する際に使用するスクリプトの一例を示します。引数に「セグメント」や「リング」、「半径」といったパラメータを指定することも可能です。

# UV球を追加
bpy.ops.mesh.primitive_uv_sphere_add() 

# パラメータを指定してUV球を追加する場合
bpy.ops.mesh.primitive_uv_sphere_add(segments=32, ring_count=16, radius=1.0, calc_uvs=True, enter_editmode=False, align='WORLD', location=(0.0, 0.0, 5.0), rotation=(0.0, 0.0, 0.0), scale=(5.0, 1.0, 1.0))

UV球以外のメッシュを追加する際の関数の例は以下の通りです。

  • 平面を追加:bpy.ops.mesh.primitive_plane_add()
  • 立方体を追加:bpy.ops.mesh.primitive_cube_add()
  • ICO球を追加:bpy.ops.mesh.primitive_ico_sphere_add()
  • 円柱を追加:bpy.ops.mesh.primitive_cylinder_add()
  • トーラスを追加:bpy.ops.mesh.primitive_torus_add()

(参考:Mesh Operators — Blender Python API

オブジェクトの移動

オブジェクトを移動させるスクリプトは以下の通りです。引数valueにはxyz方向のそれぞれに対する所望の移動量を指定します。

bpy.ops.transform.translate(value=(1,2,3))

実行すると、x方向に1、y方向に2、z方向に3だけオブジェクトが移動します。

(参考:Transform Operators — Blender Python API

オブジェクトの回転

オブジェクトを回転させるスクリプトは以下の通りです。引数valueには回転量(単位:ラジアン)、orient_axisには回転軸を指定します。

bpy.ops.transform.rotate(value=3.1415/2 ,orient_axis='X')

実行すると、オブジェクトがx軸回りにπ/2(=90°)だけ回転します。

(参考:Transform Operators — Blender Python API