Правила растеризацииRasterization rules

Правила растеризации определяют, как векторные данные сопоставляются с растровыми.Rasterization rules define how vector data is mapped into raster data. Растровые данные прикрепляются в целочисленные расположения, которые затем сортируются и обрезаются (так, чтобы рисовать минимальное число пикселей), а атрибуты отдельных пикселей интерполируются (от атрибутов отдельных вершин), прежде чем будут переданы в построитель текстуры.The raster data is snapped to integer locations that are then culled and clipped (to draw the minimum number of pixels), and per-pixel attributes are interpolated (from per-vertex attributes) before being passed to a pixel shader.

Существует несколько типов правил, которые зависят от типа сопоставляемого примитива, а также от того, используют ли данные множественную дискретизацию, чтобы уменьшить искажения.There are several types of rules, which depend on the type of primitive that is being mapped, as well as whether or not the data uses multisampling to reduce aliasing. На следующих рисунках показана обработка углов.The following illustrations demonstrate how the corner cases are handled.

Правила растрирования треугольников (без множественной выборки)Triangle Rasterization Rules (Without Multisampling)

Любой центр пикселя, который находится внутри треугольника, рисуется; пиксель считается расположенным внутри, если он соответствует правилу "верхнего левого".Any pixel center which falls inside a triangle is drawn; a pixel is assumed to be inside if it passes the top-left rule. Правило "верхнего левого" заключается в том, что центр пикселя считается размещенным внутри треугольника, если он располагается на верхней или левой стороне треугольника.The top-left rule is that a pixel center is defined to lie inside of a triangle if it lies on the top edge or the left edge of a triangle.

где:where:

  • верхняя сторона — это сторона, которая размещено строго по горизонтали и выше других сторон;A top edge, is an edge that is exactly horizontal and is above the other edges.
  • левая сторона — это сторона, которая расположена не строго по горизонтали в левой части треугольника (у треугольника может быть одна или две левые стороны).A left edge, is an edge that is not exactly horizontal and is on the left side of the triangle A triangle can have one or two left edges.

Правило "верхнего левого" гарантирует, что смежные треугольники рисуются один раз.The top-left rule ensures that adjacent triangles are drawn once.

На этом рисунке показаны примеры пикселей, которые рисуются, так как они размещены внутри треугольника или соответствуют правилу "верхнего левого".This illustration shows examples of pixels that are drawn because they either lie inside a triangle or follow the top-left rule.

примеры растеризации треугольника по правилу "верхнего левого"

Светлыми и темно-серыми квадратами показаны группы пикселей, чтобы обозначить, внутри каких треугольников они находятся.The light and dark gray covering of the pixels show them as groups of the pixels to indicate which triangle they are inside.

Правила растеризации линий (без сглаживания, без множественной дискретизации)Line Rasterization Rules (Aliased, Without Multisampling)

Правила растеризации линий используют ромбовидную тестовую область, чтобы определить, охватывает ли линия пиксель.Line rasterization rules use a diamond test area to determine if a line covers a pixel. Для основных линий сетки x (у которых –1 <= наклон <= +1) в ромбовидную область проверки (показана сплошным цветом) включены левый нижний и правый нижний край, а также нижний угол; из ромба исключаются (показана пунктиром) левый верхний и правый верхний край, а также верхний, левый и правый угол.For x-major lines (lines with -1 <= slope <= +1), the diamond test area includes (shown solid) the lower-left edge, lower-right edge, and bottom corner; the diamond excludes (shown dotted) the upper-left edge, upper-right edge, the top corder, the left corner, and the right corner. Основная линия сетки y — это любая линия, не являющаяся основной линией сетки x. Ромбовидная тестовая область описывается так же, как и для x, но в нее также включен правый угол.A y-major line is any line that is not an x-major line; the test diamond area is the same as described for the x-major line except the right corner is also included.

В ромбовидной области линия охватывает пиксель, если она есть в ромбовидной тестовой области при обходе линии с начала до конца.Given the diamond area, a line covers a pixel if the line exits the pixel's diamond test area when traveling along the line from the start towards the end. Ломаная ведет себя так же, как при ее отрисовке в виде последовательности линий.A line strip behaves the same, as it is drawn as a sequence of lines.

На следующем рисунке представлены некоторые примеры.The following illustration shows some examples.

примеры растеризации линии без сглаживания

Правила растрирования линий (сглаженные без множественной выборки)Line Rasterization Rules (Antialiased, Without Multisampling)

