Правила растеризации
Правила растеризации определяют, как векторные данные сопоставляются с растровых данных. Растровые данные прикрепляются к целым числам, которые затем обрезаются и обрезаются (для рисования минимального количества пикселей), а атрибуты для каждого пикселя интерполируются (из атрибутов вершины) перед передачей в шейдер пикселей.
Существует несколько типов правил, которые зависят от типа сопоставленного примитива, а также от того, используются ли данные с несколькими значениями для уменьшения псевдонимов. На следующих иллюстрациях показано, как обрабатываются угловые варианты.
Правила растеризации треугольников (без многосамплинга)
Любой центр пикселей, который попадает внутри треугольника, рисуется; Предполагается, что пиксель находится внутри, если он передает правило верхнего слева. Правило верхнего левого края заключается в том, что центр пикселей определен, чтобы лежать внутри треугольника, если он находится на верхнем краю или левом краю треугольника.
где:
- Верхний край , это край, который точно горизонтальный и находится над другими краями.
- Левый край, является краем, который не совсем горизонтальный и находится в левой части треугольника А может иметь один или два левых края.
Правило в левом верхнем углу гарантирует, что смежные треугольники рисуются один раз.
На этом рисунке показаны примеры пикселей, которые рисуются, так как они находятся внутри треугольника или следуют правилу верхнего левого края.
Светло-темно-серое покрытие пикселей показывает их как группы пикселей, чтобы указать, какой треугольник они находятся внутри.
Правила растеризации строк (псевдоним без многосамплинга)
Правила растеризации линий используют область проверки алмазов, чтобы определить, охватывает ли строка пиксель. Для линий x-major (линии с -1 <= наклон <= +1), область теста алмаза включает (показанный твердый) нижний левый край, нижний правый край и нижний угол; алмаз исключает (показано пунктиром) верхний левый край, верхний правый край, верхний кордер, левый угол и правый угол. Линия y-major является любой линией, которая не является линией x-major; Тестовая область алмаза аналогична описанию для x-основной линии, кроме правого угла, также включена.
Учитывая область алмаза, линия охватывает пиксель, если линия выходит из области алмазного теста пикселя при путешествии вдоль линии от начала к концу. Полоса линии ведет себя так же, как она рисуется как последовательность линий.
На следующем рисунке показаны некоторые примеры.
Правила растеризации строк (антиализасные, без многосамплинга)
Антиалиасированная линия растеризована, как если бы она была прямоугольником (с шириной = 1). Прямоугольник пересекается с целевым объектом отрисовки, создающим значения покрытия на пиксель, которые умножаются на выходные альфа-компоненты шейдера пикселей. При рисовании линий на многофакторной отрисовке не существует предварительной формы.
Считается, что нет единого "лучшего" способа выполнить отрисовку с антиалиасной линией. Direct3D принимает в качестве руководства метод, показанный на следующем рисунке. Этот метод был производно эмпирически, демонстрируя ряд визуальных свойств, которые считаются желательными.
Оборудование не нужно точно соответствовать этому алгоритму; Тесты на эту ссылку должны иметь "разумные" допустимые ограничения, руководствуясь некоторыми принципами, перечисленными ниже, разрешая различные аппаратные реализации и размеры ядра фильтра. Однако ни одна из этих гибкостей, разрешенная в реализации оборудования, не может быть передана с помощью Direct3D приложениям, помимо просто рисования линий и отслеживания и измерения того, как они выглядят.
Этот алгоритм создает относительно гладкие линии с равномерной интенсивностью, с минимальными краями или косой чертой. Шаблон Moire для близких линий свернут. Существует хорошее покрытие для соединений между сегментами линий, размещенных сквозным.
Ядро фильтра является разумным компромиссом между объемом размытия края и изменения интенсивности, вызванными гамма-исправлениями. Значение покрытия умножается на шейдер пикселей o0.a (srcAlpha) на следующую формулу на этапе слияния выходных данных (OM):
srcColor * srcAlpha + destColor * (1-srcAlpha)
Правила растеризации точек (без многосамплинга)
Точка интерпретируется как будто она состоит из двух треугольников в шаблоне Z, которые используют правила растризации треугольников. Координата определяет центр одного пикселя ширины квадрата. Нет отбрасывания для очков.
На следующем рисунке показаны некоторые примеры.
Правила многофакторной защиты от псевдонимов
Multisample antialiasing (MSAA) сокращает псевдоним геометрии с использованием охвата пикселей и тестирования элементов глубины в нескольких под примеров расположения. Чтобы повысить производительность, вычисления на пиксели выполняются один раз для каждого покрытого пикселя, предоставляя общий доступ к выходным данным шейдера в вложенных пикселях. Multisample antialiasing не уменьшает псевдоним поверхности. Выборки расположений и функций реконструкции зависят от реализации оборудования.
На следующем рисунке показаны некоторые примеры.
Количество выборок зависит от многофакторного режима. Атрибуты вершин интерполируются в центрах пикселей, так как это происходит при вызове шейдера пикселей (это становится экстраполяцией, если центр не охвачен). Атрибуты могут быть помечены в шейдере пикселей, чтобы быть центроидными, что приводит к интерполяции атрибута при пересечении области пикселя и примитива.
Шейдер пикселей выполняется для каждой области пикселей 2x2 для поддержки производных вычислений (которые используют разностные значения x и y). Это означает, что вызовы шейдера происходят больше, чем показано для заполнения минимальной 2x2 кванта (которая не зависит от мультисамплинга). Результат шейдера записывается для каждого охваченного образца, который передает тест глубины глубины.
Правила растеризации для примитивов, как правило, не изменяются с помощью многосамплийной защиты, за исключением следующих:
Для треугольника тест покрытия выполняется для каждого расположения образца (а не для центра пикселей). Если рассматривается несколько примеров расположения, то шейдер пикселей выполняется один раз с интерполированными атрибутами в центре пикселей. Результат хранится (реплицируется) для каждого охваченного расположения в пикселе, который передает тест глубины или набора элементов.
Линия рассматривается как прямоугольник, состоящий из двух треугольников, с шириной линии 1,4.
Для точки тест покрытия выполняется для каждого примера расположения (а не для центра пикселей).
Многофакторные форматы можно использовать в целевых объектах отрисовки, которые можно считывать обратно в шейдеры с помощью нагрузки, так как для отдельных выборок, доступ к которым осуществляется шейдером, не требуется. Форматы глубины не поддерживаются для многофакторного ресурса, поэтому форматы глубины ограничены только целевыми объектами отрисовки.
Форматы без типов поддерживают многофакторную проверку, чтобы представление ресурсов интерпретировать данные различными способами. Например, можно создать многофакторный ресурс с помощью R8G8B8A8_TYPELESS, отрисовать его с помощью ресурса представления с R8G8B8A8_UINT форматом, а затем разрешить содержимое другому ресурсу с R8G8B8A8_UNORM форматом данных.
Поддержка оборудования
API сообщает о поддержке оборудования для мультисамплинга по количеству уровней качества. Например, уровень качества 0 означает, что оборудование не поддерживает многосамплинг (на определенном уровне формата и качества). 3 для уровней качества означает, что оборудование поддерживает три различных макета и /или разрешают алгоритмы. Можно также предположить следующее:
- Любой формат, поддерживающий многофакторную настройку, поддерживает одинаковое количество уровней качества для каждого формата в этой семье.
- Каждый формат, поддерживающий многофакторную настройку и имеющий форматы _UNORM, _SRGB, _SNORM или _FLOAT, также поддерживает разрешение.
Центроидная выборка атрибутов при многофакторной антиализаписи
По умолчанию атрибуты вершин интерполируются в центр пикселей во время многофакторной защиты; Если центр пикселей не охватывается, атрибуты экстраполируются в центр пикселей. Если входные данные шейдера пикселей, содержащие семантику центроида (при условии, что пиксель не полностью охвачен) будут образцы где-то в пределах покрытой области пикселя, возможно, в одном из покрытых расположений выборки. Пример маски (задается состоянием растеризатора) применяется до вычисления центроида. Поэтому пример, который маскируется, не будет использоваться в качестве центроидного расположения.
Эталонный растризатор выбирает пример расположения для центроидной выборки, аналогичной следующему:
- Маска примера позволяет использовать все примеры. Используйте центр пикселей, если пиксель покрыт или если ни один из примеров не охватывается. В противном случае выбирается первый покрытый образец, начиная с центра пикселей и перемещаясь наружу.
- Маска примера отключает все примеры, но один (распространенный сценарий). Приложение может реализовать многопространичные суперсайты путем велоспорта с помощью однобитных значений примеров маски и повторной отрисовки сцены для каждого примера с помощью центроидной выборки. Для этого потребуется, чтобы приложение отрегулирует производные, чтобы выбрать более подробные мипсы текстур для более высокой плотности выборки текстуры.
Производные вычисления при многосамплинге
Шейдеры пикселей всегда выполняются с помощью минимальной области пикселей 2x2 для поддержки вычислений производных вычислений, которые вычисляются путем принятия разностных значений между данными из смежных пикселей (что делает предположение, что данные в каждом пикселе были выборки с интервалом по горизонтали или по вертикали). Это не влияет на многосамплинг.
Если производные запрашиваются для атрибута, который был центроидирован, вычисление оборудования не корректируется, что может привести к неточным производным. Шейдер ожидает вектора единицы в пространстве целевого объекта отрисовки, но может получить вектор, отличный от единицы, относительно другого векторного пространства. Таким образом, при запросе производных от атрибутов, которые являются центроидными выборками, несет ответственность за то, что приложение должно проявлять осторожность.
На самом деле рекомендуется не объединять производные и центроидную выборку. Центроидная выборка может оказаться полезной для ситуаций, когда крайне важно, чтобы интерполированные атрибуты примитива не экстраполировались, но это связано с компромиссами, такими как атрибуты, которые, как представляется, прыгают, когда примитивный край пересекает пиксель (а не постоянно изменяется) или производные, которые не могут использоваться операциями выборки текстур, производными от loD.
Связанные темы