texbeml — ps

Примените фиктивное преобразование карты среды с коррекцией яркости. Это достигается путем изменения данных адреса текстуры целевого регистра с использованием данных об изменении адреса (du,dv), двухмерной матрицы среды удара и яркости.

Синтаксис

texbeml dst, src

 

where

  • dst — это регистр назначения.
  • src — это регистр источника.

Комментарии

Версии шейдера пикселей 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texbeml x x x

 

Данные красного и зеленого цветов в регистре src интерпретируются как данные возмущения (du,dv). Данные синего цвета в регистре src интерпретируются как данные о яркости.

Эта инструкция преобразует красный и зеленый компоненты в исходном регистре с помощью матрицы сопоставления 2D-среды ударов. Результат добавляется в набор координат текстуры, соответствующий номеру регистра назначения. Коррекция яркости применяется с помощью значения яркости и значений стадии текстуры смещения. Результат используется для выборки текущего этапа текстуры.

Это можно использовать для различных методов, основанных на возмущении адресов, таких как сопоставление среды с подделкой на пиксель.

Эта операция всегда интерпретирует du и dv как количество со знаком. Для версий 1_0 и 1_1 модификатор входных данных source Register Signed Scaling (_bx2) не разрешен для входного аргумента.

Эта инструкция дает определенные результаты, если входные текстуры содержат данные смешанного формата. Дополнительные сведения о форматах поверхностей см. в разделе 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

В этом примере показаны вычисления, выполненные в инструкции.

// 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(этап m)*t(n)R +

D3DTSS_BUMPENVMAT10(этап m)*t(n)G

v' = TextureCoordinates(stage m)v +

D3DTSS_BUMPENVMAT01(этап m)*t(n)R +

D3DTSS_BUMPENVMAT11(этап 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(этап m)) +

D3DTSS_BUMPENVLOFFSET(этап m)]

Регистрируемые данные, прочитанные инструкцией texbem или texbeml, не могут быть прочитаны позже, за исключением другого texbem или 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

Примеры

Ниже приведен пример шейдера с идентифицированными картами текстур и этапами текстуры.

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

В этом примере требуются следующие текстуры на следующих этапах текстуры.

  • Этапу 0 назначается карта удара с данными о возмущении (du, dv).
  • Этапу 1 назначается карта текстур с данными цвета.
  • texbeml задает данные матрицы на стадии текстуры, которая является выборкой. Это отличается от функциональности конвейера фиксированной функции, где данные возмущения и матрицы занимают одну и ту же стадию текстуры.

Инструкции по шейдеру пикселей