Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

11

02.10.2012, 20:21

Ja, im Prinzip hast du's jetzt verstanden. Wieso man eine Gammakorrektur durchführt, hat allerdings nichts mit CRTs zu tun. Es stimmt schon, dass z.B. an Kathodenstrahlröhren ein nichtlinearer Zusammenhang zwischen Input und Output herrscht; den auszugleichen erledigt aber natürlich der CRT Monitor intern. Der Grund für die Gammakorrektur liegt im menschlichen Auge. Unser Auge ist in dunkleren Bereichen empfindlicher als in hellen und folgt dabei näherungsweise einer Gammakurve. Und zwar einer der Form der oberen (also deines h(x)), wenn die x-Achse der tatsächlichen Lichtintensität und die y-Achse der empfundenen Intensität entspricht. Das bedeutet in weiterer Folge, dass wir in dunklen Bereichen mehr Farben unterscheiden können als in hellen. Um nun die z.B. 8 Bit eines Farbkanals optimal zu nutzen, speichert man die Farbwerte gammakorrigiert, da dadurch mehr Bit für die dunklen Bereiche verwendet werden als für die hellen und die Genauigkeit damit besser verteilt ist...

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dot« (02.10.2012, 20:28)


12

03.10.2012, 11:28

@dot
aha :) Gut zu wissen.

@mark93
Ich hab auch nur den GPU Gems Artikel gelesen, aber: Der Gammawert ist nicht fest. Wenn du es genau nimmst, muss jede Textur mit ihrem eigenen Gammawert umgerechnet werden, je nachdem womit sie erstellt wurde. Und Monitore haben auch unterschiedliche Gammawerte, dementsprechend sollte man diesen auch irgendwo einstellen können.
Lieber dumm fragen, als dumm bleiben!

13

03.10.2012, 12:11

@dot:

Deinen letzten Satz habe ich leider noch nicht verstanden. Warum hebt man denn die "gamma-Funktion" des Monitors durch die Inverse auf, sodass das Image linear dargestellt wird, wenn die menschliche Wahrnehmung gar nicht erst linear ist?

@Jonathan Klein:
Jap das ist mir bekannt, ich wollte es nur in meinen Posts etwas vereinfachen. Die power-Funktion ist dafür auch alleine ungeeignet.
Nähere Infos gibt es dazu hier:
http://content.gpwiki.org/index.php/D3DB…s#Gamma_Control

CodingCat

1x Contest-Sieger

Beiträge: 420

Beruf: Student (KIT)

  • Private Nachricht senden

14

03.10.2012, 12:35

@dot:
Deinen letzten Satz habe ich leider noch nicht verstanden. Warum hebt man denn die "gamma-Funktion" des Monitors durch die Inverse auf, sodass das Image linear dargestellt wird, wenn die menschliche Wahrnehmung gar nicht erst linear ist?

Klar wird das Bild linear dargestellt, in der Natur ist es ja auch linear. Im Unterschied zur Natur haben wir jedoch mit 8-Bit-Werten nicht nahezu unendlich viele Helligkeitsabstufungen. Da unsere Empfindlichkeit für HelligkeitsUNTERSCHIEDE mit sinkender Helligkeit zunimmt, ist es von Vorteil, in dunklen Bereichen mehr Abstufungen zu haben als in hellen.

Genau das passiert durch die Gammakorrektur. Die 256 Werte einer 8-Bit-Zahl werden so verteilt, dass die Helligkeit mit den WERTEN nichtlinear steigt, d.h. mehr Werte entsprechen geringerer Helligkeit als höherer Helligkeit. Nehmen wir beispielsweise die Intensität 0.5. Ohne Gammakorrektur entspräche dieser genau der 8-Bit-Wert 128, d.h. wir hätten gleich viele Werte darunter und darüber. Mit Gammakorrektur entspricht die Intensität 0.5 jedoch dem 8-Bit-Wert 180 (= 255 * sqrt(0.5)), d.h. es liegen mehr Werte im dunklen Bereich darunter (181 Werte) als im hellen Bereich darüber (75). Der Monitor wandelt die korrigierten Werte zwar wieder in ein lineares Bild um, auch dort sind nun die dunklen Bereiche jedoch genauer beschrieben als die hellen Bereiche. In dunklen Bereichen haben wir mehr (kleinere) Abstufungen, in helleren weniger größere, insgesamt ist die Intensität linear zu unserem ursprünglichen, unkorrigierten Bild.

Im Übrigen ist die Gammakurve zu diesem Zweck alles andere als optimal, aber aus historischen Gründen (CRTs) war sie eben ohnehin schon in den Systemen verankert.
alphanew.net (last updated 2011-06-26) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »CodingCat« (03.10.2012, 12:44)


15

03.10.2012, 13:57

Ahh alles klar. Vielen Dank für deine Erklärung!

Denke habe es jetzt verstanden. :thumbsup:

Danke natürlich auch an die anderen, für die ganzen Antworten. :)

16

03.10.2012, 14:20

Im Übrigen ist die Gammakurve zu diesem Zweck alles andere als optimal, aber aus historischen Gründen (CRTs) war sie eben ohnehin schon in den Systemen verankert.

Was würde denn besser funktionieren?
Lieber dumm fragen, als dumm bleiben!

CodingCat

1x Contest-Sieger

Beiträge: 420

Beruf: Student (KIT)

  • Private Nachricht senden

17

03.10.2012, 15:43

Da die Wahrnehmung näherungsweise logarithmisch funktioniert, wäre eine logarithmische Speicherung wohl passender. Soweit ich weiß gibt es dafür aber keinerlei Unterstützung in aktueller Konsumenten-Hard- und Software.
alphanew.net (last updated 2011-06-26) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite

Werbeanzeige