This explanation is currently available in Japanese.
ひとことで
粒子を板ではなく立体のメッシュ(小さな 3D モデル)として描く手法です。破片、石、木の葉、硬貨、薬莢など、回転したときに形が変わって見えるもの、光を受けて陰影がつくもの、影を落とすものを表現できます。数百〜数千個の同じメッシュをインスタンシングでまとめて描くことで、実用的な負荷に収めます。
ゲームでの使いどころ
- 破壊表現:岩や壁が砕ける破片、ガラスの破片、木箱の木片。
- 自然物:舞い散る木の葉、花びら、雪の結晶(近景)。
- 報酬演出:あふれ出るコインや宝石。回転して光を反射すると満足感が出ます。
- 戦闘:排出される薬莢、弾け飛ぶ装甲の破片。
しくみ
見た目の違いは、ビルボードとメッシュの性質の違いから生まれます。
| 性質 | ビルボード(板) | メッシュ |
|---|---|---|
| 回転したときの形 | 変わらない(常に正面) | 面が入れ替わって変化する |
| ライティング | 平面的(法線を工夫しないと陰影が出ない) | 面ごとに正しく陰影がつく |
| 影 | 落とさないのが普通 | 通常のオブジェクトと同様に落とす |
| 三角形数 | 2 | 数十〜数百 |
| 向いている距離 | 遠く・小さく・半透明のもの | 近く・大きく・不透明のもの |
メッシュパーティクルの位置・回転・大きさは、粒子ごとの状態から毎フレーム変換行列を作り、インスタンスのバッファに書き込みます。回転は角速度ベクトル から、フレームごとの小さな回転(軸 、角度 )を四元数で掛け合わせて更新します。
実装のポイント
- 形のバリエーション:1 種類のメッシュでも、大きさ・縦横比・色を粒子ごとに変えるとかなり自然になります。数種類のメッシュを用意して混ぜるとさらに良くなります。
- 簡易な物理:地面との跳ね返りと摩擦、回転の減衰だけでも「転がって止まる」説得力が出ます。本格的な剛体物理は近くの大きな破片だけに使います。
- 破片の作り方:元のモデルを実際に割った破片が必要なら、ボロノイ破砕で事前に分割します。
つまずきやすい点
- 数が多いと重い:三角形数 × 個数で頂点処理が増えます。距離に応じて板パーティクルに切り替える(LOD)のが定番です。
- 透明にしにくい:不透明のメッシュは半透明で消すと並べ替えが必要になります。消えるときは縮小するか、ディザで抜くのが一般的です。
- 影のコスト:数百の破片すべてに影を落とさせると、シャドウマップの描画が重くなります。小さな破片は影を切ります。
デモで試すこと
- 「砕く」を押すと、岩が 180 個の破片に砕け、回転しながら飛び散り、床で跳ねて転がります。破片が面ごとに明暗を変え、床に影を落としていることに注目してください。
- 「破片の描き方」を板(ビルボード)に切り替えて視点を回すと、破片が平らな絵のまま回転もせず、影も落ちないことが分かります。
- 「破片の数」を増やしても、インスタンシングのおかげで動作が重くならないことを確かめてください。