texbeml - ps

Appliquez une fausse transformation de carte d’environnement de bosse avec correction de luminance. Pour ce faire, modifiez les données d’adresse de texture du registre de destination, à l’aide des données de perturbation d’adresse (du,dv), d’une matrice d’environnement de bosse 2D et de la luminance.

Syntaxe

texbeml dst, src

 

where

  • dst est le registre de destination.
  • src est un registre source.

Notes

Versions du nuanceur de pixels 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texbeml x x x

 

Les données de couleur rouge et vert dans le registre src sont interprétées comme les données de perturbation (du,dv). Les données de couleur bleue dans le registre src sont interprétées comme des données de luminance.

Cette instruction transforme les composants rouges et verts dans le registre source à l’aide de la matrice de mappage d’environnement de bosses 2D. Le résultat est ajouté au jeu de coordonnées de texture correspondant au numéro de registre de destination. Une correction de luminance est appliquée à l’aide de la valeur de luminance et des valeurs de l’étape de texture de biais. Le résultat est utilisé pour échantillonner la phase de texture actuelle.

Cela peut être utilisé pour une variété de techniques basées sur la perturbation d’adresse, telles que le faux mappage d’environnement par pixel.

Cette opération interprète toujours du et dv comme des quantités signées. Pour les versions 1_0 et 1_1, le modificateur d’entrée Source Register Signed Scaling (_bx2) n’est pas autorisé sur l’argument d’entrée.

Cette instruction produit des résultats définis lorsque les textures d’entrée contiennent des données de format mixte. Pour plus d’informations sur les formats de surface, consultez 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

Cet exemple montre les calculs effectués dans l’instruction.

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

u' = TextureCoordinates(étape m)u +

D3DTSS_BUMPENVMAT00(étape m)*t(n)R +

D3DTSS_BUMPENVMAT10(étape m)*t(n)G

v' = TextureCoordinates(étape m)v +

D3DTSS_BUMPENVMAT01(étape m)*t(n)R +

D3DTSS_BUMPENVMAT11(étape m)*t(n)G

t(m)RGBA = TextureSample(étape m) utilisant (u',v') comme coordonnées

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

[(t(n)B * D3DTSS_BUMPENVLSCALE(étape m)) +

D3DTSS_BUMPENVLOFFSET(étape m)]

Les données d’enregistrement qui ont été lues par une instruction texbem ou texbeml ne peuvent pas être lues ultérieurement, sauf par un autre texbem ou 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

Exemples

Voici un exemple de nuanceur avec les mappages de texture identifiés et les étapes de texture identifiées.

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

Cet exemple nécessite les textures suivantes dans les étapes de texture suivantes.

  • L’étape 0 reçoit une carte de bosses avec des données de perturbation (du, dv).
  • L’étape 1 se voit attribuer une carte de texture avec des données de couleur.
  • texbeml définit les données de matrice sur la phase de texture échantillonnées. Cela diffère de la fonctionnalité du pipeline de fonction fixe où les données de perturbation et les matrices occupent la même étape de texture.

Instructions du nuanceur de pixels