Demirug
2003-04-27, 15:20:48
Da es scheinbar immer wieder Missverständnisse bezüglich Renderpfade und Shaderversionen bei Direct 3D kommt hier mal eine kleine Einführung.
DirectX unterstützt seit DX8 zwei verschiedene Modele zur Programmierung.
1. Das Model der konfigurierbaren Vertex und Pixel einheit (DX7).
Hierbei ist es erlaubt aus einer fest vorgegebenen Anzahl von Optionen die gewünschten Auszuwählen und zu konfiguieren.
2. Das Model der programmierbaren Vertex und Pixeleinheit (DX8)
Bei diesem Model werden sämtliche Vertex und Pixel operationen jeweils von einem Programm (shader) gesteuert.
DX9 führte nun kein neues Model ein sondern erweiterte im wesentlichen nur das DX8 Model um weitere Shaderversionen mit zusätzlichen Fähigkeiten.
Aus Programmiersicht gibt es also bei der Direct 3d Programmierung nur zwei Modele zu berücksichtigen DX7 und DX8/9.
Aufgrund der grossen Flexibilität der Shaderprogramme ist es heute nicht mehr möglich alle Grafikeffekte die eie Engine im laufe ihrers Lebens darstellen soll im Voraus zu kennen. Aus diesem Grund geht man dazu über Effekt orientierte Engines zu schreiben. Die Grafikeffekte sind bei einer solchen Engine nicht mehr fest im Code einprogrammiert sondern sind als eigenständige Dateien vorhanden welche von der Engine geladen werden können. Eine solche Datei ist dabei nach folgendem Prinzip aufgebaut:
Effekt 1
Technologie 1 (DX7)
Pass 1
DX7 Vertex Settings
DX7 Pixel Settings
Pass 2
DX7 Vertex Settings
DX7 Pixel Settings
Pass 3
DX7 Vertex Settings
DX7 Pixel Settings
Pass 4
DX7 Vertex Settings
DX7 Pixel Settings
Technologie 2 (DX8)
Pass 1
VS 1.1 Programm
PS 1.1 Programm
Pass 2
VS 1.1 Programm
PS 1.1 Programm
Technologie 2 (DX9)
Pass 1
VS 2,0 Programm
PS 2.0 Programm
Effekt 2
....
Zusammengefast: Moderne DX-Engines enthalten einen Renderpfad der sowohl mit der configurierbaren und der programmierbaren DX-Schnitstelle arbeiten kann. Die genauen Informationen wie ein Effekt nun erreicht wird entnimmt die Engine aus entsprechenden Konfigurationsdateien.
Es dürfte nun auch hoffentlich verständlich sein das es nach wie vor jede zusätzlich unterstützte Technologie auch zusätzliche Arbeit bedeutet. Es müssen dafür zwar keine Änderungen an der eigentlichen Engine vorgenommen werden aber jemand muss die Datei mit den Effekten erweitern.
Diskussionsbeiträge und Nachfragen sind wie immer erwünscht.
DirectX unterstützt seit DX8 zwei verschiedene Modele zur Programmierung.
1. Das Model der konfigurierbaren Vertex und Pixel einheit (DX7).
Hierbei ist es erlaubt aus einer fest vorgegebenen Anzahl von Optionen die gewünschten Auszuwählen und zu konfiguieren.
2. Das Model der programmierbaren Vertex und Pixeleinheit (DX8)
Bei diesem Model werden sämtliche Vertex und Pixel operationen jeweils von einem Programm (shader) gesteuert.
DX9 führte nun kein neues Model ein sondern erweiterte im wesentlichen nur das DX8 Model um weitere Shaderversionen mit zusätzlichen Fähigkeiten.
Aus Programmiersicht gibt es also bei der Direct 3d Programmierung nur zwei Modele zu berücksichtigen DX7 und DX8/9.
Aufgrund der grossen Flexibilität der Shaderprogramme ist es heute nicht mehr möglich alle Grafikeffekte die eie Engine im laufe ihrers Lebens darstellen soll im Voraus zu kennen. Aus diesem Grund geht man dazu über Effekt orientierte Engines zu schreiben. Die Grafikeffekte sind bei einer solchen Engine nicht mehr fest im Code einprogrammiert sondern sind als eigenständige Dateien vorhanden welche von der Engine geladen werden können. Eine solche Datei ist dabei nach folgendem Prinzip aufgebaut:
Effekt 1
Technologie 1 (DX7)
Pass 1
DX7 Vertex Settings
DX7 Pixel Settings
Pass 2
DX7 Vertex Settings
DX7 Pixel Settings
Pass 3
DX7 Vertex Settings
DX7 Pixel Settings
Pass 4
DX7 Vertex Settings
DX7 Pixel Settings
Technologie 2 (DX8)
Pass 1
VS 1.1 Programm
PS 1.1 Programm
Pass 2
VS 1.1 Programm
PS 1.1 Programm
Technologie 2 (DX9)
Pass 1
VS 2,0 Programm
PS 2.0 Programm
Effekt 2
....
Zusammengefast: Moderne DX-Engines enthalten einen Renderpfad der sowohl mit der configurierbaren und der programmierbaren DX-Schnitstelle arbeiten kann. Die genauen Informationen wie ein Effekt nun erreicht wird entnimmt die Engine aus entsprechenden Konfigurationsdateien.
Es dürfte nun auch hoffentlich verständlich sein das es nach wie vor jede zusätzlich unterstützte Technologie auch zusätzliche Arbeit bedeutet. Es müssen dafür zwar keine Änderungen an der eigentlichen Engine vorgenommen werden aber jemand muss die Datei mit den Effekten erweitern.
Diskussionsbeiträge und Nachfragen sind wie immer erwünscht.