PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : G8x, OpenGL und TSSAA


Asmodeus
2006-12-12, 07:55:31
Mich würde interessieren, wie ich TSSAA in einer eigenen Anwendung unter OpenGL implementieren kann. Wenn ich die Steuerung über das AA dem Treiber überlasse (Beliebige Anwendungseinstellungen überschreiben) und dort 16xQ und TSSAA aktiviere tut sich in meiner eigenen OpenGL Anwendung bei Texturen mit Alphakanal und aktiviertem Alphatest gar nichts. Bei G7x und OpenGL konnte man das FS-SSAA ja leicht über den entsprechenden Zahlencode bei WGL_SAMPLES_ARB beim Pixelformat angeben. Aber wie funktioniert das beim TSSAA? Und wieso funktioniert die Sache eigentlich nicht, wenn ich es über den Treiber aktiviere?

Gruss, Carsten.

Coda
2006-12-12, 09:13:29
TSSAA hat noch nie unter OpenGL funktioniert so weit wie ich das mitbekommen habe.

Asmodeus
2006-12-12, 09:16:16
TSSAA hat noch nie unter OpenGL funktioniert so weit wie ich das mitbekommen habe.

Hmm, nur das würde doch dann bedeuten, dass für die G8x unter OpenGL überhaupt kein SSAA mehr angeboten wird? Das kann ich mir irgendwie aber auch nicht vorstellen, denn das wäre ja total bekloppt, die Leistung einer G8x und dann kein SSAA-Modus mehr unter OpenGL?

Gruss, Carsten.

Coda
2006-12-12, 11:02:13
Hmm, nur das würde doch dann bedeuten, dass für die G8x unter OpenGL überhaupt kein SSAA mehr angeboten wird?

Wieso G8x? Das hat schon auf G7x nicht funktioniert.

Asmodeus
2006-12-12, 11:09:39
Wieso G8x? Das hat schon auf G7x nicht funktioniert.

Aber natürlich kann ich hier auf einer 7800GTX und auch auf einer 7900GTX unter OpenGL mit Hilfe von WGL_SAMPLE_BUFFERS_ARB und WGL_SAMPLES_ARB ein Pixelformat unter OpenGL anfordern, welches SSAA liefert (aktueller Treiber 93.71). Das kann ich Dir auf Wunsch auch mit Screenshots beweisen.

Gruss, Carsten.

Coda
2006-12-12, 11:10:35
Aber natürlich kann ich hier auf einer 7800GTX und auch auf einer 7900GTX unter OpenGL mit Hilfe von WGL_SAMPLE_BUFFERS_ARB und WGL_SAMPLES_ARB ein Pixelformat unter OpenGL anfordern, welches SSAA liefert.

Wuz? RGSSAA? Oder OGSSAA? Das es die OGSSAA-AA-Modi bei G80 nicht mehr geht ist auch bekannt.

Was auf jeden Fall nicht geht ist TSSAA im Treiber einzustellen. Das hat auf OpenGL-Apps keinen Einfluss.

Asmodeus
2006-12-12, 11:23:13
Wuz? RGSSAA? Oder OGSSAA? Das es die OGSSAA-AA-Modi bei G80 nicht mehr geht ist auch bekannt.

Was auf jeden Fall nicht geht ist TSSAA im Treiber einzustellen. Das hat auf OpenGL-Apps keinen Einfluss.

auf G7x ohne:

http://www.inf.uni-konstanz.de/~colditz/supsam01.jpg

auf G7x mit:

http://www.inf.uni-konstanz.de/~colditz/supsam02.jpg

Um welchen SSAA-Modus es sich dabei jetzt handelt, ist mir im Grunde erstmal egal. Mir geht es darum, dass es bei G7x unter OpenGL, wie man sieht, noch funktioniert und bei G8x jetzt nicht mehr. Und ich frage mich eben warum? Für mich ergibt das keinen Sinn, wieso unter G8x und OpenGL kein SSAA mehr möglich sein soll. Denn wie Du schon sagst, TSAA geht unter OpenGL nicht, meine bisherige Methode geht unter OpenGL auch nicht, also welche Möglichkeit habe ich unter OpenGL jetzt noch, Kanten von Texturen mit Alphakanal und aktiviertem Alphatest zu glätten? So wie es jetzt aussieht, gar keine. Und das kann ich einfach nicht glauben, denn das wäre ja ein riesen Schritt zurück, in die meiner Meinung nach ganz falsche Richtung.

Gruss, Carsten.

ShadowXX
2006-12-12, 11:43:02
auf G7x ohne:

http://www.inf.uni-konstanz.de/~colditz/supsam01.jpg

auf G7x mit:

http://www.inf.uni-konstanz.de/~colditz/supsam02.jpg

