LCCManager:コアマネージャー
LCC Unity SDK の中核マネージャーで、すべての Renderer インスタンス、カメラ、グローバルレンダリング状態、編集操作(クリッピング / ハイライト / カラー調整)、デカール投影、スナップ、インタラクションクエリ(レイキャスト / コリジョン)の管理を担当します。シーン全体に LCCManager インスタンスは 1 つだけ存在すべきです。
| 名前空間 | LCCCore |
| 基底クラス | MonoBehaviour |
LCCManager には公開プロパティがありません。すべての機能はメソッドを通じてアクセスします。メソッドは目的別にグループ化されています。
- 初期化と設定
- ランタイムレンダリング制御
- ライティングと影
- カメラ管理
- クリッピング / ハイライト / カラー調整
- デカール投影
- スナップ
- レイキャスティングとコリジョンクエリ
- ビジュアルエフェクト
- インスタンスクエリ
初期化と設定
以下のメソッドは、データ読み込み前にプラットフォーム、レンダーモード、容量などの事前設定を完了するために使用します。ほとんどのメソッドは 任意の Renderer.Load() の前に呼び出す必要があります。
SetPlatformType
public void SetPlatformType(PlatformType _type)
SDK の対象ランタイムプラットフォームを設定します。内部のレンダリング戦略とリソース割り当てに影響します。
| パラメータ | 型 | 説明 |
|---|---|---|
_type | PlatformType | 対象プラットフォーム。PlatformType を参照 |
注:
- 任意の
GetRender()呼び出しの前に実行する必要があります。
例:
lccManager.SetPlatformType(PlatformType.PC);
SwitchRenderPass
public void SwitchRenderPass(ActiveRenderMode _mode)
グローバルレンダリングアーキテクチャモードを設定します。MultiRender は共有 GPU バッファを使用し、最大 255 個の Renderer を同時にレンダリングできます。SingleRender は SDK がデータサイズに基づいてレンダリングパスを自動選択します。
| パラメータ | 型 | 説明 |
|---|---|---|
_mode | ActiveRenderMode | レンダーモード。ActiveRenderMode を参照 |
注:
- 任意の
Renderer.Load()の前に呼び出す必要があります。 - PC / Mac プラットフォームでのみ有効です。モバイル / VR プラットフォームは自動的に適応戦略を採用し、このメソッドの呼び出しは拒否されます。
MultiRenderモードは HTTP データソースに対応していません。HTTP データにはSingleRenderを使用します。- いずれかの Renderer が
Load()を完了すると、モードはロックされ、再度切り替えることはできません。
例:
lccManager.SwitchRenderPass(ActiveRenderMode.MultiRender);
GetRender(オーバーロード 1:Transform をバインド)
// 戻り値: Renderer。失敗時は null
public Renderer GetRender(Transform _transform)
新しいレンダリングインスタンスを作成し、指定した Transform にバインドします。作成後、データ読み込みには Renderer.Load() を呼び出す必要があります。
| パラメータ | 型 | 説明 |
|---|---|---|
_transform | Transform | レンダリングインスタンスがアタッチされる Transform |
注:
- 先に
SetPlatformType()とSetMainCamera()を呼び出す必要があります。 MultiRenderモードでは最大 255 個の Renderer に対応します。
例:
var go = new GameObject("LCCScene");
var renderer = lccManager.GetRender(go.transform);
renderer.Load(filePath, null, () => Debug.Log("読み込み完了"));
GetRender(オーバーロード 2:GameObject を自動生成)
// 戻り値: Renderer。失敗時は null
public Renderer GetRender(out GameObject gameObject)
LCCRenderer という名前の GameObject を自動生成し、レンダリングインスタンスをその Transform にバインドします。
| パラメータ | 型 | 説明 |
|---|---|---|
gameObject | out GameObject | 自動生成された GameObject を出力。失敗時は null |
例:
var renderer = lccManager.GetRender(out GameObject go);
renderer.Load(filePath, null, () => Debug.Log("読み込み完了"));
SetMaxBufferSplat
public void SetMaxBufferSplat(int _count)
GPU バッファの最大容量(Splat 数)を設定します。一度だけ割り当てられ、動的に変更できません。
| パラメータ | 型 | 説明 |
|---|---|---|
_count | int | 最大 Splat 数。単位:万(値 × 10000 = 実際の数) |
注:
- 任意の
Renderer.Load()の前に呼び出す必要があり、先にSetPlatformType()を呼び出す必要があります。 - 容量が大きいほどビデオメモリ使用量が高くなります。必要に応じて設定してください。
- プラットフォーム制限:PC / Mac / PCVR 4500 万、Android / iOS 600 万、VR(Pico / Quest / PicoSwan / AVP / OpenXR)200 万。
- デフォルト:PC / Mac 3000 万、Android / iOS 300 万、VR 100 万。
例:
lccManager.SetMaxBufferSplat(3000); // 3000 万ポイント
SetFullRenderSplat
public void SetFullRenderSplat(int _count)
PC / Mac 全量レンダリングの上限閾値を設定します。データサイズがこの値未満の場合、全量レンダリングパスを使用し、それ以外はチャンクレンダリングパスを使用します。
| パラメータ | 型 | 説明 |
|---|---|---|
_count | int | 全量レンダリング上限。単位:万。範囲 [100, 4500] |
注:
- PC / Mac / PCVR プラットフォームのみ対応。
- 任意の
Renderer.Load()の前に呼び出す必要があり、先にSetPlatformType()を呼び出す必要があります。
例:
lccManager.SetFullRenderSplat(2500); // 2500 万ポイント
SetMaxRenderSplats
public void SetMaxRenderSplats(int _count)
実行時に毎フレームレンダリングされる Splat の最大数を設定します。Load() 後に動的に呼び出せます。
| パラメータ | 型 | 説明 |
|---|---|---|
_count | int | 実行時にレンダリングされる最大 Splat 数。単位:万 |
注:
- 実行時に動的に調整できます。
SetMaxBufferSplat()で設定した容量を超えることはできません。超えた場合は自動でクランプされます。- 全量レンダリングモードでは効果がありません。
例:
lccManager.SetMaxRenderSplats(2500); // 2500 万ポイント
GetLoadRatio
// 戻り値: float、[0,1] 現在のデータ読み込み進捗
public float GetLoadRatio()
現在のシーンデータの読み込み進捗を照会します。
注:
- 全量レンダリングモードでは常に
1.0を返します。 - チャンクレンダリングモードでは、現在のビューで読み込み済みノードの割合を返します。値はカメラ移動に応じてリアルタイムに変化し、単調増加する全体進捗ではありません。
例:
float ratio = lccManager.GetLoadRatio();
progressBar.value = ratio;
SetSelectionMode
public void SetSelectionMode(SelectionMode mode)
ノード選択戦略を設定します。
| パラメータ | 型 | 説明 |
|---|---|---|
mode | SelectionMode | 選択戦略。SelectionMode を参照 |
注:
Auto(デフォルト):シーンの全体バウンディングボックスに基づいて自動決定します。シーンの最大寸法が約 380 メートルを超えると、自動的にLargeにアップグレードされます。Normal:中小規模のシーンに適します。Large:超大規模シーン(1000 メートル超)に適します。- 切り替え時に即時反映されます。
例:
lccManager.SetSelectionMode(SelectionMode.Auto);
ランタイムレンダリング制御
以下のメソッドは実行時に動的に呼び出して、レンダリング精度、表示効果、レンダリングのトグルを調整できます。
SetDetailLevel
public void SetDetailLevel(float sse)
レンダリング精度レベルを設定します。値が大きいほどレンダリングは細かくなり、パフォーマンス消費が高くなります。
| パラメータ | 型 | 説明 |
|---|---|---|
sse | float | 精度レベル。範囲 [1, 100]、超えた場合は自動でクランプ |
注:
- 対数マッピングを使用します。低値域は変化に敏感で、高値域は滑らかです。
- 実行時に動的に調整できます。
Normal選択モードでのみ有効です。
例:
lccManager.SetDetailLevel(50f); // 中精度
SetStartLod
public void SetStartLod(int lod)
LOD 展開の開始点を設定します(0 始まり)。0 が最も細かく、数値が大きいほど粗いレベルになります。
| パラメータ | 型 | 説明 |
|---|---|---|
lod | int | LOD 開始レベル。範囲 [0, 10]、超えた場合は自動でクランプ |
注:
- 実際の有効上限はデータの総レベル数によって制約されます。
例:
lccManager.SetStartLod(0);
SetAutoFov
public void SetAutoFov(bool _auto)
レンダリング FOV を自動管理するかどうかを設定します。有効時(デフォルト)、SDK は最初のフレームでピクセル焦点距離のベースラインをロックし、その後毎フレーム現在のビューポート高さから垂直 FOV を逆算して Camera.fieldOfView に書き戻します。無効時、fieldOfView は外部(SetFOV() またはカメラの直接変更)で制御されます。
| パラメータ | 型 | 説明 |
|---|---|---|
_auto | bool | 自動 FOV を使用するかどうか |
注:
- デフォルトで有効です。
- 有効時はメインカメラの
Camera.fieldOfViewを継続的に書き換えるため、SetFOV()の呼び出しは無視されます。 - 無効時は
SetFOV()を手動で呼び出してパラメータを設定する必要があります。
例:
lccManager.SetAutoFov(true);
SetFOV
public void SetFOV(int _width, int _height, float _verticalFov, float _aspect)
垂直 FOV(度)を手動設定します。メインカメラの Camera.fieldOfView を直接書き換えるため、Inspector の FOV が実際のレンダリング FOV と一致します。_width / _height / _aspect はレガシーシグネチャのパラメータで、実際の投影はメインカメラ自身のビューポートを使用します(異なるサイズ / FOV のオフスクリーン出力には SetRecordMode() を使用します)。
| パラメータ | 型 | 説明 |
|---|---|---|
_width | int | ピクセル幅 |
_height | int | ピクセル高さ |
_verticalFov | float | 垂直 FOV(度) |
_aspect | float | アスペクト比 |
注:
- 先に
SetAutoFov(false)を呼び出す必要があります。さもないと毎フレームの自動 FOV 逆算が手動値を上書きします。 - 垂直 FOV は
[1, 179]度にクランプされます。 - VR / PCVR プラットフォーム、録画中、正射投影カメラでの呼び出しは拒否されます(警告して戻ります)。
例:
lccManager.SetFOV(1920, 1080, 60f, 1.778f);
SetRenderEnable
public void SetRenderEnable(Renderer _renderer, bool _isEnable)
実行時に指定 Renderer のレンダリングトグルを制御します。無効にすると走査と描画に参加しません。
| パラメータ | 型 | 説明 |
|---|---|---|
_renderer | Renderer | 対象レンダリングインスタンス |
_isEnable | bool | レンダリングを有効にするかどうか |
例:
lccManager.SetRenderEnable(renderer, false); // 非表示
SetEnvironment
public void SetEnvironment(Renderer _renderer, bool _isRender)
指定 Renderer の環境データレンダリングを制御します。環境データは遠景を埋めるために使われる低精度の背景点群です。
| パラメータ | 型 | 説明 |
|---|---|---|
_renderer | Renderer | 対象レンダリングインスタンス |
_isRender | bool | 環境データをレンダリングするかどうか |
注:
- データに環境ノードが含まれている必要があります。
例:
lccManager.SetEnvironment(renderer, true);
SetZDepth
public void SetZDepth(bool zwrite)
Z 深度書き込みを切り替え、レンダリングキューを適宜調整します。
| パラメータ | 型 | 説明 |
|---|---|---|
zwrite | bool | Z 深度書き込みを有効にするかどうか |
例:
lccManager.SetZDepth(true);
SetAlpha
public void SetAlpha(float alpha)
グローバル不透明度を設定します。
| パラメータ | 型 | 説明 |
|---|---|---|
alpha | float | グローバル不透明度。範囲 [0, 1]、超えた場合は自動でクランプ |
例:
lccManager.SetAlpha(0.8f);
SetLightIntensity
public void SetLightIntensity(float intensity)
グローバルライト強度を設定します。
| パラメータ | 型 | 説明 |
|---|---|---|
intensity | float | ライト強度。範囲 [0, 1]、超えた場合は自動でクランプ |
例:
lccManager.SetLightIntensity(0.7f);
SetLowPassFilter
public void SetLowPassFilter(float _filter)
グローバルローパスフィルタ強度を設定し、高周波のエイリアシング / ノイズを抑制します。
| パラメータ | 型 | 説明 |
|---|---|---|
_filter | float | ローパスフィルタ強度。範囲 [0, 1]、超えた場合は自動でクランプ |
例:
lccManager.SetLowPassFilter(0.3f);
SetLockFPS
public void SetLockFPS(bool _isLock)
フレームレートのロック(静的 / 動的フレームレート切り替え)を切り替えます。
| パラメータ | 型 | 説明 |
|---|---|---|
_isLock | bool | フレームレートをロックするかどうか |
例:
lccManager.SetLockFPS(true);
SetRenderLayer
public void SetRenderLayer(int _layer)
LCC レンダリングが使用する Unity Layer を設定し、カメラの CullingMask 可視性制御に使用します。
| パラメータ | 型 | 説明 |
|---|---|---|
_layer | int | Unity レンダリングレイヤー。範囲 [0, 31] |
注:
- 実行時に動的に調整できます。
例:
lccManager.SetRenderLayer(8); // レイヤー 8 を使用
SetForceRefresh
public void SetForceRefresh()
レンダリングのリフレッシュを強制します。内部のカメラ情報キャッシュをクリアし、次のフレームでフラスタム、LOD などのパラメータが再計算されるようにします。外部で変更したカメラパラメータを即時に反映させる必要がある場合に適しています。
例:
lccManager.SetForceRefresh();
SetMipMode
public void SetMipMode(MipMode _mipMode)
Mip レンダリングモードを切り替えます。Mip モードはミップマップサンプリングを使用し(デフォルト)、Non_Mip モードはミップマップを無効化します。
| パラメータ | 型 | 説明 |
|---|---|---|
_mipMode | MipMode | 目標モード。MipMode を参照 |
注:
- 現在のモードが渡されたモードと同じ場合は即座に戻ります。
- 切り替え時に即時反映されます。
例:
lccManager.SetMipMode(MipMode.Non_Mip);
SetGraphicsAPI
public void SetGraphicsAPI(GraphicsDeviceType type)
グラフィックス API タイプを設定します。DX11 モードでは HDR が有効になります。
| パラメータ | 型 | 説明 |
|---|---|---|
type | GraphicsDeviceType | グラフィックス API タイプ(Unity 内蔵列挙型) |
例:
lccManager.SetGraphicsAPI(GraphicsDeviceType.Direct3D11);
SetDebugMode
public void SetDebugMode(bool debug)
デバッグモードを切り替えます。
| パラメータ | 型 | 説明 |
|---|---|---|
debug | bool | デバッグモードを有効にするかどうか |
注:
- PC / Mac プラットフォームのみ対応。
例:
lccManager.SetDebugMode(true);
SetEditorMode
public void SetEditorMode(bool _isEditor)
エディターモードを切り替えます。
| パラメータ | 型 | 説明 |
|---|---|---|
_isEditor | bool | エディターモードを有効にするかどうか |
注:
- PC / Mac プラットフォームのみ対応。
例:
lccManager.SetEditorMode(true);
SetAECMode
public void SetAECMode(bool _aec)
AEC(Architecture / Engineering / Construction)モードを切り替えます。
| パラメータ | 型 | 説明 |
|---|---|---|
_aec | bool | AEC モードを有効にするかどうか |
注:
- PC / Mac プラットフォームのみ対応。
例:
lccManager.SetAECMode(true);
SetSemantic
// 戻り値: bool。false=無効なパラメータ
public bool SetSemantic(bool enable, Vector4[] color = null)
セマンティックレンダリングモードを切り替えます。有効時、カラー配列を渡して各セマンティックカテゴリの表示色を定義できます。
| パラメータ | 型 | 説明 |
|---|---|---|
enable | bool | セマンティックレンダリングを有効にするかどうか |
color | Vector4[] | セマンティックカラー配列。長さは 100 である必要があり、そうでない場合は false を返します。デフォルトカラーを使用するには null を渡します |
例:
Vector4[] colors = new Vector4[100];
colors[0] = new Vector4(1, 0, 0, 1); // カテゴリ 0 = 赤
lccManager.SetSemantic(true, colors);
SwitchRenderMode
public void SwitchRenderMode(RenderMode mode, Texture2D tex = null)
点群レンダリングと 3DGS レンダリングを切り替えます。点群モードでは標高カラーランプテクスチャを提供できます。
| パラメータ | 型 | 説明 |
|---|---|---|
mode | RenderMode | レンダリングモード。RenderMode を参照 |
tex | Texture2D | 標高カラーランプテクスチャ(省略可) |
注:
- PC / Mac プラットフォームのみ対応。
例:
lccManager.SwitchRenderMode(RenderMode.PointCloud, elevationTex);
SetRecordMode
public void SetRecordMode(bool isRecord, Vector2 renderSize, float verticalFov)
録画モードを設定します。録画モードでは固定解像度と FOV でレンダリングされ、HD ビデオ録画に適しています。
| パラメータ | 型 | 説明 |
|---|---|---|
isRecord | bool | 録画モードを使用するかどうか |
renderSize | Vector2 | 録画解像度 |
verticalFov | float | 垂直 FOV(度) |
注:
- PC / Mac プラットフォームのみ対応。
- 録画モードではカメラ焦点距離が固定され、Camera コンポーネントに追従しません。
- 録画後、
SetRecordMode(false, ...)を呼び出して復元します。
例:
lccManager.SetRecordMode(true, new Vector2(3840, 2160), 60f);
SetVRPerformance
public void SetVRPerformance(bool _enabled)
VR 高性能ソートモードを設定します。true は GPU 基数ソート(GpuSorter)を使用し、false は CPU / BitonicSorter にフォールバックします。
| パラメータ | 型 | 説明 |
|---|---|---|
_enabled | bool | GPU 高性能ソートを有効にするかどうか |
注:
- VR ヘッドセット(Pico / Quest / PicoSwan / OpenXR)のソートパスのみに影響し、デフォルトで有効です。
- コンピュートデバイスがない場合(Mali など)、ソート上流は自動的に CPU にフォールバックし、このトグルの影響を受けません。
例:
lccManager.SetVRPerformance(true);
ライティングと影
以下のメソッドは 3DGS サーフェスへの影受光とカスタムポイントライトを制御します。影関連メソッドは LCC シーンの読み込み完了後 に呼び出す必要があります。
SetShadowReceive
public void SetShadowReceive(bool enable)
点群の影受光を切り替えます。有効にすると、シーン内の Mesh オブジェクトの影を 3DGS 点群サーフェスに落とせます。
| パラメータ | 型 | 説明 |
|---|---|---|
enable | bool | 影を受光するかどうか |
注:
- デフォルトでは無効です。
- シーンに影を落とす Mesh オブジェクトと Directional Light が必要です。
例:
lccManager.SetShadowReceive(true);
SetShadowColor
public void SetShadowColor(Color color)
影領域の色を設定します。
| パラメータ | 型 | 説明 |
|---|---|---|
color | Color | 影の色(RGBA) |
注:
- デフォルト
(0.3, 0.3, 0.3, 1)。 - 先に
SetShadowReceive(true)を有効化する必要があります。
例:
lccManager.SetShadowColor(new Color(0.3f, 0.3f, 0.3f, 1f));
SetShadowStrength
public void SetShadowStrength(float strength)
影の強さを設定します。0 は影なし、1 は最も強い影です。
| パラメータ | 型 | 説明 |
|---|---|---|
strength | float | 影の強さ。範囲 [0, 1]、超えた場合は自動でクランプ |
注:
- デフォルト
1.0。 - 先に
SetShadowReceive(true)を有効化する必要があります。
例:
lccManager.SetShadowStrength(0.8f);
SetLights
// 戻り値: int。0=成功、-1=最大数制限を超えた
public int SetLights(List<PointLightData> lights)
カスタムポイントライトリストを設定します。null または空リストを渡すとカスタムライティングがオフになります。
| パラメータ | 型 | 説明 |
|---|---|---|
lights | List<PointLightData> | ポイントライトリスト。PointLightData を参照 |
注:
PointLightData.lightType:0はポイントライト(direction / spotAngle は無視)、1はスポットライト(direction / spotAngle が必要)。nullまたは空リストを渡すとカスタムライティングがオフになります。
例:
using Unity.Mathematics; // float3
var lights = new List<PointLightData>();
lights.Add(new PointLightData {
position = new float3(0, 5, 0),
lightType = 0, // 0=ポイントライト、1=スポットライト
color = new float3(1, 1, 1),
intensity = 2f,
range = 10f
});
lccManager.SetLights(lights);
カメラ管理
SetMainCamera
public void SetMainCamera(Camera _cam)
メインレンダリングカメラを設定します。LCC はこのカメラをフラスタムカリング、LOD 選択、ソートなどの操作に使用します。
| パラメータ | 型 | 説明 |
|---|---|---|
_cam | Camera | メインレンダリングカメラ。null を渡すとクリア |
注:
Renderer.Load()の前に設定する必要があります。- PC / Mac プラットフォームのみ対応。
例:
lccManager.SetMainCamera(Camera.main);
AddCamera
public void AddCamera(Camera _cam)
サブカメラを追加します。サブカメラはレンダリングに参加しますが、LOD 選択には影響しません。
| パラメータ | 型 | 説明 |
|---|---|---|
_cam | Camera | サブカメラ |
注:
- PC / Mac プラットフォームのみ対応。
- メインカメラをサブカメラとして追加することはできません。
例:
lccManager.AddCamera(secondCamera);
RemoveCamera
public void RemoveCamera(Camera _cam)
追加したサブカメラを削除します。
| パラメータ | 型 | 説明 |
|---|---|---|
_cam | Camera | 削除するサブカメラ |
注:
- PC / Mac プラットフォームのみ対応。
例:
lccManager.RemoveCamera(secondCamera);
クリッピング / ハイライト / カラー調整
クリッピング、ハイライト、カラー調整は 3 種類の編集操作で、いずれも 2D テクスチャ、3D ジオメトリ、またはその組み合わせで影響領域を定義できます。Data2D、Data3D、DataMix、ToneMix を参照してください。
SetClip(平面クリッピング)
// 戻り値: int。0=成功
public int SetClip(Vector3 planePoint, Vector3 planeNormal, bool inside = true)
無限平面で点群をクリッピングし、法線側またはその反対側の点を保持します。
| パラメータ | 型 | 説明 |
|---|---|---|
planePoint | Vector3 | 平面上の 1 点 |
planeNormal | Vector3 | 平面の法線 |
inside | bool | true は法線側を保持 |
注:
- 他のクリッピングモードと相互排他的です。
例:
lccManager.SetClip(Vector3.zero, Vector3.up, true); // 地面より上を保持
SetClip(2D テクスチャクリッピング)
// 戻り値: int。0=成功、1=空リスト、2=最大数を超えた
public int SetClip(List<Data2D> _2Ds)
2D 投影テクスチャマスクを使用して点群をクリッピングします。
| パラメータ | 型 | 説明 |
|---|---|---|
_2Ds | List<Data2D> | 2D テクスチャ選択リスト |
例:
var clips = new List<Data2D>();
clips.Add(new Data2D {
texture = maskTex,
mv = modelViewMatrix,
mvp = mvpMatrix,
mode = SelectMode.normal
});
lccManager.SetClip(clips);
SetClip(3D ジオメトリクリッピング)
// 戻り値: int。0=成功、1=空リスト、2=最大数を超えた、3=有効なジオメトリが 0
public int SetClip(List<Data3D> _3Ds)
3D ジオメトリで点群をクリッピングし、複数のジオメトリを組み合わせるブール演算に対応します。
| パラメータ | 型 | 説明 |
|---|---|---|
_3Ds | List<Data3D> | 3D ジオメトリリスト |
注:
- 少なくとも 1 つの
operation == normalのジオメトリが必要です。
例:
var clips = new List<Data3D>();
clips.Add(new Data3D {
type = ShapeType.box,
invMat = boxInverseMatrix,
operation = OperationMode.normal,
mode = SelectMode.normal
});
lccManager.SetClip(clips);
SetClip(混合モードクリッピング)
// 戻り値: int。0=成功、1=空リスト、2=最大数を超えた
public int SetClip(List<DataMix> mix)
2D テクスチャと 3D ジオメトリの混合でクリッピング領域を定義します。各エントリは editType でタイプを指定します。
| パラメータ | 型 | 説明 |
|---|---|---|
mix | List<DataMix> | 混合選択リスト(2D + 3D) |
例:
var mix = new List<DataMix>();
mix.Add(new DataMix {
editType = EditType.Edit3D,
type = ShapeType.box,
invMat = matrix,
operation = OperationMode.normal,
mode = SelectMode.normal
});
lccManager.SetClip(mix);
QuitClipMode
public void QuitClipMode()
クリッピングモードを終了し、点群全体の表示を復元します。
例:
lccManager.QuitClipMode();
SetHighlight(2D テクスチャハイライト)
// 戻り値: int。0=成功、1=空リスト、2=最大数を超えた
public int SetHighlight(List<Data2D> _2Ds)
2D 投影テクスチャマスクを使用して点群をハイライト表示します。ハイライト領域の外側の点群は暗くなります。
| パラメータ | 型 | 説明 |
|---|---|---|
_2Ds | List<Data2D> | 2D テクスチャ選択リスト |
注:
- 3D ハイライトおよび混合ハイライトと相互排他的です。
例:
var highlights = new List<Data2D>();
highlights.Add(new Data2D {
texture = maskTex,
mv = modelViewMatrix,
mvp = mvpMatrix,
mode = SelectMode.normal
});
lccManager.SetHighlight(highlights);
SetHighlight(3D ジオメトリハイライト)
// 戻り値: int。0=成功、1=空リスト、2=最大数を超えた、3=有効なジオメトリが 0
public int SetHighlight(List<Data3D> _3Ds)
3D ジオメトリでハイライト領域を定義し、組み合わせのブール演算に対応します。
| パラメータ | 型 | 説明 |
|---|---|---|
_3Ds | List<Data3D> | 3D ジオメトリリスト |
注:
- 少なくとも 1 つの
operation == normalのジオメトリが必要です。
例:
var highlights = new List<Data3D>();
highlights.Add(new Data3D {
type = ShapeType.box,
invMat = boxInverseMatrix,
operation = OperationMode.normal,
mode = SelectMode.normal
});
lccManager.SetHighlight(highlights);
SetHighlight(混合モードハイライト)
// 戻り値: int。0=成功、1=空リスト、2=最大数を超えた
public int SetHighlight(List<DataMix> mix)
2D テクスチャと 3D ジオメトリの混合でハイライト領域を定義します。
| パラメータ | 型 | 説明 |
|---|---|---|
mix | List<DataMix> | 混合選択リスト |
例:
var mix = new List<DataMix>();
mix.Add(new DataMix {
editType = EditType.Edit3D,
type = ShapeType.box,
invMat = matrix,
operation = OperationMode.normal,
mode = SelectMode.normal
});
lccManager.SetHighlight(mix);
QuitHighlightMode
public void QuitHighlightMode()
ハイライトモードを終了し、点群の通常表示を復元します。
例:
lccManager.QuitHighlightMode();
SetTone
// 戻り値: int。0=成功、1=空リスト、2=最大数を超えた
public int SetTone(List<ToneMix> mix)
選択領域にカラー調整を適用し、明るさ、彩度、コントラスト、LUT フィルタに対応します。カラー調整領域は 2D テクスチャまたは 3D ジオメトリで定義できます。
| パラメータ | 型 | 説明 |
|---|---|---|
mix | List<ToneMix> | カラー調整ミックスリスト |
注:
brightness/saturation/contrastのデフォルトは1.0。lutidは LUT フィルタインデックスで、0は未使用。
例:
var tones = new List<ToneMix>();
tones.Add(new ToneMix {
editType = EditType.Edit3D,
type = ShapeType.box,
invMat = boxMatrix,
operation = OperationMode.normal,
mode = SelectMode.normal,
brightness = 1.2f,
saturation = 1.0f,
contrast = 1.1f,
lutid = 0
});
lccManager.SetTone(tones);
QuitToneMode
public void QuitToneMode()
カラー調整モードを終了し、点群の元のカラーを復元します。
例:
lccManager.QuitToneMode();
デカール投影
デカール投影はプロジェクター方向に沿ってテクスチャを 3DGS サーフェスへ投影します。デカールはワールド固定のグローバル状態で、すべてのカメラで一貫しています。典型的な手順は、デカールの有効化 → テクスチャの設定 → プロジェクター姿勢の設定です。以下のメソッドは PC / Mac プラットフォームのみ対応です。
SetDecalEnabled
public void SetDecalEnabled(bool enable)
デカール投影を切り替えます。内容とプロジェクター姿勢を設定するには SetDecalTexture() と SetDecalProjection() を個別に呼び出す必要があります。
| パラメータ | 型 | 説明 |
|---|---|---|
enable | bool | デカール投影を有効にするかどうか |
注:
- 無効化してもキャッシュされたテクスチャ / パラメータはクリアされません。
例:
lccManager.SetDecalEnabled(true);
lccManager.SetDecalTexture(decalTex);
lccManager.SetDecalProjection(projectorPos, projectorRot, 60f, 1.778f, 0.1f, 20f);
SetDecalTexture
public void SetDecalTexture(Texture2D tex)
デカールテクスチャを設定します。RGB はカラー、A はデカール自身のマスクで、グローバル不透明度とエッジフェザリングに乗算されます。
| パラメータ | 型 | 説明 |
|---|---|---|
tex | Texture2D | デカールテクスチャ。null を渡すと参照をクリア |
例:
lccManager.SetDecalTexture(logoTex);
SetDecalProjection
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 |
例:
lccManager.SetDecalProjection(new Vector3(0, 10, 0), Quaternion.Euler(90, 0, 0), 60f, 1.778f, 0.1f, 20f);
SetDecalOpacity
public void SetDecalOpacity(float opacity)
デカール全体の不透明度を設定します。
| パラメータ | 型 | 説明 |
|---|---|---|
opacity | float | デカール全体の不透明度。範囲 [0, 1]、超えた場合は自動でクランプ |
例:
lccManager.SetDecalOpacity(0.8f);
SetDecalEdgeFade
public void SetDecalEdgeFade(float edgeFade)
デカールのエッジフェザリング幅を設定します。0 はハードエッジで、値が大きいほどエッジの遷移が柔らかくなります。
| パラメータ | 型 | 説明 |
|---|---|---|
edgeFade | float | エッジフェザリング幅(UV 空間比)。範囲 [0, 0.5)、超えた場合は自動でクランプ |
例:
lccManager.SetDecalEdgeFade(0.1f);
SetDecalOcclusion
public void SetDecalOcclusion(bool enable)
デカールのオクルージョンカリング(プロジェクター深度マップに基づく)を切り替えます。有効にすると、遮蔽されたサーフェスはデカールで覆われません。
| パラメータ | 型 | 説明 |
|---|---|---|
enable | bool | デカールのオクルージョンカリングを有効にするかどうか |
注:
- PC / Mac プラットフォームのみ、かつ URP パイプラインのみ。
- 有効化する前に
SetDecalProjection()でプロジェクターを設定しておく必要があります。 SetDecalOcclusionSettings()で設定した品質パラメータに依存します。
例:
lccManager.SetDecalOcclusion(true);
SetDecalOcclusionSettings
public void SetDecalOcclusionSettings(DecalOcclusionSettings settings)
デカールのオクルージョンカリングの品質パラメータを一度に設定します。DecalOcclusionSettings を参照してください。
| パラメータ | 型 | 説明 |
|---|---|---|
settings | DecalOcclusionSettings | オクルージョンカリング品質パラメータ |
注:
- いつでも調整できます。パラメータは即時反映されます。
例:
lccManager.SetDecalOcclusionSettings(DecalOcclusionSettings.Default);
lccManager.SetDecalOcclusionSettings(new DecalOcclusionSettings {
opacityCutoff = 0.1f,
depthBias = 0.05f,
footprintMaxPx = 2,
resolution = 1024
});
スナップ
スナップ機能はレイキャスティング時に近くのエッジ / コーナーを自動検索して整列させ、計測や注釈などの精密なインタラクションによく使用されます。以下のメソッドは PC / Mac プラットフォームのみ対応です。
SetSnapEnabled
public void SetSnapEnabled(bool enable)
スナップ機能を切り替えます。有効にすると、RaycastWithSnap() が近くのエッジ / コーナーを自動検索してスナップします。
| パラメータ | 型 | 説明 |
|---|---|---|
enable | bool | スナップを有効にするかどうか |
注:
- デフォルトでは無効です。
- モバイル / VR では効果がなく、警告が出力されます。
例:
lccManager.SetSnapEnabled(true);
SetSnapRadius
public void SetSnapRadius(float pixels)
スナップ検索半径を設定します。このピクセル範囲内で最も近いエッジ / コーナーを検索します。
| パラメータ | 型 | 説明 |
|---|---|---|
pixels | float | スナップ検索半径(ピクセル) |
注:
- デフォルト 20 ピクセル。
- 値が大きいほど検索範囲は広くなりますが、意図しないターゲットにスナップする可能性があります。
例:
lccManager.SetSnapRadius(30f);
SetEdgeThreshold
public void SetEdgeThreshold(float threshold)
エッジ検出閾値を設定します。値が小さいほど、より多くのエッジが検出されます。
| パラメータ | 型 | 説明 |
|---|---|---|
threshold | float | エッジ検出閾値。推奨範囲 [0.1, 0.8] |
注:
- デフォルト
0.3。 - 値が小さすぎると大量のノイズエッジが発生します。
例:
lccManager.SetEdgeThreshold(0.2f);
SetSnapPreviewEnabled
public void SetSnapPreviewEnabled(bool enable)
スナッププレビュー機能を切り替えます。有効にすると、マウスの移動に応じて最も近いスナップターゲットのインジケータがリアルタイムに表示されます。
| パラメータ | 型 | 説明 |
|---|---|---|
enable | bool | スナッププレビューを有効にするかどうか |
注:
- 先に
SetSnapEnabled(true)を呼び出す必要があります。 - プレビューは継続的に GPU リソースを消費します(毎フレーム検出)。
例:
lccManager.SetSnapPreviewEnabled(true);
UpdateSnapPreview
public void UpdateSnapPreview(Vector2 mousePos, Camera cam)
スナッププレビュー状態を更新します。マウスの移動に応じて呼び出し、プレビューインジケータの位置を更新します。
| パラメータ | 型 | 説明 |
|---|---|---|
mousePos | Vector2 | 現在のマウスのスクリーン座標 |
cam | Camera | カメラ |
注:
- 先に
SetSnapPreviewEnabled(true)を呼び出す必要があります。 Updateで継続的に呼び出すことを推奨します。
例:
void Update()
{
lccManager.UpdateSnapPreview(Input.mousePosition, Camera.main);
}
GetSnapPreviewState
// 戻り値: SnapPreviewState
public SnapPreviewState GetSnapPreviewState()
現在のスナッププレビュー状態を取得します。スナップターゲットがあるかどうか、ターゲットタイプ、ターゲットのスクリーン座標、マウスまでのピクセル距離が含まれます。SnapPreviewState を参照してください。
注:
- 先に
SetSnapPreviewEnabled(true)とUpdateSnapPreview()を呼び出す必要があります。 - ターゲットがない場合は
default(SnapPreviewState)を返します。 screenPosはスクリーン座標であり、ワールド座標ではありません。ワールド座標にはRaycastWithSnap()でHitResult.hitPosを取得します。
例:
var state = lccManager.GetSnapPreviewState();
if (state.hasTarget)
{
// state.snapType: Corner / Edge
// state.screenPos: スナップターゲットのスクリーン座標
// state.distanceToMouse: ピクセル距離
}
レイキャスティングとコリジョンクエリ
レイキャスティングは 3DGS サーフェス上の点を選択するために使用し、コリジョンクエリはキャラクター / オブジェクトと点群の物理的なインタラクションに使用します。ヒット結果は HitResult で返されます。
注:
HitResultのヒット点ワールド座標フィールドはhitPos(positionではありません)という名前です。
Raycast(スクリーン座標)
// 戻り値: bool。true=ヒット
public bool Raycast(Vector3 mousePos, out HitResult _finalResult)
スクリーン座標からレイを発射して点群へのヒットを検出します。レイは SetMainCamera() で設定したメインカメラを使用して生成されます。
| パラメータ | 型 | 説明 |
|---|---|---|
mousePos | Vector3 | スクリーン座標 |
_finalResult | out HitResult | ヒット結果 |
注:
- 先に
SetMainCamera()でメインカメラを設定する必要があります。 - カメラに最も近いヒット点を返します。
- 精度は
SetRaycastDelta()に影響され、最大距離はSetMaxRaycastDistance()で制御されます。
例:
if (lccManager.Raycast(Input.mousePosition, out HitResult hit))
{
Debug.Log(hit.hitPos);
}
Raycast(Ray)
// 戻り値: bool。true=ヒット
public bool Raycast(Ray _ray, out HitResult _finalResult)
カスタム Ray でレイキャスティングを行い、すべてのアクティブな Renderer を走査して最も近いヒットを返します。
| パラメータ | 型 | 説明 |
|---|---|---|
_ray | Ray | レイ |
_finalResult | out HitResult | ヒット結果 |
例:
Ray ray = new Ray(origin, direction);
if (lccManager.Raycast(ray, out HitResult hit))
{
Debug.Log(hit.hitPos);
}
RaycastMesh(スクリーン座標)
// 戻り値: bool。true=ヒット
public bool RaycastMesh(Vector3 mousePos, out HitResult _finalResult, float _distance = 70.0f)
スクリーン座標からレイを発射して点群コリジョンメッシュへのヒットを検出します。Collider データで検出するため、Raycast() より高速ですが精度は低くなります。
| パラメータ | 型 | 説明 |
|---|---|---|
mousePos | Vector3 | スクリーン座標 |
_finalResult | out HitResult | ヒット結果 |
_distance | float | 最大検出距離。デフォルト 70.0 |
注:
- データに Collider ノードが含まれ、先に
Renderer.SetColliderEnable(true)を呼び出す必要があります。
例:
if (lccManager.RaycastMesh(Input.mousePosition, out HitResult hit))
{
Debug.Log(hit.hitPos);
}
RaycastMesh(Ray + Bounds)
// 戻り値: bool。true=ヒット
public bool RaycastMesh(Ray ray, out HitResult result, out Bounds hitBounds, float maxDist = 70.0f)
カスタム Ray でコリジョンメッシュ検出を行い、ヒットしたノードのバウンディングボックスも返します。
| パラメータ | 型 | 説明 |
|---|---|---|
ray | Ray | レイ |
result | out HitResult | ヒット結果 |
hitBounds | out Bounds | ヒットしたノードのバウンディングボックス |
maxDist | float | 最大検出距離。デフォルト 70.0 |
注:
- データに Collider ノードが含まれている必要があります。
例:
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (lccManager.RaycastMesh(ray, out HitResult hit, out Bounds bounds))
{
Debug.Log(bounds.center);
}
RaycastWithSnap
// 戻り値: bool。true=ヒット
public bool RaycastWithSnap(Vector2 screenPos, Camera cam, out HitResult result)
スナップ付きレイキャスティング。まず通常のレイキャストを実行し、その後ヒット点付近のエッジ / コーナーを検索してスナップします。
| パラメータ | 型 | 説明 |
|---|---|---|
screenPos | Vector2 | スクリーン座標 |
cam | Camera | カメラ |
result | out HitResult | ヒット結果(スナップ情報を含む) |
注:
- 先に
SetSnapEnabled(true)を呼び出す必要があります。 - PC / Mac プラットフォームのみ対応。モバイル / VR では利用できません。
- スナップ優先順位:Corner > Edge > None。
HitResult.snapTypeはスナップタイプ、HitResult.hitPosはスナップ後のワールド座標、HitResult.originalHitPosはスナップ前の元のヒット点です。
例:
if (lccManager.RaycastWithSnap(mousePos, cam, out HitResult hit))
{
// hit.snapType: Corner / Edge / None
// hit.hitPos: スナップ後のワールド座標
// hit.originalHitPos: スナップ前の元のヒット点
}
SetRaycastDelta
public void SetRaycastDelta(float delta)
レイキャスティングの精度パラメータを設定します。値が小さいほど精度は高くなりますが、パフォーマンス消費が高くなります。
| パラメータ | 型 | 説明 |
|---|---|---|
delta | float | レイキャスティング精度。範囲 [0.1, 10.0]、超えた場合は自動でクランプ |
注:
- デフォルト
0.1。 - すべての
Raycast()メソッドの検出精度に影響します。
例:
lccManager.SetRaycastDelta(0.5f);
SetMaxRaycastDistance
public void SetMaxRaycastDistance(float _distance)
Raycast() メソッドの最大検出距離を設定します。
| パラメータ | 型 | 説明 |
|---|---|---|
_distance | float | 最大レイキャスト距離。範囲 [10, 10000]、超えた場合は自動でクランプ |
注:
Raycast(Vector3)/Raycast(Ray)オーバーロードに影響します。RaycastMesh()(独自の距離パラメータを持つ)には影響しません。
例:
lccManager.SetMaxRaycastDistance(500f);
IntersectsSphere
// 戻り値: bool。true=交差
public bool IntersectsSphere(Sphere sphere)
// 戻り値: bool。true=交差
public bool IntersectsSphere(Sphere sphere, out Vector3 delta)
球が点群コライダーと交差するか検出します。2 つ目のオーバーロードは貫通ベクトルも返し、物理的な押し出しに使用できます。
| パラメータ | 型 | 説明 |
|---|---|---|
sphere | Sphere | 球 |
delta | out Vector3 | 貫通ベクトル(押し出し方向と距離) |
注:
- データに Collider ノードが含まれ、先に
Renderer.SetColliderEnable(true)を呼び出す必要があります。 - すべてのアクティブな Renderer を走査します。
例:
var sphere = new Sphere(transform.position, 0.5f);
if (lccManager.IntersectsSphere(sphere, out Vector3 delta))
{
transform.position += delta;
}
IntersectsCapsule
// 戻り値: bool。true=交差
public bool IntersectsCapsule(Capsule capsule)
// 戻り値: bool。true=交差
public bool IntersectsCapsule(Capsule capsule, out Vector3 delta)
カプセルが点群コライダーと交差するか検出し、キャラクターコントローラーのコリジョン検出によく使用されます。2 つ目のオーバーロードは貫通ベクトルを返します。
| パラメータ | 型 | 説明 |
|---|---|---|
capsule | Capsule | カプセル |
delta | out Vector3 | 貫通ベクトル |
注:
- データに Collider ノードが含まれ、先に
Renderer.SetColliderEnable(true)を呼び出す必要があります。
例:
var capsule = new Capsule(footPos, headPos, 0.3f);
if (lccManager.IntersectsCapsule(capsule, out Vector3 delta))
{
characterController.Move(delta);
}
ビジュアルエフェクト
TriggerVFX
public void TriggerVFX(Vector3 vfxOriginW, int vfxid = 0)
指定したワールド座標でビジュアルエフェクトを発動し、その座標から外向きに広がります。
| パラメータ | 型 | 説明 |
|---|---|---|
vfxOriginW | Vector3 | エフェクトのワールド座標原点 |
vfxid | int | エフェクト ID。デフォルト 0 |
注:
- LCC シーンの読み込み完了後に呼び出す必要があります。
例:
lccManager.TriggerVFX(hitPoint, 0);
インスタンスクエリ
GetAllRenderers
// 戻り値: List<Renderer>。登録済み Renderer インスタンスすべてのコピー
public List<Renderer> GetAllRenderers()
現在登録されているすべての Renderer インスタンスのリストを取得します(コピーを返します)。
例:
var renderers = lccManager.GetAllRenderers();
foreach (var r in renderers) { /* ... */ }