Растеризация
Метод рендеринга, при котором растровое изображение получается путем поиска пикселей в буфере кадра, принадлежащих векторному примитиву. Растеризуются, как правило, точки, отрезки и многоугольники (обычно треугольники).
Растеризация на сегодняшний день является самым распространенным методом рендеринга 3D-графики ввиду своей простоты и эффективности. Растеризация легко распараллеливается, поэтому для рендеринга в реальном времени были созданы специальные выделенные многоядерные процессоры, называющиеся графическими (GPU), которые способны растеризировать миллионы треугольников в секунду. Именно растеризация лежит в основе практически всех современных 3D-игр.
Графический конвейер
Машина состояний, используемая для растеризации, называется графическим конвейером. Свое название она получила из-за того, что выходные данные каждой стадии являются входными для следующей.
- Трансформация. Эта стадия начинает вершинный конвейер, где единицей обработки является вершина (точка в аффинном пространстве). Набор вершин, формирующих трехмерный объект, переводится из модельного пространства в мировое, а затем - в видовое, где началом координат является позиция камеры (эти два преобразования обычно совмещаются в одно). Полученные вершины переводятся перспективной матрицей в пространство отсечения. В программируемом конвейере стадия трансформации производится в вершинном шейдере.
- Отсечение. Невидимые вершины (выходящие за пределы пирамиды видимости) отбрасываются и не передаются дальше.
- Нормализация. Из пространства отсечения вершины переводятся в нормализованные координаты устройства (NDC) - то есть, фактически, в двумерные координаты на экранной плоскости + координата Z, обозначающая глубину относительно экранной плоскости.
- Интерполяция. Полученный набор точек используется для растеризации полигонов по заданным правилам построения ребер. В программируемом конвейере эти правила могут быть заданы в геометрическом шейдере. Также на этой стадии происходит интерполяция вершинных атрибутов (цвет, нормаль, текстурные координаты и пр.) по поверхности полигона. Производится перспективная коррекция текстурных координат. С этого момента начинается пиксельный конвейер - данные обрабатываются попиксельно.
- Вычисление цвета. В программируемом конвейере результирующий цвет пикселя вычисляется во фрагментном шейдере. На этом этапе рассчитываются попиксельное освещение, текстурирование, рельеф, отражение, тени, прозрачность и другие эффекты. В качестве входных данных используются интерполированные вершинные атрибуты, а также текстуры.
- Проверка глубины. Перед тем, как записать пиксель в буфер кадра, может быть произведена проверка глубины (depth test). Координата Z пикселя сравнивается с соответствующей глубиной в Z-буфере. Если она меньше, то пиксель должен быть отрисован, если нет - то проигнорирован.
- Смешивание. Полученный цвет пикселя может по заданным правилам смешиваться с уже присутствующим цветом в буфере кадра, либо заменять его. Итоговое значение записывается в буфер.