ジャンル雑多なゲーム・ゲーム制作関連の色々な情報を取り扱っているブログ。最近はBlenderについてが中心。
[Blender 2.8] 『ボイド』タイプの物理演算 [パーティクルシステム]

[Blender 2.8] 『ボイド』タイプの物理演算 [パーティクルシステム]

[Blender 2.8] パーティクルで群れの動きをシミュレーションする、『ボイド』タイプの物理演算の機能と使い方のご紹介

今回の記事は、Blenderでの『パーティクルシステム』の[物理演算]パネルから設定出来る『ボイド(Boids)』というタイプのパーティクルのシミュレーションについてです。

また、『パーティクル』の基本的な事や基本操作、どんな機能があるのかをざっくりとまとめたページもありますので、そもそもの『パーティクル』についてという基本的な所を知りたい方には、下記記事から御覧になることをおススメします。

※2020年7月19日 加筆修正を行いました。

目次

[ボイド(Boids)]について

[ボイド]タイプのパーティクルシステムは、数種類のAIによって制御されます。

AIでは、基本的なルールと動作に従うようにプログラムでき、「群れ」、「集り」、「追い込み」、または「捕食者と獲物」といった動作のシミュレーションをするのに最適です。

Blender パーティクルシステム エミッター 物理シミュレーション 3DCG ボイド boids ツバメ
[ボイド]を使った群れの表現

また、他のオブジェクトや自分のシステムのメンバーに反応する、といった事も出来ます。

Blender パーティクルシステム エミッター 物理シミュレーション 3DCG 人間
[ボイド]を使って別のパーティクルシステムと戦闘、後、逃避

ボイドは一定量の情報しか処理できないため、[ボイドAI]のルールの順序や並びは非常に重要です。特定の状況では、最初の3つのパラメーターのみが評価されます。

『ボイド』というアルゴリズム自体についてよくご存じない場合、「こーじ様」という方の↓の動画が大変分かりやすく解説してくださっているので、そちらをご覧になることをおススメします。

[ボイド(Boids)]の設定項目

[移動(Movement)]

ボイドは、コリジョンがアクティブになっているオブジェクトを回避しようと動作します。目標のオブジェクトに到達しようとし、[ボイドAI]の設定に従って「捕食者」から逃避します。

ボイドは、空中にいるか地上(コリジョンオブジェクト上)にいるのかによって、物理特性が異なります。

[飛行を許可(Allow Flight)]

ボイドが空中を移動できるようにします。

Blender パーティクルシステム エミッター 物理シミュレーション 3DCG ボイド boids ツバメ
[飛行を許可]

[地上を許可(Allow Land)]

ボイドが地上を移動できるようにします。

Blender パーティクルシステム エミッター 物理シミュレーション 3DCG ボイド boids 人間
[地上を許可]

[登坂を許可(Allow Climbing)]

ボイドがゴールオブジェクトを登る事を許可します。(らしいのですが、どういった場合に使えるのか分かりませんでした。)

[空中の最大速度(Max Air Speed)]

空中での最大速度を設定します。

[空中の最小速度(Min Air Speed)]

空中での最小速度を設定します。

“0”だと、([空中の最大速度]にもよりますが)緩急がついた動きをするのに対し、”1″だと、最初から最後まで最速で動きます。

Blender パーティクルシステム エミッター 物理シミュレーション 3DCG ボイド boids ツバメ
[空中の最大速度: 100]、[空中の最小速度: 0]
Blender パーティクルシステム エミッター 物理シミュレーション 3DCG ボイド boids ツバメ
[空中の最大速度: 50]、[空中の最小速度: 1]

[空中の最大加速度(Max Air Acceleration)]

空気中の横加速度、最大速度(回転)の割合。ボイドが方向を変更できる速度を定義します。

Blender パーティクルシステム エミッター 物理シミュレーション 3DCG ボイド boids ツバメ
[空中の最大加速度: 0.01]
Blender パーティクルシステム エミッター 物理シミュレーション 3DCG ボイド boids ツバメ
[空中の最大加速度: 1.00]

[空中の最大角速度(Max Air Angular Velocity)]

空気中の接線方向の加速(180度との相対的な割合)。

ルールを満たす為に、ボイドが突然加速できる量を定義します。