Линия со сглаживанием преобразуется в растровый формат так, будто она представляет прямоугольник (с шириной = 1).An antialiased line is rasterized as if it were a rectangle (with width = 1). Прямоугольник пересекается с целью прорисовки, что дает значения покрытия для каждого пикселя, которые умножаются на выходные альфа-компоненты пиксельного шейдера.The rectangle intersects with a render target producing per-pixel coverage values, which are multiplied into pixel shader output alpha components. Сглаживание не выполняется при рисовании линий целевого объекта прорисовки со множественной дискретизацией.There is no antialiasing preformed when drawing lines on a multisampled render target.

Считается, что не существует единственного лучшего способа отрисовки линии со сглаживанием.It is deemed that there is no single "best" way to perform antialiased line rendering. В качестве рекомендации Direct3D использует метод, показанный на следующем рисунке.Direct3D adopts as a guideline the method shown in the following illustration. Он был получен опытным путем, т. к. продемонстрировал ряд желательных визуальных свойств.This method was derived empirically, exhibiting a number of visual properties deemed desirable.

Оборудования не обязано точно соответствовать этому алгоритму. Отклонения тестов с использованием этого эталонного метода будут «допустимыми», если следовать указанным ниже принципам, что позволяет применять различные аппаратные реализации и размеры ядер фильтра.Hardware need not exactly match this algorithm; tests against this reference shall have "reasonable" tolerances, guided by some of the principles listed further below, permitting various hardware implementations and filter kernel sizes. Но подобная гибкость аппаратной реализации не может быть передана в Direct3D через приложения, помимо простого рисования линий, а также наблюдения и измерения их внешнего вида.None of this flexibility permitted in hardware implementation, however, can be communicated up through Direct3D to applications, beyond simply drawing lines and observing/measuring how they look.

примеры растеризации линии со сглаживанием

Этот алгоритм создает относительно плавные линии одинаковой интенсивности с минимальным числом неровных краев или искажений.This algorithm generates relatively smooth lines, with uniform intensity, with minimal jagged edges or braiding. Образование муарового узора для рядом расположенных линий минимизировано.Moire patterning for close lines is minimized. Обеспечивается хорошее покрытие соединений между сегментами линий, размещенными возле концов.There is good coverage for junctions between line segments placed end-to-end.

Ядро фильтра — это разумный компромисс между объем размытия краев и изменениями интенсивности, вызванными гамма-коррекцией.The filter kernel is a reasonable tradeoff between the amount of edge blurring and the changes in intensity caused by gamma corrections. Значение покрытия умножаются на пиксельный шейдер o0.a (srcAlpha) по следующей формуле на стадии слияния вывода (OM):The coverage value is multiplied into pixel shader o0.a (srcAlpha) per the following formula by the Output Merger (OM) stage:

Сркколор * сркалфа + дестколор * (1-сркалфа)srcColor * srcAlpha + destColor * (1-srcAlpha)

Правила растеризация точки (без множественной дискретизации)Point Rasterization Rules (Without Multisampling)

Точка интерпретируется как состоящая из двух треугольников в Z-шаблоне, для которого используются правила растеризации треугольника.A point is interpreted as though it were composed of two triangles in a Z pattern, which use triangle rasterization rules. Координата определяет центр квадрата шириной один пиксель.The coordinate identifies the center of a one pixel wide square. Для точек отбрасывание не выполняется.There is no culling for points.

На следующем рисунке представлены некоторые примеры.The following illustration shows some examples.

примеры растеризация точки

Правила растеризации со сглаживанием и множественной дискретизациейMultisample Anti-Aliasing Rasterization Rules

Сглаживание со множественной дискретизацией (MSAA) уменьшает геометрические искажения, используя тесты покрытия пикселей и трафарета глубины в нескольких местах из подмножества выборки.Multisample antialiasing (MSAA) reduces geometry aliasing using pixel coverage and depth-stencil tests at multiple sub-sample locations. Для повышения производительности пиксельные вычисления выполняются один раз для каждого охваченного пикселя за счет совместного использования выходных данных шейдера для всех охваченных пикселей.To improve performance, per-pixel calculations are performed once for each covered pixel, by sharing shader outputs across covered sub-pixels. Множественное сглаживание не уменьшает искажения поверхности.Multisample antialiasing does not reduce surface aliasing. Расположения выборки и функции реконструкции зависят от аппаратной реализации.Sample locations and reconstruction functions are dependent on the hardware implementation.

На следующем рисунке представлены некоторые примеры.The following illustration shows some examples.

примеры растеризации со множественным сглаживанием

