三日坊主のエンジニアBlog

Androidアプリ,Webアプリなどをやってるプログラマの雑記帳

3DモデリングソフトBlenderでプログラミング(導入編)

 何故か最近3Dモデルを作成してゲームなど作る機会があって、Blenderという3Dモデリングソフトを使っています。*1
他ソフトと連携させるためにモデルのオブジェクト名を連番で並べたり、頂点の座標情報を取ってきてゴニョゴニョしたりプログラマブルなことをやりたいなと思っていましたが、Blenderには、Pythonでスクリプトを実行したり、アドオンの開発をしたりする機能が備わっていることを思い出しましてBlenderPythonブログラミングに手を出し始めたところです。

この辺のことに関しては、まだネット上の情報は多くないので、情報共有も兼ねて(私も完全に把握できてはいませんが)、調べつつ書き留めていきたいと思います。

  • 当ブログで想定している環境

プログラミング開始前の設定

日本語化

 現在のバージョンでは、デフォルトで日本語化に対応しています。なお、私は今まで日本語化によって不具合に当たったことはありません。

  • 画面上にあるメニューからFile→User Preferencesを選択する
  • Blender User Preferencesのダイアログが表示されるので、Systemタブを選択する
  • 右下のInternational fontsのチェックを入れる
  • Languageのリスト一覧から日本語を選ぶ
  • Translateのinterface, tooltipにチェックを入れる

 以上の手順を行うとメニューがすべて日本語に切り替わるので、ダイアログ下の「デフォルトとして保存」を押して次回以降、日本語のUIで起動できます。

コンソールを表示させる

 スクリプトの実行では、標準出力やエラー出力がコンソールに吐かれることがあります。コンソールは通常起動時には非表示になっていますが、情報ウィンドウのヘッダ→ウィンドウ→Toggle System Console を選んで表示/非表示を切り替えられます。また、コマンドプロンプトから直接Blender.exeを起動する、もしくは起動時の引数に --start-console を付けて起動することで常に表示させておくことができます。デバッグのための出力やエラー内容の確認のために、開発時には表示しておくことをお勧めします。

f:id:Synd:20130211043944p:plain

操作履歴を見る

 情報ウィンドウには、Blenderから行われた操作が履歴として出力されます。すべての操作は表示されませんが、実際にBlenderで操作を行って、それをスクリプト上で再現するのにどのメソッドを呼び出せばよいかを確認するのには使えると思います。

f:id:Synd:20130211013438p:plain:w360

 ちなみに、Blenderのデフォルトのレイアウトの一番上のメニューの様になっているところは、実はヘッダ*2分の高さしか見えていない情報ウィンドウになっているので、情報ウィンドウの境界をドラッグして位置を引き下げれば、操作した履歴を見ることができます。

f:id:Synd:20130210011601p:plain:w500

プログラムを書く

 Blender Pythonプログラムを書くための方法がいくつかあります。

Pythonコンソール

f:id:Synd:20130211005641p:plain

 ウィンドウタイプ一覧からPythonコンソールを選択して表示させます。
 Pythonコンソールは、画像の様にPythonインタプリタをインタラクティブモードで実行したような画面になっています。動作もインタラクティブモードとほとんど同じように、一行毎にプログラムが実行されて、返された結果が出力されます。
 そして、このコンソールでは、入力途中でCtrl+Spaceキーを押すことで入力補完ができます。候補が複数存在するときは利用可能な変数やメソッドの候補一覧が表示されます。
 dirやhelpなどのpythonのビルトイン関数*3と合わせてライブラリのクラスやメソッドを確認するのに大変重宝します。

f:id:Synd:20130211011114p:plain:w300

Blender内のテキストエディタ

 Pythonコンソールと同じように、ウィンドウタイプ一覧からテキストエディタを選択します。

f:id:Synd:20130211034109p:plain:w450

 ウィンドウのヘッダにあるNewボタンを押すと、テキストファイルが新規作成されます。スクリプトを書いて、テキスト>スクリプト実行(ショートカットキー:Alt+P) から中身を実行することができます。テキストエディタには、プリセットでスクリプトテンプレートがいくつか用意されているので、実装の参考になるかもしれません。ヘッダのテキストメニューから編集したスクリプトをファイルに保存したり、ファイルから読み込むこともできます。

外部のテキストエディタ

 自分の使い慣れたエディタや、コーディングを補助する機能があるエディタを使いたい人も多いと思います。
 上記のBlenderウィンドウのテキストエディタからファイルシステムに保存したもの(もしくは既存のPythonスクリプトのファイルを読み込んだもの)は、実際のファイルと関連付けられています。そのスクリプトファイルを、お使いのエディタで開いて編集・上書き保存をしてBlenderに戻ると、外部からファイルが変更されたことが検出されて下記のようなマークが出てきます。そのマークを押して再読み込み(ショートカットキー:Alt+R)して変更を反映して、上記の手順でスクリプトを実行できます。

f:id:Synd:20130211042109p:plain

終わりに

 次回から実際にBlenderでプログラムを書いていきます。Blender自体の操作方法や3DCGモデリングの用語等については、他のWebページの解説や参考書でご確認ください。
最後に個人的におすすめのサイトや書籍を載せておきます。

次回に続く

  • ↓入門書としても内容がしっかりしていて丁寧で非常にお勧めできます

キャラクターをつくろう!  3DCG日和。 vol.3 -Blenderでつくる、ポリゴンキャラクター

キャラクターをつくろう! 3DCG日和。 vol.3 -Blenderでつくる、ポリゴンキャラクター

*1:Blenderオープンソースで開発されている3DCG作成ツールです。

*2:各ウィンドウでメニュー等が表示されているバーをヘッダといいます

*3:dir()関数は、モジュールやオブジェクトを引数に渡すと、そこで定義されているものの一覧が文字列リストで返します。help()関数は、クラスやメソッドを引数に渡すとそれに関するドキュメントを見ることができます。