PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [OpenGL Beleuchtung] Wie bekomme ich diesen Effekt hin?


MartinB
2012-05-28, 01:29:24
Ich schreibe gerade ein kleines Programm in OpenGl und würde gerne Objekte mit einer ähnlichen Beleuchtung wie in folgendem Screenshot darstellen:

http://2.bp.blogspot.com/-h4fEjLdsUyQ/Tvsam8-CJlI/AAAAAAAAAho/GiiKzeqJzLs/s1600/23tut_08.png

Also diesen leichten überstrahlten, Gips-artigen Look der Gebäude und weiche Schatten.

Momentan sieht es bei mir so aus:
http://666kb.com/i/c45xoi2ot13l7dufu.jpg
(und selbst das ist getrickst, denn die Seitenflächen werden einfach nur etwas dunkeler gezeichnet)

Ich habe leider relativ wenig Erfahrung mit OpenGL und wäre über jede Hilfe dankbar :).

MartinB
2012-05-28, 03:34:17
Ich habe nun analog zu diesem Beispiel (http://nehe.gamedev.net/tutorial/radial_blur__rendering_to_a_texture/18004/) eine Art Fake-Bloom für die Deckflächen der Gebäude eingebaut. Ich rendere also die Deckflächen seperat, speicher diese in eine Textur und skaliere die Textur so, dass ein Blur entsteht. Die Textur lege ich dann wieder über die eigentliche Szene.

Mein aktueller Stand:
http://666kb.com/i/c460viukjdpqmb0pm.png

Das Problem sieht man relativ gut: Die Deckflächen die natürlich von anderen Gebäuden verdeckt werden, werden drücker gezeichnet. Jemand eine Idee wie ich das löse? :) Man könnte ja jedes einzelne Objekt seperat in ne Textur rendern und nacheinander auf die Szene setzen. Wäre das aber nicht höllisch ineffizient?

Gast
2012-05-28, 08:33:54
ich hab mir jetzt nicht genau durchgelesen, wie das in deinem link beschrieben ist, aber nach deiner aussage hört es sich sehr ähnlich zu dem an, was ich einst gemacht habe:

1. die gesamte szene wird mit einer eigenen textur in ein FrameBufferObject gerendert. Die texturen der objekte dienen nur dazu die bereiche des überstrahleffekts zu definieren. sprich bei dir wären nur die dächer der gebäude mit einer weißen textur versehen, der rest der szene ist schwarz.
2. den inhalt des FBOs legst du nun auf ein quad, das die größe des bildschirms besitzt. auf dieses quad kannst du einen gauß-filter anwenden, der die szene bloomt.
3. nun kannst du die tatsächliche szene mit den realen texturen rendern und die zuvor gebloomte szene mit der realen überblenden. der überblendeffekt entsteht dann nur an den dächern, da nur dort die weiße textur gebloomt wurde.

MartinB
2012-05-28, 09:34:15
Ja, das problem ist aber das nun alle Dächer angezeigt werden, auch die, die eigentlich von anderen Gebäuden verdeckt werden:

http://666kb.com/i/c46a0qf7gay53buje.png

AnarchX
2012-05-28, 09:51:52
Bei Mirrors Edge, auch in dem Bild oben, wurde Global Illumination eingesetzt.

Gast
2012-05-28, 12:14:20
Ja, das problem ist aber das nun alle Dächer angezeigt werden, auch die, die eigentlich von anderen Gebäuden verdeckt werden:

http://666kb.com/i/c46a0qf7gay53buje.png

das kann bei der von mir beschriebenen methode gar nicht passieren, da die szene das erste mal ganz normal gerendert wird nur eben mit anderen texturen. deshalb verdecken sich die objekte auch korrekt und es kommt nur zu einem leichten (gewünschten) überlappungseffekt einzig und alleine durch das blurren des gauß-filters.

del_4901
2012-05-28, 13:18:49
Ja, das problem ist aber das nun alle Dächer angezeigt werden, auch die, die eigentlich von anderen Gebäuden verdeckt werden:

http://666kb.com/i/c46a0qf7gay53buje.png
Da musst du Z- bzw. Depth-Testing benutzen.

ENKORE
2012-05-29, 00:48:20
Sieht mir auch nach SSAO aus...

Niall
2012-05-30, 09:26:22
Also für mich sieht das nach vorberechnetem GI aus, welches auf die Geometrie gemapped ist. Simplifiziert kann man wohl ’ne helle gerichtete Quelle für das Sonnenlicht mit Bloom + leicht bläuliches »Gegenlich« welches keine Schatten wirft und die GI faked nutzen.