PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : D3D11 – Displacement-Map im Domainshader?


aths
2010-02-06, 14:39:58
Wo wird in D3D11 üblicherweise eine Displacementmap eingerechnet, wenn die Tesselationseinheit genutzt wird? Schon im Domainshader oder erst im Geometryshader?

Kann der Computeshader ganz ohne Grafik genutzt werden? DX11-Pipeline-Bilder zeigen, dass der Pixelshader den Computeshader ansteuert.

Neomi
2010-02-06, 16:07:22
Displacement wird im Domain Shader berechnet. Im Geometry Shader ist es zwar technisch möglich, aber in der Form alles andere als effizient, da dann nicht mehr pro erzeugtem Vertex, sondern 3x pro erzeugtem Dreieck berechnet werden müßte. Hier ein simples Beispiel mit zweifacher Unterteilung:

/\ /\
/ \ / \
/ \ -> /----\
/ \ / \ / \
/ \ / \/ \
---------- ----------

Aus dem einzelnen Dreieck mit 3 Vertices werden 4 Dreiecke mit 6 gemeinsam genutzten Vertices. Der Domain Shader muß das Displacement also 6x berechnen. Der Geometry Shader würde 4x mit je einem resultierenden Dreieck aufgerufen und müßte das Displacement pro Vertex (ab dem GS nicht mehr gemeinsam genutzt) einmal berechnen, also insgesamt 12x. Das wäre die doppelte Rechenlast für nichts.

Um den Compute Shader nutzen zu können, brauchst du ein gültiges Direct3D Device. Das Device mußt du aber nicht zur Grafikausgabe nutzen, du kannst auch völlig losgelöst von jeder Ausgabe einfach so rechnen und die Ergebnisse rausziehen. Also ja, der Compute Shader kann auch ohne Grafikbezug genutzt werden.

Coda
2010-02-06, 16:21:00
Anmerkung: Das Direct3D-Device kann auch völlig ohne Framebuffer erzeugt werden (headless).

Neomi
2010-02-06, 16:55:00
Ergänzung zur Anmerkung:
Das wäre dann D3D11CreateDevice statt D3D11CreateDeviceAndSwapChain. Der Framebuffer, der zur Grafikausgabe benötigt wird, ist Teil der Swapchain, die bei älteren D3D-Versionen noch implizit war. Genauere Infos finden sich in der offiziellen Dokumentation (http://msdn.microsoft.com/en-us/library/ee416173%28VS.85%29.aspx).

Coda
2010-02-06, 17:08:48
D3D11CreateDeviceAndSwapChain ist doch sowieso nur Syntactic-Sugar.