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

Aktuelle Zeit: Do Jul 10, 2025 15:55

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: HDR - "suppress LDR values"
BeitragVerfasst: Mi Dez 09, 2009 23:44 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Ich versuche gerade bei einem meiner Projekte Bloom durch richtiges HDR zu ersetzen, allerdings hab' ich ein logisches Problem beim unterdrücken der LDR Farben.
Bei dem Artikel der auch im Wiki verlinkt ist, gibt es da so eine Variante:
Code:
  1.  
  2. if( c.r > 1.0f || c.g > 1.0f || c.b > 1.0f )
  3.    return c;
  4. else
  5.    return float4( 0.0f, 0.0f, 0.0f, 0.0f );
  6.  

Allerdings müsste dann bei einem dunkler werdenden Farbverlauf doch deutlich eine Kante zu sehn sein, wenn der maximale Wert eines Farbkanals 1.0 unterschreitet. z.B. würde dann neben (1.0,1.0,1.0) schwarz liegen, sodass die Werte nicht mehr stetig sind. Weil das ganze noch geblurt wird, ist es keine richtige Kante, aber wenn sich die Helligkeit der Fläche langsam verringert, z.B. weil sich die Lichtquelle entfernt, würde an einem gewissen Punkt sprunghaft der HDR-Effekt verschwinden.

Die andere Möglichkeit, nämlich einfach von allen Farbkanälen 1.0 zu subtrahieren, verfälscht allerdings die Farben.
z.B. wenn eine Fläche die Farbe (2.0,1.0,0.0) hätte und vor einem schwarzen Hintergrund dargestellt wird, würde pures Rot über den Hintergrund leuchten, statt Orange.

Also hat da jemand eine elegante Lösung dafür, die keine so offensichtliches Schwächen hat. Ich zerbrech' mir nämlich den Kopf und alles hängt an den paar Zeilen Code.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: HDR - "suppress LDR values"
BeitragVerfasst: Mi Dez 09, 2009 23:53 
Offline
DGL Member

Registriert: Sa Mär 14, 2009 17:48
Beiträge: 99
Programmiersprache: D, Java, C++
Wie wärs wenn du alle Farbkanäle durch den höchsten Wert dividierst?

(2.0, 1.0, 0.0)
=> (1.0, 0.5, 0.0)

// Moment:
Bei dem Blur Effekt sollen doch nur die Hellen Bereiche "geblurt" werden, dass ist in dem Paper auch ganz gut verdeutlicht:
http://dl.dropbox.com/u/3086605/Papers/ ... OpenGL.pdf

Wieso sollte dort Plötzlich eine Kante entstehen? Angenommen das Licht entfernt sich langsam, so werden doch auch die Farbwerte nur langsam kleiner, dass sollte eigentlich schon so passen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: HDR - "suppress LDR values"
BeitragVerfasst: Do Dez 10, 2009 00:32 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Also wenn ich eine einfarbig weiße Fläche hab' und da mit einer Lampe draufleuchte die jetzt auch weiß ist, allerdings (2.0,2.0,2.0), sozusagen weißer als weiß, dann ist das reflektierte Licht erst 2.0 und wird dann immer weniger, wenn die Lichtquelle sich entfernt. Allerdings wenn dann das reflektierte Licht nur noch 1.0 ist, ist es nicht mehr größer als 1.0 ( :roll: ) sodass dann der Else-Zweig aus dem Code oben ausgeführt wird, wodurch dann 0.0 als Farbe zurückgegeben wird. Die Werte zwischen 0.0 und 1.0 fehlen und können nie zurückgegeben werden. Vielleicht ist das auch ein Tipfehler gewesen kA wie das dort gedacht ist.

