2012-11-20 10 views
5

Ich war den ganzen Tag dabei und fange an, es aufzugeben. Ich kann nicht viele Informationen über Compute Shader finden. Beste Quelle war "Practical Rendering and Computation mit Direct3D 11" und leider war es nicht zu viel Hilfe. Es hat mir geholfen, einige Theorien zu verstehen, aber ich weiß immer noch nicht, wie ich etwas umsetzen soll.Compute Shader, wo passen sie in die Pipeline?

Ich arbeite an etwas ähnlich dem Partikelsystem, das in diesem Buch erstellt wird. Außer meinem Partikelsystem wird im Grunde nur Partikel haben, die in einem 3D-Gitter angezeigt werden (nichts wie Schwerkraft/Kräfte/etc). Dies ist für pädagogische Zwecke, wenn ich diese Arbeit bekomme, würde ich in der Lage sein, den Rest auszuarbeiten, den ich annehme.

Was ich nicht verstehe ist, wie der Compute Shader in die Pipeline passt. Ich denke, ich verstehe, was ich tun muss, aber ich weiß nicht, wie ich es zum Laufen bringen soll.

Ich muss irgendwie den Compute-Shader mit einem Puffer mit allen Partikelpositionen gefüllt. (Sagen wir, ein 1024x1024x1 Puffer). Ich brauche dann diesen Compute-Shader, um jede Position als einen Vertex an meinen Vertex-Shader auszugeben, und der Rest der Pipeline ist danach Standard (der Vertex-Shader führt alle Transformationen durch, mein Geometrieshader erweitert den Vertex zu einem Quad und mein Pixel Shader rendert es).

Ich weiß nicht einmal, ob das stimmt, aber es klingt richtig. Und selbst wenn, habe ich keine Ahnung, wie ich das machen würde. Wie würde ich die Ausgabe des Compute-Shaders dem Vertex-Shader zuführen? Wie würde ich anfangs den Compute Shader starten? Wie würde ich sicherstellen, dass der Compute Shader den Puffer der Partikel nicht verwerfen würde? (Andernfalls müsste ich jedes Mal die Partikel zuführen, was den Zweck der (eventuell) Durchführung eines Partikelsystems mit Partikeln, die sich bewegen würden usw., würde zunichte machen, da ich das alles auf der CPU tun müsste)

Es gibt so viele Unbekannte, und es fühlt sich an, als würde ich alles wissen, um mit dem Schreiben dieser Shader zu beginnen. Ich kann keine Trittsteine ​​finden.

+0

Es passt nicht direkt in den Rest der Pipeline, es ist eine unabhängige Sache. Die Schnittstelle verwendet jedoch aus naheliegenden Gründen viele der gleichen Dinge. Und die Ergebnisse und Eingaben sind die gleiche Art von Grafikkartenobjekten, die die Pipeline verwendet, was es sehr gut macht, in Kombination mit der Pipeline zu verwenden. – jcoder

+0

Ich begann mit Computer-Shadern, indem ich einen einfachen, unabhängig von Grafikmaterial, der nur zwei Puffer mit Zahlenfeldern füllt und einen Compute-Shader erstellt, um eine dritte zu erzeugen, die ihre Summe enthält und sie zum Drucken an die CPU zurückliest ... Sie können sehen, wie Sie das erweitern können, um die Positionen einer Ladung von Partikeln zu aktualisieren - und dann wäre es nicht nötig, diese Positionen zurück in die CPU zu lesen, ein Grafikpipeline-Programm könnte die Daten direkt als Eingabe verwenden. – jcoder

+0

Ich würde etwas wie dieses Buch http://www.amazon.co.uk/Introduction-Game-Programming-DirectX-ebook/dp/B0085CDJY4 empfehlen, da es genau die Art von Beispielen enthält, die Sie brauchen. (Obwohl es manchmal einige Schritte wegzulassen scheint, fand ich es ein gutes Buch) – jcoder

Antwort

3

Der Compute Shader ist kein Teil der Grafikpipeline. Es ist ein Tool für einfache GPGPU, so dass Sie die Rechenleistung des Grafikgeräts für nicht-rendering Zweck, wie Partikelbewegung, auf eine einfachere Weise verwenden können. Wenn Sie es für Ihr Partikelsystem verwenden möchten, sollten Sie die Partikelpositionen zuerst mit einem Compute-Shader berechnen. Dann füllen Sie die Ausgabe in Ihrem normalen Code in einen Vertexpuffer zum Rendern. AFAIK gibt es keine direkte Möglichkeit, die Ausgabe an die Renderpipeline zu puffern, aber ich bin mit Compute Shadern nicht so vertraut. Interessante Links für Sie sind vielleicht die documentation und die example dort. Die Grafikpipeline wird unter page angezeigt.

Verwandte Themen