Renderer:レンダリングインスタンス
LCC のレンダリングインスタンスで、単一の 3DGS シーンのデータ読み込みとレンダリング制御を担当します。LCCManager.GetRender() で作成し、直接インスタンス化することはできません。
| 名前空間 | LCCCore |
プロパティ
| プロパティ | 型 | アクセス | 説明 |
|---|---|---|---|
Transform | Transform | 読み取り専用 | レンダリングインスタンスがアタッチされている Transform コンポーネント |
IsEnable | bool | 読み取り専用 | レンダリングインスタンスがアクティブかどうか。デフォルト true |
IsRenderAll | bool | 読み取り専用 | 全 LOD0 データをレンダリング中かどうか(ストリーミング / LOD 走査モードとの対比)。デフォルト false |
メソッド
メソッドは目的別にグループ化されています。
データ読み込みとライフサイクル
Load
public void Load(string _filePath, Action<float> _onProgress, Action _onComplete, Action<string> _onError = null)
3DGS データファイルを読み込みます。.lcc2(ローカルファイルまたは HTTP リモート)とネイティブ形式 .ply / .sog / .spz / .splat / .ksplat(ローカルファイルのみ)に対応します。
| パラメータ | 型 | 説明 |
|---|---|---|
_filePath | string | データファイルパス(ローカルパスまたは HTTP URL) |
_onProgress | Action<float> | 読み込み進捗コールバック。null 可 |
_onComplete | Action | 読み込み完了コールバック。null 可 |
_onError | Action<string> | 読み込み失敗コールバック(省略可)。エラー説明をパラメータとして受け取ります |
注:
_onCompleteコールバックはデータが実際に GPU に載った後に発火します。- 影受光やエフェクト発動などの操作は
_onCompleteコールバック内で呼び出す必要があります。 - ネイティブ形式は常に SingleRender 全量読み込みパス(LOD チャンクなし)を使用します。進捗は
_onProgress、失敗は_onErrorで報告されます。 MultiRenderモードでは HTTP データソースとネイティブ形式は許可されません。- HTTP は
.lcc2のみ対応します。ネイティブ形式はローカルパスのみ、かつ SingleRender モードのみです。 SetPlatformType()/SwitchRenderPass()/SetMainCamera()などの前提条件を先に完了する必要があります。Load()を再度呼び出す前にUnload()またはDispose()を呼び出す必要があります。読み込み進行中にLoad()を呼び出すと拒否され、_onErrorがトリガーされます。
例:
renderer.Load("D:/data/scene.lcc2",
p => Debug.Log($"読み込み中 {p:P0}"),
() => {
Debug.Log("読み込み完了");
lccManager.SetShadowReceive(true);
});
Unload
public void Unload()
現在読み込み済みのデータを解放し、「作成済みだが未読み込み」の状態に戻します。インスタンスのマネージャー登録は保持されます。同じ Renderer インスタンスを Load → Unload → Load と繰り返し循環させて再利用できます。
注:
Dispose()との違い:マネージャー登録が削除されず、インスタンスを再利用できます。Unload()後、IsEnableはfalseです。Load()を再度呼び出すとすべてのデータ状態がリセットされます。- データ読み込み完了時にのみ実行されます。未読み込みまたは既に
Dispose()済みの場合は即座に戻ります。
例:
renderer.Unload();
renderer.Load(newFilePath, null, () => Debug.Log("再読み込みしました"));
Dispose
public void Dispose()
レンダリングインスタンスを破棄し、すべての GPU リソースとメモリを解放します。破棄後のインスタンスは使用できず、すべての公開メソッドが自動的に無効になります。
注:
- 呼び出し後に LCCManager へ参照の削除を自動通知します。
例:
renderer.Dispose();
renderer = null;
ランタイム制御とクエリ
SetEnable
public void SetEnable(bool _enable)
レンダリングインスタンスのアクティブ状態を設定します。無効にするとレンダリングや LOD 選択に参加しません。
| パラメータ | 型 | 説明 |
|---|---|---|
_enable | bool | アクティブにするかどうか |
注:
- リソースを解放せず、いつでも再アクティブ化できます。
例:
renderer.SetEnable(false); // 非表示
renderer.SetEnable(true); // 表示
SetAlpha
public void SetAlpha(float alpha)
現在の Renderer の独立した不透明度を設定します。プロセスレベルのグローバルアルファである LCCManager.SetAlpha() と異なり、この API は現在の Renderer にのみ影響します。最終アルファ = Splat カバレッジ × LCCManager のグローバルアルファ × この Renderer のアルファです。
| パラメータ | 型 | 説明 |
|---|---|---|
alpha | float | 現在の Renderer の独立不透明度。範囲 [0, 1]、超えた場合は自動でクランプ |
注:
- MultiRender / RenderCore パス(PC / Mac)でのみ有効です。そのパスでは各 Splat が renderID を持ち、シェーダーが renderID で Renderer ごとのアルファ配列をインデックスします。
- FullRender / Mobile パスには renderID がないため、この API はそこで何もしません(値はキャッシュされ、後で RenderCore パスに切り替えた際に自動適用されます)。
例:
renderer.SetAlpha(0.5f);
SetRenderAll
public void SetRenderAll(bool _renderAll)
全量レンダリングモード(LOD0 データの全量レンダリング)を使用するかどうかを設定します。次の Load() 呼び出しで有効になり、現在読み込み済みのデータセットには影響しません。
| パラメータ | 型 | 説明 |
|---|---|---|
_renderAll | bool | 全量レンダリングするかどうか |
注:
- PC / Mac プラットフォームのみ対応。モバイル / VR では効果がありません。
- 現在の状態は
IsRenderAllプロパティで照会できます。
例:
renderer.SetRenderAll(true);
renderer.Load(filePath, null, () => Debug.Log("全量読み込み完了"));
SetColliderEnable
// 戻り値: bool。true=正常に設定、false=データにコライダーがないかインスタンスが非アクティブ
public bool SetColliderEnable(bool _enable)
コライダー機能を切り替えます。有効化すると、IntersectsSphere() / IntersectsCapsule() と RaycastMesh() が利用可能になります。
| パラメータ | 型 | 説明 |
|---|---|---|
_enable | bool | コライダーを有効にするかどうか |
注:
- データに Collider ノードが含まれている必要があります。含まれていない場合は
falseを返します。 - Renderer がアクティブである必要があります。
例:
bool ok = renderer.SetColliderEnable(true);
if (!ok) Debug.LogWarning("データにコライダーが含まれていません");
SetEnvironment
public void SetEnvironment(bool _env)
環境データレンダリングを切り替えます。環境データは遠景を埋めるために使われる低精度の背景点群です。
| パラメータ | 型 | 説明 |
|---|---|---|
_env | bool | 環境データをレンダリングするかどうか |
注:
- データに環境ノードが含まれている必要があります。
- 環境データはメインデータの LOD システムから独立しています。
例:
renderer.SetEnvironment(true);
GetBounds
public void GetBounds(out Vector3 max, out Vector3 min)
レンダリング済みデータの軸平行バウンディングボックス(ワールド座標)を取得します。
| パラメータ | 型 | 説明 |
|---|---|---|
max | out Vector3 | バウンディングボックスの最大点(ワールド座標) |
min | out Vector3 | バウンディングボックスの最小点(ワールド座標) |
注:
- データが完全に読み込まれていない場合は
Vector3.zeroを返します。 - カメラ配置や視野角計算に使用できます。
例:
renderer.GetBounds(out Vector3 max, out Vector3 min);
Vector3 center = (max + min) / 2f;
Vector3 size = max - min;
GetSourceType
// 戻り値: SourceType
public SourceType GetSourceType()
読み込み済みデータのソースタイプを取得します。SourceType を参照してください。
注:
- データ未読み込み時は
SourceType.Noneを返します。
GetDataType
// 戻り値: DataType
public DataType GetDataType()
読み込み済みデータのフォーマットタイプを取得します。DataType を参照してください。
注:
- データ未読み込み時は
DataType.Noneを返します。
GetMeta(ファイルパスから)
// 戻り値: bool。true=正常に読み取り
public bool GetMeta(string _filePath, out SplatMeta _metaData)
データを完全に読み込まずに、指定したファイルパスから 3DGS データのメタデータを読み取ります。
| パラメータ | 型 | 説明 |
|---|---|---|
_filePath | string | データファイルパス |
_metaData | out SplatMeta | 出力メタデータ |
注:
- ローカルパスと HTTP URL に対応します。
- ファイルヘッダーのメタデータのみを読み取り、点群データは読み込みません。
- パスが空またはファイルが存在しない場合は
falseを返します。
例:
if (renderer.GetMeta(filePath, out SplatMeta meta))
{
Debug.Log(meta.source);
Debug.Log(meta.dataType);
}
GetMeta(読み込み済みデータから)
// 戻り値: bool。true=正常に読み取り
public bool GetMeta(out SplatMeta _metaData)
現在読み込み済みデータのメタデータを取得します。データの読み込みが完了していない場合は、ファイルパスからの読み取りを試みます。
| パラメータ | 型 | 説明 |
|---|---|---|
_metaData | out SplatMeta | 出力メタデータ |
例:
if (renderer.GetMeta(out SplatMeta meta))
{
Debug.Log(meta.source);
}
GetMeshBlockInfos
// 戻り値: List<LCCMeshBlockInfo>。コリジョン Mesh ブロックのメタデータ。Mesh がないか取得不可の場合は null
public List<LCCMeshBlockInfo> GetMeshBlockInfos()
全コリジョン Mesh ブロックのメタデータ(ID、ワールド / ローカルバウンディングボックス、頂点数、面数)を返します。ゼロ I/O・ゼロ解析で、メモリ上に既にあるメタデータのみを読み取ります。LCCMeshBlockInfo を参照してください。
注:
- PC / Mac プラットフォーム + ローカルデータソースのみ。メインスレッドで呼び出す必要があります。
- 典型的な使い方:まず各ブロックのワールドバウンディングボックスを取得し、必要な ID を選び、
GetMeshes(ids)でそれらのブロックのみを読み取ります。 - ネイティブ形式(PLY / SOG / SPZ / splat / ksplat)には Mesh がなく、
nullを返します(正常、ログなし)。
例:
var infos = renderer.GetMeshBlockInfos();
foreach (var info in infos)
{
Debug.Log($"{info.id}: verts={info.vertexCount}, faces={info.faceCount}");
}
GetMeshes
// 戻り値: List<LCCMeshBlock>。全コリジョン Mesh ジオメトリデータ。取得不可の場合は null
public List<LCCMeshBlock> GetMeshes()
全コリジョン Mesh ブロックのジオメトリデータ(頂点 + 三角形インデックス、ローカル座標)を同期的に返します。これは重い操作(同期ディスク読み取り + 解析 + 割り当て)なので、一度呼び出して自分でキャッシュしてください。毎フレーム呼び出さないでください。LCCMeshBlock を参照してください。
注:
- PC / Mac プラットフォーム + ローカルデータソースのみ。メインスレッドで呼び出す必要があります。
- 大規模シーンでは、一度に大量のマネージメモリを割り当てるのを避けるため、
GetMeshBlockInfos()で ID を選び +GetMeshes(ids)を使用します。 - 1 ブロックの頂点数は 65535 を超える場合があるため、Mesh 構築前に
mesh.indexFormat = IndexFormat.UInt32を設定する必要があります。
例:
var meshes = renderer.GetMeshes();
foreach (var block in meshes)
{
// block.vertices / block.triangles はオブジェクトのローカル座標系
}
GetMeshes(ID 指定)
// 戻り値: List<LCCMeshBlock>。指定 ID のコリジョン Mesh ジオメトリデータ。ヒットがない場合は null
public List<LCCMeshBlock> GetMeshes(IEnumerable<string> _ids)
指定した ID のコリジョン Mesh ブロックのジオメトリデータ(ローカル座標)を同期的に返します。ID は GetMeshBlockInfos() が提供します。
| パラメータ | 型 | 説明 |
|---|---|---|
_ids | IEnumerable<string> | 対象ブロック ID の集合(GetMeshBlockInfos() が提供) |
注:
- 不明な ID は警告付きでスキップされます。重複 ID は重複排除されます(ディスクを繰り返し読み取りません)。戻り順は ID の走査順(重複排除後)です。
- 入力が
null、空、またはヒットなしの場合は警告付きでnullを返します。 - その他の制約は
GetMeshes()と同じです。
例:
var ids = new List<string> { "block-0", "block-3" };
var meshes = renderer.GetMeshes(ids);