ターミネーター

2015年7月10日に映画ターミネーターの最新作「ターミネーター: 新起動/ジェニシス」が公開になりましたね!

この最新作でも「ターミネーター2」で初登場してシュワちゃん達を苦しめたアイツが登場するようです。

そう、液体金属ロボット「T-1000」です!

液体金属なのでどんな形にも自在に変形可能。手を武器に変形させて襲いかかります。小さな隙間から侵入したり、別の人物に成り代わって待ち伏せする事も可能です。銃で撃たれても自己再生するのでとても厄介!

Youtubeで検索すれば元祖の方も含めてT-1000の映像はたくさん出てきますよ。

ターミネーター2が公開されたのはずいぶん前の話ですが、あの時代にもこんなにすごい映像を作る技術が存在したのですね。

私はこのT-1000が大好きで、技術的目標の一つなのです。それもあって今では3D関連のプログラミングを仕事にしています。見る人を「あっ!!」と言わせるようなものを作りたい!

私以外にも多くのファンを惹き付けたT-1000ですが、この映像を作るためにシェーディングや流体シミュレーションなど色んな技術が使われている事でしょう。今は映画スタッフのような専門の人でなくても普通の人が無料でこのような技術に触れる事が出来るんですよ!そう、Blenderの出番です。

特に今回はT-1000の動きに関係の深そうな流体シミュレーションの技術に触れてみましょう。と、いうわけでBlenderの流体シミュレーション周りのコードを探っていきたいと思います。part1では下準備として、簡単な流体シミュレーションのプロジェクトをBlenderで作っていきます。

とってもお手軽な流体シミュレーションのやり方

( 作り方は気にせず完成したプロジェクトだけ欲しい場合は下にファイルへのリンクがあります。 )

1、オブジェクトの中にオブジェクトを作る都合上、ひとまずWireflame表示に切り替えます。
wireflame

2、デフォルトで配置されているキューブを適当に大きくします。
default
big

3、上記のキューブの内部に新しくキューブを追加して、大きいキューブ内部の上の方に移動します
small

4、さらに障害物となるキューブを追加し、大きさを調整して移動します。
obstacle_perspective
obstacle_frustum

5、ここから物理オブジェクトとしての設定をしていきます。まず小さいキューブを選択してプロパティエディタのPhysicsタブからFluidボタンを押します。
fluid
Typeは「Fluid」を指定します。
type_fluid

6、次に障害物用のオブジェクトを選択して同じようにFluidボタンを押します。Typeは「Obstacle」を指定します。
type_obstacle

7、最後に大きいキューブを選択してFluidボタンを押し、Typeは「Domain」を指定します。
type_domain

8、DomainタイプにはBakeボタンがあるので押します。
bake_button
これで物理計算が走り、進捗は画面上に表示されるプログレスバーで確認できます。時間のかかる処理なので途中でキャンセルしたい場合はxボタンを押しましょう。
baking

9、物理計算が終了した後、アニメーションを再生するとドメイン内で障害物に邪魔されながら水の落ちる様子が確認できます。
playing

今回のプロジェクトファイルのダウンロードはこちら(右クリックでリンク先を名前を付けて保存してください)
ちなみに、上記bakeボタンを押して物理計算が終了すると、このfluidsym.blendと同じフォルダにcache_fluidというフォルダが出来て中に計算結果のキャッシュデータがたまるのですが、このデータはファイルサイズが大きいためここには置かないので上記ファイルダウンロード後にbakeボタンを押してご自身で作成してください。これが無いとアニメーションを再生させても水が落ちません。

プリレンダリングという技術

Bakeには少々時間がかかると思います。MacBook Pro Mid 2014, 2.6GHz intel Core i5で実験しましたが数分待たされました。このようにレンダリングに必要なデータを事前計算しておく事はプリレンダリングという技術に分類されます。ゲームのムービーシーンや映画で使われる技術で、ターミネーターシリーズでも様々なシーンで使われている事でしょう。ゲームのプレイ中にユーザーの操作を動的に受け付けながらレンダリングするリアルタイムレンダリングとはまた違った技術です。Blenderには多くのプリレンダリングの技術が含まれているのでプリレンダリングを研究したい場合は他に無いくらい最適な材料になるかと思います。

今回作ったプロジェクトを使って、part2ではブレイクポイントを張りながらコードを追いかけていきます。それではまた次回。
I'll be back.


@fmystB