Qual è lo stato dell'arte nel LOD geometrico nei giochi?


15

In che modo i giochi moderni fanno il livello di dettaglio della geometria per le maglie degli oggetti come personaggi, terreno e fogliame? Ci sono due parti della mia domanda:

  1. Che aspetto ha la pipeline delle risorse? Gli artisti realizzano un modello high-poly che viene successivamente decimato? In tal caso, quali algoritmi di decimazione sono più popolari? Le maglie LOD sono talvolta fatte a mano?
  2. In che modo i motori effettuano la transizione tra diversi LOD di oggetti in fase di esecuzione? Ci sono transizioni fluide o progressive?

La risposta potrebbe essere "studi diversi usano tecniche diverse". In tal caso, identificare alcune delle pratiche più comuni. Sarebbe anche bello se potessi indicarmi whitepaper / diapositive che trattano esempi specifici.


1
I progressi di SIGGRAPH 2014 nel rendering in tempo reale hanno un discorso davvero interessante sulle superfici di suddivisione di call of duty. Si dovrebbe controllare. Invece di avere una maglia in poliestere alta che è resa in poli inferiore, hanno definito le forme analiticamente e hanno aggiunto più triangoli se necessario
Alan Wolfe,

Qui possiamo parlare dello stato dell'arte degli algoritmi LOD e delle strutture di dati, ma se la domanda riguarda come i giochi moderni lo fanno in modo specifico, potresti avere più fortuna a chiedere in gamedev.se: gamedev.stackexchange.com
Pseudonym

3
Ne dubito. Lo sviluppatore del gioco è molto leggero da un punto di vista grafico. Per lo più si tratta di domande su unità e java con alcune domande sul percorso e sulla frequenza dei fotogrammi fissi: p
Alan Wolfe,

1
@Alan, Activision ha usato un sacco di algoritmo all'avanguardia per creare un vero gioco strategico 3D non sn base isometrica Sprite di cui io sono d'accordo, ma hanno fatto un ottimo lavoro in COD, ma è ancora un po 'pigro e pigro anche ai primi livelli con un numero limitato di risorse (sto parlando del loro gioco mobile su un Iphone 5s). Penso che devi imparare le funzionalità degli esperti OpenGLES e i livelli sottostanti per riuscire a scrivere un gioco del genere.
Iman,

Sto parlando della loro versione console di call of duty nel caso in cui lo risolva.
Alan Wolfe,

Risposte:


22

Per la geometria LOD, la maggior parte dei giochi passa semplicemente da un numero di mesh LOD predefinite. Ad esempio "Infamous: Second Son" utilizza 3 mesh LOD ( Adrian Bentley - "inFAMOUS: Second Son engine postmortem", GDC 2014 ) e "Killzone: Shadow Fall" utilizza 7 mesh LOD per personaggio ( Michal Valient - "Killzone: Shadow fall demo postmortem ", Devstation2013 ). Molti di questi sono generati, ma quelli più importanti (come il personaggio principale) possono essere fatti a mano. Le mesh sono spesso generate utilizzando un popolare middleware Simplygon, ma a volte sono semplicemente generate da artisti grafici nel loro pacchetto 3D preferito.

I giochi con una grande distanza di sorteggio utilizzano inoltre impostori per fogliame, alberi ed edifici alti ( Adrian Bentley - "inFAMOUS: Second Son engine postmortem", GDC 2014 ). Impiegano anche LOD gerarchici, che sostituiscono un insieme di oggetti con uno. Ad esempio in "Just Cause 2" gli alberi vengono prima resi singolarmente come normali mesh LOD, quindi individualmente come impostori e infine come una singola mesh di foresta unita ( Emil Persson, Joel de Vahl - "Population a Massive Game World", Siggraph2013 ) e in "Sunset Overdrive" parti distanti del mondo sono sostituite da una singola mesh generata automaticamente offline ( Elan Ruskin - "Streaming Sunset Overdrive's Open World", GDC2015 ).

