20.3K Views
December 09, 24
スライド概要
Unreal Engine Meetup in Osaka Vol.03 での講演資料となります。
UnrealEngine5.5で追加されたMutableプラグインおよびMutableSampleの紹介スライドです。
実際の講演では後半は実演形式で行いましたが、本スライドでは手順を画像として構成しなおしてあります。
Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/
Mutable を触ってみよう Senior Software Engineer, Developer Relations Takashi Suzuki 2024 Epic Games Japan
Mutable 5.5 Beta
サンプルを見てみる 本日の流れ 座学 実演
Mutable Tutorial | Epic Developer Community https://dev.epicgames.com/community/learning/tutor ials/yjw9/unreal-engine-mutable-tutorials Mutable Official Documentation https://github.com/anticto/Mutable-Documentation/w iki
Mutable Sample https://www.fab.com/listings/209e82f6-ad40-4253-b565-d2 f65b12efe7
MutableSample ● ● ● ● 色々なCustomizableObjectアセット 動的なUIを含むキャラクタークリエイション コンテンツサンプル風ショーケース ランダム生成デモ
キャラクターのバリエーション生成 静的またはランタイム どんなことがで きるの? メッシュの操作 複数のメッシュを一つに合成 モーフのベイク 内側のメッシュの削除 マテリアルの操作 マテリアル合成 テクスチャ加工 パラメータ調整 AnimBP? などなど
CustomizableObject ● ● ● ● Mutableの中心的なアセット ノードグラフ クック時にコンパイル 複数のCOに分割して構成可能 ○ 同時編集 ○ 双方向にハードリファレンス無し ○ クック時に一つに合成される
Customizable Object Instance ● マテリアルに対するマテリアルインスタンスの関係 ○ デフォルトパラメータ設定 ● インスタンスエディタ ● ランタイムパラメータ変更用関数 ○ Set***ParameterSelectedOption
Customizable SkeletalComponent ● ● ● ● ランタイムでスケルタルメッシュを生成する CustomizableObjectInstanceを設定 プロパティ ○ ComponentName COの出力先として使われる 関数 ○ GetCustomizableObjectInstance ○ UpdateSkeletalMeshAsync
CustomizableObject 編集画面
プレビュー用 インスタンス 確認/編集 コンパイル ベイク (静的スケルタルメッシュ生成)
Customizable Object Nodes Object ● ルートオブジェクト ● チャイルドオブジェクト を受け入れる ● プロパティ ○ ObjectName オブジェクトグループのアイテム名 ○ States ○ Attached to External Object 分割構成に利用
Customizable Object Nodes SkeletalMesh & MeshSection ● 入力メッシュとその要素 ● SkeletalMesh ○ 出力ピンを選択 ○ メッシュセクション ○ テクスチャ ● MeshSection ○ MaterialInstanceのパラメータを 入力ピンとして公開可能
Customizable Object Nodes MeshComponent ● 出力メッシュの表現 ● AddToMeshComponent 離れた位置の入力を合成 ● プロパティ ○ ComponentName CustomizableSkeletalComponentとのバインド用 ○ ReferenceSkeletalMesh 【設定必須】ベースとなるスケルタルメッシュ
Customizable Object Nodes ObjectGroup ● ● ● 1つまたは複数の Object(ChildObject)を入力 Objectを出力 プロパティ ○ Name パラメータ名 ○ Type 入力オブジェクトを切り替える条件 ■ Toggle (bool) ■ AllOptions ■ At least one Option (int) ■ One or None (int)
Customizable Object Nodes ExternalObject ● 子要素のObject > リンク先の ObjectGroup ● を使ってアセット間を移動 ○ リファレンスビューアでは確認不可
RootCO MeshComponent RootObject Customizable Object Nodes > Object ExternalObject ChildObject ObjectGroup Option_A Object Option_B Object
Customizable Object Nodes Table ● ● ● データテーブルで複数の設定を切り替え ParameterNameでObjectGroupと同じように公開 個別にインポートしなくていい
Customizable Object Nodes Pin ● 関連CO間でパラメータを共有する仕組み ○ Export *** Pin ○ Import *** Pin
Customizable Object Node > Object State ● ● 特定のゲームの状態において変更の可能性のあるパ ラメータリスト 最適化に利用
Mutable の利用方法 4選 プレイヤー カスタマイズ ゲーム内反応 事前定義 インスタンス 静的生成 誰が プレイヤー 開発者 主にエンジニア 開発者 主にデザイナー 開発者 主にデザイナー 設定タイミング ゲームプレイ中 (キャラクター作 成画面) ゲームプレイ中 エディタ エディタ Mutableの動作タ イミング ランタイム ランタイム ランタイム エディタ インゲームの アセットタイプ Object, Material Object,Material Object, Instance, Material SkeletalMesh, Material, Texture ランタイム 負荷 ランタイム生成 (非同期) ランタイム生成 (非同期) ランタイム生成 (非同期) 無し クック時 オブジェクトのコ ンパイル オブジェクトのコ ンパイル オブジェクトのコ ンパイル 無し エディタへの インパクト 無し 無し 無し アセット数が 増加 クオリティ 普通 普通 普通 高い (調整可能 ) (ゲームロジック)
実演!
最小COを作る
最小COを作る - Step1 SkeletalMeshノードを作成して SkeletalMeshアセットを設定 Note: ノード上のピンは 詳細パネルから選択できる CustomizableObjectを新規作成
最小COを作る - Step2 Mesh Sectionノードを引き出す Note: 公開したピンでマテリアルのパラメータ を設定できる
最小COを作る - Step3 MeshComponentノードに繋げて MeshComponentのComponentNameと ReferenceSkeletalMeshを設定
最小COを作る - Step4 BaseObjectノードに接続してコンパイル
最小COを作る - Step5 COによって生成された スケルタルメッシュやマテリアルなどは ここでプレビュー可能 プレビューにキャラクターが 表示されればOK シャツにめり込みが発生! >>>> このあと修正します
アクターに適用
アクターに適用 - Step1 コンテンツブラウザでCOを選択肢 CustomizableObjectInstanceを生成
アクターに適用 - Step2 ThirdPersonTemplateから BP_ThirdPersonCharacterをマイグレート してプロジェクトに取り込む モーション再生のために BaseBody_SkeletonとSK_Mannequinに 互換スケルトンを設定 (丁寧にやるならリターゲットする) SkeletalMeshComponentに 設定されている スケルタルメッシュを削除
アクターに適用 - Step3 CustomizableObjectInstanceを設定 CustomizableSkeletalComponentを SkeletalMeshComponentの下に追加 COのMeshComponentに設定した名前と同 じものをComponentNameに設定 →「最小COを作る - Step3」
アクターに適用 - Step4 GameModeブループリントを作成して 作成したBPをPawnとして設定 Basicテンプレートを使ってレベルを作成 GameModeを割り当てる
アクターに適用 - Step5 作成したCOをプレイヤーキャラクターと して利用することが出来た
シャツのめり込みを直す
シャツのめり込みを直す - Step1 RemoveMeshBlocksノードを追加 Modifiersに接続
シャツのめり込みを直す - Step2 対象のメッシュを選択 適切なGridSizeを選択 (UV編集のグリッドが変化) UVが表示される
シャツのめり込みを直す - Step3 一旦シャツのノードを削除してコンパイル シャツが消える
シャツのめり込みを直す - Step4 操作のヒントが表示される グリッド上で範囲選択
シャツのめり込みを直す - Step4 操作のヒントが表示される グリッド上で範囲選択
シャツのめり込みを直す - Step5 胴体部分のメッシュが取り除かれた
シャツのめり込みを直す - Step5 シャツのめり込みが改善👏👏👏 シャツを繋げなおしてコンパイル
着脱可能ズボン作成
着脱可能ズボン作成 - Step1 SkeletalMeshノードにSKM_Pantsを設定 MeshSectionを引き出す 同じ名前 AddToMeshComponentノード
着脱可能ズボン作成 - Step2 ChildObjectNodeを追加して接続 ObjectNameはPants_Aに
着脱可能ズボン作成 - Step3 ルートオブジェクトのChildrenに接続し コンパイル ObjectGroupノードを追加して接続 NameはPantsに
着脱可能ズボン作成 - Step4 PreviewInstanceParameterViewに注目 Pants_Aにチェックを入れると キャラクターがズボンを装着
着脱可能ズボン作成 - Step5 「シャツのめり込みを直す」と同じように ズボンの内側のメッシュを削除します。 よく見ると ズボンがボディにめり込んでいる Pants_AのModifierに接続
ズボンを着脱させる
ズボンを着脱させる - Step1 Set***ParameterSelectedOptionで パラメータをセット Pants_AパラメータはToggleタイプなので Boolで設定を行う CustomizableSkeletalComponentの GetCustomizableObjectInstance
ズボンを着脱させる - Step2 !? Z パラメータをセットしただけでは メッシュは書き変わりません
ズボンを着脱させる - Step3 UpdateSkeeltalMeshAsync(Result) を呼び出すことでメッシュが更新される 追加したメッシュ更新イベントを呼び出す 更新完了イベント
ズボンを着脱させる - Step4 Z キーに反応してズボンを 着脱させることができた
CO分割で ジャケット作成
CO分割でジャケット作成 - Step1 ルートオブジェクトに接続 ObjectGroup ”Jacket” を作成
CO分割でジャケット作成 - Step2 ObjectNameha Jacket_A SKM_Jacket_Aを追加 CustomizableObjectを新規作成 AddToMeshComponentに “FullBody”を設定
CO分割でジャケット作成 - Step3 接続先のCustomizableObjectを選択 接続先のアセットを選択できる 接続先のCOが持つObjectGroupから “Jacket”を選択
CO分割でジャケット作成 - Step4 PreviewInstance内にパラメータとして Jacket_Aが選択できるようになった 接続先のCOが持つボディやシャツのメッ シュも見える
CO分割でジャケット作成 - Step5 前腕にめりこみがみえる 前腕部を削除できました RemoveMeshBlocksで前腕部を削除
CO分割でジャケット作成 - Step6 同じ要領でCO_JacketBを作成する SKM_Jacket_Bを使うところ以外は同じ
CO分割でジャケット作成 - Step7 ルートのCustomizableObjectのJacketオブジェク トグループノードを選択 Jacketパラメータがプルダウンに変化 TypeをOne or Noneに設定
ジャケットを着せ替え
ジャケットを着せ替え - Step1 SetIntParameterSelectedOption パラメータを取得するノードは CustomizableObejctから パラメータに対して有効なアイテム の文字列を取得 ParamName: Jacket SelectedOptionName: None / Jacket_A / Jacket_B が渡される
ジャケットを着せ替え - Step2 ジャケットを着せ替え完成
まとめ ● Mutableはキャラクターカスタイマイズ機能のためのプラグインで、ノードベースで非常に拡張性の高いシステム です ● 陰面メッシュの削除やメッシュのマージ、テクスチャのマージやベイクなど最適化の面でも非常に考慮された実践 的な仕組みがあります ● 本日紹介していない機能としてマテリアルの操作やプロジェクター、タグ操作などまだまだ沢山のしくみがありま すが、非常に詳しい公式ドキュメントやチュートリアルがあります ● MutableSample はMutableのすべてを網羅したサンプルです。 是非ダウンロードしてしゃぶりつくしてください ● Mutableを触ってみて気付きを得たら、ぜひブログ・SNS等で俺SUGEEEEしてください!
ご清聴ありがとうございました ! 2024 Epic Games Japan, Takashi Suzuki