UDN
Search public documentation:

ParticleSystemReferenceJP
English Translation
中国翻译
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

パーティクル システム

ドキュメントの概要:パーティクル システム UE3 のリファレンスマニュアル

ドキュメントの変更ログ: Scott ShermanWyeth Johnson により更新。

概要

Unreal Engine 3 ではパーティクル システムの構成が新しくなりました。 システムにはエミッタがいくつ含まれていてもかまいません、各エミッタにはパーティクルの振る舞いを左右するモジュールが含まれています。

パーティクル システムはCascadeとパーティクル エディタで構成されています。本書ではパーティクル システム、エミッタ、および使用可能な各モジュールについて説明します。Cascade の使い方の説明は、 パーティクルエディタユーザーガイド を参照してください。

パーティクルの特殊な使い方については、 パーティクルの例 ページを参照してください。

ParticleSystem クラス

ParticleSystem は、多くの ParticleEmitters を含みパーティクル効果を表現します。システムに複数のエミッタを持つことで、設計者はシングルシステムで複雑なパーティクル効果を作成することができます。一度カスケードで ParticleSystem を作成するとレベルに挿入したり、スクリプト内で作成することができます。

パーティクル システム クラスには以下のパブリック変数が含まれます::

SystemUpdateMode - この列挙型変数は、システムがエミッタをアップデートする方法を示します。2つのモードがあります:

モード 説明
EPSUM_RealTime エミッタをリアルタイムでアップデートする。
EPSUM_FixedTime 決まった時間にステップにエミッタを更新します。パーティクルシステムをゲームの更新時間に合わせます。更新処理はパフォーマンスに左右され、つまりフレームレートが低いとシステムの更新時間も下がり (遅くなり)、レートが高いと速くなります。特別な場合にのみ使用されるのが普通です。

EPSUM_FixedTime は使用しているフレームレートに係わらず、一定の間隔でシステムをアップデートします。このモードは、エミッタをアニメーションに結び付けるなど、効果のタイミングが別システムにとって重要でない場合のみ使用してください。

UpdateTime_FPS - EPSUM_FixedTime で実行しているときに使用する時間間隔。

WarmupTime - システム起動時のウォームアップ時間。これによりエミッタは完全に始動できるようになります。パフォーマンスの低下を招く可能性があるので、特に値が高い場合は控えめに使用してください。レベルを最初にロードする間に開始したいシステム (煙の柱やアンビエントエフェクトなど) に適しています。

ThumbnailWarmup - サムネイルのレンダリングをキャッシュする前にシステムが待機する時間 (bUseRealtimeThumbnail が選択されている場合)。

LODMethod - この列挙型の値は、適切な LOD レベル選択のためにシステムが使用する方法を示します。2 つの方法を使用できます。

方法 説明
Automatic LOD の距離とチェック時間に基づいて LOD レベルを自動的に設定します。
DirectSet システムが使用する LOD レベルは、ゲームが直接設定します。

LODDistanceCheckTime - 使用する LOD レベル決定のためにシステムが距離チェックを実行する間隔を秒単位で指定します (LODMethod が Automatic に設定された場合のみ使用します)。

LODDistances - 使用する LOD レベルを決定するために指定する距離の配列。(LODMethod が Automatic に設定された場合のみ使用します)。 これらの値は、LOD レベルを選択するための最小推奨距離を示します。 例えば、3 つの LOD レベルのシステムを想定してみましょう。

LODDistanceIndex 範囲 選択される LOD レベル
0 0.0 0.0 – 2499.9 0 (最高)
1 2500.0 2500.0 – 4999.9 1
2 5000.0 5000.0 – Infinity 2

FixedRelativeBoundingBox - パーティクル システムでユーザー設定の境界ボックスを使用できるようにします。各フレームのバウンダリ更新により発生するオーバーヘッドを削減します。必要に応じて (not)<rendering/updating> を犠牲にする場合もあります。サイズスケールが大きく変動するエミッタが含まれている場合を除き、パフォーマンス上の理由から、ほとんどの場合は常に固定境界ボックスを使用することが推奨されています。注意: Cascade ツールバーの [Show Bounds] (バウンダリを表示) ボタンを右クリックすると、Cascade で現在使用されている動的ボックスの値がこのダイアログボックスに挿入され、そのデータを基に値を調整することができます。

bUseFixedRelativeBoundingBox - TRUE の場合、コードはパーティクル システムのバウンダリとして FixedRelativeBoundingBox を使用します。

SecondsBeforeInactive - パーティクル システムがこの時間量 (秒数) レンダリングされない場合はインアクティブになり、ティックされなくなります。システムがインアクティブ状態を強制されないようにするには、この値をゼロに指定します。

ParticleEmitter クラス

ParticleEmitter はパーティクル システムに含まれる単体のパーティクル効果です。ParticleEmitter クラスには以下のパブリック変数が含まれます:

EmitterName - エミッタの名前。

RequiredModule - これは ParticleModuleRequired クラスのインスタンスで、すべてのパーティクルエミッタに必要です。

InitialAllocationCount - ユーザーはこの値を使用して、エミッタの初期化に割り当てるパーティクルの数を宣言できます。0 の場合は計算済みのピークカウントが使用されます。(計算値の場合には必要な数より高い数値になるので、メモリを厳密に制御できるようにこのパラメータが用意されています。)

Sprite データ

ScreenAlignment - パーティクルの方向をカメラと関連付けて決める方法。以下のモードがあります:

フラグ 説明
Square カメラに向かって、一様なスケール(X 設定に強制)
Rectangle カメラに向かって、一様でないスケール
Velocity カメラとパーティクルの動く方向を合わせる。一様でないスケールを使用可能。
TypeSpecific Type data モジュールで指定されたアライメント方法 (メッシュのみ)

マテリアル - パーティクルに適用するマテリアル。

モジュール

モジュールを使用して、パーティクルにエミッタが発する別の効果を適用します。スポーン中、アップデート中またはその両方でパーティクルに効果を適用できます。モジュールはエミッタの中の順番 (カスケード内のモジュールのスタック上での位置) によってモジュール同士で相互作用します。1 つのエミッタに 2 つの速度 モジュールを適用すると、パーティクルに累積した効果が表現されます。

