Unreal Engine には、異なるパスを使用してスケルタルメッシュをレンダリングする方法がいくつかあります。このページではそうした異なるパスと、プロジェクトでそれらを使用する方法について説明します。
スケルタルメッシュのレンダリング方法
スケルタルメッシュには次の 3 つのレンダリング パスがあります。
セクションおよびチャンク
スケルタルメッシュは、セクション または チャンク の 2 通りに分割されます。スケルタルメッシュの各セクションは、マテリアルに関連付けられています。1 つのセクションのジオメトリが複雑すぎる場合、つまりセクションの頂点に影響を及ぼすボーンが多すぎる場合は、ジオメトリ パイプラインにより、さらにチャンクに分割されます。これは、メッシュで作成されるドローコールの数に対応しています。
スケルタルメッシュ エディタの [Details (詳細)] パネルでスケルタルメッシュ アセットを確認すると、メッシュのマテリアルがどのように分割されているかがすぐにわかります。それぞれの LOD カテゴリの下にある [Sections (セクション)] を展開すると、マテリアルとチャンクのリストが表示されます。
次の図で 2 つの例を示します。1 つ目は最も一般的な結果で、各スケルタルメッシュとその LOD のマテリアル (またはセクション) のリストです。2 つ目は、セクション (1) がチャンク (2) に分割された場合に表示される、より高度な詳細です。一般的に、スケルタルメッシュ エディタではセクションがマテリアルにマッピングされています。ランタイム時に、レンダリング コードのセクションはチャンクを参照します。
![]() |
![]() |
---|---|
マテリアル セクションのみのスケルタルメッシュ アセット | セクション (1) およびチャンク (2) があるスケルタルメッシュ アセット |
8 ビット ボーン インデックスおよび 16 ビット ボーン インデックス
スケルタルメッシュをインポートすると、セクションでサポートできるボーンの数を設定する 8 ビット ボーン インデックスまたは 16 ビット ボーン インデックスのいずれかを持ちます。8 ビット ボーン インデックスはセクションごとに最大 256 のボーンをサポートし、16 ビット ボーン インデックスは 256 を超えるボーンをサポートします。
デフォルトでは、すべてのメッシュは 8 ビット ボーン インデックスを使用してインポートされます。セクションごとにサポートするボーン数を増やすには、[Project Settings (プロジェクト設定)] で [Engine (エンジン)] > [Rendering (レンダリング)] > [Skinning (スキニング)] の下にある [Support 16-bit Bone Index (16 ビット ボーン インデックスをサポート)] のチェックボックスをオンにします。

この設定を有効にする場合は、次のことを確認します。
- この変更を有効にするため、エディタを再起動する必要があります。
- この変更の前からすでにプロジェクト内にあったスケルタルメッシュは、更新のため再インポートする 必要があります。
- インポートされたスケルタルメッシュは、セクションのボーン数が 256 個以内かそれ以上かにより、8 ビットまたは 16 ビットを使用します。
セクションごとの最大ボーン数
スケルタルメッシュでは、インポートされるソース メッシュのセクションごとの最大ボーン数が許可されます。各セクションに許可されるボーン数は、1 回のドローコールにおいて GPU でスキニングできるボーンの数です。ソース メッシュがセクションごとの最大ボーン数を超えると、ジオメトリ パイプラインではセクションをより小さなチャンクに分割し、その制限数内に収めます。
セクションごとの最大ボーン数を制御する典型的なユース ケースは、プロジェクトでハイエンドのプラットフォームとモバイル プラットフォームの両方をサポートする場合です。[Project Settings] を使用して、[Engine] > [Rendering] > [Skinning] で、すべてのプラットフォームまたは個々のプラットフォームに [Maximum bones per Sections (セクションごとの最大ボーン数)] を設定できます。
デフォルトでは、セクションあたりの最大ボーン数は 65536 に設定されています。モバイル プラットフォームはセクションあたり最大 75 ボーンを上限とします。

[Add (追加)] (+) のアイコンをクリックしてリストからプラットフォームを選択し、プラットフォームごとにこの設定をオーバーライドすることができます。

