Direct3D

Pipeline

Direct3D ist eine Programmierschnittstelle (API) von Microsoft für 3D-Computergrafik. Direct3D ist ein Bestandteil von DirectX. Das 1992 von Servan Keondjian gegründete Unternehmen RenderMorphic wurde im Jahre 1995 von Microsoft gekauft, um dessen 3D-API Reality Labs zu Direct3D weiterzuentwickeln und 1996 in DirectX 2.0 zu integrieren. Keondjian leitete die Arbeiten und Doug Rabson agierte als Chefentwickler des Microsoft-Teams, das die 3D-API für Windows 95 entwickelte. Nach der Fertigstellung verließen Keondjian und Rabson das Unternehmen.

Direct3D dient dazu, Windows-Anwendungen einen möglichst direkten Zugriff auf die Hardware eines Computers zu geben. Häufig verwendet wird Direct3D vor allem für Computerspiele, bei dem es mit dem plattform- und betriebssystemunabhängigen OpenGL konkurriert. Direct3D verwendet anders als OpenGL ein linkshändiges Koordinatensystem.

Die lange Zeit eigenständige Programmierschnittstelle DirectDraw zur Programmierung von 2D-Computergrafik wurde mit DirectX 8.0 in Direct3D integriert.

Für die Grafikausgabe existiert in Windows neben Direct3D auch das Graphics Device Interface (GDI). Das GDI stellt eine abstrahierte Programmierschnittstelle zur Verfügung, bei der es für den Programmierer etwa wenig Unterschied macht, ob auf einen Bildschirm oder auf einen Drucker gezeichnet wird. Diese Abstraktion macht die Ausgabe selbst allerdings deutlich langsamer, unter anderem deshalb, weil das GDI komplexe Zeichenbefehle aus Grundoperationen nachbilden muss. Im Gegensatz zu Direct3D kommt das GDI daher vorrangig zur Darstellung gewöhnlicher Desktopapplikationen zum Einsatz, die nicht allzu grafik-intensiv sind. Mittlerweile existieren auch weitere Grafikschnittstellen in Windows, wie z. B. GDI+ oder Direct2D.

Mit Direct3D können Anwendungen dagegen an GDI vorbei direkt auf die Hardware zugreifen. Wenn ein Gerät einen komplexeren Befehl nicht unterstützt, so gibt Direct3D lediglich eine Fehlermeldung zurück. Es ist dann Aufgabe der Anwendung, auf diese Fehlermeldung adäquat zu reagieren – etwa durch Nachbildung des Befehls aus Grundoperationen, durch weniger detailgetreue Darstellung oder durch eine Fehlermeldung an den Anwender.

Verschiedene Grafikkarten unterstützen Direct3D durch Gerätetreiber, welche die standardisierten API-Befehle von Direct3D auf die Grafikhardware abbilden. Dabei unterscheidet Direct3D zwischen initialisierenden und ausführenden Befehlen. Initialisierende Befehle konvertieren komplexere Datenstrukturen – wie etwa Texturen – in das grafikkarten-spezifische Format, ausführende Befehle zeigen die derart konvertierten Elemente an. Da das Initialisieren und Konvertieren von Elementen einige Zeit in Anspruch nehmen kann, ist es bei Spielen üblich, dies während des Ladens eines neuen Levels zu tun. Ausführende Befehle sind dagegen auf größtmögliche Geschwindigkeit optimiert.

Moderne Grafikkarten stellen so genannte Hardware-Shader zur Verfügung. Diese Shader sind ausführbare Mini-Programme, welche zum Erzeugen von 3D-Effekten benutzt werden. Für die Programmierung der Shader definierte Microsoft eine eigene Maschinensprache, die von den beiden derzeit führenden Produzenten von Grafikchips, NVIDIA und AMD in ihren Chips überwiegend direkt unterstützt werden. Heutzutage werden aber vorwiegend Hochsprachen wie HLSL oder GLSL zur Shader-Programmierung genutzt. Direct3D erlaubt es, die verfügbaren Shader-Typen (Vertex-Shader, Pixel-Shader und Geometry-Shader) anzusteuern.

Unterstützte Plattformen

Die ersten Versionen von Direct3D wurden für Windows 95 entwickelt. Die derzeit aktuelle Windows-Version von Direct3D ist Version 12.x, diese wird jedoch genauso wie Direct3D 10 nur in Windows Vista und Windows 7, sowie zusätzlich Windows 8 in neueren Unterversionen unterstützt. Die weiterhin verfügbare Version 9.0c unterstützt sowohl die Nachfolger von Windows 95 als auch – mit Windows XP – die NT-Linie.