[重要: モジュールは先行する同じモデルをすべて「null」にする場合があります。これらのケースはドキュメント上に記載されます。]

ParticleModule

すべてのモジュールの基本クラスです。クラスには以下のパブリック メンバが含まれます:

ModuleEditorColor - Cascadeのグラフ エディタでモジュールが使用する色です。

必要なモジュール

すべてのパーティクル エミッタにこのモジュールが含まれています。このモジュールには、以下のような、パーティクル エミッタに必要なすべてのプロパティが含まれています: :

全般

bUseLocalSpace - パーティクル エミッタがその親のワールド変換が必要 (FALSE) か否か (TRUE) かを表します。TRUE の場合、パーティクル エミッタはローカル空間ですべてを実行します。

bKillOnDeactivate - パーティクルを非アクティブ化したときに、パーティクル エミッタがそのパーティクルを kill する必要が有るかどうかを表します。FALSE の場合、生きているパーティクルはエミッタが非アクティブになったときそのライフタイムが尽きます。

bKillOnCompleted - このエミッタ インスタンスが終了した時点で、パーティクル システム コンポーネントがこのエミッタ インスタンスを kill する必要が有るかどうかを表します。

EmitterDuration - ループする前にエミッタがどれだけ実行されるかを秒で表します。0 にした場合、エミッタはループしません。

EmitterDurationLow - エミッタの最低継続時間を表し、これ以上ならエミッタの継続時間に変化が許されます。

bEmitterDurationUseRange - TRUE の場合、エミッタは起動時に [EmitterDurationLow..EmitterDuration] の間で継続時間を選択します。

bDurationRecalcEachLoop - TRUE の場合、 エミッタはループ時に [EmitterDurationLow..EmitterDuration] の間で継続時間を選択します。

EmitterLoops - 非アクティブになるまでのループの回数。0 にすると、エミッタは継続して実行され、無限ループになります。

bUseMaxDrawCount - TRUE の場合、エミッタは MaxDrawCount 数に達するとパーティクルを描画しなくなります。更新は、ティック時にすべてのパーティクルで同様に実行されます。

MaxDrawCount - レンダリングされる最大パーティクル数。

スポーン関係

SpawnRate - この浮動小数は与えられた時間内でエミッタのパーティクル スポーン レートを決めます。

バースト(Burst)関係

バースト データはエミッタが設定時間内に、パーティクルを与えられた数だけ強制的に排出する必要が有るかどうかを表します。以下のメンバを含みます:

ParticleBurstMethod - 現在は無視されています。

BurstList - An array of integer Count and CountLow and float Time values identifying desired bursts of particles. Time is in the range of [0..1] over the emitter lifetime. CountLow を 0 に設定した場合、エミッタは指定時間に Count 数のパーティクルをバーストします。その他の場合は、範囲 [CountLow..Count] からランダムに選択された数のパーティクルを指定時間にバーストします。

遅延関係

EmitterDelay - エミッタを起動する時に遅らせる時間です。これにより単体のパーティクル システム内で「時間差」エミッタが可能になります。

bDelayFirstLoopOnly - TRUE で、エミッタの EmitterDelay が 0 より大きく、EmitterLoops が 1 より大きい場合、最初のループだけで遅延が実施されます。

SubUV 関係

エミッタが適用するテクスチャのサブイメージを使用する必要があることを表す SubUV データ。これは単純なアニメーションをパーティクルに実装する場合に便利です。以下のメンバがあります:

InterpolationMethod - この列挙型変数は使用すべきサブイメージ間への挿入メソッドを表します。これには以下があります:

メソッド 説明
None このエミッタに SubUV モジュールは適用しない。
Linear サブイメージ間を決められた順でスムーズに移行します、その際、現在のサブイメージと次のサブイメージはブレンドしません。
Linear_Blend サブイメージ間を決められた順でスムーズに移行します、その際、現在のサブイメージと次のサブイメージはブレンドします。
Random 次のイメージがランダムに決められます、その際、現在のサブイメージと次のサブイメージはブレンドしません。
Random_Blend 次のイメージがランダムに決められます、その際、現在のサブイメージと次のサブイメージはブレンドします。

SubImages_Horizontal - テクスチャの水平 (x) 軸上に存在するサブイメージの数。

SubImages_Vertical - テクスチャの垂直 (y) 軸上に存在するサブイメージの数。

bScaleUV - サブイメージのサイズに「ぴったり合う」UV 値を表しています。これはメッシュ エミッタにのみ使用します。

RandomImageChanges - InterpolationMethod がランダムにセットされている時に、パーティクルのライフタイムの中でイメージを変更する回数。

Cascade 関係

カスケード データはエディタ内で使用する正確な情報を含んでいます。以下があります:

EmitterRenderMode - この列挙型変数はパーティクルをレンダリングする方法を表します。以下の値がサポートされています:

モード 説明
Normal 現在システムにどんなマテリアルが適用されていてもレンダリングします
Point スケーリングなしで、2x2 ピクセルのブロックとしてレンダリングします。色は EmitterEditorColor にセットされています。
Cross 三系交差の直線としてレンダリングします、スケーリングはエミッタのセッテイングにしたがいます。
None エミッタをレンダリングしません

EmitterEditorColor - Cross または Point レンダリング モードのときにエミッタをレンダリングするのに使用する色。

モジュール タイプ

モジュール をその基本機能によって分類したタイプ。

TypeData モジュール

このモジュールはさまざまなエミッタ タイプに対して特定の機能を持っています。以下が含まれます:

メッシュ

メッシュ タイプ データ モジュールはエミッタがスプライト パーティクルより静的メッシュ インスタンスを使用すべきであることを表します。以下のパブリック メンバを含みます:

メッシュ - スプライト パーティクルの代わりに使用する静的メッシュ

CastShadows - TRUE の場合、エミッタはメッシュ パーティクルの影もすべてレンダリングします。注意: これはパフォーマンスに大きな負担が掛かります。

MeshAlignment - この列挙型変数はメッシュ限定の画面アラインメント フラグです。以下の値をサポートします:

