パーティクルとエミッター

コンピューターグラフィックでは、雪や雨などの天候、炎や煙、水の流れなどをパーティクルと呼ばれる粒子で表現します。パーティクルは、エミッターと呼ばれる放出装置からはき出されます。放出されたパーティクルは、設定した運動を行います。
パーティクルの放出するタイミング、運動などを設定することで、雪、炎など様々な表現が可能になります。動的で独創的なシーンを構築できます。

パーティクルの使用例

  • 雨、雪。雨粒の大きさや個数、風向き、風の強さなどを設定することで霧雨、横殴りの大雨、吹雪などを表現できます。
  • 炎、煙。工場や銭湯の煙突につけることで活気あるシーンをつくることができます。垣根の曲がり角に煙をくすぶらせれば、たき火ができあがります。
  • 水流。下向きの流れは滝、上向きの流れで噴水が表現できます。
  • 花火。季節の風物詩を表現できます。
  • 自作ビルボード。運動しない1個の粒子と自作テクスチャーを組み合わせて、オリジナルのビルボードを表示できます。

al_colorkey
自作ビルボードの例。

エミッターの種類

部品として提供されているエミッターと、天候を表現する天候エミッターの2種類があります。エミッターの機能は同じですが、天候エミッターは、画面の表示位置に追従して、画面内に雪、雨を降らせます。(レイアウトの一部に雪をふらせたい場合は、エミッター部品を利用してください。)

エミッターの設定

エミッター

 

簡単設定

エミッターは、設定項目が多数あります。簡単設定で雪、雨などを選択すると、必要な設定を自動的にセットします。簡単設定で選択後、OKボタンを押してください。天候エミッターは、天候向けの設定のみ選択できます。(炎などは選択できません。)

雪、雨(天候) 雪や雨など天候エミッター向けの設定です。
炎 炎は、2種類あります。平面で生成するタイプは、平面サイズを小さくすることで炎の範囲を狭くできます。
煙 上に行くほど白くなる煙です。生存時間などを短くすることで煙の長さを短縮できます。
煙 上に行くほど黒くなる煙です。生存時間などを短くすることで煙の長さを短縮できます。
暗い滝 上から下に流れる滝です。暗く表示します。明るく表示する滝を少しずらして重ねることで、表現力が増します。
エミッターは、地面より100mmの位置に設置しています。
明るい滝 上から下に流れる滝です。明るく表示します。下から上に流れる向きをかえると噴水になります。
エミッターは、地面より100mmの位置に設置しています。

詳細設定

テクスチャー:システムに組み込まれているテクスチャーです。

yuki_v5
雪玉
ame_v5
雨粒
(透明度あり)
fire_v5
赤色光
smoke_v5
グレースモーク
smoke2_v5
グレースモークα
(透明度あり)
hanabi_v5
オレンジ光
taki_v5
水流
(透明度あり)

ユーザーテクスチャー:パーティクルにオリジナルのテクスチャーを使用できます。テクスチャーは、bmp画像ファイルまたはpng画像ファイルをレイアウトのリソースに登録してください。ユーザーテクスチャーボタンを押すと、リソースに登録したテクスチャーを選択できます。
※テクスチャーは、64*64、128*128、256*256、512*512ピクセルで製作してください。これ以外のサイズは、ハードウェアに依存します。
※透明度を含むテクスチャーは、png画像ファイルで保存してください。
※RGB=0,0,0は、透明色です。黒色を表現する場合は、RGB=1,1,1を使用してください。
※システムのテクスチャーを選択すると、ユーザーテクスチャーはリセットされます。

パーティクル数:エミッターが生成できる最大数を設定します。最大50000。

エミッター形状:エミッターの形を選択します。

一方向 射出方向に設定した向きに放出します。
全方向 全方向に放出します。
平面下 平面から下向きに放出します。平面サイズを設定します。
平面上 平面から上向きに放出します。平面サイズを設定します。
平面上下 平面から上下に放出します。平面サイズを設定します。
上半球 全方向のうち、上側のみ放出します。
下半球 全方向のうち、下側のみ放出します。
リングXY XY平面に放出します。
リングXZ XZ平面に放出します。
リングYZ YZ平面に放出します。

パーティクルサイズ:パーティクルの1個の大きさです。mm単位です。

合成:合成方法を選択します。

al_normal 通常合成。テクスチャーの色が透明度になります。
al_add 加算合成。炎、光などの表現に使用します。
al_mul 乗算合成。テクスチャーの色が暗いほど、暗く合成します。透明色を使う場合は、pngで透明度を画像に含めてください。
スモーク合成。煙専用の合成です。白くなる煙を表現します。
※透明時間を設定してください。0の場合、表示されません。
al_screen スクリーン合成。加算合成と同じように明るくします。やや明るさがおさえられます。
al_colorkey 透明色合成。RGB=0,0,0を透明色にして合成します。それ以外の色はそのまま表示されます。

平面サイズ:エミッターの形状が平面の時に、大きさをmm単位で指定します。

射出方向:X,Y,Zを入力してください。(OKボタンで単位ベクトルに変換します。)

 

初速:射出時の速度を指定します。mm/ミリ秒で指定してください。(参考:雪は0.15前後)

方向の揺らぎ:0.0から1.0の範囲で入力します。1.0でゆらぎが最大になります。射出時に方向をばらつかせる度合いです。雪で1.0を指定すると、実感的になります。

重力のかかり方:-2.0から2.0の範囲で入力します。1.0で重力が完全に働きます。空気抵抗を考慮して、重力のかかり方を小さめに設定すると実感的です。

風速:パーティクルにかかる速度です。たとえば、Xに設定すると横向きの風で流されます。mm/ミリ秒単位で入力してください。

