[簡単]blenderでPythonを使って楽しよう前編

blender2.82使用
みなさんPythonスクリプト使ってますか?
なんか難しそう・・・なんて思っている方向けの浅いPython講座です。
Pythonの事よく分かってない私が言うのだから間違いない。
オブジェクト指向?クラス継承?メソッド?何それ?
こんなレベルです。
もっと言うとblenderのスクリプトは少し分かっても、blender以外のPythonは全然分かりません。
でも、blenderでは誰でもある程度書けちゃうんですよ。
これをきっかけにチャレンジしてみましょう。
Let's blender Python!












まずはコンソールを表示させる
コンソールは必須ではないですがprint文でメッセージを表示できます。
プログラムにはバグがつき物で、仮にエラーがないとしても自分の思い通りに動かない事は日常茶飯事です。
なので逐一print文で値を表示するとどこでおかしい挙動をしているのか分かるのです。

そんなコンソールですが表示の仕方がOS毎にやり方が違うようです。
一応マニュアルの各OSでの表示の仕方のリンクを貼っておきます。(英語ですが)
https://docs.blender.org/manual/en/2.82/advanced/command_line/launch/index.html#command-line-launch-index

私はMacしか持ってないので確認ができないのですがマニュアルを見る限り
LInuxはコマンドラインでblenderを起動する必要があるようです。
cd コマンドでblenderのインストールしてあるディレクトリを指定して
./blender
で起動するようです。

Windowsは普通に起動するだけで良さそうな気がするんですがどうなんでしょう?
blender上部のウィンドウメニューからコンソールに切り替えが選べるようです。
もしダメだったら最終手段Google先生に訊いてみましょう。
blender2.8 システムコンソール 表示 とでも検索すれば出てくると思います。多分。(オイッ)

Macのやり方ですがblender2.8.appを右クリックしてパッケージの内容を表示します。
その次にContents→MacOS→Blenderをダブルクリックして起動してください。
これでOKです。
毎回辿るのが面倒な場合はBlenderをデスクトップにエイリアスを作るかDockに登録してください。
ファイル扱いなのでDockのゴミ箱の側です。
コンソールを閉じるとblenderも閉じます。
Macでコンソール付きで起動する手順。print文の結果がコンソールに表示される。コンソールを閉じるとblenderも閉じる


なぜblender Pythonは誰でも簡単に書けるのか?
いくつか理由があります。
まず情報ウィンドウの存在があります。
何かの操作をするとそのコマンドが情報ウィンドウに表示されます。
例えばプロパティの何かを変更したとかですね。
そうするとそのコマンドが表示されるわけです。
なのでコマンドを一から調べなくてもある程度はコピペで作業の自動化ができてしまうのです。
多くの操作が情報ウィンドウにコマンドとして記録されコピー出来る









もう一つはPythonコンソールウィンドウの存在です。
blenderのコマンドはbpyで始まるのですが、pythonコンソールではオートコンプリート機能で入力の補完や候補が表示されるのです。なのである程度はコマンドを知らなくても書く事ができるのです。以前はオートコンプリートはCTRL+SPACEに割り振られていました。blender2.82ではショートカットが割り振られていないようですがCTRL+SPACEを割り振っても良いでしょう。ショートカットを割り振ると効率が断然違います。


 Pythonスクリプトを使う意味
普通に操作した事をわざわざPythonで実行するのは効率が悪いと思うでしょう。
しかし、どのプログラム言語にあるのがfor文とif文です。
for文とは繰り返し処理のことで数百回、数千回の処理でもお手の物です。
そしてif文は条件分岐です。
〇〇が正の場合は××を実行するとかができます。
この二つを駆使することで手作業では面倒な工程をあっという間にこなす事ができるのです。

例えば、blenderにはトランスフォームやスムーズシェーディングなど複数のオブジェクトに一括で処理できるものがあります。
一方でプロパティウィンドウの項目はアクティブオブジェクトしか変更できません。
数個のオブジェクトなら手作業でも良いですが何百のオブジェクトの設定を変更するとなると大変です。
しかし、Pythonが使えれば数行書くだけであっという間に処理ができるのです。


ちなみに私の作品ですが

これにもPythonは活躍してくれました。
見ての通り25万個Cubeですが表示を軽くするためにCubeのビューポート表示をワイヤーフレームにしていたのですが、バウンドにした方が劇的に軽くなったのです。見た目はほぼ変わらないのですがね。しかしビューポート表示は一つずつしか変えられません。そんな時にバウンドに変えるコマンドと、選択したオブジェクト全ての数だけ繰り返し処理するコマンドを使って一瞬で変える事ができたのです。書いたコードは三行のみでした。


とりあえず実行してみよう
まあ四の五の言わずやってみましょう。
次の三行のコードをテキストエディターウィンドウに貼り付けて実行してみてください。

import bpy
for i in bpy.data.objects:
    print("名前は",i.name,"オブジェクトタイプは",i.type)

コンソールに全オブジェクトの名前とオブジェクトタイプが表示されるはずです。
オブジェクトが数百個あっても一瞬で表示してくれますよ。何個もコピーして試してみてください。


このオブジェクトタイプをif文で判断する事で処理するオブジェクトの種類を限定する事もできます。

長くなったので今回はこの辺で。

次回に続きます。

[簡単]blenderでPythonを使って楽しよう中編