EMeshScreenAlignment フラグ 説明
PSMA_MeshFaceCameraWithRoll カメラはメッシュからカメラ方向へ回転できます (標準パーティクル スプライト ローテーションの量で表示)。
PSMA_MeshFaceCameraWithSpin カメラをにメッシュにむけ、接線軸に沿って回転できます。
PSMA_MeshFaceCameraWithLockedAxis メンテナンス中カメラを上方向に向けて固定します。

bOverrideMaterial - TRUE の場合、メッシュは静的メッシュ モデルに適用されたマテリアルではなく、エミッタ (requiredmodule で割り当てた) からのマテリアルを使用してレンダリングされます。MeshMaterial モジュールの上にこれを使用してください。ただしマテリアルを割り当てる必要があるメッシュに複数の UV チャンネルが存在する場合は例外で、その場合にはコードでマテリアル割り当てをパラメータ化する必要があります。

Trail

Trailタイプのデータ モジュールは、エミッタがTrailを出力する、つまり、パーティクルをつなげてリボンを形成することを表しています。Trailについては本書の別の節で説明します。

Beam

Beamタイプのデータ モジュールはエミッタがビームを発する、つまり、パーティクルやアクタと言ったターゲットポイントとエミッタのように、ソース ポイントとソースポイントの間にパーティクルをつなげてストリームを形成することを表しています。ビームについては本書の別の節で説明します。

Accelerationモジュール

Acceleration

パーティクルの初期加速を設定します。この値はパーティクルごとに保存され、アップデート コール中に各フレームごとで使用します。以下のメンバを含みます:

Acceleration - - このベクトルの値は使用する加速を表しています。この値はパーティクルのスポーン時 EmitterTime を基に決まります。

このモジュールはパーティクル ペイロード データ UsedAcceleration に Vector パラメータを追加します。この値は各パーティクルが生きている間、加速を保持します。

各フレームで、パーティクルの現在および基本速度の値は式 (速度 += 加速 * DeltaTime) でアップデートされます。ここで、DeltaTime は前回のフレームからの経過時間です。

AccelerationOverLife

パーティクルの生存期間中の加速度を設定します。以下のメンバが含まれます:

AccelOverLife - このベクトル分布は使用する加速を表します。値はパーティクル アップデート時の相対時間(RelativeTime)に基づいて取得します。

Accelerationは パーティクル相対時間を使用して、加速分布から取得します。パーティクルの現在および基本速度の値は式 (速度 += 加速 * DeltaTime) でアップデートされます。ここで、DeltaTime は前回のフレームからの経過時間です。

Attractor モジュール

AttractorLine

AttractorParticle

パーティクルアトラクタにより、システム内の他のエミッタからエミットされたパーティクルにパーティクルを描画することができます。以下のメンバが含まれます:

EmitterName - アトラクタとなるソースエミッタの名前。

Range - ソースパーティクルの周囲のアトラクションの半径範囲を示す flot 型の分布値で、Particle-life に相対的になります。

bStrengthByDistance - TRUE の場合、強度カーブは (AttractorRange-DistanceToParticle)/AttractorRange の値を使って取得します。その他の場合はソースパーティクルの RelativeTime を使って取得します。

Strength - アトラクションの強度 (負の値は拒否されます)。StrengthByDistance が false の場合は Particle-life に相対的になります。

bAffectBaseVelocity - TRUE の場合、基準速度に速度の調整が適用されます。

SelectionMethod - エミッタからアトラクタ ターゲットのパーティクルを選択する際に使用する方法を選択します。以下のいずれかの値を指定します:

EAttractorParticleSelectionMethod フラグ 説明
Random ソース エミッタからパーティクルをランダムに選択します。
Sequential シーケンス順を使用してパーティクルを選択します。

bRenewSource - TRUE の場合、ソースパーティクルの期限が切れると新しいパーティクルが選択されます。その他の場合、期限が切れたパーティクルのアトラクションは行われません。

bInheritSourceVel - TRUE の場合、パーティクルは期限が切れた場合にソースの速度を継承します。

AttractorPoint

ポイントアトラクタを使用して、パーティクルのアトラクションが発生するポイントと、そのエフェクト半径を定義することができます。以下のメンバが含まれます:

Position - パーティクルエミッタに関するポイント位置を示すベクトル分布。EmitterTime を使って取得します。

Range - ポイント効果の半径を示す float 型の分布。EmitterTime を使って取得します。

Strength - ポイントアトラクタの強度。EmitterTime を使って取得します。

StrengthByDistance - TRUE の場合、強度は半径に沿って均等に分配されます。

bAffectBaseVelocity - TRUE の場合、アトラクタの引力が保持されるようにパーティクルの基準速度を調整します。

bOverrideVelocity - 未使用。

Collision モジュール

Collision

エミッタにパーティクル衝突を処理させるためのパラメータ。以下のメンバが含まれます:

DampingFactor - 衝突後のパーティクルの「遅さ」の度合を示すベクトル分布。この値はパーティクルのスポーン時に EmitterTime に基づいて取得し、パーティクルに保存されます。

DampingFactorRotation - 衝突後のパーティクル回転の「遅さ」の度合を示すベクトル分布。この値はパーティクルのスポーン時に EmitterTime に基づいて取得し、パーティクルに保存されます。

MaxCollisions - パーティクルで許容される最大衝突回数を示す float 型の分布。この値は、パーティクルのスポーン時に EmitterTIme に基づいて取得します。

CollisionCompletionOption - パーティクルが MaxCollisions 数に達したときの動作を示す列挙型の値。以下のいずれかの値を指定します:

EParticleCollisionComplete Flag 説明
Kill MaxCollisions 数に到達すると、パーティクルをキル (消去) します。(これがデフォルトの動作です)
Freeze パーティクルをその場に固定します。
HaltCollisions 衝突チェックを停止しますが、続けて更新します。この場合、パーティクルはオブジェクトを「通り抜けて落ちる」ことになります。
FreezeTranslation パーティクルの平行移動を停止しますが、その他はすべて続けて更新します。
FreeRotation パーティクルの回転を停止しますが、その他はすべて続けて更新します。
FreeMovement パーティクルの平行移動/回転を停止しますが、その他はすべて続けて更新します。

