LCCManager: manager principale
Il manager principale dell'LCC Unity SDK, responsabile della gestione di tutte le istanze Renderer, delle camere e dello stato di rendering globale, oltre che delle operazioni di modifica (ritaglio / evidenziazione / tono), della proiezione delle decal, dello snapping e delle query di interazione (raycast / collisione). Nell'intera scena deve esserci una sola istanza LCCManager.
| Namespace | LCCCore |
| Classe base | MonoBehaviour |
LCCManager non ha proprietà pubbliche; tutte le funzionalità sono accessibili tramite i metodi. I metodi sono raggruppati per scopo:
- Inizializzazione e configurazione
- Controllo del rendering a runtime
- Illuminazione e ombre
- Gestione della camera
- Ritaglio / Evidenziazione / Tono
- Proiezione delle decal
- Snapping
- Raycasting e query di collisione
- Effetti visivi
- Query sulle istanze
Inizializzazione e configurazione
I seguenti metodi servono a completare la pre-configurazione di piattaforma, modalità di rendering, capacità e così via prima di caricare i dati. La maggior parte dei metodi deve essere chiamata prima di qualsiasi Renderer.Load().
SetPlatformType
public void SetPlatformType(PlatformType _type)
Imposta la piattaforma di runtime di destinazione dell'SDK, che influisce sulla strategia di rendering interna e sull'allocazione delle risorse.
| Parametro | Tipo | Descrizione |
|---|---|---|
_type | PlatformType | Piattaforma di destinazione; vedi PlatformType |
Note:
- Deve essere eseguito prima di qualsiasi chiamata
GetRender().
Esempio:
lccManager.SetPlatformType(PlatformType.PC);
SwitchRenderPass
public void SwitchRenderPass(ActiveRenderMode _mode)
Imposta la modalità di architettura di rendering globale. MultiRender usa un buffer GPU condiviso e può renderizzare fino a 255 Renderer contemporaneamente; SingleRender lascia che l'SDK selezioni automaticamente il percorso di rendering in base alle dimensioni dei dati.
| Parametro | Tipo | Descrizione |
|---|---|---|
_mode | ActiveRenderMode | Modalità di rendering; vedi ActiveRenderMode |
Note:
- Deve essere chiamata prima di qualsiasi
Renderer.Load(). - Ha effetto solo sulle piattaforme PC / Mac; le piattaforme mobile / VR adottano automaticamente una strategia adattiva e la chiamata di questo metodo viene rifiutata.
- La modalità
MultiRendernon supporta le origini dati HTTP; usaSingleRenderper i dati HTTP. - Una volta che un Renderer completa
Load(), la modalità viene bloccata e non può più essere cambiata.
Esempio:
lccManager.SwitchRenderPass(ActiveRenderMode.MultiRender);
GetRender (Overload 1: associa Transform)
// Valore di ritorno: Renderer, null in caso di errore
public Renderer GetRender(Transform _transform)
Crea una nuova istanza di rendering e la associa al Transform specificato. Dopo la creazione, bisogna chiamare Renderer.Load() per caricare i dati.
| Parametro | Tipo | Descrizione |
|---|---|---|
_transform | Transform | Il Transform a cui è collegata l'istanza di rendering |
Note:
SetPlatformType()eSetMainCamera()devono essere chiamati prima.- In modalità
MultiRendersono supportati fino a 255 Renderer.
Esempio:
var go = new GameObject("LCCScene");
var renderer = lccManager.GetRender(go.transform);
renderer.Load(filePath, null, () => Debug.Log("Caricato"));
GetRender (Overload 2: crea GameObject automaticamente)
// Valore di ritorno: Renderer, null in caso di errore
public Renderer GetRender(out GameObject gameObject)
Crea automaticamente un GameObject chiamato LCCRenderer e associa l'istanza di rendering al suo Transform.
| Parametro | Tipo | Descrizione |
|---|---|---|
gameObject | out GameObject | Restituisce in output il GameObject creato automaticamente, null in caso di errore |
Esempio:
var renderer = lccManager.GetRender(out GameObject go);
renderer.Load(filePath, null, () => Debug.Log("Caricato"));
SetMaxBufferSplat
public void SetMaxBufferSplat(int _count)
Imposta la capacità massima del buffer GPU (numero di Splat). Allocata una sola volta e non può essere cambiata dinamicamente.
| Parametro | Tipo | Descrizione |
|---|---|---|
_count | int | Numero massimo di Splat, unità: diecimila (valore × 10000 = conteggio effettivo) |
Note:
- Deve essere chiamata prima di qualsiasi
Renderer.Load(), eSetPlatformType()deve essere chiamata prima. - Una capacità maggiore significa un uso maggiore della memoria video; impostala in base alle necessità.
- Limiti per piattaforma: PC / Mac / PCVR 45 milioni, Android / iOS 6 milioni, VR (Pico / Quest / PicoSwan / AVP / OpenXR) 2 milioni.
- Valori predefiniti: PC / Mac 30 milioni, Android / iOS 3 milioni, VR 1 milione.
Esempio:
lccManager.SetMaxBufferSplat(3000); // 30 milioni di punti
SetFullRenderSplat
public void SetFullRenderSplat(int _count)
Imposta la soglia superiore per il rendering completo su PC / Mac. Quando le dimensioni dei dati sono inferiori a questo valore, viene usato il percorso di rendering completo; altrimenti viene usato il percorso di rendering a blocchi.
| Parametro | Tipo | Descrizione |
|---|---|---|
_count | int | Limite superiore del rendering completo, unità: diecimila, intervallo [100, 4500] |
Note:
- Supportata solo sulle piattaforme PC / Mac / PCVR.
- Deve essere chiamata prima di qualsiasi
Renderer.Load(), eSetPlatformType()deve essere chiamata prima.
Esempio:
lccManager.SetFullRenderSplat(2500); // 25 milioni di punti
SetMaxRenderSplats
public void SetMaxRenderSplats(int _count)
Imposta il numero massimo di Splat renderizzati per frame a runtime. Può essere chiamata dinamicamente dopo Load().
| Parametro | Tipo | Descrizione |
|---|---|---|
_count | int | Numero massimo di Splat renderizzati a runtime, unità: diecimila |
Note:
- Può essere regolata dinamicamente a runtime.
- Non può superare la capacità impostata da
SetMaxBufferSplat(); viene limitata automaticamente quando superata. - Nessun effetto in modalità rendering completo.
Esempio:
lccManager.SetMaxRenderSplats(2500); // 25 milioni di punti
GetLoadRatio
// Valore di ritorno: float, [0,1] avanzamento attuale del caricamento dei dati
public float GetLoadRatio()
Interroga l'avanzamento del caricamento dei dati della scena corrente.
Note:
- Restituisce sempre
1.0in modalità rendering completo. - In modalità rendering a blocchi, restituisce il rapporto dei nodi caricati nella vista corrente; il valore cambia in tempo reale con il movimento della camera e non è un avanzamento complessivo monotono crescente.
Esempio:
float ratio = lccManager.GetLoadRatio();
progressBar.value = ratio;
SetSelectionMode
public void SetSelectionMode(SelectionMode mode)
Imposta la strategia di selezione dei nodi.
| Parametro | Tipo | Descrizione |
|---|---|---|
mode | SelectionMode | Strategia di selezione; vedi SelectionMode |
Note:
Auto(predefinito): deciso automaticamente in base al box di delimitazione complessivo della scena; quando la dimensione massima della scena supera circa 380 metri, passa automaticamente aLarge.Normal: adatto a scene piccole e medie.Large: adatto a scene molto grandi (oltre 1000 metri).- Ha effetto immediato quando cambiato.
Esempio:
lccManager.SetSelectionMode(SelectionMode.Auto);
Controllo del rendering a runtime
I seguenti metodi possono essere chiamati dinamicamente a runtime per regolare la precisione di rendering, gli effetti di visualizzazione e le attivazioni del rendering.
SetDetailLevel
public void SetDetailLevel(float sse)
Imposta il livello di precisione del rendering. Un valore maggiore significa rendering più fine e un consumo di prestazioni più elevato.
| Parametro | Tipo | Descrizione |
|---|---|---|
sse | float | Livello di precisione, intervallo [1, 100], limitato automaticamente quando superato |
Note:
- Usa una mappatura logaritmica: i cambiamenti sono sensibili nell'intervallo di valori bassi e graduali nell'intervallo di valori alti.
- Può essere regolato dinamicamente a runtime.
- Ha effetto solo in modalità di selezione
Normal.
Esempio:
lccManager.SetDetailLevel(50f); // Precisione media
SetStartLod
public void SetStartLod(int lod)
Imposta il punto di partenza dell'espansione LOD (a base 0). 0 è il più fine e un numero maggiore significa un livello più grossolano.
| Parametro | Tipo | Descrizione |
|---|---|---|
lod | int | Livello LOD di partenza, intervallo [0, 10], limitato automaticamente quando superato |
Note:
- Il limite superiore effettivo è vincolato dal numero totale di livelli dei dati.
Esempio:
lccManager.SetStartLod(0);
SetAutoFov
public void SetAutoFov(bool _auto)
Imposta se gestire automaticamente il FOV di rendering. Quando è attivo (predefinito), l'SDK blocca una base di lunghezza focale in pixel al primo frame, poi inverte il FOV verticale dall'altezza del viewport corrente a ogni frame e lo riscrive in Camera.fieldOfView; quando è disattivo, fieldOfView viene controllato esternamente (SetFOV() o modificando direttamente la camera).
| Parametro | Tipo | Descrizione |
|---|---|---|
_auto | bool | Indica se usare il FOV automatico |
Note:
- Attivo per impostazione predefinita.
- Quando è attivo, riscrive continuamente il
Camera.fieldOfViewdella camera principale, quindi la chiamata diSetFOV()viene ignorata. - Quando è disattivo,
SetFOV()deve essere chiamata manualmente per impostare i parametri.
Esempio:
lccManager.SetAutoFov(true);
SetFOV
public void SetFOV(int _width, int _height, float _verticalFov, float _aspect)
Imposta manualmente il FOV verticale (in gradi). Riscrive direttamente il Camera.fieldOfView della camera principale in modo che il FOV nell'Inspector corrisponda al FOV effettivamente usato per il rendering. _width / _height / _aspect sono parametri di firma legacy; la proiezione effettiva usa il viewport proprio della camera principale (usa SetRecordMode() per un output fuori schermo con dimensioni / FOV diversi).
| Parametro | Tipo | Descrizione |
|---|---|---|
_width | int | Larghezza in pixel |
_height | int | Altezza in pixel |
_verticalFov | float | FOV verticale (gradi) |
_aspect | float | Proporzioni |
Note:
SetAutoFov(false)deve essere chiamata prima, altrimenti l'inversione automatica del FOV a ogni frame sovrascrive il valore manuale.- Il FOV verticale è limitato a
[1, 179]gradi. - La chiamata sulle piattaforme VR / PCVR, durante la registrazione o con una camera ortografica viene rifiutata (avvisa e ritorna).
Esempio:
lccManager.SetFOV(1920, 1080, 60f, 1.778f);
SetRenderEnable
public void SetRenderEnable(Renderer _renderer, bool _isEnable)
Controlla l'attivazione del rendering del Renderer specificato a runtime. Quando è disattivo, non partecipa all'attraversamento e al disegno.
| Parametro | Tipo | Descrizione |
|---|---|---|
_renderer | Renderer | Istanza di rendering di destinazione |
_isEnable | bool | Indica se abilitare il rendering |
Esempio:
lccManager.SetRenderEnable(renderer, false); // Nascondi
SetEnvironment
public void SetEnvironment(Renderer _renderer, bool _isRender)
Controlla il rendering dei dati ambiente del Renderer specificato. I dati ambiente sono una nuvola di punti di sfondo a bassa precisione usata per riempire le viste distanti.
| Parametro | Tipo | Descrizione |
|---|---|---|
_renderer | Renderer | Istanza di rendering di destinazione |
_isRender | bool | Indica se renderizzare i dati ambiente |
Note:
- I dati devono contenere nodi ambiente.
Esempio:
lccManager.SetEnvironment(renderer, true);
SetZDepth
public void SetZDepth(bool zwrite)
Attiva/disattiva la scrittura di profondità Z e regola di conseguenza la coda di rendering.
| Parametro | Tipo | Descrizione |
|---|---|---|
zwrite | bool | Indica se abilitare la scrittura di profondità Z |
Esempio:
lccManager.SetZDepth(true);
SetAlpha
public void SetAlpha(float alpha)
Imposta l'opacità globale.
| Parametro | Tipo | Descrizione |
|---|---|---|
alpha | float | Opacità globale, intervallo [0, 1], limitata automaticamente quando superata |
Esempio:
lccManager.SetAlpha(0.8f);
SetLightIntensity
public void SetLightIntensity(float intensity)
Imposta l'intensità della luce globale.
| Parametro | Tipo | Descrizione |
|---|---|---|
intensity | float | Intensità della luce, intervallo [0, 1], limitata automaticamente quando superata |
Esempio:
lccManager.SetLightIntensity(0.7f);
SetLowPassFilter
public void SetLowPassFilter(float _filter)
Imposta la forza del filtro passa-basso globale, usata per sopprimere l'aliasing / il rumore ad alta frequenza.
| Parametro | Tipo | Descrizione |
|---|---|---|
_filter | float | Forza del filtro passa-basso, intervallo [0, 1], limitata automaticamente quando superata |
Esempio:
lccManager.SetLowPassFilter(0.3f);
SetLockFPS
public void SetLockFPS(bool _isLock)
Attiva/disattiva il blocco del frame rate (commutazione del frame rate statico / dinamico).
| Parametro | Tipo | Descrizione |
|---|---|---|
_isLock | bool | Indica se bloccare il frame rate |
Esempio:
lccManager.SetLockFPS(true);
SetRenderLayer
public void SetRenderLayer(int _layer)
Imposta il Layer di Unity usato dal rendering LCC, per il controllo della visibilità tramite CullingMask della camera.
| Parametro | Tipo | Descrizione |
|---|---|---|
_layer | int | Layer di rendering di Unity, intervallo [0, 31] |
Note:
- Può essere regolato dinamicamente a runtime.
Esempio:
lccManager.SetRenderLayer(8); // Usa il Layer 8
SetForceRefresh
public void SetForceRefresh()
Forza un aggiornamento del rendering. Svuota la cache interna delle informazioni della camera in modo che frustum, LOD e altri parametri vengano ricalcolati al frame successivo. Adatta ai casi in cui i parametri della camera modificati esternamente devono avere effetto immediato.
Esempio:
lccManager.SetForceRefresh();
SetMipMode
public void SetMipMode(MipMode _mipMode)
Cambia la modalità di rendering Mip. La modalità Mip usa il campionamento mipmap (predefinito), mentre la modalità Non_Mip disattiva la mipmap.
| Parametro | Tipo | Descrizione |
|---|---|---|
_mipMode | MipMode | Modalità di destinazione; vedi MipMode |
Note:
- Ritorna immediatamente se la modalità corrente è la stessa di quella passata.
- Ha effetto immediato quando cambiata.
Esempio:
lccManager.SetMipMode(MipMode.Non_Mip);
SetGraphicsAPI
public void SetGraphicsAPI(GraphicsDeviceType type)
Imposta il tipo di API grafica. L'HDR è abilitato in modalità DX11.
| Parametro | Tipo | Descrizione |
|---|---|---|
type | GraphicsDeviceType | Tipo di API grafica (enum integrato di Unity) |
Esempio:
lccManager.SetGraphicsAPI(GraphicsDeviceType.Direct3D11);
SetDebugMode
public void SetDebugMode(bool debug)
Attiva/disattiva la modalità debug.
| Parametro | Tipo | Descrizione |
|---|---|---|
debug | bool | Indica se abilitare la modalità debug |
Note:
- Supportata solo sulle piattaforme PC / Mac.
Esempio:
lccManager.SetDebugMode(true);
SetEditorMode
public void SetEditorMode(bool _isEditor)
Attiva/disattiva la modalità Editor.
| Parametro | Tipo | Descrizione |
|---|---|---|
_isEditor | bool | Indica se abilitare la modalità Editor |
Note:
- Supportata solo sulle piattaforme PC / Mac.
Esempio:
lccManager.SetEditorMode(true);
SetAECMode
public void SetAECMode(bool _aec)
Attiva/disattiva la modalità AEC (Architecture / Engineering / Construction).
| Parametro | Tipo | Descrizione |
|---|---|---|
_aec | bool | Indica se abilitare la modalità AEC |
Note:
- Supportata solo sulle piattaforme PC / Mac.
Esempio:
lccManager.SetAECMode(true);
SetSemantic
// Valore di ritorno: bool, false=parametro non valido
public bool SetSemantic(bool enable, Vector4[] color = null)
Attiva/disattiva la modalità di rendering semantico. Quando è attiva, si può passare un array di colori per definire il colore di visualizzazione di ogni categoria semantica.
| Parametro | Tipo | Descrizione |
|---|---|---|
enable | bool | Indica se abilitare il rendering semantico |
color | Vector4[] | Array di colori semantici, la lunghezza deve essere 100, altrimenti viene restituito false; passa null per usare i colori predefiniti |
Esempio:
Vector4[] colors = new Vector4[100];
colors[0] = new Vector4(1, 0, 0, 1); // Categoria 0 = rosso
lccManager.SetSemantic(true, colors);
SwitchRenderMode
public void SwitchRenderMode(RenderMode mode, Texture2D tex = null)
Passa dal rendering della nuvola di punti al rendering 3DGS. In modalità nuvola di punti si può fornire una texture di rampa colore per l'elevazione.
| Parametro | Tipo | Descrizione |
|---|---|---|
mode | RenderMode | Modalità di rendering; vedi RenderMode |
tex | Texture2D | Texture di rampa colore per l'elevazione (facoltativa) |
Note:
- Supportata solo sulle piattaforme PC / Mac.
Esempio:
lccManager.SwitchRenderMode(RenderMode.PointCloud, elevationTex);
SetRecordMode
public void SetRecordMode(bool isRecord, Vector2 renderSize, float verticalFov)
Imposta la modalità di registrazione. In modalità di registrazione, vengono usati una risoluzione e un FOV fissi per il rendering, adatti alla registrazione video in HD.
| Parametro | Tipo | Descrizione |
|---|---|---|
isRecord | bool | Indica se usare la modalità di registrazione |
renderSize | Vector2 | Risoluzione di registrazione |
verticalFov | float | FOV verticale (gradi) |
Note:
- Supportata solo sulle piattaforme PC / Mac.
- In modalità di registrazione, la lunghezza focale della camera è fissa e non cambia con il componente Camera.
- Dopo la registrazione, chiama
SetRecordMode(false, ...)per ripristinare.
Esempio:
lccManager.SetRecordMode(true, new Vector2(3840, 2160), 60f);
SetVRPerformance
public void SetVRPerformance(bool _enabled)
Imposta la modalità di ordinamento ad alte prestazioni per la VR. true usa l'ordinamento radix su GPU (GpuSorter), mentre false ripiega su CPU / BitonicSorter.
| Parametro | Tipo | Descrizione |
|---|---|---|
_enabled | bool | Indica se abilitare l'ordinamento ad alte prestazioni su GPU |
Note:
- Influisce solo sul percorso di ordinamento dei visori VR (Pico / Quest / PicoSwan / OpenXR); abilitato per impostazione predefinita.
- Quando non c'è un dispositivo di calcolo (come Mali), l'ordinamento a monte ripiega automaticamente sulla CPU, indipendentemente da questo interruttore.
Esempio:
lccManager.SetVRPerformance(true);
Illuminazione e ombre
I seguenti metodi controllano la ricezione delle ombre e le luci puntiformi personalizzate sulle superfici 3DGS. I metodi relativi alle ombre devono essere chiamati dopo che la scena LCC ha terminato il caricamento.
SetShadowReceive
public void SetShadowReceive(bool enable)
Attiva/disattiva la ricezione delle ombre sulla nuvola di punti. Quando è attiva, le ombre degli oggetti Mesh nella scena possono essere proiettate sulle superfici della nuvola di punti 3DGS.
| Parametro | Tipo | Descrizione |
|---|---|---|
enable | bool | Indica se ricevere le ombre |
Note:
- Disattivata per impostazione predefinita.
- Richiede oggetti Mesh che proiettano ombre e una Luce direzionale nella scena.
Esempio:
lccManager.SetShadowReceive(true);
SetShadowColor
public void SetShadowColor(Color color)
Imposta il colore dell'area in ombra.
| Parametro | Tipo | Descrizione |
|---|---|---|
color | Color | Colore dell'ombra (RGBA) |
Note:
- Predefinito
(0.3, 0.3, 0.3, 1). SetShadowReceive(true)deve essere abilitata prima.
Esempio:
lccManager.SetShadowColor(new Color(0.3f, 0.3f, 0.3f, 1f));
SetShadowStrength
public void SetShadowStrength(float strength)
Imposta la forza dell'ombra. 0 è nessuna ombra, 1 è l'ombra più forte.
| Parametro | Tipo | Descrizione |
|---|---|---|
strength | float | Forza dell'ombra, intervallo [0, 1], limitata automaticamente quando superata |
Note:
- Predefinito
1.0. SetShadowReceive(true)deve essere abilitata prima.
Esempio:
lccManager.SetShadowStrength(0.8f);
SetLights
// Valore di ritorno: int, 0=riuscito, -1=superato il limite massimo di conteggio
public int SetLights(List<PointLightData> lights)
Imposta l'elenco di luci puntiformi personalizzate. Passare null o un elenco vuoto disattiva l'illuminazione personalizzata.
| Parametro | Tipo | Descrizione |
|---|---|---|
lights | List<PointLightData> | Elenco di luci puntiformi; vedi PointLightData |
Note:
PointLightData.lightType:0è una luce puntiforme (direction / spotAngle ignorati),1è una luce spot (direction / spotAngle richiesti).- Passare
nullo un elenco vuoto disattiva l'illuminazione personalizzata.
Esempio:
using Unity.Mathematics; // float3
var lights = new List<PointLightData>();
lights.Add(new PointLightData {
position = new float3(0, 5, 0),
lightType = 0, // 0=luce puntiforme, 1=luce spot
color = new float3(1, 1, 1),
intensity = 2f,
range = 10f
});
lccManager.SetLights(lights);
Gestione della camera
SetMainCamera
public void SetMainCamera(Camera _cam)
Imposta la camera di rendering principale. LCC usa questa camera per il frustum culling, la selezione LOD, l'ordinamento e altre operazioni.
| Parametro | Tipo | Descrizione |
|---|---|---|
_cam | Camera | Camera di rendering principale; passa null per svuotare |
Note:
- Deve essere impostata prima di
Renderer.Load(). - Supportata solo sulle piattaforme PC / Mac.
Esempio:
lccManager.SetMainCamera(Camera.main);
AddCamera
public void AddCamera(Camera _cam)
Aggiunge una camera secondaria. La camera secondaria partecipa al rendering ma non influisce sulla selezione LOD.
| Parametro | Tipo | Descrizione |
|---|---|---|
_cam | Camera | Camera secondaria |
Note:
- Supportata solo sulle piattaforme PC / Mac.
- La camera principale non può essere aggiunta come camera secondaria.
Esempio:
lccManager.AddCamera(secondCamera);
RemoveCamera
public void RemoveCamera(Camera _cam)
Rimuove una camera secondaria aggiunta.
| Parametro | Tipo | Descrizione |
|---|---|---|
_cam | Camera | La camera secondaria da rimuovere |
Note:
- Supportata solo sulle piattaforme PC / Mac.
Esempio:
lccManager.RemoveCamera(secondCamera);
Ritaglio / Evidenziazione / Tono
Ritaglio, evidenziazione e tono sono tre tipi di operazioni di modifica, che supportano tutte la definizione della regione interessata tramite texture 2D, geometria 3D o una combinazione di entrambe. Vedi Data2D, Data3D, DataMix e ToneMix.
SetClip (ritaglio con piano)
// Valore di ritorno: int, 0=riuscito
public int SetClip(Vector3 planePoint, Vector3 planeNormal, bool inside = true)
Ritaglia la nuvola di punti con un piano infinito, mantenendo i punti sul lato della normale o sul lato opposto.
| Parametro | Tipo | Descrizione |
|---|---|---|
planePoint | Vector3 | Un punto sul piano |
planeNormal | Vector3 | Normale del piano |
inside | bool | true mantiene il lato della normale |
Note:
- Mutualmente esclusivo con le altre modalità di ritaglio.
Esempio:
lccManager.SetClip(Vector3.zero, Vector3.up, true); // Mantieni sopra il terreno
SetClip (ritaglio con texture 2D)
// Valore di ritorno: int, 0=riuscito, 1=lista vuota, 2=superato il conteggio massimo
public int SetClip(List<Data2D> _2Ds)
Ritaglia la nuvola di punti usando una maschera di texture 2D proiettata.
| Parametro | Tipo | Descrizione |
|---|---|---|
_2Ds | List<Data2D> | Elenco di selezione con texture 2D |
Esempio:
var clips = new List<Data2D>();
clips.Add(new Data2D {
texture = maskTex,
mv = modelViewMatrix,
mvp = mvpMatrix,
mode = SelectMode.normal
});
lccManager.SetClip(clips);
SetClip (ritaglio con geometria 3D)
// Valore di ritorno: int, 0=riuscito, 1=lista vuota, 2=superato il conteggio massimo, 3=nessuna geometria valida
public int SetClip(List<Data3D> _3Ds)
Ritaglia la nuvola di punti con geometrie 3D, supportando operazioni booleane per combinare più geometrie.
| Parametro | Tipo | Descrizione |
|---|---|---|
_3Ds | List<Data3D> | Elenco di geometrie 3D |
Note:
- È richiesta almeno una geometria con
operation == normal.
Esempio:
var clips = new List<Data3D>();
clips.Add(new Data3D {
type = ShapeType.box,
invMat = boxInverseMatrix,
operation = OperationMode.normal,
mode = SelectMode.normal
});
lccManager.SetClip(clips);
SetClip (ritaglio in modalità mista)
// Valore di ritorno: int, 0=riuscito, 1=lista vuota, 2=superato il conteggio massimo
public int SetClip(List<DataMix> mix)
Definisce la regione di ritaglio con una combinazione di texture 2D e geometrie 3D. Ogni voce specifica il proprio tipo tramite editType.
| Parametro | Tipo | Descrizione |
|---|---|---|
mix | List<DataMix> | Elenco di selezione misto (2D + 3D) |
Esempio:
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()
Esce dalla modalità di ritaglio e ripristina la visualizzazione completa della nuvola di punti.
Esempio:
lccManager.QuitClipMode();
SetHighlight (evidenziazione con texture 2D)
// Valore di ritorno: int, 0=riuscito, 1=lista vuota, 2=superato il conteggio massimo
public int SetHighlight(List<Data2D> _2Ds)
Evidenzia la nuvola di punti usando una maschera di texture 2D proiettata; la nuvola di punti al di fuori della regione evidenziata viene attenuata.
| Parametro | Tipo | Descrizione |
|---|---|---|
_2Ds | List<Data2D> | Elenco di selezione con texture 2D |
Note:
- Mutualmente esclusiva con l'evidenziazione 3D e l'evidenziazione mista.
Esempio:
var highlights = new List<Data2D>();
highlights.Add(new Data2D {
texture = maskTex,
mv = modelViewMatrix,
mvp = mvpMatrix,
mode = SelectMode.normal
});
lccManager.SetHighlight(highlights);
SetHighlight (evidenziazione con geometria 3D)
// Valore di ritorno: int, 0=riuscito, 1=lista vuota, 2=superato il conteggio massimo, 3=nessuna geometria valida
public int SetHighlight(List<Data3D> _3Ds)
Definisce la regione evidenziata con geometrie 3D, supportando operazioni booleane per combinare.
| Parametro | Tipo | Descrizione |
|---|---|---|
_3Ds | List<Data3D> | Elenco di geometrie 3D |
Note:
- È richiesta almeno una geometria con
operation == normal.
Esempio:
var highlights = new List<Data3D>();
highlights.Add(new Data3D {
type = ShapeType.box,
invMat = boxInverseMatrix,
operation = OperationMode.normal,
mode = SelectMode.normal
});
lccManager.SetHighlight(highlights);
SetHighlight (evidenziazione in modalità mista)
// Valore di ritorno: int, 0=riuscito, 1=lista vuota, 2=superato il conteggio massimo
public int SetHighlight(List<DataMix> mix)
Definisce la regione evidenziata con una combinazione di texture 2D e geometrie 3D.
| Parametro | Tipo | Descrizione |
|---|---|---|
mix | List<DataMix> | Elenco di selezione misto |
Esempio:
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()
Esce dalla modalità di evidenziazione e ripristina la visualizzazione normale della nuvola di punti.
Esempio:
lccManager.QuitHighlightMode();
SetTone
// Valore di ritorno: int, 0=riuscito, 1=lista vuota, 2=superato il conteggio massimo
public int SetTone(List<ToneMix> mix)
Applica la regolazione del tono alla regione selezionata, supportando luminosità, saturazione, contrasto e filtri LUT. La regione del tono può essere definita tramite texture 2D o geometria 3D.
| Parametro | Tipo | Descrizione |
|---|---|---|
mix | List<ToneMix> | Elenco di mix del tono |
Note:
brightness/saturation/contrastsono predefiniti a1.0.lutidè l'indice del filtro LUT;0significa non usato.
Esempio:
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()
Esce dalla modalità tono e ripristina il colore originale della nuvola di punti.
Esempio:
lccManager.QuitToneMode();
Proiezione delle decal
La proiezione delle decal proietta una texture sulle superfici 3DGS lungo la direzione del proiettore. La decal è uno stato globale fisso nel mondo, coerente per tutte le camere. Il flusso di lavoro tipico è: abilita la decal → imposta la texture → imposta la posa del proiettore. I seguenti metodi sono supportati solo sulle piattaforme PC / Mac.
SetDecalEnabled
public void SetDecalEnabled(bool enable)
Attiva/disattiva la proiezione delle decal. SetDecalTexture() e SetDecalProjection() devono essere chiamate separatamente per impostare il contenuto e la posa del proiettore.
| Parametro | Tipo | Descrizione |
|---|---|---|
enable | bool | Indica se abilitare la proiezione delle decal |
Note:
- La disattivazione non svuota la texture / i parametri memorizzati nella cache.
Esempio:
lccManager.SetDecalEnabled(true);
lccManager.SetDecalTexture(decalTex);
lccManager.SetDecalProjection(projectorPos, projectorRot, 60f, 1.778f, 0.1f, 20f);
SetDecalTexture
public void SetDecalTexture(Texture2D tex)
Imposta la texture della decal. RGB è il colore e A è la maschera propria della decal, che viene moltiplicata con l'opacità globale e la sfumatura dei bordi.
| Parametro | Tipo | Descrizione |
|---|---|---|
tex | Texture2D | Texture della decal; passare null svuota il riferimento |
Esempio:
lccManager.SetDecalTexture(logoTex);
SetDecalProjection
public void SetDecalProjection(Vector3 pos, Quaternion rot, float fov, float aspect, float near, float far)
Imposta la posa e i parametri di prospettiva del proiettore della decal. Il proiettore proietta lungo la propria direzione in avanti (+Z) e i punti all'interno del frustum sono coperti dalla decal.
| Parametro | Tipo | Descrizione |
|---|---|---|
pos | Vector3 | Posizione mondo del proiettore |
rot | Quaternion | Orientamento del proiettore |
fov | float | FOV verticale (gradi), limitato a [1, 179] |
aspect | float | Proporzioni, minimo 1e-4 |
near | float | Piano di ritaglio vicino, minimo 1e-3 |
far | float | Piano di ritaglio lontano, minimo near + 1e-3 |
Esempio:
lccManager.SetDecalProjection(new Vector3(0, 10, 0), Quaternion.Euler(90, 0, 0), 60f, 1.778f, 0.1f, 20f);
SetDecalOpacity
public void SetDecalOpacity(float opacity)
Imposta l'opacità complessiva della decal.
| Parametro | Tipo | Descrizione |
|---|---|---|
opacity | float | Opacità complessiva della decal, intervallo [0, 1], limitata automaticamente quando superata |
Esempio:
lccManager.SetDecalOpacity(0.8f);
SetDecalEdgeFade
public void SetDecalEdgeFade(float edgeFade)
Imposta la larghezza della sfumatura dei bordi della decal. 0 è un bordo netto e un valore maggiore rende la transizione del bordo più morbida.
| Parametro | Tipo | Descrizione |
|---|---|---|
edgeFade | float | Larghezza della sfumatura dei bordi (rapporto in spazio UV), intervallo [0, 0.5), limitata automaticamente quando superata |
Esempio:
lccManager.SetDecalEdgeFade(0.1f);
SetDecalOcclusion
public void SetDecalOcclusion(bool enable)
Attiva/disattiva il culling di occlusione delle decal (basato sulla depth map del proiettore). Quando è attivo, le superfici occluse non vengono coperte dalla decal.
| Parametro | Tipo | Descrizione |
|---|---|---|
enable | bool | Indica se abilitare il culling di occlusione delle decal |
Note:
- Solo piattaforma PC / Mac e solo pipeline URP.
- Prima di abilitare,
SetDecalProjection()dovrebbe essere stata chiamata per impostare il proiettore. - Dipende dai parametri di qualità configurati da
SetDecalOcclusionSettings().
Esempio:
lccManager.SetDecalOcclusion(true);
SetDecalOcclusionSettings
public void SetDecalOcclusionSettings(DecalOcclusionSettings settings)
Imposta tutti i parametri di qualità del culling di occlusione delle decal in una sola volta. Vedi DecalOcclusionSettings.
| Parametro | Tipo | Descrizione |
|---|---|---|
settings | DecalOcclusionSettings | Parametri di qualità del culling di occlusione |
Note:
- Può essere regolata in qualsiasi momento; i parametri hanno effetto immediato.
Esempio:
lccManager.SetDecalOcclusionSettings(DecalOcclusionSettings.Default);
lccManager.SetDecalOcclusionSettings(new DecalOcclusionSettings {
opacityCutoff = 0.1f,
depthBias = 0.05f,
footprintMaxPx = 2,
resolution = 1024
});
Snapping
La funzionalità di snapping cerca automaticamente i bordi / gli angoli vicini a cui allinearsi durante il raycasting, ed è comunemente usata per interazioni precise come misurazione e annotazione. I seguenti metodi sono supportati solo sulle piattaforme PC / Mac.
SetSnapEnabled
public void SetSnapEnabled(bool enable)
Attiva/disattiva la funzionalità di snapping. Quando è attiva, RaycastWithSnap() cerca automaticamente i bordi / gli angoli vicini a cui agganciarsi.
| Parametro | Tipo | Descrizione |
|---|---|---|
enable | bool | Indica se abilitare lo snapping |
Note:
- Disattivata per impostazione predefinita.
- Nessun effetto su mobile / VR e viene emesso un avviso.
Esempio:
lccManager.SetSnapEnabled(true);
SetSnapRadius
public void SetSnapRadius(float pixels)
Imposta il raggio di ricerca dello snapping. Cerca il bordo / l'angolo più vicino entro questo intervallo di pixel.
| Parametro | Tipo | Descrizione |
|---|---|---|
pixels | float | Raggio di ricerca dello snapping (pixel) |
Note:
- Predefinito 20 pixel.
- Un valore maggiore significa un intervallo di ricerca più ampio, ma può agganciarsi a destinazioni non volute.
Esempio:
lccManager.SetSnapRadius(30f);
SetEdgeThreshold
public void SetEdgeThreshold(float threshold)
Imposta la soglia di rilevamento dei bordi. Un valore minore rileva più bordi.
| Parametro | Tipo | Descrizione |
|---|---|---|
threshold | float | Soglia di rilevamento dei bordi, intervallo consigliato [0.1, 0.8] |
Note:
- Predefinito
0.3. - Un valore troppo piccolo produce una grande quantità di bordi rumorosi.
Esempio:
lccManager.SetEdgeThreshold(0.2f);
SetSnapPreviewEnabled
public void SetSnapPreviewEnabled(bool enable)
Attiva/disattiva la funzionalità di anteprima di snap. Quando è attiva, l'indicatore della destinazione di snap più vicina viene visualizzato in tempo reale mentre il mouse si sposta.
| Parametro | Tipo | Descrizione |
|---|---|---|
enable | bool | Indica se abilitare l'anteprima di snap |
Note:
SetSnapEnabled(true)deve essere chiamata prima.- L'anteprima consuma continuamente risorse GPU (rilevamento a ogni frame).
Esempio:
lccManager.SetSnapPreviewEnabled(true);
UpdateSnapPreview
public void UpdateSnapPreview(Vector2 mousePos, Camera cam)
Aggiorna lo stato dell'anteprima di snap. Chiamata mentre il mouse si sposta per aggiornare la posizione dell'indicatore di anteprima.
| Parametro | Tipo | Descrizione |
|---|---|---|
mousePos | Vector2 | Coordinate schermo correnti del mouse |
cam | Camera | Camera |
Note:
SetSnapPreviewEnabled(true)deve essere chiamata prima.- Si consiglia di chiamarla continuamente in
Update.
Esempio:
void Update()
{
lccManager.UpdateSnapPreview(Input.mousePosition, Camera.main);
}
GetSnapPreviewState
// Valore di ritorno: SnapPreviewState
public SnapPreviewState GetSnapPreviewState()
Ottiene lo stato corrente dell'anteprima di snap, incluso se esiste una destinazione di snap, il tipo di destinazione, la posizione schermo della destinazione e la distanza in pixel dal mouse. Vedi SnapPreviewState.
Note:
SetSnapPreviewEnabled(true)eUpdateSnapPreview()devono essere chiamate prima.- Restituisce
default(SnapPreviewState)quando non c'è una destinazione. screenPosè in coordinate schermo, non in coordinate mondo; usaRaycastWithSnap()per ottenereHitResult.hitPosper le coordinate mondo.
Esempio:
var state = lccManager.GetSnapPreviewState();
if (state.hasTarget)
{
// state.snapType: Corner / Edge
// state.screenPos: coordinate schermo della destinazione di snap
// state.distanceToMouse: distanza in pixel
}
Raycasting e query di collisione
Il raycasting serve a selezionare punti sulle superfici 3DGS, mentre le query di collisione servono all'interazione fisica tra personaggi / oggetti e la nuvola di punti. Il risultato del colpo viene restituito tramite HitResult.
Nota:
Il campo della coordinata mondo del punto di impatto di
HitResultsi chiamahitPos(nonposition).
Raycast (coordinate schermo)
// Valore di ritorno: bool, true=colpito
public bool Raycast(Vector3 mousePos, out HitResult _finalResult)
Emette un raggio dalle coordinate schermo per rilevare i colpi sulla nuvola di punti. Il raggio viene generato usando la camera principale impostata da SetMainCamera().
| Parametro | Tipo | Descrizione |
|---|---|---|
mousePos | Vector3 | Coordinate schermo |
_finalResult | out HitResult | Risultato del colpo |
Note:
SetMainCamera()deve essere chiamata prima per impostare la camera principale.- Restituisce il punto di impatto più vicino alla camera.
- La precisione è influenzata da
SetRaycastDelta()e la distanza massima è controllata daSetMaxRaycastDistance().
Esempio:
if (lccManager.Raycast(Input.mousePosition, out HitResult hit))
{
Debug.Log(hit.hitPos);
}
Raycast (Ray)
// Valore di ritorno: bool, true=colpito
public bool Raycast(Ray _ray, out HitResult _finalResult)
Esegue il raycasting con un Ray personalizzato, iterando su tutti i Renderer attivi e restituendo il colpo più vicino.
| Parametro | Tipo | Descrizione |
|---|---|---|
_ray | Ray | Ray |
_finalResult | out HitResult | Risultato del colpo |
Esempio:
Ray ray = new Ray(origin, direction);
if (lccManager.Raycast(ray, out HitResult hit))
{
Debug.Log(hit.hitPos);
}
RaycastMesh (coordinate schermo)
// Valore di ritorno: bool, true=colpito
public bool RaycastMesh(Vector3 mousePos, out HitResult _finalResult, float _distance = 70.0f)
Emette un raggio dalle coordinate schermo per rilevare i colpi contro la mesh di collisione della nuvola di punti. Usa i dati del Collider per il rilevamento, che è più veloce di Raycast() ma meno preciso.
| Parametro | Tipo | Descrizione |
|---|---|---|
mousePos | Vector3 | Coordinate schermo |
_finalResult | out HitResult | Risultato del colpo |
_distance | float | Distanza massima di rilevamento, predefinito 70.0 |
Note:
- I dati devono contenere nodi Collider e
Renderer.SetColliderEnable(true)deve essere chiamata prima.
Esempio:
if (lccManager.RaycastMesh(Input.mousePosition, out HitResult hit))
{
Debug.Log(hit.hitPos);
}
RaycastMesh (Ray + Bounds)
// Valore di ritorno: bool, true=colpito
public bool RaycastMesh(Ray ray, out HitResult result, out Bounds hitBounds, float maxDist = 70.0f)
Esegue il rilevamento della mesh di collisione con un Ray personalizzato, restituendo anche il box di delimitazione del nodo colpito.
| Parametro | Tipo | Descrizione |
|---|---|---|
ray | Ray | Ray |
result | out HitResult | Risultato del colpo |
hitBounds | out Bounds | Box di delimitazione del nodo colpito |
maxDist | float | Distanza massima di rilevamento, predefinito 70.0 |
Note:
- I dati devono contenere nodi Collider.
Esempio:
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (lccManager.RaycastMesh(ray, out HitResult hit, out Bounds bounds))
{
Debug.Log(bounds.center);
}
RaycastWithSnap
// Valore di ritorno: bool, true=colpito
public bool RaycastWithSnap(Vector2 screenPos, Camera cam, out HitResult result)
Raycasting con snapping. Prima esegue un raycast normale, poi cerca i bordi / gli angoli vicini al punto di impatto a cui agganciarsi.
| Parametro | Tipo | Descrizione |
|---|---|---|
screenPos | Vector2 | Coordinate schermo |
cam | Camera | Camera |
result | out HitResult | Risultato del colpo (incluse le informazioni di snap) |
Note:
SetSnapEnabled(true)deve essere chiamata prima.- Solo piattaforme PC / Mac; non disponibile su mobile / VR.
- Priorità dello snap: Corner > Edge > None.
HitResult.snapTypeè il tipo di snap,HitResult.hitPosè la coordinata mondo dopo lo snap eHitResult.originalHitPosè il punto di impatto originale prima dello snap.
Esempio:
if (lccManager.RaycastWithSnap(mousePos, cam, out HitResult hit))
{
// hit.snapType: Corner / Edge / None
// hit.hitPos: coordinata mondo dopo lo snap
// hit.originalHitPos: punto di impatto originale prima dello snap
}
SetRaycastDelta
public void SetRaycastDelta(float delta)
Imposta il parametro di precisione del raycasting. Un valore minore significa una precisione maggiore ma un consumo di prestazioni più elevato.
| Parametro | Tipo | Descrizione |
|---|---|---|
delta | float | Precisione del raycasting, intervallo [0.1, 10.0], limitata automaticamente quando superata |
Note:
- Predefinito
0.1. - Influisce sulla precisione di rilevamento di tutti i metodi
Raycast().
Esempio:
lccManager.SetRaycastDelta(0.5f);
SetMaxRaycastDistance
public void SetMaxRaycastDistance(float _distance)
Imposta la distanza massima di rilevamento dei metodi Raycast().
| Parametro | Tipo | Descrizione |
|---|---|---|
_distance | float | Distanza massima del raycast, intervallo [10, 10000], limitata automaticamente quando superata |
Note:
- Influisce sugli overload
Raycast(Vector3)/Raycast(Ray); non influisce suRaycastMesh()(che ha un proprio parametro di distanza).
Esempio:
lccManager.SetMaxRaycastDistance(500f);
IntersectsSphere
// Valore di ritorno: bool, true=interseca
public bool IntersectsSphere(Sphere sphere)
// Valore di ritorno: bool, true=interseca
public bool IntersectsSphere(Sphere sphere, out Vector3 delta)
Rileva se una sfera interseca il collider della nuvola di punti. Il secondo overload restituisce anche il vettore di penetrazione, che può essere usato per la spinta fisica all'esterno.
| Parametro | Tipo | Descrizione |
|---|---|---|
sphere | Sphere | Sfera |
delta | out Vector3 | Vettore di penetrazione (direzione e distanza di espulsione) |
Note:
- I dati devono contenere nodi Collider e
Renderer.SetColliderEnable(true)deve essere chiamata prima. - Itera su tutti i Renderer attivi.
Esempio:
var sphere = new Sphere(transform.position, 0.5f);
if (lccManager.IntersectsSphere(sphere, out Vector3 delta))
{
transform.position += delta;
}
IntersectsCapsule
// Valore di ritorno: bool, true=interseca
public bool IntersectsCapsule(Capsule capsule)
// Valore di ritorno: bool, true=interseca
public bool IntersectsCapsule(Capsule capsule, out Vector3 delta)
Rileva se una capsula interseca il collider della nuvola di punti, comunemente usato per il rilevamento delle collisioni del character controller. Il secondo overload restituisce il vettore di penetrazione.
| Parametro | Tipo | Descrizione |
|---|---|---|
capsule | Capsule | Capsula |
delta | out Vector3 | Vettore di penetrazione |
Note:
- I dati devono contenere nodi Collider e
Renderer.SetColliderEnable(true)deve essere chiamata prima.
Esempio:
var capsule = new Capsule(footPos, headPos, 0.3f);
if (lccManager.IntersectsCapsule(capsule, out Vector3 delta))
{
characterController.Move(delta);
}
Effetti visivi
TriggerVFX
public void TriggerVFX(Vector3 vfxOriginW, int vfxid = 0)
Attiva un effetto visivo nella coordinata mondo specificata, espandendosi verso l'esterno da quella coordinata.
| Parametro | Tipo | Descrizione |
|---|---|---|
vfxOriginW | Vector3 | Origine della coordinata mondo dell'effetto |
vfxid | int | ID dell'effetto, predefinito 0 |
Note:
- Deve essere chiamata dopo che la scena LCC ha terminato il caricamento.
Esempio:
lccManager.TriggerVFX(hitPoint, 0);
Query sulle istanze
GetAllRenderers
// Valore di ritorno: List<Renderer>, una copia di tutte le istanze Renderer registrate
public List<Renderer> GetAllRenderers()
Ottiene l'elenco di tutte le istanze Renderer attualmente registrate (restituisce una copia).
Esempio:
var renderers = lccManager.GetAllRenderers();
foreach (var r in renderers) { /* ... */ }