プロキシメッシュで 3DGS に実際の法線を与える
概要
ProxyMesh は LCC4Unreal の Pro 版の機能で、プロキシメッシュを配置することで実際の深度と法線の情報を与える。実際の形状シェーディングを持つ唯一の法線モードである。LCC2 パイプラインのすべての形式(.lcc2 / .sog / .spz / .ply)に適用できる。ライセンスの説明は エディションとライセンス を参照する。
注:ProxyMesh には有効なライセンスが必要である。未ライセンスの場合は自動的に Fixed モードにフォールバックする。
プロキシメッシュとは
3DGS データ自体は表面の法線を持たず、GBuffer にも書き込まないため、通常のライティング計算に参加できない。プロキシメッシュの役割は、3DGS と形状が一致するジオメトリを用意することである。プラグインはそこから深度、法線、および GBuffer 内のマテリアル属性を取得し、エンジンのライティングと後処理に渡す。このメッシュ自体は最終画面には現れない。
3DGS データ プロキシメッシュ
(カラー、不透明度) (深度、法線、マテリアル属性)
│ │
│ ▼
│ GBuffer に書き込む
│ │
│ ┌───────────────┴───────────────┐
│ ▼ ▼
│ エンジンのライティング計算 GBuffer に依存する
│ (ディレクショナルライト、ポイントライト、影) 後処理(反射、屈折など)
│ │ │
│ └───────────────┬───────────────┘
▼ ▼
カラーの供給元 ──────────────▶ 最終画面を合成
│
▼
プロキシメッシュ自体は見えない
言い換えると、画面で見えるカラーは 3DGS に由来し、ライティングの表現はプロキシメッシュに由来する。
メッシュの入手方法に制限はない。プラグインはそのレンダリング結果だけを読み取り、どうやって作られたかは問わない。よくあるのは次のいくつかである。
| 入手方法 | 説明 |
|---|---|
| 3DGS と一緒に生成された近似メッシュ | 撮影のワークフローで出力されるメッシュ。形状の一致度が最も高く、第一候補になる |
| 3DGS から変換したメッシュ | サードパーティのツールで 3DGS から再構築したメッシュ |
| 自分でモデリングしたメッシュ | DCC ソフトウェアで 3DGS の形状に合わせてモデリングしたもの。精密な制御が必要な場面に適する |
| 基本ジオメトリの組み合わせ | Cube や Plane などの基本メッシュで大まかな塊を作ったもの。建物や地面のような規則的な形状に適する |
唯一の要件は、メッシュが 3DGS と空間的に形状が合っていることである。合っているほどライティングの表現が実際に近づく。ずれが大きすぎると、ライティングの方向が画面で見える形状と合わなくなる。
メッシュの精度は高くなくてよい。塊と向きが正しければ、面数の少ない簡略化したジオメトリで十分である。
マテリアルの役割
プロキシメッシュのマテリアル属性は GBuffer と一緒に読み取られるため、3DGS の表面がライティングにどう応答するかを決める。
基本的なライティングだけが必要な場合はホワイトボックスのマテリアルで足り、テクスチャは不要である。マテリアル属性に依存する効果を作る場合は、メッシュの該当箇所に対応する PBR マテリアルを使う必要がある。たとえば次のようなものである。
- 水面の反射と屈折:水域の位置にメタリックとラフネスが適切な水面マテリアルを使う
- 金属のハイライト:金属構造の位置に対応する Metallic と Roughness を与える
- 粗い表面:高い Roughness で出るべきでないハイライトを抑える
マテリアル属性と実際の形状が合っていない場合、ライティングの結果が画面で見える 3DGS の見た目と合わなくなる。たとえば粗いはずの壁面に鏡面ハイライトが出るなどである。
素早い設定
ステップ 1:ProxyMesh Actor を配置する
- エディターで LCC4Unreal プラグインのパネルから
ALCC2ProxyMeshActor を追加する - その
StaticMeshComponentに StaticMesh を割り当てる(入手方法は問わない。前節を参照) - ProxyMesh の位置を調整し、3DGS の内容と空間的に重なるようにする