プラットフォームごとに、グローバル設定の Compat.MAX_GPUSKIN_Bones
にクランプされます。デフォルトでは、これは「65536」に設定され、この値を超えないようにする必要があります。16 ビット インデックス モードが有効になっていない場合、最大数は「256」(または 8 ビット ボーン インデックス) にクランプされます。
コンソール コマンドの SkeletalMeshReport
を使用し、プロジェクト内の各スケルタルメッシュを分析する統計のログを出力します。分析結果には、設定やメモリ使用量に関する情報が含まれます。

GPU でスキン処理された頂点ファクトリ
GPU でスキン処理された頂点ファクトリ は、頂点シェーダーを使用して位置および法線 / 接線をスキン処理し、必要に応じてその結果を GPU に保存します。各頂点ファクトリは、Default Bone Influences (デフォルトのボーン影響度) および Unlimited Bone Influences (無制限のボーン影響度) の両方のモードをサポートします。
-
Default Bone Influences モードは、各頂点が 4 つまたは 8 つの影響度 (プラットフォームのサポートによる) によってスキン処理できるかどうかを制御します。ボーン影響度の数は固定されています。たとえば、スケルタルメッシュが頂点ごとに 4 つのボーンでレンダリングされる場合、頂点で使用しているボーンが 1 つのみのとき、残りの 3 つのスロットは 0 ウェイトで埋まり、引き続きスキニング計算で使用されます。ボーンのインデックスとウェイトは頂点ストリームにバインドされているため、このモードはよりローエンドのハードウェアやプラットフォームに適しています。
-
Unlimited Bone Influences モードでは、頂点ごとのボーン影響度の固定数が削除されます。これにより、代わりにボーン影響度の変数を使用することができ、これがプロジェクトやスケルタルメッシュごとにグローバルに設定されます。ボーン インデックスおよびウェイトが頂点ストリームに直接バインドされる代わりに、各頂点ではインデックス オフセットとボーン影響度の数を 1 つの整数にパックして保存します。この値は、ボーン インデックスおよびウェイトのデータを含む頂点バッファを調べるために使用されます。
Unlimited Bone Influence モード
Unlimited Bone Influence モードは、[Project Settings] の [Engine] > [Rendering] > [Skinning] セクションで有効にします。

次の 2 つの設定が必要です。
- [Use Unlimited Bone Influences (ボーンへの影響を無制限に使用する)] を有効にすると、新しくインポートした (または再インポートした) スケルタルメッシュでは、デフォルトのボーン影響度の最大数の代わりに無制限のボーン バッファを使用してレンダリングできるようになります。この設定はランタイム時に変更することはできず、有効にするにはエディタを再起動する必要があります。
- [Unlimited Bone Influences Threshold (無制限のボーン影響度のしきい値)] を有効にすると、メッシュのデフォルトのボーン影響度の最大数がバッファごとに固定されているボーン影響度数を超えるまで、ボーン影響度を使用します。
理論上、頂点ごとの影響度の最大数は無制限ですが、実際にはスケルタルメッシュのソース データが保存されている方法により、影響度の最大数は 12 に制限されています。
このモードを使用する場合は、[Unlimited Bone Influences] を有効にして [Unlimited Bone Influences Threshold] を「8」に設定することを推奨します。「9」から「12」のボーン影響度を使用するスケルタルメッシュは、Unlimited Bone Influences パスを使用してレンダリングされ、「0」から「8」のボーン影響度を使用するスケルタルメッシュは、「4」か「8」に固定されたボーン影響度のパスを使用してレンダリングされます。
ボーン影響度の制限を設定する
ボーン影響度の数をコントロールしたい場合があります。これは、プロジェクトごと、およびスケルタルメッシュごとに行うことができます。デフォルトでは、ボーン影響度はデフォルト モードを使用して 4 つまたは 8 つの影響度にクランプされています。Unlimited Bone Influences モードを使用すると、プロジェクト全体でメッシュの影響度をより多く持つことができます。同時に、パフォーマンスおよびメモリ上の理由から、スケルタルメッシュでは詳細度 (LOD) あたりの最大影響度数を制御できます。
たとえば、頂点あたり 10 のボーン影響度を持つスケルタルメッシュをインポートし、デフォルト モードを使用する場合、ターゲット プラットフォームに応じて影響度の数は、「4」か「8」にクランプされます。Unlimited Bone Influences を有効にすると、10 の影響度を得られ、必要に応じてスケルタルメッシュの LOD のビルド設定を使用して影響度の数を制限するオプションも利用できます。
ボーンの影響度の数は、次の 2 つの場所で設定できます。
- [Project Settings] の [Rendering] > [Skinning] セクションの [Default Bone Influences Limits (デフォルトのボーンの影響度の制限)]。
- これにより、個々のアセットによってオーバーライドできる、プロジェクトのグローバルなデフォルトが設定されます。
- [Per Skeletal Mesh (スケルタルメッシュごと)] の [LOD Build Settings (LOD ビルド設定)] セクションの [Bone Influence Limit (ボーンの影響度の制限)]。
- これは、このメッシュが持つことができる、頂点あたりの影響度の数を設定します。
Unlimited Bone Influences モードを使用してボーンの影響度を設定する場合は、次のことを考慮してください。
- プロジェクトの デフォルトのボーン影響度の制限 を設定します。
- 「0」に設定すると、ボーンの影響度には制限が適用されません。
- [Per Skeletal Mesh] の [Bone Influence Limit] 設定は、「0」に設定するとフォール バックされます。
- この設定の横にある [Add (追加)] (+) ボタンをクリックすると、プラットフォームごとのプロジェクト全体に対するデフォルトの制限を指定することができます。
- 必要に応じて、スケルタルメッシュ LOD ごとの [Bone Influence Limit] を設定します。
- 値を指定すると、頂点あたりのボーンの影響度の数を制限するためにこれが使用されます。
- 「0」に設定すると、[Default Bone Influence Limit] プロジェクト設定が使用されます。
スキン キャッシュ システム
スキン キャッシュ システムでは、コンピュート シェーダー を使用して位置および法線 / 接線をスキン処理し、その結果が頂点バッファにキャッシュされてからレンダリング用に GPUSkinPassThroughVertexFactory
(LocalVertexFactory
のバリエーション) に渡されます。

