飛び散る粒子
![]()
![]()
![]()
・パーティクル
particle〈名〉(〈複〉〜s[〜z]) 1 微小な粒; 微量,極少量. 2 《物理》粒子.
ゲームにかまけて間が空いてしまいましたが、今回はパーティクルについてです。パーティクルは、ポリゴンでは表現できないような粒子の集まりによって形成される物を表現します。煙や花火、炎や爆発などがそうですね。
詳しい物理的な話は他の本やホームページに任せるとして(書く書かない以前に自分も知りたい)、いつもどおり見え方や使い方に着目してみます。
それにしても中学生程度の物理の知識さえもう忘れたなぁ……。重力の加速度とかどう計算するんだったっけか。
あとパーティクルの解釈が間違ってるかもしれませんので、疑ってかかってください。間違いの指摘は掲示板かメールで。
・って何?
パーティクルというとなんだかたいそうな物に聞こえますけど、とっても簡単。
一つの粒がある位置から飛んだとします。それは斜め上向きに飛びました。その粒は次第に重力によって落ちていき、ある程度の時間が経った時その粒は消えました。これがパーティクル。数多くの点がある位置から飛んだとします。それらはいろいろな方向に飛びました。その点は壁に当ると跳ね返ります。これもパーティクル。
数多くの粒子がある規則(重力や空気抵抗など)にしたがって動く、それがパーティクルです。普通パーティクルは何かの物理を正確にシミュレートするので、なんかパーティクルというといろいろとやらないといけないように聞こえますけどね。
やり方も、難しく考える必要はありません。飛んで、落ちて、消える。それをいっぱいやるだけ。パーティクルが綺麗に見えるかは、数と動きそして粒子の形によりです。
パーティクルを使っている人のほとんどは、パーティクルを知らないと思います。それくらい簡単です。
普通、パーティクルの描画にはビルボードを使うと思います。ビルボードについては次回の「ビルボードのいろは」で説明するつもりです。
・散れ!
どんな動き・描画の仕方をするかでパーティクルの用途は違ってきます。
火花
高速、重力で落ちる、すぐ消える。モーションブラーをかけた方がそれっぽいかも。粒子は小さく、数はそれなりに。加算合成の方が綺麗。花火
重力でゆっくり落ちる。初速度は速くても、空気抵抗によってゆっくりになる。数は多めに。水飛沫
あぁ、これで”みずしぶき”ね。普通に飛び出して普通に落ちる。粒子はちょっと大きめで、色は白。半透明で描画すると自然。泡
水に飛び込んだ時や、服を着たまま水中で動いた時に出る大量の泡も、パーティクルで可能。ゆっくり上がっていって、水面で破裂・消滅。まっすぐ上がっていかないのが特徴。泡同士合体とかもする。風に舞う葉
ここまで来るとこじつけっぽいが、これもパーティクル。ゆっくり上がっていく。拡散しながら消えていく。正確に動かしたいなら物理の本を参照。粒子はかなり小さく、数はかなり多く。リアルタイムにやるのはちょっと……。煙
ゆっくり上がっていく。拡散しながら消えていく。正確に動かしたいなら物理の本を参照。粒子はかなり小さく、数はかなり多く。リアルタイムにやるのはちょっと……。炎
物理の本読んでください。リアルタイムにやるのは無謀。その他
別に実際の動きを真似るだけがパーティクルではない、ということで、挌闘ゲームのヒット時のエフェクト、魔法を使う時のエフェクトなどによく使われています。火花が飛び散ったり、巻き上がるような動きをしたり。
煙のように、粒子の数が多いと処理が重くなります。そのため、普通煙にパーティクルは使わずテクスチャを使いますよね。
・先にテクスチャで
数多くのパーティクルを動かすと、処理が多くなり速度が落ちます。そこで、ある程度のパーティクルをテクスチャにして、ポリゴンで一まとめに表示するという方法があります。滝、火花、煙、爆発など……。
ちょっとテクスチャ作りが苦手なもんで、例の画像が無いのが辛い所ですが。誰か綺麗な煙のテクスチャ下さい……。
代わりに、これをやればその重要性がわかる!というゲームをば。
滝:ゼルダの伝説(N64) 水飛沫:ゼルダの伝説(N64) 噴水:パイロットウィングス64
火花:FーZEROX(N64) 煙:FーZEROX(N64)全部任天堂の64のゲーム……。いや、でもほんとにためになるんですって。
例えば、滝。よくPCのゲームでもテクスチャで滝をやってますが……あれじゃ駄目。ポリゴン数をケチった結果動きが全然リアルじゃない。水が等速で落ちるか!(←これ重要。)ゼルダの滝は、ちょっと工夫しただけでよりリアルになってます。マルチテクスチャも使ってるぞ!
煙。インカミング(PC・DC)のミサイル発射時の煙が良いです、やっぱりテクスチャアニメーションを使うと綺麗ですね〜。……しかし、F−ZEROXでマシン爆発後の煙を見てください、テクスチャの作り方はインカミングより単純な方法なのに(元の画像をぼかすだけ)、あれだけ自然!やっぱりアニメーションするなら滑らかさは重要ですよね。
以上、大体の人が64持ってない事をいい事に大袈裟に書いてみました。”!”使いまくってるし。でもほんとにこう言えるだけうまい使い方してますよ。身近に64持ってる人がいたら借りて見てください。……いないか。安いから買うのも可。本体が1万円ちょっとだし。
煙のテクスチャを作ったor貰った時にはちゃんと書き直します。滝のテクスチャは作れないなぁ……。水飛沫や火花は説明が簡単なので、ちょっとやってみましょう。
中心から全てのパーティクルが同じように動く。例えば初速度や方向はそれぞれ違えど、速度の変化は全て同じ。パーティクルの形はそれぞれ単純だが、数は多い。
パーティクル数が多いのでそれぞれの処理に時間を食ってしまいます。このような場合は、以下のように一枚のテクスチャにしてしまいましょう。
真ん中から飛び散った
パーティクル。静止画
だとそう見えない……→
それをまんま
テクスチャ化するこれを、ポリゴンとして描画。最初は小さい状態で、そこから拡大させると見事パーティクルが散っていくように見えます。粒子の大きさが違ってきますが、これはパレットを変化させる事で解決します。
散ってから少しの時間。
パレットを変えて粒子を
大きく。ポリゴンは小さく→
パレット変えて
粒子を少し小さく。
ポリゴンは次第に大きく→
粒子は元の大きさ。
以上、パーティクルが
散っているでしょ?パレットの変更を使えば、どんな色だろうと可能です。パーティクルが引力の影響を受けないなら、モーションブラーだってかける事ができます。あと消える時間もそれぞれ別にできたりしますね。
Direct3Dだとパレットを使ってたテクスチャを生成できないハードもあります。そういう場合はどうしたらいいでしょう?答えは、αビット付きテクスチャ+αテスト。パレットよりやれる事は少なくなります。パレットが使えない時だけそうするようにしてもいいですね。
この方法がF−ZEROXやゼルダの伝説に使われています。ちゃんと引力の影響を受けてパーティクルが落ちます。欠点は、カメラの回り込みに弱い事。全てのパーティクルが一つのビルボードを使ったポリゴンにまとめられてしまうので。まぁ出てからすぐに消えるのがほとんどだと思うので、あまり気にならないと思いますけどね。
煙突から出るような煙は、パイロットウィングス64でやってます。もっと見た事があるような例なら、F−ZERO(SFC)のコースアウト時の煙、あれも一応パーティクルを大まかにまとめてやってますよね。
実際に動いている所を見たいなら”擬似パーティクル”を見てください、↑の例の発展版みたいな感じです。、3DFC98Fallで、SANDMANさんが発表された内容の一つが”擬似パーティクル”でした。詳しくはSANDMANさんのホームページの98/10月分の独りごとを見てください。僕は実際には3DFCを見に行ってないので、そのページを読んだだけですが。
ゲームのせいで時間が無くて、結局書きなぐりな文章になりました。でも次はかなり使えることを書くつもりです。……と言っても、一旦実家に帰るので、次回の更新までは間が空くと思われますが。
![]()
![]()
![]()
written by Y.Ohde e-mail : oode@alles.or.jp