Premultiplied alpha
- dot
- Establishment
- Beiträge: 1745
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Premultiplied alpha
Was du übersiehst ist, dass die Programme, mit denen du deine Bilder anschaust, im Gegensatz zu dir, kein Filtering betreiben werden und die Probleme an den Rändern kommen genau erst durch das Filtering zustande... ;)
-
- Establishment
- Beiträge: 147
- Registriert: 26.02.2009, 14:04
- Alter Benutzername: floyd
- Wohnort: Nürnberg
- Kontaktdaten:
Re: Premultiplied alpha
Mein Ubuntu-Image-Viewer filtert:
-
- Establishment
- Beiträge: 147
- Registriert: 26.02.2009, 14:04
- Alter Benutzername: floyd
- Wohnort: Nürnberg
- Kontaktdaten:
Re: Premultiplied alpha
Ich hab jetzt mal testweise beim Filtering von GL_LINEAR auf GL_NEAREST umgestellt... Dunkle Rahmen sind weg.
Scheint also zweifelsfrei am Filtering zu liegen :(
Scheint also zweifelsfrei am Filtering zu liegen :(
- dot
- Establishment
- Beiträge: 1745
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Premultiplied alpha
Jo, dein Viewer machts offenbar richtig. Die Lösung wurde ja schon genannt: Premultiplied Alpha...
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Premultiplied alpha
Ganz so einfach würde ich es nicht einschätzen: Er hat dunkle Ränder obwohl eigentlich weißer Rahmen in die Transparenz bluten sollte. Ich vermute (wie TGGC), dass beim Laden der Bilder irgendwas verändert wird. Erst, wenn die Pixel zweifelsfrei mit den zugewiesenen Werten in der Textur landen, wird Premultiplied Alpha helfen.
- dot
- Establishment
- Beiträge: 1745
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Premultiplied alpha
Dass dazu natürlich die Daten richtig geladen werden müssen, wurde ja bereits erwähnt, ich ging davon aus, dass man das nicht zweimal sagen muss...
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Premultiplied alpha
Ich hatte es selber schon fast vergessen; entschuldige :D
- dot
- Establishment
- Beiträge: 1745
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Premultiplied alpha
Ist ja nicht so wichtig. Zusammenfassung: Der OP hat Artefakte an den Rändern, die auf das Filtering zurückzuführen sind. Der mathematische Hintergrund ist, dass normales lineares Blending kein assoziativer Operator ist und daher mit bilinear interpolierten Werten nicht das gewünschte Ergebnis liefert. Eine einfache und effektive Lösung für das Problem ist premultiplied Alpha.
-
- Establishment
- Beiträge: 147
- Registriert: 26.02.2009, 14:04
- Alter Benutzername: floyd
- Wohnort: Nürnberg
- Kontaktdaten:
Re: Premultiplied alpha
Damit hats tatsächlich geklappt! Und das Beste: ich hab sogar noch kapiert, warum :lol:
Ich bin ja froh, dass die Diskussion über premultiplied alpha jetzt nicht umsonst war!
Kommt Ihr auf die Devmania? Dann geb ich Euch ein Bier aus :D
Ich bin ja froh, dass die Diskussion über premultiplied alpha jetzt nicht umsonst war!
Kommt Ihr auf die Devmania? Dann geb ich Euch ein Bier aus :D
- TGGC
- Establishment
- Beiträge: 569
- Registriert: 15.05.2009, 18:14
- Benutzertext: Ich _bin_ es.
- Alter Benutzername: TGGC
- Echter Name: Ich _bin_ es.
- Wohnort: Mainz
- Kontaktdaten:
Re: Premultiplied alpha
Jetzt hoer doch bitte mit dem Scheiss auf. Unsinn verbreiten weil man keine Ahnung hat ist uncool.dot hat geschrieben:Der mathematische Hintergrund ist, dass normales lineares Blending kein assoziativer Operator ist und daher mit bilinear interpolierten Werten nicht das gewünschte Ergebnis liefert. Eine einfache und effektive Lösung für das Problem ist premultiplied Alpha.
Re: Premultiplied alpha
Ich habe hier was gelernt. Danke dafür.
Dieses e-Penis-Gehabe find ich hier allerdings einfach nur nervig und ziemlich daneben. Wer sich mit Intelligenz brüsten muss um vorzugeben scheinbar was Besseres zu sein ist in meinen Augen ein armes Würstchen.
Dieses e-Penis-Gehabe find ich hier allerdings einfach nur nervig und ziemlich daneben. Wer sich mit Intelligenz brüsten muss um vorzugeben scheinbar was Besseres zu sein ist in meinen Augen ein armes Würstchen.
Ohne Input kein Output.
-
- Establishment
- Beiträge: 147
- Registriert: 26.02.2009, 14:04
- Alter Benutzername: floyd
- Wohnort: Nürnberg
- Kontaktdaten:
Re: Premultiplied alpha
Hey Leute, sorry dass ich Euch noch einmal mit damit behelligen muss...
Noch eine Frage in dem Umfeld "premultiplied alpha" ist nämlich aufgetaucht:
Ich habe mein ursprüngliches Problem mit den schwarzen Rändern ja so gelöst, indem ich sichergestellt habe, dass premultiplied alpha Werte in der Textur liegen. Diese blende ich dann entsprechend richtig mit GL_ONE, weil sie eben schon premultiplied sind.
Ich muss jetzt dazu sagen, dass ich in diesem Projekt die fixed functions pipeline von OpenGL benutze. Wie es mit fragment shadern aussieht, kann ich leider nicht sagen. Jedenfalls verwende ich Aufrufe dieser Art:
GL11.glColor4f(red, green, blue, alpha);
.. um vertex-Farben einzustellen. Bisher haben hier auch immer Alpha-Werte von weniger als 1.0, also zB 0.5 für halbtransparent funktioniert. Jetzt funktioniert das allerdings nicht mehr, das Blending sieht anders aus, eigentlich transparente Bereiche sind plötzlich sichtbar. Ich kann es auf die Änderung nach premultiplied alpha zurückführen. Gehe ich zurück zur alten Implementierung ohne premultiplied alpha, funktioniert auch wieder der glColor4f-Aufruf richtig.
Könnt Ihr mir noch einen Tipp geben?
Noch eine Frage in dem Umfeld "premultiplied alpha" ist nämlich aufgetaucht:
Ich habe mein ursprüngliches Problem mit den schwarzen Rändern ja so gelöst, indem ich sichergestellt habe, dass premultiplied alpha Werte in der Textur liegen. Diese blende ich dann entsprechend richtig mit GL_ONE, weil sie eben schon premultiplied sind.
Ich muss jetzt dazu sagen, dass ich in diesem Projekt die fixed functions pipeline von OpenGL benutze. Wie es mit fragment shadern aussieht, kann ich leider nicht sagen. Jedenfalls verwende ich Aufrufe dieser Art:
GL11.glColor4f(red, green, blue, alpha);
.. um vertex-Farben einzustellen. Bisher haben hier auch immer Alpha-Werte von weniger als 1.0, also zB 0.5 für halbtransparent funktioniert. Jetzt funktioniert das allerdings nicht mehr, das Blending sieht anders aus, eigentlich transparente Bereiche sind plötzlich sichtbar. Ich kann es auf die Änderung nach premultiplied alpha zurückführen. Gehe ich zurück zur alten Implementierung ohne premultiplied alpha, funktioniert auch wieder der glColor4f-Aufruf richtig.
Könnt Ihr mir noch einen Tipp geben?
- TGGC
- Establishment
- Beiträge: 569
- Registriert: 15.05.2009, 18:14
- Benutzertext: Ich _bin_ es.
- Alter Benutzername: TGGC
- Echter Name: Ich _bin_ es.
- Wohnort: Mainz
- Kontaktdaten:
Re: Premultiplied alpha
Nimm einfach wieder Texturwerte ohne Premultiplied Alpha.
-
- Establishment
- Beiträge: 147
- Registriert: 26.02.2009, 14:04
- Alter Benutzername: floyd
- Wohnort: Nürnberg
- Kontaktdaten:
Re: Premultiplied alpha
Ok, klingt einleuchtend :)
Dann hab ich jedoch mein ursprüngliches Problem wieder... Beides geht wohl nicht?
Dann hab ich jedoch mein ursprüngliches Problem wieder... Beides geht wohl nicht?
- CodingCat
- Establishment
- Beiträge: 1857
- Registriert: 02.03.2009, 21:25
- Wohnort: Student @ KIT
- Kontaktdaten:
Re: Premultiplied alpha
Naja, wenn du beim Blending Pre-Multiplied Alpha voraussetzt, musst du deine Vertex-Farben natürlich auch entsprechend setzen, also r,g,b jeweils mit a multipliziert.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
- TGGC
- Establishment
- Beiträge: 569
- Registriert: 15.05.2009, 18:14
- Benutzertext: Ich _bin_ es.
- Alter Benutzername: TGGC
- Echter Name: Ich _bin_ es.
- Wohnort: Mainz
- Kontaktdaten:
Re: Premultiplied alpha
Doch, einfach kein Schwarz sondern die passenden Farbe in die Textur setzen.shadow hat geschrieben:Ok, klingt einleuchtend :)
Dann hab ich jedoch mein ursprüngliches Problem wieder... Beides geht wohl nicht?
-
- Establishment
- Beiträge: 147
- Registriert: 26.02.2009, 14:04
- Alter Benutzername: floyd
- Wohnort: Nürnberg
- Kontaktdaten:
Re: Premultiplied alpha
Vielen Dank für die Hinweise!
So ging es dann:
glColor4f(r*a, g*a, b*a, a);
So ging es dann:
glColor4f(r*a, g*a, b*a, a);