スキン キャッシュ システムは、[Project Settings] の [Engine] > [Rendering] > [Optimizations (最適化)] セクションで、[Support Compute Skin Cache (スキン キャッシュの計算をサポート)] 設定を使用すると有効にすることができます。

システムでは、動作をプロジェクト レベルで定義し、個々のスケルタルメッシュでその動作をオーバーライドできる柔軟性が提供されています。
次の [Project Settings] を使用し、スキン キャッシュの動作とサポートを設定します。
- [Default Skin Cache Behavior (デフォルトのスキン キャッシュの動作)] では、スケルタルメッシュがスキン キャッシュ パスと GPUSkinVertexFactory パスのどちらを実行するかを制御します。動作は次の 2 つから選択します。
- Inclusive (包括) を選択すると、デフォルトでスキン キャッシュ内にあるすべてのスケルタルメッシュが含まれます。個々のスケルタルメッシュをオプト アウトし、代わりに GPUSkinVertexFactory パスを使用することができます。
- Exclusive (排他) を選択すると、スキン キャッシュ内にあるすべてのスケルタルメッシュが除外され、デフォルトで GPUSkinVertexFactory が使用されます。個々のスケルタルメッシュでスキン キャッシュの使用をオプト インすることができます。
-
[Maximum memory for Compute Skin Cache per world (MB) (ワールドごとのスキン キャッシュの計算用の最大メモリ量 (MB))] では、出力頂点データの生成や接線の再計算のため、Compute Skin Cache で許可されるワールドまたはシーン当たりのメモリの最大使用量 (MB 単位) を設定します。各ワールドには、スケルタルメッシュがスキン キャッシュに先着順で挿入される独自のスキン キャッシュ オブジェクトがあります。
挿入の順序はゲームにより異なります。スキン キャッシュが満杯で、それ以上スケルタルメッシュを受け入れられない場合、代わりにそのメッシュは GPUSkinVertexFactory パスを実行します。これにより、メッシュが高い (詳細ではない) 詳細度 (LOD) から低い (詳細な) LOD に切り替わる場合に LOD を使用する状況で問題が発生することがあります。スキン キャッシュでは高い LOD をアンロードしますが、メモリ容量に負荷がかかるため、低い LOD に対応することができません。
次のコンソール コマンドを使用することができます。
r.SkinCache.Mode
を使用して、スキン キャッシュを有効にするか無効にするかを設定します。デフォルトでは有効 (1) に設定されています。r.SkinCache.SkipCompilingGPUSkinVF
を使用すると、スキン キャッシュ システムが有効な場合にシェーダーの置換のコンパイルをスキップすることで、GPU スキン頂点ファクトリのバリアントを削減します。- 「0」に設定すると、すべての GPU スキン頂点ファクトリのバリアントがコンパイルされます。(デフォルト)
- 「1」に設定すると、すべての GPU スキン頂点ファクトリ シェーダーの置換がコンパイルされません。
スケルタルメッシュのスキン キャッシュをオーバーライドする
個々のスケルタルメッシュ LOD では、[Skin Cache Usage (スキン キャッシュ使用量)] ドロップダウンから選択してスキン キャッシュの動作をオーバーライドすることができます。

