در جریان برگزاری کنفرانس توسعهدهندگان بازیهای کامپیوتری (GDC) که اسفندماه سال گذشته در سنفرانسیسکوی آمریکا برگزار شد، مایکروسافت پرده از DirectX 12 برداشت و APIهای مربوط به آن را معرفی کرد. حال ردموندیها اقدام به انتشار اطلاعات بیشتری در مورد ویژگیهای رندرینگ Direct3D کردهاند که در ادامه به بررسی آنها خواهیم پرداخت.
ابتدا بهتر است نگاهی به دایرکتایکس و نقش آن در سیستمهای مبتنی بر پلتفرم مایکروسافت داشته باشیم. کمپانی مایکروسافت از سال ۱۹۹۵ میلادی اقدام به انتشار مجموعهای از APIها در قالب بستهای به نام DirectX کرد که هدف از آن مدیریت و اجرای وظایف محول شده در حوزهی مالتیمدیا است. این وظایف شامل برنامهنویسی برای بازیها، پخش ویدئو و بصورت کلی همه امور مرتبط با محتویات چندرسانهای است. همانطور که گفتیم این مجموعه شامل Direct3D، DirectDraw، DirectMusic، DirectPlay، DirectSound بههمراه شمار دیگری از APIها است که هر یک وظیفهی خاصی را برعهده دارند. باید به این نکته اشاره کرد که DirectX نهتنها در ویندوز مایکروسافت بهکار برده میشود، بلکه کنسول بازی محبوب این کمپانی، ایکسباکس نیز برپایهی این فناوری بنیان نهاده شده است.
Direct3D یکی از APIهای موجود در دایرکتایکس است که وظیفهی آن رندر تصاویر گرافیکی سهبعدی است که کاربرد گستردهای در توسعهی بازیهای کامپیوتری برای پلتفرمهایی چون ویندوز، ایکسباکس ۳۶۰ و همچنین ایکسباکس وان دارد. حال مایکروسافت در DirectX 12 بهینه سازیهایی به انجام رسانده که منجر به بالارفتن بهرهوری و بهبود هرچه بیشتر عملکرد گرافیکی پلتفرم ویندوز و همچنین ایکسباکس خواهد شد.
براساس اطلاعات منتشر شده، DirectX 12 که حاوی آخرین نسخه از Direct3D است، تمرکز بیشتری روی امکان کدنویسی در لایههای پایینتر دارد. امکان کدنویسی در سطح پایین منجر به عملکرد بهتر و بهینهی سختافزار میشود. این روش پیشتر توسط توسعهدهندگان کنسولهای بازی نیز مورد استفاده قرار میگرفت. پیشتر توسعهدهندگان کنسولهای بازی با در اختیار داشتن امکان برنامهنویسی در سطح پایین، از بهرهوری حاصل استفاده میکردند. دسترسی به سطوح پایین کدنویسی از دو بعد منجر به بهبود عملکرد سختافزار میشود؛ با استفاده از این قابلیت نیازی به درگیر شدن APIهای رده بالا نیست، همچنین استفاده از قابلیت کدنویسی در ردهی پایینتر منجر به مدیریت بهتر مالتیتردینگ (چندنخی) در پردازشهای گرافیکی میشود که ماحصل آن تسهیل اجرای چند ترد بصورت همزمان است.
اما ویژگیهای Direct3D در نسخه ی جدید فقط محدود به موارد برشمرده نبوده و مایکروسافت API خود را که وظیفهی رندرکردن تصاویر سهبعدی را برعهده دارد، همراه با قابلیتهای دیگری در بستهی DirectX قرار داده است. با توجه به معرفی نسل دوم از پردازندههای گرافیکی GeForce GTX 980 که برپایهی معماری مَکسوِل بنیان نهاده شده، مایکروسافت نیز اطلاعات بیشتری از قابلیتهای Direct3D و آنچه که در نظر دارد تا به این API اضافه کند، تشریح کرده است.
Direct3D 11.3:
مایکروسافت اعلام کرد که نسخهی بروزشدهای از Direct3D 11 را منتشر خواهد کرد که انتشار این نسخه به همراه Direct3D 12 خواهد بود. نسخهی جدید از Direct3D 11 تحت نسخهی ۱۱.۳ ارائه خواهد شد. نسخهی جدید که در ادامهی بروزرسانیهای پیشین Direct3D 11 منتشر خواهد شد، همچون نسخههای قبل از قابلیتهای جدید محصولات سختافزاری، پشتیبانی خواهد کرد.
شاید در نگاه اول این چنین بهنظر برسد که توسعهی دو نسخهی همزمان از یک API کار بیهودهای است و بهتر است مایکروسافت تمام تمرکز خود را روی توسعهی Direct3D 12 معطوف کند، اما در صورت توجه به مقاصد پشت توسعهی این دو نسخه میتوان با علت چنین کاری آشنا شد. Direct3D 12 یک API سطح پایین است که استفاده از قدرت آن کار هر کسی نیست و بکارگیری آن توسط توسعهدهندگان کمتجربه میتوان خطرناک نیز باشد. مایکروسافت مدل خاصی را برای توسعهی Direct3D 12 در نظر گرفته و آن استفادهی تعداد محدودی توسعهدهندهی کارکشته از این API برای ایجاد موتورها و رندرکنندهها است . این محصولات که شامل موتورهای بازی و انواع رندرکنندهها است، توسط سایری توسعه دهندگان مورد استفاده قرار خواهد گرفت و در واقع نیازی نیست تا تمام توسعهدهندگان با Direct3D 12 درگیر باشند. چنین قابلیتی توسط کمپانیها و تیمهایی که موتورهایی چون Unreal Engine 4 را تولید میکنند یا از وجود تیم توسعه دهندهی کارکشتهای برخوردارند، مورد استفاده قرار خواهد گرفت.
اما برای افرادی که استفاده از APIهای سطح پایین مناسب نیست، APIهایی چون انواع نسخههای Direct3D 11 وجود دارند که آخرین نسخه از آن Direct3D 11.3 است. نسخهی آخر Direct3D با پشتیبانی از آخرین قابلیتهای سختافزاری در اختیار توسعهدهندگان قرار خواهد گرفت. Direct3D 11.3 با در اختیار گذاردن امکانات سادهتر برای توسعهدهندگان امر توسعه را بسیار تسهیل میکند. Direct3D 12 را باید یک API سطح پایین و Direct3D 11 را باید یک API برای بکارگیری در سطح بالاتر و برای توسعه با روند سادهتر شناخت.
Direct3D 12:
12 Direct3D بههمراه قابلیتهای جدیدی عرضه خواهد شد، اما باید در ارائهی قابلیتهای سطح بالایی چون Feature Level که در Direct3D 11 نیز شاهد آن بودیم، API جدید را پایانی بر ارائهی این ویژگیها بدانیم. هر کارت گرافیک با توجه به توانایی پردازندهی گرافیکی موجود بخشی از دستورات نسخهی DirectX نصب شده را اجرا میکند. با انتشار Direct3D 11 ویژگی جدیدی بهنام Feature level معرفی شد که قابلیت رندرینگ را برحسب قابلیتهای پردازندهی گرافیکی میتوان انتخاب کرد. برای مثال Feature Level 9_1، قابلیتهای توسعه داده شده در Direct3D 9 را در اختیار برنامهنویس قرار میدهد. در این حالت میتوان بهترین Feature Level را برای یک سختافزار انتخاب کرده یا قابلیتهای نرمافزار را با توجه به توانایی پردازندهی گرافیکی مورد استفاده که از طریق Feature Level بهکار برده شده مشخص میشود، در اختیار کاربر قرار داد.
همانطور که گفتیم در Direct3D 12 نیز میتوان همچنان از قابلیت Feature Level استفاده کرد. این مکانیزم امکان استفاده از نسلهای مختلف پردازندههای گرافیکی را در اختیار توسعهدهندگان قرار داده است. برای مثال با استفاده از این API میتوان از پردازندههای گرافیکی مبتنی بر معماری Fermi انویدیا تا خانوادهی پردازندههای مکسول استفاده کرد. در کنار این قابلیت میتوان از ویژگیهای عرضه شده برای نسلهای جدید کارتهای گرافیک نیز استفاده کرد.
با توجه به تمام موارد فوق کاربران باید در استفاده از Direct3D 12 همچنان Feature Level را در نظر داشته باشند. پشتیبانی از Direct3D 12 توسط یک سختافزار به معنای پشتیبانی از تمام قابلیتهای موجود در این API نیست و هر نسل از کارتهای گرافیک قادرند تا میزان تعریف شدهای از قابلیتها را منطبق بر توانایی سختافزار محصول خود مورد استفاده قرار دهند.
ویژگیهای جدید Direct3D نسخهی ۱۱.۳ و ۱۲:
مایکروسافت ویژگیهای جدیدی را نیز به Direct3D نسخهی ۱۱.۳ و ۱۲ اضافه کرده است. البته باید به این نکته اشاره کرد که ردموندیهای همچنان در حال توسعهی این API هستند و لیست اطلاعات منتشر شده نشان دهنده تمام قابلیتهای Direct3D نسخهی ۱۱.۳ و ۱۲ نیست. در ادامه به بررسی چهار قابلیت جدید معرفی شده توسط مایکروسافت خواهیم پرداخت.
Typed UAV Load
اولین ویژگی جدید از Direct3D که به آن خواهیم پرداخت، Typed UAV Load نام دارد. UAV در واقع Unordered Access Views نوع مخصوصی از بافر است که دسترسی به بافر را برای چندین ترد پردازندهی گرافیکی بدون ایجاد مشکل تداخل دسترسی (Conflict) حافظه، بصورت همزمان فراهم میکند. ساختار UAVها با پیکسل شیدرها (شیدرهای پیکسل مسئول پردازش تک تک پیکسلها هستند به شکلی که بعد از پایان پردازش رنگ یک پیکسل را مشخص میکنند) تفاوت عمدهای دارد، بطوری که پیکسلشیدر قادر است با در نظر گرفتن مقصد رندرینگ، در یک مکان اقدام به نوشتن اطلاعات کند که همان پیکسل مربوطه است. Typed UAV Load با هدف بهبود و از میان بردن محدودیتهای پیشین توسعه یافته است.
Volume Tiled Resources
شاید بهتر است برای توضیح این قابلیت، به نسخههای پیشین این ویژگی تحت نام MegaTexture اشاره کنیم.مایکروسافت این قابلیت را بصورت بهینهتری توسعه داده است.
بر این اساس در صورتی که یک Tile دارای اطلاعات کاربردی به منظور ذخیرهسازی در حافظه نباشد، بصورت خودکار حذف خواهد شد. این قابلیت به موجب کاهش استفاده از حافظهی رم بسیار کاربردی است و علاوه بر استفادهی کمتر منابع، سرعت پردازش تصاویر را نیز افزایش میدهد.
Conservative Rasterization
این ویژگی برای بالا بردن صحت و دقت ترسیم اشکال در صفحهی نمایش است. با استفاده از این قابلیت توسعهدهندگان میتوانند عدم عبور یک خط از نقاط پیکسل را با دقت بالاتری متوجه شوند. معمولا در موتورهای بازی شاهد استفاده از یک تست ساده برای سنجش عبور خطوط چند ضلعیها از یک پیکسل هستیم. در این تست فقط مرکز پیکسل کنترل میشود و در صورتی که بخشی از چند ضلغی از مرکز پیسکل عبور میکرد، موتور قادر به شناسایی آن بود. Conservative Rasterization، یک روش دقیقتر و در عین حال پرهزینهتر است. با استفاده از این روش توسعهدهندگان میتوانند گوشههای پیکسل را نیز کنترل کنند. در صورتی که خط مربوط به چند ضلعی مورد نظر از مرکز پیکسلی عبور نکرده و از حاشیهی آن گذر کرده باشد، در اینصورت میتوان بهراحتی آن را یافت.
این قابلیت در مورد شناسایی تلاقی خطوط بسیار کاربردی خواهد بود.
Rasterizer Ordered Views
برای درک بهتر این قابلیت، بهتر است با شطرنجیسازی (Rasterization) آشنا شویم. به فرآیند تبدیل دادههای برداری به دادههای شطرنجی، شطرنجیسازی گفته میشود. در واقع طی این فرآیند گرافیک برداری به گرافیک شطرنجی و بهبیان بهتر پیکسل تبدیل میشود. مهمترین کاربرد شطرنجیسازی در رندرینگ رایانهای و آمادهسازی تصویر برای نمایش در نمایشگرها و چاپگرها است. با استفاده از ROV توسعهدهندگان قادرند تا ترتیب نمایش المانهای تبدیل شده به پیکسل را کنترل کنند که ماحصل آن نمایش اشکال گرافیکی با ترتیب مناسب روی نمایشگر است. همانطور که از نام این قابلیت نیز میتوان فهمید، ROV امکان کنترل ترتیب نمایش المانهای به پیکسل تبدیل شده را در اختیار توسعهدندگان قرار میدهد. این قابلیت ترسیم شکلها در صحنهها را با ترتیب درست تضمین میکند. البته عملکرد این قابلیت در گرو هماهنگی با UAV است که پیشتر به آن اشاره کردیم.
برای درک بهتر کاربرد این قابلیت بهتر است مثالی از نرمافزار فوتوشاپ و قابلیت ویرایش لایه به لایهی تصاویر در این نرمافزار بزنیم. وظیفهی این قابلیت نمایش صحیح لایههای یک تصویر در فوتوشاپ است که در صورت عدم مدیریت صحیح، شاهد نمایش نامرتب لایهها و در نتیجه به هم خوردن تصویر خواهیم بود.
Order Independent Transparency
با استفاده از این قابلیت میتوان اشیا را بدون اینکه خللی در ترتیب نمایش آنها ایجاد شود، نشان داد. برای درک بهتر این قابلیت میتوان به ویژگی Blending در فوتوشاپ اشاره کرد.برای مثال فرض کنید که روی تصویر یک گلدان، ابتدا رنگ آبی و سپس رنگ زرد را اضافه میکنید. در صورتی که این یکبار دیگر ابتدا رنگ زرد و سپس آبی را اضافه کنید، باید نتیجهی کار در دو حالت یکسان باشد. بعضا در جریان تولید محتوای گرافیکی، شاهد این هستیم نتیجهی این ترکیبها یکسان نیست و از اینرو باید این موارد را با استفاده از OIT مدیریت کرد. دایرکت ایکس ۱۱ دارای این ویژگی است، اما مشکل این قابلیت در نسخههای پیشین، سرعت پایین در پردازش این تصاویر بود. سرعت پایین در پردازش این ویژگی، چندان باب طبع توسعهدهندگان بازی نیست، از اینرو این قابلیت میتواند کمک شایانی به توسعهدهندگان بازیها کند.
سخن آخر
با معرفی Direct3D 11.3 و قابلیتهای جدید ارائه شده بههمراه این نسخه، مایکروسافت نقشهی راه خود را برای تغییرات انجام شده در این ماژول و همچنین سختافزار پشتیبانی شده ترسیم کرد. ردموندیها با معرفی Direct3D 11.3 به یکی از مهمترین سوالات در مورد پشتیبانی از نسخهی یازدهم دایرکت ایکس در کنار معرفی نسخه ی ۱۲ پاسخ داد. براساس اطلاعات منتشر شده، Direct3D سال ۲۰۱۵ میلادی منتشر خواهد شد که انتظار میرود قابلیتهای آن با موارد اشاره شده تفاوت آنچنانی نداشته باشد.