Hai bisogno di consigli per il motore grafico basato su BSP 3D [chiuso]


8

Mi sono codificato un visualizzatore OpenGL BSP per un vecchio formato di gioco. È molto simile al formato di file di Quake 3. Poiché il mio interesse è lo sviluppo di motori grafici, voglio svilupparmi mentre guardo utilizzando la tecnologia attuale. Quindi mi rivolgo a voi, esperti in materia, per la direzione su cosa focalizzare. Vorrei che questo fosse il più veloce possibile e considerando che i vecchi formati di file sono molto semplici e hanno pochi poligoni, penso che dovrebbe essere fattibile. Ecco le mie domande:

  1. Illuminazione a. Ha senso per me imparare l'illuminazione dei vertici o devo semplicemente implementare l'illuminazione per pixel? b. So che OpenGL ha un limite di 8 luci. Dovrei realisticamente usare solo uno di quelli per la luce ambientale e il resto del computer tramite shader? In caso contrario, cosa devo fare?

  2. Ordinamento / abbattimento a. Qual è l'algoritmo più veloce utilizzato più comunemente per il rendering delle superfici di ordinamento. La complessità non è davvero un problema. Voglio imparare ciò che viene attualmente utilizzato e i modi per rendere veramente solo le cose che posso vedere. Ho visto una serie di algoritmi descritti come l'algoritmo del pittore e mi chiedo cosa abbia più senso per la geometria basata su BSP. b. Se ho trame con maschere alfa, mi è stato detto che l'ordinamento ha una sorta di coinvolgimento con questo processo. Come posso consentire loro di eseguire il rendering correttamente nello spazio 3d?

  3. Pipeline grafica a. Devo inviare i miei dati geometrici tramite VBO? È questo lo standard usato oggi? b. Se ho un certo numero di "regioni", forse 200-300, dovrei trovare un modo migliore per inviarle alla GPU senza inviare 200-300 blocchi. Dovrei combinarli in uno e mantenere un riferimento associato a ciascuno.

Qualche altro suggerimento per il rendering basato su BSP e cose del genere?

Inoltre, se ho detto qualcosa che non era corretto, per favore correggimi. Sono quella persona che preferirebbe essere corretta e leggermente imbarazzata che ignorante e inconsapevole.

Grazie per il tuo tempo. Lo apprezzo davvero.


Pensi di inserire tutti i triangoli della tua scena nel BSP, anche quelli dinamici come personaggi animati o oggetti in movimento? Un BSP non è molto buono quando si tratta di oggetti dinamici.
Maik Semder,

Non ho tempo per un commento completo al momento, ma dai un'occhiata a icculus.org/twilight/darkplaces/technotes.html e non esitare a saltare su #darkplaces su irc.anynet.org e porre a LordHavoc / altri le tue domande .
user_123abc

Risposte:


1

Se sei - come dici tu - interessato alla tecnologia attuale :

1) Illuminazione: illuminazione per pixel, sicuramente. Se vuoi guardare il rendering della generazione attuale, ti occuperai di scrivere vertici e pixelhader. Semplice come quella. Offrono una flessibilità quasi illimitata e non sono molto più difficili da usare rispetto alla pipeline a funzione fissa, se inizi a impararli correttamente. Il limite di 8 luci di OpenGL è applicabile solo per configurazioni di tubazioni a funzione fissa vecchio stile. Non seguire questa strada, impara OpenGL Core e dimentica tutte le cose datate glBegin / glEnd.

2) Ordinamento / abbattimento: per iniziare: ordinare solo se è necessario per la trasparenza. Taglia solo oggetti che si trovano all'esterno del frustum visivo.

3) Se stai usando OpenGL, usa VBO e VAO.

-

Non richiesto: se stai realizzando un visualizzatore per un formato BSP vecchio stile (sospetto qualcosa da un motore Valve / ID?) Dovresti essere in grado di cavartela con l'intero livello senza alcun tipo di ottimizzazione (abbattimento / bsp ) e ottenere ancora framerate completo su hardware moderno;)

Suggerimento OpenGL: ottieni la 5ª edizione di OpenGL Superbible. Questo ti insegnerà come fare il moderno OpenGL e non offuscherà la tua mente con cose che scoprirai in seguito obsolete.


-3

1.a L'illuminazione per vertice è più semplice dell'illuminazione per pixel (l'illuminazione per vertice è integrata in OpenGL, l'illuminazione perpixel richiede uno shader personalizzato).

1.b Se hai otto luci, usale! Tuttavia, dovrai calcolare quali luci sono visibili.

3.a Utilizzare VBOS. Non usare mai glBegin / glEnd (a meno che non utilizzi gli elenchi di visualizzazione, ma nella tua situazione i VBO sono la soluzione migliore)

3.b Non dovresti preoccuparti delle prestazioni mentre il programma è ancora in fase di sviluppo. Soprattutto con l'hardware di oggi. Quindi, invia i tuoi 200-300 pezzi.

Non conosco abbastanza bene le mappe BSP per aiutarti con le tue altre domande.


3
-1 per 3.b. Odio il mantra "Non preoccuparti delle prestazioni" che viene applicato in modo errato a tutto. Ha il suo posto, come in non perdere il 50% del tempo di sviluppo per far funzionare qualcosa più veloce del 2%. Ma quando si progettano sistemi più grandi, è bene avere un piano efficiente. I dati inviati alla GPU in 200-300 blocchi probabilmente causeranno un inutile lavoro della CPU e della GPU rispetto a se fossero inviati come un unico blocco.
Attaccando

@AttackingHobo +1
Jonathan Connell
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.