投影デカール開発ガイド
機能概要
デカール投影(Decal Projector)は、スライドプロジェクターのように 2D 画像を 3DGS 点群サーフェスへ投影します。プロジェクターはワールド空間内の固定された透視フラスタムで、フラスタム内の点群はデカールカラーで覆われ、フラスタム外の点群は影響を受けません。デカールはグローバルなシェーディング状態であり、3DGS シーン全体に一貫したシェーディング効果をもたらします。
基本投影に加えて、オクルージョンカリングをオプションで有効化できます。デフォルトではデカールは X 線のような挙動です。3DGS 自体にサーフェスの概念がないため、デカールは前面オブジェクトに遮られた背面まで透過し、3DGS シーン全体を通過します。オクルージョンカリングを有効化すると、プロジェクターに面した前面サーフェスのみが着色され、遮られた背面や遮蔽されたシーンは着色されなくなり、リアルなスライドプロジェクター効果が得られます。
注:
デカールとオクルージョンカリングは PC / Mac(URP パイプライン) でのみ有効です。モバイルや VR プラットフォームで関連インターフェースを呼び出しても SDK は無視し、警告ログを出力します。ビジネス側でプラットフォームチェックを行う必要はありませんが、それらのプラットフォームで効果が表示されることは期待しないでください。
手順 1:シーンと GameObject を作成する
Unity で新しいシーンを作成します。Unity はデフォルトで Main Camera と Directional Light を作成します。
Main Camera をセットアップする
Hierarchy ウィンドウで Main Camera を選択し、Inspector ウィンドウでそのプロパティを以下のとおり設定します。

Main Camera のプロパティを設定
LCCManager を作成する
Hierarchy ウィンドウの空の領域を右クリックし、ポップアップメニューから Create Empty を選択して空の GameObject を作成し、LCCManager と名前を付け、その Transform を正規化し、Add Component で LCCManager スクリプトを追加します。

LCCManager GameObject を作成し LCCManager スクリプトを追加
LCCRenderer を作成する
Hierarchy ウィンドウの空の領域を右クリックし、Create Empty を選択して空の GameObject を作成し、LCCRenderer と名前を付け、その Transform を Rotation.x = -90、Scale.x = -1 に設定します。

LCCRenderer を作成し Transform(Rotation.x = -90、Scale.x = -1)を設定
注:
LCCRenderer GameObject の Transform 設定(Rotation.x = -90、Scale.x = -1)は、LCC データ座標系にアライメントするためのものです。座標系アライメントの詳細は Unity SDK の概要 の「LCC データの座標系」を参照してください。
Projector を作成する
Hierarchy ウィンドウの空の領域を右クリックし、Create Empty を選択して Projector という名前の空の GameObject を作成します。この空のオブジェクトを作成する目的は、その Transform コンポーネントを使ってプロジェクターの位置と向きを制御することです。スクリプトコードに関連付けると、実行時にプロジェクターのプロパティを調整できます。プロジェクターは +Z 方向に沿って投影し、そのプロパティは必要に応じて設定できます。

プロジェクターとして Projector 空 GameObject を作成(+Z が投影方向)
手順 2:Render Feature を追加する
- Unity メニューバーで File → Project Settings を選択し、左側の Graphics を選び、現在の Default Render Pipeline Asset を確認します。この例では URP(Universal Render Pipeline Asset)を使用します。

Graphics 設定で Default Render Pipeline Asset を確認
その Asset をクリックし、Project ウィンドウで対応するアセットファイルを特定し、関連付けられた Renderer(この例では
URP_Renderer.asset)を見つけます。その Renderer アセットファイルを選択し、Inspector ウィンドウで Add Renderer Feature をクリックし、Decal Depth Feature を追加します。

