このチュートリアルは、Unreal Engine のスクラッチ パッド モジュールの紹介です。 この機能の基礎を探るために、単一の Niagara システムに基づいています。 このチュートリアルでは、最終的な結果に関するものではなく、機能のさまざまな使用方法について説明しています。
Scope
スクラッチ パッド モジュールは、ビジュアル スクリプティング グラフを使用して作成できるローカル Niagara モジュールです。 スクラッチ パッド モジュールの作成をサポートするアセットには、Niagara エミッタと Niagara システムという 2 つの Niagara アセットがあります。 モジュールのスコープは、モジュールが作成されているシステムまたはエミッタに限定されており、コンテンツ ブラウザではスタンドアロン アセットとして表示されません。
エミッタベースのスクラッチ パッド モジュール
Niagara エミッタ アセット内にスクラッチ パッド モジュールを作成すると、それが追加されている Niagara システムにおける、そのエミッタの全ての使用に適用されます。 以下の NE_Example エミッタ アセットでは、ScratchModuleInEmitter モジュールがモジュール リストに表示され、そのスタック エントリはエミッタ内で編集可能です。
ただし、エミッタで作成されたスクラッチ パッド モジュールは他のシステムやエミッタ アセットで使用できません。また、Niagara システムのモジュール リストにも表示されません。 以下の例は、NS_Example Niagara システム内で使用される NE_Example エミッタ アセットを示しています。 スクラッチ パッド モジュールは、他のモジュールと同様に、エミッタが Niagara システムでインスタンス化されるとロックされます (無効化は可能ですが、削除されません)。
システムベースのスクラッチ パッド モジュール
スクラッチ パッド モジュールが Niagara システム アセット内で作成された場合は、そのシステム内のすべてのエミッタで使用できます。 全てのスクラッチ パッド モジュールと同様に、他の Niagara システムのエミッタでは使用できません。
Niagara モジュール スクリプト
スクラッチ パッド モジュールは、Niagara モジュール スクリプト アセットとしてエクスポートできます。 このエクスポート プロセスは、このチュートリアルの BLANK セクションで詳しく説明されています。 Niagara モジュール スクリプトは、コンテンツ ブラウザに表示される完全に独立したアセットで、プロジェクト内の任意の Niagara エミッタおよび Niagara システムで使用できます。 これは、マテリアル ノードをマテリアル関数に変換する方法に似ています。マテリアル関数はプロジェクト全体で個別のマテリアルアセットから使用できます。
はじめに
スクラッチ パッド モジュールを作成するには、Niagara システム アセットまたは Niagara エミッタ アセット内で作業する必要があります。 このチュートリアルでは、スクラッチ パッド モジュールを使用する基礎として、シンプルなグリッドにスポーンされた Niagara システムを使用します。
Niagara システムを作成する
このセクションでは、新しいユーザー、およびこのチュートリアルを最初から最後まで実行したいユーザー向けに、Niagara システムの作成方法について説明します。 すでに Niagara システムを作成している場合は、それを使用してチュートリアルの残りの部分を進めることができます。
Niagara システムを作成するには、次の手順を実行します。
コンテンツ ブラウザで右クリックし、[Niagara システム] をクリックします。
[テンプレート] メニューで、[最小] を選択し、[作成] をクリックします。
新しい Niagara システムに名前を付けます (例: NS_Minimal)。 ダブルクリックするか、Enter キーを押して、アセットを開きます。
デフォルトでは、システムには 1 つのシステム ノード (青色) と 1 つの Minimal エミッタ (オレンジ色) があります。
スポーンパーティクル
エミッタにパーティクルをスポーンさせるには、次の手順を実行します。
最小エミッタに移動します。
[エミッタの更新] セクションで、[追加 (+)] をクリックします。
Spawn Particles in Grid オプションを検索してクリックします
[新しいモジュールを追加] メニューの上部に、頻繁に使用されるモジュールを追加することができます。 モジュールの名前の上にマウスを重ね、星 (⭐) アイコンをクリックします。 アイコンが、輪郭から塗りつぶされた星に変わります。 メニューを閉じて再度開き、モジュールが [推奨] セクションにリストされていることを確認します。 削除するには、星アイコンをもう一度クリックします。
依存関係の問題を修正
新しいモジュールには、名前の横にエラーを示す赤色のドットが表示されます。この場合、Spawn Particles in Grid モジュールが正しく機能するためには、Grid Location モジュールも必要です。
この問題を解決するには、モジュールをクリックします。 [詳細] パネルで問題を確認し、[問題を解決] をクリックします。
グリッド位置モジュールは、エミッタの [パーティクルのスポーン] (パーティクルのスポーン) セクションに追加されます。 その後、依存関係が満たされ、グリッドでパーティクルをスポーン モジュールのエラー アイコンが削除されます。
エミッタの設定
このチュートリアルのエミッタを構成するには、次の手順を実行します。
最小エミッタで [グリッドでパーティクルをスポーン] を選択します。
[詳細] パネルで、次の手順を実行します。
[X カウント] を「10」に設定します。
[Y カウント] を「1」に設定します。
[Z カウント] を「1」に設定します。
[スポーンする時間] を「0」に設定します。
最小エミッタで [パーティクルを初期化する] を選択します。
[詳細] パネルで、次の項目を設定します。
[ライフタイム] モードを [直接設定] に設定します。
[ライフタイム] を「5」に設定します。
[カラーモード] を [直接設定] に設定します。
[カラー] を「1, 0, 0」に設定します。
[位置モード] を [シミュレーション位置] に設定します。
[位置オフセット] を「0, 0, 0」に設定します。
[質量モード] を [Unset / (質量 1)] に設定します
[スプライト サイズ モード)] を [均一] に設定します。
[均一スプライト サイズ] を「10」に設定します。
[スプライトの回転モード]を [未設定] に設定します
[スプライト UV モード] を [未設定] に設定します
その他全てのメッシュとリボンの属性を [未設定] に設定します。
この例では、グリッド位置モジュールはデフォルト値のままになっています。
スクラッチ パッド モジュールを作成する
最小エミッタで、[パーティクルスポーン] のヘッダの横にある [追加 (+)] をクリックします。 [新しいスクラッチ パッド モジュール] オプションを見つけて選択します。
スクラッチ モジュール グラフは、元の [システム概要] タブの隣に自動的に開きます。 [ローカル モジュール] タブが、[プレビュー] ウィンドウの下、[パラメータ] タブと [ユーザー パラメータ] タブの横に表示されます。
スクラッチ モジュールの名前をわかりやすい名前に変更します (例: ApplyOffset など)。
モジュール名は、モジュール リストでは 1 つの単語 (ApplyOffset) として表示されますが、検索メニューおよびスタック エントリでは、大文字と小文字 (Apply Offset) に基づいてスペースを表記して表示されます。
[システム概要] グラフに、オフセットの適用モジュールが最小エミッタのモジュールとして表示されるようになりました。 新しいスクラッチ モジュールは検索メニューにも表示され、(Niagara ではなく) スクラッチ パッド アイテムというラベルが付けられます。
Navigation
スクラッチ パッド モジュールのグラフを開くには、次のいずれかを実行します。
[システムの概要] タブの横にある [スクラッチ モジュール] タブをクリックします。
エミッタのスクラッチ モジュールを選択し、[詳細] パネルの [スクラッチ パッド] ボタンをクリックします。
エミッタのスクラッチ モジュール スタック エントリをダブルクリックします。
[ローカル モジュール] > [モジュール] リストでスクラッチ モジュールをダブルクリックします。
データ フロー
Unreal Engine の他のグラフと同様に、モジュール内のデータは左から右に流れます。 このデータは、赤色の Input Map ノードから開始し、白色の Niagara Parameter Map ラインを流れ、緑色の Output Module ノードで終わります。
Map Get ノードを使用して、この Niagara Parameter Map ラインからデータを抽出し、Map Set ノードを使用してデータを設定できます。
位置情報オフセットを追加
次に、位置オフセットから始めて、スクラッチ パッド モジュールに機能を追加します。
パーティクルから位置属性を取得する
Map Get ノードで、Add + ピンをクリックし、PARTICLES Position パラメータを検索してクリックします。 これは、個々のパーティクルで保持されるデータです。
これらのパラメータは 1 語で記述され、名前空間と名前の間にピリオドがあります ( NAMESPACE.Name)。 コードまたはブループリントを使用してパラメータ (特にユーザー パラメータ) にアクセスしている場合、スペースではなくピリオドが含まれるバージョンを使用します。
ベクター入力の追加
Map Get ノードで、Add (+) ピンをクリックし、Vector (INPUT.Vector) オプションを検索してクリックします。
データ名前空間
パラメータ名の色付きのブロック内のテキストは、データの由来する名前空間を指定します。
Position は PARTICLES 名前空間からのものであり、データがパーティクル上に保持されていることを意味します。 このデータはパーティクルのライフタイムを通じてフレーム間で保持されます。
Vector に使用される INPUT 名前空間は、そのデータがモジュールからのものであることを示しており、ユーザーはこれを直接変更できます。
位置オフセットの計算
PARTICLES.Position ピンからドラッグし、Add ノードを検索、クリックします。
デフォルトでは、Add ノードの入力は濃い青色で、これが Niagara Numeric という型のワイルドカードであることを示しています。 位置、ベクター、float、整数を使用できます。 特定の型の他のノードに接続した場合、ピンと接続ワイヤは、それらのピンで使用されているデータ型を反映して変更されます。
INPUT.Vector ピンから Add ノードの 2 番目のピンにドラッグします。 ドロップダウン型は ベクター型であることを示すために黄色に変わります
データの更新
オフセット量 (INPUT.Vector) を PARTICLES.Position に追加した後、Map Set ノードを使用してパーティクル データを更新する必要があります。
既存のMap Set ノードで、Add (+) ピンをクリックし、PARTICLES.Position を検索してクリックします。
Add ノードの出力を Map Set ノードの PARTICLES Position ピンに接続します。 これにより、(Map Get ノードでアクセスされる) PARTICLES.Position の値が新しい値で更新 (上書き) されます。
グラフ変更の適用
[適用] ボタンまたは [適用して保存] ボタンをクリックし、グラフ内の変更を Niagara システムのスクラッチ モジュールとそのスタック エントリにコミットします。
[システム概要] グラフで、最小エミッタのオフセットの適用スクラッチ モジュール スタック エントリを選択します。 前の手順で作成されたベクター入力が、有効なモジュール入力になりました。
モジュールの機能をテストするには、ベクター入力に値を入力し、Niagara システムのビューポートでシステムのビジュアル出力がどのように変化するかを確認します。 この例では、Z 値を 0 から 200 に変更すると、赤色のパーティクルが 200 ユニット (cm) 移動します。
モジュール コンテキスト
特定のエミッタ コンテキストでのみ表示されて使用できるように、モジュールを設定できます。
モジュール使用状況ビットマスクの設定
オフセットの適用モジュールのグラフで、グラフの背景部分をクリックします。 これにより、[詳細] パネルにモジュールの設定が表示されます。 リスト内の最初の設定は [モジュール使用ビットマスク] で、モジュールを作成および移動できる場所を定義します。 ドロップダウン メニューをクリックして、さまざまなコンテキスト オプションを確認、検索、設定します。
次のコンテキストを使用できます。
機能
モジュール (デフォルトで有効)
動的入力
パーティクル スポーン スクリプト (デフォルトで有効)
パーティクル更新スクリプト (デフォルトで有効)
パーティクル イベント スクリプト (デフォルトで有効)
パーティクル シミュレーション ステージ スクリプト (デフォルトで有効)
エミッタ スポーン スクリプト
エミッタ更新スクリプト
システムスポーンスクリプト
システム更新スクリプト
ドロップダウン メニューの項目をオンまたはオフにすることで、モジュールが使用される場所と方法を制限できます。
これを試すには、[パーティクル更新スクリプト] オプションを無効にしてから [適用] ボタンを押します。
[システム概要] グラフ ビューに移動し、[オフセットの適用] モジュール スタック エントリを [パーティクルの更新] セクションにドラッグします。 エミッタのエントリ間には、明るい青色のドロップ ラインが表示されず、「このモジュールは、この使用コンテキストに対して有効でないため、スタックのこのセクションに移動できません」という警告のツールチップが表示されます。
さらに、このコンテキスト制限は、その制限セクションの検索結果に適用されます。 この場合、オフセットの適用モジュールは [パーティクル更新] セクションの検索に表示されません。
オフセットの適用モジュールは、「パーティクル スポーン」の検索結果で引き続き使用できます。
このチュートリアルに従うには、パーティクル更新スクリプトのコンテキストを有効にします。
パーティクル スポーンとパーティクル更新
エミッタの [パーティクル スポーン] セクションにあるモジュールは、パーティクルが作成 (スポーン) されるときにのみ実行されます。
エミッタの [パーティクル更新] セクションにあるモジュールは、ティックごとに実行されます。
これをデモで行うには、[パーティクル スポーン] から [パーティクル更新] セクションの下の場所に Apply Offset スタック エントリをドラッグします。 ベクター入力 Z 値を「1」に変更します。 ビューポートでは、ティックごとに 1cm のオフセットがパーティクルに適用されるため、赤色の点が上方向に移動します。
完了したら [パーティクル スポーン] セクションにドラッグしてチュートリアルを続けます。
回転オフセット
ユーザー (この場合は VFX アーティスト) が軸を中心にオフセットを回転させるには、いくつかの方法があります。 このセクションでは、モジュール内に回転を追加します。 チュートリアルの後半で、ユーザーが入力したデータの動的入力を活用する方法について説明します。
ノードを追加
グラフの背景を右クリックして「回転」を検索し、[XYZRotationToQuaternion] をクリックします。
入力の作成
次のステップでは、ユーザーがアクセスして値を入力できる入力を作成します。 最も簡単な方法は、目的のピン (この例では X、Y、および Z) から Map Get ノードの Add (+) アイコンにラインをドラッグすることです。 これにより、同じ名前と正しい型の対応する入力パラメータが作成されます。 Rotation to Quaternion ノードの 3 つの float 値 (緑色のピン、XYZ) 全てに対してこれを行います。
回転オフセットの計算
Map Get の INPUT.Vector ピンからドラッグし、Multiply Vector With Quaternion ノードを検索してクリックします。 XYZRotation to Quaternion ノードの出力ピンを Multiply Vector with Quaternion ノードの Quaternion 入力ピンにドラッグします。
Multiply Vector with Quaternion ノードの出力ピンを Add ノードの 2 番目のピンに接続し、プレーンな INPUT.Vector 値を新しいベクターとクォータニオンを乗算した値に置き換えます。
回転オフセットの変更を適用する
[適用して保存] をクリックし、[システム概要] グラフを開きます。
Apply Offset スタック エントリ (エミッタの Particle Update セクション) を選択し、Y の値を 30 に設定します。 これにより、赤色のパーティクルが右上に移動します。
[パラメータ] タブ
Niagara システムのビューポートの下には、異なるデータとインタラクションのオプションを備えた 2 つのタブがあります。
パラメータ
[パラメータ] タブには、Niagara システムに含まれている全てのパラメータがリストされます。 これには以下が含まれます。
システム属性 (SYSTEM.Age、SYSTEM.LoopCount など)
エミッタ属性 (EMITTER.Age、EMITTER.DistanceTraveled など)
パーティクル属性 (PARTICLES.Position、PARTICLES.SpriteSize など)
モジュール出力 (OUTPUT.GRIDLOCATION.GridSpacing、OUTPUT.PARTICLESTATE.FirstFrame など)
エンジン指定 (ENGINE.DeltaTime、ENGINE.EMITTER.NumParticles、ENGINE.OWNER.Velocity など)
一時ステージ (TRANSIENT.FirstFrame、TRANSIENT.ScalabilityExecutionState など)
このタブには、デフォルトでは空になっている次の見出しもあります。
公開されたユーザー ([ユーザー パラメータ] タブと同じ)
Stack Context Sensitive
Niagara パラメータ コレクション
ユーザーパラメータ
[ユーザー パラメータ] タブには、Niagara システムで作成されたユーザー パラメータが全てリストされます。 デフォルトでは空です。 このユーザー パラメータは、[パラメータ] タブの [公開されたユーザー] セクションと同じです。
ビューに依存した変更および名前変更
[オフセットの適用] などの特定のモジュールのグラフを表示している場合は、[パラメータ] リストが、現在利用可能な入力に絞り込まれます。
これらのタブでは、入力の名前を変更できます (例:INPUT.RotationAngleX)。 Unreal Engine の他の部分と同様に、入力名を 2 回クリックするか、F2 キーを押します。
[適用して保存] をクリックすると、新しい名前がモジュールのスタック エントリに表示されます。
階層の編集ツール
[階層の編集] ウィンドウでは、入力の順序付け、ツールチップの追加、依存関係の管理を行うことができます。
[階層の編集] インターフェースにアクセスするには、編集するスクラッチ パッド モジュール (この場合は、オフセットの適用モジュール) を開きます。
[パラメータ] タブで [入力階層の編集] をクリックします。
これにより [階層の編集] ウィンドウが開きます。
左の列から関連する入力を中央の列にドラッグします。中央の列では、青色のハイライトが表示されます。
中央の列にある入力をドラッグすると、その入力の順序を変更できます。
デフォルト
[詳細パネル] と同様に、アイテムのデフォルト値および変数設定にアクセスできます。
デフォルト モード:オプションには、[バインディング]、[カスタム]、[以前に設定されていない場合失敗]、デフォルト値などがあります。
デフォルト値:float、vector などの型に基づきます。
ツールチップ (およびローカライゼーション オプション):ユーザーにとって有用な実装の詳細、単位、注意事項、その他の注意事項を追加します。
表示単位:オプションには、[センチメートル]、[Lumen]、[時間]、[ギガバイト]、[グラム]、[度]、デフォルトの [未指定] があります。
詳細表示:デフォルトでは False です。
概要スタックで表示:デフォルトは False です。
インライン パラメータ ソート優先度とカラー オーバーライド:デフォルトは False です。
条件と表示条件の編集 (入力名とターゲット値):デフォルトでは [なし]、0 要素です。
プロパティ メタデータ:デフォルトでは 0 要素です。
変数の代替エイリアス:デフォルトでは 0 要素です。
ウィジェット タイプ:デフォルト。
最小値:デフォルトは 0 です。
最大値:デフォルトは 1 です。
ステップの幅:デフォルトは 1 です。
コミット時のみ値の変更をブロードキャスト:False (入力時ではなくコミット時に値だけ更新する場合は true に設定します)。
ツールチップ
[回転角 X] 入力の [ツールチップ] フィールドにテキストを追加し、[適用] または [適用して保存] をクリックします。
次に、[システム概要] グラフに移動して [オフセットの適用] モジュールを選択し、[詳細] パネルの [回転角 X] オプションにカーソルを乗せます。 ツールチップは、ポップアップの最初の行に表示され、続いて、カーソルを乗せている入力の名前と型の情報が表示されます。
表示単位
[階層の編集] ウィンドウ (または [詳細] パネル) で、値の [表示単位] を変更します。 [回転角 X] 入力を選択し、[表示単位] を [未指定] から [度] に変更します。
[ベクター] 入力の [表示単位] を [センチメートル] に変更します。
ローカル パラメータ
複雑なモジュールを作成する際は、ローカル パラメータを活用することで、モジュール グラフを整理して読みやすくすることができます。 演算ごとにグラフを分けるのが一般的で推奨されるアプローチです。
ローカル パラメータはモジュール内にのみ存在し、フレーム間では永続的ではありません。 多くの場合、グラフ内の一時的な値の格納に使用されます。
異なる Map Gets と Map Sets 間で入力を分割
Map Get の PARTICLES.Position ピンを右クリックし、Remove をクリックします。 ノードの接続を解除します (Alt キーを押しながらクリック)。
Multiply Vector with Quaternion ノードの近くに、Map Set ノード (右クリック メニューに Parameter Map Set として表示) を追加します。 Input ノードと Map Set ノードの間の Niagara Parameter Map ラインに接続します。
Multiply Vector with Quaternion 出力ピンを Map Set の Add (+) アイコンにドラッグします。 これにより、引き出したピンと同じ名前と型のローカル パラメータが作成されます。 この場合、LOCAL.Vector が作成されます。 このアクタの名前を、よりわかりやすい名前 (LOCAL.Offset など) に変更します。
Map Set ノードの右側で、白色の Dest ピンからドラッグし、Map Get オプションを検索してクリックします。
Add (+) をクリックし、前の手順で作成した LOCAL.Offset を検索して選択します。
これで、そのキャッシュに格納されたオフセット値を、グラフの別のセクションで使用できるようになります。
分割して再配置
Unreal Engine のグラフでノードを再配置または追加する場合、特定のノードを接続しているワイヤを切断しなければならないことがあります。 ピンまたはワイヤを Alt キーを押しながらクリックすると、切断されます。
代わりにピン接続を選択して移動するには、Ctrl キーを押しながらクリックしてワイヤを選択します。 有効なピンでリリースします。 空のグラフ領域でリリースすると、接続は削除されます。
ピンを削除、名前変更、順序変更、またはその他の操作を実行するには、右クリックしてメニューを表示し、目的の操作を選択します。
トランスフォーム空間および位置オフセット
トランスフォーム空間には次の 3 つの型があります。
シミュレーション:エミッタの [プロパティ] セクションに設定されているコンテキスト (ローカルまたはワールド) で計算されます。この場合、[ローカル空間] は true または false に設定されます。
ワールド:計算はワールド値のコンテキストで実行されます。
ローカル:ワールド内のどの場所にあっても、システムのコンテキストで計算が実行されます。
ユーザー設定トランスフォーム空間
この例では、このモジュールで使用するトランスフォーム空間を選択するオプションをユーザーに提供します。
Transform Vector ノードを作成します。 Map Get の Offset ピンを Transform Vector ノードの InVector ピンにドラッグします。
ユーザーがソース空間を入力として設定できるようにするには、Transform Vector の Source Space ピンを Map Get ノードの Add (+) アイコンにドラッグします。 これにより、同じ名前と型の入力が作成されます。
Map Set ノードをもう 1 つ追加し、それを元の Map Set と最終的な Map Set の間で接続します。 Map Set ノードに LOCAL.Offset エントリを作成し、それを Transform Vector の OutVector ピンにドラッグします。
位置オフセットを再実装
新しい Map Set ノードから Map Get ノードを作成し、Add (+) ボタンをクリックして LOCAL.Offset 変数にアクセスします。
次に、Add (+) ボタンをクリックして PARTICLES.Position パラメータにアクセスします。
上記の Add ノードを使用して、LOCAL.Offset を PARTICLES.Position に追加します。
ノード内の要素の順序を変更する場合は、アイテムの 1 つを右クリックして、[ピンを上に移動] をクリックします。
PARTICLES.Position ピンを使用して Add ノードを Map Set ノードに接続し、Dest を最後の Output Module にドラッグします。
変更を適用
[適用] または [適用して保存] をクリックし、[システム概要] グラフを開きます。 最小エミッタを選択してから、そのエミッタの Apply Offset スタック エントリを選択します。 [詳細] パネルに [ソース空間]入力オプションが追加されました。
コメントの追加
コメントは、ノードを視覚的にグループ化し、多くの場合、グラフのその部分を説明するテキストや、そのセクションに関連する他の注記を含めます。 テキストベースのコードと同様に、作業全体にわたってにコメントを残すことがベストプラクティスです。 コメントを付けると、他のデベロッパーが自分の決定を理解しやすくなります。
スクラッチ モジュール グラフを開きます。 グラフ内のノードを選択し、C キーを押してコメントを作成します。 この変数の名前をわかりやすい名前に変更します (例:Initial Offset Vector など)。
コメント ボックスを選択すると、[詳細] パネルで利用可能な設定 ([色]、[フォント サイズ]、[ズーム時にバブルを表示]、[カラー バブル]、[移動モード]、および [詳細] フィールドが表示されます。
コメントを付けると、グラフの各セクションで起きている処理に関するビジュアルおよびテキスト情報が提供されます。 このグラフの例に対するコメントには、Initial Offset Vector、Transform Into Space、および Set Position が含まれます。 この各コメントボックスには、最初の Map Get ノードと次の Map Set ノードが含まれます。ここでは、Map Get ノードが次のセクションを開始します。
モジュールの出力
モジュール出力は、パーティクル データを入力することなく、ユーザーに追加データを提供することができます。 エミッタ スタックのエントリは上から下に実行されるため、モジュールの出力データは、その下にあるスタック エントリでのみ利用可能です。 パーティクルシステムでデータをどのように使用するのかを理解するとき、出力やそこに書かれている他のパラメータを把握していると役に立ちます。
パラメータの書き込みを表示
最小エミッタにある任意のモジュールを選択します。 [詳細] パネルで、歯車 (⚙️) アイコンを選択し、[パラメータの書き込みを表示] をオンにします。 [パラメータの書き込み] セクションはデフォルトで折りたたまれています。 矢印 (🔽) をクリックすると、リストが展開され、スタック エントリが書き込む全ての出力が表示されます。
下の Apply Offset スクラッチ パッド モジュール スタック エントリでは、[パラメータの書き込み] セクションには PARTICLES.Position のみが含まれています。
モジュール出力の使用
Grid Location モジュール スタック エントリを選択し、[パラメータの書き込み] セクションを展開します。 このアクタは、他の OUTPUT パラメータと同様に PARTICLES.Position に書き込みます。
例として、OUTPUT.GRIDLOCATION.GridUVW を使用してパーティクルの色を変更します。
これを示すために、Spawn Particles in Grid スタック エントリを開き、X、Y、および Z の値を「10」に変更します。 パーティクルのグループが、線ではなくキューブ状のグループになっているのがわかります。
次に、エミッタの [パーティクルのスポーン] セクションで、[追加] (+) ボタンをクリックして [カラー] モジュールを作成します。
[色見本] の横にあるドロップダウン メニューを使用して、[ベクターから線形カラーを作成] と [Float] の両方を検索してクリックします。
新しい [ベクター (RGB)] フィールドの横にあるドロップダウン メニューを使用して、OUTPUT.GRIDLOCATION.GridUVW を検索し、クリックします。
ここで RGB 値は OUTPUT.GRIDLOCATION.GridUVW 情報によって決まります。
モジュール出力の生成
[オフセットの適用] スクラッチ パッド モジュール グラフを開きます。 Set Position コメント セクション (最後の Map Get と Map Set) で、Map Get の LOCAL.Offset ピンを Map Set ノードの Add (+) ピンにドラッグします。
接続ワイヤをダブルクリックして再ルーティング ノードを作成し、必要に応じてこれを移動して、グラフでの重なりを減らして可視性を高めます。 グラフの右クリック メニューから再ルーティング ノードを手動で作成することもできます。
Map Set ノードの新しい LOCAL.Offset ピンを右クリックします。 [名前空間を変更] > [OUTPUT] をクリックします。
これにより、LOCAL 名前空間が OUTPUT に変更されます。 名前空間モディファイアー (例:MODULE) を追加し、モジュール名 (オフセットの適用) を追加します。 その結果が Map Set ノードの OUTPUT.MODULE.Offset となります。
[適用] をクリックし、[システム概要] グラフを開きます。 最小エミッタの Apply Offset スタック エントリを選択し、[詳細] パネルの [パラメータの書き込み] セクションを展開します。 OUTPUT.APPLYOFFSET.Offset パラメータがリスト内に表示され、その下にあるすべてのモジュール スタック エントリで使用できます。
パラメータを直接設定
例として、オフセットをクエリしてみましょう。 [追加] (+) ボタンをクリックして、Apply Offset スタック エントリの下に Set Parameters スタック エントリを作成します。 このモジュールは、[新規または既存のパラメータを設定] として検索メニューに直接表示されます。
[詳細] パネルで、[追加] (+) ボタンをクリックし、リストに Vector (PARTICLES.Vector) 項目を作成します。
新しいエントリで、矢印をクリックして型メニューを開き、OUTPUT.APPLYOFFSET.Offset を検索してクリックします。
動的モジュール入力
モジュール スクリプトを作成する際には、機能を設定する場所についていくつかのオプションがあります。 多数の動的入力が利用可能です。これを実装すると、ユーザーのオプションや能力が増えます。
たとえば、Apply Offset モジュールでクォータニオンを操作し直すことができます。 [オフセットの適用] グラフを開き、グラフ内の最初の Map Get ノード (Quaternion ノードに接続された、個別の X、Y、および Z Map Get 入力を持つマップ) に移動します。
この方法でのクォータニオンの処理には、いくつかの制限があります。 回転角度は X、Y、Z に別々に公開され、角度の型は度数と想定しています。 ユーザーに提供されているオプションはこれらのみです。
入力としてクォータニオンを公開し、既存の動的入力によって処理させる方が、ユーザーにとってより強力になる可能性があります。 この場合、最初の Map Get ノードの回転角度ではなく、クォータニオンを直接使用できます。
動的入力の設定
右クリックして、1 番目の Map Get ノードから X ピン、Y ピン、Z ピンをそれぞれ削除します。 XYZRotation to Quaternion ノードも削除します。
Map Get で、Add (+) ピンをクリックして、INPUT.Quaternion (Quat) を検索し、クリックします。 わかりやすい名前に変更します (例: INPUT.RotationQuaternion)。 そのピンを Multiply Vector With Quaternion ノードの Quaternion ピンにドラッグします。
[適用] をクリックし、[システム概要] グラフを開きます。 回転クォータニオンは、オフセットの適用モジュールの [詳細] パネルで使用可能になり、個別の X、Y、および Z のオプションは削除されました。
動的入力の使用
エミッタの Apply Offset スタック エントリで、Rotation Quaternion 項目のドロップダウンを開き、[クォータニオンの作成] を検索してクリックします。
これで、ユーザーは動的入力で事前に定義されたオプションを選択できるようになりました。 [角タイプ] を変更し、[開始クォータ二オン] として [XYZ 回転] を選択し、異なる座標空間を指定できます。 これらは全て、Niagara が提供する組み込みオプションです。
考慮事項
モジュールを作成し、表示する方法を見つけるとき、何が管理しやすく、ユーザーにとって最も強力で使いやすいのかを考えてください。 制限が少なくなりすぎないよう、エンド ユーザーにとって柔軟に対応できるバランスをうまく取るようにしてください。
この場合の欠点は、「回転クォータニオン」が少し難解で、ユーザーにとって不明確になる可能性があることです。
そのような潜在的な問題に対処するには、入力にツールチップを追加します。 [パラメータ] リストで入力を選択し、[詳細] パネルの [ツールチップ] フィールドにツールチップを入力します。 この入力に対して、「Use the Make Quaternion Dynamic Input」などと入力できます。これにより、ユーザーには次のステップが明確に表示されます。
[適用] をクリックします。 [システム概要] グラフに移動して [オフセットの適用] モジュールを選択し、[詳細] パネルの [回転クォータニオン] オプションにカーソルを乗せます。 カスタム テキストは、ツールチップの最初の行として表示されます。
モジュール メモ
スクラッチ パッド モジュールも含め、すべてのモジュールには利用可能な [メモ] フィールドがあります。 これらのモジュールの使用方法に関するメモは、エミッタでモジュールのスタック エントリが選択されている場合に [詳細] パネルの上部に表示されます。 ここには、モジュールがどのように動作するかに関する情報や、使用方法に関する特徴や依存関係に関する注意事項が記述されています。
モジュール メモの追加
このオプションを検索して編集するには、グラフの背景をクリックしてノードの選択を解除します。 そうすると、モジュールの特定の部分ではなく全体に関する情報が [詳細] パネルに表示されます。 [メモ メッセージ] フィールドにモジュールに関する情報を入力します。
[オフセットの適用] スクラッチ モジュールの場合、次のツールチップが役立つ場合があります。「This module applies an offset to the particle position. Use the Make Quaternion Dynamic Input as a utility to provide the Quaternion.」
モジュール メモを表示
[適用] をクリックし、[システムの概要] グラフを開きます。 Apply Offset スクラッチ モジュール スタック エントリを選択すると、[モジュールの使用方法に関するメモ] が [詳細] パネルの上部に表示されます。
メモを無視して表示
[詳細] パネル上部のメモ (およびその他の問題や警告) は、閉じる] をクリックすると非表示にすることができます。
モジュールの上部にある歯車 (⚙️) アイコンをクリックし、[全てのスタックの問題を無視] をクリックすると、メモを再び表示することができます。
1 つのスタック エントリを閉じると、同じモジュール型の新しく追加されたスタック エントリに [メモ] セクションが表示されます。
パラメータの管理
全てのパラメータと入力は [パラメータ] タブにリストされます。
このリストには、モジュールで使用しなくなったパラメータや入力が含まれている場合があります。
パラメータ使用統計
クリーンアップが必要なパラメータと入力を特定する最も簡単な方法は、各入力の右側にあるフィールドをチェックすることです。 これは、各入力の読み取りおよび書き込みの参照を表示します。 この場合、INPUT.RotationAngle パラメータ (X、Y、Z) の 3 つ全てが使用されていません。それらのエントリはすべて、読み取り数が 0|0 で、書き込み数が 0 であるものとしてリストされているためです。
使用されていないパラメータの削除
モジュール グラフ内でその使用が削除されても、パラメータは [パラメータ] リストに残ります。 不要になったら、手動で削除する必要があります。
このような未使用のパラメータを削除するには、[パラメータ] リストでそれらを選択してから Delete キーを押すか、パラメータを右クリックして Delete キーを押します。
データインターフェース
これらの特殊なデータ型は、一般的なエディタからデータを Niagara に渡し、パーティクルを制御したり、シミュレーションに影響を与えたりするために使用できます。
データ インターフェースへのアクセス
データ インターフェースにアクセスするには、スクラッチ モジュール グラフを開きます。 Map Get ノードで Add (+) (+) ピンをクリックして、[新規作成] ドロップダウンを開きます。 [データ インターフェース] をクリックすると、オプションのリストが表示されます。
これらのデータ インターフェースのほとんどは、エンジン内に作成済みのモジュールがあります。 場合により、その機能をスクラッチ モジュールに直接追加したいこともあります。
データ インターフェースの操作
この例では、グラフの [空間にトランスフォーム] セクションと [位置の設定] セクションの間に空間を作成します。
Map Set ノードを Set Position セクションの前に追加し、ピンのルーティングを変更します。 Transform Into Space の Map Set ノードを新しい Map Set ノードに接続し、Map Set の Dest ピンを Set Position のMap Get および後続の Map Set ノードにドラッグします。
Map Get ノードを作成し、INPUT.CameraQuery 入力を追加します。
INPUT.CameraQuery ピンをグラフ上の空き領域にドラッグし、[ソース フィルタリング] メニューを開きます。 最初のエントリは、選択したデータ インターフェースに固有であり、展開すると、そのデータ インターフェースで利用できる全てのメソッドが一覧表示されます。
この例では、[カメラプロパティを取得する (CPU/GPU)] をクリックします。 これはカメラ位置、前方ベクター、上向きベクター、および右向きベクター (全てワールド コンテキスト内) を提供します。 このデータを使用して、カメラ方向またはカメラ方向のオフセットを適用できます。
INPUT.Float を Map Get ノードに追加し、わかりやすい名前 (CameraOffsetScale など) を付けます。
Multiply ノードを使用し、Forward Vector World に新しい INPUT.CameraOffsetScale float 値を乗算します。
LOCAL.Offset を Map Get ノードに追加します。 それを Multiply ノードの結果に追加します。
Map Set ノードのこの新しいセクションで、LOCAL.Offset を追加します。 次に、Add ノードの結果を LOCAL.Offset ピンに接続します。
データ インターフェースの使用
[適用] をクリックし、[システム概要] グラフを開きます。 Apply Offset スクラッチ モジュール スタック エントリを選択します。 [詳細] パネルには[カメラ オフセット スケール] セクションがあり、さらに浮動小数入力を含むユーザー向けの追加オプションを備えた [カメラ クエリ] セクションが追加されました。
カメラ オフセットのスケールを -200 に変更し、オフセットがどのように機能するかを確認します。
フィールドの非表示
モジュール作成者は、ユーザーに変更してほしくない、またはユーザーが変更する必要がないフィールドを非表示にできます。
この例では、ユーザーが [プレイヤー コントローラー インデックス] または [現在のフレーム データが必要] フィールドを編集する必要がないことが想定されます。 そのため、これらのオプションは非表示にできます。
[オフセットの適用] スクラッチ パッド モジュール グラフを開きます。 [詳細] パネル (または [階層の編集] ビュー) で [詳細表示] オプションを有効にします。 ユーザーが [詳細設定] セクションを展開している場合に、この入力を表示するかどうかを決定します。
[システム概要] グラフで、Apply Offset スタック エントリを選択します。 [詳細] パネルの [詳細設定] セクション内の追加のデータ インターフェース情報が非表示になりました。 この情報は、パネルの [詳細設定] セクションを開くと表示できます。 矢印ボタンをクリックするとこのセクションが展開され、もう一度クリックすると折りたたまれます。
この設定により、上級ユーザーは分割画面ゲームで作業しているときにカメラを手動で設定する必要がある場合に、これらの設定を変更できますが、ほとんどのユーザーはそれらの設定を変更する必要がないため、煩雑さを解消できます。
[階層の編集] インターフェースを使用すると、[カメラ クエリ] が [詳細設定] セクションに設定されている場合でも、[詳細] パネルで [カメラ オフセット スケール] 入力を使用可能にすることができます。
スクラッチ パッド モジュール グラフで、[パラメータ] タブを開いてから [階層の編集] パネルを開きます。 INPUT.CameraOffsetScale を左の列から中央の列にドラッグして、順序を並べ替えます。
[適用] をクリックします。 [システム概要] グラフで、Apply Offset モジュール スタック エントリを選択します。 [詳細] パネルでは、Camera Offset Scale 入力は、[詳細設定] パネルが折りたたまれている状態でもメインの入力リストに含まれます。
ユーザーパラメータ
ユーザー パラメータを使用すると、Niagara システムやモジュール グラフを何度も開いて編集することなく、Niagara 設定を変更できます。 Niagara システムがレベルに追加されると、アセットの [詳細] パネルでユーザー パラメータが使用できます。 これにより、ユーザーがシーンのコンテキスト内でこれらのパラメータを直接調整できるため、ワークフローが迅速化します。
ユーザー パラメータに関連する負荷が発生します。 ユーザー パラメータが調整されるたびに、パラメータが対応する実行コンテキストにプッシュされ、その同じコンテキスト内の全てのパラメータが更新されます。
システムおよびエミッタのスポーン
システムおよびエミッタの更新
パーティクルのスポーンとパーティクルの更新 (エミッタ単位)
シミュレーション ステージ
一般的に、パフォーマンス上の懸念により、データ インターフェースをユーザー パラメータとして使用することは推奨されません。 エンジンはインスタンス単位でデータ インターフェースのコピーを作成します。これは UObjects であるため、ガベージ コレクションの対象となります。 データ インターフェースの主な負荷は、インスタンスの作成時に発生します。 作成された後は、スタックの他の場所にある場合と同じ負荷になります。
モジュール入力の昇格
モジュール入力はユーザー パラメータに昇格できます。 モジュール入力を昇格するには、次の手順を実行します。
[システムの概要] グラフの最小エミッタで、Apply Offset スタック エントリを選択します。
Camera Offset 入力の横にある [動的入力] ドロップダウンをクリックします。
「Read from new User parameter」を検索してクリックします。
[詳細] パネルのフィールドと同じ名前と値で新しいユーザー パラメータが作成されます。 このパラメータの表示名は、USER Camera Offset Scale です。コードやブループリントでこの値や他のユーザー パラメータにアクセスする場合は、USER.CameraOffsetScale または User.CameraOffsetScale という形式にする必要があります。
ユーザー パラメータの編集
[パラメータ] タブにはユーザー パラメータが表示されますが、このインターフェースでは編集できません。 [ユーザー パラメータ] タブには、値を編集するためのフィールドが用意されています。 このチュートリアルでは、[ユーザー カメラ オフセット スケール]を「0」に戻します。
ユーザー パラメータの使用
レベルを開き、Niagara システム (この例では「NS_Minimal」) をシーンにドラッグします。 アウトライナーで Niagara システムを選択します。 [詳細] パネルで、[ユーザー パラメータ] セクションを展開します。 Camera Offset Scale ユーザー パラメータがリストに含まれています。 そのため、ユーザーは、Niagara ビューポート内ではなく、ワールドのコンテキスト内でこれらのパラメータをインタラクティブに設定できます。
静的スイッチ
静的スイッチはスクリプトのフローを制御します。 グラフの特定部分を、特定の状況を除いてモジュールからコンパイルする必要がある場合に便利です。
静的スイッチの実装
この例では、USER.CameraOffsetScale パラメータを切り替えます。 これはエンド ユーザーが使用することはほとんどないと考えられるため、ほとんどの場合、エミッタでコードを利用できる必要はありません。
[オフセットの適用] スクラッチ モジュール グラフを開き、USER.CameraOffsetScale があるセクションに移動します。
このセクションで右クリックし、Static Switch ノードを作成します。
静的スイッチの名前をわかりやすい名前に変更します (例:Use Camera Offset)。
静的スイッチは特定の型 (一般的には、数値、ただし必ずしもそうではない) を想定しています。 Add (+) ピンをクリックして型を追加します。この例では、Niagara Parameter Map 型を検索、選択します。
Camera Offset Map Set 出力を Static Switch ノードにドラッグして、Static Switch 出力を Set Position セクションの Map Get と Map set の両方にドラッグします。
Ctrl キーを押しながら クリック すると、接続ワイヤを選択して別のピンに移動できます。
次に、Transform Into Space セクションの Map Set を Static Switch ノードの False ピンに接続します。
Static Switch が false の場合、Camera Offset セクションがスキップ (コンパイル) され、Transform Into Space セクションからスイッチに進み、次の Set Position セクションに進みます。 true の場合 Camera Offset ノードが使用されます。
静的スイッチ設定
デフォルトでは、静的スイッチの型はブーリアンです。 他のオプションも利用可能ですが、この例ではデフォルトのブーリアンを使用します。 このデフォルト値は true または false に設定できますが、この例では false のままにします。 Expose As ピンはこのチュートリアルでは False のままにしておくことができます。 true に設定すると、グラフ内のノードに設定用のピンが表示され、グラフ内のデータを使用してその値を設定する方法が作成されます。
静的スイッチの使用
[システム概要] グラフを開き、Apply Offset スクラッチ モジュール スタック エントリを選択します。 [詳細] パネルに [カメラ オフセットを使用] オプションが追加されます。 false に設定されている間は、他のカメラ オフセット オプションはリストに表示されず、スキップされたノードはエミッタに影響を与えません。 カメラ データ インターフェースの情報は、[詳細設定] オプション セクションからも削除されました。
true に設定すると Camera Offset ノードがコンパイルされ、関連する全てのオプション (Advanced セクションの外側と内側の両方) が [詳細] パネルで使用可能になります。
スクラッチ モジュールの共有
スクラッチ モジュールを他の Niagara システムやチーム メンバーと共有するには、スクラッチ モジュールを Niagara ノード スクリプト アセットとしてエクスポートする必要があります。
[オフセットの適用] グラフを開き、[ローカル モジュール] タブをクリックします。 リストされたモジュール名を右クリックして、[アセットを作成] をクリックします。
[種類を選択してスクリプトを作成] ウィンドウが開きます。 モジュールに名前 (例: NMS_ApplyOffset など) を付け、このアセットを配置するフォルダーを選択します。 [保存] をクリックします。
アセットが作成され、コンテンツ ブラウザからアクセスできます。
エンジンは自動的に新しい Niagara モジュール スクリプト アセットを開きます。
ライブラリの公開
Niagara モジュール スクリプト アセットで最初に変更する必要があるのは、[スクリプト詳細] パネルの [ライブラリの可視性] フラグです。
デフォルトでは、[非公開] に設定されています。つまり、メニューには表示されず、[ライブラリのみ] オプションが有効になっています (デフォルト)。
これを示すために、Niagara システムを開き、[追加 +] ボタンを使用して「ApplyOffset」を検索します。 唯一の結果は、さきほど作成した NMS アセット (ゲームとしてリストされます) ではなく、スクラッチ パッドです。
これを処理する方法は 2 つあり、Niagara モジュール スクリプト アセットをどの程度検出可能にするかに応じて異なります。
[非公開] をオン、[ライブラリのみ] をオフ
1 つのオプションは、このモジュールを [非公開] に設定し、ワークステーションの [ライブラリのみ] フィルター オプションをオフにすることです。 ユーザーがデフォルトのフィルター設定を使用してモジュールに簡単にアクセスできる必要がない場合、またはその必要がある場合は、この方法をお勧めします。 他のユーザーがこのモジュールを使用する必要がある場合は、[新規モジュールを追加] ウィンドウの [ライブラリのみ] オプションをオフにする必要があります。
[公開] と [ライブラリのみ] をオン
もう 1 つのオプションは、Niagara モジュールのスクリプト アセットの [ライブラリの可視性] を [公開] に変更することです。 これにより、モジュールがデフォルトのフィルター オプション ([ライブラリのみ] に設定) とともに [新しいモジュールの追加] メニューに表示されるので、さらに見つけやすくなります。 これは、チームや他のエンド ユーザーが簡単にアクセスできるようにしたいモジュールに適しています。
Niagara モジュール スクリプト アセットを開いて、[ライブラリの可視性] を [公開] に変更して、[コンパイル] と [保存] をクリックします。
この動作を確認するには、任意の Niagara システムを開き、[追加] (+) ボタンをクリックして「Apply Offset」を検索します。 前の例と異なり、[ライブラリのみ] オプションが true に設定されている場合、Niagara モジュール スクリプト アセット (「Game」というラベル) が検索結果に含まれています。
モジュール使用ビットマスク
新しい Niagara モジュール スクリプト アセットのモジュール使用ビットマスクをチェックし、可視性設定がこのモジュールの目的の機能に対して適切であることを確認します。
[説明] フィールド
Niagara モジュール スクリプトの [説明] フィールドのテキストは、[新しいモジュールの追加] メニューでモジュールにカーソルを乗せると表示されるツールチップに含まれます。 ユーザーがこのモジュールを使用するかどうかを決定するのに役立つ情報をここに追加します。 たとえば、その目的、このモジュールを使用するのにどのような状況が理想的か、ユーザーのクリエイティブや技術の目標と関連性が低いのかなどを説明します。
メモ メッセージ
Niagara スクリプト モジュールがスクラッチ モジュールから作成された場合は、[メモ] フィールドにスクラッチ モジュールに含まれていたテキストが自動的に入力されます。 スクラッチ モジュールにメモ テキストが含まれていない場合、これは空白です。 このメッセージは、エミッタ内でモジュールのスタック エントリが選択されると、[詳細] パネルの上部に表示されます。
キーワード
キーワードを使用すると、メニュー検索時に Niagara モジュール スクリプトを見つけやすくなります。 キーワードはスペースで区切ります。 Apply Offset Niagara モジュール スクリプトの [キーワード] フィールドには、「offset position camera」を含めることができ、エンドユーザーが「camera offset」を検索し、メニューに [オフセットの適用] をオプションとして表示できるようにします。
まとめ
スクラッチ パッド モジュールを使用すると、ビジュアル スクリプトによってエミッタおよび Niagara システムに新機能を直接追加することができます。
Niagara の使用方法の詳細については、「ビジュアル エフェクトの作成」および「Niagara スクリプト エディタ リファレンス」を参照してください。