次のオプションから選択します。
- Auto (自動): [Project Settings] の [Default Skin Cache Behavior] に設定したグローバル動作を使用します。
- Disabled (無効): このメッシュではスキン キャッシュを使用しません。このメッシュに対して [Hardware Ray Tracing (ハードウェア レイ トレーシング)] が有効な場合は、スキン キャッシュも有効になります。
- Enabled (有効): このメッシュではスキン キャッシュを使用します。
レイ トレーシングおよび髪ストランド スキン キャッシュのレンダリング要件
ハードウェア レイ トレーシング および 髪ストランドのレンダリング などのレンダリング機能には、レンダリング用のスキン キャッシュ パスが必要です。ただし、デフォーマー グラフを使用してディスプレイスメントを操作する場合、スキン キャッシュ パスは使用されません。デフォーマー グラフが使用されている場合は常に、レイ トレーシングおよび髪ストランドのレンダリングが機能しています。
ハードウェア レイ トレーシングを使用すると、すべてのスケルタルメッシュは自動的にスキン キャッシュ パスを実行し、レイ トレーシング エフェクトでレンダリングされます。r.RayTracing.Geometry.SupportSkeletalMeshes
を使用してハードウェア レイ トレーシングのスケルタルメッシュを無効にすると、GPU メモリと時間リソースを節約することができます。これはランタイム時に変更することはできません。
また、メッシュには従来のラスタ LOD とは異なるレイトレーシングされた LOD を使用するオプションもあります。これは、グローバル レイ トレーシング LOD バイアス (r.RayTracing.Geometry.SkeletalMeshes.LODBias
) の設定と個別のスケルタルメッシュ設定である Ray Tracing Min LOD (レイ トレーシング最小 LOD) の組み合わせを使用して制御することができます。ラスタ LOD インデックスとグローバル レイ トレーシング LOD インデックス間でより高い LOD インデックスが選択され、Ray Tracing Min LOD が設定されます。

接線を再計算する
Recompute Tangents (接線を再計算) は、スキニング パス後のスキン キャッシュのオプション手順です。スキン キャッシュは、スキン処理されたトライアングルを使用して法線および接線を再計算します。これは、2 つのコンピュート シェーダー手順で行われます。
- トライアングル パス は、各トライアングルでスキン処理された頂点の位置から法線と接線を計算し、その 3 つの頂点それぞれに結果を累積します。
- 頂点パス は、それぞれの頂点に累積された法線と接線を正規化します。オプションで、メッシュの頂点カラー バッファ チャンネルの 1 つが、スキン処理された法線 / 接線と再計算された法線 / 接線との間でブレンド マスクとして使用されます。
プロジェクト全体に、またはスケルタルメッシュごとに接線の再計算を設定することができます。
Global Settings (グローバル設定):
r.SkinCache.RecomputeTangents
- 「1」に設定すると、すべてのスケルタルメッシュで接線の再計算が強制的に行われます。
- 「2」に設定すると、セクションで有効になっているスケルタルメッシュのみで接線の再計算が行われます。(デフォルト)
Per Mesh Settings (メッシュ設定):
[LOD [n]] カテゴリで、セクションを使用してマテリアルのセクションごとに接線の再計算がどのように処理されるかを設定します。