URP Renderer に Decal Depth Feature を追加
注:
Decal Depth Feature は オクルージョンカリングの前提条件です。基本投影(X 線デカール)のみを使用する場合は追加する必要はありません。ただしオクルージョンカリングを有効化するには、先にこの Feature を URP Renderer Asset に登録する必要があります。さもないとオクルージョン深度マップが生成されず、オクルージョンが有効になりません。
手順 3:スクリプトを書く
Decal.cs という名前の新しい C# スクリプトを作成します。以下の完全なコードは、インテグレーターの視点をシミュレートし、デカール関連の全 7 メソッド(基本投影 5 つ + オクルージョンカリング 2 つ)をカバーしており、プロジェクトへそのままコピーできます。
using LCCCore;
using UnityEngine;
/// <summary>
/// デカール投影 — 最小限の開発者向け使用例。
///
/// このスクリプトは「インテグレータースクリプト」をシミュレートします。LCCManager の公開 API のみを呼び出し、SDK 内部には触れません。
/// デカール API 全 7 つをカバー:
/// 基本投影(5): SetDecalEnabled / SetDecalTexture / SetDecalProjection / SetDecalOpacity / SetDecalEdgeFade
/// オクルージョンカリング(2): SetDecalOcclusion / SetDecalOcclusionSettings
///
/// 使用手順:
/// 1) 空の GameObject を作成し、このスクリプトをアタッチします;
/// 2) Inspector でシーン内の LCCManager を m_manager へドラッグします;
/// 3) m_filePath に有効な LCC シーンパスを設定します;
/// 4) 投影する画像を m_decalTexture へドラッグします(インポート設定で Read/Write を有効化することを推奨);
/// 5) 空のオブジェクトを m_projector へドラッグしてプロジェクターとします(空のままにするとこのオブジェクトを使用)。+Z 軸が投影方向です;
/// 6) Play します。シーンの読み込み完了後、デカールが自動的にオンになります。プロジェクターをドラッグすると点群上のデカールをリアルタイムに確認できます。
///
/// プラットフォーム注記:デカールとオクルージョンカリングは PC/Mac(URP)でのみ有効です。モバイル/VR での呼び出しは SDK に無視され、警告としてログ出力されます。
/// </summary>
public class Decal : MonoBehaviour
{
[Header("必須")]
[Tooltip("シーン内の LCCManager インスタンス")]
public LCCManager m_manager;
[Tooltip("有効な LCC シーンパス")]
public string m_filePath;
[Tooltip("投影するデカール画像。RGB=カラー、A=デカール自身のマスク")]
public Texture2D m_decalTexture;
[Header("プロジェクター(+Z 方向に投影)")]
[Tooltip("プロジェクターの姿勢。空の場合はこのオブジェクトの Transform を使用")]
public Transform m_projector;
[Range(1f, 179f)] public float m_fov = 60f;
[Tooltip("投影アスペクト比。<=0 の場合はデカール画像のアスペクト比を自動使用")]
public float m_aspect = 0f;
public float m_near = 0.1f;
public float m_far = 100f;
[Header("デカールの外観")]
[Range(0f, 1f)] public float m_opacity = 1.0f;
[Range(0f, 0.5f)][Tooltip("エッジフェード幅(UV 比)。0 = ハードエッジ")]
public float m_edgeFade = 0.1f;
[Tooltip("毎フレーム投影を更新し、実行時にプロジェクターのドラッグやパラメータ調整が可能に")]
public bool m_updateEveryFrame = true;
[Header("オクルージョンカリング(PC/Mac のみ)")]
[Tooltip("オンの場合、前面ジオメトリの背後にある背面/遮蔽点はデカールで着色されなくなります(スライドプロジェクター効果)。オフの場合は X 線です")]
public bool m_occlusion = false;
[Range(0f, 1f)][Tooltip("不透明度閾値:この値以上の不透明度を持つ Splat のみが深度マップに寄与し、浮遊/霧状の点を除去します。0 = すべて参加")]
public float m_occlusionCutoff = 0f;
[Range(0f, 0.5f)][Tooltip("相対深度許容値。小さすぎる -> 近傍サーフェスの自己オクルージョン、大きすぎる -> X 線着色の漏れ。デフォルト 0.05")]
public float m_occlusionBias = 0.05f;
[Range(0, 16)][Tooltip("正方形フットプリント半径の上限(px)。X 線の透過漏れを除去する主なノブ。0 = 単一テクセル、デフォルト 2")]
public int m_occlusionFootprint = 2;
[Tooltip("深度マップ解像度(px、2 のべき乗 256〜4096)。かすめ角の穴を埋めるには下げます。デフォルト 1024")]
public int m_occlusionResolution = 1024;
// -- 実行時状態 --
private bool m_loaded;
private bool m_lastOcclusion;
private float m_lastCutoff = float.NaN;
private float m_lastBias = float.NaN;
private int m_lastFootprint = -1;
private int m_lastResolution = -1;
void Start()
{
if (m_manager == null || string.IsNullOrEmpty(m_filePath))
{
Debug.LogError("[DecalDemo] m_manager または m_filePath が割り当てられていません。");
enabled = false;
return;
}
// 1) レンダーパイプラインを PC 単一シーンのエディターモードに初期化
m_manager.SetPlatformType(PlatformType.PC);
m_manager.SwitchRenderPass(ActiveRenderMode.SingleRender);
m_manager.SetEditorMode(true);
// 2) 点群シーンを読み込み、完了後にデカールを有効化(デカールはグローバル状態。シーン準備完了後に設定するのが最も安全)
var renderer = m_manager.GetRender(this.transform);
Debug.Log($"[DecalDemo] 読み込みを開始: {m_filePath}");
renderer.Load(m_filePath,
_ => { /* 進捗コールバック。この例では未使用 */ },
OnSceneLoaded);
}
private void OnSceneLoaded()
{
Debug.Log("[DecalDemo] 読み込み完了、デカール投影を有効化します。");
// -- 基本投影: 5 つの API --
m_manager.SetDecalTexture(m_decalTexture); // デカールの内容
m_manager.SetDecalOpacity(m_opacity); // 全体の不透明度
m_manager.SetDecalEdgeFade(m_edgeFade); // エッジフェード
ApplyProjection(); // プロジェクターの姿勢(内部的に SetDecalProjection を呼び出す)
m_manager.SetDecalEnabled(true); // デカールを有効化(_DECAL キーワード)
// -- オクルージョンカリング: 2 つの API -- ApplyProjection の後でなければならない(深度マップには有効なプロジェクター VP が必要)
m_manager.SetDecalOcclusionSettings(BuildOcclusionSettings());
m_manager.SetDecalOcclusion(m_occlusion);
CacheOcclusionState();
m_loaded = true;
}
/// <summary>
/// デモ専用です。実際のプロジェクトでは、パフォーマンス向上のため Update() で毎フレーム
/// SetDecalProjection / SetDecalOpacity / SetDecalEdgeFade を呼び出す必要はありません。
/// パラメータが変更されたときに対応する API を呼び出すだけで十分です。
/// </summary>
void Update()
{
if (!m_loaded) return;
// 実行時にオクルージョンを切り替え
if (m_occlusion != m_lastOcclusion)
{
m_manager.SetDecalOcclusion(m_occlusion);
m_lastOcclusion = m_occlusion;
}
// オクルージョン品質パラメータが変更されたら -> 構造体を一度プッシュ
if (!Mathf.Approximately(m_occlusionCutoff, m_lastCutoff) ||
!Mathf.Approximately(m_occlusionBias, m_lastBias) ||
m_occlusionFootprint != m_lastFootprint ||
m_occlusionResolution != m_lastResolution)
{
m_manager.SetDecalOcclusionSettings(BuildOcclusionSettings());
CacheOcclusionState();
}
// 便利なリアルタイムデバッグのため毎フレームプロジェクター / 外観を更新
if (!m_updateEveryFrame) return;
m_manager.SetDecalOpacity(m_opacity);
m_manager.SetDecalEdgeFade(m_edgeFade);
ApplyProjection();
}
/// <summary>現在のプロジェクター姿勢と透視パラメータから投影行列を構築します。</summary>
private void ApplyProjection()
{
Transform p = m_projector != null ? m_projector : this.transform;
float aspect = m_aspect > 0f
? m_aspect
: (m_decalTexture != null ? (float)m_decalTexture.width / m_decalTexture.height : 1f);
m_manager.SetDecalProjection(p.position, p.rotation, m_fov, aspect, m_near, m_far);
}
/// <summary>4 つのオクルージョンパラメータを構造体にまとめます。</summary>
private DecalOcclusionSettings BuildOcclusionSettings()
{
return new DecalOcclusionSettings
{
opacityCutoff = m_occlusionCutoff,
depthBias = m_occlusionBias,
footprintMaxPx = m_occlusionFootprint,
resolution = m_occlusionResolution,
};
}
private void CacheOcclusionState()
{
m_lastOcclusion = m_occlusion;
m_lastCutoff = m_occlusionCutoff;
m_lastBias = m_occlusionBias;
m_lastFootprint = m_occlusionFootprint;
m_lastResolution = m_occlusionResolution;
}
// -- 便利なデバッグエントリポイント(Inspector 右クリック) --
[ContextMenu("デカール オン")] private void DecalOn() { m_manager?.SetDecalEnabled(true); }
[ContextMenu("デカール オフ")] private void DecalOff() { m_manager?.SetDecalEnabled(false); }
[ContextMenu("オクルージョン オン")] private void OcclusionOn() { m_occlusion = true; m_manager?.SetDecalOcclusion(true); m_lastOcclusion = true; }
[ContextMenu("オクルージョン オフ")] private void OcclusionOff() { m_occlusion = false; m_manager?.SetDecalOcclusion(false); m_lastOcclusion = false; }
}
注:
デカールは グローバルなシェーディング状態 であり、LCC シーンの読み込み完了後(つまり onComplete コールバック内)に設定する必要があります。
この例では、点群が準備できる前に設定するのを避けるため、
SetDecalTexture/SetDecalProjection/SetDecalEnabledをLoadの完了コールバック(OnSceneLoaded)に配置しています。オクルージョンカリング関連の
SetDecalOcclusionSettings/SetDecalOcclusionはApplyProjection(つまりSetDecalProjection)の後 に呼び出す必要があります。オクルージョン深度マップには有効なプロジェクターのビュー・プロジェクション行列が必要だからです。
手順 4:スクリプトをアタッチしてプロパティを設定する
Decal.csスクリプトを Hierarchy ウィンドウの LCCRenderer GameObject にアタッチします。- Inspector ウィンドウで LCCManager GameObject をスクリプトの Manager プロパティへドラッグします。
- Projector GameObject をスクリプトの Projector プロパティへドラッグします。
- スクリプトの File Path プロパティに LCC ファイルパスを入力し、デカールテクスチャ画像を Decal Texture プロパティへドラッグします。
- その他のプロパティパラメータは必要に応じて調整できます。各プロパティの意味は以下の表のとおりです。