Количество расположений выборки зависит от режима множественной дискретизации.The number of sample locations is dependent on the multisample mode. Интерполяции атрибутов вершин происходит в центре пикселей, т. к. здесь вызывается пиксельный шейдер (это становится экстраполяцией, если центр не охвачен).Vertex attributes are interpolated at pixel centers, since this is where the pixel shader is invoked (this becomes extrapolation if the center is not covered). Атрибуты могут быть отмечены в пиксельном шейдере для центроидной дискретизации, из-за чего незатронутые пиксели интерполируют атрибут на пересечения области пикселя и примитива.Attributes can be flagged in the pixel shader to be centroid sampled, which causes non-covered pixels to interpolate the attribute at intersection of the pixel's area and the primitive.

Пиксельный шейдер запускается для каждой области размером 2x2 пикселя для поддержки производных вычислений (в которых используется дельта x и y).A pixel shader runs for each 2x2 pixel area to support derivative calculations (which use x and y deltas). Это означает, что шейдер вызывается чаще, чем показано, для заполнения минимального кванта 2x2 (который не зависит от множественной дискретизации).This means that shader invocations occur more than is shown to fill out the minimum 2x2 quanta (which is independent of multisampling). Результат шейдера записывается для каждого охваченного образца, который прошел тест трафарета глубины.The shader result is written out for each covered sample that passes the per-sample depth-stencil test.

Правила растеризации для примитивов, в целом, не изменяются при множественном сглаживании, за исключением следующие случаев:Rasterization rules for primitives are, in general, unchanged by multisample antialiasing, except:

  • для треугольника тест покрытия выполняется для каждого расположения образца (а не для центра пикселя);For a triangle, a coverage test is performed for each sample location (not for a pixel center). Если охватывается больше одного местоположения, пиксельный шейдер запускается один раз, а атрибуты интерполируются в центре пикселей.If more than one sample location is covered, a pixel shader runs once with attributes interpolated at the pixel center. Результат сохраняется (копируется) для каждого охваченного местоположения в пикселе, прошедшем проверку глубины трафарета.The result is stored (replicated) for each covered sample location in the pixel that passes the depth/stencil test.

    Линия считается прямоугольником, состоящим из двух треугольников с толщиной линии 1,4;A line is treated as a rectangle made up of two triangles, with a line width of 1.4.

  • для точки тест покрытия выполняется для каждого расположения образца (а не для центра пикселя).For a point, a coverage test is performed for each sample location (not for a pixel center).

Форматы множественной дискретизации могут использоваться в целях отрисовки, которые могут быть считаны в шейдеры с помощью загрузки, так как разрешение для отдельных образцов, к которым обращается шейдер, не требуется.Multisampling formats can be used in render targets which can be read back into shaders using load, since no resolve is required for individual samples accessed by the shader. Форматы глубины не поддерживаются для ресурса множественной дискретизации, поэтому форматы глубины ограничены только целями прорисовки.Depth formats are not supported for multisample resource, therefore, depth formats are restricted to render targets only.

Нетипизированные форматы поддерживают множественную дискретизацию, чтобы представление ресурсов могло по-разному интерпретировать данные.Typeless formats support multisampling to allow a resource view to interpret data in different ways. Например, можно создать многовыборочный ресурс с помощью R8G8B8A8 без _ типов, подготовить его к просмотру с помощью ресурса рендеринга целевого представления с _ форматом R8G8B8A8 uint, а затем разрешить содержимое в другой ресурс с _ форматом данных R8G8B8A8 UNORM.For instance, you could create a multisample resource using R8G8B8A8_TYPELESS, render to it using a render-target-view resource with a R8G8B8A8_UINT format, then resolve the contents to another resource with a R8G8B8A8_UNORM data format.

Поддержка оборудованияHardware Support

API сообщает о поддержке оборудования для множественной дискретизации с помощью ряда проверок качества.The API reports hardware support for multisampling through the number of quality levels. Например, уровень качества 0 означает, что множественная дискретизация (на определенном уровне формата и качества) не поддерживается оборудованием.For example, a 0 quality level means the hardware does not support multisampling (at a particular format and quality level). Уровень качества 3 означает, что оборудование поддерживает три разных макета образца и алгоритма разрешения.A 3 for quality levels means that the hardware supports three different sample layouts and/or resolve algorithms. Вы также можете предположить следующее:You can also assume the following:

  • любой формат, который поддерживает множественную дискретизацию, поддерживает одинаковое число уровней качества для каждого формата этого семейства;Any format that supports multisampling, supports the same number of quality levels for every format in that family.
  • Каждый формат, поддерживающий множественную выборку и имеющий _ форматы UNORM, _ sRGB, _ снорм или _ float, также поддерживает разрешение.Every format that supports multisampling, and has the _UNORM, _SRGB, _SNORM or _FLOAT formats, also supports resolving.