“0”に設定すると、ほぼ同じ方向にだけ行ったり来たりしていますが、”1″に設定すると、自由に旋回するようです。

Blender パーティクルシステム エミッター 物理シミュレーション 3DCG ボイド boids ツバメ
[空中の最大角速度: 0]
Blender パーティクルシステム エミッター 物理シミュレーション 3DCG ボイド boids ツバメ
[空中の最大角速度: 1]

[空中の各個体の空間(Air Personal Space)]

ボイドの空気中でのパーソナルスペースの半径。

パーティクルサイズに対する割合。

Blender パーティクルシステム エミッター 物理シミュレーション 3DCG ボイド boids ツバメ
[空中の各個体の空間: 1]
Blender パーティクルシステム エミッター 物理シミュレーション 3DCG ボイド boids ツバメ
[空中の各個体の空間: 10]

[着陸時の滑らかさ(Landing Smoothness)]

ボイドがどれだけスムーズに着地するか。

全く同じ動きをしている個体は見つけられなかったので分かりづらいかと思いますが、”0″の方は地面に対しての入射角が水平な方に傾斜しながら着地していて、”10″の方は比較的直前まで垂直な角度のまま着地しているように見受けられます。

Blender パーティクルシステム エミッター 物理シミュレーション 3DCG ボイド boids ツバメ
[着陸時の滑らかさ: 0]
Blender パーティクルシステム エミッター 物理シミュレーション 3DCG ボイド boids ツバメ
[着陸時の滑らかさ: 10]

[地上の最大速度(Max Land Speed)]

地上での最大速度を設定します。

[ジャンプ速度(Jump Speed)]

ジャンプの最大速度。

Blender パーティクルシステム エミッター 物理シミュレーション 3DCG 人間
[ジャンプ速度: 0]
Blender パーティクルシステム エミッター 物理シミュレーション 3DCG 人間
[ジャンプ速度: 10]

[地上の最大加速度(Max Land Acceleration)]

地上での横加速度、最大速度(旋回)の割合。ボイドが方向を変更できる速度を定義します。

[地上の最大角速度(Max Land Angular Velocity)]

地上での接線加速度、(180度との相対的な割合)。

ルールを満たすために、ボイドが突然加速できる量を定義します。

[地上の各個体の空間(Land Personal Space)]

地上でのパーソナルスペースの半径。

パーティクルサイズに対する割合。

[地面に張りつく力(Land Stick Force)]

地上のボイドに影響を与え始めるのに必要な力の強さ。

[コレクションの衝突設定(Collision Collection)]

ここで指定したコレクション内のオブジェクトとのみ衝突します。

[バトル(Battle)]

この項目と関係性の深い、[ボイドAI]ルールの1つの[戦闘]もご参考ください。

[ヘルス(Health)]

生成時の初期ヘルス(健康状態)。

[強さ(Strength)]

攻撃時に発生した1秒あたりの最大ダメージ。

[攻撃性(Aggression)]

ここで設定した回数分、強い敵と戦います。

[精度(Accuracy)]

攻撃の正確さ。

[範囲(Range)]

ボイドが攻撃できる最大距離。

[その他(Misc)]

[傾斜度を付ける(Banking)]

旋回の速度ベクトル周りの回転量。”1.0″である場合は、そのままの効果を与えます。

恐らく「ロール(roll)回転」の事だと思います。

[ピッチ(Pitch)]

横ベクトル周りの回転量。

恐らく「ピッチ(pitch)回転」の事だと思います。

Blender パーティクルシステム エミッター 物理シミュレーション 3DCG 人間
[傾斜度を付ける: 0]、[ピッチ: 0]
Blender パーティクルシステム エミッター 物理シミュレーション 3DCG 人間
[傾斜度を付ける: 1]、[ピッチ: 1]

memo: ロール、ピッチ、ヨー

イメージとしては↓の画像のような場合、人間モデルを赤い線に沿って回転(傾斜)するのが『ロール(roll)回転』、青色の腺に沿って回転するのが『ピッチ(pitch)回転』、緑色の腺に沿って回転するのが『ヨー(yaw)回転』、となります。また、ロール方向の傾斜の事を”bank”と言う事もあるそうです。

