Noise und Gamma

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
Krishty
Establishment
Beiträge: 8238
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Noise und Gamma

Beitrag von Krishty »

Hi,

Ich lege gleichmäßigen Noise über mein Bild. Soweit, so gut.

Nun ist meine Render-Target-View allerdings im sRGB-Format, wird also nach dem Shader Gamma-korrigiert. Für den Noise – der im linearen Farbraum vorliegt – bedeutet das aber, dass er in dunklen Bereichen ganz anders zur Geltung kommt als in hellen.

Eine Lösung wäre, den Input ans Gamma anzupassen, dann den Noise aufzuaddieren und das Ergebnis wieder in den linearen Farbraum zurück zu konvertieren … nur, damit er dann beim Schreiben ins Render-Target automatisch wieder ans Gamma angepasst wird …

Meine Fragen also:
– Lässt sich Noise auch Gamma-korrigiert anwenden, ohne dabei Gamma auf den Frame anzuwenden und wieder umzukehren?
– Falls das nicht geht: Überwiegen die Vorteile eines sRGB-Render-Targets (Konvertierung in Hardware) überhaupt noch oder wäre es besser, direkt in ein normales Render-Target zu schreiben (wo ich die Gammakorrektur dann ja eh im Shader durchführen muss)?

Gruß, Ky
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Richard Schubert
Moderator
Beiträge: 106
Registriert: 27.02.2009, 08:44
Wohnort: Hohen Neuendorf (b. Berlin)
Kontaktdaten:

Re: Noise und Gamma

Beitrag von Richard Schubert »

Was ich bisher gesehen habe, ist das Rendering komplett im linearen Space zu abzuarbeiten und im letzten Postprocess Step den man meist sowieso irgendwie haben wird, kann man noch so ein kleines pow() vertragen um wieder im gewünschten sRGB format zu landen.
Das entfernt erstens den Renderunterschied von DX9 und DX10+ Hardware, welcher bei Alphablending von sRGB Rendertargets auftreten kann. Zweitens kannst du einfacher auf HDR Rendertargets umsteigen, bei denen keine sRGB Capabilites vorhanden sind (weil sie dort eigentlich auch unnötig sind).
Produktivität über Performance - XNA Creators Club
Benutzeravatar
Schrompf
Moderator
Beiträge: 4854
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Noise und Gamma

Beitrag von Schrompf »

Jupp, so machen wir das auch: Rendern im linearen Bereich, allerdings mit 16Bit-Fließkomma-Renderziel. Im Post Processing dann die Gammakorrektur. Sorgt unter anderem auch dafür, dass auch durch Alphablending und Shaderlogik entstandene Berechnungen gammakorrekt passieren. Hat bei uns z.B. das Wasser einen ganzen Zacken glaubwürdiger gemacht, weil da Untergrund und Spiegelungen per AlphaBlending kombiniert werden.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Krishty
Establishment
Beiträge: 8238
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Noise und Gamma

Beitrag von Krishty »

Okay, dann werde ich sRGB fallen lassen :)
Vielen Dank für die Infos!
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten