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 Influences モードを有効にする
Unlimited Bone Influence モードは、[Project Settings] の [Engine] > [Rendering] > [Skinning] セクションで有効にします。

次の 2 つの設定が必要です。
- [Use Unlimited Bone Influences (ボーンへの影響を無制限に使用する)] を有効にすると、新しくインポートした (または再インポートした) スケルタルメッシュでは、デフォルトのボーン影響度の最大数の代わりに無制限のボーン バッファを使用してレンダリングできるようになります。この設定はランタイム時に変更することはできず、有効にするにはエディタを再起動する必要があります。
- [Unlimited Bone Influences Threshold (無制限のボーン影響度のしきい値)] を有効にすると、メッシュのデフォルトのボーン影響度の最大数がバッファごとに固定されているボーン影響度数を超えるまで、ボーン影響度を使用します。
理論上、頂点ごとの影響度の最大数は無制限ですが、実際にはスケルタルメッシュのソース データが保存されている方法により、影響度の最大数は 12 に制限されています。
Unlimited Bone Influences モードを使用する場合は、[Unlimited Bone Influences] を有効にして [Unlimited Bone Influences Threshold] を「8」に設定することを推奨します。「9」から「12」のボーン影響度を使用するスケルタルメッシュは、Unlimited Bone Influences パスを使用してレンダリングされ、「0」から「8」のボーン影響度を使用するスケルタルメッシュは、「4」か「8」に固定されたボーン影響度のパスを使用してレンダリングされます。
スキン キャッシュ システム
スキン キャッシュ システムでは、コンピュート シェーダー を使用して位置および法線 / 接線をスキン処理し、その結果が頂点バッファにキャッシュされてからレンダリング用に 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
(デフォルトは「2」)- 「 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 で排他的に実行される頂点変形パイプラインを構築できるエディタです。このエディタではプラグアンドプレイのグラフ編集機能が提供され、必要なデータ フローを設定し、受け取った入力に応じてメッシュ頂点ポイントを変更します。
