crowdツール共通のブレインの考え方 ~デザイナーでもわかる群集入門~
2013/12/2
[あいさつ]
crowdTDの 護守(ごのかみ) です。
めっきり寒くなってきましたね。
今年も残るところあとわずか。師走ですよ。師走。
今回も『プロシージャルシリーズ』です。
といいつつ何を書こうか迷ったのですが、
寄稿3回目にしてようやく群集について書いていこうと思います。
第一回:プロシージャルアニメーションで簡単カット作成
第二回:プロシージャルでライトニング(稲妻)
群集ツールはMassive, Miarmy, Golaemとありますが、
今回はツールに依存しないようなブレインの考え方について書いていきます。
デザイナーの方でもわかる入門編なので、肩の力を抜いてみていただければと思います。
[ブレインってなに?]
群集をコントロールする上で必要になってくるものがあります。
それが「ブレイン」です。
直訳すると「脳」です。
わかりやすい言葉に変えると「AI」というところでしょうか。
「AI」といっても自己学習型ではないので、
あらかじめ[状況]と[対応]を入力しておく必要があります。
「if文での分岐」と書けばわかる方もいるかもしれません。
(もちろん全部ifで直書きしてるわけではないですが。)
インプットがあって、それに伴ってアウトプットがされます。
プロシージャルの典型的なものと言ってもいいかもしれませんね。
一般的にわかりやすくするために
信号について考えてみましょうか。
信号は、
赤=止まれ 青=進め(進んでOK)
という合図です。
つまり、信号の色が赤のとき(インプット)、止まる(アウトプット)。
信号の色が青のとき(インプット)、進む(アウトプット)。
ということなんですね。
インプットがあることでアウトプットが決まってくる。
この流れがプロシージャル(手続き型)と呼ばれています。
こういったルールをあらかじめ入力しておいたもののことを
総じて「ブレイン」と言っています。
(クリックで拡大)
[ブレインを作ってみよう]
いきなり実践編です。用意するソフトウェアはMayaだけです。
MassiveとかMiarmyとか必要ありません。
今回は、「ドアが開いたらドアをくぐる」というブレインを作ってみましょう。
まずsphereとcubeを作ります。
cubeは扉っぽくしておきましょう。(translateZ=3, scaleX=3, scaleY=2, scaleZ=0.5)
便宜上sphereをtaro、cubeをdoorという名前にしておきます。
さて、ブレインの構想を練ります。
「ドアが開いたらドアをくぐる」のに必要な行動を分解していきます。
まずは、インプットとアウトプットをはっきりさせます。
この場合ifにあたる「ドアが開いたら」というのがインプットにあたります。
そうすると、必然的にアウトプットは「ドアをくぐる」になります。
しかし、これだけではインプットの情報としては不十分です。
というのは、どういった状況のとき「ドアが開いた」と認識するかが欠けているからですね。
この場合で言えば、特に条件が提示されていませんので、
ブレインを作る側、つまり、自分が最も適切だと思う方法を考えます。
ここでは、あまり複雑にしたくないので「doorが上に上がったとき」に「ドアが開く」としましょうか。
が、これでもまだ不十分です。
もし、これを条件にしてしまうと、
doorが地面より少しでも浮いたらtaroはくぐろうとしてしまいます。
ドアにぶつかるのにお構いなしに貫通して進むということですね。
もしかしたらそんな人がいるかもしれませんが、
ここでのtaroは物理法則に従うtaroです。
なので貫通しないようにします。
くぐれる=自分の身長までドアが開かないと進まない
ととることができますのでこれを条件とします。
自分の身長の半分まできたら屈んでくぐってもいいのに、
屈んでくぐらないのがtaroです。
そんな横柄なtaroですが嫌わないであげてください。
これでインプットが決まりました。
あとはアウトプットです。
進むだけなので、「正面に進む」という行動でいいでしょう。
ここまで来たらあとは打ち込みです。
エクスプレッションエディタを立ち上げて、新規エクスプレッションを作ります。
名前はsusume_taroとでもしておきますか。
if (door.ty >= 2.0){ //door.tyがdoorのy軸の高さ、2.0がtaroの身長 taro.tz += 3; //taroの進む速さ } if (frame==1){ //フレームを1にするとtaroの位置をリセット taro.tz = 0; }
タイムラインのエンドフレームを1000フレームと多めにとっておきます。
メニューをDynammicsにしてSolvers > Interactive Playback
で再生します。
doorを選択して、doorをtaroの身長以上に上げるとtaroが走っていきます。
(クリックで再生)
私の作ったtaroは横柄な癖にせっかちなので、
ドアが開くと同時に一瞬で駆け抜けます。
ゆっくり通過させたいときはtaroの進む速さを遅くします。
ちなみに
taro.tzをtaro.tyに変えると、taroは星になります。
(クリックで拡大)
ムチャシヤガッテ…
taroの身長(yスケール)を変更したときには、それに合わせて毎回エクスプレッションを変えないといけません。
それはとても面倒なので、
if (door.ty >= 2.0){
を
if (door.ty >= taro.sy * 2.0){
とします。
こうするとよりプロシージャル!
あなたなりのtaroをLet’s カスタマイズ!
というわけで、「ドアが開いたらドアをくぐる」というブレインができました。
ここでは「ドアが開いたらドアをくぐる」だけの行動のためにも
細かく考えないといけないということが理解できればと良いと思います。
より複雑になればその分だけこの作業は膨らみます。
ブレインを考えていく部分は大変なんですが、これを乗り越えて
シミュレーションするときがすごく楽しいんですよね。
この実践例みたいに自分の頭の中に設定を決めてやると
また違った楽しみがあるかもしれません。
[おわりに]
今回私がお伝えしたかったことは、ブレインを作る際には、
「行動の条件を具体的なものに落とし込むための
考え方・捉え方が基本的で大事」
ということです。
実際にブレインを組む際はノードベースで組んでいったりするので
これほど大変ではありませんが、
ノードベースだろうとエクスプレッションだろうと考え方は一緒ですから
押さえておくべきところということですね。
さて、一体為になったかどうかわからない話でしたが、
参考になりましたでしょうか?
デザイナー側がここらへんを理解していくと
より視野が拡がっていくのではないかと思います。
また、視野が拡がるだけでなく、プログラマとも連携とりやすくなるので
押さえておいて損はないですね。
それでは今回はこのへんで(:3ノシ )ヘ
※免責事項※
本記事内で公開している全ての手法の有用性、安全性について、当方は一切の保証を与えるものではありません。
これらの手法を使用したことによって引き起こる直接的、間接的な損害に対し、当方は一切責任を負うものではありません。
自己責任でご活用ください
[…] crowdツール共通のブレインの考え方 ~デザイナーでもわかる群集入門~ […]
Posted at 2014.06.9 12:03 by デジタル・フロンティア-Digital Frontier | DF TALK | crowdツールチュートリアル ~Miarmy入門!~