ひとことで
粒子の長軸(向き)を、進んでいる方向(速度ベクトル)に合わせる手法です。細長い粒子が流れの向きを指すので、風や水流、渦の形が一目で読み取れるようになります。ストレッチビルボードが画面上での伸ばし方なのに対し、こちらは 3D の向きそのものを速度に合わせる考え方で、メッシュパーティクルにも板にも使えます。
ゲームでの使いどころ
- 竜巻・つむじ風:巻き上げられた木片や葉が渦に沿って流れる。
- 雨・雪の吹き付け:風に流される雨粒が斜めに向く。
- 魚群・虫の群れ:個体の向きを進行方向に合わせる(ボイドの描画)。
- 矢・槍・破片:放物線を描いて飛ぶ矢の向きを常に接線方向へ。
しくみ
粒子の基準となる前方向を (例えば )とし、速度 の単位ベクトル へ回す回転(四元数)を求めます。
これは回転軸 、回転角 の回転です。これだけでは長軸まわりのねじれ(ロール)が決まらないので、必要なら「上方向」も指定して姿勢を完全に決めます(lookAt と同じ考え方)。
さらに、速さに応じて長軸方向に伸ばすと、ストレッチビルボードと同様に速度感が出ます。
実装のポイント
- 速度が 0 に近いとき:向きが決まらず、ぶるぶる震えます。速さが閾値以下なら前フレームの向きを保つか、向きを滑らかに補間します。
- 向きの急変を和らげる:速度の向きが急に変わると粒子がパッと回転します。回転を球面線形補間で追従させると自然です。
- GPU での計算:GPU パーティクルでは、頂点シェーダー内で速度から基底ベクトル(前・右・上)を作り、頂点を変換します。
つまずきやすい点
- 真上・真下への速度:上方向ベクトルを固定して姿勢を作る方法では、速度がその上方向と平行になると外積が 0 になり、向きが不定になります。
- 遅い粒子まで整列させる:ほとんど止まっている粒子を無理に整列させると不自然です。速さに応じて整列の強さを変えることもあります。
- ランダム回転との組み合わせ:葉のようにひらひら回るものは、完全な整列よりも「整列 + 長軸まわりの回転」のほうが自然です。
デモで試すこと
- 「粒子の向き」をランダム(固定)に切り替えると、同じ速度で渦を巻いているのに、木片が散らかって見え、流れが読み取れなくなります。
- 速度方向へ整列に戻すと、木片が渦に沿って並び、竜巻の回転がはっきり見えます。
- 「速さに応じた伸び」を上げると、外側の速い木片ほど長く伸び、勢いが強調されます。