Un altro componente di un sistema LOD è la semplificazione di materiali e shader. Ad esempio "Killzone: Shadow Fall" disabilita lo spazio tangente e la mappatura normale per i LOD distanti ( Michal Valient - "Killzone: Shadow fall demo postmortem", Devstation2013 ). Questo di solito viene implementato disabilitando a livello globale un set di funzionalità shader per LOD, ma per i motori con grafici shader, in cui gli artisti possono creare shader personalizzati, questo deve essere fatto manualmente.

Per le transizioni LOD alcuni giochi cambiano semplicemente mesh e altri usano il dithering per transizioni LOD fluide - con l'interruttore LOD vengono renderizzate due mesh: prima si dissolvono gradualmente e poi si attenua ( Blog di Simon schreibt - "Assassins Creed 3 - LoD Blending" ). Le tecniche classiche di mesh progressiva della CPU non vengono utilizzate in quanto richiedono un costoso aggiornamento della mesh e il caricamento su GPU. La tessellazione hardware viene utilizzata in alcuni titoli, ma solo per il perfezionamento di un LOD più dettagliato, poiché è lento e in generale non può sostituire i LOD con geometria predefinita.

I LOD del terreno sono gestiti separatamente per sfruttarne le proprietà specifiche. Il LOD della geometria del terreno viene di solito implementato usando le clipmap ( Marcin Gollent - "Creazione e rendering del paesaggio in REDengine 3" ). I LOD del materiale del terreno sono gestiti in modo simile ai LOD mesh o usando una sorta di trama virtuale Ka Chen - "Rendering adattivo della trama virtuale in Far Cry 4 .

Infine, se sei interessato a vedere pipeline LOD di giochi reali, consulta la documentazione di uno dei motori di gioco moderni: Unreal Engine 4 - "Creazione e utilizzo di LOD" , CryEgnine - Static LOD e Unity - LOD .


1
i motori di gioco di solito hanno una serie di metodi predefiniti e non è possibile accedere al core per modificare effettivamente l'algoritmo LOD. ho ragione? Stavo parlando del caso in cui stai scrivendo un gioco con OpenGL o SpriteKit framework, non so se si è in grado di personalizzare l'algoritmo di LOD in Unity o Unreal, è possibile?
Iman,

3

LOD (Livello di dettaglio) indica la gestione di oggetti in diverse scale di visualizzazione, che potrebbero essere divise in due parti. Tuttavia, è possibile utilizzarne uno e ciò sarebbe sufficiente per la maggior parte dei casi.

  1. Mostra / nascondi livelli (gruppo di oggetti dello stesso tipo) in base alla grandezza (scala di visualizzazione).

  2. Metodo basato sulla geomeria algebrica, chiamato generalizzazione (che è un algoritmo per semplificare i poligoni). guarda la seguente immagine

    generalizzazione

