Geschichte von DirectX - alle Versionen erklärt

Als Windows 95 herauskam, war der Spielesektor fest in der Hand von DOS. Mit DirectX machte Microsoft Windows für Spiele fit. DirectX ist eine Sammlung von Programmaufrufen, Routinen und definierten Prozeduren, mit der Spieleprogrammierer die jeweilige Hardware, wie Grafikboard oder Soundkarte, ansteuern können, ohne zu wissen, wie sie genau aussieht. Später kamen noch zusätzliche Routinen dazu, die Windows-Komponenten wie die Protokolle zum Internetzugang oder für das lokale Netzwerk zugänglich machten.

Der Vorteil für den Programmierer ist, dass er ein Spiel nur noch für einen Computer- den DirectX-Computer - programmieren muss und das Spiel trotzdem auf jedem Rechner läuft. Microsoft entwickelt DirectX ständig weiter. Der 3D-Teil wird mit jeder Version umfangreicher. Er kümmert sich um die Ansteuerung der 3D-Funktionen der Grafikkarten und tauchte als Direct3D das erste Mal in DirectX 5 auf.

DirectX 12 - näher an der Hardware und dadurch schneller

Nachdem in den vorherigen DirectX-Versionen die Grafikeffekte immer wieder verbessert wurden und 3D-Spiele mittlerweile sehr realistisch aussehen, an denen sich das menschliche Auge kaum satt sehen kann, liegt der Focus in DirectX 12 mehr im Bereich der Performance-Optimierung. Ähnlich wie AMD's Mantle API hat der Entwickler die Möglichkeit, sehr nah an der Hardware zu entwickeln und somit diese besser ausnutzen zu können. Eine solche Low-Level-API steigert demzufolge die Effizienz und Leistung der verwendeten Grafikkarte und Prozessor.

DirectX 12 Logo

Ein Schnittstelle wie DirectX erzeugt immer einen relativ großen Overhead, da der Code des Entwicklers in Maschinensprache umgesetzt werden muss. Außerdem soll der Code (bzw. das Spiel) auf allen Hardware-Kombinationen lauffähig sein. Klar, dass hier eine Menge Ballast mitgeführt wird, die DirectX 12 nun deutlich verringert. Die aus Leistungssicht perfekte Alternative ist, dass Spiele für eine bestimmte Grafikkarte in Maschinencode geschrieben werden. In der Praxis aber schlicht nicht praktikabel.

Mehr GPU-Power durch asynchrone Shader

Eine moderne Grafikkarte besteht aus vielen Recheneinheiten (Compute Units) und kann verschiedenste Rechenoperationen (Task) aus unterschiedlichen Quellen berechnen. Die Zeiten, als Grafikchips reine Pixelberechnungen durchführten, sind schon lange vorbei. Die Entwickler haben aber festgestellt, dass die Tasks immer vollständig abgearbeitet werden müssen, bis ein nächster Task an der Reihe war. Auch eine richtige Priorisierung fehlte, so dass die von der Anwendung (aka Spiel) zu berechnenden Tasks stets nacheinander verarbeitet wurden.

DirectX 12 asynchrone shader bzw. Recheneinheiten
Klick auf das Bild, um das Video auf AMDs Youtube Kanal zu sehen

Mit DirectX 12 wird richtiges Multithreading unterstützt. Das Verarbeiten von Tasks erfolgt gleichzeitig und die Rendering Pipeline Tasks aus unterschiedlichen Quellen gleichzeitig. Die Vorteile: Leistungssteigerung durch weniger Wartezeiten, geringere Latenzen und wenige IDLE-Zeiten der GPU.

Bessere Unterstützung von Multicore-Prozessoren

Gibt es heute eigentlich noch Single-Core-Prozessoren? Mindestens zwei, in der Regel vier und bei Gamern werkeln sogar schon acht CPU-Kerne im System. Mit DirectX 12 werden endlich auch alle und nicht nur ein Prozessorkern(e) ausgelastet. Ermöglicht wird dies mit einem speziellen Cache, über den alle Prozessorkerne mit der Grafikkarte kommunizieren können.

DirectX 12 nutzt alle Prozessorkerne - Vergleich DirectX 12 vs. DirectX 11
DirectX 12 nutzt alle Prozessorkerne - Vergleich DirectX 12 vs. DirectX 11
Quelle: microsoft.com