bApplyPhysics - パーティクルとそれが衝突するオブジェクトの間に物理演算を適用するかどうかを示すブール値。[注意: 現在のところ、これはパーティクル --> オブジェクトの一方向にのみ適用されます。パーティクルには物理は適用されず、衝突オブジェクトに適用される impulse (衝撃) が生成されるだけです。]

ParticleMass - パーティクルの質量を示す float 型の分布。ApplyPhysics が TRUE の場合に使用します。この値は、パーティクルのスポーン時に EmitterTIme に基づいて取得します。

このモジュールは、パーティクルのペイロードデータに 2 つのベクトル (UsedDampingFactor と UsedDampingFactorRotation)、および整数 (UsedMaxCollisions) パラメータを追加します。これらの値は、パーティクル単位の衝突情報の追跡に使用されます。

以下の疑似コードでは、衝突パーティクルの更新プロセスを説明しています。

          Determine the location of the particle. This is required due to the fact
      that the actual location isn't calculated until after the Update call.
      Determine the appropriate extent to use during the line check.
  (パーティクルの位置を判定する。これが必要な理由は、Updade の呼び出しまで
      実際の位置が計算されないためである。ラインチェック中に使用する、およその範囲を決定する。)
      if (SingleLineCheck indicates collision)
      {
          if (UsedMaxCollisions-- > 0)  // collisions をまだ使用できるかどうか。
          {
              衝突に基づいて速度と回転を調整する。
              if (Applying physics)
              {
                  かつ、オブジェクトに対するおよその衝撃。
                  (Mass はパーティクル時間に相対的な分布から
                      取得する。)
              }
          }
          else
          {
              このパーティクルは collision の適用範囲外にある。
              CollisionCompletionOption に基づいて適切なアクションを実行する。
          }
      }
  

DirScalr - 相互貫通または大きなギャップの回避に役立てる目的で、パーティクルのバウンダリのスケーリングに使用する float 型の値。

bPawnsDoNotDecrementCount - TRUE の場合、Pawns と衝突したときにも同様に反応しますが、MaxCollisions 数の計算からは除外されます。これを使用すると、ポーンからパーティクルを跳ね返しても空中で停止することがありません。

bOnlyVerticalNormalsDecrementCount - TRUE の場合、垂直衝突の法線がない衝突にも同様に反応しますが、MaxCollisions 数の計算からは除外されます。これを使用すると、壁からパーティクルを跳ね返し、床に静止させることができます。

VerticalFudgeFactor - 垂直方向の決定に使用する float 型の値。真の垂直線は、Hit.Normal.Z == 1.0f になります。これにより、[1.0-VerticalFudgeFactor..1.0] の範囲にある Z 成分を垂直衝突として数えることができます。

Color モジュール

Color モジュールは発射されたパーティクルの色に影響します。注意:以前は [0..255] の範囲 (つまり 8-bit カラー) でした。現在はパーティクルで float 型フルカラーをサポートしています。

Color

スポーン時のパーティクルのデフォルトの色を設定します。以下のメンバを含みます:

StartColor - パーティクルの色をを表すベクトル分布。この値はパーティクルのスポーン時の EmitterTime に基づいて取得します。

StartAlpha - パーティクルのアルファ コンポーネントを表す float 型の値。この値はパーティクルのスポーン時の EmitterTime に基づいて取得します。

bClampAlpha - TRUE の場合、アルファの値は [0.0 .. 1.0f] の範囲に固定されます。

スポーン時に、モジュールはエミッタ時間を使用して、変数から適切な値を取得し、直接 Particle.Color と Particle.BaseColor の値を設定ます。

ColorByParameter

パーティクルがスポーンされるときの色を、エミッタ インスタンスのパラメータに基づいて設定する場合に使用します。これは同じエミッタを同じレベルのインスタンスにし、違う色で表示します。以下のメンバを含みます:

ColorParam - 色を取得する MaterialInstanceConstant のパラメータの名前です。

DefaultColor - パラメータがセットされていないエミッタのイベントで使用するデフォルトの色です。

スポーン時に、モジュールは適切な値をインスタンス パラメータから取得し、それをカラーとして設定します。これが見つからないときは、DefaultColor を使用します。注意: ここでも、「カラー」はこのモジュールで「セット」します。これはこれより前に現われるカラー モジュールの値はすべて上書きされることを意味します。

注意: このモジュールは、Color モジュールの ParticleParameter ディストリビューション値を使用するのと同じです (ParticleParameter ディストリビューションが存在する前に書かれたものです)。

ColorOverLife

パーティクルが生きている間の色を設定します。以下のメンバを含みます:

ColorOverLife - パーティクルに適用する色を表すベクトル分布。この値はパーティクル アップデート時にパーティクルの RelativeTime を使用して取得します。

AlphaOverLife - パーティクルに適用するアルファ コンポーネントを表す float 型の値。この値はパーティクル アップデート時にパーティクルの RelativeTime を使用して取得します。

bClampAlpha - TRUE の場合、アルファの値は [0.0 .. 1.0f] の範囲に固定されます。

スポーン時に、モジュールはパーティクル時間を使用して変数から適切な値を取得し、それを Particle Color および BaseColorカラーとして設定します。注意: ここでも、「カラー」はこのモジュールで「セット」します。これはこれより前に現われるカラー モジュールの値はすべて上書きされることを意味します。

アップデート時、モジュールはパーティクル時間を使用して変数から適切な値を取得し、それを Particle.Color に設定します。

ColorScaleOverLife

パーティクルが生きている間、そのカラーを計るために使用します。以下のメンバを含みます:

ColorScaleOverLife - パーティクルに適用する色を表すベクトル分布。この値はパーティクル アップデート時にパーティクルの RelativeTime を使用して取得します。

AlphaScaleOverLife - パーティクルに適用するアルファ コンポーネントを表す float 型の値。この値はパーティクル アップデート時にパーティクルの RelativeTime を使用して取得します。

bEmitterTime - 効果がエミッタ時間に基づくべきか、パーティクル時間に基づくべきかを表す Bool 値。

スポーン時およびアップデート時に、モジュールは、選択した時間を使用して分布から適切な値を取得し、その値でパーティクル カラーを計ります。

Event モジュール

