boidscap

Unityでの群行動アルゴリズムを使った演出を考えてみる

こんにちは。Unityがだんだん好きになってきた小井です。

今回は「Unityでの群行動アルゴリズムを使った演出を考えてみる」と銘打っていますが、主に扱うのは群知能アルゴリズムをUnityに移植して遊んでみた記録になります。

群知能 – 人工知能技術の一つで自然界の例として、鳥の群れ、動物の群れ、魚の群れなどの再現を行うのに非常に優れた考え方の一つです。主だって使ったのは基本的なVector3計算とRigidBody,Quaterianという基本項目だけになってしまうのですが、Unityのプログラムを組みに当たって非常に重要な項目を多く含むと思われたため頑張ってみました。
群知能アルゴリズムと聞くと流行りの機械学習系かと思う方もいらっしゃるかもしれませんが、そうではなく基本的なルールをいくつか設定することで複雑でエレガントな演出が実行されます。

そのルールとは・・・

ルール1
鳥オブジェクトは、自分以外の鳥オブジェクトと一定の距離を保つ。

ルール2
鳥オブジェクトは、自分の属する群れと同じ方向に向かって飛ぶように向きと速度を常に調整する。

ルール3
鳥オブジェクトは、自分の属する群れと離れすぎないように群れの中心に向かって進む。

基本的なルールは上記の3つになるのですが、製作者のセンスといいますか、幾つかの別ルールを追加しても面白い動きを見せてくれます。前置きが長くなりました。記録した動画を用意しましたので見ていきましょう。

[Unity] Boids 3D


ルール1から3までをそのまま組み込んだものがこちらの3Dモードです。今回は視認しやすいよう軌跡を描いています。
簡単なルール3つだけで何か意志を持ったかのような動きが見て取れますね。

今回Boidsを作るにあたって、2つのバージョンでスタディを進めています。一つは物理的な衝突判定を前提としたモード。
そしてもう一つは衝突判定を考慮しないモードです。Boidsの特性上、鳥同士が衝突するということは少ないのですが、ゲームエンジンの一つとして組み込んだ場合他のオブジェクトとの衝突判定があった方が総合的に使いやすいと思われたので両方のモデルで製作しています。ただ、2つのバージョンといっても基本となるアルゴリズムは前述した3つのルールを組み込んでいるため同じ処理になります。

[Unity] Boids 2D


3Dバージョンを作ったのはいいのですが、ディスプレイの中で3Dを扱うとユーザーの情報取得難度が上がり、よくわからない!ということも多くあります。そこで2Dバージョンに調整を行いました。気づいてはいましたが・・・平面的な情報の方がよくわかりますね。それぞれの鳥はお互いの距離を適切に保ちつつ、他の群れと遭遇した場合はお互いに影響を及ぼしあいながら進行を繰り返している様子がわかります。

動きを組み込んだ後のブラッシュアップ項目の一つに必ずと言っていいほど処理負荷の軽量化が挙げられますが、
最初挙げた3つのルールの見直しや、Unity上でのプログラムの最適化などを行えばさらに数倍効率的に動くのではないでしょうか。

基本的な動きのパターンが出来たところで、このプログラムが何に使えるかという点ですが、比較的柔軟に使えるような気はしています。鳥や動物の群れ、魚群、飛行機の編隊飛行にもうまくやれば対応できるかもしれません。

[Unity] Boids Zombi


このアルゴリズムをつかってゾンビの群れを操ってみました。実際に使うとなれば、例えばゾンビの周辺にプレイヤーがいた場合は、その群れに属するゾンビが一斉に襲ってくる!といった展開がまず考えられるかと思います。ちなみにVRにも移植してみたのですが、これかなり怖いですね!!

Unityといえばアセットストアを使って効率化してみたいなスタイルが主流かと思いますが、時々こういったアルゴリズムを触ってみて楽しんでみるのもいいのではないでしょうか。