Domanda

Ehi ragazzi, sto rendendo una vecchia geometria da un vecchio gioco. Il loro cliente aveva un po 'di algoritmo che ha permesso loro di vedere quali aree erano nelle vicinanze, ma non ho questa capacità, quindi sto cercando di abbattere i poligoni inutili. Attualmente, sto rendendo ogni singolo poligono nell'intera zona, indipendentemente dal fatto che io possa vederlo o no, indipendentemente dal fatto che sia anche nella gamma visiva. Ovviamente questo è completamente inefficiente. La mia domanda:

Che tipo di abbattimento dovrei cercare di usare. So di poter abbattere i poligoni non nel Fustum e questo aiuterà ad alleviare un po 'del carico, ma sarei in grado di dire, scegliere di non rendere poligoni che sono una certa distanza dalla fotocamera? Come si chiama? Sto anche usando nebbia in alcune aree. La stessa domanda va. Posso trovare un modo in cui posso abbattere tutto ciò che è dietro la nebbia, area che non riesco a vedere.

Grazie: uno screenshot di questo lavoro in corso. Alcune persone possono riconoscerlo :) Inoltre, ignorano i colori brutti per le foglie. Non ho tenuto conto del mascheramento di alfa.

Immagine: http://i.stack.imgur.com/duc2i.png

È stato utile?

Soluzione

Ci sono due cose diverse da considerare: vuoi solo guardarlo correttamente, cioè la rimozione della superficie nascosta? Quindi semplici test di profondità faranno il lavoro; Il sovraccarico è che elabori la geometria che non ce la fa affatto sullo schermo. Tuttavia, se questo è un (molto) vecchio gioco, hai preso i dati, è molto probabile che una mappa completa con tutte le sue risorse abbia meno poligoni, rispetto a ciò che è visibile nei giochi moderni su uno screenfull. In tal caso non eseguirai alcun problema di prestazione.

Se ti imbatti davvero in problemi di prestazioni, dovrai trovare un equilibrio su quanto tempo vuoi dedicare, determinare ciò che (non)) visibile e renderlo effettivamente. 10 anni fa era ancora fondamentale essere quasi pixel perfetti per risparmiare il più tempo possibile. Le GPU moderne hanno così tanta potenza di riserva, che è sufficiente fare una selezione grossolana di cosa includere nel rendering.

Questi calcoli sono tuttavia completamente al di fuori dell'ambito di OpenGL o di qualsiasi altra API di rasterizzazione 3D (ad es. Direct3D) - il loro compito è solo disegnare triangoli sullo schermo usando metodi di rasterizzazione sofisticati; Non esiste una gestione degli oggetti, nessuna funzione di livello superiore. Quindi sta a te implementare questo.

L'approccio tipico sta usando una struttura di suddivisione spaziale. Sono più popolari Alberi kd, Octrees e Alberi BSP. Gli alberi BSP sono spazialmente molto efficienti, ma più pesanti nel calcolo. Personalmente preferisco una combinazione ibrida/di KD Tree e Octree, poiché sono facili da modificare per seguire i cambiamenti dinamici nella scena. Gli alberi BSP sono molto più pesanti da aggiornare (di solito richiede una ricomputazione completa).

Data una tale strutturazione spaziale è molto facile determinare se un punto si trova in una specifica regione di interesse. È anche molto semplice selezionare nodi nell'albero con vincoli geometrici, come gli aerei. Ciò rende molto facile l'implementazione di un fustum grossolana grossolana: si utilizza i piani di ritaglio di Fustum per selezionare tutti i nodi dall'albero all'interno dei piani. Per semplificare la vita delle GPU, potresti voler ordinare i nodi vicino a lontano; Ancora una volta la struttura dell'albero ti aiuta lì, poiché puoi sistemare in modo ricorsivo l'albero, risultando in una complessità O (N) quasi ottimale (N)).

Se hai ancora bisogno di migliorare le prestazioni di rendering, è possibile utilizzare le divisioni spaziali definite dall'albero, per (invisibilmente) rendering geometria di test in a query di occlusione, prima di ricorrere al sottosuolo limitato dai limiti testati.

Altri suggerimenti

So di poter abbattere i poligoni non nel Fustum e questo aiuterà ad alleviare un po 'del carico, ma sarei in grado di dire, scegliere di non rendere poligoni che sono una certa distanza dalla fotocamera? Come si chiama?

Questo è già fatto dal sé di Fustum. Il piano lontano imposta un limite di distanza della telecamera sull'oggetto da rendere.

Dai un'occhiata a glfrustum.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top