Con Unreal Engine 5 e tecnologie come Nanite, la quantità di geometria gestita in tempo reale è cresciuta enormemente. Modelli composti da milioni di triangoli possono essere visualizzati senza ricorrere ai tradizionali livelli di dettaglio preparati manualmente.
Quando però entra in gioco il ray tracing, la situazione si complica.
Un ray tracer deve poter interrogare rapidamente tutta la geometria della scena per determinare dove un raggio incontra una superficie. Per farlo utilizza strutture di accelerazione, normalmente organizzate come BVH e suddivise in BLAS e TLAS (qui si trova una breve spiegazione)
Queste strutture funzionano bene, ma diventano costose da costruire e aggiornare quando la scena contiene una quantità enorme di geometria dinamica.
È proprio qui che entra in gioco RTX Mega Geometry.
Più geometria, senza ricostruire tutto
Mega Geometry non è una nuova tecnica di illuminazione e non va confusa con DLSS (qui ne avevamo già parlato)
Il suo obiettivo è rendere più efficiente la gestione della geometria utilizzata dal ray tracing, soprattutto nelle scene molto complesse.
Uno degli elementi chiave è la suddivisione delle mesh in piccoli cluster di triangoli. In Vulkan NVIDIA introduce per questo scopo le Cluster Level Acceleration Structures, o CLAS.
L’idea è semplice: invece di gestire una mesh composta da milioni di triangoli come un unico blocco, la scena viene suddivisa in unità più piccole.
Se una parte della geometria cambia, non è quindi necessario ricostruire tutto.
Questa maggiore granularità si presta bene a sistemi di LOD dinamico, tessellation, displacement e geometria procedurale, ma soprattutto alla geometria virtualizzata.
Il collegamento con Nanite
Nanite rappresenta probabilmente il caso d’uso più interessante.
Unreal Engine può visualizzare mesh estremamente dettagliate selezionando dinamicamente solo la geometria necessaria. Il ray tracing, però, può utilizzare una rappresentazione più semplice della stessa mesh, chiamata Fallback Mesh.
Questo significa che il modello visibile sullo schermo e quello utilizzato per calcolare riflessi e ombre possono avere livelli di dettaglio differenti.
Mega Geometry punta a ridurre questa distanza, permettendo al ray tracing di lavorare con una quantità molto maggiore della geometria originale.
In pratica, i raggi possono “vedere” una scena più simile a quella realmente visualizzata dal giocatore.
LOD e streaming anche per il ray tracing
L’organizzazione a cluster permette inoltre di applicare al ray tracing principi già comuni nella rasterizzazione moderna.
Non tutta la geometria deve essere presente al massimo dettaglio e non tutto deve essere residente contemporaneamente nella VRAM.
I cluster possono essere selezionati in funzione del livello di dettaglio necessario e caricati quando servono.
Lo stesso principio vale per le acceleration structures: se in una scena enorme cambia soltanto una piccola parte degli oggetti, diventa molto più efficiente aggiornare solo quella porzione anziché ricostruire l’intera struttura.
È un cambiamento importante perché sposta il problema del ray tracing dalla semplice capacità di eseguire test di intersezione alla capacità di organizzare e aggiornare enormi quantità di geometria in pochi millisecondi.
Gears of War: E-Day sarà il primo banco di prova
Una delle prime applicazioni videoludiche di RTX Mega Geometry sarà Gears of War: E-Day.
Il titolo utilizza Nanite e sfrutterà Mega Geometry per aumentare il dettaglio geometrico utilizzato nei calcoli ray traced (qui l’annuncio ufficiale)
Elementi come vegetazione, detriti, rocce o piccoli dettagli degli oggetti potranno quindi contribuire in maniera più accurata a ombre e riflessi.
È probabilmente questo il modo migliore per interpretare la tecnologia: Mega Geometry non aggiunge dettaglio ai modelli, ma permette al ray tracing di utilizzare meglio il dettaglio che esiste già.
Perché è una tecnologia interessante
Dal punto di vista tecnico, Mega Geometry è interessante soprattutto per la direzione che indica.
Le scene future continueranno a diventare più complesse, mentre rasterizzazione e ray tracing dovranno lavorare sempre più spesso sulla stessa geometria virtualizzata.
Non sarà quindi sufficiente avere GPU capaci di tracciare più raggi. Serviranno sistemi efficienti per costruire, aggiornare e trasmettere le strutture geometriche necessarie al ray tracing.
Cluster, streaming, aggiornamenti locali e LOD dinamico sembrano destinati a diventare una parte sempre più importante di questa pipeline.
NVIDIA parla della possibilità di gestire fino a 100 volte più triangoli ray traced in alcuni scenari basati sulla geometria a cluster. Non significa ottenere cento volte più FPS: significa rendere gestibile una complessità geometrica molto più elevata.
Ed è forse questo l’aspetto più interessante di RTX Mega Geometry: non cerca semplicemente di rendere più veloce il ray tracing, ma di prepararlo alle scene di nuova generazione.
Per approfondire
Per chi vuole entrare nei dettagli tecnici, consiglio soprattutto queste risorse:
- NVIDIA, RTX Mega Geometry e Vulkan samples
https://developer.nvidia.com/blog/nvidia-rtx-mega-geometry-now-available-with-new-vulkan-samples/ - NVIDIA, Mega Geometry e OptiX 9
https://developer.nvidia.com/blog/fast-ray-tracing-of-dynamic-scenes-using-nvidia-optix-9-and-nvidia-rtx-mega-geometry/ - Khronos, VK_NV_cluster_acceleration_structure
https://docs.vulkan.org/features/latest/features/proposals/VK_NV_cluster_acceleration_structure.html - Epic Games, Nanite Virtualized Geometry
https://dev.epicgames.com/documentation/en-us/unreal-engine/nanite-virtualized-geometry-in-unreal-engine - NVIDIA, RTX Mega Geometry SDK
https://github.com/NVIDIA-RTX/RTXMG