Event モジュールにより、パーティクル内部、他のパーティクルまたはワールドとの相互作用に基づいてイベントを生成し、次にそれらのイベントの生成をリッスンし、パーティクルシステム間レベルで反応を発生させることができます。例えば、パーティクルがワールドと衝突するたびに指定衝突イベントを生成し、衝突のたびにパーティクルをスポーンする場合に使用できます。

Event Generator

このモジュールは、指定条件に基づいて 1 つのイベント (または複数のイベント) を生成します。パラメータは以下のとおりです。

方法 説明
EPT_Any 有効なあらゆるイベントの発生に対して指定イベントを生成します。
EPT_Spawn このエミッタのパーティクルがスポーンされるときに指定イベントを生成します。
EPT_Death このエミッタのパーティクルが消滅するときに指定イベントを生成します。
EPT_Collision このエミッタのパーティクルが何かと衝突するときに指定イベントを生成します。
EPT_Kismet Kismet との対話イベントを生成します。これを使って Kismet スクリプトを実行したり、Kismet スクリプトにパーティクルコマンドを実行させることができます。

Frequency: イベントをトリガする頻度。<=1 は毎回を意味します。これを使って、例えば 1 回おきの衝突時にイベントをトリガします。

LowFreq: 範囲内で頻度をランダムに変えることができます。-1 は、範囲なしで Frequency を使用します。

ParticleFrequency: パーティクルあたりのイベントのトリガ回数。

FirstTimeOnly: 初回発生時のみイベントをトリガするかどうかを示すブール値。

LastTimeOnly: 最終発生時のみイベントをトリガするかどうかを示すブール値。

UseReflectedImpactVector: 衝突イベントの結果を、衝突法線ではなく衝撃ベクトル方向に合わせるかどうかを決定するブール値。

CustomName: イベントの名前。このイベントをリッスンするリスナーを設定し、適切に反応するする場合に使います。すべてのイベントには名前を指定する必要があります。

Event Receiver Spawn

指定イベントの発生をリッスンして、イベントの発生内容に基づいてパーティクルをスポーンします。

EventGeneratorType: リッスンするイベントのタイプ。EPET_Any の場合は、指定された名前を持つ任意のイベントタイプをリッスンします。

EventName: リッスンするイベントの名前。

SpawnCount: イベントの起動時にスポーンされるパーティクルの数。

bUsePsysLocation: イベントをトリガしたパーティクルイベントの位置か、またはパーティクル システムの元の位置でのどちらでスポーンイベントを発生させるかを決定するブール値。

bInheritVelocity: イベントをトリガするパーティクルの速度を、スポーンするパーティクルの開始速度として使用するかどうかを決定するブール値。

Kill モジュール

Kill モジュールは、指定パーティクルが個別の実装により定義される規定に一致した場合にパーティクルを kill (消去) します。

KillBox

定義されたボックスの外側にパーティクルが移動したときに消去するのに使用します。以下のメンバが含まれます:

LowerLeftCorner - ボックスの左下角を定義するベクトル分布。

UpperRightCorner - ボックスの右上角を定義するベクトル分布。

bAbsolute - TRUE の場合、コーナー設定値はワールド空間値であるとみなされ、テスト時にも値は変わりません。FALSE の場合、ボックスはエミッタのワールド空間に変換されます。

bKillInside - TRUE の場合、ボックスの内側に落ちたパーティクルを消去します。FALSE (デフォルト) の場合、ボックスの外側に落ちたパーティクルを消去します。

3D プレビューモードが有効の場合、Cascade プレビューウィンドウにワイヤーボックスが描かれます。

KillHeight

定義された高さを超える位置に移動したパーティクルを消去するのに使用します。以下のメンバが含まれます:

Height - パーティクルのキルが発生する高さを定義する float 型の分布。この高さを超えると消去されます。

bAbsolute - TRUE の場合、height 値はワールド空間値であるとみなされ、テスト時に値が変わることがありません。FALSE の場合、height 値はエミッタのワールド空間に変換されます。

bFloor - TRUE の場合、height 値未満の位置にあるパーティクルを消去します。FALSE (デフォルト) の場合、パーティクルが height 値を超えると消去します。

3D プレビューモードが有効の場合、kill 値の高さに平面が描かれます。

Lifetime モジュール

Lifetime

これを使用してスポーン時のパーティクルの初期ライフタイムを設定します。以下のメンバを含みます:

Lifetime - パーティクルのライフタイムを表す float 型の値、秒で表示します。この値はパーティクルのスポーン時の EmitterTime に基づいて取得します。

スポーン時に、モジュールは現在のエミッタ時間を使用して変数から適切な値を取得します。これを Particle.OneOverMaxLifetime フィールドに加え、複数のライフタイム モジュールが適用可能になります。

Location モジュール

Location

これを使用してスポーン時のパーティクルの初期ロケーションを設定します。以下のメンバを含みます:

StartLocation - エミッタについてパーティクルを発射するロケーションを表すベクトル分布。この値はパーティクルのスポーン時の EmitterTime に基づいて取得します。

スポーン時に、モジュールは、現在のエミッタ時間を使用して変数から適切な値を取得します。パーティクル エミッタが bUseLocalSpace フラグを持っていない場合、この値はワールド空間に移行されます。その後 Particle.Location フィールドにこの値が追加されます。

LocationDirect

パーティクルのロケーションを直接設定します。以下のメンバを含みます:

ロケーション - 決められた時間でパーティクルのロケーションを表すベクトル分布。この値は Particle RelativeTime に基づいて取得します。注:パーティクル ロケーションがこの値にセットされると、その結果先行するモジュールで影響のあるモジュールはすべて上書きされますので注意してください。

LocationOffset - ロケーション計算で取得した位置から適用するオフセットを表すベクトル分布。

ScaleFactor - タイムラインの決められたある時点でオブジェクトの速度を計ることを可能にするベクトル分布。これはパーティクルをワープさせ、以下のパスに合わせることができます。

Direction - 現在は使用していません。

LocationEmitter

これで、別のエミッタ (同じパーティクル システムの) から発するパーティクルの位置に、パーティクルの初期ロケーションを設定します。以下のメンバを含みます:

