texbeml – ps

Wenden Sie eine gefälschte Umgebungszuordnungstransformation mit Leuchtdichtekorrektur an. Dies wird erreicht, indem die Texturadressdaten des Zielregisters mithilfe von Adressstörungensdaten (du,dv), einer 2D-Bump-Umgebungsmatrix und Leuchtdichte geändert werden.

Syntax

texbeml dst, src

Hierbei gilt:

  • dst ist das Zielregister.
  • src ist ein Quellregister.

Hinweise

Pixelshaderversionen 1_1 1_2 1 _ 3 1_4 2 _ 0 2 _ x 2 _ sw 3 _ 0 3 _ sw
texbeml x x x

Die Rot- und Grün-Farbdaten im src-Register werden als Störungsdaten (du,dv) interpretiert. Die Blaufarbendaten im src-Register werden als Leuchtdichtedaten interpretiert.

Diese Anweisung transformiert die roten und grünen Komponenten im Quellregister mithilfe der 2D-Bump-Umgebungszuordnungsmatrix. Das Ergebnis wird dem Texturkoordinatensatz hinzugefügt, der der Zielregisternummer entspricht. Eine Helligkeitskorrektur wird mithilfe des Leuchtdichtewerts und der Texturphasenwerte der Verzerrung angewendet. Das Ergebnis wird verwendet, um die aktuelle Texturphase abzutasten.

Dies kann für eine Vielzahl von Techniken verwendet werden, die auf der Adressstörungen basieren, z. B. fake per-pixel environment mapping (Fake-Umgebungszuordnung pro Pixel).

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 Daten im gemischten Format enthalten. Weitere Informationen zu Oberflächenformaten finden Sie unter D3DFORMAT.

// When using this instruction, texture registers must follow 
//   the following sequence:
// The texture assigned to stage tn contains the (du,dv) data
// The texture assigned to stage t(m) is sampled
tex     t(n)                    
texbeml t(m),  t(n)      where m > n

Dieses Beispiel zeigt die Berechnungen, die innerhalb der Anweisung durchgeführt werden.

// 1. New values for texture addresses (u',v') are calculated
// 2. Sample the texture using (u',v')
// 3. Luminance correction is applied

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(n)G

t(m)RGBA = TextureSample(stage m) using (u',v') as coordinates

t(m)RGBA = t(m)RGBA*

[(t(n)B * D3DTSS _ BUMPENVLSCALE(stage m)) +

D3DTSS _ BUMPENVLOFFSET(stage m)]

Registerdaten, die von einer texbem- oder texbeml-Anweisung gelesen wurden, können nicht später gelesen werden, mit Ausnahme von einem anderen Texbem oder texbeml.

// 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 einen Beispiel-Shader mit den identifizierten Texturzuordnungen und den identifizierten Texturstufen.

ps_1_1
tex t0              ; Define t0 to get a 2-tuple DuDv
texbeml t1, t0      ; Compute (u',v')
                    ; Apply luminance correction                    
                    ; Sample t1 using (u',v')
mov r0, t1          ; Output result

Für dieses Beispiel sind die folgenden Texturen in den folgenden Texturstufen erforderlich.

  • Phase 0 wird eine Bumpmap mit (du, dv) Störungsdaten zugewiesen.
  • Phase 1 wird eine Texturkarte mit Farbdaten zugewiesen.
  • texbeml legt die Matrixdaten auf der Texturstufe fest, für die Stichproben entnommen werden. Dies unterscheidet sich von der Funktionalität der festen Funktionspipeline, bei der die Störungsdaten und Matrizen die gleiche Texturphase belegen.

Pixelshaderanweisungen