heightmaps
Con una mappa di altezza, memorizzi solo il componente di altezza per ciascun vertice (di solito come trama 2D) e fornisci posizione e risoluzione una sola volta per l'intero quad. La geometria orizzontale viene generata per ogni fotogramma utilizzando lo shader della geometria o la tassellatura hardware. Le mappe altimetriche rappresentano il modo più rapido per archiviare i dati di paesaggio per il rilevamento delle collisioni.
Professionisti:
Utilizzo della memoria relativamente basso : è necessario memorizzare solo un valore per vertice e nessun indice. È possibile migliorarlo ulteriormente utilizzando mappe di dettaglio o un filtro antirumore per aumentare i dettagli percepiti.
Relativamente veloce : lo shader della geometria per le mappe di altezza è piccolo e funziona veloce. Tuttavia, non è veloce come il terreno della geometria.
Sui sistemi senza accelerazione 3D basata su triangoli, le mappe di altezza in marcia del raggio sono il modo più veloce per eseguire il rendering del terreno. Questa era definita grafica voxel nei giochi più vecchi.
LOD / terreno dinamico : è possibile modificare la risoluzione della mesh generata in base alla distanza dalla telecamera. Ciò causerà la geometria mobile se la risoluzione scende troppo (circa 0:40), ma può essere utilizzata per effetti interessanti.
Facile generazione / creazione del terreno : le mappe altimetriche possono essere facilmente create combinando le funzioni di rumore come il frattale Perlin Noise e gli editor delle mappe di altezza sono veloci e facili da usare. Entrambi gli approcci possono essere combinati. Sono anche facili da lavorare in un editor.
Fisica efficiente : una posizione orizzontale è mappata direttamente (generalmente) da una a quattro posizioni in memoria, quindi le ricerche geometriche per la fisica sono molto veloci.
Contro:
Esattamente un'altezza per coordinata x / y : di solito non possono esserci buchi nel terreno o scogliere a strapiombo.
Meno controllo : puoi controllare l'altezza precisa di ciascun punto se la dimensione della griglia corrisponde alle coordinate della trama.
Artefatti : se i quattro vertici che definiscono un quadruplo secondario non sono sullo stesso piano, la divisione tra i due vertici diventerà visibile. Questo di solito accade su ripide scogliere con bordi che non seguono una direzione cardinale.
Le mappe altimetriche sono di gran lunga il modo più efficiente per eseguire il rendering del terreno e sono utilizzate in molti giochi più recenti che non si basano su caratteristiche del terreno avanzate e dispongono di ampie aree esterne. Wikipedia ha un elenco di programmi che usano le mappe di altezza , ma non sono sicuro che ciò significhi che li usano solo come risorse o anche per il rendering, quindi qui alcuni giochi che potrebbero usarli:
Causa giusta 2: le regioni sono caricate in settori quadrati e non ci sono buchi nel terreno. Nella demo, c'è un buco profondo con triangoli allungati lungo i bordi dove normalmente ci sarebbe un edificio. (L'area è normalmente inaccessibile, ma ci sono mod per rimuovere alcune delle limitazioni della demo ...)
Sims 2 ( forse ): il terreno del quartiere è caricato come heightmap, ma ci sono buchi in cui sono posizionati i lotti (siti di costruzione). Tuttavia, ci sono manufatti tipici se crei molte scogliere ed è abbastanza noioso aggiungere una cantina a una casa (e nascondere la scogliera sotto una veranda).
Giochi con motore a valvole di Valve: i pennelli rettangolari (geometria a livello statico) possono avere un terreno in altezza sulle loro facce. In questi giochi, le solite stranezze sono spesso nascoste con altri pennelli o oggetti di scena.
È impossibile dirlo con certezza senza guardare gli shader perché ogni terreno della mappa di altezza può essere reso come mesh.
voxel
Il terreno Voxel memorizza i dati del terreno per ciascun punto in una griglia 3D. Questo metodo utilizza sempre la maggior quantità di spazio di archiviazione per i dettagli significativi della superficie, anche se si utilizzano metodi di compressione come oculari sparsi.
(Il termine "motore voxel" è stato spesso usato per descrivere un metodo per tracciare le altezze del terreno in marcia dei raggi comuni nei vecchi giochi 3D. Questa sezione si applica solo ai terreni memorizzati come dati voxel.)
Professionisti:
Dati 3D continui : i Voxel sono praticamente l'unico modo efficiente per archiviare dati continui sulle caratteristiche del terreno nascosto come le vene minerali.
Facile da modificare : i dati voxel non compressi possono essere modificati facilmente.
Funzioni avanzate del terreno : è possibile creare strapiombi. I tunnel sono senza soluzione di continuità.
Interessante generazione di terreno : Minecraft lo fa sovrapponendo funzioni di rumore e pendenze a caratteristiche del terreno predefinite (alberi, sotterranei). (Leggi Terrain Generation, Parte 1 nel blog di Notch per maggiori informazioni. Non c'è parte 2 al 05.8.2011.)
Contro:
Lento : per eseguire il rendering dei dati voxel, è necessario utilizzare un ray tracer o calcolare una mesh, ad esempio con cubi in marcia (ci saranno artefatti). I voxel vicini non sono indipendenti per la generazione di mesh e gli shader sono più complicati e di solito producono geometrie più complesse. Il rendering dei dati voxel con LOD elevato può essere molto lento.
Enormi requisiti di archiviazione : l'archiviazione dei dati voxel richiede molta memoria . Per questo motivo spesso non è possibile caricare i dati voxel in VRAM, poiché per compensarli dovresti usare trame più piccole, anche su hardware moderno.
Non è pratico usare voxel per giochi che non si basano su caratteristiche voxel come il terreno deformabile, ma in alcuni casi può consentire interessanti meccaniche di gioco. I motori Voxel sono più comuni nei vecchi giochi , ma ci sono anche esempi più recenti:
Motore Atomontage : rendering Voxel.
Worms 4: usa "poxels". Secondo Wikipedia è un mix di voxel e poligoni.
Minecraft: utilizza voxel per rappresentare il terreno nella RAM, la grafica è grafica poligonale. Si tratta principalmente di software calcolato però.
Terraria: un esempio per voxel 2D. Non so come venga visualizzato.
Voxels combinati con la fisica : non un gioco. ma mostra bene il potenziale di distruzione.
Voxatron : un gioco che utilizza voxel per quasi tutta la grafica, inclusi menu e HUD.
maglie
Le mesh poligonali sono il modo più flessibile e preciso per archiviare e rendere il terreno. Sono spesso utilizzati nei giochi in cui sono necessari un controllo preciso o funzionalità avanzate del terreno.
Professionisti:
Molto veloce : devi solo fare il solito calcolo di proiezione nello shader di vertice. Non è necessario uno shader di geometria.
Molto preciso : tutte le coordinate sono memorizzate individualmente per ciascun vertice, quindi è possibile spostarle orizzontalmente e aumentare la densità della mesh in punti con dettagli più fini.
Basso impatto sulla memoria : ciò significa anche che la mesh di solito avrà bisogno di meno memoria di una mappa heighmap, poiché i vertici possono essere più radi nelle aree con caratteristiche meno piccole.
(Vedi Rete irregolare triangolata su Wikipedia).
Nessun artefatto : la mesh viene resa così com'è, quindi non ci saranno problemi o bordi strani.
Funzioni avanzate del terreno : è possibile lasciare buchi e creare strapiombi. I tunnel sono senza soluzione di continuità.
Contro:
Povero LOD dinamico : possibile solo con mesh pre-calcolate. Ciò causerà "salti" quando si passa senza dati aggiuntivi per mappare i vertici vecchi e nuovi.
Non facile da modificare : la ricerca di vertici che corrispondono a un'area da modificare è lenta.
Non molto efficiente per il rilevamento delle collisioni : diversamente dalle altezze e dai dati voxel, l'indirizzo di memoria per una determinata posizione di solito non può essere calcolato direttamente. Ciò significa che la fisica e la logica di gioco che dipendono dall'esatta geometria della superficie funzioneranno molto più lentamente rispetto agli altri formati di archiviazione.
Il terreno poligonale viene spesso utilizzato nei giochi che non hanno grandi aree aperte o che non possono utilizzare il terreno della mappa in altezza a causa della sua mancanza di precisione e sporgenze. Non ho un elenco, ma ne sono abbastanza sicuro
ogni 3D Zelda e
ogni gioco di Mario 3D
Usa questo.
Altri metodi
È possibile creare un terreno interamente nella pipeline dello shader. Se l'algoritmo viene eseguito solo nel frammento / pixel shader, i dettagli possono essere praticamente illimitati mentre l'impatto della memoria è quasi zero. Gli aspetti negativi ovvi non hanno quasi alcun controllo sulla forma e sui problemi quando la fotocamera interseca la superficie di rendering originale. È ancora utile nei giochi spaziali in cui i giocatori non interagiscono con la superficie di un pianeta. Le animazioni dei parametri funzionano meglio con questo tipo di terreno.
Dovrebbe essere possibile scaricare la geometria del terreno generata dalla scheda grafica per usarla per il resto del motore di gioco, ma non so come siano le prestazioni di questo o se questo è stato fatto finora.
Conclusione
Non esiste un metodo che funzioni bene per ogni scenario, ma è abbastanza facile sceglierne uno per un determinato compito:
Le mappe altimetriche sono la soluzione migliore se non hai bisogno di sporgenze o buchi nella superficie del terreno e usi fisica o terreno dinamico. Sono scalabili e funzionano bene per la maggior parte dei giochi.
Le mesh hanno la massima precisione e possono descrivere sporgenze, fori e tunnel. Usali se hai un terreno complesso che non cambia spesso.
I Voxel sono buoni per descrivere terreni molto dinamici con molte caratteristiche complesse. Evitare di renderizzarli direttamente in quanto richiedono grandi quantità di memoria ed elaborazione.
Altri metodi possono essere migliori di uno qualsiasi dei precedenti se non devi interagire con il terreno o hai bisogno di una grafica molto dettagliata. Di solito funzionano solo per scenari molto specifici.
È possibile combinare metodi diversi per ottenere funzionalità da più di uno, ad esempio tessellando il terreno mesh con una mappa di altezza per aumentare la struttura dei dettagli di una scogliera.
La generazione dinamica del terreno è ampiamente utilizzata nella simulazione spaziale procedurale e alcuni sono diventati molto avanzati negli ultimi anni . I forum di questi progetti dovrebbero avere alcune risorse sull'argomento.