texbem – ps
Wenden Sie eine gefälschte Bump-Umgebungszuordnungstransformation an. Dies wird erreicht, indem die Texturadressdaten des Zielregisters geändert werden, adressperturbationsdaten (du,dv) und eine 2D-Bumpumgebungsmatrix verwendet werden.
Syntax
texbem dst, src |
---|
where
- dst ist das Zielregister.
- src ist ein Quellregister.
Bemerkungen
Pixelshaderversionen | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
texbem | x | x | x |
Die roten und grünen Farbdaten im src-Register werden als Stördaten (du,dv) interpretiert.
Diese Anweisung transformiert rote und grüne Komponenten im Quellregister mithilfe der 2D-Bump-Umgebungszuordnungsmatrix. Das Ergebnis wird dem Texturkoordinatensatz hinzugefügt, der der Zielregisternummer entspricht, und wird verwendet, um die aktuelle Texturphase zu testen.
Dieser Vorgang interpretiert du und dv immer als signierte Mengen. Für die Versionen 1_0 und 1_1 ist der Eingabemodifizierer " Source Register Signed Scaling " (_bx2) für das Eingabeargument nicht zulässig.
Diese Anweisung erzeugt definierte Ergebnisse, wenn Eingabetexturen signierte Formatdaten enthalten. Daten im gemischten Format funktionieren nur, wenn die ersten beiden Kanäle signierte Daten enthalten. Weitere Informationen zu Oberflächenformaten finden Sie unter D3DFORMAT.
Dies kann für eine Vielzahl von Techniken verwendet werden, die auf Adressverstößen basieren, einschließlich gefälschter Umgebungszuordnung pro Pixel und diffuser Beleuchtung (Bump Mapping).
Wenn Sie diese Anweisung verwenden, müssen Texturregister der folgenden Sequenz folgen.
// The texture assigned to stage t(n) contains the (du,dv) data
// The texture assigned to stage t(m) is sampled
tex t(n)
texbem t(m), t(n) where m > n
Die berechnungen, die innerhalb der -Anweisung durchgeführt werden, sind unten dargestellt.
// 1. New values for texture addresses (u',v') are calculated
// 2. Sample the texture using (u',v')
u' = TextureCoordinates(stage m)u + D3DTSS_BUMPENVMAT00(stage m)*t(n)R + D3DTSS_BUMPENVMAT10(stage m)*t(n)G v' = TextureCoordinates(stage m)v + D3DTSS_BUMPENVMAT01(stage m)*t(n)R + D3DTSS_BUMPENVMAT11(stage m)*t(t(n)G t(m)RGBA = TextureSample(stage m)
Verwenden von (u',v') als Koordinaten
Registrieren Sie Daten, die von einer texbem - ps oder texbeml - ps-Anweisung gelesen wurden, können später nicht gelesen werden, außer von einem anderen texbem - ps oder texbeml - ps.
// This example demonstrates the validation error caused by t0 being reread:
ps_1_1
tex t0
texbem t1, t0
add r0, t1, t0
(Instruction Error) (Statement 4) Register data that has been read by
texbem or texbeml instruction cannot be read by other instructions
Beispiele
Hier sehen Sie ein Beispielshader mit den identifizierten Texturzuordnungen und den identifizierten Texturphasen.
ps_1_1
tex t0 ; Define t0 to get a 2-tuple DuDv
texbem t1, t0 ; Compute (u',v')
; Sample t1 using (u',v')
mov r0, t1 ; Output result
Texbem erfordert die folgenden Texturen in den folgenden Texturphasen.
- Phase 0 wird eine Bump map mit Stördaten (du, dv) zugewiesen.
- Phase 1 verwendet eine Texturkarte mit Farbdaten.
- Diese Anweisung legt die Matrixdaten auf der Texturphase fest, die abgetastet wird.
- Dies unterscheidet sich von der Funktionalität der Pipeline für feste Funktionen, in der die Stördaten und die Matrizen die gleiche Texturphase einnehmen.
Zugehörige Themen