Presentazione di SLIM: modelli interattivi leggeri e scalabili
Sfruttare la potenza dei compositi di rendering leggero per creare mondi più vasti e dettagliati per ogni dispositivo

Roblox ospita milioni di esperienze, dai semplici minigiochi a vasti mondi aperti ricchi di risorse 3D ad alta fedeltà. Il nostro obiettivo è supportare le esperienze sempre più dense e complesse che i creatori immaginano su un'ampia gamma di dispositivi degli utenti, il che richiede innovazione nel nostro motore, nei sistemi di distribuzione dei contenuti e nell'infrastruttura. Scalable Lightweight Interactive Models, o SLIM, è una parte di uno sforzo di sviluppo in più fasi che consente ai creatori di realizzare le loro grandi visioni artistiche senza compromettere le prestazioni.
SLIM consente ai creatori di creare automaticamente rappresentazioni leggere di qualsiasi oggetto in un'esperienza Roblox, riducendo al minimo il numero di draw call, triangoli e istanze di modelli di dati richiesti dal client per rendere un mondo solido e senza soluzione di continuità. SLIM offre al nostro modello di streaming nuovi e potenti modi per ottimizzare i contenuti, consentendo a un utente con un PC da gioco di fascia alta e a un utente con un dispositivo mobile di fascia bassa di condividere la stessa esperienza alla massima fedeltà che il loro dispositivo è in grado di gestire.

Senza streaming di istanze e SLIM | Con streaming delle istanze e SLIM | |
Istanze del modello dati client | 159.745 | 92.536 |
Triangoli | 20M | 3,35 milioni |
Chiamate di disegno | 2.402 | 1.454 |
I due pilastri dello streaming: istanze e risorse
Quando guardi un film sul tuo servizio di streaming preferito, il tuo dispositivo non scarica l'intero file prima di iniziare la visione. Scarica solo i dati sufficienti per consentirti di iniziare immediatamente a guardare, quindi scarica continuamente (o bufferizza) i secondi successivi in modo che non ci siano interruzioni nell'esperienza. Se stai guardando in streaming su un dispositivo di fascia bassa o con una connessione lenta, la piattaforma si adatta automaticamente inviandoti una versione a bassa fedeltà del contenuto mentre scarica dati sufficienti per lo streaming del contenuto ad alta fedeltà.
Roblox utilizza un concetto simile per lo streaming dei contenuti al volo, ma i dati necessari per rappresentare una simulazione 3D ad alta fedeltà presentano delle sfide specifiche. Mentre un video ha una sequenza temporale lineare di contenuti visualizzati da un'unica prospettiva, le esperienze di Roblox contengono vasti mondi 3D interattivi ricchi di molti tipi di risorse che possono essere visualizzate da diverse prospettive controllate dall'utente. Se a questo aggiungiamo 151,5 milioni di utenti attivi al giorno che giocano, esplorano e, in definitiva, riproducono in streaming contenuti da un'ampia varietà di dispositivi, emerge un enorme potenziale per l'ottimizzazione delle modalità di distribuzione e visualizzazione dei contenuti.1
Tutto ciò che un utente vede su Roblox — un'auto, un albero, un avatar o un edificio — è rappresentato come una serie di istanze all'interno del motore. Un'auto utilizzabile, ad esempio, è suddivisa in istanze per i paraurti, le portiere, le ruote e così via. Ogni istanza è costruita nell'esperienza utilizzando più risorse, come mesh 3D, texture, animazioni e audio.
Quasi tutto lo streaming su Roblox è suddiviso in due tecnologie principali: lo streaming delle istanze e lo streaming delle risorse.
- Lo streaming delle istanze determina quali istanze il dispositivo di un utente deve trasmettere. Non è necessario trasmettere parti dell'esperienza che l'utente non può ancora vedere o con cui non può ancora interagire. Nell'esempio sopra riportato, solo le istanze che rappresentano gli edifici vicini vengono trasmesse al client.
- Lo streaming delle risorse determina la qualità delle istanze trasmesse. Non è necessario scaricare una texture 4K ad alta risoluzione per una montagna così lontana che l'utente non può distinguerne i dettagli. Nell'immagine sopra, gli edifici in lontananza e quelli che occupano una piccola porzione dello schermo utilizzano mesh decimati e texture a risoluzione inferiore.
Il cervello centrale di questa operazione è un sistema che chiamiamo Harmony, che monitora le risorse disponibili di ogni utente ad ogni fotogramma. Harmony regola sia lo streaming delle istanze che quello delle risorse per fornire la migliore esperienza in base alla memoria del dispositivo, al carico della GPU e della CPU e alla larghezza di banda della rete. Per un PC da gioco di fascia alta, Harmony porta tutto alla massima qualità. Per un dispositivo mobile con una connessione debole, ridimensiona automaticamente per mantenere fluida l'esperienza dell'utente.
Il team ha discusso della tecnologia alla base dello streaming, della transcodifica cloud e di SLIM nell'episodio 30 del podcast Tech Talks.
SLIM: Modelli interattivi leggeri e scalabili
L'idea alla base di SLIM è semplice ma potente: SLIM è in grado di creare automaticamente più rappresentazioni leggere e ottimizzate di qualsiasi oggetto o modello nel mondo di un creatore e di memorizzarle sul server per essere recuperate in fase di esecuzione. Il client di ciascun utente può quindi passare dinamicamente dal rendering delle istanze e delle risorse originali a una delle rappresentazioni leggere SLIM, in base alle risorse disponibili sul dispositivo.
SLIM utilizza due tecniche principali per generare una rappresentazione leggera:
1. Compositing
In primo luogo, SLIM combina più parti in un numero inferiore di parti. Invece di richiedere 112 mesh separate e 24 texture separate, l'auto qui sotto potrebbe richiedere solo una mesh e quattro texture nella sua rappresentazione leggera. Il processo di compositing è ottimizzato con precisione per corrispondere al modo in cui il motore renderà infine il contenuto, eliminando la geometria invisibile all'interno di un oggetto e riducendo il numero di draw call necessarie per renderizzarlo.

