Rasterizasiya — üçölçülü primitivlərin (üçbucaqlar, xətlər, nöqtələr) vektor təsvirinin ekranda göstərilmək üçün piksel (fraqment) dəstinə çevrilməsi prosesidir. Khronos Group, 2025 məlumatlarına görə, rasterizasiya Vertex Shader və Fragment Shader arasında yerləşən qrafik konveyerinin avtomatik (proqramlaşdırılmayan) mərhələsidir. Rasterizasiya ekranın hansı piksellərinin hansı üçbucağa aid olduğunu müəyyən edir və hər bir fraqment üçün interpolyasiya edilmiş atributları hesablayır.
Əsas məqamlar
Rasterizasiya — qrafik konveyerinin həndəsi primitivləri (üçbucaqlar, xətlər) Fragment Shader tərəfindən sonrakı emal üçün fraqment dəstinə çevirən mərhələsidir. Giriş məlumatları — üçbucağın ekran koordinatlarında təpə nöqtələri və onların atributları (rəng, normallar, UV). Çıxış — interpolyasiya edilmiş atributlarla fraqment dəsti.
Proqramlaşdırıla bilən şeyderlərdən (Vertex və Fragment Shader) fərqli olaraq, rasterizasiya sabit (proqramlaşdırılmayan) mərhələdir. Tərtibatçı rasterizasiya alqoritmini dəyişə bilməz, ancaq onun parametrlərini idarə edə bilər: kəsmə rejimi (culling), xətt eni, dərinlik yerdəyişməsi (polygon offset) və multisampling.
Praktiki olaraq bütün müasir real-time qrafika — oyunlar, UI, AR/VR — rasterizasiyadan istifadə edir. Bu, 60 FPS-də kadr başına milyonlarla üçbucağı emal edə bilən ən məhsuldar renderinq üsuludur. GPU rasterizatorları ixtisaslaşdırılmış ROP (Render Output Units) blokları vasitəsilə eyni anda minlərlə üçbucağın paralel emalı üçün optimallaşdırılıb.
Üçbucağın rasterizasiyası Vertex Shader təpə nöqtələrini ekran koordinatlarına çevirdikdən sonra başlayır. GPU üçbucağın üç təpəsini götürür və ekranın hansı piksellərinin bu üçbucağın daxilində olduğunu müəyyən edir.
Proses üç ardıcıl addımı əhatə edir: üçbucağın pikseldə bounding box təyini — bounding box daxilində hər pikselin üçbucağa aidliyinin yoxlanılması (edge function) — hər örtülü piksel üçün interpolyasiya edilmiş atributların (barysentrik koordinatlar) hesablanması. Edge function — nöqtənin üçbucağın kənarının hansı tərəfində olduğunu təyin edən xətti tənlikdir.
| Mərhələ | Təsvir | Nəticə |
|---|---|---|
| Clipping | Viewport sərhədlərindən kənar üçbucaqların kəsilməsi | Görünən primitivlər |
| Viewport transform | Ekran koordinatlarına çevrilmə | Piksel koordinatları |
| Triangle setup | Edge-funksiyaların və bounding box hesablanması | Rasterizasiya parametrləri |
| Fragment generation | Örtünün yoxlanılması və interpolyasiya | Fraqmentlər + atributlar |
Rasterizasiya müxtəlif alqoritmlərlə həyata keçirilə bilər, hər birinin performans və keyfiyyət arasında öz kompromisləri var. Müasir GPU-lar bir neçə yanaşmanın kombinasiyasından istifadə edir.
Erkən GPU-lar üçün hazırlanmış klassik rasterizasiya alqoritmi. Üçbucaq sətir-sətir (scanline) emal olunur: ekranın hər sətri üçün üçbucağın giriş və çıxış nöqtələri müəyyən edilir və aralarındakı bütün piksellər doldurulur. Scanline conversion böyük üçbucaqlar üçün səmərəlidir, lakin ixtiyari formalı üçbucaqlar üçün mürəkkəb məntiq tələb edir.
Müasir GPU-lar half-space rasterizasiya metodundan istifadə edir: üçbucağın hər tərəfi üçün edge function — bir tərəfdən müsbət, digər tərəfdən mənfi olan xətti tənlik hesablanır. Piksel üçbucağa aiddir, əgər hər üç edge functions müsbətdirsə. Half-space rasterizasiyası asanlıqla paralelləşir və GPU-nun SIMD arxitekturalarına yaxşı uyğun gəlir.
Mobil GPU-lar (Qualcomm Adreno, ARM Mali) Tile-Based Rendering (TBR) istifadə edir. Ekran kiçik tayllara (16x16 və ya 32x32 piksel) bölünür və rasterizasiya hər tayl üçün ayrıca yerinə yetirilir. Bu, kadr buferini sürətli lokal yaddaşda (tile memory) saxlamaq hesabına video yaddaşa müraciətlərin sayını minimuma endirir. TBR enerji istehlakını azaldır ki, bu da mobil cihazlar üçün kritikdir.
Rasterizasiya və ray tracing — 3D qrafikanın renderinqinə iki prinsipial fərqli yanaşmadır. Rasterizasiya real-time tətbiqlərdə üstünlük təşkil edir, ray tracing — oflayn renderinqdə və tədricən real-time sahəyə (RTX uyğun GPU-larda) nüfuz edir.
| Parametr | Rasterizasiya | Ray Tracing |
|---|---|---|
| Prinsip | Üçbucaq → fraqmentlər | Şüa → səhnə ilə kəsişmə |
| Sürət | Çox sürətli (milyonlarla üçbucaq/kadr) | Yavaş (minlərlə şüa/kadr) |
| Keyfiyyət | Əlavə texnikalar tələb edir (kölgələr, əkslər) | Fiziki cəhətdən düzgün kölgələr və əkslər |
| Mobil GPU-lar | Standart üsul | Məhdud dəstək (A17 Pro, Snapdragon Gen 3) |
| Enerji istehlakı | Aşağı | Yüksək |
Rasterizasiyada aliasing problemi yaranır — üçbucaqların sərhədlərində pilləli kənarlar (jaggies). Bu, pikselin diskret olması və üçbucaq tərəfindən qismən örtülə bilməməsi səbəbindən baş verir. Aliasing ilə mübarizə üçün multisampling (MSAA) tətbiq olunur.
MSAA (Multisample Anti-Aliasing) rasterizasiyanı artırılmış seçmə tezliyi ilə (2x, 4x, 8x) yerinə yetirir. Piksel başına bir nümunə əvəzinə bir neçə sub-nümunə istifadə olunur, hər biri üçbucaqla örtülmə baxımından yoxlanılır. MSAA 4x piksel başına 4 sub-nümunə emal edir ki, bu da renderinq həllini tam artırmadan kənarların nəzərəçarpacaq dərəcədə hamarlaşmasını təmin edir.
MSAA-dan fərqli olaraq, post-proses hamarlaşdırma üsulları (FXAA, SMAA, TAA) rasterizasiyadan sonra işləyir, yekun təsviri təhlil edir. FXAA (Fast Approximate Anti-Aliasing) təsvirin kənarlarını müəyyən edir və hamarlaşdırmaq üçün bulanıqlıq tətbiq edir, MSAA-dan əhəmiyyətli dərəcədə sürətli işləyir, lakin daha az keyfiyyətli nəticə ilə.
Müasir GPU-larda rasterizasiya ixtisaslaşdırılmış aparat blokları — ROP (Render Output Units) tərəfindən yerinə yetirilir. ROP-ların sayı birbaşa doldurma sürətinə (fill rate) — GPU-nun saniyədə emal edə biləcəyi piksellərin sayına təsir edir.
Mobil GPU-lar (Tile-Based Rendering) üçün kritik əhəmiyyət kəsb edir: erkən imtina (early-Z) vasitəsilə overdraw minimumlaşdırılması, görünməyən üçbucaqları silmək üçün back-face culling istifadəsi və digər obyektlər tərəfindən tamamilə örtülmüş üçbucaqların atılması üçün gizli səth silmə (occlusion culling).
Tez-tez verilən suallar
Rasterizasiya — üçbucaqların ekranda piksellərə çevrilməsi prosesidir. GPU üçölçülü üçbucağı götürür, ekranın hansı piksellərini örtdüyünü müəyyən edir və onları rəngləmək üçün Fragment Shader-ə ötürür.
Rasterizasiya üçbucaqları ekrana proyeksiya edir və piksel örtüyünü təyin edir (çox sürətli). Ray tracing kameradan şüalar göndərir və həndəsə ilə kəsişməni yoxlayır (fiziki cəhətdən daha dəqiq, lakin əhəmiyyətli dərəcədə yavaş).
Rasterizasiyada piksel ya tamamilə üçbucağa aiddir, ya da yox — buna görə pilləli kənarlar (aliasing) yaranır. MSAA kənarları piksel başına çoxsaylı sub-nümunələr hesabına hamarlaşdırır, FXAA isə hazır təsvirə filtr tətbiq edir.
Xeyr, rasterizasiya qrafik konveyerinin sabit mərhələsidir. Tərtibatçı alqoritmi dəyişə bilməz, ancaq parametrləri idarə edə bilər: culling, polygon offset, rasterizasiya rejimi (nöqtələr, xətlər, üçbucaqlar) və MSAA parametrləri.
Tile-Based Rendering (TBR) ekranı tayllara bölür və onları qlobal VRAM-da deyil, sürətli lokal yaddaşda emal edir. Bu, enerji istehlakını və bant genişliyini kəskin şəkildə azaldır ki, bu da batareya ilə işləyən mobil cihazlar üçün kritikdir.
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun