
Verwenden eines for-Schleifen-Knotens
Sie müssen im erweiterten Modus arbeiten, um einen for-Schleifen-Knoten zu erstellen.
Im folgenden Beispiel wird veranschaulicht, wie Sie eine for-Schleife verwenden, um eine Textur dreimal mit verschiedenen UV-Abständen zu sampeln. Die gesampelten Werte werden addiert, die Summe durch drei geteilt und der Durchschnittswert auf den Streufarbenkanal von TraditionalGameSurfaceShader angewendet.
Richten Sie die for-Schleife ein:
- Klicken Sie im Arbeitsbereich von ShaderFX mit
, und wählen Sie "Hilfsmittel"
"Erweiterten Modus umschalten", um sicherzustellen, dass der erweiterte Modus aktiv ist.
- Klicken Sie mit
, und wählen Sie "Hw Shader Nodes"
"Flow Control"
"for-Schleife", um einen ForOp-Knoten zu erstellen.
Tipp: Ein rechteckiger Port bedeutet, dass der Port mehr als eine Eingabe akzeptieren kann.
- Wählen Sie "Hw Shader Nodes"
"Werte"
"Int", um einen Ganzzahl-Knoten zu erstellen. Stellen Sie in der Gruppe "Eigenschaften" seinen Wert auf 3 ein. Verbinden Sie ihn mit dem B-Attribut der for-Schleife. - Das A-Attribut stellt den Beginn der Schleife dar.
- Das B-Attribut stellt das Ende der Schleife dar.
- Das C-Attribut stellt das Intervall der Schleife dar.
Der Vorgabewert von A ist 0 und der von C ist 1. Wenn Sie diese Vorgabewerte für die Schleife verwenden, müssen Sie diese Attribute nicht verbinden.
In diesem Beispiel wurde für i = 0; i< 3, i++ eingestellt; daher müssen die Werte für A und C nicht ausdrücklich eingestellt werden.
- Wählen Sie "Hw Shader Nodes"
"Various"
"Zeichenfolge", um eine Zeichenfolge zu erstellen, die dann als Iterator verwendet wird. Wählen Sie in der Gruppe "Eigenschaften" aus der Dropdown-Liste "Vorgabeoptionen" die Option i aus (Sie müssen einen Bildlauf nach unten durchführen, damit diese Option angezeigt wird). Verbinden Sie den Ausgabeport des Zeichenfolgeknotens mit dem Iteratorattribut des for-Schleifen-Knotens.
- Wählen Sie "Hw Shader Nodes"
"Werte"
"Float3", um eine Variable zum Speichern der Werte zu erstellen, die in der Schleife berechnet wurden. Tipp: Verwenden Sie "Float3" oder "Float4", um die Werte zu speichern. Verwenden Sie keinen Farbknoten.
- Benennen Sie in der Gruppe "Eigenschaften" den Float3-Knoten auf LoopResult um, und stellen Sie sicher, dass die drei Werte auf 1.0 initialisiert sind.
- Verbinden Sie denLoopResult-Knoten mit dem Variablenattribut des for-Schleifen-Knotens. Da dies eine einfache Schleife ist, bei der nur eine Variable verwendet wird, verbinden Sie LoopResult auch mit dem Ausgabeattribut der for-Schleife.
Richten Sie das Textur-Sampling ein:
- Wählen Sie "Hw Shader Nodes"
"Texturen"
"Textur-Map", um einen Textur-Map-Knoten zu erstellen. Verwenden Sie in der Gruppe "Eigenschaften" die Steuerelmente von "MyTexture / Pfad", um diesem Knoten eine Texturdatei zuzuweisen. Stellen Sie im Bereich "Eigenschaften" auch sicher, dass die Attribute "Sampler / U-Koordinate" und "Sampler / V-Koordinate" auf "WRAP" (Umwickeln) eingestellt sind.
Da die Textur mit einem Abstand gesampelt wird, könnte das Sampling den UV-Bereich 0-1 überschreiten. Wenn Sie diese Attribute auf "WRAP" einstellen, wird sichergestellt, dass die Pixel vom Beginn der Textur gesampelt werden, wenn der UV-Bereich 1.0 überschreitet.
- Wählen Sie "Hw Shader Nodes"
"Werte"
"Anordnung", um einen Anordnungsknoten zu erstellen. Die drei Abstandswerte werden in dieser Anordnung gespeichert.
- Wählen Sie "Hw Shader Nodes"
"Werte"
"Float2" dreimal, um drei Float2-Knoten zum Speichern der drei Absatzwertsätze zu erstellen. Verwenden Sie die Gruppe "Eigenschaften", um die drei Float2-Attribute wie folgt einzustellen: - Name: Offset1, X: 0.1, Y: 0.3
- Name: Offset2, X: 0.2, Y: -0.4
- Name: Offset3, X: 0.3, Y: 0.2
- Verbinden Sie alle drei Float2-Knoten mit dem Wertattribut des Anordnungsknotens.
- Wählen Sie "Hw Shader Nodes"
"Inputs Common"
"UV Set" und "Hw Shader Nodes"
"Math"
"Hinzufügen", um einen UV-Set-Knoten und einen Add-Knoten zu erstellen.
- Verbinden Sie die Knoten wie folgt:
- Verbinden Sie das Wertattribut von "Anordnung" mit dem Wertattribut von "Add".
- Verbinden Sie die UV-Attribute von "UV-Set" mit dem anderen Wertattribut von "Add".
- Verbinden Sie das Ergebnisattribut von "Add" mit dem UV-Attribut von "Textur-Map".
- Verbinden Sie das Ausgabeattribut des Iterators (Zeichenfolgeknoten) mit dem Indexattribut von "Anordnung". Dadurch kann die for-Schleife, die Abstandswerte abrufen.
- Verbinden Sie das Farbattribut von "Textur-Map" mit dem Berechnungsattribut der for-Schleife. Dadurch werden die Berechnungen in der for-Schleife eingestellt, die das Textur-Map dreimal sampelt.
Berechnen Sie den Durchschnitt der gesampelten Ergebnisse:
- Wählen Sie "Hw Shader Nodes"
"Various"
"Zeichenfolge", um einen Zeichenfolgeknoten zu erstellen. Wählen Sie in der Gruppe "Eigenschaften" in der Dropdown-Liste "Vorgabeoptionen" die Option +=.
- Verbinden Sie den Ausgabewert des neuen Zeichenfolgeknotens mit dem Operatorattribut der for-Schleife.
Die for-Schleife fügt die Ergebnisse des Textur-Samplings der Variable "Loop Result" hinzu.
- Wählen Sie "Hw Shader Nodes"
"Math"
"Teilen", um einen Divide-Knoten zu erstellen. Verbinden Sie das Ausgabeattribut der for-Schleife mit dem ersten Wertattribut von "Divide". Da "Loop Result" die Summe von drei gesampelten Werten ist, muss sie durch drei geteilt werden, um den Durchschnitt zu ermitteln.
- Wählen Sie "Hw Shader Nodes"
"Werte"
"Float", um einen Float-Knoten zu erstellen. Stellen Sie in der Gruppe Eigenschaften seinen Wert auf 3.0 ein. Verbinden Sie sein Float-Attribut mit dem anderen Wertattribut von "Divide", um die Summe der gesampelten Ergebnisse durch drei zu teilen.
- Verbinden Sie das Ergebnisattribut von "Divide" mit dem Attribut "Streufarbe" von TraditionalGameSurfaceShader.

Ergebnis der Iteration eines Schachbrettmusters (gerendert mit dem Quicksilver-Renderer)
Sie können das ShaderFX-Material in eine Shader-Datei exportieren und den Shader-Code überprüfen, um die for-Schleife zu sehen, die Sie gerade erstellt haben:
float3 LoopResult = float3(1.0, 1.0, 1.0);
for(int i=0; i<3; i+=1)
{
float2 AddOp = (Array_bphdfiwhhj[i] + IN.map1.xy);
float4 Sampler = chessboard_woodjpg.Sample(MMMLWWWSampler, AddOp);
LoopResult += Sampler.xyz;
}
Weitere Informationen zum Exportieren in eine Shader-Datei finden Sie unter Exportieren in HLSL, CgFX und GLSL.