Математика Tex2D в HLSL

Может ли кто-нибудь объяснить математику функции Tex2D в HLSL?

Один из примеров: задан четырехугольник с 4 вершинами, координаты текстуры на нем равны (0,0) (0,1) (1,0) (1,1), а ширина и высота текстуры - 640 и 480. Как шейдер может определить, сколько раз будет выполняться выборка? Если это прямое преобразование текселей в пиксели, означает ли это, что шейдер должен выполнить выборку 640 * 480 раз с увеличением координат текстуры в виде каких-то градиентов? Кроме того, я был бы признателен, если бы вы предоставили больше ссылок и статей по этой теме.

Спасибо.


person user2619459    schedule 25.07.2013    source источник


Ответы (1)


После вершинного шейдера растеризатор «конвертирует» треугольники в пиксели. Каждый пиксель связан с положением на экране, а атрибуты вершин треугольников (например, координаты текстуры) интерполируются по треугольникам, и интерполированное значение сохраняется в каждом пикселе в соответствии с положением пикселя.

Пиксельный шейдер выполняется один раз на пиксель (в большинстве случаев).

Количество выборок текстуры на пиксель зависит от используемого сэмплера. Если вы используете точечный сэмплер, текстура выбирается один раз, 4 раза, если вы используете билинейный сэмплер, и еще несколько, если вы используете более сложные сэмплеры.

Итак, если вы рисуете полноэкранный четырехугольник, текстура, которую вы выбираете, имеет тот же размер, что и цель рендеринга, и вы используете точечный сэмплер, текстура будет дискретизирована шириной * высотой раз (один раз на пиксель).

Вы можете думать о текстурах как о двумерном массиве текселей. tex2D просто возвращает тексел в запрошенной позиции, выполняя некоторую интерполяцию в зависимости от используемого сэмплера (координаты текстуры обычно относятся к размеру текстуры, поэтому оборудование преобразует их в абсолютные координаты).

Эта ссылка может быть полезна: Растеризация

person Tiago Costa    schedule 25.07.2013
comment
Только для полноты: tex2D также выполняет Mipmapping для вас либо с ddx и ddy, либо с вашим lod-level. - person Gnietschow; 25.07.2013