Domanda

Mentre leggevo RedBook sono rimasto abbastanza confuso, che openGL può avere un massimo di 8 luci nella scena (numero a seconda della realizzazione, ma dovrebbe essere arround 8).

Ma posso immaginare il numero di situazioni che avrebbe bisogno di più luci, quindi penso che ci sia un trucco arround questo gioco dev.

Per esempio, è necessario molto tempo per strada con 50 strretlights, o si può avere squadra di 20 popoli tutti usando torce elettriche. Come in realtà simulare queste situazioni? C'è un problema, che iluminates luce solo la parte di rete, non intero cono tra sorgente e oggetto, quindi se non abbiamo 100% aria pulita, ci deve essere una sorta di simulazione anche. Qual è il modo in cui questo viene fatto, e il gioco gira liscio? (Ho letto anche che l'attivazione di tutte le 8 luci potrebbe uccidere FPS)

È stato utile?

Soluzione

8 luci è la limitazione della pipeline di GL fisso, in cui si abilita ciascuno di essi, modalità di impostazione, parametri, ecc Ora avete pixel shader, e l'illuminazione avviene entro shader. Ci si può utilizzare gran numero di dinamici (non cotto in texture) luci. Hai solo bisogno di fornire parametri di tutte queste luci sufficiente (forse, in una texture), e test di quante luci tuo shader è in grado di elaborare. Inoltre, in Shader è possibile abbattere le luci troppo deboli (che contribuiscono troppo poco in valore del pixel) o solo quelli troppo lontani.

Aggiornamento: lo shader complesso con ramificazioni possono anche generare luci (si pensi lunga strada o albero di Natale). Potrebbe essere più efficiente di fornitura gran numero di parametri.

Altri suggerimenti

L'illuminazione è un argomento molto complesso in computer grafica.

Ciò che veramente importa è, naturalmente, l'illuminazione oggetto, emulando l'illuminazione mondo reale o l'effetto che stanno prendendo di mira. L'ambiente di illuminazione potrebbe essere composta da molte fonti in modo da approssimare il reale effetto che stiamo cercando di realizzare.

attuazione illuminazione OpenGL sono luci dinamiche, che sono astrazione punto luce che permette di "luce" (cioè, dare un colore) per vertici resi (che sono usati per rendere triangoli). ... il vertice è illuminato, ottenere il contributo di colore per ogni luce.

Come lei ha ricordato, il processo di rendering prendere più tempo più luci che ha permesso. Per ridurre al minimo questo, avete diverse possibilità.

  • abbattimento leggera (incluse luci che contributo è piccolo per cambiare il colore), e questo è determinato utilizzando le proprietà della luce (distanza, cono, attenuazione, punto di vista e oggetti ostruiscono).
  • illuminazione statico, che utilizza texture per l'illuminazione emulare su oggetti che non si muove mai.

OpenGL fissato illuminazione contribuisce al colore dei vertici, che viene interpolata con altri colori al vertice per rasterizzare triangolo. Nel caso la geometria è composto da poche triangoli, non è possibile vedere qualsiasi cono di luce all'interno di ogni triangolo, perché il colore del suo frammento sono il risultato dell'interpolazione di tre colori (i tre vertici).

Per ottenere un'illuminazione più precisa, il software determina ogni colore frammento (pixel) (illuminazione pixel) nello stesso modo in un vertice si colora di luci, ma come si può capire, ci potrebbero essere più pixel rispetto vertici. Un approccio è quello di calcolare (utilizzando shader o un'estensione OpenGL) contributo della luce per ogni pixel della geometria durante la fase di rasterizzazione, o determinare il colore di pixel con illuminazione differito.

illuminazione differite utilizza più trame (corrispondente alla finestra) per memorizzare parametri luci per ciascun pixel visualizzato. In questo modo si esegue il calcolo luce dopo che l'immagine è prodotta, determinando pixel contributo luce una volta per ogni pixel, anziché una volta per ogni pixel geometria.

Uno dei trucchi che verranno utilizzati nei giochi è quello di simulare la luce con una texture.

Quindi, nella tua strada ad esempio luce, le zone "Lit" sarà effettivamente un'immagine più luminosa texture. Solo le luci più vicine saranno fonti di luce per ottenere gli effetti corretti.

Ci sono approcci simili in cui texture semitrasparenti o texture con un cono trasparente sono sovrapposti la scena per dare lo stesso effetto.

Non dimenticate che per calcolare il ombre ecc mezzi in tempo reale che la scena deve essere resa dal punto di vista della luce per calcolare l'intensità della luce in qualsiasi posizione. Così per 8 luci si sta renderizzando la scena (o parti della scena) fino a 8 volte prima in realtà rendendo la scena per la visualizzazione. Anche se questo è fatto sulla GPU anziché dalla CPU è molto costoso.

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