Mutable とは何ですか?
Mutable は、エディタ内または実行時に動的なスケルタルメッシュ、マテリアル、テクスチャを生成する Unreal Engine のツールセットです。 これは、アーティストやデザイナーがキャラクターのカスタマイズ システムを作成できるようにするために設計されていますが、動物、プロップ、その他のスケルタルメッシュ アセットなど、さまざまな動的コンテンツを生成できます。
Mutable はゲーム内で効率的に実行されるように設計されていますが、Unreal Editor で多数のスケルタル メッシュのバリエーションを作成できる柔軟性が必要なプロジェクトのコンテンツ パイプラインのツールとしても有用です。
Mutable は次のように設計されています。
多くのパラメータやテクスチャ レイヤーを含む複雑なカスタマイズをサポートする。
複雑なメッシュのインタラクションをサポートする。
ラップ投影や多数の平面投影など、GPU のパーフォーマンスを最大に活用できないテクスチャ エフェクトをサポートする。
メモリ使用量の最適化
シェーダコストの軽減。
ドローコール数の削減
Mutable を使用すると、キャラクター生成時に CPU とメモリのコストの一部が変換されます。 キャラクターは、CPU リソースと作業メモリを使用して背景で生成され、生成されると、事前に生成されたスケルタル メッシュのリソースのみを使用します。
Mutable の機能
Mutable には以下の機能があります。
一般
柔軟なパラメータ システムをカスタマイズ可能なオブジェクトと複数のエフェクトに接続する。
カスタマイズ可能なキャラクターを複数のアセットに分割することで、アーティストの同時作業を容易にする。
メッシュ
非表示のパーツを削除し、最大のパフォーマンスを実現し、Z ファイティングを防止する。
キャラクター生成時にモーフィングをベイクする。
メッシュをマージしてドローコールを減らす。
キャラクターのパーツ間のインタラクションに基づいてメッシュを変形する。
テクスチャ
実行時に複数のエフェクトを組み合わせてテクスチャ画像をベイクする。
平面、円筒、ラップなど、さまざまなタイプのプロジェクターをサポートする。
乗算、ソフト ライト、ハード ライト、バーン、ドッジなど、複数のテクスチャ ブレンド モードをサポートする。
不要なテクスチャ パーツを動的に削除するために UV レイアウトを管理する。
アニメーションと物理
複数パーツのアニメーション グラフを組み合わる。
コリジョン物理アセットをメッシュにマージおよび変形する。
キャラクター生成時にクロス シミュレーション データを管理する。
Performance (パフォーマンス)
カスタマイズされたキャラクターを柔軟にインスタンス化する。
実行時の LOD 管理をサポートする。
キャラクターの生成をさまざまなユース ケースに合わせて調整するために、複数の状態をサポートする。
オンデマンド生成でテクスチャ ストリーミングをサポートする。
カスタマイズ可能オブジェクトとアクタ
下の図は、キャラクターのカスタマイズにどのようにメッシュ、テクスチャ、マテリアルが使用されるかを示しています。 このシステムの主な概念は、CustomizableObject アセット、CustomizableObjectInstance アセット、そしてこれらのアセットを使用する特別なコンポーネントを持つアクタです。
Mutable は、CustomizableObject アセット、CustomizableObjectInstance アセット、および特別なコンポーネントを備えたアクタを使用して最終的なアセットを作成します。
カスタマイズ可能なオブジェクト
カスタマイズ可能なオブジェクトは Unreal Engine に追加された新しいタイプのアセットで、Mutable を使用してカスタマイズできるオブジェクトです。 これには適用可能なすべてのバリエーションが含まれています これは、実行時にプレイヤーまたはゲーム コードによってコントロールされるパラメータと、これらのパラメータが最終的なオブジェクトに与える影響を定義します。
[Customizable Object (カスタマイズ可能オブジェクト)] は、[Content Drawer (コンテンツ ドロワー)]または[Content Browser (コンテンツ ブラウザ)]から [Add New (新規追加)] メニューを使用して作成します。
カスタマイズ可能オブジェクト を作成する
パラメータ
カスタマイズ可能オブジェクトは実行時に変更できる複数のパラメータを含みます。 パラメータには次のようなタイプがあります。
Slider parameters (スライダ パラメータ):0.0 ~ 1.0 の範囲の小数を含む数値パラメータ。 これらは通常、Node-Float-Parameter によって明示的に作成され、テクスチャ エフェクトまたはメッシュ モーフィングなどの連続的なエフェクトに使用されます。
Enumeration parameters (列挙型パラメータ):事前に定義されたオプション セットの 1 つのオプションを表します。 これらは、子オブジェクトを選択するための Node-Object-Group 、または 1 つのオプションまたは複数のNode-Switchを選択するための Node-Enum-Parameter により作成できます。
Checkbox parameters (チェックボックス パラメータ)は、有効と無効の 2 つの可能性を表します。 これらは、グループのタイプが「Toggle Each」である場合に、Node-Object-Group によって作成されます。
Color parameters (カラー パラメータ):0.0 ~ 1.0 の範囲の 4 つの浮動小数値のベクターを使用して、アルファ チャンネルで色を表します。 これらは、 Node-Color-Parameter によって作成されます。
Projector parameters (プロジェクター パラメータ):実行時に変更可能な位置を持つプロジェクターを表します これらは Node-Projector-Parameter により作成されます。
カスタマイズ可能オブジェクトインスタンス
Customizable Object Instance (カスタマイズ可能オブジェクト インスタンス) は、Mutable で使用される新しいタイプのアセットです。 これは CustomizableObject のインスタンスを表し、カスタマイズされたアセットを作成するために CustomizableObject に適用するパラメータ値のセットです。 たとえば、盗賊用の CustomizableObject がある場合、そこから作成するユニークな盗賊はそれぞれ CustomizableObjectInstance となります。
カスタマイズ可能オブジェクトからインスタンス アセットを作成するには、[Customizable Object (カスタマイズ可能オブジェクト)] を右クリックして、[Create New Instance (新規インスタンスの作成)] を選択します。
新しいカスタマイズ可能オブジェクト インスタンスの作成
Mutable Editors
Customizable Objectエディタ
[Customizable Object (カスタマイズ可能オブジェクト)] をダブルクリックすると[Customizable Object Editor (カスタマイズ可能オブジェクト エディタ)]。 が開きます。
カスタマイズ可能オブジェクト エディタ
このインターフェースには、次のパネルが含まれています。
Source Graph (ソース グラフ):CustomizableObject の構造を定義するブループリント ノードが含まれます。これには LOD 設定、メッシュ セクション、メッシュ、テクスチャ、パラメータ、これらをつなぐエフェクトが含まれます。
Object Properties (オブジェクト プロパティ):オブジェクトの一般的なプロパティを含みます。
Node Properties (ノード プロパティ):選択したノードのプロパティを含みます。
Preview Instance Viewport (プレビュー インスタンス ビューポート):オブジェクトを開いてコンパイルしたときに 3D プレビューを表示します。
Preview Instance Parameters (プレビュー インスタンス パラメータ):プレビューするオブジェクトの現在のパラメータを表示します。 これらはここで直接修正できます。 現在のインスタンスを標準 Unreal Engine アセットのセットに「ベイク」することもできます。 詳細については、「インスタンスのベイク」を参照してください。
エディタ ツールバーには次の要素が含まれます。
Save (保存):現在のオブジェクトを保存します。
Compile (コンパイル):現在のオブジェクトとその子をすべてコンパイルし、プレビューを更新します。 これは、グラフ内に変更を反映させるために必要です。 コンパイルとそのオプションの詳細については、「パフォーマンスの調整」 を参照してください。
Compile Only Selected (選択したもののみコンパイル):現在のオブジェクトとプレビューされた子のみをコンパイルします。 これは、カスタマイズ可能なオブジェクトが非常に大きい場合に、イテレーションを高速化するために役立ちます。
Texture Memory Analyzer (テクスチャ メモリ アナライザー):プレビューされるオブジェクトのテクスチャと、最終サイズ、フォーマット、メモリ使用量などの詳細を表示するツール パネルを開きます
Performance Analyzer (パフォーマンス アナライザー):多数のランダム インスタンスを生成し、三角形数、生成時間など、多くの関連メトリクスを表示することで、現在のオブジェクトをベンチマークするツール パネルを開きます。
Customizable Objectインスタンスエディタ
Customizable Object Instance Editor (カスタマイズ可能インスタンス エディタ) は、CustomizableObjectInstance を表示、変更するために使用します。 このエディタには、カスタマイズ可能オブジェクト エディタの [Preview (プレビュー)] パネルと [Node Properties (ノード プロパティ)] パネルに類似する 2 つのパネルのみがあります。
Object Hierarchy (オブジェクト階層)
オブジェクト
Mutable は、各カスタマイズ可能オブジェクトを階層に編成します 各オブジェクトには、他のすべてのノードに接続するルート ノードがあります。 これらのノードはコンポーネント、メッシュ、マテリアル、テクスチャ、パラメータを表します。 どのオブジェクトも子オブジェクトをいくつでも持つことができます。 子は次のことができます。
新しいメッシュとメッシュ セクションを最終オブジェクトに追加する
別のオブジェクトにすでに存在するメッシュを拡張する
別のオブジェクトのメッシュの一部を削除する
別のオブジェクトのマテリアルのテクスチャにパッチを適用する
さまざまな効果を適用するために、兄弟オブジェクトで使用できるユーザー定義のタグを有効する。
同時に、子オブジェクトは無制限の階層で独自の子オブジェクトを持つことができます。
グループ
子オブジェクトは Groups (グループ) に編成できます。 Groups は、子オブジェクトをどのように有効にするかに関する、オブジェクトとその親の間のロジックを定義します。 たとえば、T シャツの子すべてをユーザーが一度に 1 つのみ選択するか、全く選択しないようにするオブジェクト パラメータでグループ化することができます。
次の図は、Group を介して接続されている 2 つの子オブジェクトを示しています。
各 Group には、次のいずれかの Group Type があります。
Toggle (切り替え):子オブジェクトが切り替え可能オプションとして表示されます
At least one Option (最低でも 1 つのオプション): 1 つの子オブジェクトを選択する必要があります
None or One (なしまたは 1 つ) : 1 つのの子オブジェクトを選択できます。
All options (すべてのオプション):オブジェクトのすべての子が常に有効です。 子が親に直接つながっているかのように動作します。
アクタ コンポーネント
単一の CustomizableObject で複数の Actor コンポーネント を生成できます。 パラメータは複数のコンポーネントに同時に影響を与えることができますが、条件付きで切り替えることもできます。 複数のコンポーネントを作成するには、コンポーネント ノードのリファレンスを参照してください。
参照スケルタルメッシュ
メッシュ コンポーネント ノードには、Reference Skeletal Mesh (リファレンス スケルタルメッシュ) というプロパティがあります。 これは、標準の Unreal Engine SkeletalMesh で、以下の理由で使用されます。
この CustomizableObject インスタンスのコンポーネント用に生成されたすべてのスケルタルメッシュは、Mutable が作成または変更しないすべてのものに対して、Reference Skeletal Mesh プロパティを使用します。 これには、LOD 距離、物理プロパティ、バウンディング ボリューム、スケルトンなどのデータが含まれます。 CustomizableObject インスタンスを初めて作成する場合、Reference Skeletal Mesh が各アクタ コンポーネントに対して使用されます。 これは、CustomizableObjectSystem クラスの関数「SetReplaceDiscardedWithReferenceMeshEnabled」を使用して無効にすることができます 詳細については、「C++ から Mutable を使用する」 および 「ブループリントから Mutable を使用する」 を参照してください。
このため、プロジェクトでは通常、単純なスケルタルメッシュまたは汎用のスケルタルメッシュを Reference Skeletal Mesh として使用します。 1 つのオプションとして、Reference Skeletal Mesh を、エディタで生成された、望ましい//汎用の//外観を持つベイク済みスケルタルメッシュで置き換える方法があります。 詳細については、「インスタンスのベイク」を参照してください。
複数のアセット
大きな CustomizableObject は、複数のアセットに分割することができます。 これは、複数のユーザーが同じデータで作業する場合、およびバージョン管理のために重要です。 以下はこれをサポートする 2 つの機能です。
子オブジェクトを、グラフで直接接続するのではなく、異なるアセットの Object Group の親として選択することができます。 詳細については、「Object Group」 ノードと 「Child Object」 ノードを参照してください。
これはエディタ データに有用ですが、パッケージ化されたゲームのデータ ストリーミングとは何の関係もありません。 パッケージ化されたゲームのデータ ストリーミングは、CustomizableObject が複数のアセットに分割されているかどうかに関わらず行われます。
オブジェクト インタラクション
Mutable には、オブジェクトのインタラクションを処理するための複数の機能があります 1 つ目は Object Groups です。これは、セットから子オブジェクトを 1 つだけ選択するインスタンス パラメータを作成するため、複数のオブジェクトを追加することはできません。 その例として、キャラクターの帽子のグループがあります。これを使用すると、1 つの帽子を選択するか、選択しないかを選択できますが、2 つの帽子を選択することはできません。
また、Mutable には、インスタンスに追加された他のオブジェクトに基づいてオブジェクトのさまざまなバリエーションを作成するシステムがあります。 たとえば、いくつかのヘア スタイルと帽子を装備したキャラクターがあるとします。 キャラクターに特定の型の帽子が装備されている場合は、使用されるヘアスタイルの一部にバリエーションを作成する必要がある場合があります。 これには、Mesh Section Variations および他の Variation ノードを使用できます。
オブジェクト インタラクションの別の例は、別のオブジェクトに存在するモディファイアを使用して、あるオブジェクトからメッシュ フラグメントを選択的に削除することです。
これら 2 のオブジェクトインタラクションでは、Tag (タグ) システムを使用します。 独自の Tags を定義し、オブジェクトがインスタンス内でアクティブな場合に有効にできます。 Mesh Section Node に、タグを追加することができます。 Mesh Section Variation や Clip Mesh With Mesh Modifier ノードなど、特定インスタンスのタグの内容によって動作が異なる複数のノードがあります。
テクスチャ レイアウト
Mutable は、複数のオブジェクトのメッシュとメッシュ セクションを単一のメッシュにマージできます 既存のメッシュからメッシュのフラグメントを削除することもできます。 この場合、Mutable はテクスチャの UV レイアウトを変更してメモリ使用量を最適化し、レンダリング コマンドを最小限に抑えます Mutable ではこれをデフォルトで自動的に実行しますが、Skeletal Mesh Node と Table Node の複数のプロパティにより、手動でコントロールすることもできます。
詳細については、「テクスチャ レイアウト」を参照してください
ステート
State (状態) はゲーム内の特定のユースケース (ゲーム内、クロス カスタマイズ、フェイシャル カスタマイズなど) を表し、Mutable がで変更可能にするパラメータのセットで構成できます。 ステートは、インスタンス更新を最適化するために使用されます。 たとえば、あるステートは顔の変更、ボディ変更の別のステート、タトゥーの別のステート、さらにゲームプレイ中に変更できるものだけを最適化することができます。 ステートを使用すると、キャラクターに対して選択されているステートにおいて最適化されているパラメータのみを変更する場合に、キャラクターの更新時間が大幅に短縮される可能性があります。
詳細については、「ステート」 を参照してください。
ストリーミング
メモリ使用量を減らすには、Mutable データのストリーミングが重要です。 カスタマイズ可能なキャラクターは、数百ものオプションやカスタマイズできるパーツを持つ場合があります。 データ ストリーミングを使用しない場合、これらすべてをディスクからメモリに同時にロードする必要があり、RAM の多くのギガバイトを使用することになり、時間がかかります。 Mutable ストリームは使用されているパーツだけをストリーミングし、メモリの消費量とロード時間を大幅に削減します。 さらに、パーツは使用されなくなるとアンロードされます。