Растеризація — це процес перетворення векторного опису тривимірних примітивів (трикутників, ліній, точок) у набір пікселів (фрагментів) для відображення на екрані. Згідно з Khronos Group, 2025, растеризація є автоматичним (непрограмованим) етапом графічного конвеєра, розташованим між Vertex Shader і Fragment Shader. Rasterization визначає, які пікселі екрану належать якому трикутнику, та обчислює інтерпольовані атрибути для кожного фрагмента.
Головне
Rasterization — це етап графічного конвеєра, який перетворює геометричні примітиви (трикутники, лінії) у набір фрагментів для подальшої обробки Fragment Shader. Вхідні дані — вершини трикутника в екранних координатах та їхні атрибути (колір, нормалі, UV). Вихід — набір фрагментів з інтерпольованими атрибутами.
На відміну від програмованих шейдерів (Vertex та Fragment Shader), растеризація є фіксованим (непрограмованим) етапом. Розробник не може змінити алгоритм растеризації, але може керувати його параметрами: режимом відсікання (culling), шириною лінії, зміщенням глибини (polygon offset) та мультисемплінгом.
Практично вся сучасна 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 використовують комбінацію кількох підходів.
Класичний алгоритм растеризації, розроблений для ранніх GPU. Трикутник обробляється рядок за рядком (scanline): для кожного рядка екрану визначаються точки входу та виходу трикутника, і всі пікселі між ними заповнюються. Scanline conversion ефективний для великих трикутників, але вимагає складної логіки для трикутників довільної форми.
Сучасні GPU використовують метод half-space растеризації: для кожної сторони трикутника обчислюється edge function — лінійне рівняння, додатне з одного боку та від'ємне з іншого. Піксель належить трикутнику, якщо всі три edge functions є додатними. Half-space rasterization легко розпаралелюється і добре підходить для SIMD-архітектур GPU.
Мобільні GPU (Qualcomm Adreno, ARM Mali) використовують Tile-Based Rendering (TBR). Екран ділиться на невеликі тайли (16x16 або 32x32 пікселя), і растеризація виконується для кожного тайла окремо. Це мінімізує кількість звернень до відеопам'яті завдяки зберіганню кадрового буфера у швидкій локальній пам'яті (tile memory). TBR знижує енергоспоживання, що критично для мобільних пристроїв.
Rasterization та ray tracing — два принципово різних підходи до рендерингу 3D-графіки. Растеризація домінує в real-time додатках, ray tracing — в офлайн-рендерингу та поступово проникає в real-time (на RTX-сумісних GPU).
| Параметр | Rasterization | Ray Tracing |
|---|---|---|
| Принцип | Трикутник → фрагменти | Промінь → перетин зі сценою |
| Швидкість | Дуже швидкий (мільйони трикутників/кадр) | Повільний (тисячі променів/кадр) |
| Якість | Вимагає додаткових технік (тіні, відбиття) | Фізично коректні тіні та відбиття |
| Мобільні GPU | Стандартний метод | Обмежена підтримка (A17 Pro, Snapdragon Gen 3) |
| Енергоспоживання | Низьке | Високе |
При растеризації виникає проблема aliasing — ступінчасті краї (jaggies) на межах трикутників. Це відбувається тому, що піксель дискретний і не може частково покриватися трикутником. Для боротьби з aliasing застосовується мультисемплінг (MSAA).
MSAA (Multisample Anti-Aliasing) виконує растеризацію з підвищеною частотою семплювання (2x, 4x, 8x). Замість одного семпла на піксель використовується кілька суб-семплів, кожен з яких перевіряється на покриття трикутником. MSAA 4x обробляє 4 суб-семпли на піксель, що дає помітне згладжування країв без повного збільшення роздільної здатності рендерингу.
На відміну від MSAA, методи пост-процес згладжування (FXAA, SMAA, TAA) працюють уже після растеризації, аналізуючи фінальне зображення. FXAA (Fast Approximate Anti-Aliasing) визначає краї зображення та застосовує розмиття для згладжування, працюючи значно швидше за MSAA, але з менш якісним результатом.
Rasterization на сучасних GPU виконується спеціалізованими апаратними блоками — ROP (Render Output Units). Кількість ROP безпосередньо впливає на швидкість заповнення (fill rate) — кількість пікселів, яку GPU може обробити за секунду.
Для мобільних GPU (Tile-Based Rendering) критично важливі: мінімізація overdraw через ранню відбраковку (early-Z), використання back-face culling для видалення невидимих трикутників та приховане видалення поверхонь (occlusion culling) для відбраковки трикутників, повністю перекритих іншими об'єктами.
Часті запитання
Растеризація — це процес перетворення трикутників на пікселі на екрані. GPU бере тривимірний трикутник, визначає, які пікселі екрану він закриває, і передає їх Fragment Shader для фарбування.
Растеризація проєктує трикутники на екран і визначає покриття пікселів (дуже швидко). Трасування променів пускає промені від камери та перевіряє перетин з геометрією (фізично точніше, але значно повільніше).
При растеризації піксель або повністю належить трикутнику, або ні — звідси ступінчасті краї (aliasing). MSAA згладжує краї за рахунок множинних суб-семплів на піксель, а FXAA застосовує фільтр до готового зображення.
Ні, растеризація — фіксований етап графічного конвеєра. Розробник не може змінити алгоритм, але може керувати налаштуваннями: culling, polygon offset, режим растеризації (точки, лінії, трикутники) та параметри MSAA.
Tile-Based Rendering (TBR) ділить екран на тайли та обробляє їх у швидкій локальній пам'яті, а не в глобальній VRAM. Це радикально знижує енергоспоживання та bandwidth, що критично для мобільних пристроїв з батарейним живленням.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також