Zusammenfassung

  • DirectX 12 ist eine Low-Level-API, sprich sehr Hardware-nah
  • Inoffizieller Nachfolger von AMD's Mantle API, der von allen Grafikherstellern (AMD, Nvidia, Intel) unterstützt wird
  • Asynchrone Shader werden unterstützt, die unterschiedliche Grafikoperationen (Shader-Tasks, Compute-Tasks, Speicher-Tasks) gleichzeitig bearbeiten.
  • Durchschnittliche Leistungssteigerung: 20-30%
  • Bessere Unterstützung von Multicore-Prozessoren
  • Weniger CPU-Overload
  • DirectX 11 Grafikkarten können auch DirectX 12 nutzen, intern wird aber auf DirectX 11 Level heruntergeschaltet. Das System profitiert aber vom geringen CPU-Overload und Multi-CPU-Support
  • Quellen: AMD DirectX 12, Nvidia DirectX 12

Erschienen: Juli 2015

DirectX 11 - die GPU übernimmt CPU-Aufgaben

Im Juli des Jahres 2008 hat Microsoft erstmals die Grafik-API DirectX 11 vorgestellt, welches in die erfolgreichen Fußstapfen von DirectX 10 treten sollte und ab Windows Vista lauffähig ist. DirectX 11 ermöglicht neben neuen 3D-Effekten, welche erwartungsgemäß von jeder neuen DirectX-Version verlangt werden,  auch die Möglichkeit mit sich, die GPU für allgemeine Rechenoperationen zu verwenden, sprich Nicht-Grafik-Anwendungen, welche normalerweise von dem Prozessor erledigt werden.

Microsoft DirectX 11 Logo

Das sind die wichtigsten Erneuerungen:

  • Tesselation: unter diesem Begriff verbergen sich die neuen Grafikeffekte, welche auf dem Shader Model 5 basieren.
  • DirectCompute: Nicht-Grafik-Anwendungen können die Rechenleistung der GPU in Anspruch nehmen, welche normalerweise von dem Prozessor erledigt werden. Man spricht auch auch von GPGPU (General Purpose Computation on Graphics Processing Unit).
  • Multi-Threading: Verbesserung der Spieleleistung auf Multi-Prozessor-Systemen. Dringend notwendig, da Dual-, Triple,- Quad- und mittlerweile Hexa-Core-Prozessoren sich am Markt durchgesetzt haben.

Beginnen wir mit der Erläuterung der neuen Grafikfeatures durch die Tesselation-Einheiten. Hierdurch werden 3D-Objekte verfeinert, wodurch sie detailgetreuer dargestellt werden können. Pflastersteine auf Strassen werden nahezu realistisch dargestellt. Wo früher einfache Texturen auf flachen Untergrund platziert wurden, sieht man heute realistische 3D-Objekte. Stein für Stein folgt die Straße ihrem Ziel und der erfahrene 3D-Spieler kommt aus dem Staunen nicht mehr heraus. Ein Screenshot aus dem Unigine Heaven 2.0 Benchmark verdeutlicht dies:

DirectX 11 - Tesselation-Einheit

Mithilfe von DirectX 11 können natürliche Unebenheiten dargestellt werden, ohne die Grafikkarte zu überlasten. Auch die Texturen auf den Steinen im linken Bildbereich, sind sehr detailliert und realistisch. Kurz und umgangssprachlich ausgedrückt: "keine symmetrischen Rechtecke, die einfach angemalt wurden". Den Unterschied zwischen DirectX 10 und DirectX 11 verdeutlicht folgender Screenshot, ebenfalls aus dem Unigine Heaven Benchmark:

Unterschied DirectX 10 und DirectX 11 mit Tesselation
Unterschied DirectX 10 und DirectX 11 mit Tesselation

Quellen zu Tesselation: Download DX11-Benchmark Heaven von Unigine, Microsoft.de

Eine weitere Interessante Möglichkeit ist, dass mithilfe von DirectX 11 die Rechenleistung von Grafikkarten für allgemeine Rechenaufgaben genutzt werden kann. Dies war vor DirectX 11 prinzipiell auch möglich, nur hat Microsoft die Umsetzung wesentlich vereinfacht. Da moderne Grafikkarte hochgezüchtete Rechenkraftwerke sind, welche im direkten Vergleich den Prozessoren deutlich überlegen sind. Das Problem bis dato war, dass die GPU nur 3D-Aufgaben berechnen konnte.

