ひとことで
粒子の板を、画面上の速度方向へ引き伸ばして描くビルボードの一種です。1 フレームの間に動いた距離ぶんの残像を 1 枚の板で表すため、雨粒や火花、弾丸の軌跡、ワープ時の星などに「速さ」を与えられます。粒子に対する安価なモーションブラーと考えることもできます。
ゲームでの使いどころ
- 雨・みぞれ:丸い点では「空中に浮いた粉」に見える雨粒が、縦に伸ばすだけで降っている雨になります。
- 火花:溶接、金属同士の衝突、銃撃の着弾で飛び散る火花。
- スピード表現:ワープ中の星の筋、ダッシュ時の集中線、高速の弾。
- 衝撃波の破片:爆発で放射状に飛ぶ細かい破片。
しくみ
通常のビルボードは板の縦横を画面の x, y 軸に合わせますが、ストレッチビルボードは画面上の速度ベクトルを板の長軸にします。
- 速度 をビュー空間へ変換し、画面上の成分 を得る。
- 長軸 、短軸はそれに垂直な 。
- 長さを速さに比例させる:( は粒の太さ、 は伸び率)。
- 板の角 を に置き、先端が粒子の位置、尾が速度と逆向きに伸びるようにする。
伸び率 を「1 フレームの時間」や「シャッター速度」とみなせば、モーションブラーの近似として物理的な意味を持たせることもできます。
実装のポイント
- 向きの符号に注意:長軸と短軸の組み合わせが左手系になると、板が裏返って背面カリングで消えます。デモの開発中にも実際にこの不具合が起きました。
DoubleSideにするか、軸の向きをそろえます。 - カメラの動き:ビュー空間の速度を使うので、カメラ自体が動いたときの見かけの速度は含まれません。カメラの動きも反映したいなら、前フレームの画面位置との差を使います。
- テクスチャ:丸いぼかし画像でも、伸ばすと自然に細長い光の筋になります。専用の筋テクスチャを用意すると先端と尾の明るさを変えられます。
つまずきやすい点
- カメラ方向に飛ぶ粒子:カメラへ向かって(または遠ざかって)飛ぶ粒子は、画面上の速度が 0 に近く、伸びずに点になります。これは正しい見え方ですが、筋が消えることを想定しておきます。
- 伸ばしすぎ:伸び率が大きすぎると、粒子が実際にはいない場所まで線が伸び、壁を突き抜けて見えることがあります。
- 止まった粒子の向き:速度 0 では向きが決まりません。上向きなど既定の向きを用意しておきます。
デモで試すこと
- 「粒子の形」を通常のビルボードに切り替えると、同じ速度で飛んでいる火花と雨が、ただの点の集まりに見えます。
- 「伸びの強さ」を上げると、火花の筋と雨の線が長くなり、速さの印象が強まります。
- 床で跳ね返った火花は速度が落ちるので、短い点に近づいていく様子を観察してください。