Центроидная дискретизация атрибутов при множественном сглаживанииCentroid Sampling of Attributes when Multisample Antialiasing

По умолчанию атрибуты вершин интерполируются в центре пикселей во время множественного сглаживания. Если центр пикселя не охвачен, атрибуты экстраполируются в центре пикселей.By default, vertex attributes are interpolated to a pixel center during multisample antialiasing; if the pixel center is not covered, attributes are extrapolated to a pixel center. Если входные данные пиксельного шейдера, которые содержат семантику центроида (если пиксель не полностью охвачен), будут выбираться где-то в пределах области охвата пикселя, возможно, в одном из охваченных расположений.If a pixel shader input that contains the centroid semantic (assuming the pixel is not fully covered) will be sampled somewhere within the covered area of the pixel, possibly at one of the covered sample locations. Маска образца (задается состоянием средства прорисовки) применяется перед вычислением центроида.A sample mask (specified by the rasterizer state) is applied prior to centroid computation. Поэтому маскированный образец не будет использоваться в качестве расположения центроида.Therefore, a sample that is masked out will not be used as a centroid location.

Средство программной прорисовки выбирает расположение образца для центроидной дискретизации следующим образом.The reference rasterizer chooses a sample location for centroid sampling similar to this:

  • Маска дискретизации разрешает все образцы.The sample mask allows all samples. Центр пикселя используется, если пиксель охвачен или ни один из образцов не охвачен.Use a pixel center if the pixel is covered or if none of the samples are covered. В противном случае выбирается первый охваченный образец начиная от центра пикселя и с перемещением вперед.Otherwise, the first covered sample is chosen, starting from the pixel center and moving outward.
  • Маска дискретизации отключает все образцы, кроме одного (общий сценарий).The sample mask turns off all samples but one (a common scenario). Приложение может реализовывать многопроходную супердискретизацию, перебирая одноразрядные значения маски дискретизации и повторно отрисовывая сцену для каждого образца, используя центроидную дискретизации.An application can implement multipass supersampling by cycling through single-bit sample-mask values and re-rendering the scene for each sample using centroid sampling. Для этого приложению потребуется настроить производные данные, чтобы выбрать более детализированные MIP текстур для повышения плотности дискретизации текстур.This would require that an application adjust derivatives to select appropriately more detailed texture mips for the higher texture sampling density.

Производные вычисления при множественной дискретизацииDerivative Calculations When Multisampling

Пиксельные шейдеры всегда запускаются с использованием минимальной области размером 2x2 пикселя для поддержки производных вычислений, для получения которых учитывается разница между смежными пикселями (предполагается, что данные в каждом пикселе были дискретизированы с горизонтальным или вертикальным интервалом).Pixel shaders always run using a minimum 2x2 pixel area to support derivative calculations, which are calculated by taking deltas between data from adjacent pixels (making the assumption that the data in each pixel has been sampled with unit spacing horizontally or vertically). Множественная дискретизация на это не влияет.This is unaffected by multisampling.

Если производные вычисления запрашиваются для атрибута, который был дискретизирован по центроиду, аппаратные вычисления не корректируются, что может вызвать неточные результаты.If derivatives are requested on an attribute that has been centroid sampled, the hardware calculation is not adjusted, which can cause inaccurate derivatives. Шейдер ожидает единичный вектор в цели отрисовки, но может получить иной вектор относительно другого векторного пространства.A shader will expect a unit vector in render-target space but may get a non-unit vector with respect to some other vector space. Поэтому приложение отвечает за проверку при запросе производных вычислений на основе атрибутов с центроидной дискретизацией.Therefore, it is an application's responsibility to exhibit caution when requesting derivatives from attributes that are centroid sampled.

К слову, не рекомендуется объединять производные вычисления и центроидную дискретизацию.In fact, it is recommended that you do not combine derivatives and centroid sampling. Центроидная дискретизация может быть полезна в случаях, когда интерполированные атрибуты примитива не должны быть экстраполированы, но при этом требуются компромиссы, например атрибуты меняются резко, а не непрерывно, когда край примитива пересекает пиксель или производные вычисления не могут использоваться в операциях дискретизации текстуры, которые получают уровень детализации.Centroid sampling can be useful for situations where it is critical that a primitive's interpolated attributes are not extrapolated, but this comes with tradeoffs such as attributes that appear to jump where a primitive edge crosses a pixel (rather than change continuously) or derivatives that cannot be used by texture sampling operations that derive LOD.

Связанные темыRelated topics

ПриложенияAppendices

Этап средства программной прорисовки (RS)Rasterizer (RS) stage