ホーム < ゲームつくろー! < ゲームプログラマのためのBlender

ゲームプログラマのためのBlender スクリプト編
その1 Blenderのスクリプト

[Blender Ver2.7.9]


 Blenderはスクリプト機能を備えています。スクリプトとはBlender上の一連の操作をプログラム化した物で、主に操作の自動化やモデルのコンバート等で使用します。スクリプトを上手に使う事で、何百回も繰り返さなければならない操作を一瞬で終わらせたり、モデル内の特定の条件に合う頂点や面を選択するなど、人がやるに辛い事をスイスイと行えるようになります。

 この章でそんなBlenderのスクリプトの最初の一歩を踏み出してみましょう。



@ Text Editorを開く

 習うより慣れろの精神で、取り敢えずスクリプトを書いてみる事にしましょう。その為にまずBlenderが用意しているText Editorを開きます。

 まずBlenderを立ち上げたら、立方体が真ん中に一つある3Dビューが表示されていると思います。その画面の右上に下図のような斜め線な箇所がありますので、それを左にドラッグすると別のビューが開きます:

 

 ちなみにビューを閉じる(結合)するには、カーソルをビューの境界線へ持っていき、カーソルがとなった所で右クリックをすると出るダイアログ内から[Join Area]を選択します。その後どっちを結合するか選択すればOKです。Blenderでビューを分割した時に結合できなくて焦るのは結構あるあるだと思います(^-^;;

 どちらのビューでも構いませんが、次にビューを切り替えるアイコンをクリックし[Text Editor]を選択すると、味気無い灰色一色の画面に変わります:

これがBlenderのスクリプトを書く為のText Editorです。

 続いてText Editor画面の下にあるの[New]を選択すると、Newだった所が[Text]となり、味気無い灰色部分にカレットが表示され新しくスクリプトを記述できるようになります。これでスクリプトを書く準備が出来ました。



A 選択したオブジェクトを移動する「Hello World」的スクリプト

 では早速最初のスクリプトを記述してみます。Blenderはモデラーなのでいわゆる「Hello World」を表示する事はかえって面倒です。そこで、選択しているモデルの位置を変更する大変単純なスクリプトをその代替とします。

 Blenderはスクリプト言語にPythonを採用しています。Pythonは汎用スクリプト言語という部類の物で、OS問わず使用出来たり、Blenderのように組み込みスクリプトとしても活用できます。記述がそれなりに簡便ですが「インデント」を強要するので注意です(その辺りは本編ではちょっと端折ります(^-^;)。

 ではHello World的移動スクリプトです。以下がその全文となります:

import bpy

obj = bpy.context.scene.objects.active
obj.location = ( 3, -2, 0 )

 最初なので詳しく説明します。

 最初の「import bpy」ですが、importはPython内で使うライブラリを指定するキーワードです。「bpy」は多分Blender Pythonの略かなと思いますが、Blender用のPythonライブラリを使いますよと宣言しているわけです。

 次のobjはいわゆる変数です。Pythonは型を指定せずに変数をいきなり宣言出来ます。変数には様々な物を格納できます。続く[=]は右辺の結果を左辺に代入する演算子(代入演算子)というやつです。数学記号のイコール(等しい)と意味合いが違うので注意です。まぁこの辺りはプログラマさんはお馴染みですよね。

 =演算子の右辺側の長い記述は「現在アクティブ(選択状態)になっているオブジェクト」を指定しています。なんでこんなに長いのかというと、Blenderの中にあるあらゆるものは事細かくカテゴライズされているからです。上の記述は「bpy(Blender Python)の中の、context(物)の中の、scene(シーン内にある物)の中の、objects(オブジェクト群)の中でactive(アクティブになっている物)」というカテゴリーを指定しているのです。辞書のような物とイメージすると良いのではないでしょうか。このカテゴリーを知る事がBlenderのスクリプトの基本になります。

 objの中にはこれで現在3Dビューでアクティブになっているオブジェクト(今ですと立方体一つ)が格納されます。これはObject型という暗黙の型を持っています。Object型は固有の変数を沢山持っています。その一つ[location]はオブジェクトの位置の情報を保持しています。最後の行はそこに新しい位置として( 3, -2, 0 )を与えています。Blenderのスクリプトでは位置や回転、スケールなど(x, y, z)で表現される値を上のような括弧付きで指定できます。

 この3行のスクリプトだけで3Dビュー内の立方体が( 3, -2, 0 )の位置へ動きます!



B スクリプトの実行

 Aで記述したスクリプトを動かすにはText Editorの画面下にあるボタンを押します。3Dビュー内の立方体が選択されている(オレンジになっている)事を確認して押してみて下さい。すると…

ほら!動きました(^-^)

 ここで何も反応しなくて、

のような警告ダイアログが出た場合、スクリプトの記述に誤りがあります。例えば上はlocationに指定する( 3, -2, 0 )の右括弧を消した時の警告です。「SyntaxError」というのは文法間違いの事です。括弧は閉じなければならないので文法が間違っていますよ〜と教えてくれています。line 4で4行目に間違いがあるという事もちゃんと伝えてくれていますので、警告ダイアログは良く見て対処しましょう。

 という事で、最初のHello World的スクリプトが動きました(^-^)。実はもうこれでスクリプトの大よその使い方が出来ちゃっています。最後にこのスクリプトを保存し再利用する方法を見てみましょう。



C スクリプトの保存と読み込み

 記述したスクリプトはBlenderのプロジェクトに埋め込まれます。ですからBlenderのプロジェクトを保存すれば残ります。しかしそれだと同じスクリプトを別のプロジェクトで使いたい場合に面倒くさい事になります。

 BlenderのText Editorで記述したスクリプトを保存するには、Text Editorの下にある[Text]メニューから[Save As]を選択します。Pythonのコードなので.pyを付ける事をお勧めしますが、ファイル名に規定はありません。これでスクリプトがファイルとして保存されたので、別プロジェクトで使いまわしが出来ます。

 作成した.pyファイルはText Editor画面下にある[Text]メニューから[Open Text Block]を選択すると読み込めます:

また既に読み込み済みの.pyファイルであれば[Reload]を選択、もしくは[Alt + R]のショートカットでリロード出来ます。BlenderのText Editorは機能が限定的なので、私のお勧めは外部テキストエディタでのスクリプト編集ですね(^-^)。ちなみに、Open済みの外部スクリプトファイルを外部テキストエディタで編集し保存すると、Text Editor画面の下にというアイコンが追加されます(浮き輪?)。この浮き輪っぽいアイコンをクリックすると、

というダイアログが出るので[Reload from desk]を選択すればリロードされます。



D Blender Python API

 この章以降で沢山のスクリプトが出てきます。Blenderのスクリプトで呼び出す事が出来るAPIは以下のBlenderのオフィシャルサイトで調べる事が出来ます:

リンク先の羅列内からお使いのバージョンを選択します。記述は英語なので最初はぬ〜となってしまうかもしれませんが、頑張って読みましょうwww


 以上でスクリプトを記述する基本的な所を押さえられましたので、次からは具体的な項目をパパパッとみていく事にしましょう。