В компьютерной графике растеризация ( британский английский ) или растеризация ( американский английский ) — это задача взять изображение , описанное в формате векторной графики (фигуры), и преобразовать его в растровое изображение (серию пикселей , точек или линий, которые, при совместном отображении создайте изображение, представленное с помощью фигур). [1] [2] Растровое изображение затем можно отобразить на дисплее компьютера , видеодисплее или принтере или сохранить в формате растрового файла. Растеризация может относиться к технике рисования 3D-моделей или к преобразованию примитивов 2D-рендеринга , таких как многоугольники и сегменты линий , в растровый формат.
Термин «растеризация» происходит от немецкого Raster «сетка, узор, схема» и латинского rāstrum «скребок, грабли». [3] [4]
Линейный алгоритм Брезенхема является примером алгоритма, используемого для растеризации линий.
Такие алгоритмы, как алгоритм круга средней точки, используются для рендеринга круга на пикселизированном холсте.
Растеризация — один из типичных методов рендеринга 3D-моделей. По сравнению с другими методами рендеринга, такими как трассировка лучей , растеризация происходит чрезвычайно быстро и поэтому используется в большинстве 3D-движков реального времени. Однако растеризация — это просто процесс вычисления отображения геометрии сцены на пиксели, и он не предписывает конкретного способа вычисления цвета этих пикселей. Конкретный цвет каждого пикселя назначается пиксельным шейдером (который в современных графических процессорах полностью программируется ). Затенение может учитывать физические эффекты, такие как положение источников света, их приближение или чисто художественный замысел.
Процесс растрирования 3D-моделей на 2D-плоскость для отображения на экране компьютера (« экранное пространство ») часто выполняется с помощью аппаратного обеспечения с фиксированными функциями (непрограммируемого) в графическом конвейере . Это связано с тем, что нет необходимости изменять методы растеризации, используемые во время рендеринга [5] , а система специального назначения обеспечивает высокую эффективность.
Полигоны — это распространенное представление цифровых 3D-моделей. Перед растеризацией отдельные полигоны обычно разбиваются на треугольники; поэтому типичной проблемой, которую приходится решать при трехмерной растеризации, является растеризация треугольника. Свойства, которые обычно требуются от алгоритмов растеризации треугольников, заключаются в растеризации двух соседних треугольников (т. е. тех, которые имеют общее ребро).
Это приводит к установлению правил растеризации , гарантирующих вышеуказанные условия. Один набор таких правил называется правилом верхнего левого угла , которое гласит, что пиксель растеризуется тогда и только тогда, когда
Верхнее ребро — это ребро, которое строго горизонтально и лежит над другими ребрами, а левое ребро — это негоризонтальное ребро, находящееся на левой стороне треугольника.
Это правило реализовано, например, в Direct3D [6] и во многих реализациях OpenGL (хотя спецификация не определяет его и требует только согласованного правила [7] ).
Качество растеризации можно улучшить с помощью сглаживания , создающего «гладкие» края. Субпиксельная точность — это метод, который учитывает позиции в более мелком масштабе, чем пиксельная сетка, и может давать разные результаты, даже если конечные точки примитива попадают в одни и те же пиксельные координаты, создавая более плавную анимацию движения. Простому или более старому оборудованию, такому как PlayStation 1 , не хватало субпиксельной точности при растеризации 3D. [8]