ノード一覧に戻る

FXエミッター2D

fx_emitter_2d

FxState2D document に決定論的な emitter を追加します。必要なら画像マスクで発生位置を制限できます。

下書き
解説あり

入力ポート

名前説明
FX
fx
FxState2D
必須
入力 FX state です
発生マスク
mask
Image
粒子をどこから出してよいかを制限する任意のアルファマスクです。白や不透明のピクセルは発生を許可し、透明ピクセルは発生を止めます

出力ポート

名前説明
FX
fx
FxState2D
emitter を追加した FX state です
エミッター数
emitter_count
Int
現在の FX state に入っている emitter 数です
概要
summary
Text
この emitter を追加した後の FX state の短い概要です

パラメータ

名前既定値範囲説明・選択肢
名前
name
Text
Emitter

概要表示や今後のツールで見分けるための emitter 名です

shape
Enum
Circle

発生形です。点は 1 点から、円は範囲から出します

  • Point
  • Circle
位置X
position_x
Float
16-512–512 / step 0.1

発生中心の X 座標です

位置Y
position_y
Float
16-512–512 / step 0.1

発生中心の Y 座標です

半径X
radius_x
Float
20–256 / step 0.1

形が円の時の横方向の発生半径です

半径Y
radius_y
Float
20–256 / step 0.1

形が円の時の縦方向の発生半径です

マスクしきい値
mask_threshold
Float
0.50–1 / step 0.01

発生マスク上でこのアルファ値以上のピクセルだけを発生可能とみなします

開始フレーム
start_frame
Int
00–4096

この emitter が粒子を出し始めるフレーム番号です

終了フレーム
end_frame
Int
-1-1–4096

最後に粒子を出すフレーム番号です。-1 は最後までを意味します

発生レート
rate
Float
20–32 / step 0.1

有効フレーム中、1 フレームごとに平均何個出すかです

開始バースト
burst
Int
00–64

有効開始フレームで追加で一括発生させる粒子数です

方向
direction_deg
Float
-90-360–360 / step 1

基本の発射角です。-90 は上向きです

広がり
spread_deg
Float
450–360 / step 1

基本方向の周りにどれだけ角度のばらつきを持たせるかです

最低速度
speed_min
Float
0.50–64 / step 0.1

発生直後の最低速度です

最高速度
speed_max
Float
1.50–64 / step 0.1

発生直後の最高速度です

最低寿命
life_min
Float
31–128 / step 0.1

粒子が生きる最低フレーム数です

最高寿命
life_max
Float
61–128 / step 0.1

粒子が生きる最高フレーム数です

最低サイズ
size_min
Float
10.5–32 / step 0.1

ラスタライズ前の最低粒子サイズです。ピクセルでは四角ドットの大きさ、ブロブやトレイルでは基礎半径として使われます

最高サイズ
size_max
Float
20.5–32 / step 0.1

ラスタライズ前の最高粒子サイズです。ピクセルでは四角ドットの大きさ、ブロブやトレイルでは基礎半径として使われます

最低アルファ
alpha_min
Float
0.50–1 / step 0.01

粒子生成時の最低アルファです

最高アルファ
alpha_max
Float
10–1 / step 0.01

粒子生成時の最高アルファです

ジッター
jitter
Float
0.40–8 / step 0.01

粒子ごとに加える位置と発射方向の揺らぎ量です

主なパラメータ

グループ パラメータ 役割
位置 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 = circle
  • position = 16, 24
  • radius = 2, 1
  • rate = 2
  • burst = 1
  • direction = -90
  • spread = 40
  • speed = 0.5..1.5
  • life = 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_yspread_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 に外れるとその粒子は出ません
ノード一覧に戻る