Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 08:03

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Volumennebel
BeitragVerfasst: Fr Okt 21, 2011 10:56 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Moinsen,

ich versuche gerade meine Beleuchtungsengine ein wenig zu verbessern. Ich rendere ja meine Lichtkegel indem ich Quads + Shader (Schatten und Beleuchtung) als Kegel rendere. Sieht auch wirklich gut aus. Nun wollte ich vorbeiziehende Nebelschwaden damit multiplizieren.. Doch das Problem ist die Perspektive. Aktuell hab ich einfach komplett über die Szene eine Nebeltextur drüberziehen lassen, doch diese ändert sich ja nicht mit der Camera..

Wie könnte man sowas gescheit lösen? Ich dachte schon an mehrere "unsichtbare" quads eins auf X, Y, und Z ebene wo über all die Textur in eine Richtung drüber läuft, doch das sieht bestimmt komisch aus..

Jemand eine Idee?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Volumennebel
BeitragVerfasst: Fr Okt 21, 2011 12:04 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
spontan:
ich würde für jeden Nebel ein Polyeder konstruieren und im Shader kucken ob und wie weit mein Punkt im Nebel ist.....
Textur koordinaten kannst du dann im shader aus der Position deines Punktes und der Zeit errechnen ... sollte ziehmlich schön Random aussehen :P

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Volumennebel
BeitragVerfasst: Fr Okt 21, 2011 15:51 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
mhh kannst du das bisschen mehr erläutern? Kann mir grad überhaupt nicht vorstellen wie das aussehen bzw funktionieren soll?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Volumennebel
BeitragVerfasst: Fr Okt 21, 2011 17:57 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Irgendwie muss das doch mit ner 3D Nebeltextur machbar sein oder?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Volumennebel
BeitragVerfasst: Fr Okt 21, 2011 19:24 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Ich hab' sowas vor eingier Zeit mal gemacht. Theoretisch wäre es am physikalisch korrektestem, wenn man für jeden Pixel einen Strahl durch ein 3D Textur schickt und die dabei getroffenen Texel zusammenrechnet um die Dichte des Nebels zu erhalten. Allerdings ist das ein bischen aufwändig.

Bei mir hab' ich es deshalb so gemacht:
Der Nebel hat ein bestimmte Position im Raum, die per Uniformvariablen an den Shader übertragen wird.
Aus der Kameraposition kann man die Position im Nebelvolumen errechnen, wodurch man 3D-Texturkoordinaten erhält.
Für jedes Pixel nimmt man dann die Richtung im Worldspace und berechnet in welche Richtung es in der Nebeltextur zeigt (beide können gleich sein, wenn die Nebeltextur an den Achsen ausgerichtet ist).
Aus der Position und der Richtung wird dann mithilfe eines konstanten Kreisradius ein weiterer Punkt in der Textur berechnet. Somit erhält man eine Punkteschar die auf einem Kreis in der Textur um die Texturkoordinaten der Kameraposition liegt.
Diese Punkte entsprechen den Texturkoordinaten die man für die Dichte des Nebels an der Stelle nimmt. Außerdem kann man entweder aus einer weiteren Textur oder der Position im Nebelvolumen eine lokale Abschwächung berechnen (z.B. wenn man nah am Rand des Nebels ist).

Das ganze funktioniert allerdings nur, wenn man selbst im Nebel ist. Für Positionen außerhalb verwende ich einfach einen Punkt auf der Oberfläche des Nebelvolumens um die Texturkoordinaten zu errechnen. Beim Übergang von innen nach außen werden dann beide Werte interpoliert.

Leider sieht der 2te Teil noch nicht ganz so gut aus.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Volumennebel
BeitragVerfasst: Sa Okt 22, 2011 12:38 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
mhhh das ganze hört sich ziemlich aufwändig an. Hauptaugenmerk bei meiner Animation liegt bei der Beleuchtung (>200 Spotlights mit Schatten etc). Da darf der Nebel nicht viel kosten und sollte vielmehr eine optische verbesserung darstellen.

