Rasterization — что это, этапы и принцип работы

Автор: IT Sectr Опубликовано: 2026-06-11 Время чтения: 10 мин

Rasterization (растеризация) — это процесс преобразования векторного описания трёхмерных примитивов (треугольников, линий, точек) в набор пикселей (фрагментов) для отображения на экране. По данным Khronos Group, 2025, растеризация является автоматическим (непрограммируемым) этапом графического конвейера, расположенным между Vertex Shader и Fragment Shader. Rasterization определяет, какие пиксели экрана принадлежат какому треугольнику, и вычисляет интерполированные атрибуты для каждого фрагмента.

Главное

  • Rasterization — преобразование векторных примитивов в растровое изображение (пиксели).
  • Scanline conversion — базовый алгоритм, определяющий покрытие пикселей треугольником.
  • Интерполяция атрибутов — вычисление цвета, текстурных координат и нормалей для каждого фрагмента.
  • MSAA — мультисэмплинг, сглаживающий ступенчатые края (aliasing) при растеризации.
  • Производительность растеризации зависит от количества треугольников и разрешения экрана.

Что такое растеризация?

Rasterization — это этап графического конвейера, который преобразует геометрические примитивы (треугольники, линии) в набор фрагментов для дальнейшей обработки Fragment Shader. Входные данные — вершины треугольника в экранных координатах и их атрибуты (цвет, нормали, UV). Выход — набор фрагментов с интерполированными атрибутами.

В отличие от программируемых шейдеров (Vertex и Fragment Shader), растеризация является фиксированным (непрограммируемым) этапом. Разработчик не может изменить алгоритм растеризации, но может управлять его параметрами: режимом отсечения (culling), шириной линии, смещением глубины (polygon offset) и мультисэмплингом.

Роль растеризации в real-time графике

Практически вся современная real-time графика — игры, UI, AR/VR — использует растеризацию. Это самый производительный метод рендеринга, способный обрабатывать миллионы треугольников за кадр при 60 FPS. GPU-растеризаторы оптимизированы для параллельной обработки тысяч треугольников одновременно через специализированные блоки ROP (Render Output Units).

Как работает растеризация?

Растеризация треугольника начинается после того, как Vertex Shader преобразовал вершины в экранные координаты. GPU берёт три вершины треугольника и определяет, какие пиксели экрана находятся внутри этого треугольника.

Этапы растеризации треугольника

Процесс включает три последовательных шага: определение bounding box треугольника в пикселях — проверка каждого пикселя внутри bounding box на принадлежность треугольнику (edge function) — вычисление интерполированных атрибутов (barycentric coordinates) для каждого покрытого пикселя. Edge function — это линейное уравнение, определяющее, с какой стороны грани треугольника находится точка.

ЭтапОписаниеРезультат
ClippingОтсечение треугольников за границами viewportВидимые примитивы
Viewport transformПреобразование в экранные координатыПиксельные координаты
Triangle setupВычисление edge-функций и bounding boxПараметры растеризации
Fragment generationПроверка покрытия и интерполяцияФрагменты + атрибуты

Алгоритмы растеризации

Rasterization может быть реализована различными алгоритмами, каждый из которых имеет свои компромиссы между производительностью и качеством. Современные GPU используют комбинацию нескольких подходов.

Scanline-алгоритм

Классический алгоритм растеризации, разработанный для ранних GPU. Треугольник обрабатывается строка за строкой (scanline): для каждой строки экрана определяются точки входа и выхода треугольника, и все пиксели между ними заполняются. Scanline conversion эффективен для больших треугольников, но требует сложной логики для треугольников произвольной формы.

Half-space (edge function) метод

Современные GPU используют метод half-space растеризации: для каждой стороны треугольника вычисляется edge function — линейное уравнение, положительное с одной стороны и отрицательное с другой. Пиксель принадлежит треугольнику, если все три edge functions положительны. Half-space rasterization легко распараллеливается и хорошо подходит для SIMD-архитектур GPU.

Tile-based растеризация (TBR)

Мобильные GPU (Qualcomm Adreno, ARM Mali) используют Tile-Based Rendering (TBR). Экран делится на небольшие тайлы (16x16 или 32x32 пикселя), и растеризация выполняется для каждого тайла отдельно. Это минимизирует количество обращений к видеопамяти за счёт хранения кадрового буфера в быстрой локальной памяти (tile memory). TBR снижает энергопотребление, что критично для мобильных устройств.

Растеризация vs Ray Tracing

Rasterization и ray tracing — два принципиально разных подхода к рендерингу 3D-графики. Растеризация доминирует в real-time приложениях, ray tracing — в офлайн-рендеринге и постепенно проникает в real-time (на RTX-совместимых GPU).