EmitterName - ロケーション パーティクルのソースとして使用するエミッタの名前。

SelectionMethod - この列挙型変数はソース エミッタからパーティクルを選択する方法を表します。以下の値があります:

方法 説明
Random ソース エミッタからランダムにパーティクルを選択します。
Sequential ソース エミッタから順番にパーティクルを選択します。

InheritSourceVelocity - スポーンしたパーティクルがソース パーティクルの速度を継承する必要があるかどうかを表す Bool 値です。

InheritSourceVelocityScale - ソース速度が継承された場合にその値を計算する量。

bInheritSourceRotation - スポーンしたパーティクルがソース パーティクルのローテーションを継承する必要があるかどうかを表す Bool 値です。

InheritSourceRotationScale - ソース ローテーションが継承された場合にその値を計算する量。

LocationEmitterDirect

これで、別のエミッタ (同じパーティクル システムの) から発するパーティクルの位置に、パーティクルのロケーションを設定します。以下のメンバを含みます:

EmitterName - ロケーション パーティクルのソースとして使用するエミッタの名前。

LocationPrimitiveBase

特定のプリミティブな形状の中にあるパーティクルの初期位置を設定します。基本クラスには以下が含まれます:

Positive_X、Positive_Y、Positive_Z、Negative_X、Negative_Y、Negative_Z - パーティクルをスポーンするのに有効な軸を表す Bool 値。

Velocity - パーティクルがその速度をプリミティブな位置から取得するかを表す Bool 値。

VelocityScale - 速度の縮尺に適用するを表す float 型の値。Velocity の値がチェック (true) されている時のみ使用。

StartLocation - エミッタの位置に対する境界プリミティブのロケーションを表すベクトル分布。

LocationPrimitiveCylinder

シリンダ 形状の中にあるパーティクルの初期位置を設定します。このクラスには以下のメンバが含まれます:

RadialVelocity - パーティクル速度をシリンダの「円形」プレーンの中だけで適用すべきかどうかを表す Bool 値。

StartRadius - シリンダの半径を表す float 型の値。

StartHeight - シリンダの高さを表す float 型の値 - ロケーションの中央部。

HeightAxis - この列挙型変数はどのパーティクル システム軸をシリンダの高さ軸にするかを表します。以下のいずれかになります::

CylinderHeightAxis Flags Description
HEIGHTAXIS_X シリンダの高さをパーティクル システムの X 軸の方向に合わせます。
HEIGHTAXIS_Y ... Y軸方向に合わせます。
HEIGHTAXIS_Z ... Z 軸方向に合わせます。

LocationPrimitiveSphere

球状の中にあるパーティクルの初期ロケーションを設定します。このクラスには以下のメンバが含まれます:

StartRadius - 球の半径を表す float 値。

Material モジュール

Material モジュールは、パーティクルエミッタに適用されるマテリアルを制御します。

MeshMaterial

このモジュールにより、メッシュエミッタで使用されている静的メッシュのセクションに適用されたマテリアルをオーバーライドすることができます。以下のメンバが含まれます:

MeshMaterial - このマテリアルの配列により、同じインデックスを持つ、対応する StaticMesh LODModel 要素に適用されるマテリアルをオーバーライドします。配列指定が空の場合は (None に設定した場合)、StaticMesh 要素からのマテリアルが使用され、これにより静的メッシュのマテリアルの特定部分を選択してオーバーライドすることができます。

Orbit モジュール

Orbit モジュールを使用して、実際のパーティクル中心から離れた方向にオフセット/回転するパーティクル スプライトのレンダリングを実現することができます。

Orbit

これが Orbit モジュールの唯一の実装です。スプライトがパーティクルの実際の位置から離れてオフセットおよび回転できるようにします。複数の orbit モジュールをさまざまな方法で 1 つにつなげることができます。

OrbitOptions

これはOrbit モジュールで使用されるヘルパー ストラクチャで、以下に簡単に示すように、Orbit (軌道) 関係データを構成する各種パーツのオプションを提供します。このストラクチャは以下のメンバで構成されています。

bProcessDuringSpawn - TRUE (デフォルト値) の場合、パーティクルのスポーン中に関連データピースが処理されます。

bProcessDuringUpdate - TRUE (デフォルト値) の場合、パーティクルの更新中に関連データピースが処理されます。

bUseEmitterTime - TRUE の場合 (デフォルトは FALSE)、EmitterTime を使用して関連データピースを取得します。FALSE の場合、パーティクルの RelativeTime を使用します。

Orbit モジュールのメンバ

ChainMode - このモジュールをエミッタ内の他のモジュールにつなげる (チェーンにする) 方法を示す列挙型。この値の設定により、モジュールとその 1 つ前のモジュールの組み合わせ方を定義します。以下のいずれかの値を指定します:

モード 説明
EOChainMode_Add モジュールの値と前の結果を加算します。
EOChainMode_Scale モジュールの値と前の結果を乗算します。
EOChainMode_Link チェーンを「ブレーク」して、前の結果の値を適用します。

OffsetAmount - パーティクルの「中心」からのスプライトのオフセット値を指定するベクトル分布。

OffsetOptions - OffsetAmount に関連するオプション。

RotationAmount - パーティクル位置の周囲のオフセット回転量を示すベクトル分布。「turns (ターン)」形式、つまり 0 = 回転なし、0.5 = 180 度、1.0 = 360 度のように指定します。

RotationOptions - RotationAmount に関連するオプション。

RotationRateAmount - パーティクル位置の周囲のオフセット回転速度を示すベクトル分布。Turns 形式で指定します。

RotationRateOptions - RotationRateAmount に関連するオプション。

Orientation モジュール

AxisLock

指定軸に面しているパーティクルをロックするのに使用します。現在のところ、これはスプライトベースのモジュールのみです。以下のメンバが含まれます:

LockAxisFlags - パーティクルをロックする軸を指定します。以下のいずれかの値を指定します:

EParticleAxisLock Flag 説明
NONE どの軸にもロックしません。
X X 軸にロックします。
Y Y 軸にロックします。
Z Z 軸にロックします。
NEGATIVE_X X 軸の負の方向にロックします。
NEGATIVE_Y Y 軸の負の方向にロックします。
NEGATIVE_Z Z 軸の負の方向にロックします。

