Растеризация — това е процес на преобразуване на векторното описание на триизмерни примитиви (триъгълници, линии, точки) в набор от пиксели (фрагменти) за показване на екрана. По данни на Khronos Group, 2025, растеризацията е автоматичен (непрограмируем) етап от графичния конвейер, разположен между Vertex Shader и Fragment Shader. Растеризацията определя кои пиксели на екрана принадлежат на кой триъгълник и изчислява интерполирани атрибути за всеки фрагмент.
Основни неща
Растеризация — е етап от графичния конвейер, който преобразува геометрични примитиви (триъгълници, линии) в набор от фрагменти за по-нататъшна обработка от 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 | Проверка на покритие и интерполация | Фрагменти + атрибути |
Растеризация може да бъде реализирана чрез различни алгоритми, всеки от които има свои компромиси между производителност и качество. Съвременните GPU използват комбинация от няколко подхода.
Класически алгоритъм за растеризация, разработен за ранните GPU. Триъгълникът се обработва ред по ред (scanline): за всеки ред на екрана се определят точките на влизане и излизане на триъгълника и всички пиксели между тях се запълват. Scanline conversion е ефективен за големи триъгълници, но изисква сложна логика за триъгълници с произволна форма.
Съвременните GPU използват метода half-space растеризация: за всяка страна на триъгълника се изчислява edge function — линейно уравнение, положително от едната страна и отрицателно от другата. Пикселът принадлежи на триъгълника, ако и трите edge functions са положителни. Half-space растеризация лесно се паралелизира и се вписва добре в SIMD архитектурите на GPU.
Мобилните GPU (Qualcomm Adreno, ARM Mali) използват Tile-Based Rendering (TBR). Екранът се разделя на малки тайлове (16×16 или 32×32 пиксела) и растеризацията се изпълнява за всеки тайл поотделно. Това минимизира броя на достъпите до видео паметта чрез съхраняване на кадровия буфер в бърза локална памет (tile memory). TBR намалява консумацията на енергия, което е критично за мобилните устройства.
Растеризация и ray tracing — два принципно различни подхода за рендериране на 3D графика. Растеризацията доминира в real-time приложенията, ray tracing — в офлайн рендерирането и постепенно прониква в real-time (на RTX-съвместими GPU).
| Параметър | Растеризация | 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, но с по-малко качествен резултат.
Растеризация на съвременните GPU се изпълнява от специализирани хардуерни блокове — ROP (Render Output Units). Броят на ROP пряко влияе върху скоростта на запълване (fill rate) — броя пиксели, които GPU може да обработи за секунда.
За мобилните GPU (Tile-Based Rendering) критично важни са: минимизиране на overdraw чрез ранно отхвърляне (early-Z), използване на back-face culling за премахване на невидими триъгълници и скрито премахване на повърхности (occlusion culling) за отхвърляне на триъгълници, напълно покрити от други обекти.
Често задавани въпроси
Растеризацията е процес на превръщане на триъгълници в пиксели на екрана. GPU взема триизмерен триъгълник, определя кои пиксели на екрана покрива и ги предава на Fragment Shader за оцветяване.
Растеризацията проектира триъгълници на екрана и определя покритието на пикселите (много бързо). Ray tracing изпраща лъчи от камерата и проверява пресичане с геометрията (физически по-точно, но значително по-бавно).
При растеризация пикселът или напълно принадлежи на триъгълника, или не — оттук стъпаловидните ръбове (aliasing). MSAA изглажда ръбовете чрез множество суб-семпли на пиксел, а FXAA прилага филтър към готовото изображение.
Не, растеризацията е фиксиран етап от графичния конвейер. Разработчикът не може да промени алгоритъма, но може да управлява настройките: culling, polygon offset, режим на растеризация (точки, линии, триъгълници) и параметри на MSAA.
Tile-Based Rendering (TBR) разделя екрана на тайлове и ги обработва в бърза локална памет, а не в глобална VRAM. Това радикално намалява консумацията на енергия и честотната лента, което е критично за мобилни устройства с батерийно захранване.
Резюме
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също