Es ist nur eine Frage der Zeit, bis Standard-Anwendungen auf DirectCompute zurückgreifen. Zur Zeit wird DirectCompute beispielsweise zum Ver- und Entschlüsseln verwendet, welches ein ernstzunehmendes Problem von Verschlüsselungsverfahren ist (Verschlüsselung von Festplatten, WPA, usw.)

Weitere Quellen zu DirectCompute: Nvidia.de

DirectX 10 - Nur für Windows Vista

DirectX 10, welche oftmals auch als Direct3D 10 bezeichnet wird, wurde Anfang des Jahres 2007 mit dem Betriebssystem Windows Vista eingeführt. Microsoft machte einen einflussreichen Einschnitt in die Versions-Historie von DirectX, denn anstatt DirectX 10 für die Vorgängerbetriebssysteme wie beispielsweise Windows XP anzubieten, wurde DirectX 10 ausschließlich für Windows Vista (und höher) konzipiert. Windows 98, 2000 und XP untersützen maximal DirectX 9c, so dass Anwender zum neuen Windows Vista Betriebssystem gezwungen werden, um in den Genuss der neuen DirectX 10 Technik zu kommen.

Microsoft directX 10 Logo

Einer der wichtigsten Erneuerungen in DirectX 10 ist das neue Shader Model 4, welches so genannte Unifiedshader (Streamprozessoren) voraussetzt, welche in der Lage sind, sowohl Pixel-, Vertex- und Geometrie-Shader-Berechnungen durchzuführen. Bis DirectX 9c wurden auf Grafikkarten maximal Pixel- und Vertexshadereinheiten eingesetzt, wobei diese jeweils nur Vertex- bzw. Pixelshaderberechnungen durchführen konnten. Die universellen Unifiedshader der DirectX 10 Grafikkarten können beide Varianten und sogar die neu hinzugekommene Geometrieshaderberechnungen berechnen. Der Vorteil liegt auf der Hand: die Shadereinheiten einer Grafikkarte können theoretisch voll ausgelastet werden, denn das Argument "ich bin eine Pixelshadereinheit, ich kann keine Vertexberechungen durchführen" entfällt.

DirectX 10 ermöglicht bessere Lichteffekte
DirectX 10 ermöglicht bessere Lichteffekte

Des Weiteren wurde mit DirectX 10 das Windows Display Driver Model in der Version 1.0 eingeführt. Außerdem bringt DirectX 10 viele neue Effekte mit sich, um die 3D-Spiele noch realitätsgetreuer darzustellen. Darunter gehören zum Beispiel Realistischere Materialien und Charaktere, um Oberflächen wie Berge, Vegetation oder Tierfelle besser darzustellen. Außerdem wurden volumetrische Effekte eingeführt, um die Rauch und Wolkendarstellung verbessert darzustellen. Realistische Spiegelungen und Lichtbrechung auf Wasser, Autos, Glas wurden durch DirectX 10 ebenfalls verbessert.

Verbesserte Darstellung von Oberflächen und Vegetation
Verbesserte Darstellung von Oberflächen und Vegetation

Webseite: DirectX 10 @ microsoft.com
Erschienen: 1. Quartal 2007

DX10 - Realistische Gesichtsdarstellung
DX10 - Realistische Gesichtsdarstellung
Vergleich DirectX 9 und 10
Vergleich DirectX 9 und 10
Vergleich DirectX 9 und 10
Vergleich DirectX 9 und 10

DirectX 9 belebt Szenarien

Die Länge der Programme für die Vertex- und Pixelshader wurde um noch mehr Instruktionen erweitert. So hatte die für DirectX 8 verwendete Pixelshader-Programmiersprache 1.4 lediglich 16 Befehle. In der neuen Version 2.0 sind es bereits 96 Instruktionen. Die Vertexshader-Instruktionen sind von 128 auf 256 angewachsen. Damit lassen sich wesentlich aufwendigere Effekte programmieren. Die Vertexshader sind jetzt in der Lage, auf die Geometrie Einfluss zu nehmen. Sie können zum Beispiel lebensechte Animationen bei gleichzeitiger realistischer Ausleuchtung im Grafikchip errechnen. Vor T&L-Zeiten war dies Aufgabe der CPU, die sich heutzutage um andere Dinge kümmern kann, etwa um die physikalisch richtige Darstellung der Umgebung oder um die künstliche Intelligenz der Gegner. DirectX 9 hat die Berechnung der Farbwerte und des Alphakanals für "Transparenzeffekte von 8 Bit auf 24 Bit umgestellt (fp24).

geforce fx demo