Rotation モジュール

MeshRotation

スポーン時のメッシュ ベースのパーティクルの初期ローテーションを設定します。3つの値が必要なため、このモジュールは標準のローテーションとは区別されます。以下のメンバを含みます:

StartRotation - パーティクルがエミットされるローテーションを表すベクトル分布で、回転/秒で表します。この値はパーティクルのスポーン時の EmitterTime に基づいて取得します。

bInheritParent - TRUE の場合、親のローテーションも継承する必要があることを表します。

Rotation

スポーン時のスプライト ベースのパーティクルの初期ローテーションを設定します。1 つの値しか必要としないため、このモジュールはメッシュ ローテーションとは区別されます。以下のメンバを含みます:

StartRotation - パーティクルがエミットされるローテーションを表す float 型の値で、回転/秒で表します。この値はパーティクルのスポーン時の EmitterTime に基づいて取得します。

RotationOverLifetime

スプライト ベースのパーティクルのライフタイム中のローテーションを設定します。以下のメンバを含みます:

RotationOverLife - パーティクルのローテーションを表す float 型の値で、回転/秒で表します。この値はパーティクルのアップデート時の RelativeTime を基づいて取得します。

Scale - 既存のパーティクル ローテーションを RotationOverLife から取得した値でスケールするかどうかを表す Bool 値。FALSE の場合、パーティクル ローテーションは取得した値をパーティクルに追加します。

RotationRate Modules

MeshRotationRate

メッシュ ベースのパーティクルがエミットされたときにその回転率を設定します。以下のメンバを含みます:

StartRotationRate - パーティクルの回転率を表すベクトル分布で、回転/秒で表します。この値はパーティクルのスポーン時の EmitterTime に基づいて取得します。

スポーン時、モジュールは EmitterTime を使用して値を取得し、それを MeshRotationPayloadData に保存します。

RotationRate

スプライト ベースのパーティクルがエミットされたときの回転率を設定します。以下のメンバを含みます:

StartRotationRate - パーティクルの回転率を表す float 型の値で、回転/秒で表します。この値は Particle RotationRate および Base RotationRate に加算されます。

RotationRateMultiplyLife

スプライト ベースのパーティクル のライフタイム中の回転率をスケールします。以下のメンバを含みます:

LifeMultiplier - パーティクルの回転率に適用する倍率を表す float 型の値。この値はパーティクルのスポーン時およびアップデート時の RelativeTime に基づいて取得し、Particle.RotationRate にこの値をかけます。

Size モジュール

Size

スポーン時にパーティクルの初期サイズを設定します。以下のメンバを含みます:

StartSize - パーティクルの初期サイズを表すベクトル分布。この値はパーティクルをスポーン中の EmitterTime に基づいて取得し、スポーンしているパーティクルの Size および BaseSize に追加されます。

SizeMultiplyLife

パーティクルのサイズを与えられた値でスケールします。以下のメンバを含みます:

LifeMultiplier - パーティクルに使用する倍率を表すベクトル分布。この値はパーティクルのアップデート時の RelativeTime に基づいて取得します。

MultiplyX, MultiplyY, MultiplyZ - TRUE の場合、対応する倍率がパーティクル サイズに適用されます。FALSE の場合は、対応するコンポーネントがそのまま変更されずに残ります。

スポーンおよびアップデート時、Particle.Size の値に取得したスケール値をかけます。

SizeMultiplyVelocity

パーティクルのサイズを速度の一部でスケールします。以下のメンバを含みます:

VelocityMultiplier - パーティクルのサイズのスケーリングより前に、速度をスケールする方法を表すベクトル分布。この値はパーティクル アップデート時にパーティクルの RelativeTime を使用して取得します。

MultiplyX, MultiplyY, MultiplyZ - TRUE の場合、対応する倍率がパーティクル サイズに適用されます。FALSE の場合、対応するコンポーネントはそのまま変更されずに残ります。

スポーンおよびアップデート時、Particle.Size の値に取得した縮尺値をかけ、そのときのパーティクルの速度倍されます。

SizeScale

パーティクルの Size を BaseSize にセットし、与えられた倍率をかけます。ただし、そのフレーム内でこのモジュールより前に行ったサイズ調整を、このモジュールはすべてオーバーライドするので注意が必要です。以下のメンバを含みます:

SizeScale - パーティクルのサイズとして使用する前に BaseSize を縮尺する方法を表すベクトル分布。この値はパーティクル アップデート時にパーティクルの RelativeTime を使用して取得します。

EnableX, EnableY, EnableZ - 無視されます。

Spawn モジュール

Spawn モジュールは、エミッタパーティクルの数/速度に影響を与えます。各 Spawn モジュールは、以下のメンバで構成されています:

bProcessSpawnRate - RequiredModule の SpawnRate を処理するかどうかを示すブール値。Spawn モジュールが重ね上げられた場合 (同じパーティクルエミッタ上に複数の Spawn モジュールが存在する状態)、「デフォルト」のスポーン速度を処理しないと指定されたモジュールが 1 つでもあれば SpawnRate は処理されません。

SpawnPerUnit

エミッタの移動距離に基づいてパーティクルをスポーンできるようにします。スプライトベースの煙の行方など、移動速度とは無関係にトレールにまとまりを持たせる必要があり、そのため相対的な数のパーティクルをスポーンして常にすき間を埋めるようにする場合などにこれを利用できます。 以下のメンバが含まれます:

SpawnPerUnit - 1 単位あたりにスポーンされるパーティクルの量を示す、float 型の分布。EmitterTime を使って取得します。

UnitScalar - 移動距離に適用されるスカラーを示す float 型の値。1 単位あたりの実際のパーティクル数を求めるには、SpawnPerUnit の値をこの値で除算します。

bIgnoreSpawnRateWhenMoving - TRUE の場合、エミッタが移動していないときにデフォルトのスポーン速度を処理し、エミッタの移動中はデフォルトのスポーン速度の処理をスキップします。 FALSE の場合、bProcessSpawnRate 設定値を返します。