Andere Progs kriegen das auch ohne große performanceeinbußen hin.. also irgendwie muss das machbar sein. Ich dachte schon an ein paar vorbeiziehende Pointsprites, aber hab noch nicht ganz zuende gedacht...

Hier mal ein Bildchen wie es aktuell aussieht
Dateianhang:
Unbenannt-1.jpg


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Volumennebel
BeitragVerfasst: Sa Okt 22, 2011 23:04 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Bild sieht schick aus. Aber Schatten hast du deaktiviert, oder? (Fussboden)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Volumennebel
BeitragVerfasst: So Okt 23, 2011 15:20 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
ne Schatten sind an, sieht man bei dem bild nur bissl doof.... Irgendwelche Ideen bzgl. dem Nebel?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Volumennebel
BeitragVerfasst: Mo Okt 24, 2011 08:03 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
also ... dein Nebel befindet sich ja höchstwahrscheinlich in einen primitiven Volumen (z.B. ein Polyeder), die Ebenen davon kannst du
als Parameter an deinen Shader übergeben. Da du ja für jeden Pixel auf dem Bildschirm die Position weißt überprüfst du nun ob der
betroffene Pixel im Volumen liegt (einfach überprüfen ob er für jede Ebene auf der Rückseite? liegt). Ist ein Pixel in diesen Volumen so
errechnet sich der Alphakanal deines Nebels aus dem geringsten Abstand zu den Ebenen. Für die eigentliche Farbe des Nebels zeichnest du
am besten ein Fraktal in eine Textur und machst dann sowas in der Art hier:
Col = Texture2D(Fraktal, normalize(Pixel.pos).xy*sin(Zeit));

Alternativ kannst du auch davon ausgehen das Nebelvolumen und Lichtkegel gleich sind wodurch du wieder was einsparst, hättest dann aber
Probleme wenn der Nebel und Lichtquelle sich unabhängig voneinander bewegen sollen.

Eine weitere Methode wäre es einen extra Renderpass für Partikel anzulegen und diesen zu Beleuchten....

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Volumennebel
BeitragVerfasst: Mo Okt 24, 2011 11:12 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Also ich hab jetzt einfach mal Versucht meinem Lichtkegel direkt die Nebeltextur zuzuweisen, diese Bewegt sich richtung der Lichtquelle. Die Textur wird dann mit dem Licht im Shader multipliziert und siehe da es sieht wirklich realistisch aus.... Auf einer Bühne weht der Nebel ja auch nicht überall in eine Richtung, denn die Maschinen stehen ja überall rum, von daher ist das auch realistisch..

Hätte ja mal ein Bild gepostet aber das wirkt nur in echtzeit wenn der nebel vorbeizieht :D

Mercie für eure Hilfe


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Volumennebel
BeitragVerfasst: Mo Okt 24, 2011 11:33 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
das problem ist dabei aber das dein Nebel nicht nur vom Lichtkegel angeleuchtet wird....
sondern du auch eine indirekte beleuchtung hast...

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Volumennebel
BeitragVerfasst: Mo Okt 24, 2011 12:01 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
indirekte Beleuchtung wie meinst du das? Es ist nur da licht wo der Lichtkegel ist und auch nur da siehst den vorbei ziehenden Nebel.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Volumennebel
BeitragVerfasst: Mo Okt 24, 2011 14:46 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Thmfrnk hat geschrieben:
indirekte Beleuchtung wie meinst du das? Es ist nur da licht wo der Lichtkegel ist und auch nur da siehst den vorbei ziehenden Nebel.


Weiß ja nicht wie realistisch du das ganze halten willst, aber in der Natur ist es so das ein Teil des Lichtes immer
absorbiert und ein anderer Teil reflektiert wird (stell dir einfach eine Wand als kurzsichtigen Spiegel vor :P) von daher wird
ein Teil deines Nebels immer sichtbar sein, egal ob er direkt angestrahlt wird oder nicht da er immer ein paar photönchen
abgebekommt.

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]