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


texm3x3spec — ps

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

Синтаксис

texm3x3spec dst, src0, src1

 

where

  • dst — это регистр назначения.
  • src0 и src1 являются исходными регистрами.

Комментарии

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

 

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

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

Эту инструкцию необходимо использовать с двумя инструкциями 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
texm3x3spec t(m+2), t(n), c0  // 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

Затем инструкция texm3x3spec выполняет вычисление отражения.

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

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

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

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

E = c# (можно использовать любую константную register--c0, c1, c2 и т. д.)

Наконец, инструкция texm3x3spec примерирует 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 (tn must
                          //   be defined in some way before it is used)
texm3x3pad  t1,  t0       // First row of matrix multiply
texm3x3pad  t2,  t0       // Second row of matrix multiply
texm3x3spec t3,  t0,  c#  // Third row of matrix multiply to get a 3-vector
                          // Reflect 3-vector by the eye-ray vector in c#  
                          // Use reflected vector to lookup texture in
                          //   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 задается константным регистром E = c#.

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