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