コマンドラインでBlender

12-7.Blender

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)

以下のグレーの四角は画像です。オブジェクトを生成していないので、何も表示されてません。
blender-nothing

球体の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)

blender-sphere

次はテキストオブジェクトを使ってみます。

~$ ./bl 'bpy.ops.object.text_add()
bpy.context.object.data.body="HELLO"'
Saved: test0001.png Time: 00:00.39 (Saving: 00:00.28)
~$ 

blender-text

では、最初に作った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を指定してレンダリングしています。

コメント

  1. […] ← コマンドラインでBlender […]

タイトルとURLをコピーしました