Blender 人間モデル roll pitch yaw rolliing 3DCG モデリング 回転
roll(赤)、pitch(青)、yaw(緑)

もっと『ロール』、『ピッチ』、『ヨー』についての詳しい説明は、外部ページ様に丸投げさせていただきますので、そちらをご覧ください。

外部関連ページ: ローリング – Wikipedia

[高さ(Height)]

パーティクルサイズに対するボイドの高さ。

[関係(Relations)]

このリストビューでは、ボイドと反応する他のパーティクルシステムを設定出来ます。

Blender パーティクルシステム エミッター 物理シミュレーション 3DCG 人間

[ターゲットオブジェクト(Target Object)]

ターゲットとなるパーティクルシステムを持つオブジェクト名を指定します(ない場合は同じオブジェクト)。

[システム(System)]

パーティクルパネルのリストビューで設定されたオブジェクトのパーティクルシステムのインデックス。

[モード(Mode)]

  • [友好(Friend)] …連携させます。
  • [中立(Neutral)] …互いに整列したり争ったりすることはありません。
  • [敵対(Enemy)] …システムが互いに争います。

この項目と関係性が深い「[戦闘(Fight)]」もご参照ください。

[ボイドAI(Boid Brain)]

[ボイドAI]パネルは、ボイドパーティクルが互いにどのように反応するかを制御します。

ボイドの動作は、ルールのリストによって制御されます。リスト内の特定の量の情報のみを評価出来ます。ただし、メモリ容量を超えると、残りのルールは無視されます。

ルールはデフォルトでトップリストからボトムリストに解析され、右側の小さな矢印([▲]や[▲])ボタンを使用して順序を変更し、明示的な優先順位を与えます。

[ルール評価(Rule Evaluation)]

ルールの評価方法を制御するには、3つの方法があります。

  • [ファジー(Fuzzy)] …ファジー論理を使用してルールを評価します。ルールは上から下に進みます。[ファジーさ]のしきい値を越えて影響する最初のルールのみが評価されます。この値は、ボイドが指定されたルールをどれだけ厳守しようとするかを考慮する必要があります(値”1″の場合は、ボイドが常にそれに固執することを意味し、値”0″の場合は、固執しないことを意味します)。ボイドが同時に複数競合する条件を満たす場合、ボイドはそれぞれの重みに従って全てのルールを満たそうとします。
  • [ランダム(Random)] …ランダムなルールが各ボイドに対して選択されます。
  • [平均(Average)] …全てのルールが平均化されます。

ファジィ論理(ファジィろんり、英: Fuzzy logic)は、1965年、カリフォルニア大学バークレー校のロトフィ・ザデーが生み出したファジィ集合から派生した多値論理の一種で、真理値が0から1までの範囲の値をとり、古典論理のように「真」と「偽」という2つの値に限定されないことが特徴である。さらにlinguistic variablesは、「ちょっと暑い」というような、言語学的(linguistic)な(と、ファジィの研究者は表現する)ものを表す変数(variables)である(その内容自体は、「気温が摂氏30度の時は 0.2(30度は「ちょっと」ではないから)」「気温が摂氏25度の時は 0.8」「気温が摂氏20度の時は 0.3」といったように、至って定量的なものであり、「言語学的な値」という何かよくわからないフワフワしたものを扱ってくれる魔法ではない)。ファジィ論理は制御理論(ファジィ制御)から人工知能まで様々な分野に応用されている。

引用元: ファジィ論理 – Wikipedia

与えられたボイドは、与えられた各ルールに準拠するために出来る限りの事を試みますが、場合によっては、あるルールが他のルールよりも優先される可能性が高くなります。例えば捕食者を回避するために、ボイドは衝突、分離、及び群れのルールを「忘れる」可能性があります。つまり、指示されていなくても、ほとんどの場合、「パニックになっている間」、障害物にぶつかることがあります。

[空中(In Air)]

現在のルールは飛行中のボイドに影響します。

[地上(On Land)]

現在のルールは飛行していない時のボイドに影響します。

[ファジーさ(Rule Fuzziness)]

ファジー論理を使用してルールを評価する時に使用するしきい値。この値を越えて影響する最初のルールのみが評価されます。この項目は、[ルール評価: ファジー]が選択されている場合にのみ、表示されます。

ルール一覧

[ゴール(Goal)]