次のオプションから選択します。
- None (なし): 接線の再計算を行いません。
- All (すべて): すべてのカラー チャンネルの接線を再計算し、その結果を使用します。
- Red / Green / Blue (赤 / 緑 / 青): R/G/B 頂点カラー バッファ チャンネルをブレンド マスクとして使用し、スキン処理された結果で接線と線形補間を再計算します。
接線の再計算の制約の 1 つは、それぞれのチャンクがメッシュの他のチャンクとは別に処理されることです。そのため、隣接するチャンクに接続しているチャンクの頂点では、その接続性が認識されません。その結果、2 つのチャンクの境界に継ぎ目が表示される可能性があります。
スキン キャッシュをデバッグする場合のヒント
以下に説明する項目を使用して、プロジェクトでスキン キャッシュをデバッグします。
コンソール コマンド
-
profilegpu
を使用して、個々のスキン キャッシュ エントリと、それらが属するスケルタルメッシュの詳細を持つ GPU フレームをキャプチャします。 -
r.SkinCache.PrintMemorySummary
を使用して、すべてのスキン キャッシュ エントリのメモリ使用量の分析を出力します。- 「0」にすると、概要が無効になります。(デフォルト)
- 「1」にすると、メモリが
r.SkinCache.SceneMemoryLimitInMB
または [Project Settings] の [Maximum memory for Compute Skin Cache per world (MB)] に設定した制限を超えた場合に、フレーム上に概要を出力します。 - 「2」にすると、すべてのフレームで概要を出力します。
スキン キャッシュ デバッグ ビジュアライゼーション
[View Modes (ビュー モード)] ドロップダウンを使用して [GPU Skin Cache (GPU スキン キャッシュ)] リストからデバッグ ビジュアライゼーションの 1 つを選択し、個々にスケルタルメッシュを色付けして視覚化します。

これらのビジュアライゼーション モードは、-game
コマンドライン引数を使用してプロジェクトを起動する際に、コンソール コマンドの r.SkinCache.Visualize
を入力し、続けて Overview
、Memory
、または RayTracingLODOffset
を入力すると使用することができます。コマンドに続けて None
を入力すると、ビジュアライゼーションが無効になります。これらのビュー モードは、パッケージ化されたビルドでは無効です。
概要のビジュアライゼーション
概要 のビジュアライゼーションにより、スキン キャッシュや接線の再計算が有効または無効になっているシーン内のアクタを示します。

ビューポートの左上には、シーン内のアクタ用のカラー リファレンスが表示されます。

メモリのビジュアライゼーション
メモリ のビジュアライゼーションは、ラスタとレイ トレーシングを組み合わせた場合のスキン キャッシュ メモリの使用量を低、中、高で示します。

ビューポートの左上には、スキン キャッシュのメモリ情報が表示されます。

DefaultEngine.ini コンフィギュレーション ファイルの [/Script/Engine.Engine]
セクションにある GPUSkinCacheVisualizationLowMemoryThresholdInMB
および GPUSkinCacheVisualizationHighMemoryThresholdInMB
の値を編集することによって、プロジェクトごとにメモリしきい値をオーバーライドすることができます。
RayTracingLODOffset ビジュアライゼーション
RayTracingLODOffset ビジュアライゼーションにより、レイ トレーシングされたスキン キャッシュ エントリとラスタ スキン キャッシュ エントリ間の LOD インデックスの差異を示します。これは、ラスタライズに使用されるものとは別の LOD をレイ トレーシングで使用する場合に役立ちます。

このビジュアライゼーション モードは、[Project Settings] で [Hardware Ray Tracing] が有効になっている場合にのみ使用することができます。
ビューポートの左上には、シーン内のアクタのレイ トレーシング LOD オフセットのカラー コードが表示されます。

デフォーマー グラフ プラグイン
この機能は現在ベータ版です。
デフォーマー グラフ プラグインは、GPU で排他的に実行される頂点変形パイプラインを構築できるエディタです。このエディタではプラグアンドプレイのグラフ編集機能が提供され、必要なデータ フローを設定し、受け取った入力に応じてメッシュ頂点ポイントを変更します。
