Mutableを触ってみよう

20.3K Views

December 09, 24

スライド概要

Unreal Engine Meetup in Osaka Vol.03 での講演資料となります。
UnrealEngine5.5で追加されたMutableプラグインおよびMutableSampleの紹介スライドです。
実際の講演では後半は実演形式で行いましたが、本スライドでは手順を画像として構成しなおしてあります。

profile-image

Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Mutable を触ってみよう Senior Software Engineer, Developer Relations Takashi Suzuki 2024 Epic Games Japan

4.

Mutable 5.5 Beta

5.

サンプルを見てみる 本日の流れ 座学 実演

6.

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

7.

Mutable Sample https://www.fab.com/listings/209e82f6-ad40-4253-b565-d2 f65b12efe7

8.

MutableSample ● ● ● ● 色々なCustomizableObjectアセット 動的なUIを含むキャラクタークリエイション コンテンツサンプル風ショーケース ランダム生成デモ

9.

キャラクターのバリエーション生成 静的またはランタイム どんなことがで きるの? メッシュの操作 複数のメッシュを一つに合成 モーフのベイク 内側のメッシュの削除 マテリアルの操作 マテリアル合成 テクスチャ加工 パラメータ調整 AnimBP? などなど

10.

CustomizableObject ● ● ● ● Mutableの中心的なアセット ノードグラフ クック時にコンパイル 複数のCOに分割して構成可能 ○ 同時編集 ○ 双方向にハードリファレンス無し ○ クック時に一つに合成される

11.

Customizable Object Instance ● マテリアルに対するマテリアルインスタンスの関係 ○ デフォルトパラメータ設定 ● インスタンスエディタ ● ランタイムパラメータ変更用関数 ○ Set***ParameterSelectedOption

12.

Customizable SkeletalComponent ● ● ● ● ランタイムでスケルタルメッシュを生成する CustomizableObjectInstanceを設定 プロパティ ○ ComponentName COの出力先として使われる 関数 ○ GetCustomizableObjectInstance ○ UpdateSkeletalMeshAsync

13.

CustomizableObject 編集画面

14.

プレビュー用 インスタンス 確認/編集 コンパイル ベイク (静的スケルタルメッシュ生成)

15.

Customizable Object Nodes Object ● ルートオブジェクト ● チャイルドオブジェクト を受け入れる ● プロパティ ○ ObjectName オブジェクトグループのアイテム名 ○ States ○ Attached to External Object 分割構成に利用

16.

Customizable Object Nodes SkeletalMesh & MeshSection ● 入力メッシュとその要素 ● SkeletalMesh ○ 出力ピンを選択 ○ メッシュセクション ○ テクスチャ ● MeshSection ○ MaterialInstanceのパラメータを 入力ピンとして公開可能

17.

Customizable Object Nodes MeshComponent ● 出力メッシュの表現 ● AddToMeshComponent 離れた位置の入力を合成 ● プロパティ ○ ComponentName CustomizableSkeletalComponentとのバインド用 ○ ReferenceSkeletalMesh 【設定必須】ベースとなるスケルタルメッシュ

18.

Customizable Object Nodes ObjectGroup ● ● ● 1つまたは複数の Object(ChildObject)を入力 Objectを出力 プロパティ ○ Name パラメータ名 ○ Type 入力オブジェクトを切り替える条件 ■ Toggle (bool) ■ AllOptions ■ At least one Option (int) ■ One or None (int)

19.

Customizable Object Nodes ExternalObject ● 子要素のObject > リンク先の ObjectGroup ● を使ってアセット間を移動 ○ リファレンスビューアでは確認不可

20.

RootCO MeshComponent RootObject Customizable Object Nodes > Object ExternalObject ChildObject ObjectGroup Option_A Object Option_B Object

21.

Customizable Object Nodes Table ● ● ● データテーブルで複数の設定を切り替え ParameterNameでObjectGroupと同じように公開 個別にインポートしなくていい

22.

Customizable Object Nodes Pin ● 関連CO間でパラメータを共有する仕組み ○ Export *** Pin ○ Import *** Pin

