Rasterization — فرآیند تبدیل توصیف برداری از اولیههای سهبعدی (مثلثها، خطوط، نقاط) به مجموعهای از پیکسلها (قطعات) برای نمایش روی صفحه است. به گزارش Khronos Group, 2025، رسترایزیشن یک مرحله خودکار (غیرقابل برنامهنویسی) از خط لوله گرافیک است که بین Vertex Shader و Fragment Shader قرار دارد. Rasterization تعیین میکند که کدام پیکسلهای صفحه به کدام مثلث تعلق دارند و ویژگیهای درونیابی شده را برای هر قطعه محاسبه میکند.
نکات اصلی
Rasterization — مرحلهای از خط لوله گرافیک است که اولیههای هندسی (مثلثها، خطوط) را به مجموعهای از قطعات برای پردازش بعدی توسط Fragment Shader تبدیل میکند. دادههای ورودی — رئوس مثلث در مختصات صفحه و ویژگیهای آنها (رنگ، نرمالها، UV). خروجی — مجموعه قطعات با ویژگیهای درونیابی شده.
برخلاف شیدرهای قابل برنامهنویسی (Vertex و Fragment Shader)، رسترایزیشن یک مرحله ثابت (غیرقابل برنامهنویسی) است. توسعهدهنده نمیتواند الگوریتم رسترایزیشن را تغییر دهد، اما میتواند پارامترهای آن را مدیریت کند: حالت برش (culling)، عرض خط، جابجایی عمق (polygon offset) و چندنمونهگیری.
تقریباً تمام گرافیک مدرن بلادرنگ — بازیها، 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-functions و bounding box | پارامترهای رسترایزیشن |
| Fragment generation | بررسی پوشش و درونیابی | قطعات + ویژگیها |
Rasterization میتواند با الگوریتمهای مختلفی پیادهسازی شود که هر کدام مصالحههای خاص خود را بین عملکرد و کیفیت دارند. 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) استفاده میکنند. صفحه به tileهای کوچک (16×16 یا 32×32 پیکسل) تقسیم میشود و رسترایزیشن برای هر tile به طور جداگانه انجام میشود. این کار تعداد مراجعات به حافظه ویدئویی را با ذخیره بافر فریم در حافظه محلی سریع (tile memory) به حداقل میرساند. TBR مصرف انرژی را کاهش میدهد که برای دستگاههای موبایل حیاتی است.
Rasterization و ray tracing — دو رویکرد اساساً متفاوت برای رندرینگ گرافیک سهبعدی هستند. رسترایزیشن در برنامههای بلادرنگ غالب است، ray tracing — در رندرینگ آفلاین و به تدریج به بلادرنگ (در GPUهای سازگار با RTX) نفوذ میکند.
| پارامتر | 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 منتقل میکند.
رسترایزیشن مثلثها را روی صفحه پروجکت میکند و پوشش پیکسلها را تعیین میکند (بسیار سریع). Ray tracing پرتوهایی از دوربین میفرستد و برخورد با هندسه را بررسی میکند (از نظر فیزیکی دقیقتر اما به طور قابل توجهی کندتر).
در رسترایزیشن، پیکسل یا کاملاً به مثلث تعلق دارد یا نه — از این رو لبههای پلهای (aliasing). MSAA لبهها را با زیرنمونههای متعدد در هر پیکسل صاف میکند و FXAA فیلتری را به تصویر نهایی اعمال میکند.
خیر، رسترایزیشن یک مرحله ثابت خط لوله گرافیک است. توسعهدهنده نمیتواند الگوریتم را تغییر دهد، اما میتواند تنظیمات را مدیریت کند: culling، polygon offset، حالت رسترایزیشن (نقاط، خطوط، مثلثها) و پارامترهای MSAA.
Tile-Based Rendering (TBR) صفحه را به tileها تقسیم کرده و آنها را در حافظه محلی سریع پردازش میکند، نه در VRAM جهانی. این کار مصرف انرژی و پهنای باند را به شدت کاهش میدهد که برای دستگاههای موبایل با باتری حیاتی است.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید