PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Rendering Unterschiede auf unterschiedlichen Grafikkarten


scaryjack
2006-04-11, 11:25:59
Hallo,
Ich hätte da mal eine technische Frage.

Im Rahmen meiner Ablschlußarbeit habe ich ein kleineres Programm geschrieben das 2 Bilder miteinander, Pixel für Pixel vergleicht und statistisch auswertet. Eigentlich sollte dieses Programm in erster Linie dazu dienen, unterschiede beim Rendern der gleichen 3D Szene zu detektieren, wenn verschiedene optimizer auf die Szene angwendet wurden.
Um es nochmal zu verdeutlichen:
-Ich lade eine 3D Szene, setze die Kamera an eine fixe Position, rendere ein Bild.
-Ich lade die gleiche Szene mit der fixen Kamera Position, aber wende vorher optimizer an und erstelle dann das zweite Bild.
Danach vergleiche ich die Bilder und Werte die Unterschiede aus.

Nun taucht aber auch folgendes Problem auf.
Wenn ich die gleiche Szene auf zwei verschiedenen Grafikkarten rendere, und dann vergleiche bekomme ich in ungünstigne Fällen bei über 80% aller Pixels abweichungen(allerdings die meisten Pixel um 1Punkt von 255, aber auch eine Menge größere Abweichungen)...
Zusammengefasst kam dabei folgendes raus.
- 2 Bilder auf unterschieldichen NvidiaGeforce Karten(z.B. 6600 vs 7800) mit unterschieldilichen Treibern--->keine Unterschiede
- Nvidia Geforce vs Nvidia Quadro ~ 30% Abweichungen
etc. etc.
Ich habe auch noch Karten von ATI, Intel und 3d Labs untereinander verglichen, mit dem Ergebniss, dass unterschidliche GPUs unterschiedlich Rendern.
Die Verwendung von Software Renderen war übrigens, wie nicht anders zu erwarten, auf allen Systemen unproblematisch. Also keine Abweichungen.

Meine Frage lautet nun:
Woran liegt das, bzw wo kann ich darüber genauere Infos finden.
Eine idee bisher ist, das der Textur Filter Herstellerbedingt unterschiedlich arbeitet. Aber vielleicht gibt es dafür ja noch mehr Gründe.

Vielen Dank im vorraus.

Gast
2006-04-11, 20:50:04
wie grafikkarten rendern ist nicht wirklich genormt, es gibt hier sehr viele freiheiten was texturfilter und auch shaderformate angeht.

da ist es fast ein wunder wenn du 2 karten von verschiedenen herstelltern findest die überhaupt in der gleichen szene irgendwelche identische pixel rendern ;)

san.salvador
2006-04-11, 22:04:38
Vorallem bei der Helligkeit/Gamma dürften Unterschiede zu finden sein.

Melbourne, FL
2006-04-12, 10:40:54
Außerdem rendern die verschiedenen Chips intern mit unterschiedlichen Genauigkeiten, was zu Rundungsfehlern führt.

Alexander

Monger
2006-04-12, 11:41:08
Vorallem bei der Helligkeit/Gamma dürften Unterschiede zu finden sein.

Richtig. Ist es nicht nach wie vor so, dass ATI Gamma-korrektes Downfiltering anbietet, und nVidia nicht?

@Threadersteller: Verstehe ich das richtig, dass du vergleichst ob zwei Pixel gleich sind, und dann eine Statistik über die guten und die schlechten führst?

Hast du auch den Fehler für jedes einzelne Pixel ausgerechnet, also wie weit z.B. das eine Blau von dem anderen Blau entfernt ist? So gerechnet dürften sich nur einige wenige Prozentpunkte Unterschied ergeben.

Aber auf jeden Fall eine interessante Arbeit. Zu Schade, dass man keine beliebigen Szenen so miteinander vergleichen kann.

Neomi
2006-04-12, 11:54:28
Richtig. Ist es nicht nach wie vor so, dass ATI Gamma-korrektes Downfiltering anbietet, und nVidia nicht?

Ab dem G70 hat auch nVidia eine Gamma-Anpassung. Es ist aber auch wirklich nur eine Anpassung, keine Korrektur. Der fest verdrahtete Wert (2,2) kann das Bild auch verschlechtern, wenn das Ausgabegerät eine stark abweichende Gammakurve hat. Eine Korrektur wäre es nur, wenn man den Gammawert einstellen könnte.

scaryjack
2006-04-12, 13:02:23
@Monger
Jepp,
Ich habe eine testszene in einem vr-system erstellt, aus der immer das gleiche bild auf verschiedenen karten gerendert wird.

beim vergleich 2 solcher bilder wird natürlich jedes bild in seine einzelnen kanäle zerlegt. smit vergleiche ich dann kanal für kanal(R,G,B).
Mit unterschieden hab ich schon gerechnet,
aber teilweise sind wirklich extrem starke abweichungen bei einzelnen pixeln drin(Farbwertabweichung um mehr als 100Punkte von 255). Allerdings ist die Mehrheit der Abweichungen(~98%) immer nur um 1 Farbwert unterschiedlich.

Mit den kleinen Werten hab ich wie gesagt gerchnet...mit den großen nicht! Auch nicht mit der Menge.
Bei ungünstigen Szenen hat man so bei über 70% der Pixel differenzen...

Aber danke für die Antworten soweit!

Coda
2006-04-12, 13:16:44
Ab dem G70 hat auch nVidia eine Gamma-Anpassung. Es ist aber auch wirklich nur eine Anpassung, keine Korrektur. Der fest verdrahtete Wert (2,2) kann das Bild auch verschlechtern, wenn das Ausgabegerät eine stark abweichende Gammakurve hat. Eine Korrektur wäre es nur, wenn man den Gammawert einstellen könnte.
Die "Kurve" die dabei verwendet wird ist AFAIK auch nur approximiert.

Xmas
2006-04-12, 14:29:52
Ab dem G70 hat auch nVidia eine Gamma-Anpassung. Es ist aber auch wirklich nur eine Anpassung, keine Korrektur. Der fest verdrahtete Wert (2,2) kann das Bild auch verschlechtern, wenn das Ausgabegerät eine stark abweichende Gammakurve hat. Eine Korrektur wäre es nur, wenn man den Gammawert einstellen könnte.
Der Zweck ist sowieso nicht die Gamma-Korrektur, sondern die Erhöhung der Framebuffer-Präzision indem man jenen als (annähernd) sRGB speichert. Dummerweise gibt es aber bei den aktuellen Chips weder sRGB-Blending noch vollständig korrekte sRGB-Texturfilterung.

Die Gammakorrektur der Grafikkarte sollte stets so eingestellt sein dass Grau 186 als genau die Mitte zwischen 0 und 255 wahrgenommen wird.