割り当てた[オブジェクト]または割り当てた中での最大の信号源へと向かいます。

Blender パーティクルシステム エミッター 物理シミュレーション 3DCG ツバメ
[ゴール]で、”Goal”のオブジェクトをターゲットに指定した場合
[オブジェクト(Object)]

ゴールオブジェクトを指定します。指定しない場合、負の強さを持つ『ボイドフォースフィールド』が目標として使用されます。

[予測(Predict)]

ターゲットの動きを予測します。

[回避(Avoid)]

「捕食者」を避ける動作をします。割り当てた[オブジェクト]または割り当てた中で最大の信号源へと向かいます。

Blender パーティクルシステム エミッター 物理シミュレーション 3DCG ツバメ 人間
[回避]で、人間モデルをターゲットに指定した場合(ワイヤーフレーム表示されているのはコリジョンオブジェクト)
[オブジェクト(Object)]

回避するオブジェクトを指定します。指定しない場合、正の強度を持つ『ボイドフォースフィールド』が「捕食者」として使用されます。

[予測(Predict)]

ターゲットの動きを予測します。

[恐怖係数(Fear Factor)]

危険性がこの閾値を越えている場合は、オブジェクトを避けるようにします。

[衝突回避(Avoid Collision)]

他のボイドやコリジョンオブジェクトとの目先の衝突を回避しようとします。

気持ち(コリジョンを付与した)壁を回避している気がする(?)↓

Blender パーティクルシステム エミッター 物理シミュレーション 3DCG ツバメ
[衝突回避]を設定した場合
[ボイド(Boids)]

他のボイドとの衝突を避けます。

[コリジョン(Deflectors)]

ディフレクターオブジェクト(コリジョンオブジェクト)との衝突を避けます。

[前方確認(Look Ahead)]

先を見る時間(秒単位)。

[分離(Separate)]

他のボイドから離れます。デフォルトでセットされているルールの1つです。

[群れ(Flock)]

隣接するボイド群の中心に移動し、速度を一致させます。デフォルトでセットされているルールの1つです。

[リーダーに追従(Fllow Leader)]

ボイドまたは割り当てた[オブジェクト]に追従します。[ゴール]と似ています。

Blender パーティクルシステム エミッター 物理シミュレーション 3DCG ツバメ UV球
[リーダーに追従]で、赤いUV球をターゲットにした場合
[オブジェクト(Object)]

ボイドの代わりにこのオブジェクトに追従させます。

[距離(Distance)]

追従するリーダーに着く時に、空ける間の距離。

[ライン(Line)]

一列になってリーダーに追従します。

[列の長さ(Queue Size)]

1つのラインのボイド数。

[平均速度(Average Speed)]

平均速度を維持し、飛行もしくは徘徊します。

全体での平均速度なので、ある程度数がいて、ある程度最大速度を速く設定していた場合は、[空中の最小速度]の値を”1″に設定した時のように常にほぼ最速で移動するような動作になります。

Blender パーティクルシステム エミッター 物理シミュレーション 3DCG ツバメ
[平均速度]を設定した場合
[速度(Speed)]

最大速度の割合。

[さまよう(Wander)]

速度の方向をランダム化する速さ。

[レベル(Level)]

速度のZ要素が一定に保たれる量。

[戦闘(Fight)]

近くのボイドに向かって移動し、範囲内で攻撃します。

[バトル]で設定したステータスを基に、[関係]のリストで[モード: 敵対]に設定したパーティクルシステムと戦闘します。勝てない(勝てなくなった)強敵なら逃走します。

Blender パーティクルシステム エミッター 物理シミュレーション 3DCG 人間
[戦闘]に設定した場合

ただし、[関係]リストで[モード]の設定を[中立]か[友好]にした場合は、戦闘しません。

Blender パーティクルシステム エミッター 物理シミュレーション 3DCG 人間
[戦闘]に設定した場合([中立]バージョン)
[戦闘距離(Fight Distance)]

この距離で最大値でボイドを攻撃します。

[逃走距離(Flee Distance)]

この距離まで逃げます。

参考にさせて頂いたサイト・ページ一覧

パーティクルについてのまとめ記事のご紹介

Blenderに関する記事や作品をまとめたページ作りました!

Pocket

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください