Zum 3DCenter Forum
Inhalt




Was bringt ein Pixelshader 3.0 Chip heute?

31. März 2004 / von Demirug / Seite 2 von 2


  •  0 * X = 0

Auch diese einfache mathematische Gesetzmäßigkeit lässt sich von einer Pixelshader 3.0 Hardware zu einem Performance-Vorteil ausnutzen. Immer dann, wenn eine gewisse Wahrscheinlichkeit besteht, dass einer der beiden Multiplikanten den Wert 0 haben könnte, kann eine weitere Optimierung zum Zug kommen. Vor dem Berechnen des zweiten Faktors und der eigentlichen Multiplikation könnte der erste Faktor überprüft werden. Ist dieser 0, kann man die Berechnung überspringen, was am endgültigen Rechenergebnis schließlich nichts ändert. Dies verspricht natürlich immer dann besonderes gute Erfolge, wenn die eingesparte Berechung sehr komplex ist.

Unreal Tournament 2004 nutzt beispielsweise den folgenden Pixelshader für die Berechnung der Pixelfarbe des Geländes:

ps.1.4
texld r0 , t0
texld r1 , t1
texld r2 , t2
texld r3 , t3
mul r1 , r1 , r0.xxxx
mad r1 , r2 , r0.yyyy , r1
mad r1 , r3 , r0.zzzz , r1
mul_x2 r0 , r1 , v0

Die mathematische Formel dieses Shaders lautet:

Farbe = 2*(Vertexfarbe * (Textur1*Textur0.X+Textur2*Textur0.Y+Textur3*Textur0.Z))

Aufgrund der vielen verwendeten Texturwerte ist dieser Shader natürlich hoffnungslos durch die Füllrate limitiert. Die Verwendung hochwertiger Texturfilter verschlimmert diese Situation noch. Verändert man diesen Shader nun so, dass dieser Pixelshader 3.0 Fähigkeiten nutzt, kann man aber durchaus Fillrate einsparen:

Pixelfarbe = Schwarz

WENN Textur0.X UNGLEICH 0
   DANN Pixelfarbe = Pixelfarbe + Textur0.X * Textur1

WENN Textur0.Y UNGLEICH 0
   DANN Pixelfarbe = Pixelfarbe + Textur0.Y * Textur2

WENN Textur0.Z UNGLEICH 0
   DANN Pixelfarbe = Pixelfarbe + Textur0.Z * Textur3

Pixelfarbe = 2*(Pixelfarbe * Vertexfarbe)

Steht also schon vor dem Einlesen der Textur fest, dass diese gar nicht zur Pixelfarbe beiträgt, wird das Auslesen gleich gespart. Für den Fall, das für jeden Pixel nur jeweils zwei der drei Texturen benötigt werden, ergibt sich daraus eine Einsparung von etwa 33 Prozent der Füllrate.

  •  Shadow Mapping

Bei dieser Schattentechnik wird unter Zuhilfenahme einer Textur mit Tiefeninformationen ermittelt, ob ein Pixel im Schatten liegt. Bisherige Grafikchips mussten dabei in jedem Fall die Farbe des Pixels errechen, auch wenn dieser im Schatten lag.

Ein Grafikchip mit Pixelshader-3.0-Funktionalität könnte nun, nachdem er festgestellt hat, dass dieser Pixel vollständig im Schatten liegt, die weitere Berechung der Pixelfarbe sofort abbrechen. Das Resultat wäre auch hier wieder eine Einsparung an Füllrate und Rechenleistung, die mit jedem Pixel in der Schattenzone größer ausfällt.

  •  Multiplex

Mit den Pixelshadern in DirectX8 wurden auch sogenannte Multiplex-Operationen eingeführt. Bei diesen wird abhängig von einem Wert zwischen zwei anderen gewählt:

WENN a GRÖSSER 0,5 DANN r = b SONST r = c

Bisherige Hardware erforderte nun immer, dass der Wert für b wie auch für c vor dem Durchführen der Multiplex-Operation bereits vollständig berechnet wurde. Eine Pixelshader 3.0 Hardware könnte den Code jedoch so umstrukturieren, das die Prüfung von a zuerst durchgeführt wird und dann erst b oder c berechnet wird. Eine solche Umstrukturierung erspart dem Chip, den nicht benötigten Teil berechnen zu müssen. Das bedeutet, dass egal welcher der beide Werte wirklich benötigt wird, im Vergleich zum ursprünglichen Shader immer etwas gespart wird.


Dies waren jetzt einige Beispiele, die Treiberentwickler der Grafikchip-Entwickler werden sicherlich noch die eine oder andere zusätzliche Möglichkeit finden. Noch einmal herauszustellen wäre, daß es sich bei den vorangestellten Möglichkeiten durchgehend um Optimierungen handelt, welche ohne jede Veränderungen an den bestehenden Spielen eben allein durch einen Grafikchip-Treiber realisiert werden können. Die Spiele-Entwickler haben natürlich noch weit mehr Möglichkeiten. Da diese aber nicht sofort mit der Verfügbarkeit eines Pixelshader 3.0 Grafikchips dem Spieler zur Verfügung stehen können, sollen diese Optionen hier keine Berücksichtigung finden.

Abschließend soll hier noch einmal ausdrücklich darauf hingewiesen werden, dass alle angesprochenen Optimierungen theoretischer Natur sind. Welche davon mit messbarem Erfolg von einem Pixelshader 3.0 Grafikchip und den dazugehörigen Treibern wirklich realisiert werden können, müssen wir schlicht abwarten.






Kommentare, Meinungen, Kritiken können ins Forum geschrieben werden - Registrierung ist nicht notwendig Zurück / Back 3DCenter-Artikel - Index Home

Shortcuts
nach oben