MovementTolerance - 移動または停滞の許容誤差を示す float 型の値で、bIgnoreSpawnRateWhenMoving フラグに関連して指定します。 (DistanceMoved < (UnitScalar * MovementTolerance)) の場合は、移動していないと見なされます。

他のエミッタからスポーンするときにこのモジュールを使用した場合には、単体のリードパーティクルからパーティクルをスポーンする場合と比べて予期せぬ動作が生じる可能性があります。

実は SpawnPerUnit はパーティクル システム自体の移動デルタ (間隔) を使用しているため、パーティクル システム内部のサブエミッタにアタッチされた場合には何をすべきか分からなくなります。親が空間を移動していても、実際のシステム全体はそのまま静止状態にあるため、SpawnPerUnit モジュールは何も実行しません。

SubUV モジュール

注意: InterpolationMethod が PSUVIM_None 以外のものに設定されている場合、SubUV モジュールはエミッタにだけ適用できます。

SubUV

float の値を基に、使用するサブイメージを選択します。現在、サブイメージの順は左から右、上から下、となっています。以下のメンバを含みます:

SubImageIndex - パーティクルに使用するサブイメージのインデックスを指定する float 型の値。この値はパーティクル アップデート時にパーティクルの RelativeTime を使用して取得します。 [注意: 実際の値はが float なので、若干高めの値を指定する必要があります。たとえば、2つ目のイメージを指定する場合、 - image 1 - の次は 1.01 を指定します。]

SubUVDirect

SubUV パーティクルで使用するテクスチャ座標を直接セットします。以下のメンバを含みます:

SubUVPosition - 左上角のテクスチャ座標を表すベクトル分布。

SubUVSize - 適切なテクスチャ サンプルのサイズを示すベクトル分布。

SubUVSelect

ベクトル分布を基に使用するサブイメージを選択します。x (赤)、y (緑) のパラメータで、水平 (U) および垂直 (V) のサブイメージそれぞれにインデックスをつけま。以下のメンバを含みます:

SubImageSelect - 表示したいサブイメージの水平および垂直のインデックスを表すベクトル分布。この値はパーティクル アップデート時にパーティクルの RelativeTime を使用して取得します。

Velocity モジュール

Velocity

パーティクルの初期速度を設定します。以下のメンバを含みます:

StartVelocity - スポーン時にパーティクルに適用する速度を表すベクトル分布。この値はオーナー エミッタの EmitterTime を使用して取得します。

StartVelocityRadial - 放射線状にパーティクルに適用する速度を表す float 値。その方向はスポーン時のパーティクル ロケーションからエミッタのロケーションを減じて決まります。この値はオーナー エミッタの EmitterTime を使用して取得します。

VelocityInheritParent

スポーン中に親の速度 (パーティクル エミッタ自身) をパーティクルに提供します。以下のメンバを含みます:

ParentScale - スポーン中に、パーティクル速度へ提供する前に、親の速度に適用するベクトル分布。この値はパーティクルの RelativeTime を使用して取得します。

VelocityOverLifetime

パーティクルのライフタイム中、与えられた値で速度をスケールします。以下のメンバを含みます:

VelOverLife - 速度に適用するスケール値となるベクトル分布。この値はパーティクルの RelativeTime を使用して取得します。

Absolute - TRUE の場合、速度を変数の値としてセットするか否かを表す Bool 値。これによりパーティクルのライフタイムのある時点で、その速度を直接セットすることができます。ただし、この設定は先行する速度に係わるすべてのモジュールに優先して「上書き」するので、充分注意してください。また、「Initial Velocity」モジュールはパーティクルの初期速度として提供されなくなります。

パフォーマンス

パフォーマンスの観点から見ると、あらゆる要素が絡み合う壮大なスキームにおいては、パーティクル数の役割は取るに足らないものです。任意のシステムの全体的なパフォーマンスコストに関しては、画面を分割するかどうかにかかわらず、マテリアルの複雑度と画面の適用範囲 (オーバードロー、無駄な重なり) が真の敵となります。テクスチャ頂点のカラーに対してテクスチャを乗算し、アンリット状態のマテリアル内のエミッシブ インプットにつなげただけの簡単な放射スパークの場合には、インストラクションもわずかで済みます。これらを一日中溢れるほどスポーンしても、パフォーマンス全体への影響はおそらく非常に小さなものでしょう。スプライトは小さいので画面への適用率も低く、マテリアルの複雑さの面でもコストがかからず、かつ迅速に描画できます。頂点数は、長期的に見て、極端な数に達しない限り (数百 ~数千以上) 特に気を使う必要はありません。

全般的なパフォーマンスへの影響がより顕著なのは、マテリアル上のインストラクション数です。火炎や煙などのマテリアルの場合、基本的に 2 通りの方法があります。1 つ目の方法では、より複雑なマテリアルを作成し (ここでは、火炎を例として使用します)、スポーンするスプライトの数を少なくし、マテリアルのランダム度と複雑度を制御してエミッタを生成します。2 つ目の方法としては、コスト安のマテリアルを使い、スポーンするスプライトの数を多くします。全体的なコストは同じぐらいに保ちながら、より複雑なマテリアルとは対照的にパーティクル数を高く設定してランダム度を適切に調節します。距離を短縮することで、マテリアルのコストを飛躍的に削減できる点に留意してください (画面でカメラから 2 倍離れた位置に描画されたクワッドは、ピクセル領域合計が距離と共に指数関数的に減少し、オーバードローされるピクセル数が減少するため、コストは 4 分の 1 になります)。

使用するマテリアルのコスト、スポーンするスプライトの数、さらに画面上でこれらのエフェクトの位置までの距離を分析する必要があります。これら 3 つの特性はエミッタの複雑度を決定する主な要因であり、それぞれにバランスを保つ必要があります。また、パーティクル システムの近くに、またはシステムから離れて移動する場合には LOD システムを巧みに利用して、スプライト数、マテリアルの複雑度、その他の要因を調整します。

通常は、パフォーマンスの向上手段としてマテリアルの複雑度を削減し、エミッタで作業する際にはオーバードローの可能性に常に気を付けてください。極端な数のパーティクルをスポーンする場合、または頂点数が非常に多いメッシュエミッタを使用してメッシュをスポーンする場合を除き、パーティクル数は心配しなくてもかまいません。