Zu deiner Idee ist mir aber noch was eingefallen. Wenn man dann die Farbe (3.0,1.0,0.0) hätte, würde darauß (1.0,0.3,0.0) werden, sodass sich die Helligkeit immer verringert. Aber der Ansatz ist schonmal ganz gut.
Vielleicht wenn man den höchsten Farbwert ganz normal um eins verringert. Die anderen aber anders berechnet, sodass das Verhältnis gleich dem der ursprünglichen Farbe ist.
Also bei (3.0,1.0,0.0) wäre der erste Farbkanal dann 2.0. Und die anderen wären dann NeuerWert=Wert/max*(max-1.0).
Äh, eigentlich kann man dann ja trotzdem alle Kanäle gleich berechnen merk' ich grad, weil für den höchsten Wert auch das richtige rauskommt, wenn man die Berechnungsvorschrift oben verwendet.

Also ich denke das hilft schon etwas, muss ich dann morgen mal probieren, wie das aussieht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: HDR - "suppress LDR values"
BeitragVerfasst: Do Dez 10, 2009 00:42 
Offline
DGL Member

Registriert: Sa Mär 14, 2009 17:48
Beiträge: 99
Programmiersprache: D, Java, C++
Hm, also für einen Schreibfehler halte ich das nicht ;-), der Bloom Effekt beim HDR Rendering soll ja nur auf Hell leuchtende Bereiche angewandt werden, dass bedeutet du musst vorgeben, ab welchem Farbwert etwas als Hell genug zum Bloomen gilt, i.d.r. werden dort die Texel genommen, bei welchen ein Farbkanal > 1.0 ist, dass nennt man dann "Bright-Pass". (Siehe dazu das von mir gepostete Paper Seite 19)

Wenn sich das Licht nun entfernt wird die Fläche welche gebloomt wird immer kleiner, bis sie komplett verschwindet, dass bedeutet aber keinesfalls, dass diese Texel nichtmehr sichtbar wären, sondern nur, dass diese nichtmehr verwischt werden, du addierst ja den Bloom Effekt mit der Original Textur, probier es einfach aus, es sieht gut aus ;-).

Alternativ kannst du auch die gesamte Szene Bloomen, dass sähe aber bei weitem nicht so gut aus, und würde auch dunklere Flächen verschwimmen, deshalb der Bright-Pass.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: HDR - "suppress LDR values"
BeitragVerfasst: Do Dez 10, 2009 00:57 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Allerdings wird die Farbe bei dem Beispiel wo ich den Code-Abschnitt her habe nicht einfach dazuaddiert, sondern mit reingemischt.

Code:
  1.  
  2. float4 color    = lerp( original, blur, 0.4f );
  3.  
  4. inTex       -= 0.5;
  5. float vignette  = 1 - dot( inTex, inTex );
  6. color       *= pow( vignette, 4.0 );
  7.  
  8. color       *= fExposureLevel;
  9.  
  10. return pow( color, 0.55 );
  11.  

Das ist der Teil wo die original Farbe mit dem geblurten Teil kombiniert wird. Wobei ich jetzt garnicht weiß ob die Farben in "original" auf 0.0-1.0 beschränkt sind. Aber man sieht das die Blurfarbe nicht nur addiert wird, sondern durch die Interpolation die resultierende Farbe sogar verringern kann. Deswegen wird wahrscheinlich auch nichts subtrahiert.
Naja, alle Effekte die auftreten können, kann ich auch nicht theoretisch erfassen, in dem Fall probier ich dann meistens verschiedene Sachen aus.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: HDR - "suppress LDR values"
BeitragVerfasst: Do Dez 10, 2009 14:19 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Auf die Ergebnisse bin ich gespannt. 8)

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: HDR - "suppress LDR values"
BeitragVerfasst: Do Dez 10, 2009 15:50 
Offline
DGL Member

Registriert: Mo Nov 06, 2006 19:15
Beiträge: 172
Hab mich gefragt, woher dieses Glühen eigentlich kommt, das man auf vielen Fotos sieht und gerne beim HDRR tone mapping anwendet. Bin dann bei Wikipedia unter Beugungsscheibchen angekommen.
Besser als ein physikalisch korrektes Modell ist natürlich eins, dass schnell ist und dezent aber sichtbar arbeitet. Das was der Autor der Sylphis3D Engine vorschlägt klingt vernünftig: http://harkal.sylphis3d.com/2006/05/20/ ... rendering/


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 16 Queries | GZIP : On ]