Decal スクリプトの Inspector プロパティ設定
| フィールド | 意味 | デフォルト値 |
|---|---|---|
| Manager | シーン内の LCCManager インスタンス | 必須 |
| File Path | 有効な LCC シーンパス | 必須 |
| Decal Texture | 投影するデカール画像。RGB はカラー、A はデカール自身のマスク | 必須 |
| Projector | プロジェクターの姿勢。+Z が投影方向。空の場合はこのオブジェクトの Transform を使用 | 空 |
| Fov | プロジェクターの透視視野角 | 60 |
| Aspect | 投影アスペクト比。0 以下の場合はデカール画像のアスペクト比から自動計算 | 0(自動) |
| Near / Far | プロジェクターフラスタムの近 / 遠クリッピングプレーン | 0.1 / 100 |
| Opacity | デカール全体の不透明度 | 1 |
| Edge Fade | エッジフェード幅(UV 比)。0 はハードエッジ | 0.1 |
| Update Every Frame | 毎フレーム投影を更新。実行時のプロジェクターのドラッグやパラメータ変更に便利 | チェック |
| Occlusion | オクルージョンカリングを有効にするかどうか | オフ |
| Occlusion Cutoff | 不透明度閾値。この値以上の不透明度を持つ Splat のみが深度マップに寄与 | 0 |
| Occlusion Bias | 相対深度許容値 | 0.05 |
| Occlusion Footprint | 正方形フットプリント半径の上限(px)。X 線の透過漏れを除去する主なノブ | 2 |
| Occlusion Resolution | オクルージョン深度マップ解像度(px、2 のべき乗 256〜4096) | 1024 |
手順 5:実行して効果を確認する
Unity の Play ボタンをクリックします。シーン読み込み完了後、デカールが自動的にオンになります。Update Every Frame にチェックが入っている場合、実行中に Scene ビューでプロジェクターオブジェクトを直接ドラッグすると、3DGS サーフェス上のデカールがリアルタイムに動くのが確認できます。Opacity や Edge Fade などのパラメータ調整も即時反映されます。スクリプトコンポーネントの右クリックメニューには Decal On/Off と Occlusion On/Off の 4 つのショートカットもあり、オン/オフ効果を個別に検証するのに便利です。

