導入 (Blender × Pythonを勉強したい経緯)
普段はエンジニアだったり、趣味でラップを作ったりしているBuzzWordsという者です。
自作楽曲のMVにBlenderを使ったりしているのですが、仕事が忙しい中、手動でオブジェクトを作っていくのは大変だなぁと思うわけです。
そこで、本業であるプログラミングを活用して効率化していけるように、知見などをまとめていきたいと思います。
急がば回れってやつですね。
(なお、完全な個人メモです。)
以下がBlender × Pythonの公式ドキュメント。
序章では、普段Blenderで使う機能をPythonで書くとどうなるの?
というのを整理して、気楽に手を動かすための足掛かりにしたいです。
Hello World (立方体を配置する)
プログラミングの取っ掛かりとして、
Hello Worldという文字列をログ出力してニッコリする奴があるのですが、
Blender版のそれは立方体の表示かなと思ったのでやってみます。
(まずは、デフォルトの立方体をクリック ⇒ xキーで削除して、)
画面の上部の「モデリング」「スカルプト」「UV編集」……のメニューにマウスを下スクロールすると、横スクロールになって「スクリプト作成」が出て来るのでクリック。
「+新規」ボタンから新しいスクリプトを作成。
テキスト入力をするところに、以下を貼り付けてみてください。
import bpy
# 立方体を追加
bpy.ops.mesh.primitive_cube_add(location=(0, 0, 0))
再生ボタンをクリックすると、立方体が作成されると思います。
(上記のスクリプトを再生ボタンで実行した後の画面。)
キーボードを入力しても文字が入らない場合には、マウスがエディタの中に入っているか注意。
Blender全般として、ショートカットキーが発動するのはマウスがオンな所に対してらしい。
シンプルですね。
ということで、追加系のUIとPythonメソッドの対応をざっくり眺めてみましょう。
追加UIとPythonメソッドの対応表
Blenderの操作画面上だとShift + Aで何かを追加するための選択肢が出るのですが、
そこで表示される追加項目に対応するPythonメソッドを見ていきます。
xxxxxxのところには具体的な値
(とりあえず、よく使いそうなやつだけ)
名前 | Pythonメソッド |
---|---|
メッシュ | bpy.ops.mesh.primitive_xxxxxx_add |
カーブ | bpy.ops.curve.primitive_xxxxxx_curve_add |
メタボール | bpy.ops.object.metaball_add |
テキスト | bpy.ops.object.text_add |
ボリューム | bpy.ops.object.volume_add |
アーマチュア | bpy.ops.object.armature_add |
ライト | bpy.ops.object.light_add |
カメラ | bpy.ops.object.camera_add |
メッシュ
メッシュと呼ばれる基本的な図形です。
bpy.ops.mesh.primitive_xxxxxx_addのxxxxxx部分を差し替えた名前になるそうです。
メッシュ名 | Pythonメソッド |
---|---|
平面 | bpy.ops.mesh.primitive_plane_add |
立方体 | bpy.ops.mesh.primitive_cube_add |
円 | bpy.ops.mesh.primitive_circle_add |
UV球 | bpy.ops.mesh.primitive_uv_sphere_add |
ICO球 | bpy.ops.mesh.primitive_ico_sphere_add |
円柱 | bpy.ops.mesh.primitive_cylinder_add |
円錐 | bpy.ops.mesh.primitive_cone_add |
トーラス(ドーナツ型) | bpy.ops.mesh.primitive_torus_add |
グリッド | bpy.ops.mesh.primitive_grid_add |
モンキー | bpy.ops.mesh.primitive_monkey_add |
カーブ
いろんな曲線です。
bpy.ops.curve.primitive_xxxxxx_curve_addのxxxxxx部分を差し替えた名前になるそうです。
カーブ名 | Pythonメソッド |
---|---|
ベジェ | bpy.ops.curve.primitive_bezier_curve_add |
円 | bpy.ops.curve.primitive_circle_add |
NURBSカーブ | bpy.ops.curve.primitive_nurbs_curve_add |
NURBS円 | bpy.ops.curve.primitive_nurbs_circle_add |
パス | bpy.ops.curve.primitive_path_add |
ファー | (未対応?) |
テキスト
文字も入れられます。
以下、正真正銘のHello, World!をするサンプルコード。
import bpy
# テキストオブジェクトを追加
bpy.ops.object.text_add(location=(0, 0, 0))
# 追加したテキストオブジェクトを取得
text_object = bpy.context.object
# テキストの内容を変更
text_object.data.body = "Hello, World!"
メタボール
図形をくっつけて何かを作れるやつ。
メタボールは他と違い、bpy.ops.object.metaball_addメソッドのtypeオプションで使い分ける。
import bpy
# メタボール(ボール)を追加
bpy.ops.object.metaball_add(type='BALL', location=(0, 0, 0))
TYPE | 値 |
---|---|
ボール | BALL |
カプセル | CAPSULE |
平面 | PLANE |
楕円体 | ELLIPSOID |
立方体 | CUBE |
ライト
ライトもメソッドは共通な方式で、bpy.ops.object.light_addメソッドを使用する。
typeオプションで使い分ける。
import bpy
# ポイントライトを追加
bpy.ops.object.light_add(type='POINT', location=(0, 0, 0))
TYPE | 値 |
---|---|
ポイント | POINT |
サン | SUN |
スポット | SPOT |
エリア | AREA |
(余談)過去の作品例
ちなみに、以下は過去のBlender作品集の一部です。
①ローポリカー。Godot Engineというゲームエンジンに食わせて走らせてます。
②刀です。呪術廻戦の完結記念に乙骨くんっぽい感じに作りました。
③大規模な作品例で昔に住んでた寮。公式の資料を基に考察・推定しまくりました。
テクスチャの大半は灰ならしさん様様。
Godot Engineで動かしたりもしている。
素人が手動で作るとこんなクオリティですっていうことで。
(参考)
Blenderテクスチャ界の父(母?)
灰ならしさんの本についての紹介ページです。
(Blender4対応の最新版もあるらしいけど持っていない。)