اگر واحد پردازش مرکزی یا پردازنده (CPU) را بهعنوان مغز کامپیوتر در نظر بگیریم که تمامی محاسبات و دستورها منطقی را مدیریت میکند، واحد پردازش گرافیکی یا پردازندهی گرافیکی (GPU) را میتوان بهعنوان واحدی برای مدیریت خروجی بصری و گرافیکی محاسبات و دستورها و اطلاعات مرتبط با تصاویر دانست که ساختار موازی آنها برای پردازش الگوریتم بلوکهای بزرگ داده، بهینهتر از واحدهای پردازش مرکزی یا همان پردازندهها عمل میکند؛ در واقع GPU، رابطی گرافیکی برای تبدیل محاسبات صورتگرفته توسط پردازنده به شکلی قابل فهم برای کاربر به حساب میآید و میتوان با اطمینان گفت هر دستگاهی که به نحوی خروجی گرافیکی را نمایش میدهد، به نوعی از پردازندهی گرافیکی مجهز است.
واحد پردازش گرافیکی در یک کامپیوتر، میتواند روی کارت گرافیک یا روی مادربرد تعبیه شده باشد یا همراه با پردازنده در تراشهی مجتمع (برای مثال APUهای AMD) عرضه شود.
تصویر سهبعدی
به تصویری که علاوه بر طول و عرض، عمق هم داشته باشد، تصویری سهبعدی گفته میشود که در مقایسه با تصاویر دوبعدی مفاهیم بیشتری را به مخاطب منتقل میکند و اطلاعات بیشتری دارد. برای مثال اگر به مثلثی نگاه کنید، تنها سه خط و سه زاویه مشاهده میکنید، اما اگر جسمی هرمیشکل داشته باشید، ساختاری سهبعدی خواهید دید که از چهار مثلث، پنج خط و شش زاویه تشکیل شده است.
گرافیک بیتمپ شده (BMP.)
گرافیک بیتمپشده یا همان گرافیک شطرنجیشده (Rasterized)، تصویری دیجیتالی است که در آن هر پیکسل با تعدادی بیت نمایش داده میشود؛ این گرافیک با تقسیم تصویر به چهارخانههای کوچک یا پیکسل ساخته میشود که هرکدام حاوی اطلاعاتی مانند کنترل شفافیت و رنگ هستند؛ بنابراین در گرافیک شطرنجی هر پیکسل مربوط به یک ارزش محاسبهشده و از پیش تعیینشده است که میتواند با دقت زیاد مشخص شود.
وضوح تصویر گرافیک شطرنجی به وضوح تصویر وابستگی دارد، بدین معنی که مقیاس تصاویر تولیدشده با این گرافیک را نمیتوان بدون از دست دادن کیفیت ظاهری، افزایش داد.
گرافیک برداری
گرافیک برداری (فرمتهای ai. یا eps. یا pdf. یا svg.) نیز تصویری است که مسیرهایی با نقطهی شروع و پایان را ایجاد میکند. این مسیرها همگی براساس عبارات ریاضی بوده و از اشکال هندسی پایهای مانند خطوط، چندضلعیها و منحنیها تشکیل شدهاند. مزیت اصلی استفاده از گرافیک برداری به جای گرافیک بیتمپ شده (شطرنجی)، توانایی آنها در مقیاسبندی بدون از دست دادن کیفیت است. مقیاس تصاویر تولیدشده با گرافیک برداری را میتوان بهراحتی، بدون افت کیفیت و به اندازهی توانایی دستگاهی که آنها را رندر میکند، افزایش داد.
همانطورکه گفته شد برخلاف گرافیکهای برداری که به کمک فرمولهای ریاضی به هر اندازه مقیاس میشوند، گرافیک بیتمپشده با مقیاسبندی کیفیت خود را از دست میدهد. پیکسلهای یک گرافیک بیتمپشده هنگام افزایش ابعاد، باید درونیابی شوند که این امر تصویر را تار میکند و هنگام کاهش ابعاد نیز باید دوباره نمونهبرداری شوند، که این کار باعث از دست دادن دادههای تصویر میشود.
بهطور کلی، گرافیکهای برداری برای خلق آثار هنری تشکیلشده از اشکال هندسی، مانند لوگو یا نقشههای دیجیتال، حروفچینی یا طراحیهای گرافیکی بهترین گزینه هستند و گرافیکهای شطرنجی نیز بیشتر با عکسها و تصاویر واقعی سروکار دارند و برای تصاویر عکاسی مناسب هستند.
از گرافیک برداری میتوان برای ساخت بنر یا لوگو استفاده کرد؛ چراکه تصاویر با این روش هم در ابعاد کوچک هم در ابعاد بزرگ با کیفیتی یکسان نمایش داده میشوند. یکی از محبوبترین برنامههایی که برای مشاهده و ایجاد تصاویر برداری استفاده میشود Adobe Illustrator است.
رندرینگ
به فرایند تولید تصاویر سهبعدی از نرمافزاری بر پایهی مدلهای محاسباتی و نمایش آن بهعنوان خروجی روی نمایشگر دو بعدی، رندرینگ (Rendering) گفته میشود.
API گرافیکی
رابط برنامهنویسی نرمافزاری (Application Programming Interface) یا API، پروتکلی برای ارتباط میان بخشهای مختلف برنامههای کامپیوتری و ابزاری مهم برای تعامل نرمافزار با سختافزار گرافیکی بهجساب میآید؛ این پروتکل ممکن است مبتنی بر وب، سیستمعامل، مرکز داده، سختافزار یا کتابخانههای نرمافزاری باشد. امروزه برای تصویرسازی و رندرینگ مدلهای سهبعدی، ابزارها و نرمافزارهای فراوانی توسعه داده شدهاند و یکی از کابردهای مهم API-های گرافیکی نیز آسانکردن فرایند تصویرسازی و رندرینگ برای توسعهدهنگان بهشمار میرود. درواقع API-های گرافیکی دسترسی مجازی به برخی پلتفرمها را برای توسعهدهندگان برنامههای گرافیکی خود و تست آنها فراهم میکنند. در ادامه برخی از شناختهشدهترین APIهای گرافیکی را معرفی میکنیم:OpenGL
OpenGL (مخفف Open Graphics Library) کتابخانهای از توابع مختلف برای ترسیم تصاویر سهبعدی است که استاندارد بین پلتفرمی و واسط برنامهنویسی کاربردی (API) برای گرافیکها و رندرهای دو بعدی و سه بعدی و شتابدهندهی گرافیکی در بازیهای ویدئویی، طراحی، واقعیت مجازی و سایر برنامهها به حساب میآید. این کتابخانه بیش از ۲۵۰ تابع فراخوانی مختلف برای ترسیم تصاویر سهبعدی دارد و در دو نوع Microsoft (اغلب در ویندوز یا نرمافزار نصب کارت گرافیک) و Cosmo (برای سیستمهایی که شتابدهندهی گرافیکی ندارند) طراحی شده است.
DirectX
مجموعهای از رابطهای برنامهنویسی کاربردی (API) که توسط مایکروسافت برای فراهمسازی امکان ارتباط دستورالعملها با سختافزارهای صوتی و تصویری توسعه داده شده است. بازیهایی که به DirectX مجهز هستند، این قابلیت را دارند که از ویژگیهای چندرسانهای و شتابدهندههای گرافیکی بهطور کارآمدتری استفاده کنند و عملکرد کلی بهبودیافتهتری داشته باشند.
زمانی که مایکروسافت در اواخر سال ۱۹۹۴، خود را برای انتشار ویندوز 95 آماده میکرد، الکس سنت جان، یکی از کارمند مایکروسافت، دربارهی توسعهی بازیهای سازگار با MS-DOS تحقیق کرد. برنامهنویسان این بازیها اغلب امکان انتقال آنها را به ویندوز 95 رد کردند و توسعهی بازیها را برای محیط ویندوز دشوار خواندند. به همین منظور تیم سهنفرهای تشکیل شد و این تیم در عرض چهار ماه توانست اولین مجموعه از رابطهای برنامهنویسی کاربردی (API) را به نام DirectX برای حل این مشکل توسعه دهد.
اولین نسخهی DirectX سپتامبر ۱۹۹۵ با عنوان Windows Games SDK منتشر شد و جایگزین Win32 برای DCI و API-های WinG برای ویندوز 3.1 بود. DirectX برای ویندوز 95 و همه نسخههای ویندوز مایکروسافت بعد از آن، امکان داد که محتوای چند رسانهای با کارایی بالا را در خود جای دهند.
مایکروسافت برای پذیرش هرچه بیشتر DirectX از سوی توسعهدهندگان، به جان کارمَک (John Carmack)، توسعهدهندهی بازیهای Doom و Doom 2 پیشنهاد داد که این دو بازی را از MS-DOS به صورت رایگان و با DirectX به ویندوز 95 منتقل و شناسه تمامی حقوق انتشار بازی را نیز حفظ کند. کارمک موافقت کرد و اولین نسخه از بازیها به نام Doom 95 در آگوست ۱۹۹۶ بهعنوان اولین بازی توسعه داده شده روی DirectX منتشر شد. DirectX 2.0 با انتشار نسخهی بعدی Windows 95 و Windows NT 4.0 در اواسط سال ۱۹۹۶ به یکی از اجزای خود ویندوز تبدیل شد.
ازآنجاکه در آن زمان ویندوز 95 هنوز در ابتدای راه خود بود و بازیهای منتشرشدهی کمی برای آن وجود داشت، مایکروسافت برای این رابط برنامهنویسی دست به تبلیغات گسترده زد و در طی رویدادی برای اولین بار Direct3D و DirectPlay را در دموی آنلاین بازی چندنفرهی MechWarrior 2 معرفی کرد. تیم توسعهدهندهی DirectX با چالش آزمایش هر نسخه از این رابط برنامهنویسی برای هر مجموعه سختافزار و نرمافزار کامپیوتر روبهرو شد و در همین راستا نیز انواع کارتهای گرافیک مختلف، کارتهای صوتی، مادربردها، پردازندهها، ورودیها، بازیها و سایر برنامههای چندرسانهای با هر نسخهی بتا و نهایی آزمایش شدند و حتی آزمایشهایی تولید و توزیع شد تا صنعت سختافزار، سازگاری طراحیهای جدید و نسخههای درایور خود با DirectX را بررسی کند.
جدیدترین نسخهی DirectX، یعنی DirectX 12 در سال ۲۰۱۴ رونمایی شد و یک سال بعد از آن نیز همراه با نسخهی ۱۰ ویندوز بهطور رسمی به بازار آمد. این API گرافیکی از آداپتور چندگانهی خاصی پشتیبانی کرده و امکان استفادهی همزمان از چند گرافیک را روی یک سیستم فراهم میکند.
قبل از DirectX، مایکروسافت OpenGL را در پلتفرم ویندوز NT خود گنجانده بود و حالا Direct3D قرار بود جایگزینی برای OpenGL تحت کنترل مایکروسافت باشد که در ابتدا روی گیمینگ متمرکز بود. در این مدت OpenGL هم توسعه داده شده بود و تکنیکهای برنامهنویسی برای برنامههای چندرسانهای تعاملی مانند بازیها را بهتر پشتیبانی میکرد، اما ازآنجاکه OpenGL در مایکروسافت توسط تیم DirectX پشتیبانی میشد، کمکم از میدان رقابت کناره گرفت.
Vulkan
Vulkan یک API گرافیکی کمهزینه و چندپلتفرمی است که برای کاربردهای گرافیکی مانند گیمینگ و تولید محتوا به کار میرود. وجه تمایز این API گرافیکی با DirectX و OpenGL، توانایی آن در رندرینگ گرافیکهای دوبعدی و مصرف برق کمتر است.
در ابتدا بسیاری تصور میکردند که Vulkan میتواند OpenGL بهبودیافتهی آینده و ادامهدهندهی مسیر آن باشد، اما گذشت زمان نشان داد که این پیشبینی درست نبود. جدول زیر تفاوتهای عملکرد این دو API گرافیکی را نشان میدهد.
API گرافیکی Mantle، رابطی ارزانقیمت برای رندر بازیهای ویدیویی سهبعدی است که اولین بار توسط AMD و شرکت تولیدکنندهی بازیهای ویدیویی DICE در سال ۲۰۱۳ طراحی شد. هدف از این مشارکت رقابت با Direct3D و OpenGL در کامپیوترهای خانگی بود، بااینحال Mantle در سال ۲۰۱۹ رسما متوقف شد و API گرافیکی Vulkan جای آن را گرفت. Mantle میتوانست بهصورت بهینه بار کاری پردازنده را کاهش داده و گرههای ایجاد شده در فرایند پردازش را از بین ببرد.
Metal
Metal رابط گرافیکی اختصاصی اپل است که مبتنی بر زبان ++C نوشته شده و اولینبار در iOS 8 بهکار گرفته شد. Metal را میتوان ترکیب رابط گرافیکی OpenGL و فریمورک OpenCL دانست که هدف از طراحی آن شبیهسازی APIهای گرافیکی دیگر پلتفرمها مانند Vulkan و DirectX 12 برای سیستمعامل iOS، Mac و tvOS بود. در سال ۲۰۱۷ دومین نسخهی API گرافیکی Metal با پشتیبانی از سیستمهای عامل macOS High Sierra، iOS 11 و tvOS 11 منتشر شد. این نسخه در مقایسه با نسخهی قبلی کارایی بالاتر و بهینهتری داشت.
GDDR چیست
به حافظهی DDR که در واحد پردازش گرافیکی قرار دارد، GDDR یا رم پردازندهی گرافیکی گفته میشود. DDR (مخفف Double Data Rate) یا نرخ انتقال دوگانه، نسخهی پیشرفتهی رم داینامیک همزمان (SDRAM) است و از فرکانسهای مشابه با آن استفاده میکند. تفاوت DDR با SDRAM در تعداد دفعات ارسال داده در هر چرخه است؛ DDR دادهها را دو بار در هر چرخه انتقال میدهد و سرعت حافظه را دو برابر میکند، درحالیکه SDRAM سیگنالها را تنها یک بار در هر چرخه ارسال میکند. DDRها خیلی سریع محبوبیت پیدا کردند، چراکه علاوه بر سرعت انتقال دوبرابری، از SDRAM ارزانتر بوده و همچنین انرژی کمتری نسبت به ماژولهای SDRAM قدیمی مصرف میکنند.
مدلسازی سه بعدی
فرایند توسعهی آرایهای مبتنی بر مختصات ریاضی از رویه یا سطح جسمی (بیجان یا جاندار) به صورت سهبعدی است که ازطریق نرمافزارهای تخصصی با دستکاری اضلاع، رئوس و چندضلعیهایی که در فضای سهبعدی شبیهسازی شدهاند، انجام میگیرد.
اجسام فیزیکی با استفاده از مجموعهای نقاط در فضای سهبعدی نشان داده میشوند که توسط عناصر هندسی مختلف مانند مثلثها، خطوط، سطوح منحنی و غیره به هم متصل میشوند. اساساً مدلهای سهبعدی در ابتدا با اتصال نقاط و تشکیل چندضلعی ایجاد میشوند. چندضلعی، ناحیهای است که از حداقل سه رأس (مثلث) تشکیل شده باشد و یکپارچگی کلی مدل و مناسب بودن آن برای استفاده در انیمیشن به ساختار این چند ضلعیها بستگی دارد.
مدلهای سهبعدی (3D) از دو روش مدلسازی چندضلعی (Vertex) و با اتصال خطوط شبکهای از بردارها یا مدلسازی منحنی (Pixel) با وزندهی به هر نقطه ساخته میشوند؛ امروزه به دلیل انعطافپذیری بیشتر و امکان رندر سریعتر فرایند مدلسازی سهبعدی در روش اول، اکثریت قریب به اتفاق مدلهای سهبعدی، به روش چندضلعی و بافتدار تولید میشوند. یکی از اصلیترین وظایف کارتهای گرافیکی نگاشت بافت (Texture Mapping) است که به یک تصویر یا مدل سهبعدی، بافت اضافه میکند. برای مثال، با اضافه کردن بافت سنگی به یک مدل آن را به تصویر سنگی واقعی شبیه میکند یا با اضافه کردن بافتی شبیه به صورت انسان، برای مدل سهبعدی اسکنشدهای، چهره طراحی میکند.
GPGPU چیست
کاربران زیادی از قابلیت پردازش موازی و سریع پردازندههای گرافیکی به نحوی سوءاستفاده کردند و پردازشهایی با امکان محاسبات موازی را بدون در نظر گرفتن وظیفهی سنتی پردازندهی گرافیکی به این واحد منتقل میکردند. GPGPU یا پردازندهی گرافیکی همهمنظوره راهکاری بود که انویدیا برای رفع این مشکل معرفی کرد.
GPGPU (مخفف General Purpose Graphics Processing Unit) همان واحد پردازش گرافیکی است که محاسبات غیرتخصصی (یا همان وظایف CPU) را نیز انجام میدهد.
در واقع GPGPUها برای انجام کارهایی که قبلاً توسط پردازندههای پرقدرت صورت میگرفتند، مانند محاسبات فیزیک، رمزگذاری/رمزگشایی، محاسبات علمی و تولید ارزهای دیجیتال مانند بیت کوین استفاده میشوند. ازآنجاکه پردازندهها گرافیکی برای موازیسازیهای عظیم ساخته شدهاند، میتوانند از بار محاسبهای که بر دوش قدرتمندترین پردازندهها است، بکاهند. یعنی همان هستههایی که برای سایهزدن چندین پیکسل بهطور همزمان به کار میروند، میتوانند بهطور مشابه چندین جریان داده را نیز به صورت همزمان پردازش کنند. البته این هستهها به اندازهی هستههای پردازنده پیچیده نیستند.