Il metodo più famoso ed efficiente per generalizzare (semplificare) una mesh poligonale è noto come teorema del poliedro di Descartes-Eulero (equazione 4.5 scusate se mi riferisco a un libro, che era il migliore che posso fare) ed è usato dalla maggior parte dei database spaziali ad esempio i moduli PostGIS in PostgreSQL. Rimuove semplicemente i lati più piccoli di un poligono e ne crea uno molto arrotondato. (Sopra l'immagine)

Per implementare LOD in un gioco è necessario salvare e gestire la scala della mappa (scena) durante le operazioni di ingrandimento / riduzione. La scala cambia da zero a infinito e devi dividerlo in un determinato numero di intervalli, ad esempio qualcosa del genere:

  1. 1 / zero = infinito a 1/50
  2. 1/50 a 1/100
  3. 1/100 a 1/1000
  4. 1/1000 a 1 / infinito = 0

Quindi è necessario definire quali tipi di oggetti (livelli) devono essere visibili o invisibili in ciascuno degli intervalli sopra indicati. Ad esempio un piccolo tipo di oggetto come una valvola idrante non dovrebbe essere visibile quando l'utente si trova nel quarto intervallo perché sarà molto piccolo su quella scala e non può essere discriminato, quindi non importa se si salta disegnandolo sul schermo.

Pertanto, quando un utente utilizza lo zoom avanti e lo zoom indietro per modificare l'ingrandimento, si sposta attraverso i limiti di cui sopra dall'uno all'altro, e il gioco utilizza queste scale di visualizzazione per gestire il livello di dettagli mostrando o nascondendo oggetti sulla scena. Questo rende una soluzione discreta che gli oggetti svaniscono improvvisamente durante l'operazione di zoom indietro, tuttavia avendo le scale del display e gli intervalli di ingrandimento definiti attentamente, l'utente non sentirà nulla.

Il gruppo di 4 intervalli sopra riportato è solo un esempio ed è necessario trovare il meglio per il proprio caso per tentativi ed errori. Non esiste una regola per questo.

A volte i giochi usano i propri metodi LOD, Subway Surfer per un istante, mostra un rettangolo piccolo, senza trama per mostrare un edificio lontano, e avvicinandosi all'improvviso diventa trama, il giocatore lo sente. Non hai parlato del tuo sistema di proiezione, il che è molto importante e non hai parlato del tipo di gioco che stai creando.

Tuttavia supponiamo che tu stia implementando un gioco 3D completo con openGl e desideri filtrare alcune mesh prima di trasferirle su hardware grafico, sono sicuro che questo ti aiuterà a ridurre le operazioni di associazione / separazione con oggetti buffer e array di vertici (VBO, VAO) mentre trattare con OpenGl.

Usando solo una gestione dei livelli o semplicemente implementando la generalizzazione di Eulero

Nella maggior parte dei casi non è necessario implementare un algoritmo di generalizzazione e il filtraggio degli oggetti funziona e ti porta all'efficienza (frequenza di aggiornamento) di cui hai bisogno, tuttavia dipende totalmente, caso per caso. Sebbene sia un algoritmo semplice che rimuove solo i lati piccoli di un poligono, è necessario definire una soglia che è il prodotto della grandezza e un numero costante, quindi i lati più grandi vengono filtrati da un punto di vista molto più lontano.

Dimenticare la gestione dei livelli e implementare solo l'algoritmo di generalizzazione di Eulers, fornisce un metodo molto accurato e continuo in cui basta controllare ogni lato e linea rispetto a una soglia predefinita e mostrarli solo nel caso in cui siano abbastanza grandi da essere discriminati sullo schermo.

PS: l'ingrandimento è un numero float> 0 che è uguale a 1 / scala e la scala di solito è <1 poiché una scala 1: 1 significa che hai lunghezze del mondo reale nel tuo gioco.


Per favore, vota ancora, se è ancora un -1, considera di lasciare un commento per me
Iman,

Non ho espresso il mio voto negativo, ma una parte di me si chiede quale sia lo stato dell'arte qui? Quindi non posso nemmeno votare.
joojaa,

1
Ho effettuato il downgrade perché era difficile da leggere e IMHO non è rilevante per i LOD nei giochi. Dopo aver riconsiderato ho deciso di annullare il mio donwvote eseguendo l'upgrade e semplicemente aggiungendo la mia risposta.
Krzysztof Narkowicz,

Si suppone che lo stato dell'arte significhi un lavoro eccezionale, ma metodi diversi risultano in modo diverso in vari casi, ad esempio Call of duty ha la gestione e il mipmap dei livelli, tuttavia Dear haunting (DH 2014) usa lo sfondo con la parallasse e un mipmap che ha reso precedentemente generalizzato textures. Subway Surfer è una storia completamente diversa, e dico lo stato dell'arte a tutti loro, anche se Subway Surfer disegna discretamente edifici e altri oggetti urbani o Call of duty è un po 'lento durante lo zoom o la panoramica. Penso che siano tutti i migliori nel loro caso.
Iman,

3

Iman ha già preparato una risposta completa, ma vorrei aggiungere qualcosa

LOD può essere fatto in due modi diversi

  1. Continuo che si chiama CLOD ed è un'ottimizzazione della mesh poligonale
  2. Discreto quale quasi tutti gli algoritmi diversi dall'ottimizzazione della mesh poligonale, considerati in questo gruppo.

Ad esempio, il mipmap è buono, veloce ma pesante, che appartiene al gruppo secondo di cui sopra

qui puoi trovare una buona spiegazione per mipmap e codice di implementazione con OpenGl.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.