TVアニメ「SUPER LOVERS」。兄が弟を好きというアニメなのですが、このLOVEは弟に対する健全な感情だと思います。普通にある感情ではないでしょうか。でも、やっぱりそうでもないような。いろいろくっつき過ぎのような。LOVERSではなくてSUPERがついているところがすごいんだと思います。
タイトルにあるとおり、今回はbrotherではなくblenderです。
blenderをコマンドラインで実行する場合、スクリプトファイルを指定することはできますが、スクリプトを直接書くことができません。どうしてもコマンドラインで動かしたい私としては、blenderコマンドを直接起動することは諦め、スクリプトを指定してblenderを動かすようなコマンドを作ることにしました。bashスクリプトで以下のような内容になっています。コマンド名はblとしました。boys loveではなくてblenderの略です。
~$ cat -n bl 1 #!/bin/bash 2 cat <<EOL>/tmp/tmp.py 3 import bpy 4 bpy.data.objects['Cube'].select = True 5 bpy.ops.object.delete() 6 $1 7 EOL 8 blender -b -P /tmp/tmp.py -o //test -F PNG -x 1 -f 1 | grep ^Save
引数なしで実行すると、test0001.pngという画像ファイルが出来上がります。
~$ ./bl Saved: test0001.png Time: 00:00.37 (Saving: 00:00.28)
以下のグレーの四角は画像です。オブジェクトを生成していないので、何も表示されてません。
球体のPNG画像を作ってみましょう。 球体はprimitive_uv_sphere_add()で作成されます。
~$ ./bl 'bpy.ops.mesh.primitive_uv_sphere_add(location=(0,0,0))' Saved: test0001.png Time: 00:00.49 (Saving: 00:00.28)
次はテキストオブジェクトを使ってみます。
~$ ./bl 'bpy.ops.object.text_add() bpy.context.object.data.body="HELLO"' Saved: test0001.png Time: 00:00.39 (Saving: 00:00.28) ~$
では、最初に作ったblコマンドの説明です。
~$ cat -n bl 1 #!/bin/bash 2 cat <<EOL>/tmp/tmp.py 3 import bpy 4 bpy.data.objects['Cube'].select = True 5 bpy.ops.object.delete() 6 $1 7 EOL 8 blender -b -P /tmp/tmp.py -o //test -F PNG -x 1 -f 1 | grep ^Save
1は、シバンで、bashを実行するためのマジックコメントです。chmod 755 bl等して、実行権限を付けておきます。
2は、ヒアドキュメントです。EOLが出現するまで、そのまま/tmp/tmp.pyに書き込みます。
/tmpディレクトリはPCの電源をOFFしたらファイルが消えてしまうので気をつけてください。あくまでもテンポラリファイルです。
3では、bpyモジュールをインポートしています。これによりpythonでblenderの制御ができるようになります。
4と5では、blenderを新規に起動したときに、最初に生成されているCubeオブジェクトがあるので、削除しています。
6は、第一引数文字列をここに書き出すことにより、blコマンドの引数でスクリプトが書けるようにしています。
7は2のヒアドキュメントの終了合図のための文字列です。EOLでなくとも良いですが、開始時の文字列と一致させなければなりません。
8でようやくblenderを起動しています。-bオプションはblenderはバックグラウンドで動作させています。PNG画像を生成するためにレンダリングするだけなので、blenderのGUIは伏せて使います。-Pオプションでこのblコマンド内で作ったpythonスクリプトファイルを指定しています。//testはファイル名の接頭辞です。-FでPNG画像を指定し、-fはフレーム番号1を指定してレンダリングしています。
コメント
[…] ← コマンドラインでBlender […]