23.

Customizable Object Node > Object State ● ● 特定のゲームの状態において変更の可能性のあるパ ラメータリスト 最適化に利用

24.

Mutable の利用方法 4選 プレイヤー カスタマイズ ゲーム内反応 事前定義 インスタンス 静的生成 誰が プレイヤー 開発者 主にエンジニア 開発者 主にデザイナー 開発者 主にデザイナー 設定タイミング ゲームプレイ中 (キャラクター作 成画面) ゲームプレイ中 エディタ エディタ Mutableの動作タ イミング ランタイム ランタイム ランタイム エディタ インゲームの アセットタイプ Object, Material Object,Material Object, Instance, Material SkeletalMesh, Material, Texture ランタイム 負荷 ランタイム生成 (非同期) ランタイム生成 (非同期) ランタイム生成 (非同期) 無し クック時 オブジェクトのコ ンパイル オブジェクトのコ ンパイル オブジェクトのコ ンパイル 無し エディタへの インパクト 無し 無し 無し アセット数が 増加 クオリティ 普通 普通 普通 高い (調整可能 ) (ゲームロジック)

25.

実演!

26.

最小COを作る

27.

最小COを作る - Step1 SkeletalMeshノードを作成して SkeletalMeshアセットを設定 Note: ノード上のピンは 詳細パネルから選択できる CustomizableObjectを新規作成

28.

最小COを作る - Step2 Mesh Sectionノードを引き出す Note: 公開したピンでマテリアルのパラメータ を設定できる

29.

最小COを作る - Step3 MeshComponentノードに繋げて MeshComponentのComponentNameと ReferenceSkeletalMeshを設定

30.

最小COを作る - Step4 BaseObjectノードに接続してコンパイル

31.

最小COを作る - Step5 COによって生成された スケルタルメッシュやマテリアルなどは ここでプレビュー可能 プレビューにキャラクターが 表示されればOK シャツにめり込みが発生! >>>> このあと修正します

32.

アクターに適用

33.

アクターに適用 - Step1 コンテンツブラウザでCOを選択肢 CustomizableObjectInstanceを生成

34.

アクターに適用 - Step2 ThirdPersonTemplateから BP_ThirdPersonCharacterをマイグレート してプロジェクトに取り込む モーション再生のために BaseBody_SkeletonとSK_Mannequinに 互換スケルトンを設定 (丁寧にやるならリターゲットする) SkeletalMeshComponentに 設定されている スケルタルメッシュを削除

35.

アクターに適用 - Step3 CustomizableObjectInstanceを設定 CustomizableSkeletalComponentを SkeletalMeshComponentの下に追加 COのMeshComponentに設定した名前と同 じものをComponentNameに設定 →「最小COを作る - Step3」

36.

アクターに適用 - Step4 GameModeブループリントを作成して 作成したBPをPawnとして設定 Basicテンプレートを使ってレベルを作成 GameModeを割り当てる

37.

アクターに適用 - Step5 作成したCOをプレイヤーキャラクターと して利用することが出来た

38.

シャツのめり込みを直す

39.

シャツのめり込みを直す - Step1 RemoveMeshBlocksノードを追加 Modifiersに接続

40.

シャツのめり込みを直す - Step2 対象のメッシュを選択 適切なGridSizeを選択 (UV編集のグリッドが変化) UVが表示される

41.

シャツのめり込みを直す - Step3 一旦シャツのノードを削除してコンパイル シャツが消える

42.

シャツのめり込みを直す - Step4 操作のヒントが表示される グリッド上で範囲選択

43.

シャツのめり込みを直す - Step4 操作のヒントが表示される グリッド上で範囲選択

44.

シャツのめり込みを直す - Step5 胴体部分のメッシュが取り除かれた

45.

シャツのめり込みを直す - Step5 シャツのめり込みが改善👏👏👏 シャツを繋げなおしてコンパイル

46.

着脱可能ズボン作成

47.

