Licht/Beleuchtung

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
antisteo
Establishment
Beiträge: 941
Registriert: 15.10.2010, 09:26
Wohnort: Dresdem

Licht/Beleuchtung

Beitrag von antisteo »

Hallo,

es geht mir um gwX (http://www.youtube.com/watch?v=P2dZSylZVAI):

Es wird immer mehr nach Beleuchtung gefragt. Allerdings ist das Thema Beleuchtung sehr speziell und bereitet vor allem Probleme, weil gwX ja eine Engine ist, die praktisch jeden Spielinhalt und somit auch jeden Aufbau einer Szene erlaubt.

Mit zusätzlichen Lichtern wären zum Beispiel Fackeln in Höhlen, Feuer (das neben Partikeln auch noch Licht aussondern soll) oder Scheinwerfer von gewissen Fahrzeugen gemeint. Zur Zeit ist gwX mit einer klassischen Render-Engine aufgebaut, jedoch gibt es auch anschaltbar eine Engine mit Deferred Shading. Diese kann allerdings keine Partikel korrekt darstellen :S

Deshalb die Frage:
- Für welche Lichttypen entscheide ich mich? Punktlichter sind wohl am besten
- Wie viele Lichter pro Szene? Soll ich eine harte Obergrenze definieren und das in die Shader reincoden
- Oder doch eine Lösung für die Partikel finden und die Deferred Shading Rendering Engine wieder aufpäppeln?
- Oder einfach den Netzwerkcode und die Objektrepräsentation schnappen und in eine andere Engine einpflanzen?
http://fedoraproject.org/ <-- freies Betriebssystem
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
Benutzeravatar
Zudomon
Establishment
Beiträge: 2273
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: Licht/Beleuchtung

Beitrag von Zudomon »

Einfache Antwort: Alle Lichttypen für maximal 1.000.000.000 Lichtquellen pro Szene. Das sollte den Anforderungen genügen. Global Illumination vorausgesetzt!
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: Licht/Beleuchtung

Beitrag von Artificial Mind »

Zur Lichtanzahl: kannst du ruhig in den Shader reincoden, da sich die Anzahl der Lichter in einem Renderpass nicht ändert ist das bei einigermaßen modernen Grafikkarten kein Unterschied zur hardcoded Schleife (getestet mit einer 9800 GT: kein Unterschied ob die Schleifengrenze statisch oder von einem uniform abhängt (in OGL))

Zum Deferred Shading und Partikel: Du hast nach dem DS immer noch den Tiefenbuffer und kannst die Partikel einfach im Nachhinein per normalen Rendering reinzeichnen (vorher halt sortieren nach Tiefe, musste aber normal auch)
Benutzeravatar
dot
Establishment
Beiträge: 1746
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Licht/Beleuchtung

Beitrag von dot »

Ich würd mir sehr überlegen ob sich Deferred Shading bei dieser Art von Szene auszahlt. Draußen hast du erstmal nur eine Lichtquelle, nämlich die Sonne. Wieviele Lichter willst du denn supporten?
Deferred Shading ist kein Allheilmittel, sondern nur ein anderer Tradeoff mit seinen eigenen Problemen. Du sparst zwar am Vertexprocessing, bezahlst aber massiv mit Speicherbandbreite. Außerdem heißt es ja nicht notwendigerweise entweder oder, man kann natürlich auch beides verwenden...
antisteo
Establishment
Beiträge: 941
Registriert: 15.10.2010, 09:26
Wohnort: Dresdem

Re: Licht/Beleuchtung

Beitrag von antisteo »

dot hat geschrieben:Ich würd mir sehr überlegen ob sich Deferred Shading bei dieser Art von Szene auszahlt. Draußen hast du erstmal nur eine Lichtquelle, nämlich die Sonne. Wieviele Lichter willst du denn supporten?
So viele, wie der Szenarienersteller braucht. Außerdem haben eventuell bewegliche Objekte wie Fahrzeuge zusätzlich eigenes Licht.
Deshalb ist die Frage: wir organisiere ich das? Man will die Lichter ja meistens lokal begrenzen. Dann müsste ich für jedes Objekt alle vorhandenen Lichter in der Nähe in die Uniforms schreiben und deren Anzahl in den Shader packen.
Was ist die praktikable Obergrenze im Sinne von: Was schafft die Grafikkarte? Oder soll ich einfach die Obergrenze per Schieberegler einstellen lassen und je nach eingestelltem Wert werden zu viele Lichtquellen ignoriert?
http://fedoraproject.org/ <-- freies Betriebssystem
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
Benutzeravatar
Schrompf
Moderator
Beiträge: 5161
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Licht/Beleuchtung

Beitrag von Schrompf »

Das kannst Du Dir aussuchen. Das alles setzt ja voraus, dass Du Dich für einen Forward Renderer entscheidest. Dann rechne mal durch, was Du an Daten pro Lichtquelle brauchst, und schau, wieviele Lichtquellen Du gleichzeitig im Konstantenspeicher des PixelShaders unterbringen kannst. Ich vermute, ein paar Dutzend bekommst Du unter. Dann bestimmst Du, ob Du im Shader die Lichteranzahl dynamisch oder statisch festlegen willst. Statisch geht auch auf älteren Grafikkarten. Dann kannst Du überlegen, ob Du notfalls Multipass für weitere Lichtquellen rausholst oder die kleinsten Lichtquellen weglässt.

Das alles sind aber eher Designentscheidungen als Technik-Entscheidungen. Sprich: Du solltest Dir zuerst klar werden, was Du willst. Nur zu sagen: "meine Engine soll alles können" ist nämlich keine Aussage, mit der man arbeiten kann. Und die ganze Überlegung zerlegt sich eh, wenn Du danach überlegst, wie man den Lichtern Schatten verpassen könnte.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Zudomon
Establishment
Beiträge: 2273
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: Licht/Beleuchtung

Beitrag von Zudomon »

Genau! Schatten und indirektes Licht nicht vergessen! Und wenn die Lichtquellen eh nicht dynamisch sind, dann kann man sie backen... ob per Objekt, per Vertex, per Texel, dass musst du entscheiden. ;)
antisteo
Establishment
Beiträge: 941
Registriert: 15.10.2010, 09:26
Wohnort: Dresdem

Re: Licht/Beleuchtung

Beitrag von antisteo »

Dann müsste ich ja den Scripter auch noch dazu zwingen, Lichtquellen zu spezifizieren, ob sie statisch oder dynamisch sind.
http://fedoraproject.org/ <-- freies Betriebssystem
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: Licht/Beleuchtung

Beitrag von Artificial Mind »

antisteo hat geschrieben:Dann müsste ich ja den Scripter auch noch dazu zwingen, Lichtquellen zu spezifizieren, ob sie statisch oder dynamisch sind.
Oder das runtime selbst analysieren ... Wenn eine Lichtquelle mehr als ca. 100 frames lang nicht bewegt wurde wird sie als statisch angenommen und bekommt gebackene maps. Oder irgendwas schlaueres
Antworten