اگر به کنفرانس GDC سال 2014 برگردیم، به یاد می آوریم که مایکروسافت و شرکای سخت افزاری آن برای اولین بار خبر از تکرار کامل رابط برنامه نویسی کاربردی Direct3D داده بودند. حالا در نسخه 12 ، یعنی آخرین نسخه Direct3D روی برنامه نویسی گرافیکی سطح پایین متمرکز شده که این کار منجر به عملکرد و بهره وری بیشتر مخصوصا در کنسول های بازی خواهد شد. دسترسی سطح پایین به دو صورت ویژه باعث بهبود عملکرد می شود. این بهبودها در مورد اول از طریق کاهش API های سطح بالای متحمل شده و در مورد دوم با اجازه دادن به توسعه دهندگان برای بکارگیری بهتر از قابلیت چند رشته ای (Multi Threading) با ساده سازی فرآیند ارائه چند رشته ای، فراهم می شوند. البته مایکروسافت به صورت تلویحی به این موضوع نیز اشاره داشت که ویژگیهای جدید دیگری نیز وجود دارد اما عمده موضوعی که روی آن متمرکز شده اند برنامه نویسی سطح پایین در این نسخه جدید می باشد. بعد از اینکه شرکت انویدیا نسل دوم کارت گرافیک های مبتنی بر Maxwell را معرفی کرد، مایکروسافت با برگزاری جلسه مطبوعاتی کمی در مورد برنامه های خود درباره Direct3D صحبت کرد.
Direct3D 11.3
اولین و مهمترین نکته این بود که مایکروسافت خبر از وجود نسخه جدیدی از Direct3D 11 همزمان با معرفی نسخه 12 آن داد. Direct3D 11.3 نسخه جدیدی است که در ادامه تکامل و توسعه API نسخه 11 ارائه شده و همانند بروز رسانی های گذشته از API های جدید برای پشتیبانی از سخت افزارهای جدید بهره مند شده است. در نگاه اول خبر معرفی نسخه 11.3 از سوی مایکروسافت درحالیکه قرار بود نسخه 12 را معرفی کند، عجیب به نظر می رسد اما در واقعیت نکات مهمی در این اطلاعیه نهفته است. نسخه 12 Direct3D یک API سطح پایین و قدرتمند است ولی کنترل و مدیریت آن دشوار و حتی خطرناک است مخصوصا اگر به دست برنامه نویسان کم تجربه بیافتد. در این مدل توسعه یافته (نسخه 11.3) از تعداد کدهای محدود استفاده شده و این درحالی است که همه می توانند از آن استفاده کنند. با توجه به این دلیل می توان گفت API سطح پایین برای همه مناسب نیست. وجود API های سطح بالایی همانند Direct3D 11 بی دلیل نبوده، انتزاع آنها نه تنها تغییرات ناگهانی زیربنایی سخت افزاری را مخفی می کند بلکه توسعه آسانتر و دسترسی بیشتر نیز از ویژگی بارز آنهاست. بنابراین نیاز به وجود چیزی که هم بتواند API های سطح بالا و هم سطح پایین را ارائه دهد، کاملا احساس می شد.
Direct3D 12
معرفی نسخه Direct3D 11.3 و ویژگیهای جدید آن که در مواردی با نسخه 12 مشترک است، به طور یقین بر روی Direct3D 12 تاثیر گذار خواهد بود. باید به این نکته اشاره کنیم که نسخه 12 قصد دارد به API های سازگار با نسل های مختلف (مثل نسخه 11) خاتمه دهد. مایکروسافت در Direct3D 11 سطوحی از قابلیت را ارائه کرده بود که به برنامه نویسان اجازه می داد با همان API، نسل های مختلف سخت افزاری را هدف قرار دهند. (به جای اینکه مجبور باشند چندبار کدهای متفاوت را برای نسل های مختلف بنویسند) در عمل این بدان معناست که برنامه نویسان می توانند برای نسخه های 9، 10 و 11 از همان API های Direct3D 11 استفاده کرده اما مشکل اینجا بود که آنها مجبور بودند خود را محدود به مواردی جهت ایجاد سازگاری بین سخت افزارهای مختلف کنند. Direct3D 12 علاوه بر اینکه از همین سطوح قابلیت بهره برده، به توسعه دهندگان اجازه می دهد درکنار قابلیت هدف قرار دادن سخت افزار های مختلف از مزایای API سطح پایین برخوردار شوند. از طریق این مکانیسم است که Direct3D 12 قابل استفاده در پردازنده های متنوع انویدیا از خانواده قدیمی Femi گرفته تا جدیدتربن عضو یعنی Maxwell بوده و این درحالی است که می توان از تمام ویژگیهای جدید اضافه شده به نسل های جدید هم بهره مند شد. درنهایت برای کاربران این بدان معنی است که آنها باید نسبت به سطوح قابلیت ها هوشیار باشند. البته سازگاری سخت افزارها با Direct3D 12 به معنای پشتیبانی 100 درصدی از تمام ویژگیهای جدید معرفی شده نیست. موضوع سازگاری ویژگیهای جدید با نسل های سخت افزاری داستانی است که همچنان ادامه خواهد داشت و فقط باید در این مسیر مهم روبه جلو حرکت کرد.
ویژگیهای جدید Direct3D 11.3 و Direct3D 12
با متمرکز شدن بر روی معرفی صورت گرفته توسط مایکروسافت، در این قسمت می خواهیم به مشخصه های جدید اضافه شده در Direct3D 11.3 و Direct3D 12 اشاره کنیم. البته توجه داشته باشید که ویژگیهای نامبرده شده در این قسمت فقط برخی از موارد مهم است که مایکروسافت رسما اعلام کرده و قطعا به مرور شاهد مشخص شدن جزئیات بیشتری خواهیم بود. (برخی از موارد همچنان مراحل تکامل و توسعه را طی می کنند). پس در ادامه به تعدادی از مهمترین قابلیت ها اشاره خواهد شد.
ارائه نمایش های منظم (Rasterizer Ordered Views)
اولین و مهمترین ویژگی جدید که قرار است درباره آن صحبت کنیم، ارائه نمایش های منظم است (ROV) . طبق تعریف مایکروسافت Rasterizer به معنی تعیین چگونگی ارائه داده های سه بعدی مثل مکان، رنگ و بافت آنها در سطوح دو بعدی است. همانطورکه در اسم این ویژگی به آن اشاره شده، ROV به توسعه دهندگان اجازه کنترل اجزاء را جهت ارائه در تصاویر می دهد بنابراین اجزاء به صورت منظم در محل های مورد نظر نمایش داده می شوند. این مشخصه به طور ویژه برای نمایش دسترسی نامنظم (UAV) به کاربرده می شود. در واقع ROV ها جایگزینی را برای ماهیت نامنظم UAV ها ارائه می کنند که نتیجه آن اجزاء منظم شده در تصویر است. برای اکثر کارهای رندرینگ ارائه های نامنظم کفایت می کند اما در بعضی موارد خاص توانایی کنترل دسترسی منظم به UAV می تواند از جنبه رندر صحیح و سریع اهمیت داشته باشد.
بارگذاری نوع UAV
دومین ویژگی که با Direct3D همراه شده، بارگذاری نوع UAV است. نمایش دسترسی نامنظم (UAV) نوع خاصی از بافر است که به رشته های متعدد پردازنده گرافیکی اجازه دسترسی همزمان به آن بافر را بدون ایجاد حافظه متضاد می دهد. به دلیل این ماهیت نامنظم UAV ها، در محل هایی که بارگذاری نوع UAV آدرس دهی می شود، محدودیت های معینی وجود دارد. همانطورکه به طور تلویحی از نام آن مشخص است، بارگذاری نوع UAV با مواردیکه UAV ها از جنس داده هستند، سروکار دارد و چگونگی کاربرد بهتر آنها را مدیریت می کند.
منابع اجزاء حجمی (Volume Tiled Resources)
سومین ویژگی که به همراه Direct3D ارائه شده، منابع اجزاء حجمی (VTR) است. این مشخصه حاصل کار مایکروسافت و شرکایش می باشد که قبلا منجر به تولید منابع اجزاء شده بود و حالا با توسعه آن در بعد سوم، منابع اجزاء حجمی VTR را ایجاد نموده اند. VTR ها در درجه اول برای استفاده همراه پیکسل های حجمی (voxels) ایجاد شده اند. این ایده به منظور کاهش فضای اختصاص داده شده بوجود آمده و بر اساس آن می توان از اشغال فضای اجزاء حجمی که هیچ اطلاعت مفیدی در آنها وجود ندارد، جلوگیری کرد یعنی اجزائی که هیچ استفاده ای از آنها نمی شود عملا فضایی را در حافظه رم به خود اختصاص نخواهند داد.
تعیین مکان محافظه کارانه تصویر (Conservative Rasterization)
آخرین ویژگی که قرار است درباره اش صحبت کنیم تعیین مکان محافظه کارانه تصویر است. این مشخصه به طور خاص یک روش دقیق ولی با بارپردازشی بالاتر است برای سنجش اینکه آیا چند ضلعی بخشی از پیکسل ها را پوشش می دهد یا نه. به جای انجام یک آزمون سریع و ساده برای پی بردن به این که مرکز یک پیکسل توسط خطوط چندضلعی احاطه شده اند، تعیین مکان محافظه کارانه تصویر گوشه های آن چندضلعی را مورد بررسی قرار می دهد. در این ویژگی اعتقاد بر این است که چندضلعی برای پوشش دادن مرکز یک پیکسل بسیار کوچک است و برای بدست آوردن نتیجه ای به مراتب دقیقتر بهتر است پیکسلی را شناسایی کرد که چندضلعی در آن قرار گرفته است. اصطلاح محافظه کارانه بودن این تعیین مکان به همین دلیل انتخاب شده است. این ویژگی جدید به این دلیل به Direct3D اضافه شده تا اجازه استفاده از الگوریتم های جدید را که احتمال شکست خوردن آنها تحت ماهیت نادرست نمونه برداری نقطه ای وجود داشت، بدهد.
کلام آخر
در مجموع خبر ارائه Direct3D 11.3 و قابلیت های جدید آن، نقشه راه قابل اطمینانی را در جهت تکامل Direct3D و سخت افزارهایی که از آن پشتیبانی خواهند کرد، ارائه می کند. با این کار مایکروسافت به نحوی ادامه کارش بر روی Direct3D 11 را تائید کرده و هم پاسخی قانع کننده به سوالاتی پیرامون دلیل دیرکرد ارائه نسخه 12 داده است. این موضوع، قابلیت های سخت افزاری که نسل بعدی سخت افزارها به منظور پشتیبانی جهت انطباق با آخرین سطح قابلیت های D3D به آنها نیاز دارند را برجسته می کند. سال آینده با انتشار Direct3D 12 دسترسی به قابلیت های به مراتب بهتر دور از دست نخواهد بود.
ممنونم دوست خوبم از اطلاعات کاربردی.
درود بر شما ای کاش لینک منبع هم میدادید ولی مشکلی نیست گوگل میکنم :p میخواستم این هم اضافه کنم که برنامه نویس ها منظور برنامه نویس ها موتور های بازی هستند اون ها موتو بازیشون را هماهنگ میکنند با این تکنلوژی بعد به مشتری هایی که بازی با اون انجین میسازند میدهند و راه کار را برایشان ساده میکنند البته شرکت های بازی های بزرگ خودشان با اون شرکت در ارتباط هستند و میتوانند موتور را تغییر دهند ولی به طور کلی کسی نمی تواند وارد هسته موتور شه و تغییرش بده بودن اجازه شرکت یک سر به Unreal Engine 4 بزندی مثلا خود شرکت epic ویژگی پوست را در نسخه 4.5 اضافه کرده من به عنوان کاربر نمیتوانم برم اون کد های ساخت پوست را تغییر بدم مگر اینکه شرکت اجازه بده یا اگر هم بخوام این کار را بکنم کلا انجین خراب میشه در آخر این تکنلوژی ها مشکلی نخواهند داشت و آرام آرام وارد می شوند.
واقعیت در تئوری که پشتیبانی می کند دوست خوبم اما باید دید در زمان عرضه نسخه ویندوز ده با DX12 این موضوع تا چه حدی عملی خواهد شد. فعلا نظر خاصی نمی توان داد.
با سلام آیا کارت گرافیک amd r9270x از تمام قابلیت های dx12 پشتیبانی می کند منظورم همان رندرینگ های جدید وپشرفته
عالیییییییییییییییییییییییییییییییییییییییییی