Gutes Beispiel für einen Multi-Pass-Effekt?


9

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?

Antworten:


5

Jedes Mal, wenn Sie Nachbearbeitungseffekte für eine Reihe erfasster Puffer ausführen, ist ein angemessener Zeitpunkt für die Verwendung eines Multi-Pass-Effekts, z. B. Toon-Konturierung, Bewegungsunschärfe, SSAO, Bloom. Die Idee war, dass im ersten Durchgang alles in die entsprechenden Puffer gerendert wird und in jedem nachfolgenden Durchgang jeder Nachbearbeitungseffekt behandelt wird.

Wie Ranieri über das XNACC-Beispiel erwähnt hat, verwenden sie mehrere Durchgänge, um eine große Anzahl von Lichtern zu rendern. In diesem Beispiel führen sie denselben Durchgang nur einmal für jedes Licht aus.

Beachten Sie, dass Shader Model 2 und früher nicht annähernd so viele Anweisungen wie Shader Model 3 oder 4 in jedem Shader enthalten können. Dies ist ein weiterer Grund, einen Effekt in mehrere Durchgänge aufzuteilen - um ältere Hardware zu unterstützen.


Können Sie ein Beispiel geben, in dem ein XNA-Effektobjekt, in dem Sie EffectPasses durchlaufen, mehr als einen Durchgang hat, anstatt verschiedene Effekte zu verwenden, und warum?
Jason Goemaat

4

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?


3

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


Möglicherweise, aber die meisten, denke ich, würden Unschärfeimplementierungen denselben Shader für die horizontalen und vertikalen Durchgänge verwenden - und nur die Abtastversätze übergeben (als Shader-Konstanten oder Daten pro Scheitelpunkt)?
Bluescrn

1
@bluescrn - Bloom wird normalerweise als 4-Pass-Effekt betrachtet: einer zum Extrahieren der hellen Bereiche und zum Verkleinern, einer zum horizontalen Verwischen, einer zum vertikalen Verwischen, einer zum Kombinieren / Hochskalieren des unscharfen Bildes mit dem Original. Während Shader-Parameter verwendet werden könnten, um diese zu steuern, wäre eine Verzweigung erforderlich, um alle außer den beiden Unschärfedurchläufen zu unterscheiden
Robert Fraser


1

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.


0

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.