着脱可能ズボン作成 - Step1 SkeletalMeshノードにSKM_Pantsを設定 MeshSectionを引き出す 同じ名前 AddToMeshComponentノード

48.

着脱可能ズボン作成 - Step2 ChildObjectNodeを追加して接続 ObjectNameはPants_Aに

49.

着脱可能ズボン作成 - Step3 ルートオブジェクトのChildrenに接続し コンパイル ObjectGroupノードを追加して接続 NameはPantsに

50.

着脱可能ズボン作成 - Step4 PreviewInstanceParameterViewに注目 Pants_Aにチェックを入れると キャラクターがズボンを装着

51.

着脱可能ズボン作成 - Step5 「シャツのめり込みを直す」と同じように ズボンの内側のメッシュを削除します。 よく見ると ズボンがボディにめり込んでいる Pants_AのModifierに接続

52.

ズボンを着脱させる

53.

ズボンを着脱させる - Step1 Set***ParameterSelectedOptionで パラメータをセット Pants_AパラメータはToggleタイプなので Boolで設定を行う CustomizableSkeletalComponentの GetCustomizableObjectInstance

54.

ズボンを着脱させる - Step2 !? Z パラメータをセットしただけでは メッシュは書き変わりません

55.

ズボンを着脱させる - Step3 UpdateSkeeltalMeshAsync(Result) を呼び出すことでメッシュが更新される 追加したメッシュ更新イベントを呼び出す 更新完了イベント

56.

ズボンを着脱させる - Step4 Z キーに反応してズボンを 着脱させることができた

57.

CO分割で ジャケット作成

58.

CO分割でジャケット作成 - Step1 ルートオブジェクトに接続 ObjectGroup ”Jacket” を作成

59.

CO分割でジャケット作成 - Step2 ObjectNameha Jacket_A SKM_Jacket_Aを追加 CustomizableObjectを新規作成 AddToMeshComponentに “FullBody”を設定

60.

CO分割でジャケット作成 - Step3 接続先のCustomizableObjectを選択 接続先のアセットを選択できる 接続先のCOが持つObjectGroupから “Jacket”を選択

61.

CO分割でジャケット作成 - Step4 PreviewInstance内にパラメータとして Jacket_Aが選択できるようになった 接続先のCOが持つボディやシャツのメッ シュも見える

62.

CO分割でジャケット作成 - Step5 前腕にめりこみがみえる 前腕部を削除できました RemoveMeshBlocksで前腕部を削除

63.

CO分割でジャケット作成 - Step6 同じ要領でCO_JacketBを作成する SKM_Jacket_Bを使うところ以外は同じ

64.

CO分割でジャケット作成 - Step7 ルートのCustomizableObjectのJacketオブジェク トグループノードを選択 Jacketパラメータがプルダウンに変化 TypeをOne or Noneに設定

65.

ジャケットを着せ替え

66.

ジャケットを着せ替え - Step1 SetIntParameterSelectedOption パラメータを取得するノードは CustomizableObejctから パラメータに対して有効なアイテム の文字列を取得 ParamName: Jacket SelectedOptionName: None / Jacket_A / Jacket_B が渡される

67.

ジャケットを着せ替え - Step2 ジャケットを着せ替え完成

68.

まとめ ● Mutableはキャラクターカスタイマイズ機能のためのプラグインで、ノードベースで非常に拡張性の高いシステム です ● 陰面メッシュの削除やメッシュのマージ、テクスチャのマージやベイクなど最適化の面でも非常に考慮された実践 的な仕組みがあります ● 本日紹介していない機能としてマテリアルの操作やプロジェクター、タグ操作などまだまだ沢山のしくみがありま すが、非常に詳しい公式ドキュメントやチュートリアルがあります ● MutableSample はMutableのすべてを網羅したサンプルです。 是非ダウンロードしてしゃぶりつくしてください ● Mutableを触ってみて気付きを得たら、ぜひブログ・SNS等で俺SUGEEEEしてください!

69.

ご清聴ありがとうございました ! 2024 Epic Games Japan, Takashi Suzuki