|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Fx3DDieser Text richtet sich ausnahmsweise an Experten - wir bitten um Ihr Verständnis !
|
||||||||||||||||
|
Linien |
Im Regelfall werden die Dreiecke des 3D-Objekts jedoch vollständig ausgefüllt. Im einfachsten Fall erhalten alle Pixel dieselbe Farbe, die sich jedoch nach dem Winkel zwischen Fläche und Lichtquelle richten kann und so eine Lambert-Schattierung erlaubt:
|
Einfarbige Flächen mit Lambert-Schattierung |
Die Dreiecke können auch transparent ausgefüllt werden. Dieser Pixelshader profitiert besonders vom Rendern in eine Offscreen-Surface, denn beim Rendern in den Videospeicher müsste für jedes Pixel der bereits vorhandene Farbwert aus dem Grafikspeicher ausgelesen und die neue Farbe zurückgeschrieben werden. Dadurch würde sich nicht nur die zu übertragende Datenmenge verdoppeln, sondern die Leistung bräche auch durch den langsamen Transfer von der Grafikkarte zur CPU zusammen.
|
Einfarbige Flächen mit Transparenz |
Neben einfarbigen Flächen kann Fx3D auch Texturen zur Darstellung von 3D-Objekten verwenden. Im einfachsten Fall wird die Textur direkt und ohne weitere Veränderung dargestellt. Ein etwas komplexerer Pixelshader kann die Textur vorher aufhellen oder abdunkeln, so dass eine Lambert-Schattierung entsteht:
|
Textur mit Lambert-Schattierung |
Ein anderer Pixelshader prüft vor dem Bearbeiten eines Texels, ob es durchsichtig ist oder nicht. Auf diese Weise werden Formtexturen realisiert, die teilweise durchsichtig sind:
|
Formtextur mit Lambert-Schattierung |
Wird das Mapping der Textur nicht an den Eckpunkten der Dreiecke, sondern an ihren Normalenvektoren ausgerichtet, können Objekte mit einer Phong-Schattierung versehen werden, die besonders für runde Oberflächen geeignet ist:
|
Phong-Schattierung |
Fx3D enthält aufwändige Pixelshader, die mit mehr als einer Textur gleichzeitig arbeiten, dafür allerdings auch eine höhere Rechenleistung erfordern. So ist es möglich, eine Textur mit einer Phong-Schattierung zu versehen:
|
Umgebungstextur mit Phong-Schattierung |
Der einzige Fx3D-Pixelshader, der mit drei Texturen gleichzeitig arbeitet, benutzt eine Textur und versieht sie mit einer Phong-Schattierung. Diese wird jedoch von einer dritten Textur, der Bumpmap, gesteuert, so dass ein Gravureffekt auf der Oberfläche entsteht:
|
Umgebungstextur mit Phong-Schattierung und Bump-Textur |
Da Fx3D anders funktioniert als heute gebräuchliche 3D-Systeme, sind auch andere Faktoren für die Leistungsfähigkeit verantwortlich. Falls die Geschwindigkeit des Computers nicht ausreicht, kann die Auflösung reduziert werden:
|
3D-Auflösung |
Durch das Rendern der 3D-Objekte in den Arbeitsspeicher spielt die Leistung Grafikkarte zunächst einmal keine Rolle, vielmehr kommt es auf eine schnelle CPU und schnellen Arbeitsspeicher an. In modernen Systemen ist der Prozessor deutlich schneller getaktet als der Arbeitsspeicher. Aus diesem Grund verfügt die CPU über ein abgestuftes System aus Caches (L1 bis L3), die häufig benötigte Teile des RAMs direkt im CPU-Chip in sehr schnellen Speicherbausteinen vorhalten. Die Größe des CPU-Caches ist für die Leistung von Fx3D entscheidend. Dies liegt nicht nur daran, dass jedes Pixel eines Dreiecks in den Arbeitsspeicher geschrieben werden muss, auch die Pixelshader greifen pro Bildpunkt und Textur mindestens einmal auf den Arbeitsspeicher zu. Gerade Texturzugriffe erfolgen dabei nicht an aufeinander folgende Adressen; ist der L1-Cache des Prozessors zu klein, müssen ständig Cachelines zeitaufwändig nachgeladen werden, was zu deutlichen Leistungseinbußen führen kann. Die Pixelshader in Fx3D arbeiten optimal mit mindestens 32 KB L1-Datencache pro Polygontextur.
Nachdem alle 3D-Objekte in die Offscreen-Surface gerendert wurden, muss der Inhalt vom Arbeitsspeicher in den Speicher der Grafikkarte kopiert werden, um schließlich angezeigt zu werden. Da hier Schreibzugriffe an aufeinander folgende Adressen stattfinden, stellt dies für moderne AGP-Grafikkarten dank Write Combining, das von DESKWORK aktiviert wird, kein Problem dar. Auch gute PCI-Karten, etwa mit S3-Chip, sind leistungsfähig genug.
Grafikkarten, die über PCI-Express (PCIe) angebunden sind, bieten eine noch höhere Geschwindigkeit. Bei PCIe-Systemen sollte darauf geachtet werden, dass der Grafikkarte die maximalen 16 Lanes zur Verfügung stehen:
|
2 herkömmliche PCI-Slots, 4 PCIe-Slots mit 1 Lane, 1 PCIe-Slot mit 16 Lanes |
Fx3D bietet trotz reinem Software-Rendering eine hinreichende Leistung für die Darstellung von 3D-Objekten in DESKWORK. Sollten zukünftig DESKWORK-Applikationen entwickelt werden, die mehr Leistung erfordern, kann Fx3D noch weiter optimiert werden.
Das Rendern von Dreiecken erfolgt zeilenweise. Diese Aufgabe kann parallelisiert werden, so dass beispielsweise ein Thread alle geraden Scanlines zeichnet, während ein zweiter Thread alle ungeraden Scanlines übernimmt. Eine solche Aufteilung macht auf herkömmlichen CPUs keinen Sinn, da sich beide Threads ohnehin die Rechenleistung derselben CPU teilen müssten. Bei Mehrkern-Prozessoren hingegen würde sich die Leistung der Pixelshader annähernd verdoppeln bzw. vervierfachen. Da sich Mehrkern-Prozessoren immer mehr durchsetzen, ist dies eine sehr wahrscheinliche Optimierung für zukünftige Fx3D-Versionen, zumal diese Technik auch andere CPU-lastige Operationen wie das Berechnen von Fraktalen beschleunigen würde.
|
Spezial-Mainboard mit vier AMD Opteron-Prozessoren |
Eine weitere Optimierung kann darin liegen, die oben beschriebenen Offscreen-Surfaces statt im Hauptspeicher im Speicher der Grafikkarte zu erzeugen, sofern diese über genügend RAM verfügt. Dies scheint zunächst widersinnig, da dann wieder alle Pixel über den Bus übertragen werden müssen statt in den schnelleren Arbeitsspeicher - bei sich überlappenden Dreiecken auch noch mehrfach.
Dem gegenüber steht jedoch die enorme Zeitersparnis, die durch die Nutzung von Beschleunigungerfunktionen der Grafikkarte entsteht. DESKWORK nutzt bereits die 2D-Beschleunigung von vielen Grafikkarten, zum Beispiel der Hersteller ATI, Intel, Matrox oder S3. Dadurch ist es möglich, sehr schnell ausgefüllte Rechtecke in den Grafikspeicher zu schreiben, ohne dass jedes Pixel einzeln übertragen werden muss. Auch können so schnell und ohne Buszugriffe Bereiche innerhalb des Videospeichers verschoben werden. Grafikkarten mit 3D-Beschleunigung besitzen weitere Funktionen zum direkten Zeichnen von Polygonen in den Grafikspeicher, wobei ungenutzte Teile des Videospeichers für Texturen genutzt werden müssen.
|
Moderne 3D-Grafikkarte mit 512 MB Grafikspeicher (S3 Chrome S27) |
In diesen Dokumenten finden Sie weiterführende Informationen zu Fx3D.
|
|
Fast affine texture mapping Mats Byggmästar (Doomsday) Stand: 07.12.2004 |
|
| |