連番ファイルを逆コピして逆再生

12-7.Blender

TVアニメ『シドニアの騎士』(2014)

3DCGアニメです。シドニアっていう船でたくさんの人が移民中のアニメです。 奇居子(ガウナ)っていう強い謎の敵がいて、人類はその謎の敵と戦うために、衛人(もりと)っていうロボットに乗って戦います。

3DCGだと人とか描くのは、一個描いてしまえば、後はコピペで簡単に作れるよねえ、と不届きにも思ったりするのですが、いえいえ、そんな楽ではありません。3DCGといえどもキャラクタは皆顔が異なるでしょうから、作るのってすごく大変です、きっと。

ちなみに、このアニメには、おんなじ顔の女の子が二十人近く出てきます。

タイトルのGIFアニメですが、奇居子(ガウナ)の飛び散る様子をイメージして作りました。
スクリプトは下のとおりです。

~$ cat sidonia.sh
#!/bin/bash
cat <<EOL>/tmp/tmp.py
import bpy,math
cube=bpy.data.objects['Cube']
cube.location=(0,0,0)
bpy.data.materials['Material'].diffuse_color=(1,0,0)
bpy.ops.transform.resize(value=(0.5, 0.5, 0.5))
bpy.ops.object.mode_set(mode='EDIT', toggle=False) 
bpy.ops.mesh.subdivide(number_cuts=2)
bpy.ops.mesh.vertices_smooth(repeat=3)
bpy.ops.object.mode_set(mode='OBJECT', toggle=False) 
bpy.ops.rigidbody.object_add(type='ACTIVE')
for i in range(0,300):
	bpy.ops.object.duplicate()
camera=bpy.data.objects['Camera']
camera.location=(0,-60,0)
camera.rotation_mode='XYZ'
camera.rotation_euler=(math.pi/2, 0, 0)
lamp=bpy.data.objects['Lamp']
lamp.data.type="AREA"
lamp.location=(0,-70,10)
lamp.rotation_mode='XYZ'
lamp.rotation_euler=(math.pi/2, 0, 0)
EOL
blender -b -P /tmp/tmp.py -o //test -a -F PNG -x 1 -f 1 | grep ^Save
convert -layers optimize -loop 0 -delay 5 test????.png test.gif

Blender起動時の最初からあるCubeを丸っこくして、duplicateでコピーしています。丸っこくするために、一旦EDITモードに変更してからsubdivideして、vertices_smoothをしています。
剛体シミュレーションの方ですが、剛体を同じ場所に300個重ねることにより、飛び散る仕掛けです。そしてBlenderで生成したtest0001.png〜test0250.pngファイルをgifアニメにしています。

飛び散った赤い四角を、逆再生するGIFアニメも追加してみましょう。(順再生new0001.png〜new0100.png、逆再生new0101.png〜new0200.png)
単純な引き算ではありますが、実験は大事です。小さい数字で実験。

~$ for i in `seq 10`;do a=`printf "%04d" $i`;b=`printf "%04d" $(expr 21 - $i)`;echo $a $b;done
0001 0020
0002 0019
0003 0018
0004 0017
0005 0016
0006 0015
0007 0014
0008 0013
0009 0012
0010 0011
~$ 

上手く行きそうですので、これを利用してファイルコピーをします。

~$ for i in `seq 100`;do a=`printf "%04d" $i`;b=`printf "%04d" $(expr 201 - $i)`;cp test$a.png new$a.png;cp test$a.png new$b.png;done

念の為ファイルができているか確認しましょう。

~$ ls new* | wc -l
200
~$ ls new* | head
new0001.png
new0002.png
new0003.png
new0004.png
new0005.png
new0006.png
new0007.png
new0008.png
new0009.png
new0010.png
~$ ls new* | tail
new0191.png
new0192.png
new0193.png
new0194.png
new0195.png
new0196.png
new0197.png
new0198.png
new0199.png
new0200.png
~$ 

最後にgifにconvertします。

convert -layers optimize -loop 0 -delay 5 new????.png sidonia-new.gif

順再生からの逆再生からの順再生からの……と無限に繰り返します。
sidonia-new

コメント

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