Realistischer geht es kaum: Nvidia zeigt anhand dieses Demos die
Leistungsfähigkeit der Geforce FX unter DirectX9

In der Microsoft-Reklame nennt sich dieses Feature "Fließkommagenauigkeit". Diese Umstellung war notwendig, da 8 Bit für die Shader-Programme zu wenig waren, was zu Rundungsfehlern und damit zu hässlichen Farbstörungen führte. Radeon-Karten ab 9500 unterstützen fp24. Nvidia berechnet die Farbwerte nach fp16 oder fp32. Da fp32 in der Filmindustrie der Standard ist, verspricht Nvidia filmreife Effekte.

geforce fx demo

Links DirectX 8. Rechts DirectX 9. DirectX 9 ist schärfer und detaillierter als sein Vorgänger

Die größere Genauigkeit bei der Farbberechnung produziert nicht nur weniger Farbfehler, sondern erweitert grundsätzlich auch den Farbraum, der für Spiele zur Verfügung steht. Dadurch wirken Beleuchtungs- oder Reflexionseffekte noch echter. Die bisher üblichen kleinen Farbsprünge bei der Ausleuchtung werden durch noch feinere Übergänge ersetzt. Und der nächste neue Effekt bei Direct-X 9 ist die Bewegungsunschärfe Motion Blur. In der Realität werden schnelle Objekte ab einer bestimmten Geschwindigkeit unscharf. Dies simuliert DirectX 9 jetzt ebenfalls. Displacement Mapping ermöglicht endlich auch das Tapezieren von dreidimensionalen Oberflächen auf Objekte. Anders als Bump Mapping, das Dreidimensionalität nur vortäuscht, erzeugt Displacement Mapping Oberflächenstrukturen aus echten Polygonen. Die Höhendaten sind dabei in Height Maps enthalten. Damit wird nicht mehr nur die Illusion einer strukturierten Oberfläche erzeugt, sondern die Oberfläche hat tatsächlich funktionale Struktur. So kann ein Spieler zum Beispiel an die Raufasertapete herantreten und die Struktur zerstören oder verändern.

Erschienen: 19. Dezember 2002

DirectX 8 formt Objekte

DirectX 8 baute die Fähigkeiten der T&L-Engine weiter aus. Außerdem konnte diese Version mit Vertex- und Pixelshader sowie Triangle Tesselation aufwarten. Ein so genannter Vertex bezeichnet einen der drei Eckpunkte einer Dreiecksfläche, aus der alle Objekte in einem Spiel aufgebaut sind. Die Anzahl der Vertices pro Objekt kann in die hunderttausende gehen. Bei der Darstellung eines Gegenstands auf dem Monitor wird nur mit diesen Vertices gerechnet, die sich vor dem Auge des Spielers zum Beispiel zu einem Gegner oder einem Gebäude formen. Jeder Vertex umfasst seine Spielkoordinaten, sein reales physikalisches Gewicht, seine Normale, seine Farbe und die Textur sowie Informationen über Nebel und Punktgröße. Der Vertexshader erlaubt nun die Veränderung dieser Informationen mit kleinen Programmen, die in DirectX 8 in der Programmiersprache Assembler geschrieben werden mussten. Die Befehle werden unabhängig vom Hauptprozessor im eigenständigen Vertexshader-Bereich der Grafikkarte ausgeführt. Der Vertexshader kann so die Gestalt eines Objekts und dessen Bewegungen verändern sowie Interpolationen. Spiegelungen oder beliebige Deformationen berechnen.

vertex shader

Realitätsnahe Darstellung von Oberflächen wurde erst mit DirectX 8 möglich

Außerdem lassen sich die Farbwerte, die Beleuchtung, die Texturkoordinaten und die Oberflächenerscheinung beeinflussen. Vertexshader können mit den Vertices praktisch so ziemlich alles anstellen, was die Programmiersprache hergibt. Im Pixelshader können schwierige Oberflächen wie Fell, Haut, Vinyl, gehämmertes Metall oder abblätternde Farbe realistisch erzeugt werden. Ohne Pixelshader nimmt man für diese Oberflächen Texturen, man tapeziert also Haare, Fell oder Farbe auf das Objekt. Das wirkt nicht sehr wirklichkeitsnah, vor allen Dingen dann nicht, wenn man etwas näher an diese Flächen heran- oder um sie herumgeht.

vertex shader