Die von Microsoft produzierten Spielkonsolen Xbox und Xbox 360 werden ebenfalls mit Varianten von Direct3D programmiert. Neben diesen beiden von Microsoft offiziell unterstützten Plattformen existieren mit Cedega und Wine zwei Implementierungen des Direct3D-APIs für Linux. Auch die Sega Dreamcast war kompatibel zu Direct3D.

Feature levels

Mit Direct3D 10.1 wurde das Konzept der feature levels eingeführt.[1][2]

9.19.29.310.010.111.011.112.012.1
Shader-Modell2.02.04.0 (4.0_level_9_3)4.04.x5.05.05.15.1
Geometry Shaderneinneinneinjajajajajaja
Stream Outneinneinneinjajajajajaja
DirectCompute / Compute-Shaderneinneinneinteilsteilsjajajaja
Hull Shaderneinneinneinneinneinjajajaja
Domain Shaderneinneinneinneinneinjajajaja
Tiled ResourcesneinneinneinneinneinteilsteilsTier2Tier2
Conservative RasterizationneinneinneinneinneinneinteilsteilsTier1
Rasterizer Order Viewsneinneinneinneinneinneinteilsteilsja
Min/Max Filtersneinneinneinneinneinneinteilsteilsja
Map Default Bufferneinneinneinneinneinteilsteilsteilsteils
Texture Resource Arrayneinneinneinjajajajajaja
Cubemap Resoure Arraysneinneinneinneinjajajajaja
BC4/BC5-Kompressionneinneinneinjajajajajaja
BC6H/BC7 Kompressionneinneinneinneinneinjajajaja
Alpha to Coverageneinneinneinjajajajajaja
Erweiterte Formatejajajateilsteilsjajajaja
10-bit pro Farbkanalneinneinneinteilsteilsjajajaja
Logische Operationen (Output Merger)neinneinneinteilsteilsteilsjajaja
Rasterisierung unabhängig vom Targetneinneinneinneinneinneinjajaja
Multiple Render Target (MRT) mit ForcedSampleCount 1neinneinneinteilsteilsteilsjajaja
Unordered Access View (UAV)-Slots---118646464
UAV in jeder Stageneinneinneinneinneinneinjajaja
max. ForcedSampleCount beim nur-UAV-Rendern-----8161616
Constant Buffer Offsets und teilweise Aktualisierungenjajajateilsteilsteilsjajaja
Formate mit 16 Bit pro Pixelteilsteilsteilsteilsteilsteilsjajaja
max. Texturgröße2048204840968192819216384163841638416384
max. Cubemapgröße51251240968192819216384163841638416384
max. Volumenausbreitung256256256204820482048204820482048
max. Texturwiederholungen128204881928192819216384163841638416384
max. Anisotropie21616161616161616
max. Anzahl Primitive
max. Input Slots161616163232323232
Render Targets simultan114888888
Occlusion Queriesneinjajajajajajajaja
Separater Alpha-Blendneinjajajajajajajaja
Mirror Onceneinjajajajajajajaja
Überlappende Vertex-Elementeneinjajajajajajajaja
Unabhängige Write Masksneinneinjajajajajajaja
Instancingneinneinjajajajajajaja
Texturen, die kein Vielfaches von 2 darstellenneinneinneinjajajajajaja
Constant Bufferneinneinneinjajajajajaja
max. Anzahl Constant Buffer je Shader---151515151515
max. Anzahl Konstanten im Constant Buffer---409640964096409640964096
Index-Buffer Formate16-bit16-bit, 32-bit16-bit, 32-bit16-bit, 32-bit16-bit, 32-bit16-bit, 32-bit16-bit, 32-bit16-bit, 32-bit16-bit, 32-bit

Siehe auch

Literatur

  • Uli Theuerjahr: Direct3D Real Time Rendering für Computerspiele. DirectX-Programmierung in C++. Roulio Press, Schönberg 2007, ISBN 978-3-00-022340-2.

Einzelnachweise

  1. Direct3D feature levels. MSDN. Abgerufen am 30. September 2014.
  2. Feature Level. In: indiedev.de. Archiviert vom Original am 6. Oktober 2014; abgerufen am 25. Juni 2020.

Auf dieser Seite verwendete Medien

D3D Pipeline.svg
Autor/Urheber: Soumyasch, Lizenz: CC-BY-SA-3.0
Direct3D version 10 Graphics Pipeline