ПараметрRasterizationRay Tracing
ПринципТреугольник → фрагментыЛуч → пересечение со сценой
СкоростьОчень быстрый (миллионы треугольников/кадр)Медленный (тысячи лучей/кадр)
КачествоТребует дополнительных техник (тени, отражения)Физически корректные тени и отражения
Мобильные GPUСтандартный методОграниченная поддержка (A17 Pro, Snapdragon Gen 3)
ЭнергопотреблениеНизкоеВысокое

MSAA и сглаживание при растеризации

При растеризации возникает проблема aliasing — ступенчатые края (jaggies) на границах треугольников. Это происходит потому, что пиксель дискретен и не может частично покрываться треугольником. Для борьбы с aliasing применяется мультисэмплинг (MSAA).

Как работает MSAA

MSAA (Multisample Anti-Aliasing) выполняет растеризацию с увеличенной частотой сэмплирования (2x, 4x, 8x). Вместо одного сэмпла на пиксель используется несколько суб-сэмплов, каждый из которых проверяется на покрытие треугольником. MSAA 4x обрабатывает 4 суб-сэмпла на пиксель, что даёт заметное сглаживание краёв без полного увеличения разрешения рендеринга.

FXAA и другие пост-процесс методы

В отличие от MSAA, методы пост-процесс сглаживания (FXAA, SMAA, TAA) работают уже после растеризации, анализируя финальное изображение. FXAA (Fast Approximate Anti-Aliasing) определяет края изображения и применяет размытие для сглаживания, работая значительно быстрее MSAA, но с менее качественным результатом.

Растеризация на GPU и оптимизация

Rasterization на современных GPU выполняется специализированными аппаратными блоками — ROP (Render Output Units). Количество ROP напрямую влияет на скорость заполнения (fill rate) — количество пикселей, которое GPU может обработать за секунду.

Факторы производительности растеризации

  • Triangle count — количество треугольников за кадр. Каждый треугольник требует overhead на setup и edge-тестирование.
  • Fill rate — количество пикселей, обрабатываемых ROP-блоками в секунду. Зависит от тактовой частоты GPU и количества ROP.
  • Overdraw — повторная растеризация одного пикселя из-за перекрытия треугольников. Оптимизируется сортировкой объектов по глубине.

Оптимизация растеризации для мобильных GPU

Для мобильных GPU (Tile-Based Rendering) критически важны: минимизация overdraw через раннюю отбраковку (early-Z), использование back-face culling для удаления невидимых треугольников и скрытое удаление поверхностей (occlusion culling) для отбраковки треугольников, полностью перекрытых другими объектами.

Часто задаваемые вопросы

Что такое растеризация простыми словами?

Растеризация — это процесс превращения треугольников в пиксели на экране. GPU берёт трёхмерный треугольник, определяет, какие пиксели экрана он закрывает, и передаёт их Fragment Shader для окрашивания.

Чем растеризация отличается от трассировки лучей?

Растеризация проецирует треугольники на экран и определяет покрытие пикселей (очень быстро). Трассировка лучей пускает лучи от камеры и проверяет пересечение с геометрией (физически точнее, но значительно медленнее).

Зачем нужно сглаживание (anti-aliasing) при растеризации?

При растеризации пиксель либо полностью принадлежит треугольнику, либо нет — отсюда ступенчатые края (aliasing). MSAA сглаживает края за счёт множественных суб-сэмплов на пиксель, а FXAA применяет фильтр к готовому изображению.

Можно ли программировать этап растеризации?

Нет, растеризация — фиксированный этап графического конвейера. Разработчик не может изменить алгоритм, но может управлять настройками: culling, polygon offset, режим растеризации (точки, линии, треугольники) и параметры MSAA.

Почему мобильные GPU используют Tile-Based Rendering?

Tile-Based Rendering (TBR) делит экран на тайлы и обрабатывает их в быстрой локальной памяти, а не в глобальной VRAM. Это радикально снижает энергопотребление и bandwidth, что критично для мобильных устройств с батарейным питанием.

Итоги

  • Rasterization — преобразование векторных треугольников в растровые фрагменты для отображения на экране.
  • Half-space метод — основной алгоритм растеризации в современных GPU.
  • Tile-Based Rendering — архитектура растеризации, используемая в мобильных GPU (Adreno, Mali).
  • Aliasing — проблема ступенчатых краёв, решаемая через MSAA, FXAA или TAA.
  • Fill rate — ключевой параметр производительности растеризации, зависящий от числа ROP-блоков.
  • Overdraw — повторная растеризация пикселей, оптимизируется через early-Z и occlusion culling.
  • Ray Tracing — альтернативный метод, обеспечивающий физически корректный рендеринг за счёт производительности.

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также