2. Livello di dettaglio (LoD)
Dopo aver composto il modello, SLIM genera più versioni con diversi livelli di dettaglio. Ciò significa creare versioni della mesh 3D con un numero significativamente inferiore di triangoli e generare texture a risoluzioni molto più basse, come facciamo con qualsiasi singola mesh o risorsa di texture utilizzando le tecniche LoD tradizionali. Queste tecniche possono essere ulteriormente ottimizzate quando applicate ai modelli SLIM, poiché disponiamo dei singoli sistemi di coordinate di ciascuna istanza sottostante. Questo ci fornisce il contesto completo di come il creatore intendeva che ciascuna di queste risorse fosse renderizzata insieme. Grazie a queste informazioni, SLIM ci permette di prendere decisioni più consapevoli su dove rimuovere i dettagli superflui e dove mantenere quelli che gli utenti noteranno.

La rappresentazione giusta al momento giusto
Una volta create più rappresentazioni di un oggetto, SLIM deve decidere quale utilizzare per il dispositivo di un utente specifico o se ricorrere invece alle tecniche di rendering tradizionali. Il sistema suddivide il mondo in tre regioni distinte. Un modo semplice per immaginare queste regioni è pensare a cerchi concentrici di dettaglio che si estendono verso l'esterno a partire dal lettore.

