皆さんは「動物の動きをPC上でシミュレーションしてぇなぁ~」と思ったことはありますか??僕はあります笑
今回は,そんなお悩みを解決してくれる「Boids Algorithm(ボイド アルゴリズム)」について超ざっくりと解説していきます!
僕はこの,Boids Algorithmを用いることでどこでも手軽に楽しめる金魚すくいを作りました笑
詳細は以下の記事にも書いてます👇 👇 👇
なお,この記事の目標は「読んだら動物の動きをPC上で再現できるようになる!」ではなく
「読んだらなんとなく動物をどうやって動かしているのかのイメージが湧く」ぐらいのレベルです笑
本記事では,まずBoids Algorithmとはどういうことを解決するためのアルゴリズムなのかという,簡単な概要を紹介した後にどういう処理で動物を動かしているのかを説明していきます!
Boids Algorithmってなに?
Boids AlgorithmのBoidsは,Wikipediaによると
名称は「鳥もどき(bird-oid)」から取られている。
https://ja.wikipedia.org/wiki/%E3%83%9C%E3%82%A4%E3%83%89_(%E4%BA%BA%E5…
らしいです笑
まず,動物の動きをシミュレーションしようと思った際に,ターゲットとなる動物には以下の2種類が存在すると思います.
- 単独で行動している動物
- 群れで行動している動物(鳥,魚など)
Boids Algorithmで再現できるのは後者の動物となります.
Boids Algorithmの元論文はこちらから読むことができます!
https://team.inria.fr/imagine/files/2014/10/flocks-hers-and-schools.pdf
REYNOLDS Craig W, "Flocks, herds and schools: A distributed behavioral model.", Proceedings of the 14th annual conference on Computer graphics and interactive techniques, pp.25-34, 1987.
Boids Algorithmでは,厳密な動物の行動再現を行うわけではなく,群れの中のそれぞれの個体にルールを持たせて,そのルールに基づいて移動させることで,あたかも群れ全体が精密にシミュレーションされて動いているように見えるというところをゴール地点にしています.
それでは,そのルールを見ていきましょう!
Boids Algorithmのルール
Boids Algorithmで各個体に適用するルールには以下の3種類があります.
- 分離(Separation)
- 整列(Alignment)
- 結合(Cohesion)
たったこれだけの要素を群れの全個体に組み込むだけで,群れ全体としての動きをシミュレーションできるんですからビックリですね!簡単!
上記3種の詳しい実装方法については以下のQiitaの記事でも紹介してくれています.
https://qiita.com/kure/items/2638de370974a791756a
それでは,上記3種類のルールがどういったものなのかを簡単に紹介させていただきます!
分離
分離では,ある個体が他の個体に近づきすぎた場合,回避するような動きをします.
整列
整列では,ある個体が群れ全体の向きと,移動速度に合わせて移動します.
結合
結合では,ある個体が群れの中心に向かって移動します.
追加機能
上記3種類のルールを全個体に適用するだけで,群れがそれっぽく動きます!
Boids Algorithmの凄いところは,この3種類のルールの強さを調節することで,様々な種類の動物に適用することができる点です笑
さらに,簡単なアルゴリズムを使っているため,拡張性の高さも魅力的です.
例として,金魚の動きを考えてみましょう.Boids Algorithmを適用した群れは,常に形を変えながら動き続けることになります.しかし,金魚をよく観察してみると,別に常に泳ぎ続けているわけではなくて,たまに泳ぐのをやめて休憩している個体もいますよね…?
そこで,3種類のルールの他に「停止」という4種類目のルールを追加することで,より金魚らしい動きにすることも可能です!
まとめ
Boids Algorithmを使って,動物の群れの動きをシミュレーションする方法について,簡単に紹介させていただきました.
Boids Algorithmでは,3種類のルールを群れの全個体に適用することで,簡単にそれっぽい群れの動きをシミュレーションできます!
また,ルールの強さを調節したり,新たなルールを追加したりすることで様々な動物に適用することができます!!
みなさんもぜひ挑戦してみてください笑