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


Этап шейдера пикселей

На этапе пиксельного шейдера (PS) используются расширенные методы заливки, такие как освещение по пикселям и постобработка. Шейдер пикселей — это программа, объединяющая константные переменные, данные текстур, интерполированные значения вершин и другие данные для получения отдельных пикселей. Этап растеризатора вызывает шейдер пикселей один раз для каждого пикселя, охваченного примитивом, однако можно указать шейдер NULL , чтобы избежать запуска шейдера.

Шейдер пикселей

При множественной дискретизации текстуры шейдер пикселей вызывается один раз для каждого охваченного пикселя, а тестирование глубины трафарета выполняется для каждого объекта множественной дискретизации. Образцы которые проходят проверку глубины трафарета, обновляются с использованием выходного цвета шейдера пикселей.

Встроенные функции шейдера пикселей создают или используют производные от количества относительно экранного пространства x и y. Самый распространенный способ использования производных — вычисления уровня детализации для дискретизации текстур, а в случае с анизотропной фильтрацией — выбор образцов по оси анизотропии. Как правило, аппаратная реализации запускает шейдер пикселей на нескольких пикселях (например, в сетке 2x2) одновременно, чтобы производные количества, вычисленные в шейдере, можно было аппроксимировать текстуры как дельты значений в той же точке выполнения в соседних пикселях.

Входные данные

Если конвейер настроен без шейдера геометрии, шейдер текстуры ограничивается 16 32-разрядными и 4-компонентными входными данными. В противном случае шейдер пикселей может принимать до 32 32-разрядных, 4-компонентных входных данных.

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

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

Входные данные также можно объявить с помощью семантики системного значения, которая помечает параметр, используемый на других этапах конвейера. Например, положение пикселя должно быть отмечено семантикой SV_Position. Этап IA может создать один скаляр для пиксельного шейдера (с помощью SV_PrimitiveID); Этап растеризатора также может создать один скаляр для пиксельного шейдера (с помощью SV_IsFrontFace).

Выходные данные

Пиксельный шейдер может вывести до 8 32-разрядных 4-компонентных цветов (если пиксель отклоняется, цвет не предоставляется). Компоненты регистрация выходных данных шейдера пикселей следует объявить перед использованием. У каждого регистра может быть отдельная маска вывода записи.

Используйте состояние depth-write-enable (на этапе объединения выходных данных) для управления записью данных глубины в буфер глубины (или используйте инструкцию отмены, чтобы отменить данные для этого пикселя). Пиксельный шейдер также может выводить необязательное 32-разрядное, 1 компонентное значение глубины с плавающей запятой для тестирования глубины (с помощью семантики SV_Depth). Значение глубины выводится в регистре oDepth и заменяет интерполированное значение для тестирования глубины (если тестирование глубины включено). Не существует способа для динамического переключения между глубиной с фиксированной функцией и oDepth шейдера.

Шейдер пикселей не может выводить значение трафарета.

Графический конвейер

Этапы конвейера (Direct3D 10)