まえがき
毎回同じ説明するの面倒だからここに説明ページ作っておこうという試み.タイトルの通り,BPYによるプログラミング経験が無い人向けの説明となります.
ここではBlenderにおけるPythonスクリプトの実行方法を扱います.
用語の説明
混乱を避けるために,極々簡単に用語の説明をします.知ってる人は飛ばして読んでください.
Python
プログラミング言語のひとつ.Blender2.8にはPython3が組み込まれているので別途インストールする必要はありません.
ちなみに,Python2とPython3ではかなり構文に違いがあるので調べるときはPythonのバージョンをよく確認すると良いです.
Blender Python(BPY)
Blenderの様々な機能をPythonで簡単に呼び出せるようにするため,Blender開発者が公開している橋渡し的な役割を持つモジュール(関数・構造体の集まり)のことです.この橋渡し的な役割を持つモジュールは一般にAPIと呼ばれています.
スクリプト
書いたプログラムのことです.厳密にはコンパイルを介さないプログラムのことですが,ここではそこまで気にしなくても大丈夫です.
スクリプトの実行方法
Blender内で
Pythonスクリプトを実行する方法は以下の3つです.
Pythonコンソールに直接コマンドを入力する
最もお手軽な方法です.コマンドを直接入力して実行します.コンソールは対話形式でコマンド実行時に戻り値がある場合は直後に戻り値が表示されます.
テキストエディタからスクリプトを実行する
Blender内蔵のテキストエディタにスクリプトを書き込み(または外部のテキストファイルから読み込み)実行する方法です.
Pythonコンソールでは実行時に毎回スクリプトを手入力なり,コピペなりしなくてはいけないですが,この方法なら1クリックで実行できます.基本的に当サイト内で扱うスクリプトはこの方法での実行を推奨しています.
アドオンを作成する
BlenderのUIにボタン等と一緒に機能を組み込んでしまう方法です.よっぽど使用頻度が高いものや,不特定多数にスクリプトを配布するときなどはこの手段が良いでしょう.
ただし,全然初心者向けじゃないので今回は扱わないことにします.
この他にもBlenderを起動せずにBPYを呼び出すことも可能らしいですが,私は詳しくないです.
Pythonコンソールに直接コマンドを入力する
以下,操作手順です.
- ウィンドウ切り替えボタンをクリックします(各ウィンドウの左上部)
- [Pythonコンソール]ウィンドウを開く
- Pythonコンソール下部の>>>にコマンドを入力して[Enter]で実行する
例)print("hello")と入力すると直後にhelloが表示される
print()は括弧の中の文字列を出力する関数です(大体プログラミングの授業で一番最初に触らされるやつ).
複数行の例も試してみましょう.以下のスクリプトをコピーして
Pythonコンソールに貼り付けてみてください.貼り付けは
Pythonコンソール上にマウスカーソルを乗せた状態で
[Ctrl]+[V]でできます.
a = 2
b = 3
sum = a + b
print(sum)
実行して直後に
5が表示されればOKです.プログラミングにおいて
=記号は数学的なイコールとは異なり,左辺に代入することを意味します.
上記スクリプトの意味は何となく分かりますよねえ,2足す3は5ってことです.
少し長くなってしまいましたが,
ここまではただのPythonであってBPYではないんですよねえ.
これではBlenderで動かす意味がないのでBPYモジュールを使用した例を以下に示します.
例)現在のシーンをレンダリングするコマンドです
レンダリング後に
[F11]キーでレンダリング画像を確認できます.
#現在のシーンをレンダリングする
bpy.ops.render.render()
例)選択オブジェクトの移動
#選択オブジェクトをx方向に2動かす
bpy.ops.transform.translate(value=(2, 0, 0))
テキストエディタからスクリプトを実行する
以下,操作手順です.
- ウィンドウ切り替えボタンをクリックします(各ウィンドウの左上部)
- [テキストエディター]ウィンドウを開く
- スクリプトを入力,または外部ファイルから取り込む
テキストを新規で入力する場合は,最初にテキストをBlender内で新規作成します.このテキストはBlendファイル内に保存されます.
外部のテキストファイルとして出力するときは[テキスト]>[名前をつけて保存]から出力できます.
既にスクリプトのテキストファイルが用意されているときは,フォルダマークのボタンからテキストを取り込んでください.
テキストエディタでBPYモジュールを使用する場合は必ず冒頭に"import bpy"と記述する必要があります.
これを最初に記述しておくことでbpyと名のついた関数を実行できるようになります.
例として以下にスクリプトを用意してみました.選択オブジェクトを適当に並べながらコピーしていくスクリプトです.
import bpy
#2重forループ
for i in range(5):
for j in range(5):
#選択オブジェクトをコピー
bpy.ops.object.duplicate()
#オブジェクトの座標を指定
bpy.context.object.location.x = i * 2
bpy.context.object.location.y = j * 2
#オブジェクトのスケールを指定
bpy.context.object.scale.x = (5-i) / 5
bpy.context.object.scale.y = (5-i) / 5
bpy.context.object.scale.z = (5-i) / 5
#オブジェクトの角度をオイラー角[rad]で指定
bpy.context.object.rotation_euler.x = i / 5
bpy.context.object.rotation_euler.y = j / 5
- [スクリプト実行]ボタンをクリックして実行する
ボタンが右端の方にあるので,隠れている場合は[マウスホイール中ボタン]ドラッグで表示範囲を移動してください.
または,[テキストエディター]ウィンドウにマウスカーソルを乗せた状態で[Alt]+[P]でも実行できます.
※上記のスクリプト実行時は必ず何かオブジェクトを選択してください.
エラーが出たときは
プログラミングには必ずつきまとうエラーとの遭遇ですが,とりあえずエラーが出たときはシステムコンソール画面を確認してみましょう.
[ウィンドウ]タブ>[システムコンソール切替]から表示させることができます.コンソール画面にはどの行で引っかかっているか等の情報が表示されます.
基本的にはエラーが出たときに,エラーの原因となっている行数を確認しておかしいところを直すといった作業になります.
特にタイプミスは多いですね,ホントに.
一つ注意点ですが,
システムコンソールウィンドウの×印はクリックしないように注意してくださいね(Blenderが終了します).ですが最近のBlenderはこの辺が改善されて大丈夫っぽいですね.
BPYコマンドの調べ方
BPYを使うことで「なんか色々できそう」ってことはなんとなく分かってもらえたとは思いますが,「実際にどんなコマンドを入力すればいいの」っていう話をしたいと思います.
普通にググって調べてももちろん情報は集まりますが,
実はかなりお手軽な方法があります.まずは,
[情報]ウィンドウを開いてみましょう.
そして,自分が知りたいコマンドの操作を手動で実行します.操作をすると
[情報]ウィンドウに履歴が残っていくので,あとは
これを真似してスクリプトを作成するだけでOKです.
コマンドはある程度名前から想像がつくように作られているので,ほとんどのコマンドはこの方法で知ることができます.あとは適当にコマンドを並べたりするだけで結構色々できるようになります.
このほか
変数の代入,
if文,
for文といった基礎的なプログラムの書き方を知っているだけでかなり幅は広がってくると思います.
以上,Blender Python超入門編でした.