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


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

Этап шейдера пикселей (PS) получает интерполированные данные для примитива и создает данные на пиксель, такие как цвет.

Это программируемый этап шейдера; он отображается как округленный блок на схеме графического конвейера . Этот этап шейдера предоставляет собственные уникальные функциональные возможности, созданные на основе шейдерной модели 4.0 общего шейдера.

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

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

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

Входы

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

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

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

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

Выходы

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

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

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

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