In XNA (und Direct3D im Allgemeinen AFAIK) bündeln Sie potenziell einzelne verwandte Shader in "Effekte", anstatt einzelne Vertex- und Fragment-Shader zu erstellen. Wenn Sie einen Effekt verwenden, wählen Sie eine "Technik" aus (oder durchlaufen alle), und dann hat jede "Technik" eine Anzahl von "Durchgängen". Sie durchlaufen jeden Durchgang, in dem der relevante Scheitelpunkt und Fragment-Shader ausgewählt wird, und zeichnen die Geometrie.
Was mich jedoch neugierig macht, ist, wofür Sie mehrere Durchgänge benötigen würden? Ich verstehe, dass Sie in den frühen Tagen von 3D nur eine Textureinheit hatten und dann zwei, und das war oft noch nicht genug, wenn Sie auch Umgebungsmapping durchführen wollten. Aber auf modernen Geräten können Sie selbst in der mobilen Klasse 8 oder mehr Texturen abtasten und so viele Beleuchtungsberechnungen durchführen, wie Sie möchten, in einem einzigen Shader.
Können die erfahreneren hier praktische Beispiele dafür liefern, wo noch Multi-Pass-Rendering erforderlich ist, oder ist dies nur eine Überentwicklung seitens XNA / Direct3d?
Wie in den anderen Antworten erwähnt, wird das Multi-Pass-Rendering (mehrfaches Zeichnen eines einzelnen Netzes mit unterschiedlichen Shadern / Parametern), wie in anderen Antworten vorgeschlagen, definitiv immer noch verwendet, hauptsächlich für Beleuchtung und Spezialeffekte
D3DX-Effektpässe könnten für solche Dinge verwendet werden. Es kann aber auch mit mehr als einem Shader / Effekt implementiert werden.
Die ursprüngliche Absicht von Durchläufen bestand darin, bei der Implementierung komplexer Shader auf Hardware der unteren Preisklasse (Pre-Shader-2.0) zu helfen, bei der die Einschränkungen hinsichtlich der Anzahl der Texturstufen und der Shader-Anweisungen pro Durchgang sehr begrenzt waren.
Gibt es im Beispiel der Multi-Pass-Beleuchtung signifikante Leistungssteigerungen durch die Verwendung von Pässen anstelle von Schalteffekten?
quelle
Neben der Beleuchtungssache, die alle erwähnt haben, ist Unschärfe eine weitere wichtige Verwendung . Horizontal und vertikal werden in getrennten Durchgängen ausgeführt (um eine 9x9-Unschärfe zu erhalten, müssen statt 81 nur 18 Pixel für jedes Ausgabepixel abgetastet werden). Dies wird für Bloom / HDR, Schärfentiefe, Glühen usw. Verwendet
quelle
Das Beispiel auf der Website der XNA-Ersteller verwendet mehrere Durchgänge, um die Beleuchtung aus vielen (Hunderten) Lichtquellen zu berechnen.
quelle
Wie Ranieri sagte, können Sie mehrere Durchgänge für mehrere Lichter verwenden. Beispielsweise können Sie mit einem einzigen Material einen Umgebungsdurchgang, einen additiven Durchgang pro Punktlicht, einen weiteren additiven Durchgang pro Scheinwerfer und dann einen Aufkleberdurchgang haben, um sich im diffusen Licht zu multiplizieren Textur (Ich habe in der Vergangenheit ein solches Setup verwendet und es ist die flexibelste Art, mit einem Licht-Shader umzugehen, den ich gesehen habe, ohne in eine verzögerte Schattierung zu geraten).
Ich glaube auch, dass die meisten Pelzrasierer mehrere Durchgänge verwenden.
quelle
Schattenkarten zum Erstellen von Schatten können mit mehreren Durchgängen erstellt werden. Nur eine Anmerkung, einige Multi-Pass-Effekte können in einem Durchgang ausgeführt werden, wenn die Grafikkarte die gleiche Anzahl von Textureinheiten wie die Anzahl der Durchgänge unterstützt. Wenn Sie also nicht genügend Textureinheiten haben, müssen Sie mehrere Durchgänge verwenden. Bei einer festen Hardwareplattform (wie Spielekonsolen) können Sie wahrscheinlich nur mit Multitexturierung codieren, da Sie die Anzahl der Textureinheiten kennen. Für PCs gibt es jedoch unendlich viele Hardwarekonfigurationen. Wenn Sie die größtmögliche Reichweite für Verbraucher haben möchten, möchten Sie wahrscheinlich einige Ihrer komplexeren Effekte in mehrere Durchgänge aufteilen, damit Benutzer mit Hardware niedrigerer Qualität (dh nicht so viele Textureinheiten auf der GPU) dies weiterhin können siehe den Effekt. Kurz, Schattenkarten werden erstellt, indem zunächst in einem Durchgang eine Schattenkarte der Szene aus der Perspektive des Lichts erstellt wird. Dann wird die Schattenkartenstruktur in die Szene mit den anderen Texturen der Szene gemischt.
quelle