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.
Mostra / nascondi livelli (gruppo di oggetti dello stesso tipo) in base alla grandezza (scala di visualizzazione).
Metodo basato sulla geomeria algebrica, chiamato generalizzazione (che è un algoritmo per semplificare i poligoni). guarda la seguente immagine
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 / zero = infinito a 1/50
- 1/50 a 1/100
- 1/100 a 1/1000
- 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.