パーティクル・軌跡

ビルボード

Billboard

カメラに向けた板で煙や光点を描く。

1 / 10

インタラクティブデモ

デモを準備しています…

ビルボード

ドラッグで視点を回転、Ctrl(⌘)+ スクロールでズーム。タッチ操作は 2 本指です。

ひとことで

四角い板(2 枚の三角形)に画像を貼り、その板の正面を毎フレームカメラの方へ向け直す描画方法です。煙・炎・光・木の葉の遠景など、本物の立体で作ると重すぎるものを、ほとんどコストをかけずに「どの角度から見ても厚みのある物体」に見せられます。パーティクル描画の最も基本的な形です。

ゲームでの使いどころ

  • 煙・炎・爆発・魔法の光:ほぼすべてのパーティクルエフェクトの粒は、ビルボードです。
  • 遠景の木や草:遠くの木を 1 枚の板(インポスター)に置き換えて描画負荷を下げる。
  • UI 的な表示:敵の頭上の HP バー、名前、ダメージ数値、クエストマーカー。
  • レンズフレア・光のにじみ:光源の位置に置く光の板。

しくみ

ビルボードの頂点は、ワールド座標ではなくカメラ空間(ビュー空間)で広げるのが最も簡単です。

  1. 粒子の中心 c\mathbf{c} をビュー空間に変換する:cv=V c\mathbf{c}_v = V\,\mathbf{c}
  2. 板の角のオフセット (±12,±12)(\pm\tfrac12, \pm\tfrac12) に大きさ ss を掛け、ビュー空間の x,yx, y に足す
  3. 射影行列を掛けて画面に出す
pclip=P(V c+s (u,v,0))\mathbf{p}_{\text{clip}} = P\left(V\,\mathbf{c} + s\,(u, v, 0)\right)

ビュー空間の x,yx, y 軸は常に画面の横と縦なので、板は必ずカメラに正対します。回転させたい場合は (u,v)(u, v) を 2D で回転してから足します(煙の渦の表現によく使います)。

用途に応じて、向け方にはいくつかの種類があります。

種類向け方用途
スクリーン整列画面と平行(上の方法)煙、光、火の粉
軸固定(円柱)縦軸は固定し、水平方向だけカメラへ木、草、たいまつの炎
速度方向画面上の速度の向きへ伸ばす雨、火花(ストレッチビルボード)

実装のポイント

  • インスタンシングでまとめて描く:板 1 枚ずつ描画命令を出すと重いので、数千枚を 1 回の描画で済ませます。
  • 半透明の合成:光や炎は加算合成(明るさを足す)、煙は通常のアルファ合成が基本です。アルファ合成では奥から手前へ描く並べ替えが必要になります。境界のにじみを防ぐには乗算済みアルファを使います。
  • 地面への刺さり:大きな煙の板が地面や壁と交わると硬い線が見えます。ソフトパーティクルで和らげます。

つまずきやすい点

  • 板の薄さがばれる:カメラ正対でない(ワールドに固定した)板は、横から見ると紙のように薄く見えます。デモの「ワールドに固定」で確認できます。
  • 真上から見たとき:軸固定のビルボードは、真上から見ると線になってしまいます。見下ろし視点のゲームでは向け方を工夫します。
  • オーバードロー:大きな半透明の板が何枚も重なると、同じ画素を何十回も塗ることになり GPU が重くなります(オーバードロー)。枚数より 1 枚の大きさが効きます。

デモで試すこと

  1. 視点が自動で回っていても、煙は常に厚みのある柱に見えます。これは 70 枚の板が毎フレームカメラへ向き直っているからです。
  2. 「板の輪郭を表示」をオンにすると、煙が四角い板の集まりであることが分かります。
  3. 「ワールドに固定」に切り替え、視点が横へ回ったときの見え方の違いを比べてください。

参考資料

Unity Particle System Renderer ↗

分野全体の資料で、この項目を直接扱っているとは限りません。