2012年12月1日土曜日

「TPで障害物を避ける」を一旦まとめてみた。

ちょいちょい忙しくて、久々更新です。

以前にも、障害物を避ける件については、チョコチョコ記事にしていたのですが、キリいいところまで来たので一旦まとめようと思います。

まず、基本的な考え方はJoe Scarr氏のDVDを参考にしています。SquirlArt CROWD SETUPS項目ですね。ご覧になった方は、わかると思うのですが、非常に複雑かつエクスプレッションが頻繁に使われ難しいです。

ですが時間をかけて、チュートリアルを進めるうちに、ある程度つかめてきました。
そして、0から自分でセットアップしてみました。 
結果は、本家と比べ、大分オレオレ設定になってしまいました^^
注意点として、今回上記のチュートリアルの項目全てを取り入れたわけではありませんが大枠は捉えることができたのかなと思っています。
残りは次回にでも記事にできたらなと思います。

では、一つ一つメモする感じで説明していきたいと思います。

はじめに動画をご覧ください↓↓



では、順々にやっていきます。

このシステムの設計書を適当に文字や図で紙に書く。

みなさん、実際やっていますか?^^
あまり大きなシステム作ったことないのであれですが、自分は苦手です。
実際手で動かさないとわからないこともあるし。。
とりあえず、形的にやってみましたって感じです。

①を元にとりあえず必要なデータ、グループをつくってみた。

プログラマっぽく、グローバルデータをメモリノードに入れてみたw
グループは、はじめから画像のように整理されていたわけではない。後から、このように整理した。










StartPointからGoalPointまで、パーティクルを移動する。



大きくは↓↓の記事を元に動かしています。
----こちら-----


設定画像↓



















ちなみに、水色枠の角度を求める方法かなり使えますので抑えておいたほうが吉!

障害物を避ける

ここからが、個人的には面白いかなと思います。
やっている事としましては、ある条件を元にサンプルとなるパーティクルを発生させて、それに向かってObjは進行方向を変えるというようなことを行っています。
ちょっと、複雑になりそうなので、さらに見出しを分解してみて行きたいと思います。

1、障害物をサーチします

ある距離になると、障害物をサーチする設定です。サーチした情報はメモリに保存しておきます。










2、障害物を避けるための方向を取得するためにTargetPointを作成します。

1で、サーチした情報を元にTargetPointを作成します。
このTargetPointの作成方法は、こちらを元にしています。
リンクの設定では、同心円状にパーティクル(TargetPoint)を配置しています。
今回は、横一列にパーティクル(TargetPoint)を配置しています。
この違いは、前者が左右、上下に障害物を避けれるように設定できるのに対して、 後者は左右だけです。今回は左右だけでとりあえず進めました。



 











注意点!!TargetPointを取得できたら、ObjはグループをObj GoToGoalからObj Avoid Obstractに変更しています。理由は、進むべきターゲットが変更したのでデータを扱いやすくするためです。後に説明しますが、避けるのを達成できたら、もう一度Obj GoToGoalグループに戻るように設定しています。

3、Objの向きを、2のTargetPointに置き換えます。つまり、障害物を避ける設定です。そして、避けたらGoalへと再び向かいます。

















肝となるのが上記の画像に記しているように、再びGoalに向かわせる条件をどうするのかということです。

障害物をサーチした情報をリセットする。

 





④-1で、Obj GoToGoalグループがbool(on)になったままですので、リセットします。
これをリセットしないと、 ④-3で避けて再び戻ったObj GoToGoalはbool(on)になったままですので、毎フレGuideパーティクルが作られます。

Objにシェイプと向きを与える 。










終了~。

0 件のコメント:

コメントを投稿