0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Blender×Python理解への道 ~序章 普段使う機能をPythonで書くとどうなるの?~

Posted at

導入 (Blender × Pythonを勉強したい経緯)

普段はエンジニアだったり、趣味でラップを作ったりしているBuzzWordsという者です。
自作楽曲のMVにBlenderを使ったりしているのですが、仕事が忙しい中、手動でオブジェクトを作っていくのは大変だなぁと思うわけです。

そこで、本業であるプログラミングを活用して効率化していけるように、知見などをまとめていきたいと思います。
急がば回れってやつですね。
(なお、完全な個人メモです。)

以下がBlender × Pythonの公式ドキュメント。

序章では、普段Blenderで使う機能をPythonで書くとどうなるの?
というのを整理して、気楽に手を動かすための足掛かりにしたいです。

Hello World (立方体を配置する)

プログラミングの取っ掛かりとして、
Hello Worldという文字列をログ出力してニッコリする奴があるのですが、
Blender版のそれは立方体の表示かなと思ったのでやってみます。

(まずは、デフォルトの立方体をクリック ⇒ xキーで削除して、)
画面の上部の「モデリング」「スカルプト」「UV編集」……のメニューにマウスを下スクロールすると、横スクロールになって「スクリプト作成」が出て来るのでクリック。

image.png

image.png

「+新規」ボタンから新しいスクリプトを作成。

image.png

image.png

テキスト入力をするところに、以下を貼り付けてみてください。

import bpy

# 立方体を追加
bpy.ops.mesh.primitive_cube_add(location=(0, 0, 0))

再生ボタンをクリックすると、立方体が作成されると思います。
image.png
(上記のスクリプトを再生ボタンで実行した後の画面。)

キーボードを入力しても文字が入らない場合には、マウスがエディタの中に入っているか注意。
Blender全般として、ショートカットキーが発動するのはマウスがオンな所に対してらしい。

シンプルですね。
ということで、追加系のUIとPythonメソッドの対応をざっくり眺めてみましょう。

追加UIとPythonメソッドの対応表

Blenderの操作画面上だとShift + Aで何かを追加するための選択肢が出るのですが、
そこで表示される追加項目に対応するPythonメソッドを見ていきます。

image.png

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部分を差し替えた名前になるそうです。

image.png

メッシュ名 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
ファー (未対応?)

image.png

テキスト

文字も入れられます。
以下、正真正銘のHello, World!をするサンプルコード。

import bpy

# テキストオブジェクトを追加
bpy.ops.object.text_add(location=(0, 0, 0))

# 追加したテキストオブジェクトを取得
text_object = bpy.context.object

# テキストの内容を変更
text_object.data.body = "Hello, World!"

image.png

メタボール

図形をくっつけて何かを作れるやつ。
メタボールは他と違い、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

image.png

ライト

ライトもメソッドは共通な方式で、bpy.ops.object.light_addメソッドを使用する。
typeオプションで使い分ける。

import bpy

# ポイントライトを追加
bpy.ops.object.light_add(type='POINT', location=(0, 0, 0))
TYPE
ポイント POINT
サン SUN
スポット SPOT
エリア AREA

image.png

(余談)過去の作品例

ちなみに、以下は過去のBlender作品集の一部です。

①ローポリカー。Godot Engineというゲームエンジンに食わせて走らせてます。
image.png

②刀です。呪術廻戦の完結記念に乙骨くんっぽい感じに作りました。
image.png

暗殺教室10周年記念にナイフも作ったりと武器が多め?
暗殺教室_ナイフ.png

③大規模な作品例で昔に住んでた寮。公式の資料を基に考察・推定しまくりました。
テクスチャの大半は灰ならしさん様様。
day10_3.png
Godot Engineで動かしたりもしている。
image.png

素人が手動で作るとこんなクオリティですっていうことで。

(参考)
Blenderテクスチャ界の父(母?)
灰ならしさんの本についての紹介ページです。

(Blender4対応の最新版もあるらしいけど持っていない。)

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?