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
順再生からの逆再生からの順再生からの……と無限に繰り返します。
コメント