<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.janvolkland.de/index.php?action=history&amp;feed=atom&amp;title=Global_Shaders_und_Compute_Shader</id>
	<title>Global Shaders und Compute Shader - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.janvolkland.de/index.php?action=history&amp;feed=atom&amp;title=Global_Shaders_und_Compute_Shader"/>
	<link rel="alternate" type="text/html" href="https://wiki.janvolkland.de/index.php?title=Global_Shaders_und_Compute_Shader&amp;action=history"/>
	<updated>2026-10-11T23:05:46Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in UnrealWiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://wiki.janvolkland.de/index.php?title=Global_Shaders_und_Compute_Shader&amp;diff=167&amp;oldid=prev</id>
		<title>Elaina: Elaina verschob die Seite Global Shaders und Compute Shader in Unreal Engine 5 nach Global Shaders und Compute Shader: Redundanten Titelzusatz entfernt</title>
		<link rel="alternate" type="text/html" href="https://wiki.janvolkland.de/index.php?title=Global_Shaders_und_Compute_Shader&amp;diff=167&amp;oldid=prev"/>
		<updated>2026-09-06T09:37:13Z</updated>

		<summary type="html">&lt;p&gt;Elaina verschob die Seite &lt;a href=&quot;/index.php/Global_Shaders_und_Compute_Shader_in_Unreal_Engine_5&quot; class=&quot;mw-redirect&quot; title=&quot;Global Shaders und Compute Shader in Unreal Engine 5&quot;&gt;Global Shaders und Compute Shader in Unreal Engine 5&lt;/a&gt; nach &lt;a href=&quot;/index.php/Global_Shaders_und_Compute_Shader&quot; title=&quot;Global Shaders und Compute Shader&quot;&gt;Global Shaders und Compute Shader&lt;/a&gt;: Redundanten Titelzusatz entfernt&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 6. September 2026, 09:37 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;de&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(kein Unterschied)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key unrealwikidb:diff:1.41:old-144:rev-167 --&gt;
&lt;/table&gt;</summary>
		<author><name>Elaina</name></author>
	</entry>
	<entry>
		<id>https://wiki.janvolkland.de/index.php?title=Global_Shaders_und_Compute_Shader&amp;diff=144&amp;oldid=prev</id>
		<title>Elaina am 3. September 2026 um 14:19 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki.janvolkland.de/index.php?title=Global_Shaders_und_Compute_Shader&amp;diff=144&amp;oldid=prev"/>
		<updated>2026-09-03T14:19:36Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 3. September 2026, 14:19 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Zeile 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{Hinweis|Stand: Unreal Engine 5.8. Dieser Artikel fasst die aktuelle offizielle Epic-Dokumentation zusammen.}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Global Shaders&amp;#039;&amp;#039;&amp;#039; sind Shader, die in Unreal Engine direkt über C++ registriert und verwendet werden. Sie sind nicht an ein Material oder ein bestimmtes Mesh gebunden und eignen sich deshalb für allgemeine Rendering- und Compute-Aufgaben wie Post-Processing, Bildoperationen, Buffer-Verarbeitung oder eigene Render-Passes.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Global Shaders&amp;#039;&amp;#039;&amp;#039; sind Shader, die in Unreal Engine direkt über C++ registriert und verwendet werden. Sie sind nicht an ein Material oder ein bestimmtes Mesh gebunden und eignen sich deshalb für allgemeine Rendering- und Compute-Aufgaben wie Post-Processing, Bildoperationen, Buffer-Verarbeitung oder eigene Render-Passes.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Elaina</name></author>
	</entry>
	<entry>
		<id>https://wiki.janvolkland.de/index.php?title=Global_Shaders_und_Compute_Shader&amp;diff=136&amp;oldid=prev</id>
		<title>Elaina: Die Seite wurde neu angelegt: „&#039;&#039;&#039;Global Shaders&#039;&#039;&#039; sind Shader, die in Unreal Engine direkt über C++ registriert und verwendet werden. Sie sind nicht an ein Material oder ein bestimmtes Mesh gebunden und eignen sich deshalb für allgemeine Rendering- und Compute-Aufgaben wie Post-Processing, Bildoperationen, Buffer-Verarbeitung oder eigene Render-Passes.  {| class=&quot;wikitable&quot; |+ Artikelstatus |- ! Bezugsstand | Unreal Engine 5.8 |- ! Letzte Aktualisierung | 2. September 2026 |- ! Zen…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.janvolkland.de/index.php?title=Global_Shaders_und_Compute_Shader&amp;diff=136&amp;oldid=prev"/>
		<updated>2026-09-02T21:53:53Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „&amp;#039;&amp;#039;&amp;#039;Global Shaders&amp;#039;&amp;#039;&amp;#039; sind Shader, die in Unreal Engine direkt über C++ registriert und verwendet werden. Sie sind nicht an ein Material oder ein bestimmtes Mesh gebunden und eignen sich deshalb für allgemeine Rendering- und Compute-Aufgaben wie Post-Processing, Bildoperationen, Buffer-Verarbeitung oder eigene Render-Passes.  {| class=&amp;quot;wikitable&amp;quot; |+ Artikelstatus |- ! Bezugsstand | Unreal Engine 5.8 |- ! Letzte Aktualisierung | 2. September 2026 |- ! Zen…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Global Shaders&amp;#039;&amp;#039;&amp;#039; sind Shader, die in Unreal Engine direkt über C++ registriert und verwendet werden. Sie sind nicht an ein Material oder ein bestimmtes Mesh gebunden und eignen sich deshalb für allgemeine Rendering- und Compute-Aufgaben wie Post-Processing, Bildoperationen, Buffer-Verarbeitung oder eigene Render-Passes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Artikelstatus&lt;br /&gt;
