主なパラメータ
| グループ | パラメータ | 役割 |
|---|---|---|
| 位置 | position_x, position_y |
発生中心です |
| 範囲 | shape, radius_x, radius_y |
点から出すか、円範囲から出すかです |
| マスク | mask_threshold |
発生マスクのどのアルファ値以上を有効領域とみなすかです |
| 時間 | start_frame, end_frame |
何フレーム目から何フレーム目まで出すかです |
| 発生量 | rate, burst |
毎フレームの発生量と、開始時の一括発生量です |
| 方向 | direction_deg, spread_deg |
基本方向と広がり角です |
| 初速 | speed_min, speed_max |
出た直後の速度範囲です |
| 寿命 | life_min, life_max |
何フレーム生きるかです |
| 見た目 | size_min, size_max, alpha_min, alpha_max |
粒子サイズと濃さの範囲です。サイズは FxRasterize 側の size_scale と組み合わせて最終見た目が決まります |
| 乱れ | jitter |
位置や速度にどれだけ揺らぎを入れるかです |
まず大事なこと
FxEmitter2Dは 画像を描くノードではありません- ここで決めているのは「どこから、どれくらい、どの向きへ出るか」です
- 実際の見た目は
FxRasterizeで決まります - 発生位置を画像で制御したい時は
maskを使います
mask の役割
maskは 粒子そのものの見た目 ではありませんmaskは どこから粒子を出してよいか を決める画像です- 白や不透明のピクセルでは発生できます
- 透明ピクセルでは発生できません
mask_thresholdは「どのアルファ値以上を有効にするか」です
つまり、
- 発生位置の形を画像で決めたい
FxEmitter2D.mask
- 粒子の見た目の形を画像で決めたい
FxRasterize.stamp
です。
どういう時に使うか
- 炎の根元を 1 箇所作りたい時
- 煙の発生源を複数置きたい時
- 飛沫や spark を burst 中心で出したい時
一番基本の使い方
FxDomain2D -> FxEmitter2D -> FxRasterize
まずは 1 emitter だけで十分です。
炎なら、次のような設定が分かりやすいです。
shape = circleposition = 16, 24radius = 2, 1rate = 2burst = 1direction = -90spread = 40speed = 0.5..1.5life = 3..6
マスクを使う基本レーン
PathMask / PixelCanvas / 画像ロード
-> FxEmitter2D.mask
たとえば、
- 文字の形から煙を出す
- 地面の割れ目から火花を出す
- 白い部分からだけ飛沫を出す
のような用途に向いています。
例: マスク付き emitter
{
"shape": "circle",
"position": [16, 24],
"radius": [6, 3],
"mask_threshold": 0.5,
"rate": 3.0,
"burst": 0
}
この場合、
- まず円範囲で候補位置を作り
- その位置が
maskの白い部分なら発生 - 透明なら発生しません
例
32x32 の炎っぽい設定例です。
{
"name": "Flame Base",
"shape": "circle",
"position": [16, 24],
"radius": [2, 1],
"start_frame": 0,
"end_frame": 7,
"rate": 2.0,
"burst": 1,
"direction_deg": -90.0,
"spread_deg": 40.0,
"speed_min": 0.5,
"speed_max": 1.5,
"life_min": 3.0,
"life_max": 6.0,
"size_min": 1.0,
"size_max": 2.0,
"alpha_min": 0.5,
"alpha_max": 1.0,
"jitter": 0.4
}
使い所
- 炎: 下側に 1〜2 個置く
- 煙:
directionを弱め、lifeを長くする - 飛沫:
burstを大きくしてlifeを短くする
密度とサイズを変えたい時
- 密度を上げる
rateを上げるburstを増やすlife_maxを伸ばして画面内に残る数を増やすradius_x / radius_yやspread_degを小さくして同じ範囲に詰める
- 粒子を大きくする
size_min / size_maxを上げる- さらに
FxRasterize.size_scaleで全体倍率を掛ける
例:
size_min = 1, size_max = 1- 小さい粒子だけ出ます
size_min = 2, size_max = 4- 粒子ごとに 2〜4 の大きさの差が出ます
注意
end_frame = -1は「最後まで」です- emitter を増やすほど粒子数は増えます
- 重くなりすぎる前に
rate,life,sizeを小さく抑えるのが P11 向きです maskをつないでも、完全に透明な領域からは粒子は出ませんshape = pointの時は 1 点だけ判定するので、maskに外れるとその粒子は出ません