Was sind Shader-Designer-Knoten?
Der Shader-Designer in Visual Studio stellt visuelle Effekte als Diagramm dar. Diese Diagramme werden aus Knoten erstellt, die ausgewählt werden und so miteinander verbunden sind, dass der gewünschte Effekt erreicht wird. Jeder Knoten stellt entweder eine Information oder eine mathematische Funktion dar. Außerdem stellen die Verbindungen dieser Knoten miteinander dar, wie die Informationen durch das Diagramm fließen, um ein Ergebnis zu erzielen. Knotentypen umfassen Filter, Texturen, Parameter, Konstanten, Hilfsprogrammknoten und mathematische Knoten.
Knotenstruktur
Alle Knoten bestehen aus einer Kombination aus gemeinsamen Elementen. Jeder Knoten verfügt auf der rechten Seite über mindestens ein Ausgabeterminal (außer Farbknoten, die die Ausgabe des Shaders darstellen). Knoten, die Berechnungs- oder Textursampler darstellen, verfügen auf der linken Seite über Eingabeterminals. Knoten, die Informationen darstellen, haben hingegen keine Eingabeterminals. Ausgabeterminals sind mit den Eingabeterminals verbunden, damit sie Informationen von einem Knoten an einen anderen verschieben können.
Heraufstufung von Eingaben
Da der Shader-Designer letztendlich HLSL-Quellcode generieren muss, damit der Effekt in einem Spiel oder einer App verwendet werden kann, sind Shader-Designerknoten Teil der Regeln zur Typerweiterung, die HLSL verwendet. Da die Grafikhardware hauptsächlich mit Gleitkommawerten arbeitet, ist die Typerweiterung zwischen verschiedenen Typen (z.B. von int
auf float
oder von float
auf double
) eher ungewöhnlich. Da Grafikhardware den gleichen Vorgang auf mehrere Informationspakete gleichzeitig anwendet, findet eine andere Art der Heraufstufung statt, bei der kürzere Eingabewerte erweitert werden, um sie an die längsten Eingabewerte anzugleichen. Auf welche Weise die Eingabe verlängert wird hängt von deren Typ und dem Vorgang an sich ab:
Wenn der kleinere Typ ein Skalarwert ist, dann:
Ist der Wert des Skalars in einen Vektor repliziert, der die gleiche Größe hat wie die größere Eingabe. Beispielsweise wird die Skalareingabe 5,0 zum Vektor (5,0, 5,0, 5,0), wenn die längste Eingabe des Vorgangs ein Drei-Elemente-Vektor ist, unabhängig davon, um welchen Vorgang es sich handelt.
Wenn es sich bei dem kleineren Typ um einen Vektor handelt und der Vorgang multiplikativ ist (*, /, % usw.), dann:
Wird der Wert des Vektors in die führenden Elemente eines Vektors kopiert, der der Größe der größeren Eingabe entspricht, und die nachstehenden Elemente sind auf 1,0 festgelegt. Beispielsweise wird die Vektoreingabe (5,0, 5,0) zum Vektor (5,0, 5,0, 1,0, 1,0), wenn er von einem Vier-Elemente-Vektor multipliziert werden soll. Dabei bleiben jeweils die dritten und vierten Elemente der Ausgabe erhalten, indem das neutrale Element der Multiplikation 1,0 verwendet wird.
Wenn es sich bei dem kleineren Typ um einen Vektor handelt und der Vorgang additiv ist (+, –, etc.), dann:
Der Wert des Vektors wird in die führenden Elemente eines Vektors kopiert, der der Größe der größeren Eingabe entspricht, und die nachstehenden Elemente sind auf 0,0 festgelegt. Beispielsweise wird die Vektoreingabe (5,0, 5,0) zum Vektor (5,0, 5,0, 0,0, 0,0), wenn er von einem Vier-Elemente-Vektor multipliziert werden soll. Dabei bleiben jeweils die dritten und vierten Elemente der Ausgabe erhalten, indem die additive Identität 0,0 verwendet wird.
Knoten und Knotentypen
Der Shader-Designer stellt sechs verschiedene Knotentypen (Filter, Texturknoten, Parameter, Konstanten, Hilfsprogrammknoten und Berechnungsknoten) und einige individuelle Knoten bereit, die zu jedem Typ gehören.
Konstante Knoten
Im Shader-Designer stellen konstante Knoten Literalwerte und interpolierte Vertexattribute in Pixel-Shader-Berechnungen dar. Vertexattribute werden interpoliert und unterscheiden sich daher für jedes Pixel: Jede Pixel-Shader-Instanz empfängt eine andere Version der Konstanten. Dadurch erhält jedes Pixel ein eigenes Aussehen.
Interpolation der Vertexattribute
Das Bild einer 3D-Szene in einem Spiel oder einer App erfolgt durch die mathematische Transformation vieler Objekte in Bildschirmpixeln. Diese Objekte werden durch Scheitelpunkte, Vertexattribute und Definitionen von Primitiven definiert. Alle Informationen, die erforderlich sind, um einem Pixel sein eigenes Aussehen zu verleihen, werden durch Vertexattribute bereitgestellt. Sie vermischen sich je nach Nähe des Pixels zu den verschiedenen Scheitelpunkten, aus denen sein Primitiv besteht. Ein Primitiv ist ein grundlegendes Renderingelement, also eine einfache Form wie ein Punkt, eine Linie oder ein Dreieck. Ein Pixel, das sich in unmittelbarer Nähe eines einzigen Scheitelpunkts befindet, empfängt Konstanten, die mit diesem Scheitelpunkt fast identisch sind. Ein Pixel hingegen, das sich gleichmäßig zwischen allen Konstanten eines Primitivs erstreckt, empfängt Konstanten, die den Durchschnitt aller Scheitelpunkte bilden. In der Grafikprogrammierung werden die Konstanten, die die Pixel empfangen, als interpoliert bezeichnet. Wenn Pixel auf diese Weise konstant Daten erhalten, entsteht dadurch eine gute visuelle Qualität. Gleichzeitig wird weniger Arbeitsspeicher benötigt und der Bedarf an Bandbreite reduziert sich.
Obwohl jede Pixel-Shader-Instanz nur einen Satz von konstanten Werten empfängt, die nicht geändert werden können, erhalten unterschiedliche Pixel-Shader-Instanzen auch unterschiedliche konstante Datensätze. Aufgrund dieses Designs kann ein Shader-Programm für jedes Pixel in der Primitive eine unterschiedliche Farbausgabe erzeugen.
Verzeichnis konstanter Knoten
Node | Details | Eigenschaften |
---|---|---|
Kameravektor | Der Vektor, der sich vom aktuellen Pixel bis zur Kamera im Raum erstreckt. Damit können Sie Reflektionen im Raum berechnen. Ausgabe Output : float3 Der Vektor vom aktuellen Pixel bis zur Kamera |
Keine |
Farbkonstante | Ein konstanter Farbwert Ausgabe Output : float4 Der Farbwert. |
Ausgabe Der Farbwert. |
Konstante | Ein konstanter Skalarwert Ausgabe Output : float Der Skalarwert. |
Ausgabe Der Skalarwert. |
2D-Konstante | Eine Zwei-Komponenten-Vektorkonstante Ausgabe Output : float2 Der Vektorwert. |
Ausgabe Der Vektorwert. |
3D-Konstante | Eine Drei-Komponenten-Vektorkonstante Ausgabe Output : float3 Der Vektorwert. |
Ausgabe Der Vektorwert. |
4D-Konstante | Eine Vier-Komponenten-Vektorkonstante Ausgabe Output : float4 Der Farbwert. |
Ausgabe Der Vektorwert. |
Normalisierte Position | Die Position des aktuellen Pixels, ausgedrückt in normalisierten Gerätekoordinaten. Die X-und die Y-Koordinate sind Werte im Bereich von [-1, 1]. Die Z-Koordinate verfügt über einen Wert im Bereich [0, 1], und die W-Komponente enthält den Punkttiefenwert im Anzeigebereich; W ist nicht normalisiert. Ausgabe Output : float4 Die Position des aktuellen Pixels |
Keine |
Punktfarbe | Die diffuse Farbe des aktuellen Pixels, die eine Kombination der diffusen Materialfarbe und den Vertexfarbattributen darstellt Ausgabe Output : float4 Die diffuse Farbe des aktuellen Pixels. |
Keine |
Punkttiefe | Die Tiefe des aktuellen Pixels im Anzeigebereich Ausgabe Output : float Die Tiefe des aktuellen Pixels |
Keine |
Normalisierte Punkttiefe | Die Tiefe des aktuellen Pixels, ausgedrückt in normalisierten Gerätekoordinaten. Das Ergebnis hat einen Wert im Bereich [0, 1]. Ausgabe Output : float Die Tiefe des aktuellen Pixels |
Keine |
Bildschirmposition | Die Position des aktuellen Pixels, ausgedrückt in Bildschirmkoordinaten. Die Bildschirmkoordinaten basieren auf dem aktuellen Anzeigebereich. Die X- und die Y-Komponenten enthalten die Bildschirmkoordinaten, die Z-Komponente enthält die Tiefe normalisiert auf einen Bereich von [0, 1], und die W-Komponente enthält den Wert für die Tiefe im Anzeigeraum. Ausgabe Output : float4 Die Position des aktuellen Pixels |
Keine |
Oberflächennormale | Die Oberflächennormale des aktuellen Pixels im Objektraum. Damit können Sie Lichteinwirkungen und Reflexionen im Objektraum berechnen. Ausgabe Output : float3 Die Oberflächennormale des aktuellen Pixels |
Keine |
Tangentialraum-Kameravektor | Der Vektor, der sich vom aktuellen Pixel bis zur Kamera im Tangentialraum erstreckt. Damit können Sie Reflektionen im Tangentialraum berechnen. Ausgabe Output : float3 Der Vektor vom aktuellen Pixel bis zur Kamera |
Keine |
Tangentialraum-Lichtrichtung | Der Vektor, der die Richtung definiert, in der Licht einer Lichtquelle im Bereich der Tangente des aktuellen Pixels umgewandelt wird. Damit können Damit können Sie Licht- und Glanzlichteinwirkungen im Tangentialraum berechnen. Ausgabe: Output : float3 Der Vektor vom aktuellen Pixel bis zu einer Lichtquelle. |
Keine |
Globale Normale | Die Oberflächennormale des aktuellen Pixels im Raum. Damit können Sie Lichteinwirkungen und Reflexionen im Raum berechnen. Ausgabe Output : float3 Die Oberflächennormale des aktuellen Pixels |
Keine |
World-Position | Die Position des aktuellen Pixels im Raum. Ausgabe Output : float4 Die Position des aktuellen Pixels |
None |
Parameterknoten
Im Shader-Designer stellen die Parameterknoten Eingaben für den Shader dar, die unter der Kontrolle der Anwendung auf einer pro-Zeichnen Grundlage sind, z.B. Materialeigenschaften, direktionale Beleuchtung, Kameraposition und Zeit. Da Sie diese Parameter mit jedem Zeichenaufruf ändern können, können Sie den gleichen Shader verwenden, um einem Objekt eine andere Darstellung zu geben.
Parameterknotenverweis
Node | Details | Eigenschaften |
---|---|---|
World-Position (Kamera) | Die Position der Kamera im Raum. Ausgabe: Output : float4 Die Kameraposition. |
Keine |
Lichtrichtung | Der Vektor, der die Richtung von Licht aus einer Lichtquelle im Tangentialraum definiert. Damit können Sie Licht- und Glanzlichteinwirkungen im Tangentialraum berechnen. Ausgabe: Output : float3 Der Vektor vom aktuellen Pixel bis zu einer Lichtquelle. |
Keine |
Material (Umgebung) | Der Beitrag der verschwommene Farbe des aktuellen Pixels, der indirekter Beleuchtung zugeordnet ist. Die verschwommene Farbe eines Pixels simuliert die Interaktion zwischen Beleuchtung und groben Flächen. Sie können den Parameter „Material (Umgebung)“ nutzen, um ungefähr anzugeben, wie indirekte Beleuchtung zur Darstellung eines Objekts in der realen Welt beiträgt. Ausgabe: Output : float4 Die diffuse Farbe des aktuellen Pixels aufgrund indirekter Beleuchtung, d.h. Umgebungsbeleuchtung. |
zugreifen Öffentlich, sodass die Eigenschaft im Modell-Editor festgelegt werden kann, andernfalls Privat. Wert Die diffuse Farbe des aktuellen Pixels aufgrund indirekter Beleuchtung, d.h. Umgebungsbeleuchtung. |
Material (Diffus) | Eine Farbe, die beschreibt, wie das aktuelle Pixel die direkte Beleuchtung streut. Die verschwommene Farbe eines Pixels simuliert die Interaktion zwischen Beleuchtung und groben Flächen. Können Sie den Parameter „Material (Diffus)“ verwenden, um zu ändern, wie das aktuelle Pixel direkte Beleuchtung streut, d.h. direktionale, Punkt- und Spotbeleuchtung. Ausgabe: Output : float4 Eine Farbe, die beschreibt, wie das aktuelle Pixel die direkte Beleuchtung streut. |
zugreifen Öffentlich, sodass die Eigenschaft im Modell-Editor festgelegt werden kann, andernfalls Privat. Wert Eine Farbe, die beschreibt, wie das aktuelle Pixel die direkte Beleuchtung streut. |
Material (Selbstleuchtend) | Der Farbbeitrag des aktuellen Pixels, der selbstleuchtender Beleuchtung zugeordnet ist. Damit können Sie ein leuchtendes Objekt simulieren; d.h. ein Objekt, das sein eigenes Licht bereitstellt. Dieses Licht wirkt sich nicht auf andere Objekte aus. Ausgabe: Output : float4 Die Farbeinwirkung des aktuellen Pixels aufgrund der selbsterzeugten Beleuchtung. |
zugreifen Öffentlich, sodass die Eigenschaft im Modell-Editor festgelegt werden kann, andernfalls Privat. Wert Die Farbeinwirkung des aktuellen Pixels aufgrund der selbsterzeugten Beleuchtung. |
Material (Glanz) | Eine Farbe, die beschreibt, wie das aktuelle Pixel die direkte Beleuchtung reflektiert. Die glänzende Farbe eines Pixels simuliert die Interaktion zwischen Beleuchtung und reibungslosen und spiegelähnlichen Flächen. Sie können den Parameter Glanzmaterial verwenden, um zu ändern, wie das aktuelle Pixel direkte Beleuchtung streut, d.h. direktionale, Punkt- und Spotbeleuchtung. Ausgabe: Output : float4 Eine Farbe, die beschreibt, wie das aktuelle Pixel die direkte Beleuchtung reflektiert. |
zugreifen Öffentlich, sodass die Eigenschaft im Modell-Editor festgelegt werden kann, andernfalls Privat. Wert Eine Farbe, die beschreibt, wie das aktuelle Pixel die direkte Beleuchtung reflektiert. |
Material (Glanzkraft) | Ein Skalarwert, der die Intensität von Glanzlichtern beschreibt. Je größer die Glanzkraft, desto intensiver und weitreichender die Glanzlichter. Ausgabe: Output : float Der Exponent, mit dem die Intensität von Glanzlichtern auf dem Material des aktuellen Pixels definiert wird. |
zugreifen Öffentlich, sodass die Eigenschaft im Modell-Editor festgelegt werden kann, andernfalls Privat. Wert Der Exponent, mit dem die Intensität von Glanzlichtern auf dem aktuellen Pixel definiert wird. |
Normalisierte Zeit | Die Zeit in Sekunden, normalisiert auf den Bereich [0, 1], damit auf 0 zurückgesetzt wird, wenn die Zeit 1 erreicht. Sie können dies als Parameter in Shaderberechnungen verwenden, z.B. um Texturkoordinaten, Farbwerte oder andere Attribute zu animieren. Ausgabe: Output : float Die normalisierte Zeit in Sekunden. |
Keine |
Time | Die Zeit in Sekunden. Sie können dies als Parameter in Shaderberechnungen verwenden, z.B. um Texturkoordinaten, Farbwerte oder andere Attribute zu animieren. Ausgabe: Output : float Die Zeit in Sekunden. |
None |
Texturknoten
Im Shader Designer beproben Texturknoten verschiedene Texturtypen und Geometrien und erzeugen ider transformieren Texturkoordinaten. Texturen bieten Farb- und Beleuchtungsdetails auf Objekten.
Übersicht über Texturknoten
Node | Details | Eigenschaften |
---|---|---|
Cubemap-Beispiel | Entnimmt ein Farbsample aus einer Cubemap an den angegebenen Koordinaten. Sie können mithilfe einer Cubemap Farbdetails für Reflektionseffekte bereitstellen oder Texturen auf ein kugelförmiges Objekt anwenden und dabei weniger Verzerrung als bei einer 2D-Textur erzielen. Eingabe: UVW : float3 Ein Vektor, der die Position auf dem Texturcube, auf dem das Sample entnommen wurde. Das Sample wird am Schnittpunkt des Vektors mit dem Cube erfasst. Ausgabe: Output : float4 Farbbeispiel. |
Struktur Das Texturregister, das dem Sampler zugeordnet ist. |
Normalmap-Sample | Entnimmt ein Normalsample von einer 2D-Normalmap an den angegebenen Koordinaten Sie können mit einer Normalmap die Darstellung der zusätzlichen geometrischen Details auf der Oberfläche eines Objekts simulieren. Normalmap enthalten gepackte Daten die einen Einheitsvektor anstelle von Farbdaten darstellen Eingabe: UV : float2 Die Koordinaten, an denen das Sample entnommen wird. Ausgabe: Output : float3 Normalsample |
Achsenanpassung Der Faktor zum Anpassen der Händigkeit des Normalmap-Samples. Struktur Das Texturregister, das dem Sampler zugeordnet ist. |
Schwenken-UV | Schwenkt die angegebenen Texturkoordinaten in Abhängigkeit von der Zeit. Damit können Sie eine Textur oder die Normalmap auf der Oberfläche eines Objekts verschieben. Eingabe: UV : float2 Zu schwenkende Koordinaten Time : float Die Zeitdauer in Sekunden des Schwenkvorgangs. Ausgabe: Output : float2 Geschwenkte Koordinaten |
Geschwindigkeit X Die Anzahl von Texeln, die pro Sekunde entlang der X-Achse verschoben werden. Geschwindigkeit Y Die Anzahl von Texeln, die pro Sekunde entlang der Y-Achse verschoben werden. |
Parallaxen-UV | Verschiebt die angegebenen Texturkoordinaten in Abhängigkeit von Höhe und Anzeigewinkel. Der Effekt wird als Parallaxenmapping oder virtuelles Verschiebungsmapping bezeichnet. Damit können Sie Illusion von Tiefe auf einer flachen Oberfläche erzeugen. Eingabe: UV : float2 Zu verschiebende Koordinaten Height : float Der den UV -Koordinaten zugeordnete Heightmap-Wert.Ausgabe: Output : float2 Verschobene Koordinaten |
Tiefenebene Referenztiefe für den Parallaxeneffekt. Der Standardwert ist 0,5. Kleinere Werte heben die Textur an; größere Werte, die senken sie auf die Oberfläche. Tiefenskala Die Skalierung des Parallaceneffekts. Dadurch wird die optische Tiefe mehr oder weniger ausgeprägt. Die Werte stammen normalerweise auf dem Bereich von 0,02 bis 0,1. |
Drehen-UV | Dreht die angegebenen Texturkoordinaten in Abhängigkeit von der Zeit um einen Mittelpunkt. Damit können Sie eine Textur oder die Normalmap auf der Oberfläche eines Objekts drehen. Eingabe: UV : float2 Zu drehende Koordinaten Time : float Die Zeitdauer in Sekunden des Schwenkvorgangs. Ausgabe: Output : float2 Gedrehte Koordinaten |
X zentrieren Die X-Koordinate, die den Mittelpunkt der Drehung definiert. Y zentrieren Die Y-Koordinate, die den Mittelpunkt der Drehung definiert. Geschwindigkeit Der Winkel im Bogenmaß, in dem sich die Textur pro Sekunde dreht. |
Texturkoordinate | Die Texturkoordinaten des aktuellen Pixels. Die Texturkoordinaten werden durch die Interpolation zwischen den Attributen der Texturkoordinatenattribute von benachbarten Scheitelpunkten bestimmt. Sie können sich dies als die Position des aktuellen Pixels im Texturraum vorstellen. Ausgabe: Output : float2 Texturkoordinaten |
Keine |
Texturdimensionen | Gibt die Breite und Höhe einer 2D-Texturmap aus. Sie können die Texturdimensionen verwenden, um die Breite und Höhe der Textur in einem Shader zu berücksichtigen. Ausgabe: Output : float2 Die Breite und Höhe der Textur, ausgedrückt als Vektor. Die Breite wird als das erste Element des Vektors gespeichert. Die Höhe wird in das zweite Element gespeichert. |
Struktur Das Texturregister, das den Texturdimensionen zugeordnet ist. |
Texeldelta | Gibt das Delta (Abstand) zwischen den Texeln einer 2D-Texturmap aus. Sie können mit dem Texeldelta benachbarte Texelwerte in einem Shader sampeln. Ausgabe: Output : float2 Das Delta (Abstand) von einem zum nächsten Texel (diagonal in positiver Richtung verschieben), ausgedrückt als Vektor im normalisierten Texturraum. Sie können die Positionen aller benachbarten Texel ableiten, indem Sie selektiv entweder die U- oder die V- Koordinate des Deltas ignorieren oder negieren. |
Struktur Das Texturregister, das dem Texel zugeordnet ist. |
Texturbeispiel | Entnimmt ein Farbsample aus einer 2D-Texturmap an den angegebenen Koordinaten. Mit einer Texturmap können Sie Farbdetails auf der Oberfläche eines Objekts bereitstellen. Eingabe: UV : float2 Die Koordinaten, an denen das Sample entnommen wird. Ausgabe: Output : float4 Farbbeispiel. |
Struktur Das Texturregister, das dem Sampler zugeordnet ist. |
Berechnungsknoten
Im Shader-Designer führen Berechnungsknoten algebraische, logische, trigonometrische und andere mathematische Vorgänge aus.
Hinweis
Wenn Sie mit Berechnungsknoten im Shader-Designer arbeiten, macht sich die Typerweiterung besonders bemerkbar. Weitere Informationen darüber, wie sich die Typerweiterung auf Eingabeparameter auswirkt, gehen Sie in den Abschnitt Promotion of inputs (Heraufstufung von Eingaben).
Berechnungsknotenverweis
Node | Details | Eigenschaften |
---|---|---|
Abs | Berechnet den absoluten Wert der angegebenen Eingabe pro Komponente. Für jede Komponente der Eingabe X werden negative Werte in positive umgewandelt, sodass alle Komponenten des Ergebnisses einen positiven Wert aufweisen.Eingabe: X : float , float2 , float3 oder float4 Die Werte, für die der absolute Wert bestimmt wird. Output: Output : identisch mit der Eingabe X Der absolute Wert pro Komponente. |
Keine |
Add (Hinzufügen) | Berechnet die komponentenbezogene Summe der angegebenen Eingaben pro Komponente. Für jede Komponente des Ergebnisses werden die entsprechenden Komponenten der Eingaben X und Y zusammenaddiert.Eingabe: X : float , float2 , float3 oder float4 Einer der Werte, der addiert wird. Y : identisch mit der Eingabe X Einer der Werte, der addiert wird. Ausgabe: Output : identisch mit der Eingabe X Die Summe pro Komponente. |
Keine |
Ceil | Berechnet den nach oben gerundeten Wert des Eingabewerts pro Komponente. Die Obergrenze eines Werts ist die kleinste ganze Zahl, die größer als oder gleich dieses Werts ist. Eingabe: X : float , float2 , float3 oder float4 Der Wert, für den die Obergrenze berechnet werden soll. Ausgabe: Output : identisch mit der Eingabe X Die Obergrenze pro Komponente. |
Keine |
Clamp | Begrenzt die einzelnen Komponenten der angegebenen Eingabe auf einen vordefinierten Bereich. Für jede Komponente des Ergebnisses bleiben Werte, die im Bereich liegen, unverändert, Werte, die darüber liegen, werden auf den Maximalwert des Bereichs zurückgesetzt, Werte unterhalb des Bereichs an dessen Minimum angeglichen. Eingabe: X : float , float2 , float3 oder float4 Die zu bindenden Werte. Ausgabe: Output : identisch mit der Eingabe X Der gebundene Wert pro Komponente. |
Max Stellt den größtmöglichen Wert im Bereich dar. Min Stellt den kleinstmöglichen Wert im Bereich dar. |
Cos | Berechnet den Kosinus der angegebenen Eingabe im Bogenmaß pro Komponente. Für jede Komponente des Ergebnisses wird der Kosinus der entsprechenden Komponente, die im Bogenmaß (Radiant) bereitgestellt wird, berechnet. Das Ergebnis besteht aus Komponenten, die über Werte im Bereich von [-1, 1] verfügen. Eingabe: X : float , float2 , float3 oder float4 Die Werte, von denen der Kosinus im Bogenmaß berechnet wird. Ausgabe: Output : identisch mit der Eingabe X Der Kosinus pro Komponente. |
Keine |
Cross | Berechnet das Kreuzprodukt der angegebenen Vektoren mit drei Komponenten. Sie können das Kreuzprodukt verwenden, um die Normale einer Oberfläche zu berechnen, die von zwei Vektoren definiert ist. Eingabe: X : float3 Der Vektor auf der linken Seite des Kreuzprodukts Y : float3 Der Vektor auf der rechten Seite des Kreuzprodukts Ausgabe: Output : float3 Das Kreuzprodukt. |
Keine |
Entfernung | Berechnet den Abstand zwischen den angegebenen Punkten. Das Ergebnis ist ein positiver skalarer Wert. Eingabe: X : float , float2 , float3 oder float4 Einer der Punkte, um den Abstand dazwischen zu bestimmen. Y : identisch mit der Eingabe X Einer der Punkte, um den Abstand dazwischen zu bestimmen. Ausgabe: Output : identisch mit der Eingabe X Der Abstand. |
Keine |
Dividieren | Berechnet den komponentenbezogenen Quotienten der angegebenen Eingaben. Für jede Komponente des Ergebnisses wird die entsprechende Komponente der Eingabe X durch die entsprechende Komponente der Eingabe Y geteilt.Eingabe: X : float , float2 , float3 oder float4 Die Werte der Dividenden. Y : identisch mit der Eingabe X Die Werte des Divisors. Ausgabe: Output : identisch mit der Eingabe X Der Quotient pro Komponente. |
Keine |
Punkt | Berechnet das Skalarprodukt (Punktprodukt) der angegebenen Vektoren. Das Ergebnis ist ein Skalarwert. Mithilfe des Skalarprodukts können Sie den Winkel zwischen beiden Vektoren bestimmen. Eingabe: X : float , float2 , float3 oder float4 Einer der Begriffe. Y : identisch mit der Eingabe X Einer der Begriffe. Ausgabe: Output : float Das Skalarprodukt. |
Keine |
Etage | Berechnet den nach unten gerundeten Wert der angegebenen Eingabe pro Komponente. Für jede Komponente des Ergebnisses ist der zugehörige Wert der größte ganzzahlige Wert, der kleiner oder gleich der entsprechenden Komponente der Eingabe ist. Jede Komponente des Ergebnisses ist eine ganze Zahl. Eingabe: X : float , float2 , float3 oder float4 Der Wert, für den die Untergrenze berechnet werden soll. Ausgabe: Output : identisch mit der Eingabe X Die Untergrenze pro Komponente. |
Keine |
Fmod | Berechnet das komponentenbezogene Modul (Rest) der angegebenen Eingaben. Für jede Komponente des Ergebnisses wird ein integrales Vielfaches, m, der entsprechenden Komponente der Eingabe Y von der entsprechenden Komponente von Eingabe X substrahiert, wobei ein Rest zurück bleibt. Das Vielfache, m, wird so ausgewählt, dass der Rest weniger beträgt als die entsprechende Komponente der Eingabe Y und das gleiche Vorzeichen aufweist wie die entsprechende Komponente der Eingabe X . Zum Beispiel: fmod(-3,14; 1,5) ist -0,14.Eingabe: X : float , float2 , float3 oder float4 Die Werte der Dividenden. Y : identisch mit der Eingabe X Die Werte des Divisors. Ausgabe: Output : identisch mit der Eingabe X Das Modul pro Komponente. |
Keine |
Frac | Entfernt den integralen Teil (ganze Zahl) der angegebenen Eingabe pro Komponente. Für jede Komponente des Ergebnisses wird der integrale Teil der entsprechenden Komponente der Eingabe entfernt, es werden jedoch ein Bruchteil und ein Vorzeichen beibehalten. Dieser anteilige Wert liegt im Bereich [0, 1). Beispielsweise wird der Wert -3,14 zum Wert -0,14. Eingabe: X : float , float2 , float3 oder float4 Der Wert, für den der Bruchteil berechnet werden soll. Ausgabe: Output : identisch mit der Eingabe X Der Bruchteil pro Komponente. |
Keine |
Lerp | Lineare Interpolation. Berechnet den komponentenbezogenen gewichteten Durchschnitt der angegebenen Eingaben. Für jede Komponente des Ergebnisses wird der komponentenbezogene gewichtete Durchschnitt der entsprechenden Eingaben X und Y berechnet. Die Gewichtung erfolgt über Percent , einem Skalar, und wird gleichmäßig auf alle Komponenten angewendet. Damit können Sie zwischen Punkten, Farben, Attributen und anderen Werten interpolieren.Eingabe: X : float , float2 , float3 oder float4 Der ursprüngliche Wert. Wenn Percent null ist, entspricht das Ergebnis dieser Eingabe.Y : identisch mit der Eingabe X Der Terminalwert. Wenn Percent eins ist, entspricht das Ergebnis dieser Eingabe.Percent : float Eine skalare Gewichtung, die als Prozentsatz der Entfernung von der Eingabe X zur Eingabe Y ausgedrückt ist.Ausgabe: Output : identisch mit der Eingabe X Ein Wert, der mit den angegebenen Eingaben kollinear ist. |
Keine |
Multiplizieren Addieren | Berechnet die komponentenbezogene Operation „Multiplizieren Addieren“ der angegebenen Eingaben. Für jede Komponente des Ergebnisses werden die entsprechenden Komponenten der Eingaben M und A zur entsprechenden Komponente der Eingabe B addiert. Diese Operationssequenz kommt in allgemeinen Formeln vor, z.B. in der Punktsteigerungsformel einer Linie und in der Formel zum Skalieren und anschließenden Verzerren einer Eingabe.Eingabe: M : float , float2 , float3 oder float4 Einer der Werte, die miteinander multipliziert werden. A : identisch mit der Eingabe M Einer der Werte, die miteinander multipliziert werden. B : identisch mit der Eingabe M Die Werte, die dem Produkt der anderen zwei Eingaben hinzugefügt werden. Ausgabe: Output : identisch mit der Eingabe M Das Ergebnis der „Multiplizieren-Addieren“-Operation pro Komponente. |
Keine |
Max | Berechnet das komponentenbezogene Maximum der angegebenen Eingaben. Für jede Komponente des Ergebnisses wird die größere der entsprechenden Komponenten der Eingaben verwendet. Eingabe: X : float , float2 , float3 oder float4 Der Wert, für den das Maximum berechnet werden soll. Y : identisch mit der Eingabe X Der Wert, für den das Maximum berechnet werden soll. Ausgabe: Output : identisch mit der Eingabe X Der maximale Wert pro Komponente. |
Keine |
Min | Berechnet das komponentenbezogene Minimum der angegebenen Eingaben. Für jede Komponente des Ergebnisses wird die kleinste der entsprechenden Komponenten der Eingaben verwendet. Eingabe: X : float , float2 , float3 oder float4 Der Wert, für den das Minimum berechnet werden soll. Y : identisch mit der Eingabe X Der Wert, für den das Minimum berechnet werden soll. Ausgabe: Output : identisch mit der Eingabe X Der minimale Wert pro Komponente. |
Keine |
Multiplizieren | Berechnet das komponentenbezogene Produkt der angegebenen Eingaben. Für jede Komponente des Ergebnisses werden die entsprechenden Komponenten der Eingaben X und Y miteinander multipliziert.Eingabe: X : float , float2 , float3 oder float4 Einer der Werte, die miteinander multipliziert werden. Y : identisch mit der Eingabe X Einer der Werte, die miteinander multipliziert werden. Ausgabe: Output : identisch mit der Eingabe X Das Produkt pro Komponente. |
Keine |
Normalisieren | Normalisiert den angegebenen Vektor. Ein normalisierter Vektor behält die Richtung des ursprünglichen Vektor, aber nicht dessen Größe. Normalisierte Vektoren können verwendet werden, um Berechnungen zu vereinfachen, bei denen die Größe eines Vektors nicht wichtig ist. Eingabe: X : float2 , float3 oder float4 Der zu normalisierende Vektor. Ausgabe: Output : identisch mit der Eingabe X Der normalisierte Vektor. |
Keine |
Eins Minus | Berechnet den Unterschied zwischen 1 und der angegebenen Eingabe pro Komponente. Für jede Komponente des Ergebnisses wird die entsprechende Komponente der Eingabe von 1 substrahiert. Eingabe: X : float , float2 , float3 oder float4 Das Argument, von dem von 1 subtrahiert werden soll. Ausgabe: Output : identisch mit der Eingabe X Der Unterschied zwischen 1 und der angegebenen Eingabe pro Komponente. |
Keine |
Energie | Berechnet die komponentenbezogene Potenzierung (Potenz) der angegebenen Eingaben. Für jede Komponente des Ergebnisses wird die entsprechende Komponente der Eingabe X auf die Potenz der entsprechenden Komponente der Eingabe Y erhöht.Eingabe: X : float , float2 , float3 oder float4 Die Basiswerte Y : identisch mit der Eingabe X Die Exponentenwerte. Ausgabe: Output : identisch mit der Eingabe X Die Potenzierung pro Komponente. |
Keine |
Sättigen | Bindet jede Komponente der angegebenen Eingabe an den Bereich [0, 1]. Sie können diesen Bereich verwenden, um Prozentsätze und andere relative Maßangaben in Berechnungen darzustellen. Für jede Komponente des Ergebnisses werden die entsprechenden Werte der Eingabe, die kleiner als 0 sind, zu gleich 0 umgewandelt. Werte, die größer als 1 sind, werden zu gleich 1 umgewandelt, und Werte, die sich im Bereich befinden, werden nicht verändert. Eingabe: X : float , float2 , float3 oder float4 Die zu sättigenden Werte. Ausgabe: Output : identisch mit der Eingabe X Der gesättigte Wert pro Komponente. |
Keine |
Sin | Berechnet den Sinus der angegebenen Eingabe im Bogenmaß pro Komponente. Für jede Komponente des Ergebnisses wird der Sinus der entsprechenden Komponente, die im Bogenmaß (Radiant) bereitgestellt wird, berechnet. Das Ergebnis besteht aus Komponenten, die über Werte im Bereich [-1, 1] verfügen. Eingabe: X : float , float2 , float3 oder float4 Die Werte, von denen der Sinus im Bogenmaß berechnet wird. Ausgabe: Output : identisch mit der Eingabe X Der Sinus pro Komponente. |
Keine |
Sqrt | Berechnet die Quadratwurzel der angegebenen Eingabe pro Komponente. Für jede Komponente des Ergebnisses wird die Quadratwurzel der entsprechenden Komponente berechnet. Eingabe: X : float , float2 , float3 oder float4 Der Wert, für den die Quadratwurzel berechnet werden soll. Ausgabe: Output : identisch mit der Eingabe X Die Quadratwurzel pro Komponente. |
Keine |
Subtrahieren | Berechnet die komponentenbezogene Differenz der angegebenen Eingaben. Für jede Komponente des Ergebnisses wird die entsprechende Komponente der Eingabe Y von der entsprechenden Komponente der Eingabe X subtrahiert. Damit können Sie den Vektor berechnen, der sich von der ersten Eingabe bis hin zur zweiten erstreckt.Eingabe: X : float , float2 , float3 oder float4 Die Werte, von denen subtrahiert werden soll. Y : identisch mit der Eingabe X Die Werte, die von der Eingabe X substrahiert werden sollen.Ausgabe: Output : identisch mit der Eingabe X Die Differenz pro Komponente. |
Keine |
3D-Vektor transformieren | Transformiert den angegebenen 3D-Vektor in einen anderen Raum. Damit können Sie Punkte oder Vektoren in einen gemeinsamen Raum platzieren, sodass Sie sie zum Durchführen aussagekräftiger Berechnungen verwenden können. Eingabe: Vector : float3 Der zu transformierende Vektor. Ausgabe: Output : float3 Der transformierte Vektor. |
Ursprungssystem Der ursprüngliche Raum des Vektors. Zielsystem Der Raum, in den der Vektor transformiert werden soll. |
Hilfsprogrammknoten
Im Shader-Designer stellen Hilfsprogrammknoten allgemeine, nützliche Shader-Berechnungen dar, die sich den anderen Kategorien nicht eindeutig zuordnen lassen. Einige Hilfsprogrammknoten führen einfache Operationen durch, z.B. Anfügen von Vektoren oder bedingte Auswahl von Ergebnissen, während andere komplexe Vorgänge ausführen, z.B. Lichteinwirkungen entsprechend den gängigen Beleuchtungsmodellen berechnen.
Übersicht über Hilfeprogrammknoten
Node | Details | Eigenschaften |
---|---|---|
Vektor anfügen | Erstellt einen Vektor, indem die angegebenen Eingaben zusammen angefügt werden. Eingabe: Vector : float , float2 oder float3 Die Werte, an die er angefügt wird. Value to Append : float Der anzufügende Wert. Ausgabe: Output : float2 , float3 oder float4 , je nach Art der Eingabe Vector .Der neue Vektor. |
Keine |
Fresnel | Berechnet den Fresnel-Verlauf auf der Grundlage der angegebenen Oberflächennormalen. Der Wert des Fresnel-Verlaufs drückt aus, wie exakt die Oberflächennormale des aktuellen Pixels mit dem Ansichtsvektor zusammenfällt. Wenn die Vektoren ausgerichtet sind, ist das Ergebnis der Funktion 0. Das Ergebnis erhöht sich, wenn die Vektoren weniger ähnlich werden, und erreicht sein Maximum, wenn die Vektoren orthogonal sind. Sie können dies nutzen, um einen Effekt zu erzielen, der mehr oder weniger sichtbar ist, je nach Beziehung zwischen der Ausrichtung des aktuellen Pixels und der Kamera. Eingabe: Surface Normal : float3 Die Oberflächennormale des aktuellen Pixels, definiert im Tangentialraum des aktuellen Pixels. Damit können Sie die sichtbare Oberflächennormale wie beim Normal Mapping stören. Ausgabe: Output : float Das Reflexionsvermögen des aktuellen Pixels. |
Exponent Der Exponent zum Berechnen des Fresnel-Verlaufs. |
If | Wählt abhängig von Bedingungen eines der drei möglichen Ergebnisse pro Komponente aus. Dabei wird die Bedingung durch die Beziehung zwischen zwei anderen angegebenen Eingaben definiert. Für jede Komponente des Ergebnisses wird die entsprechende Komponente von einem der drei möglichen Ergebnisse ausgewählt, basierend auf der Beziehung zwischen den entsprechenden Komponenten der ersten beiden Eingaben. Eingabe: X : float , float2 , float3 oder float4 Der zu vergleichende Wert auf der linken Seite. Y : gleiche Art wie Eingabe X Der zu vergleichende Wert auf der rechten Seite. X > Y : gleiche Art wie Eingabe X Die Werte, die ausgewählt werden, wenn X größer als Y ist.X = Y : gleiche Art wie Eingabe X Die Werte, die ausgewählt werden, wenn X gleich Y ist.X < Y : gleiche Art wie Eingabe X Die Werte, die ausgewählt werden, wenn X kleiner als Y ist.Ausgabe: Output : float3 Das ausgewählte Ergebnis pro Komponente. |
Keine |
Lambert | Berechnet die Farbe des aktuellen Pixels entsprechend dem Lambert-Beleuchtungsmodell unter Verwendung der angegebenen Oberflächennormalen. Diese Farbe ergibt sich aus der Summe von Umgebungslicht und diffuser Beleuchtungseinwirkungen unter direkter Beleuchtung. Das Umgebungslicht entspricht ungefähr der Gesamteinwirkung von indirekter Beleuchtung, sieht jedoch ohne die Hilfe zusätzlicher Beleuchtung flach und matt aus. Diffuse Beleuchtung kann einem Objekt zusätzliche Form und Tiefe geben. Eingabe: Surface Normal : float3 Die Oberflächennormale des aktuellen Pixels, definiert im Tangentialraum des aktuellen Pixels. Damit können Sie die sichtbare Oberflächennormale wie beim Normal Mapping stören. Diffuse Color : float3 Die diffuse Farbe des aktuellen Pixels, in der Regel die Punktfarbe. Wenn keine Eingabe erfolgt, ist der Standardwert weiß. Ausgabe: Output : float3 Die diffuse Farbe des aktuellen Pixels. |
Keine |
Maskierungsvektor | Maskiert Komponenten des angegebenen Vektors. Damit können Sie bestimmte Farbkanäle aus einem Farbwert entfernen oder verhindern, dass sich bestimmte Komponenten auf nachfolgenden Berechnungen auswirken. Eingabe: Vector : float4 Der zu maskierende Vektor. Ausgabe: Output : float4 Der maskierte Vektor. |
Rot / X FALSE zum Ausblenden der Rot-(x-)Komponente, andernfalls TRUE. Grün / Y FALSE zum Ausblenden der Grün-(y-)Komponente, andernfalls TRUE. Blau / Z FALSE zum Ausblenden der Blau-(w-)Komponente, andernfalls TRUE. Alpha / W FALSE zum Ausblenden der Alpha-(w-)Komponente, andernfalls TRUE. |
Reflektionsvektor | Berechnet den Reflektionsvektor für den aktuellen Pixel im Tangentialraum basierend auf der Kameraposition. Damit können Sie Reflektionen, Cubemap-Koordinaten und Glanzlichteinwirkungen berechnen. Eingabe: Tangent Space Surface Normal : float3 Die Oberflächennormale des aktuellen Pixels, definiert im Tangentialraum des aktuellen Pixels. Damit können Sie die sichtbare Oberflächennormale wie beim Normal Mapping stören. Ausgabe: Output : float3 Der Reflektionsvektor. |
Keine |
Glänzend | Berechnet die Glanzlichteinwirkung entsprechend dem Phong-Beleuchtungsmodell, unter Verwendung der angegebenen Oberflächennormalen. Glanzlicht gibt einem Objekt eine leuchtende, spiegelnde Erscheinung, z.B. Wasser, Kunststoff oder Metalle. Eingabe: Surface Normal : float3 Die Oberflächennormale des aktuellen Pixels, definiert im Tangentialraum des aktuellen Pixels. Damit können Sie die sichtbare Oberflächennormale wie beim Normal Mapping stören. Ausgabe: Output : float3 Die Farbeinwirkung von Glanzlichtern. |
None |
Filterknoten
Filterknoten wandeln im Shader-Designer Eingabe, z.B. ein Farb- oder Texturbeispiel, in einen figurativen Farbwert. Diese figurativen Farbwerte werden häufig für nicht fotorealistisches Rendering oder als Komponenten in anderen visuellen Effekten verwendet.
Referenz zu Filterknoten
Node | Details | Eigenschaften |
---|---|---|
Blur | Zeichnet die Pixel in einer Textur mit einer Gauß-Funktion weich. Damit können Sie die Farbdetails oder das Rauschen in einer Textur reduzieren. Eingabe: UV : float2 Die Koordinaten für das zu testende Texel Ausgabe: Output : float4 Der weichgezeichnete Farbwert |
Struktur Das Texturregister, das dem Sampler zugeordnet ist, der während der Weichzeichnung verwendet wird |
Desaturate | Verringert die Farbintensität der angegebenen Farbe. Beim Entsättigen der Farbe nähert sich der Farbwert seinem Graustufenäquivalent. Eingabe: RGB : float3 Die zu entsättigende Farbe Percent : float Der Prozentsatz, um den die Farbsättigung verringert werden soll, ausgedrückt als normalisierter Wert im Bereich [0, 1]. Ausgabe: Output : float3 Die entsättigte Farbe |
Sättigung Die Gewichtungen, die den Rot-, Grün- und Blau-Farbkomponenten zugeordnet sind |
Edge Detection | Erkennt Kanten in einer Textur mit dem Canny-Algorithmus. Kantenpixel werden als weiß ausgegeben, Nicht-Kantenpixel als schwarz. Dadurch können Sie Kanten in einer Textur identifizieren und zusätzliche Effekte verwenden, um auf diese Kanten anzuwenden. Eingabe: UV : float2 Die Koordinaten für das zu testende Texel Ausgabe: Output : float4 Die Ausgabe ist weiß, wenn sich das Texel auf einer Kante befindet, andernfalls ist sie schwarz. |
Struktur Das Texturregister, das dem Sampler zugeordnet ist, der während der Kantenerkennung verwendet wird. |
Sharpen | Zeichnet eine Textur scharf. Damit können Sie genaue Details in einer Textur hervorheben. Eingabe: UV : float2 Die Koordinaten für das zu testende Texel Ausgabe: Output : float4 Der weichgezeichnete Farbwert |
Struktur Das Texturregister, das dem Sampler zugeordnet ist, der während der Scharfzeichnung verwendet wird. |
Nächste Schritte
Weitere Informationen finden Sie unter Erstellen von Shadern mit dem Shader-Designer in Visual Studio.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für