Rasterizzazione Tiled: l'altro percorso di rasterizzazione di LCC2
La pipeline LCC2 offre due metodi di rasterizzazione, selezionati tramite la proprietà Rasterizer sull'Actor: il predefinito Pipeline usa la pipeline di rendering del motore stesso, mentre Tiled usa un percorso compute basato su tile implementato dal plugin.
Tiled è attualmente sperimentale e appartiene all'edizione Pro. Diventa effettivo solo dopo la registrazione di un App Key, vedere Edizioni e licenze.
Nella maggior parte delle scene dense aumenta sensibilmente la frequenza dei fotogrammi, ma il guadagno dipende dal contenuto dell'immagine e da dove si trovi il collo di bottiglia. In alcune scene il guadagno è ridotto, in altre non c'è alcuna variazione. Dopo averlo abilitato, confermare il risultato con una misurazione, come descritto in Valutare se è utile. Non dare per scontato che sia sempre più rapido.
Nota: «tile» indica qui i riquadri di pixel dello schermo, cosa differente dal «rendering a blocchi» descritto in Rendering, che carica i nodi in base alla visibilità dalla camera. Il primo decide come vengono disegnati i dati già presenti in memoria video, il secondo decide come i dati entrano in memoria video. Sono indipendenti e possono essere attivi contemporaneamente.
Differenze tra i due metodi di rasterizzazione
| Pipeline (predefinito) | Tiled | |
|---|---|---|
| Rasterizzazione | Affidata alla pipeline di rendering del motore; ogni splat viene espanso in un quad e il motore riempie i pixel | Dispatch compute personalizzato del plugin; gli splat visibili vengono prima distribuiti nei tile dello schermo, poi ombreggiati e composti tile per tile |
| Ordinamento | Un unico ordinamento globale su tutti gli splat visibili | Ordinamento segmentato per tile dello schermo; ogni segmento ordina solo gli splat che ricadono in quel tile |
| Maturità | Il percorso predefinito di lunga data | Sperimentale |
| Licenza | Disponibile nell'edizione gratuita | Edizione Pro |
Il guadagno arriva da due punti: l'ambito dell'ordinamento si restringe da globale a un singolo tile dello schermo, e i pixel vengono elaborati solo nei tile che li coprono effettivamente, cosa che riduce il riempimento sprecato nelle aree sovrapposte.
Il guadagno è quindi legato al contenuto dell'immagine: è evidente quando la densità degli splat è alta e la sovrapposizione su schermo è forte, e non si osserva alcuna variazione quando l'immagine è rarefatta oppure quando il collo di bottiglia della frequenza dei fotogrammi non sta, in partenza, nell'ordinamento e nel riempimento dei pixel.
Il risultato visivo è identico in entrambi i casi. Cambiare Rasterizer non richiede altre modifiche di parametri e non influisce sul caricamento dei dati, sul LOD, sui volumi di taglio, sull'illuminazione né sulle impostazioni del colore.
Come abilitarlo
Nella categoria XGrids del pannello Details dell'Actor, impostare Rasterizer su Tiled. La proprietà si trova subito dopo Render Mode e compare solo quando Render Mode è 3DGS.
Chiamare il setter da Blueprint o C++:
LCC2Component->SetRasterizer(ELCC2Rasterizer::Tiled);
Esistono due getter, con scopi differenti:
| Metodo | Valore restituito |
|---|---|
GetRasterizer() | La scelta memorizzata nel pannello |
GetEffectiveRasterizer() | La rasterizzazione effettivamente in uso, con il controllo della licenza applicato |
Usare GetEffectiveRasterizer() per confermare che il percorso di rendering passi davvero per Tiled.
Valutare se è utile
Poiché il guadagno non è garantito, misurare prima e dopo il cambio. Il metodo corrisponde a quello della Guida alle prestazioni:
- Fissare le condizioni di test: stessa vista o stesso percorso della camera, stessa risoluzione e stesso Screen Percentage, ogni altro parametro invariato.
- Eseguire prima un passaggio di riscaldamento per tenere fuori dai valori la prima compilazione degli shader e la prima lettura da disco.
- Registrare il tempo per fotogramma della GPU con
Pipelineusandostat unitcome riferimento. - Modificare solo
Rasterizere misurare di nuovo la stessa vista. - Ripetere su alcune viste rappresentative, in particolare sulle immagini con gli splat più densi e la sovrapposizione più forte.
Se il tempo per fotogramma della GPU non cala, il collo di bottiglia attuale è fuori dall'ambito coperto da questo percorso. Mantenere Pipeline e continuare a individuare il vero collo di bottiglia con la guida alle prestazioni.
Ambito
| Voce | Note |
|---|---|
| Pipeline | Solo la pipeline LCC2. ALCCActor (.lcc) non ha questa proprietà |
| Formati | .lcc2 / .sog / .spz / .ply funzionano tutti |
| Modalità di rendering | Solo la modalità 3DGS. La modalità nuvola di punti ignora la proprietà e usa sempre Pipeline |
| Motore e RHI | Lo stesso ambito di supporto del plugin stesso; funzionano sia D3D12 sia Vulkan |
| Viste multiple | Rendering stereo VR, nDisplay, split screen e SceneCapture sono tutti supportati |
Comportamento senza licenza
Impostare Rasterizer su Tiled senza un App Key registrato non provoca errori né fallimenti di caricamento. Il percorso di rendering ripiega automaticamente su Pipeline. La scelta memorizzata nel pannello non viene mai sovrascritta, quindi diventa effettiva appena la licenza è registrata, senza bisogno di impostarla di nuovo.
Per capire se Tiled sia davvero in uso, leggere il valore restituito da GetEffectiveRasterizer(): in caso di ripiego restituisce Pipeline, mentre GetRasterizer() restituisce ancora Tiled.
Nota: verificare che la licenza sia valida prima del packaging per la release, altrimenti l'output pacchettizzato segue il comportamento dell'edizione gratuita e usa Pipeline.
Quando mantenere Pipeline
- È in uso la modalità di rendering a nuvola di punti. Lì la proprietà non ha effetto, quindi non c'è nulla da impostare.
- Sono caricati dati
.lcc. La pipeline LCC non ha questo percorso. - Progetti in edizione gratuita.
Tiledripiega comunque, quindi il valore predefinito è più chiaro. - La misurazione non mostra alcun miglioramento del tempo per fotogramma.
- Il progetto è entrato nella validazione per la consegna, dove è meglio evitare un percorso sperimentale.
Tiled abbassa il costo della fase di rendering; non riduce il lavoro di caricamento e attraversamento. Quando il collo di bottiglia sta sul lato del caricamento dei dati, affrontare prima caricamento e LOD con la Guida alle prestazioni.