Pixelshader ersetzen solche vorgefertigten durch berechnete Texturen. Die Frisuren bestehen dann wirklich aus einzelnen Haaren. Darüber hinaus kann der Programmierer in seinen Pixelshader-Programmen sehr einfach Bump Mapping, Reflexionen oder die Beleuchtung einzelner Pixel umsetzen.

Erschienen: 12. November 2000

DirectX 7 lernt beleuchten

DirectX 7 brachte die nächsten 3D-Effekte in Form einer einfachen Transform- und Lighting-Einheit (T&L) sowie der Cube Maps (Cubic Environment Mapping). Die Transform-Engine ist für die Komplexität eines Spielobjektes und seine Lage im virtuellen 3D-Spiele-Universum zuständig. Je komplexer das Objekt, desto realistischer wirkt es, doch desto aufwändiger ist es auch zu berechnen. Eine Transform-Engine übernimmt diese Kalkulation. In der Grafikkarte wird sie von einem speziellen Chip übernommen, der um ein Vielfaches schneller ist als ein Hauptprozessor. Die Lighting-Engine dient der Beleuchtung der 3D-Szene. Sie bestimmt, wie ein oder mehrere Gegenstände im Raum angestrahlt werden. Hierfür gibt es drei verschiedene Konzepte: Das einfachste Modell ist Ambient Lighting. Hier beleuchtet eine Lichtquelle alle Objekte mit der gleichen Intensität.

Das ist jedoch die unrealistischste Beleuchtungsmethode, da sie nicht berücksichtigt, dass entferntere Lichtquellen weniger hell strahlen oder dass reflektiertes Licht schwächer wird, doch zugleich benachbarte Objekte erhellt. Dieses Lichtmodell erfordert keine spezielle LightingHardware und kann ohne Zeitverlust vom Hauptprozessor berechnet werden. Schon etwas komplexer ist Diffuse Lighting. Die Lichtquelle strahlt hierbei aus einer bekannten Position und Richtung. Mit Hilfe der Vektorrechung wird bestimmt, wie stark das Licht von einem Objekt reflektiert wird.

geforce 256 Grafikkarte
Geforce 256 unterstützte erstmal T&L

Die Geforce 256 war die erste Grafikkarte, welche eine integrierte T&L-Einheit besaß. Diffuse Lighting wirkt aber auch noch nicht realitätsnah, da das reflektierte Licht in alle Richtungen gleich stark strahlt, so dass die Position des Spielers unberücksichtigt bleibt. Aus diesem Grund wird es in Spielen auch vorberechnet. Mit Diffuse Lighting kann man sehen, dass ein Objekt beleuchtet ist, aber nicht, woher das Licht kommt. Specular Lighting ist das komplexeste Modell, aber auch dasjenige, das der Realität am nächsten kommt. Hier sind die Position der Lichtquelle und die Richtung des Lichtes bekannt. Außerdem werden die Reflektionen in Abhängigkeit von der Betrachterposition berechnet. Je nach Standort ändern sich die Glanzlichter auf dem reflektierenden Objekt. Mit Specular Lighting sieht man, woher die Lichtquelle kommt und wie sie auf das Objekt gerichtet ist.

In Spielen setzt sich die Beleuchtung meist aus Diffuse und Specular Lighting zusammen - wenn der Programmierer nicht die Vertexshader benutzt hat (dazu mehr bei DirectX 8 und 9). Das so genannte Cubic Environment Mapping nutzt sechs plane Texturen, die wie die Flächen eines Würfels um das Objekt angeordnet sind.

Das Objekt selbst muss keine Würfelform haben, sondern kann zum Beispiel auch eine Kugel sein. Durch diesen Trick wird es möglich, auf einem Objekt Reflektionen aus allen Richtungen abzubilden.

Erschienen: 12. November 2000

DirectX 6 streicht Flächen

DirectX 6 stellte den Spieleprogrammierern das erste Mal Multitexturing und Bump Mapping zur Verfügung. Multitexturing ist die Technik, auf ein Objekt mehrere Texturen zu legen. Es wird zum Beispiel für Environment- und Bump Mapping, Detailtexturen (Kratzer an einer Wand), Specular Maps (Lichtreflexionen) oder für Diffuse Maps (farbige Lichtquellen und Scheinwerfer) benötigt.

bumpmapping

Bump Mapping ist die Möglichkeit, auf einer Oberfläche ein Relief abzubilden, also Unebenheiten oder Strukturen. Damit lassen sich Wände mit Raufaser tapezieren oder Wellen auf eine Wasseroberfläche projizieren.

Erschienen: 7. August 1998