Um welchen SSAA-Modus es sich dabei jetzt handelt, ist mir im Grunde erstmal egal. Mir geht es darum, dass es bei G7x unter OpenGL, wie man sieht, noch funktioniert und bei G8x jetzt nicht mehr. Und ich frage mich eben warum? Für mich ergibt das keinen Sinn, wieso unter G8x und OpenGL kein SSAA mehr möglich sein soll. Denn wie Du schon sagst, TSAA geht unter OpenGL nicht, meine bisherige Methode geht unter OpenGL auch nicht, also welche Möglichkeit habe ich unter OpenGL jetzt noch, Kanten von Texturen mit Alphakanal und aktiviertem Alphatest zu glätten? So wie es jetzt aussieht, gar keine. Und das kann ich einfach nicht glauben, denn das wäre ja ein riesen Schritt zurück, in die meiner Meinung nach ganz falsche Richtung.

Gruss, Carsten.
Soweit ich weiß, waren aber auch schon bei den G7X-Karten die SSAA-Modi nur noch inoffiziell und wurden nicht von nV unterstützt.

Der einzig noch offiziell unterstützte Mode mit SSAA, war 8xS (und später wohl auch 16xS)....das waren aber HybridModi, die wiederum unter OGL nicht funktionierten.

Auf deutsch: Offiziell konntest du schon bei nv4X-G7x nur MSAA bei OGL benutzen.

Gast
2006-12-12, 11:46:05
Soweit ich weiß, waren aber auch schon bei den G7X-Karten die SSAA-Modi nur noch inoffiziell und wurden nicht von nV unterstützt.

Der einzig noch offiziell unterstützte Mode mit SSAA, war 8xS (und später wohl auch 16xS)....das waren aber HybridModi, die wiederum unter OGL nicht funktionierten.

Auf deutsch: Offiziell konntest du schon bei nv4X-G7x nur MSAA bei OGL benutzen.
Die Mischmodi 8xS und 16xS funktionieren auch unter Opengl.
Die reinen SS-Modi, die nvidia im Treiber hat, funktionieren nur unter D3D.

Gast
2006-12-12, 11:47:21
Die Mischmodi 8xS und 16xS funktionieren auch unter Opengl.
Die reinen SS-Modi, die nvidia im Treiber hat, funktionieren nur unter D3D.
p.s. um TSSAA nutzen zu können, muss auch MSAA eingeschaltet sein, soweit mir bekannt.

Xmas
2006-12-12, 11:57:25
Denn wie Du schon sagst, TSAA geht unter OpenGL nicht, meine bisherige Methode geht unter OpenGL auch nicht, also welche Möglichkeit habe ich unter OpenGL jetzt noch, Kanten von Texturen mit Alphakanal und aktiviertem Alphatest zu glätten? So wie es jetzt aussieht, gar keine.
glEnable(GL_SAMPLE_ALPHA_TO_COVERAGE);

ShadowXX
2006-12-12, 12:03:04
Die Mischmodi 8xS und 16xS funktionieren auch unter Opengl.
Die reinen SS-Modi, die nvidia im Treiber hat, funktionieren nur unter D3D.
Du hast recht, ich hatte das Falschherum in Erinnerung....trotzdem werden von nV die SSAA-Modi schon länger nicht mehr offiziell unterstützt.

Und ja, um TSAA oder TMAA zu benutzen muss MSAA eingeschaltet sein. Entweder vom Treiber oder von der App.

Asmodeus
2006-12-12, 12:17:41
glEnable(GL_SAMPLE_ALPHA_TO_COVERAGE);

Bist Du Dir sicher? Das glättet doch nicht meine Kanten der Alphatextur, sondern legt nur dieses ditherartige Muster über die gesamte Textur.

Gruss, Carsten.

Asmodeus
2006-12-12, 12:19:13
...
Und ja, um TSAA oder TMAA zu benutzen muss MSAA eingeschaltet sein. Entweder vom Treiber oder von der App.

Aber unter OpenGL steht TSAA oder TMAA so oder so nicht zur Verfügung.

Gruss, Carsten.

Asmodeus
2006-12-12, 12:56:39
Das Ergebnis mit Hilfe von GL_SAMPLE_ALPHA_TO_COVERAGE ist meiner Meinung nach alles andere als vergleichbar mit dem Ergebnis, welches man mit echtem Supersampling erreicht.

mit alpha to coverage:

http://www.inf.uni-konstanz.de/~colditz/supsam03.jpg

Gruss, Carsten.

Gast
2006-12-12, 16:23:04
Bist Du Dir sicher? Das glättet doch nicht meine Kanten der Alphatextur, sondern legt nur dieses ditherartige Muster über die gesamte Textur.



das ganze ist ja auch nur TRMSAA

