Поделиться через


texm3x3vspec - ps

Выполняет умножение матрицы 3x3 и использует результат для поиска текстуры. Его можно использовать для зеркального отражения и сопоставления среды, где вектор зрителя не является постоянным. texm3x3vspec следует использовать в сочетании с двумя инструкциями texm3x3pad - ps . Если вектор луча глаза является постоянным, инструкция texm3x3spec - ps выполнит ту же матричную умножение и поиск текстуры.

Синтаксис

texm3x3vspec dst, src

 

where

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

Комментарии

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

 

Эта инструкция выполняет окончательную строку операции умножения матрицы 3x3, интерпретирует результирующий вектор как нормальный вектор для отражения вектора луча глаза, а затем использует отраженный вектор в качестве адреса текстуры для поиска текстуры. Он работает так же, как texm3x3spec - ps, за исключением того, что вектор луча глаза берется из четвертого компонента координат текстуры. Матричное умножение 3x3 обычно полезно для ориентирования нормального вектора на правильное тангенсное пространство для отрисовываемой поверхности.

Матрица 3x3 состоит из координат текстуры третьего этапа текстуры и двух предыдущих этапов текстуры. Полученный вектор после отражения (UVW) используется для выборки текстуры на этапе 3. Любая текстура, назначенная двум предыдущим этапам текстуры, игнорируется.

Эту инструкцию необходимо использовать с инструкцией texm3x3pad. Регистры текстуры должны использовать следующую последовательность.

tex t(n)                    // Define tn as a standard 3-vector (tn must
                            //   be defined in some way before it is used)
texm3x3pad   t(m),   t(n)   // where m > n
                            // Perform first row of matrix multiply
texm3x3pad   t(m+1), t(n)   // Perform second row of matrix multiply
texm3x3vspec t(m+2), t(n)   // Perform third row of matrix multiply
                            // Then do a texture lookup on the texture
                            // associated with texture stage m+2

Первая инструкция texm3x3pad выполняет первую строку умножения, чтобы найти u'.

u' = TextureCoordinates(stage m)UVW * t(n) RGB

Вторая инструкция texm3x3pad выполняет вторую строку умножения для поиска v'.

v' = TextureCoordinates(stage m+1)UVW * t(n)RGB

Инструкция texm3x3spec выполняет третью строку умножения для поиска w'.

w' = TextureCoordinates(stage m+2)UVW * t(n)RGB

Инструкция texm3x3vspec также выполняет вычисление отражения.

(u' , v' , w' ) = 2*[(N*E)/(N*N)]*N - E

где нормальный N задается

N = (u' , v' , w' )

и вектор зрительный луч E задается

E = (TextureCoordinates(stage m)Q ,

TextureCoordinates(stage m+1)Q ,

TextureCoordinates(stage m+2)Q )

Наконец, инструкция texm3x3vspec образцы t(m+2) с (u',v',w') и сохраняет результат в t(m+2).

t(m+2)RGBA = TextureSample(stage m+2)RGBA с использованием (u' , v' , w' ) в качестве координат

Примеры

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

ps_1_1
tex t0                // Bind texture in stage 0 to register t0
texm3x3pad   t1,  t0  // First row of matrix multiply
texm3x3pad   t2,  t0  // Second row of matrix multiply
texm3x3vspec t3,  t0  // Third row of matrix multiply to get a 3-vector
                      // Reflect 3-vector by the eye-ray vector
                      // Use reflected vector to do a texture lookup
                      //   at stage 3
mov r0, t3            // Output the result

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

  • Этапу 0 назначается карта текстур с обычными данными. Это часто называют картой ударов. Данные являются нормальными (XYZ) для каждого текселя. Координаты текстуры на этапе n определяют, как образец этой нормальной карты.
  • Набор координат текстуры m назначается строке 1 матрицы 3x3. Любая текстура, назначенная сцене m, игнорируется.
  • Набор координат текстуры m+1 назначается строке 2 матрицы 3x3. Любая текстура, назначенная сцене m+1, игнорируется.
  • Набор координат текстуры m+2 назначается строке 3 матрицы 3x3. Этапу m+2 назначается схема текстуры тома или куба. Текстура предоставляет данные цвета (RGBA).
  • Вектор луча глаза E передается в инструкцию в четвертом компоненте (q) данных координат текстуры на этапах m, m+1 и m+2.

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