Растеризація — що це, етапи та принцип роботи

Автор: IT Sectr Опубліковано: 2026-06-11 Час читання: 10 хв

Растеризація — це процес перетворення векторного опису тривимірних примітивів (трикутників, ліній, точок) у набір пікселів (фрагментів) для відображення на екрані. Згідно з Khronos Group, 2025, растеризація є автоматичним (непрограмованим) етапом графічного конвеєра, розташованим між Vertex Shader і Fragment Shader. 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) — обчислення інтерпольованих атрибутів (барицентричних координат) для кожного покритого пікселя. 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, що критично для мобільних пристроїв з батарейним живленням.

Підсумки

  • Растеризація — перетворення векторних трикутників на растрові фрагменти для відображення на екрані.
  • 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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

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