Xmas
2006-12-12, 20:15:07
Das Ergebnis mit Hilfe von GL_SAMPLE_ALPHA_TO_COVERAGE ist meiner Meinung nach alles andere als vergleichbar mit dem Ergebnis, welches man mit echtem Supersampling erreicht.
Bei starker Vergrößerung funktioniert Alpha to Coverage nicht besonders gut. Da müsstest du durch skalieren des Alpha-Wertes die Steilheit des Übergangs verändern. So wie in der A2C-Demo von Humus: http://www.humus.ca/index.php?page=3D&ID=61
Alpha-Test kannst du dann aber auch abschalten.

Asmodeus
2006-12-13, 07:54:45
Bei starker Vergrößerung funktioniert Alpha to Coverage nicht besonders gut. Da müsstest du durch skalieren des Alpha-Wertes die Steilheit des Übergangs verändern. So wie in der A2C-Demo von Humus: http://www.humus.ca/index.php?page=3D&ID=61
Alpha-Test kannst du dann aber auch abschalten.

Leider kann ich die Steilheit des Überganges nicht ändern, da ich die unveränderten Alphawerte noch für eine andere Sache im Shader genau so brauche, wie sie sind. Und darum ärgert mich die ganze Sache eben etwas. Mit Supersampling hat man eine generelle und kontentunabhängige Methode, um Alphakanten zu glätten. Und mit einer 8800GTX eigentlich auch die notwendige Leistung dafür. Mit Alpha-to-Coverage kommt es viel Stärker auf den Kontent und die aktuelle Situation pro Fragment an (wie sind die Alphawerte verteilt, Steilheit des Überganges, befinde ich mich in der minification oder magnification). Es ist im Grunde also mehr ein Hack als eine saubere, immer funktionierende Lösung.

Gruss, Carsten.

Xmas
2006-12-13, 12:27:50
Leider kann ich die Steilheit des Überganges nicht ändern, da ich die unveränderten Alphawerte noch für eine andere Sache im Shader genau so brauche, wie sie sind.
Wo ist das Problem? Der Alpha-"Kontrast" wird ja auch erst im Shader geändert, also hast du doch die unveränderten Alpha-Werte dort. Und es funktioniert in der Demo von Humus ziemlich gut.

Asmodeus
2006-12-13, 13:37:04
Wo ist das Problem? Der Alpha-"Kontrast" wird ja auch erst im Shader geändert, also hast du doch die unveränderten Alpha-Werte dort. Und es funktioniert in der Demo von Humus ziemlich gut.

Ich meine damit, dass ich die unveränderten Alpha-Werte auch während der Ausgabe (also während des Alpha-Tests) benötige. Ich arbeite mit einer variablen, geometrieabhängigen, sich mehrmals pro Frame ändernden Alphatestschwelle um Sichtbarkeiten gewisser Modellteile gezielt steuern zu können. Deshalb kann ich die bewusst gewählten Alphawerte innerhalb einer Textur nicht ändern, da sonst der Effekt flöten geht.

Gruss, Carsten.

Xmas
2006-12-13, 14:04:44
Ich meine damit, dass ich die unveränderten Alpha-Werte auch während der Ausgabe (also während des Alpha-Tests) benötige. Ich arbeite mit einer variablen, geometrieabhängigen, sich mehrmals pro Frame ändernden Alphatestschwelle um Sichtbarkeiten gewisser Modellteile gezielt steuern zu können. Deshalb kann ich die bewusst gewählten Alphawerte innerhalb einer Textur nicht ändern, da sonst der Effekt flöten geht.
Wenn du A2C hast brauchst du keinen Alpha-Test mehr. Du musst nur dafür sorgen dass der Alpha-Wert <= 0 wird wo er vorher unterhalb des Schwellenwerts war. Humus benutzt in der Demo 0.5 als Fixpunkt der Alpha-Skalierung. Das kannst du mit deinem Schwellenwert als uniform ersetzen.

Asmodeus
2006-12-13, 16:39:12
Wenn du A2C hast brauchst du keinen Alpha-Test mehr. Du musst nur dafür sorgen dass der Alpha-Wert <= 0 wird wo er vorher unterhalb des Schwellenwerts war. Humus benutzt in der Demo 0.5 als Fixpunkt der Alpha-Skalierung. Das kannst du mit deinem Schwellenwert als uniform ersetzen.

Ja, Du hast natürlich recht, ich kann den Schwellenwert ja übergeben und intern steuern, und den eigentlichen Alpha-Test ganz weglassen. Das ist mir jetzt erst durch Ausprobieren/Deaktivieren des Alpha-Tests bewusst geworden, dass ich den ja gar nicht mehr brauche. Kleine Korrektur allerdings, ich muss die Alpha-Werte unterhalb der Schwelle nicht auf 0 setzen, sondern die Alpha-Werte oberhalb der Schwelle auf 1. ;) Denn somit sorgen die Werte unterhalb der Schwelle dann ja für den "fade-out".

Gruss, Carsten.