シーンに ALCC2ProxyMesh Actor を配置する
ステップ 2:ProxyMesh モードを有効にする
- LCC2 パイプラインの Actor(
ALCC2Actor/ASogActor/ASpzActor/APlyActor)を選択する - Details パネルで LightMode を見つけて Lit モードに変更する
- Details パネルで LCC2Component の Lighting カテゴリーを見つける
NormalModeをProxyMeshに設定する

Lit を有効にして NormalMode を ProxyMesh に設定する
ステップ 3:検証する
- シーンのライティングの方向を変え、3DGS にセルフシャドウの効果が出るか観察する
- プロキシメッシュが最終画面で非表示になっていることを確認する

ProxyMesh が実際の法線を与えた後のライティング効果
ProxyMesh の使用例

ProxyMesh の設定の流れとライティング効果
ALCC2ProxyMesh
プロキシ用の Actor で、LCC2 パイプラインの Actor と NormalMode = ProxyMesh の状態でペアにして使う。
プロパティ
| プロパティ | 説明 |
|---|---|
| StaticMeshComponent | シーンの深度と法線を提供するスタティックメッシュ |
既定のトランスフォーム
- スケール (100, 100, 100):メッシュの既定の単位はメートル、UE はセンチメートル
- 回転 (0, 180, 0):メッシュ生成のパイプラインと UE の前方軸の向きが逆であることを補正する
動作
- StaticMesh が有効な場合、CustomDepth のレンダリングを自動的に有効にする
- StaticMesh が空の場合、警告を記録して CustomDepth を無効にする
ライセンスの判定
ProxyMesh モードには Pro 版のライセンスが必要である。詳しくは エディションとライセンス を参照する。未ライセンスの場合は自動的に Fixed モードにフォールバックし、保存されているプロパティの値は変更されない。
実行時の切り替え
NormalMode は実行時に Blueprint または C++ から変更でき、次のフレームで反映される。
Blueprint での使い方
ProxyMesh を生成する
SpawnActor->Class: ALCC2ProxyMesh
→ StaticMeshComponent の StaticMesh を設定する
→ 位置を調整して 3DGS の内容に合わせる
モードを切り替える
LCC2Component->NormalMode = ProxyMesh
ベストプラクティス
- メッシュの被覆:プロキシメッシュが 3DGS の内容と同じ空間領域を覆うようにする。
- メッシュの精度:シーンジオメトリの簡略化した近似で足り、高い面数は不要である。
- 複数の Actor:複数の
ALCC2ProxyMeshActor を配置して異なる領域を覆える。 - 明示的なバインドは不要:ProxyMesh を特定の Actor にリンクする必要はなく、ペアリングは自動で行われる。
- 後方互換性:ProxyMesh を使わないプロジェクトの動作はアップグレード前とまったく同じで、追加のコストはない。
トラブルシューティング
ProxyMesh の効果が出ない
NormalModeがProxyMeshに設定されているか確認する- ライセンスが有効であるか確認する
- ProxyMesh Actor に有効な StaticMesh が割り当てられているか確認する
- ProxyMesh が空間的に 3DGS の内容と重なっているか確認する
警告:"has a null StaticMesh"
ALCC2ProxyMesh Actor に StaticMesh を割り当てれば解決する。警告はスロットリングされ、インスタンスごとに 1 回だけ出力される。
最終画面にホワイトボックスのカラーが見える
- 少なくとも 1 つの LCC2Component が ProxyMesh モードになっているか確認する
- 深度の一致が厳しすぎる場合は
LCC2.ProxyMeshDepthEpsilonを調整する
ライティングの結果が正しくない
- プロキシメッシュの法線が実際のシーンジオメトリの妥当な近似になっているか検証する
影が近くにしか出ず、遠くで途切れる
エンジン自体の問題である。ProxyMesh Actor を選択し、StaticMeshComponent の Far Shadow をオフにしてから再度オンにすると、影が完全な状態に戻る。