PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Alphatest Mipmaps ohne Alphatest - Performancegewinn?


Mr. Lolman
2003-07-24, 20:23:28
Können Grafikkarten davon prfitieren, wenn man bei einer Alphatesttextur in den Mipmaps auf den Alphatest verzichtet?

Demirug
2003-07-24, 20:31:35
Meinst du damit jetzt das wenn der Alphawert aus einer anderen als der grössten Mipmap kommt der Alpatest einfach umgangen wird und der Pixel immer geschrieben wird?

EDIT: Hast du da einen Verdacht?

Mr. Lolman
2003-07-24, 20:54:53
Hmm Verdacht hab ich keinen, Aber die Frage ergab sich als ich wieder am UT2003 Baummodellieren war.

Die Blätter bestehen aus jew. 4 Polygonen, und mein Plan war, die Blätterkanten mittels Alphatest abzurunden. Da das bei einem ganzen Baum viel Performance benötigt und der Alphatest be grösserer Enfternung zum Baum ohnehin sinnlos wird (schliesslich sind die Blätter ja ausmodelliert), kam mir die Idee auf, mit dem Verzicht auf den Alphatest bei den kleineren Mipmaps etwas Perfomance zu sparen.

Demirug
2003-07-24, 21:12:02
Schauen wir uns mal die Vorgehensweise beim "normalen" Alphatest an und prüfen ob es da überhaupt eine optimierungs möglichkeit gibt.

1. Aus einer Texture wird ein Alphawert gesampelt
2. Der Alphawert wird durch das Pixelprocessing durchgeschoben
3. Testen des Alphawerts gegen eine Referenz.

Optimierbarkeit:

1. Wird der Alphawert aus einer Texture geholt von der man auch den RGB Wert von der gleiche stelle braucht bekommt man den Alphawert umsonst dazu. Also normalerweise kann man hier nichts sparen.

2. Das durchschieben eines Alphawerts im Pixelprocessing ist eigentlich immer kostenloss zu haben.

3. Der Alphatest ist auch kostenloss. (Aussnahme: P10/P9)

Ergo: Eigentlich ist da nix zu holen. Mit den PS 2.X könnte man den Alphatest im PS machen und damit Fillrate und Shaderleistung einsparen.

Mr. Lolman
2003-07-24, 21:17:22
Demnach, düfte der Alphatest um Vergleich zum normalen Texturmapping auch keine Leistung 'fressen' ??

Demirug
2003-07-24, 21:25:51
Original geschrieben von Mr. Lolman
Demnach, düfte der Alphatest um Vergleich zum normalen Texturmapping auch keine Leistung 'fressen' ??

Richtig. Ausser beim P10/P9 aber dort ist ja alles ein bischen anders.

Der Alphatest kann sogar bandbreite sparen.

Mr. Lolman
2003-07-24, 21:40:16
Original geschrieben von Demirug
Richtig. Ausser beim P10/P9 aber dort ist ja alles ein bischen anders.

Der Alphatest kann sogar bandbreite sparen.

Alles klar, thx, aber fürs Alphablending gelten andere Gesetze oder?

edit: Bandbreite sparen, im Sinne von weniger Pixelprocessingload zu haben?

Demirug
2003-07-24, 21:52:21
Original geschrieben von Mr. Lolman
Und wie schauts beim Alphablending aus?

Von der reinen Leistung im Pixelshading macht es keinen Unterschied.

Alphablending braucht aber mehr Bandbreite weil ja der Framebuffer Inhalt eingeladen werden muss. Wie viel zusätzliche Bandbreite aber wirklich gebraucht wird hängt stark davon ab wie gut der Chip beim erkennen von Spezialfällen ist und die richtigen Konsequenzen zieht.

Beispiel:

Framebuffer.RGB = Framebuffer.RGB * (1-Pixel.alpha) + Pixel.RGB * Pixel.Alpha

Wenn nun der Alpha wert = 0 ist reduziert sich die Formel auf:

Framebuffer.RGB = Framebuffer.RGB * (1-0) + Pixel.RGB * 0
Framebuffer.RGB = Framebuffer.RGB * 1 + 0
Framebuffer.RGB = Framebuffer.RGB

Der Chip sollte also den Pixel einfach ignoriren

Wenn nun der Alpha wert gleich 1 ist reduziert sich die Formel auf:

Framebuffer.RGB = Framebuffer.RGB * (1-1) + Pixel.RGB * 1
Framebuffer.RGB = Framebuffer.RGB * 0 + Pixel.RGB
Framebuffer.RGB = 0 + Pixel.RGB
Framebuffer.RGB = Pixel.RGB

In diesem Fall sollte der Chip also den Framebuffer einfach überschreiben und gar nicht erst einladen.

Es gibt noch mehr solche Fälle. Da man nicht genau weis welche Fälle ein Chip optimiert ist es schwer den Bandbreitenbedarf zu bestimmen.

EDIT: Bandbreite ist hier wirklich nur als Bandbreite zum Speicher gemeint. Der Pixelprocessingload bleibt gleich.