Regione HH (istanze pesanti, rendering pesante)
Nella regione HH, le istanze complete e pesanti vengono trasmesse in streaming dal server al modello di dati del client, e il client determina la rappresentazione specifica dell'asset da scaricare e renderizzare per ciascuna istanza. In questa regione è ancora possibile ottenere il ridimensionamento con i LoD delle mesh e i mip delle texture, ma non c'è compositing. Prima di SLIM, era così che veniva renderizzata ogni istanza trasmessa in streaming in un'esperienza.
Regione HL (istanze pesanti, rendering leggero)
La regione HL si trova tra le regioni HH e LL. In questa regione, il client dispone delle istanze pesanti nel modello di dati, ma può scegliere di eseguire il rendering utilizzando la pipeline di rendering completa o la pipeline SLIM. Questa regione si adatta per garantire una transizione senza soluzione di continuità tra le regioni HH e LL anche se l'utente incontra una latenza di rete. Il punto di transizione tra le regioni HH e HL è dinamico, il che consente a Harmony di scalare immediatamente verso l'alto o verso il basso in risposta a un picco di risorse in entrambe le direzioni.
Regione LL (istanze leggere, rendering leggero)
Nella regione LL, il client trasmette in streaming solo rappresentazioni super-leggere delle istanze necessarie a definire un sistema di coordinate per un modello SLIM, insieme al minimo indispensabile di metadati. In questa regione vengono renderizzati solo modelli SLIM compositi leggeri, anziché ogni singola istanza e risorsa. La regione LL richiede un numero molto inferiore di triangoli e draw call e riduce l'utilizzo di memoria sul dispositivo dell'utente rispetto allo streaming di ogni istanza pesante e all'uso della pipeline di rendering tradizionale.
Questa tecnica di regione consente al client di renderizzare l'intero mondo visibile in ogni momento senza incorrere nel costo computazionale totale derivante dall'utilizzo simultaneo di ogni istanza e risorsa pesante. Gli oggetti lontani sono rappresentazioni altamente ottimizzate e leggere, che vengono sostituite dalle loro controparti ad alta fedeltà man mano che l'utente si avvicina. La capacità di SLIM di creare compositi e modelli LoD a scala multipla offre a Harmony più leve da azionare per ottimizzare la qualità delle risorse per il dispositivo di ciascun utente.
Quando tutto si combina, il giocatore dovrebbe sentirsi completamente immerso e non notare nessuno dei punti di transizione o i vari livelli di dettaglio.
Il futuro: quale sarà il futuro di SLIM?
SLIM è solo il primo passo di un percorso in più fasi e siamo entusiasti di vedere come i creatori integreranno questa tecnologia nei loro flussi di lavoro. Stiamo valutando di espandere SLIM in due direzioni principali in futuro.
Determinare cos'altro può essere ottimizzato con SLIM
Stiamo iniziando con i modelli statici che i creatori designano in Studio, ma in futuro SLIM sarà in grado di ottimizzare alcuni dei modelli più complessi su Roblox: gli avatar della piattaforma. Gli avatar, con tutte le animazioni associate, gli strati di abbigliamento e gli accessori, possono rappresentare una variabile imprevedibile per i creatori. Consentire l'applicazione di SLIM agli avatar significa che il motore può limitare efficacemente le risorse utilizzate da un singolo modello di avatar.
Alla fine, vogliamo dare ai creatori la possibilità di sfruttare SLIM per apportare modifiche ai modelli dinamici. Immaginate un modello in cui il server può apportare modifiche attivamente (ad esempio, una porta si apre o una parte viene distrutta), ma con alcuni accorgimenti intelligenti, il client può riutilizzare la stessa rappresentazione leggera.
Ottimizzazione della pipeline SLIM
Ora che disponiamo di una pipeline end-to-end che offre al motore una nuova dimensione di flessibilità, ci stiamo concentrando anche sul rendere la pipeline stessa più intelligente, veloce ed efficiente. Ciò include:
- Riorganizzazione delle texture: raggruppare in modo intelligente più texture del modello in un unico foglio di texture ottimizzato.
- Segmentazione automatica: utilizzo automatico della comprensione semantica e spaziale del mondo per identificare i modelli più adatti a SLIM.
- Rappresentazioni più leggere: per gli oggetti dinamici che dipendono meno dalla latenza, stiamo valutando la possibilità di generare rappresentazioni 2D che non richiedono praticamente risorse per il rendering sul client.
- SLIM gerarchico: annidamento dei modelli SLIM uno dopo l'altro in modo che interi gruppi di istanze possano essere semplificati e il motore possa selezionare dinamicamente tra i livelli di granularità, ad esempio da un singolo albero a una foresta fino a un'intera massa continentale piena di foreste e altri oggetti.
- Aumento della risoluzione: oggi ci concentriamo sull'ottimizzazione verso il basso per le prestazioni, ma molto presto questo stesso sistema ci consentirà di aumentare la risoluzione delle risorse per l'hardware futuro, mantenendo l'intento artistico originale del creatore. Questa nuova architettura significa che, man mano che il nostro motore migliora nella simulazione della realtà, possiamo aggiornare continuamente le rappresentazioni che utilizza.
SLIM, in combinazione con Harmony e il resto della nostra architettura di streaming e distribuzione dei contenuti, rappresenta un enorme passo avanti nella nostra visione di supportare mondi più vasti e dettagliati per un numero maggiore di giocatori. La stretta integrazione tra il nostro motore, la distribuzione dei contenuti e l'infrastruttura cloud, unita all'enorme base di contenuti proveniente da milioni di creatori, ci permette di costruire sistemi profondamente interconnessi che migliorano l'esperienza complessiva. Man mano che il nostro motore migliora nella simulazione della realtà, possiamo aggiornare continuamente le rappresentazioni che utilizza. Oggi ci stiamo concentrando sull'ottimizzazione per le prestazioni, ma molto presto questo stesso sistema ci consentirà di aumentare la risoluzione delle risorse per l'hardware futuro, mantenendo l'intento artistico originale dei creatori.
Stiamo costruendo una piattaforma che non solo rispetta tale intento artistico, ma è anche in grado di distribuire in modo intelligente e automatico le loro creazioni a qualsiasi utente su un'ampia varietà di dispositivi ovunque Roblox sia disponibile. Non vediamo l'ora di vedere cosa realizzerà la community con questa piattaforma.



