5K Views
July 17, 18
スライド概要
2018年7月13日に行われた「GTMF 2018 TOKYO」で登壇した際に使用した資料です。
https://gtmf.jp/2018/
Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/
プログラマブル VFX 待望のUE4新機能ナイアガラ
Rob Gray Developer Relations Technical Artist
UE4のNiagaraは 4.20でアーリーアクセス!
デザインの考え方 システムのヒエラルキー Niagaraって何? Unreal Engine 4の 次世代VFXツールセット 新しいVFXのワークフローと パラダイム UI/UXのショーケース コンテンツの事例
デザインの考え方 なぜVFXのシステムを 作り直す必要があるのか? ● Unreal Engineは幅広く色々な 業界に使用されている ● 様々な専門家も増えている ● 「我々は全てが分かる訳ではない」 ● 時は金なり
デザインの考え方 Cascade: 以前の パラダイム
デザインの考え方 Cascadeの 利点 ○ ビヘイビアをモジュールとして簡単に 追加できる。モジュールはレイヤー、 スタック、インタラクションが可能 ○ コードなど分からなくても標準の ビヘイビアのライブラリーを利用して エフェクトが作れる ○ スタックの表示が読みやすい
デザインの考え方 Cascadeの 欠点 ○ 固定された関数とハードコード化 ○ 新しい機能を追加するにはコードが 必要で、パーティクルの負荷が重くなる ○ データ共有はほぼ無理 ○ イベントは限られていて使いにくい ○ CPU と GPU のシミュレーションは 大分違う
デザインの考え方 ● アーティストがすべてをコントロールできる ● 全部がプログラム、カスタマイズ可能 理想的なシステムは? ● デバッグ、ビジュアライゼーション、 パフォーマンスのための良いツールが 提供されている ● UE4の他の機能だけでなく、外部の ソースからの任意データに対応している やりたいことを邪魔しない
デザインの考え方 ● すべてをコントロールするために データ共有から始まった データへのアクセスが重要 Actor position, delta time, emitter orientation, transforms, loop count, normalized and unnormalized age, distance to camera, number of particles, execution index, number of instances, XYZ axis values, owner velocity, loop delay, execution state, system time, collision queries, other particle positions, velocities, transforms, color, scale, mesh bone or vertex velocities, vertex colors, the list goes on and on. すべてを公開する。
デザインの考え方 ● 公開したすべてのパラメータに アクセスする手段を用意した パーティクルのデータ ● 階層型のデータコンテナーである ネームスペースを使用した (例:Emitter.Age、 Particles.Position) ● パーティクルのデータは「パラメータマップ」 にすべて保存されている ● すべてが任意になる
デザインの考え方 ● どんなデータでもパーティクルの プロパティーとして渡すことが可能です 任意のデータ ● 複雑なUstruct、トランスフォームの マトリクス、Boolのフラグなど、ユーザーは 自由にシミュレーションで利用することが 可能です
デザインの考え方 ● 大きい議論:グラフ vs スタック たくさんのデータを どのように公開するのか? ○ UE4内で両方が使用されている ○ グラフは完全にコントロールができる ○ スタックはモジュール化されたビヘイビアを 使えて、読みやすい ○ Niagaraでは、グラフとスタックのハイブリッドを 採用した
デザインの考え方 モジュール → エミッタ → システム モジュール エミッター システム 基本データ モジュールのコンテナー 一つの「エフェクト」として ビヘイビア お互いにスタック可能 「関数を書く」 一つの役割、再利用可能 モジュールのパラメータを ここで変更可能 複数のエミッターを含む 全てオーバーライド可能
デザインの考え方 モジュール → エミッタ → システム モジュール エミッター システム 基本データ モジュールのコンテナー 一つの「エフェクト」として ビヘイビア お互いにスタック可能 「関数を書く」 一つの役割、再利用可能 モジュールのパラメータを ここで変更可能 複数のエミッターを含む 全てオーバーライド可能
モジュールとモジュールのフロー
モジュールとモジュールのフロー
モジュールとモジュールのフロー
モジュールとモジュールのフロー
モジュールとモジュールのフロー
モジュールとモジュールのフロー
モジュールとモジュールのフロー 最終的に全てはHLSLに変換される
モジュールとモジュールのフロー 最終的に全てはHLSLに変換される 目的:可能な限りCPU とGPUへ渡すデータの 違いをなくす
モジュールとモジュールのフロー 最終的に全てはHLSLに変換される
エミッターのスタック
エミッターのスタック
エミッターのスタック
エミッターのスタック
システムのスタック ● エミッターはシステムを構築する パーツです システム vs. エミッター ● システムはユーザーが定義できる グローバル変数を持っていて、システムの 中にあるすべてのエミッターがそれに アクセスできる ● システムは、シーケンサーを利用して エフェクトのタイミングをコントロールする (ループ、バースト、生成)
システムのスタック
システムのスタック
システムのスタック
システムのスタック
デモ: モジュール作成と Attribute Spreadsheet
オーバーライド(継承) ● Cascadeのワークフローでは無駄な 作業があった オーバーライド(継承) ● 既存のアセットを使い回せないので、 新しいアセットを作る必要があった ● Niagaraでは、すべてをオーバーライド (継承)可能にした
オーバーライド(継承) オーバーライド(継承) ● システムですべてのパラメータを オーバーライドできる。新しい モジュールを追加でき、 無効化もできる ● エミッタでも可能です(ループ、 バースト、ライフタイム、生成など)
オーバーライド(継承) 計算式 ● すべてのパラメータがHLSLに 変換されるので計算式も使える ● 様々なネームスペース(パーティクル、 エミッタ、システム)にアクセスができ、 HLSLやVMの関数も利用できる ● 新たにモジュールを作るまでもない 小さな機能を実装するときに便利
デモ:モジュラーの爆発
イベント イベント ● データ(Struct)を他のエミッタに渡すことができる ○ IDを使って一つのパーティクルを対象にする ○ システムのすべてのパーティクルを対象にする ○ 新しいパーティクルを生成させて、カスタムなアクションを 起こす
イベント
デモ: Recursion Examples
データのインターフェース データの インターフェース ● 任意データへアクセスするための 拡張可能なシステム ● メッシュデータ、オーディオ、 外部のDCCの情報、コードの オブジェクト、テキストの コンテナーなど ● 将来的に、プラグイン化でさらに 柔軟になる予定
データのインターフェース
データのインターフェース
デモ:Character Dissolve
将来の作業 これからの予定 ● カスタマイズ可能なモジュールのライブラリーを 提供する ● UE4の他の機能や外部のソースからデータを得る ために、新しいデータインターフェースを追加する ● スケーラビリティーとデバッグのためのツールを 増やす
将来の作業 これからの予定 ● ビューポート内のコントロールや プログラム可能なウィジット ● Cascadeからの変更ツール
将来の作業 Niagaraを使いましょう! 4.20でアーリーアクセス! プラグインマネジャーで有効にする
将来の作業 Unreal Japan Stream 毎月の第一木曜日
ありがとうございました! ---------------------------------------------------- Rob Gray Developer Relations Technical Artist