Share via


texbeml – ps

Wenden Sie eine gefälschte Bump-Umgebungszuordnungstransformation mit Leuchtdichtekorrektur an. Dies wird erreicht, indem die Texturadressdaten des Zielregisters geändert werden, indem Adressperturbationsdaten (du,dv), eine 2D-Bump-Umgebungsmatrix und die Helligkeit verwendet werden.

Syntax

texbeml dst, src

 

where

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

Bemerkungen

Pixel-Shaderversionen 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texbeml x x x

 

Die roten und grünen Farbdaten im src-Register werden als Stördaten (du,dv) interpretiert. Die blauen Farbdaten 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 Luminanzkorrektur wird mithilfe des Luminanzwerts und der Werte der Biastexturstufe angewendet. Das Ergebnis wird zum Beispiel für die aktuelle Texturphase verwendet.

Dies kann für eine Vielzahl von Techniken verwendet werden, die auf Adressperturbation basieren, z. B. für eine gefälschte 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(Phase m)*t(n)R +

D3DTSS_BUMPENVMAT10(Phase m)*t(n)G

v' = TextureCoordinates(stage m)v +

D3DTSS_BUMPENVMAT01(Phase m)*t(n)R +

D3DTSS_BUMPENVMAT11(Phase 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(Stufe m)) +

D3DTSS_BUMPENVLOFFSET(Stufe m)]

Registrieren von Daten, die von einer texbem - oder texbeml-Anweisung gelesen wurden, können später nicht gelesen werden, außer 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 identifizierten Texturzuordnungen und 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

In diesem Beispiel sind die folgenden Texturen in den folgenden Texturstufen erforderlich.

  • Phase 0 wird eine Bump Map mit Stördaten (du, dv) zugewiesen.
  • Phase 1 wird eine Texturkarte mit Farbdaten zugewiesen.
  • texbeml legt die Matrixdaten für die Texturphase fest, die stichprobeniert wird. Dies unterscheidet sich von der Funktionalität der festen Funktionspipeline, bei der die Stördaten und die Matrizen die gleiche Texturphase einnehmen.

Pixel-Shaderanweisungen