Renderer: renderinginstantie
Een LCC-renderinginstantie, verantwoordelijk voor het laden van gegevens en het beheer van de rendering van één enkele 3DGS-scène. Deze wordt aangemaakt via LCCManager.GetRender() en kan niet rechtstreeks worden geïnstantieerd.
| Naamruimte | LCCCore |
Eigenschappen
| Eigenschap | Type | Toegang | Beschrijving |
|---|---|---|---|
Transform | Transform | Alleen-lezen | De Transform-component waaraan de renderinginstantie is gekoppeld |
IsEnable | bool | Alleen-lezen | Of de renderinginstantie actief is; standaard true |
IsRenderAll | bool | Alleen-lezen | Of de volledige LOD0-gegevens worden gerenderd (versus streaming / LOD-traversaalmodus); standaard false |
Methoden
De methoden zijn gegroepeerd naar doel:
Gegevens laden en levenscyclus
Load
public void Load(string _filePath, Action<float> _onProgress, Action _onComplete, Action<string> _onError = null)
Laadt een 3DGS-gegevensbestand. Ondersteunt .lcc2 (lokaal bestand of HTTP op afstand) en de native indelingen .ply / .sog / .spz / .splat / .ksplat (alleen lokale bestanden).
| Parameter | Type | Beschrijving |
|---|---|---|
_filePath | string | Pad van het gegevensbestand (lokaal pad of HTTP-URL) |
_onProgress | Action<float> | Laadvoortgangscallback, mag null zijn |
_onComplete | Action | Laadvoltooiingscallback, mag null zijn |
_onError | Action<string> | Laadfoutcallback (optioneel), met de foutbeschrijving als parameter |
Opmerkingen:
- De
_onComplete-callback wordt geactiveerd nadat de gegevens daadwerkelijk op de GPU zijn aangekomen. - Bewerkingen zoals het ontvangen van schaduwen en het activeren van effecten moeten binnen de
_onComplete-callback worden aangeroepen. - Native indelingen gebruiken altijd het SingleRender-pad voor volledig laden (geen LOD-chunking); de voortgang wordt gerapporteerd via
_onProgressen fouten via_onError. - De
MultiRender-modus staat geen HTTP-gegevensbronnen of native indelingen toe. - HTTP ondersteunt alleen
.lcc2; native indelingen zijn alleen lokale paden en alleen de SingleRender-modus. SetPlatformType()/SwitchRenderPass()/SetMainCamera()en andere vereisten moeten eerst worden voltooid.- Je moet
Unload()ofDispose()aanroepen voordat jeLoad()opnieuw aanroept;Load()aanroepen terwijl het laden bezig is, wordt geweigerd en activeert_onError.
Voorbeeld:
renderer.Load("D:/data/scene.lcc2",
p => Debug.Log($"Laden {p:P0}"),
() => {
Debug.Log("Laden voltooid");
lccManager.SetShadowReceive(true);
});
Unload
public void Unload()
Geeft de momenteel geladen gegevens vrij en keert terug naar de status "aangemaakt maar niet geladen", waarbij de managerregistratie van de instantie behouden blijft. Dezelfde Renderer-instantie kan opnieuw worden gebruikt door herhaaldelijk Load → Unload → Load te doorlopen.
Opmerkingen:
- Verschil met
Dispose(): de managerregistratie wordt niet verwijderd en de instantie kan opnieuw worden gebruikt. - Na
Unload()isIsEnablefalse; het opnieuw aanroepen vanLoad()zet alle gegevensstatus terug. - Wordt alleen uitgevoerd wanneer de gegevens klaar zijn met laden; retourneert direct wanneer er niets is geladen of er al
Dispose()is uitgevoerd.
Voorbeeld:
renderer.Unload();
renderer.Load(newFilePath, null, () => Debug.Log("Opnieuw geladen"));
Dispose
public void Dispose()
Vernietigt de renderinginstantie en geeft alle GPU-bronnen en geheugen vrij. De instantie kan na vernietiging niet meer worden gebruikt en alle openbare methoden worden automatisch onwerkzaam.
Opmerkingen:
- Stelt de LCCManager na de aanroep automatisch op de hoogte om de verwijzing te verwijderen.
Voorbeeld:
renderer.Dispose();
renderer = null;
Runtime-beheer en query's
SetEnable
public void SetEnable(bool _enable)
Stelt de activeringsstatus van de renderinginstantie in. Wanneer deze is uitgeschakeld, neemt deze niet deel aan rendering of LOD-selectie.
| Parameter | Type | Beschrijving |
|---|---|---|
_enable | bool | Of deze moet worden geactiveerd |
Opmerkingen:
- Geeft geen bronnen vrij en kan op elk moment opnieuw worden geactiveerd.
Voorbeeld:
renderer.SetEnable(false); // Verbergen
renderer.SetEnable(true); // Weergeven
SetAlpha
public void SetAlpha(float alpha)
Stelt de onafhankelijke opaciteit van de huidige Renderer in. In tegenstelling tot de globale alpha op procesniveau van LCCManager.SetAlpha(), heeft deze API alleen invloed op de huidige Renderer. Eindalpha = splatdekking × globale alpha van LCCManager × de alpha van deze Renderer.
| Parameter | Type | Beschrijving |
|---|---|---|
alpha | float | Onafhankelijke opaciteit van de huidige Renderer, bereik [0, 1], automatisch begrensd bij overschrijding |
Opmerkingen:
- Wordt alleen van kracht op het MultiRender / RenderCore-pad (pc / Mac); op dat pad draagt elke splat een renderID en indexeert de shader de per-Renderer alpha-array op basis van renderID.
- Het FullRender / mobiele pad heeft geen renderID, dus deze API is daar een no-op (de waarde wordt in de cache opgeslagen en automatisch toegepast wanneer later naar het RenderCore-pad wordt overgeschakeld).
Voorbeeld:
renderer.SetAlpha(0.5f);
SetRenderAll
public void SetRenderAll(bool _renderAll)
Stelt in of de volledige rendermodus moet worden gebruikt (LOD0-gegevens volledig renderen). Wordt van kracht bij de volgende Load()-aanroep en heeft geen invloed op de momenteel geladen gegevensset.
| Parameter | Type | Beschrijving |
|---|---|---|
_renderAll | bool | Of volledig moet worden gerenderd |
Opmerkingen:
- Alleen ondersteund op pc-/Mac-platformen; geen effect op mobiel / VR.
- Vraag de huidige status op met de eigenschap
IsRenderAll.
Voorbeeld:
renderer.SetRenderAll(true);
renderer.Load(filePath, null, () => Debug.Log("Volledig geladen"));
SetColliderEnable
// Retourwaarde: bool, true=succesvol ingesteld, false=de gegevens hebben geen collider of de instantie is inactief
public bool SetColliderEnable(bool _enable)
Schakelt de colliderfunctie in of uit. Zodra deze is ingeschakeld, worden IntersectsSphere() / IntersectsCapsule() en RaycastMesh() beschikbaar.
| Parameter | Type | Beschrijving |
|---|---|---|
_enable | bool | Of de collider moet worden ingeschakeld |
Opmerkingen:
- De gegevens moeten een Collider-knooppunt bevatten, anders wordt
falsegeretourneerd. - De Renderer moet actief zijn.
Voorbeeld:
bool ok = renderer.SetColliderEnable(true);
if (!ok) Debug.LogWarning("De gegevens bevatten geen collider");
SetEnvironment
public void SetEnvironment(bool _env)
Schakelt de rendering van omgevingsgegevens in of uit. Omgevingsgegevens zijn een achtergrondpuntenwolk met lage precisie die wordt gebruikt om verre uitzichten op te vullen.
| Parameter | Type | Beschrijving |
|---|---|---|
_env | bool | Of omgevingsgegevens moeten worden gerenderd |
Opmerkingen:
- De gegevens moeten omgevingsknooppunten bevatten.
- Omgevingsgegevens zijn onafhankelijk van het LOD-systeem van de hoofdgegevens.
Voorbeeld:
renderer.SetEnvironment(true);
GetBounds
public void GetBounds(out Vector3 max, out Vector3 min)
Haalt het as-uitgelijnde begrenzingskader (wereldcoördinaten) van de gerenderde gegevens op.
| Parameter | Type | Beschrijving |
|---|---|---|
max | out Vector3 | Maximumpunt van het begrenzingskader (wereldcoördinaten) |
min | out Vector3 | Minimumpunt van het begrenzingskader (wereldcoördinaten) |
Opmerkingen:
- Retourneert
Vector3.zerowanneer de gegevens niet volledig zijn geladen. - Kan worden gebruikt voor camerapositionering en het berekenen van de kijkhoek.
Voorbeeld:
renderer.GetBounds(out Vector3 max, out Vector3 min);
Vector3 center = (max + min) / 2f;
Vector3 size = max - min;
GetSourceType
// Retourwaarde: SourceType
public SourceType GetSourceType()
Haalt het brontype van de geladen gegevens op; zie SourceType.
Opmerkingen:
- Retourneert
SourceType.Nonewanneer de gegevens niet zijn geladen.
GetDataType
// Retourwaarde: DataType
public DataType GetDataType()
Haalt het indelingstype van de geladen gegevens op; zie DataType.
Opmerkingen:
- Retourneert
DataType.Nonewanneer de gegevens niet zijn geladen.
GetMeta (vanuit bestandspad)
// Retourwaarde: bool, true=succesvol gelezen
public bool GetMeta(string _filePath, out SplatMeta _metaData)
Leest de metadata van de 3DGS-gegevens vanaf het opgegeven bestandspad zonder de gegevens volledig te laden.
| Parameter | Type | Beschrijving |
|---|---|---|
_filePath | string | Pad van het gegevensbestand |
_metaData | out SplatMeta | Uitvoermetadata |
Opmerkingen:
- Ondersteunt lokale paden en HTTP-URL's.
- Leest alleen de bestandskopmetadata en laadt geen puntenwolkgegevens.
- Retourneert
falsewanneer het pad leeg is of het bestand niet bestaat.
Voorbeeld:
if (renderer.GetMeta(filePath, out SplatMeta meta))
{
Debug.Log(meta.source);
Debug.Log(meta.dataType);
}
GetMeta (vanuit geladen gegevens)
// Retourwaarde: bool, true=succesvol gelezen
public bool GetMeta(out SplatMeta _metaData)
Haalt de metadata van de momenteel geladen gegevens op. Als de gegevens nog niet klaar zijn met laden, wordt geprobeerd vanaf het bestandspad te lezen.
| Parameter | Type | Beschrijving |
|---|---|---|
_metaData | out SplatMeta | Uitvoermetadata |
Voorbeeld:
if (renderer.GetMeta(out SplatMeta meta))
{
Debug.Log(meta.source);
}
GetMeshBlockInfos
// Retourwaarde: List<LCCMeshBlockInfo>, metadata van botsings-Mesh-blokken; null wanneer er geen Mesh is of deze niet beschikbaar is
public List<LCCMeshBlockInfo> GetMeshBlockInfos()
Retourneert de metadata van alle botsings-Mesh-blokken (id, wereld- / lokaal begrenzingskader, aantal hoekpunten, aantal vlakken). Nul I/O, nul parsing — leest alleen de metadata die al in het geheugen aanwezig is. Zie LCCMeshBlockInfo.
Opmerkingen:
- Alleen pc-/Mac-platform + lokale gegevensbron; moet op de hoofdthread worden aangeroepen.
- Typisch gebruik: gebruik het eerst om het wereldbegrenzingskader van elk blok op te halen, selecteer de benodigde id's en roep vervolgens
GetMeshes(ids)aan om alleen die blokken te lezen. - Native indelingen (PLY / SOG / SPZ / splat / ksplat) hebben geen Mesh en retourneren
null(normaal, geen log).
Voorbeeld:
var infos = renderer.GetMeshBlockInfos();
foreach (var info in infos)
{
Debug.Log($"{info.id}: verts={info.vertexCount}, faces={info.faceCount}");
}
GetMeshes
// Retourwaarde: List<LCCMeshBlock>, alle geometriegegevens van botsings-Mesh; null wanneer niet beschikbaar
public List<LCCMeshBlock> GetMeshes()
Retourneert synchroon de geometriegegevens van alle botsings-Mesh-blokken (hoekpunten + driehoeksindices, in lokale coördinaten). Dit is een zware bewerking (synchrone schijflezing + parsing + toewijzing), dus roep deze één keer aan en cache deze zelf — roep deze nooit elke frame aan. Zie LCCMeshBlock.
Opmerkingen:
- Alleen pc-/Mac-platform + lokale gegevensbron; moet op de hoofdthread worden aangeroepen.
- Gebruik voor grote scènes
GetMeshBlockInfos()om id's te selecteren +GetMeshes(ids)om te voorkomen dat in één keer een enorme hoeveelheid beheerd geheugen wordt toegewezen. - Een enkel blok kan meer dan 65535 hoekpunten hebben, dus
mesh.indexFormat = IndexFormat.UInt32moet worden ingesteld vóór het bouwen van de Mesh.
Voorbeeld:
var meshes = renderer.GetMeshes();
foreach (var block in meshes)
{
// block.vertices / block.triangles bevinden zich in het lokale coördinatensysteem van het object
}
GetMeshes (op id)
// Retourwaarde: List<LCCMeshBlock>, geometriegegevens van de botsings-Mesh van de opgegeven id's; null wanneer er geen treffer is
public List<LCCMeshBlock> GetMeshes(IEnumerable<string> _ids)
Retourneert synchroon de geometriegegevens van de botsings-Mesh-blokken (in lokale coördinaten) van de opgegeven id's. De id's worden geleverd door GetMeshBlockInfos().
| Parameter | Type | Beschrijving |
|---|---|---|
_ids | IEnumerable<string> | De set doelblok-id's (geleverd door GetMeshBlockInfos()) |
Opmerkingen:
- Onbekende id's worden overgeslagen met een waarschuwing; dubbele id's worden gededupliceerd (geen herhaalde schijflezingen); de retourvolgorde is de doorloopvolgorde van de id's (na deduplicatie).
- Retourneert
nullmet een waarschuwing wanneer de invoernullof leeg is of geen treffers bevat. - De overige beperkingen zijn hetzelfde als bij
GetMeshes().
Voorbeeld:
var ids = new List<string> { "block-0", "block-3" };
var meshes = renderer.GetMeshes(ids);