実行後に 3DGS サーフェスへ投影されたデカール(基本投影、X 線透過)

オクルージョンカリング有効化後、プロジェクターに面した前面サーフェスのみが着色される(スライドプロジェクター効果)
FAQ:互換モードを無効にする
Unity の Console ウィンドウにエラーが報告され、デカール効果が表示されない場合は、互換モードを無効にします。Edit → Project Settings → Graphics から設定パネルを開き、URP タブを選択し、Render Graph → Compatibility Mode (Render Graph Disabled) の後ろのチェックボックスにチェックを入れないでください。

Render Graph 互換モード(Render Graph Disabled)にチェックしない
オクルージョンカリングと調整
オクルージョンカリングはプロジェクターを設定した後に有効化する必要があります。この例では、シーン読み込み完了コールバックで先に SetDecalProjection を呼び出し、次に SetDecalOcclusionSettings と SetDecalOcclusion を呼び出して、オクルージョン深度マップに有効なプロジェクターのビュー・プロジェクション行列を渡しています。実行時に Inspector の Occlusion チェックボックスをオンにすると、透過していたブロックがカリングされ、プロジェクターに面した前面サーフェスのみが保持されるのが確認できます。
前提条件:
オクルージョンカリングを有効化する前に、Decal Depth Feature が URP Renderer Asset に登録されている必要があります(このプロジェクトではサブアセットとして
URP_Renderer.assetに書き込まれています)。登録されていない場合、オクルージョン深度マップは生成されず、オクルージョンは有効になりません。
オクルージョン品質は 4 つのパラメータで制御され、構造体を通じて一度に渡されます。4 つは互いに直交しており、以下の表に従って調整します。
| パラメータ | 効果 | デフォルト | 調整の提案 |
|---|---|---|---|
opacityCutoff | 浮遊 / 霧状の Splat を除去し、オクルージョン面を手前へ引き寄せないようにする | 0 | 前景にブロック状のノイズが出る場合は適度に上げる。大きすぎると着色漏れが発生 |
depthBias | 距離に応じて点群サーフェスの厚みを吸収する相対深度許容値 | 0.05 | 近傍サーフェスに自己オクルージョンノイズが出る場合は上げる。薄い遮蔽物が漏れる場合は下げる |
footprintMaxPx | 前面サーフェスの近傍深度がワールドスケールで疎な隙間を埋める。X 線透過漏れを修正する主なノブ | 2 | 透過ブロックが残る場合は上げる。輪郭が過剰にオクルージョンされる場合は下げる。0 は単一テクセル |
resolution | オクルージョン深度マップ解像度 | 1024 | かすめ角サーフェスで小ブロックの着色漏れが大きく出る場合は下げる(例:512 / 256)。オクルージョン境界はわずかに粗くなる |
重要な手順
投影デカールを実装するための重要な手順は以下のとおりです。
- シーンにプロジェクターとして Projector 空オブジェクトを作成します。+Z 軸が投影方向です。
- オクルージョンカリングが必要な場合は、URP Renderer に Decal Depth Feature が追加されていることを確認します。
- LCC シーンの読み込み完了後に、デカールテクスチャ、外観、プロジェクター姿勢を順に設定し、デカールを有効化します(
SetDecalEnabled(true))。 - オクルージョンカリングの
SetDecalOcclusionSettings/SetDecalOcclusionはSetDecalProjectionの後 に呼び出す必要があります。
デカール関連 API
以下のメソッドはすべて LCCManager ファサードクラスにあり、PC / Mac(URP パイプライン)でのみ有効です。モバイル / VR での呼び出しは無視され、警告が出力されます。
SetDecalEnabled
// 戻り値: void
public void SetDecalEnabled(bool enable)
デカール投影を切り替えます。有効にすると、現在キャッシュされている不透明度 / エッジフェードパラメータが GPU にプッシュされ、_DECAL シェーダーキーワードが有効になります。デカールはワールド固定のグローバル状態で、すべてのカメラで一貫しています。内容とプロジェクター姿勢を設定するには SetDecalTexture と SetDecalProjection も呼び出す必要があります。
| パラメータ | 型 | 説明 |
|---|---|---|
enable | bool | デカール投影を有効にするかどうか |
使用例:
m_manager.SetDecalEnabled(true);
m_manager.SetDecalTexture(decalTex);
m_manager.SetDecalProjection(projectorPos, projectorRot, 60f, 1.778f, 0.1f, 20f);
注:
- 無効化しても
_DECALキーワードのみが無効になり、キャッシュされたテクスチャ / パラメータはクリアされません。
SetDecalTexture
// 戻り値: void
public void SetDecalTexture(Texture2D tex)
デカールテクスチャを設定します。RGB はカラー、A はデカール自身のマスクで、グローバル不透明度とエッジフェードに乗算されます。
| パラメータ | 型 | 説明 |
|---|---|---|
tex | Texture2D | デカールテクスチャ |
使用例:
m_manager.SetDecalTexture(logoTex);
注:
nullを渡すとグローバルテクスチャ参照がクリアされます。
SetDecalProjection
// 戻り値: void
public void SetDecalProjection(Vector3 pos, Quaternion rot, float fov, float aspect, float near, float far)
デカールプロジェクターの姿勢と透視パラメータを設定します。プロジェクターは前方向(+Z)に沿って投影し、フラスタム内の点がデカールで覆われます。
| パラメータ | 型 | 説明 |
|---|---|---|
pos | Vector3 | プロジェクターのワールド座標 |
rot | Quaternion | プロジェクターの向き |
fov | float | 垂直 FOV(度)。[1, 179] にクランプ |
aspect | float | アスペクト比。最小 1e-4 |
near | float | 近クリッピングプレーン。最小 1e-3 |
far | float | 遠クリッピングプレーン。最小 near + 1e-3 |
使用例:
m_manager.SetDecalProjection(new Vector3(0, 10, 0), Quaternion.Euler(90, 0, 0), 60f, 1.778f, 0.1f, 20f);
注:
SetDecalOcclusion(true)が既に有効な場合、このメソッドは新しい VP / ビューをDecal Depth Featureへ同期的に転送します。
SetDecalOpacity
// 戻り値: void
public void SetDecalOpacity(float opacity)
デカール全体の不透明度を設定し、即座に GPU へプッシュし、次回 SetDecalEnabled(true) を呼び出したときのためにキャッシュします。
| パラメータ | 型 | 説明 |
|---|---|---|
opacity | float | デカール全体の不透明度。範囲 [0, 1] |
使用例:
m_manager.SetDecalOpacity(0.8f);
注:
- 範囲
[0, 1]。範囲外の値は自動でクランプされます。
SetDecalEdgeFade
// 戻り値: void
public void SetDecalEdgeFade(float edgeFade)
デカールのエッジフェード幅を設定します。0 はハードエッジで、値が大きいほどエッジの遷移が柔らかくなります。
| パラメータ | 型 | 説明 |
|---|---|---|
edgeFade | float | エッジフェード幅。UV 空間の比。範囲 [0, 0.5) |
使用例:
m_manager.SetDecalEdgeFade(0.1f);
注:
- 範囲
[0, 0.5)。範囲外の値は自動でクランプされます。
SetDecalOcclusion
// 戻り値: void
public void SetDecalOcclusion(bool enable)
デカールのオクルージョンカリング(プロジェクター深度マップに基づく)を切り替えます。影機能とは直交し、独立して切り替えられます。有効化する前に SetDecalProjection でプロジェクターを設定しておく必要があります。さもないと深度マップに有効な VP がありません。
| パラメータ | 型 | 説明 |
|---|---|---|
enable | bool | デカールのオクルージョンカリングを有効にするかどうか |
使用例:
m_manager.SetDecalOcclusion(true);
注:
- URP のみ対応(Built-in パイプラインでの呼び出しは何もせず、ログを出力します)。
- URP Renderer Asset に
Decal Depth Featureが登録されている必要があります。 SetDecalOcclusionSettingsで設定した品質パラメータに依存します。
SetDecalOcclusionSettings
// 戻り値: void
public void SetDecalOcclusionSettings(DecalOcclusionSettings settings)
デカールのオクルージョンカリングの品質パラメータを一度に設定します(4 項目の意味は下記の構造体と「オクルージョンカリングと調整」の表を参照)。
| パラメータ | 型 | 説明 |
|---|---|---|
settings | DecalOcclusionSettings | オクルージョンカリング品質パラメータ |
使用例:
m_manager.SetDecalOcclusionSettings(DecalOcclusionSettings.Default);
m_manager.SetDecalOcclusionSettings(new DecalOcclusionSettings {
opacityCutoff = 0.1f,
depthBias = 0.05f,
footprintMaxPx = 2,
resolution = 1024
});
注:
- いつでも調整できます。パラメータは即座に GPU と
Decal Depth Featureへプッシュされます。 resolutionを変更すると深度マップ RT の再構築がトリガーされます。
関連データ構造
DecalOcclusionSettings
public struct DecalOcclusionSettings {
public float opacityCutoff; // [0,1] Splat が深度マップに参加するための最小不透明度。デフォルト 0(全参加)
public float depthBias; // 相対深度許容比率。デフォルト 0.05
public int footprintMaxPx; // 正方形フットプリント半径の上限(px)。0〜16、デフォルト 2
public int resolution; // 深度マップ解像度(px、2 のべき乗、256〜4096)。デフォルト 1024
public static DecalOcclusionSettings Default { get; } // cutoff=0, bias=0.05, footprint=2, resolution=1024
}
SetDecalOcclusionSettings() で使用します。デフォルト値は DecalOcclusionSettings.Default で取得できます。
| フィールド | 意味 | デフォルト |
|---|---|---|
opacityCutoff | float、[0,1]、不透明度閾値。この値以上の不透明度を持つ Splat のみ深度マップに参加 | 0 |
depthBias | float、相対深度許容値 | 0.05 |
footprintMaxPx | int、0〜16、正方形フットプリント半径の上限(px) | 2 |
resolution | int、2 のべき乗 256〜4096、オクルージョン深度マップ解像度 | 1024 |
注意事項
- PC / Mac のみ有効。 モバイルと VR プラットフォームでのデカール関連インターフェースの呼び出しは無視され、警告が出力されます。ビジネス側でプラットフォームチェックを行う必要はありませんが、それらのプラットフォームで効果が表示されることは期待しないでください。
- デカールはシーン読み込み完了後に設定することを推奨。 デカールはグローバルなシェーディング状態です。この例では、点群が準備できる前に設定するのを避けるため、
SetDecalTexture/SetDecalProjection/SetDecalEnabledをLoadの完了コールバックに配置しています。 - オクルージョンカリングは 2 つの前提条件に依存。 第一に、URP Renderer Asset に Decal Depth Feature が登録されていること。第二に、プロジェクターを設定する
SetDecalProjectionが呼び出されていること。どちらかが欠けてもオクルージョンは有効になりません。 - 静的投影の追加オーバーヘッドはほぼゼロ。 オクルージョン深度マップはプロジェクター姿勢または点群が変化したときのみ再計算されます。プロジェクターが静止している場合は、フレームごとの追加計算はありません。