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

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

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

Основни неща

  • Растеризация — преобразуване на векторни примитиви в растерно изображение (пиксели).
  • Scanline conversion — основен алгоритъм, определящ покритието на пикселите от триъгълник.
  • Интерполация на атрибути — изчисляване на цвят, текстурни координати и нормали за всеки фрагмент.
  • MSAA — мултисемплинг, изглаждащ стъпаловидните ръбове (aliasing) при растеризация.
  • Производителността на растеризацията зависи от броя на триъгълниците и разделителната способност на екрана.

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

Растеризация — е етап от графичния конвейер, който преобразува геометрични примитиви (триъгълници, линии) в набор от фрагменти за по-нататъшна обработка от 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Проверка на покритие и интерполацияФрагменти + атрибути

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

Растеризация може да бъде реализирана чрез различни алгоритми, всеки от които има свои компромиси между производителност и качество. Съвременните GPU използват комбинация от няколко подхода.

Scanline алгоритъм

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

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

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

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

Мобилните GPU (Qualcomm Adreno, ARM Mali) използват Tile-Based Rendering (TBR). Екранът се разделя на малки тайлове (16×16 или 32×32 пиксела) и растеризацията се изпълнява за всеки тайл поотделно. Това минимизира броя на достъпите до видео паметта чрез съхраняване на кадровия буфер в бърза локална памет (tile memory). TBR намалява консумацията на енергия, което е критично за мобилните устройства.

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

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

ПараметърРастеризацияRay 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 и оптимизация

Растеризация на съвременните GPU се изпълнява от специализирани хардуерни блокове — ROP (Render Output Units). Броят на ROP пряко влияе върху скоростта на запълване (fill rate) — броя пиксели, които GPU може да обработи за секунда.

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

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

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

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

Често задавани въпроси

Какво е растеризация с прости думи?

Растеризацията е процес на превръщане на триъгълници в пиксели на екрана. GPU взема триизмерен триъгълник, определя кои пиксели на екрана покрива и ги предава на Fragment Shader за оцветяване.

С какво растеризацията се различава от ray tracing?

Растеризацията проектира триъгълници на екрана и определя покритието на пикселите (много бързо). Ray tracing изпраща лъчи от камерата и проверява пресичане с геометрията (физически по-точно, но значително по-бавно).

Защо е необходимо изглаждане (anti-aliasing) при растеризация?

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

Може ли да се програмира етапът на растеризация?

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

Защо мобилните GPU използват Tile-Based Rendering?

Tile-Based Rendering (TBR) разделя екрана на тайлове и ги обработва в бърза локална памет, а не в глобална VRAM. Това радикално намалява консумацията на енергия и честотната лента, което е критично за мобилни устройства с батерийно захранване.

Резюме

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

Обсъдете проекта

Прочетете също