|-&lt;br /&gt;
! Bezugsstand&lt;br /&gt;
| Unreal Engine 5.8&lt;br /&gt;
|-&lt;br /&gt;
! Letzte Aktualisierung&lt;br /&gt;
| 2. September 2026&lt;br /&gt;
|-&lt;br /&gt;
! Zentrale Klassen und Hilfen&lt;br /&gt;
| &amp;lt;code&amp;gt;FGlobalShader&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;FComputeShaderUtils&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;FRDGBuilder&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! Shader-Dateityp&lt;br /&gt;
| &amp;lt;code&amp;gt;.usf&amp;lt;/code&amp;gt; (Unreal Shader File)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Einsatzgebiete ==&lt;br /&gt;
&lt;br /&gt;
Global Shaders kommen zum Einsatz, wenn eine Aufgabe nicht sinnvoll über den Material Editor abgebildet werden kann oder bewusst unabhängig von Materialien und Meshes bleiben soll. Typische Beispiele sind:&lt;br /&gt;
&lt;br /&gt;
* Compute-Berechnungen auf Buffern oder Texturen&lt;br /&gt;
* eigene Post-Processing-Schritte&lt;br /&gt;
* Fullscreen-Passes&lt;br /&gt;
* Erzeugen, Kopieren oder Umwandeln von GPU-Daten&lt;br /&gt;
* Debug- und Visualisierungs-Passes&lt;br /&gt;
* experimentelle Rendering-Pipelines&lt;br /&gt;
&lt;br /&gt;
Ein Compute Shader ist dabei ein möglicher Shader-Typ. Er verarbeitet Daten in frei definierbaren Thread-Gruppen und erzeugt nicht unmittelbar Rastergrafik.&lt;br /&gt;
&lt;br /&gt;
== Bausteine eines Global Shaders ==&lt;br /&gt;
&lt;br /&gt;
Ein Global Shader besteht in der Regel aus mehreren Teilen:&lt;br /&gt;
&lt;br /&gt;
# einer Shader-Datei mit HLSL-Code (&amp;lt;code&amp;gt;.usf&amp;lt;/code&amp;gt;)&lt;br /&gt;
# einer von &amp;lt;code&amp;gt;FGlobalShader&amp;lt;/code&amp;gt; abgeleiteten C++-Klasse&lt;br /&gt;
# einer Parameterstruktur für Eingaben und Ausgaben&lt;br /&gt;
# einem Registrierungs-Makro, das Klasse, Datei, Einstiegspunkt und Shader-Stufe verbindet&lt;br /&gt;
# Code, der den Shader auswählt, Parameter bindet und den Dispatch oder Draw-Aufruf ausführt&lt;br /&gt;
&lt;br /&gt;
=== Speicherort der Shader-Dateien ===&lt;br /&gt;
&lt;br /&gt;
Engine-eigene Shader liegen unter &amp;lt;code&amp;gt;Engine/Shaders&amp;lt;/code&amp;gt;. Shader eines Plugins gehören in dessen &amp;lt;code&amp;gt;Shaders&amp;lt;/code&amp;gt;-Verzeichnis. Die Trennung hält experimentellen Code von den Engine-Dateien fern und erleichtert Updates sowie Versionsverwaltung.&lt;br /&gt;
&lt;br /&gt;
== Minimaler Compute Shader ==&lt;br /&gt;
&lt;br /&gt;
Das folgende vereinfachte Beispiel verdoppelt jeden Wert eines Eingabebuffers. Es dient der Orientierung und muss an die konkrete Modul- und Ressourcenstruktur angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;hlsl&amp;quot;&amp;gt;&lt;br /&gt;
StructuredBuffer&amp;amp;lt;uint&amp;amp;gt; InputValues;&lt;br /&gt;
RWStructuredBuffer&amp;amp;lt;uint&amp;amp;gt; OutputValues;&lt;br /&gt;
uint ElementCount;&lt;br /&gt;
&lt;br /&gt;
[numthreads(64, 1, 1)]&lt;br /&gt;
void MainCS(uint3 DispatchThreadId : SV_DispatchThreadID)&lt;br /&gt;
{&lt;br /&gt;
    const uint Index = DispatchThreadId.x;&lt;br /&gt;
    if (Index &amp;amp;gt;= ElementCount)&lt;br /&gt;
    {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    OutputValues[Index] = InputValues[Index] * 2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;numthreads(64, 1, 1)&amp;lt;/code&amp;gt; legt fest, dass jede Thread-Gruppe 64 Threads in X-Richtung enthält. Die Gesamtzahl der Gruppen muss auf der CPU-Seite passend zur Elementzahl berechnet werden.&lt;br /&gt;
&lt;br /&gt;
== C++-Repräsentation ==&lt;br /&gt;
&lt;br /&gt;
Die C++-Klasse beschreibt den Shader gegenüber Unreal und definiert seine Parameter. Ein typisches Grundmuster sieht so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
class FExampleComputeShader : public FGlobalShader&lt;br /&gt;
{&lt;br /&gt;
    DECLARE_GLOBAL_SHADER(FExampleComputeShader);&lt;br /&gt;
    SHADER_USE_PARAMETER_STRUCT(FExampleComputeShader, FGlobalShader);&lt;br /&gt;
&lt;br /&gt;
    BEGIN_SHADER_PARAMETER_STRUCT(FParameters, )&lt;br /&gt;
        SHADER_PARAMETER(uint32, ElementCount)&lt;br /&gt;
        SHADER_PARAMETER_SRV(StructuredBuffer&amp;amp;lt;uint32&amp;amp;gt;, InputValues)&lt;br /&gt;
        SHADER_PARAMETER_UAV(RWStructuredBuffer&amp;amp;lt;uint32&amp;amp;gt;, OutputValues)&lt;br /&gt;
    END_SHADER_PARAMETER_STRUCT()&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
IMPLEMENT_GLOBAL_SHADER(&lt;br /&gt;
    FExampleComputeShader,&lt;br /&gt;
    &amp;quot;/Plugin/Example/Private/ExampleCompute.usf&amp;quot;,&lt;br /&gt;
    &amp;quot;MainCS&amp;quot;,&lt;br /&gt;
    SF_Compute&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtige Punkte:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;DECLARE_GLOBAL_SHADER&amp;lt;/code&amp;gt; deklariert den Shader-Typ.&lt;br /&gt;
* &amp;lt;code&amp;gt;SHADER_USE_PARAMETER_STRUCT&amp;lt;/code&amp;gt; aktiviert die strukturierte Parameterbindung.&lt;br /&gt;
* &amp;lt;code&amp;gt;BEGIN_SHADER_PARAMETER_STRUCT&amp;lt;/code&amp;gt; beschreibt Konstanten, SRVs und UAVs.&lt;br /&gt;
* &amp;lt;code&amp;gt;IMPLEMENT_GLOBAL_SHADER&amp;lt;/code&amp;gt; verbindet C++-Klasse, virtuellen Shader-Pfad, Einstiegspunkt und Shader-Stufe.&lt;br /&gt;
* &amp;lt;code&amp;gt;SF_Compute&amp;lt;/code&amp;gt; kennzeichnet den Shader als Compute Shader.&lt;br /&gt;
&lt;br /&gt;
Je nach Modulgrenze kann statt &amp;lt;code&amp;gt;DECLARE_GLOBAL_SHADER&amp;lt;/code&amp;gt; eine exportierte Shader-Deklaration nötig sein.&lt;br /&gt;
&lt;br /&gt;
== Kompilierungsbedingungen ==&lt;br /&gt;
&lt;br /&gt;
Nicht jeder Shader sollte für jede Plattform oder jedes Feature Level gebaut werden. Dafür kann die Klasse eine Kompilierungsbedingung definieren. So lässt sich beispielsweise verhindern, dass ein Compute Shader für eine Plattform ohne die benötigten Fähigkeiten kompiliert wird.&lt;br /&gt;
&lt;br /&gt;
Auch Compile-Time-Definitionen können aus C++ an den Shader übergeben werden. Das ist nützlich für feste Gruppengrößen, optionale Codepfade oder plattformspezifische Varianten.&lt;br /&gt;
&lt;br /&gt;
Das Modul, das einen neuen Shader-Typ registriert, muss früh genug geladen werden. Wird der Typ erst nach der Initialisierung der Engine bekannt, kann Unreal die Registrierung mit einem Assert ablehnen. Für Shader-Module ist deshalb eine frühe Ladephase wie &amp;lt;code&amp;gt;PostConfigInit&amp;lt;/code&amp;gt; relevant.&lt;br /&gt;
&lt;br /&gt;
== Dispatch über das RHI ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;FComputeShaderUtils::Dispatch&amp;lt;/code&amp;gt; sendet einen Compute Shader mit Parametern und Gruppenzahl an eine &amp;lt;code&amp;gt;FRHIComputeCommandList&amp;lt;/code&amp;gt;. Das ist die direkte Variante auf RHI-Ebene.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
const FIntVector GroupCount =&lt;br /&gt;
    FComputeShaderUtils::GetGroupCount(ElementCount, 64);&lt;br /&gt;
&lt;br /&gt;
FComputeShaderUtils::Dispatch(&lt;br /&gt;
    RHICmdList,&lt;br /&gt;
    ComputeShader,&lt;br /&gt;
    Parameters,&lt;br /&gt;
    GroupCount&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Hilfsfunktion &amp;lt;code&amp;gt;GetGroupCount&amp;lt;/code&amp;gt; rundet die benötigte Gruppenzahl passend auf. Der Bounds-Check im Shader bleibt trotzdem notwendig, weil die letzte Gruppe mehr Threads als verbleibende Elemente enthalten kann.&lt;br /&gt;
&lt;br /&gt;
== Dispatch über den Render Dependency Graph ==&lt;br /&gt;
&lt;br /&gt;
Für regulären High-Level-Rendering-Code empfiehlt Unreal den Render Dependency Graph (RDG). Ein Compute-Pass kann dort über &amp;lt;code&amp;gt;FComputeShaderUtils::AddPass&amp;lt;/code&amp;gt; registriert werden.&lt;br /&gt;
&lt;br /&gt;
RDG kennt dadurch die beteiligten Ressourcen und kann unter anderem:&lt;br /&gt;
&lt;br /&gt;
* Abhängigkeiten zwischen Passes bestimmen&lt;br /&gt;
* Ressourcenübergänge und Barriers verwalten&lt;br /&gt;
* ungenutzte Passes entfernen&lt;br /&gt;
* Lebenszeiten temporärer Ressourcen optimieren&lt;br /&gt;
* geeignete Arbeit parallelisieren&lt;br /&gt;
* Async-Compute-Passes synchronisieren&lt;br /&gt;
&lt;br /&gt;
Die Parameter müssen alle verwendeten RDG-Ressourcen korrekt deklarieren. Innerhalb des Passes darf nur auf Ressourcen zugegriffen werden, die über die Parameterstruktur als Abhängigkeit bekannt sind.&lt;br /&gt;
&lt;br /&gt;
== Shader-Entwicklung und Fehlersuche ==&lt;br /&gt;
&lt;br /&gt;
Für die Entwicklung sind folgende Maßnahmen hilfreich:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.ShaderDevelopmentMode=1&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;ConsoleVariables.ini&amp;lt;/code&amp;gt; aktivieren, um ausführlichere Shader-Compile-Logs zu erhalten.&lt;br /&gt;
* Einstiegspunkt, virtuellen Shader-Pfad und Shader-Stufe kontrollieren.&lt;br /&gt;
* Sicherstellen, dass das Plugin und alle benötigten Module als Abhängigkeiten eingetragen sind.&lt;br /&gt;
* Modul-Ladephase prüfen, wenn Unreal meldet, dass ein Shader-Typ zu spät registriert wurde.&lt;br /&gt;
* Parameterstruktur zwischen HLSL und C++ sorgfältig abgleichen.&lt;br /&gt;
* Thread-Gruppengröße und Bounds-Checks prüfen.&lt;br /&gt;
* Ressourcenstatus, SRV-/UAV-Bindung und Synchronisation kontrollieren.&lt;br /&gt;
* Bei RDG-Passes aussagekräftige Event-Namen verwenden und bei Bedarf RDG Insights einsetzen.&lt;br /&gt;
&lt;br /&gt;
== Bezug zum Heterogeneous-Multi-GPU-Projekt ==&lt;br /&gt;
&lt;br /&gt;
Für das Projekt [[UE5 Heterogeneous Multi-GPU]] ist der Global-Shader-Weg besonders interessant: Unreal kann den Shader wie gewohnt kompilieren und das resultierende Shader-Bytecode-Blob bereitstellen. Dieses Blob kann anschließend als Grundlage für eine Compute Pipeline State auf dem separaten Worker-Device dienen.&lt;br /&gt;
&lt;br /&gt;
Der geplante erste Test lässt sich in folgende Schritte zerlegen:&lt;br /&gt;
&lt;br /&gt;
# einfachen Global Compute Shader in einem früh geladenen Modul registrieren&lt;br /&gt;
# Shader über Unreals reguläre Shader-Pipeline kompilieren lassen&lt;br /&gt;
# kompilierten Bytecode für den gewählten Worker-Adapter prüfen&lt;br /&gt;
# passende Root Signature und Compute Pipeline State auf dem Worker-&amp;lt;code&amp;gt;ID3D12Device&amp;lt;/code&amp;gt; erzeugen&lt;br /&gt;
# Input- und Output-Buffer auf dem Worker-Device bereitstellen&lt;br /&gt;
# Compute Dispatch auf der eigenen Worker-Command-Queue ausführen&lt;br /&gt;
# Ergebnis über Readback zurückholen und auf der CPU verifizieren&lt;br /&gt;
&lt;br /&gt;
Dabei ist wichtig, zwischen zwei Ebenen zu unterscheiden: Unreal übernimmt zunächst Registrierung und Kompilierung des Shaders; die Ausführung auf dem unabhängigen Worker-Device folgt im experimentellen Projekt über den eigenen D3D12-Pfad und nicht automatisch über Unreals normales RHI oder RDG.&lt;br /&gt;
&lt;br /&gt;
== Quellen und weiterführende Dokumentation ==&lt;br /&gt;
&lt;br /&gt;
* [https://dev.epicgames.com/documentation/en-us/unreal-engine/adding-global-shaders-to-unreal-engine Adding Global Shaders to Unreal Engine] – Epic Games, UE 5.8&lt;br /&gt;
* [https://dev.epicgames.com/documentation/en-us/unreal-engine/overview-of-shaders-in-plugins-unreal-engine Overview of Shaders in Plugins] – Epic Games, UE 5.8&lt;br /&gt;
* [https://dev.epicgames.com/documentation/en-us/unreal-engine/shader-development-in-unreal-engine Shader Development in Unreal Engine] – Epic Games, UE 5.8&lt;br /&gt;
* [https://dev.epicgames.com/documentation/unreal-engine/API/Runtime/RenderCore/FComputeShaderUtils__Dispatch FComputeShaderUtils::Dispatch] – API-Referenz, Epic Games, UE 5.8&lt;br /&gt;
* [https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/RenderCore/FComputeShaderUtils__AddPass FComputeShaderUtils::AddPass] – API-Referenz, Epic Games, UE 5.8&lt;br /&gt;
* [https://dev.epicgames.com/documentation/unreal-engine/render-dependency-graph-in-unreal-engine Render Dependency Graph] – Epic Games, UE 5.8&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Dieser Artikel ist eine eigenständige deutschsprachige Zusammenfassung mit Projektbezug und keine vollständige Übersetzung der Epic-Dokumentation.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Unreal Engine 5]]&lt;br /&gt;
[[Kategorie:Shader]]&lt;br /&gt;
[[Kategorie:Compute Shader]]&lt;br /&gt;
[[Kategorie:Rendering]]&lt;br /&gt;
[[Kategorie:Direct3D 12]]&lt;/div&gt;</summary>
		<author><name>Elaina</name></author>
	</entry>
</feed>