加速度:移動中にかかる加速度です。1ミリ秒ごとに加算される値を入力してください。

生存時間:パーティクルが消滅するまでの時間です。ミリ秒を入力します。増加分を設定すると、生存時間+(0から増加分までのランダムな時間)で消滅します。

フレームと間隔時間:パーティクルの生成タイミングを決定します。フレームは、1フレーム(画面更新1回分)に発生する個数です。フレームを0にして間隔時間を指定した場合は、一定時間ごとに発生します。一般的なパーティクルは、フレームを指定してください。両方0にした場合は、パーティクル数で指定した個数を一度に生成します。

開始時間と終了時間:パーティクルを生成開始するまでの時間をミリ秒単位で指定します。終了時間に0以外を設定すると生成開始後、終了時間が経過した時点で生成を停止します。

透明時間:パーティクルが透明になるまでの時間です。ミリ秒を入力します。増加分を設定すると、透明時間+(0から増加分までのランダムな時間)で透明になります。透明になっても、パーティクルはデータ上消滅しません。

透明係数:0.0から1.0の範囲で入力します。0.0で不透明、1.0で透明です。透明時間で設定される透明度とは、別個に設定されます。
※透明についての注意
透明度は、テクスチャーの透明度(=アルファチャンネル)、透明時間、透明係数を掛け合わせた値になります。合成の種類によっては、テクスチャーの色も透明度に反映されます。暗くなるタイプの合成では、想定より早く透明になる場合があります。その場合は、透明時間を想定の2倍から3倍の時間にしてください。
透明色は、透明度とは異なる処理です。透明色以外の色が透明度に反映されます。

拡縮時間:拡大、縮小するまでの時間です。拡大は、「拡大する」をチェックしてください。拡大は、指定した時間になった時点で最大4倍になります。拡大率を小さくする場合は、時間を生存時間より長く設定してください。

自動的に開始しない:チェックすると、自動的な生成を開始しません。自動センサー、スクリプトで開始してください。

地面衝突で消滅:パーティクルが地面に衝突すると消滅します。地面で消滅するため、トンネル、地下駅のあるレイアウトでも雪、雨を利用できます。(地面より下でパーティクルを生成しないでください。)

一度だけ生成:一度だけパーティクルを生成します。チェックしない場合は、繰り返し生成されます。

放出時に整列する:花火など規則的な並び方でパーティクルを放出します。平面の場合は碁盤目状に、リングは円周に整列します。一方向、全方向、半球は、整列しません。整列しない場合は、ランダムに発生します。

Zバッファに書き込む:パーティクルを描画するときにZバッファに書き込みます。Zバッファに書き込むと、パーティクルとパーティクルの前後判断が行われます。半透明なパーティクルの場合は、Zバッファに書き込まないでください。Zバッファ法では透明部分が正しく判断されません。
パーティクルの前後判断についてはリンク先を参照してください。)

Zソートを実行する:透明なパーティクルは、Zバッファでは前後判断ができないため、Zソートで前後判断を行います。
パーティクルの前後判断についてはリンク先を参照してください。)

地形に沿って配置:パーティクルを地形に沿って配置します。エミッターの位置に関係なくY座標は自動的に決定されます。エディットボックスには、地形に対する相対座標(mm)を入力してください。(パーティクルの中央が地面の座標になります。人形ビルボードのときは、パーティクルサイズの半分を入力してください。)
この機能で、群衆、樹林、草原などを表現することができます。

landpos

 

車輌リンク時に速度で生成数調整:車輌に部品リンクした場合、車両の現在速度で生成数を調整します。速度が遅いと少なく、速くなると多くなります。

射出方向に部品角度を反映:デフォルトの射出方向は、全体空間の座標系が基準になります。チェックを入れると射出角度を部品のローカル座標系に変更します。車輌に部品をリンクした場合、車体の向きに合わせてリンクしている部品の方向も変化します。ローカル座標系に切り替えることで射出方向が車体の向きに追従します。

ノート

  • 自作ビルボードで人形をつくるときは、1/150スケールでパーティクルサイズを設定してください。
  • パーティクルの発生方向は、エミッタ部品の向きに関係なく計算されます。
  • 車両、ストラクチャーとの衝突チェックは行われません。パーティクルは通過します。
  • パーティクルとパーティクルが重なった場合、前後判断ができないため、前後が入れ替わって表示される場合があります。パーティクルとガラスも同様に前後判断できません。(Zバッファ書き込み、Zソートを適時使用してください。詳細はリンク先を参照してください。)
  • パーティクルは影がかかりません。また、影は発生しません。
  • 実用上同時に処理できるパーティクル数は、CPUの能力に左右されます。CPUキャッシュより多い個数になると処理速度が一気に低下します。
    (1エミッタあたりCore i7で50000個が目安です)
  • パーティクルは、半透明で表示するためライティングと関係なく表示されます。(=ライト演算なしポリゴンで処理されます。)夜間や暗がりのビルボードには、ペイントツールで暗くしたテクスチャーを使用してください。(事前にテクスチャーに明るさを反映することでライト演算を省略します。)

こんな時は?

[簡単設定で設定してもパーティクルが生成されない]
雪、雨、滝は、エミッタが地面に接触しているとすぐに衝突と判定されます。エミッタを地面より上に持ち上げてください。エミッタを選択して、オプションで高さを固定、高さを入力します。

[自作テクスチャーが表示されない]
画像が正方形か確認してください。また、一辺の大きさが64、128、256、512のいずれかになっているか確認してください。
画像フォーマットが、BMP、PNGか確認してください。24ビットフルカラービットマップか確認してください。(PNGは、アルファチャンネルを利用可能です。)

カテゴリー: 基本テクニック パーマリンク