رفتن به مطلب

بررسی فنی پلتفرم دایرکت ایکس 12


Recommended Posts

بنام خدا

با سلام خدمت دوستان گل لیونی

یک مقاله تقریبا جامع و کامل گذاشتم برای دوستانی که میخوان اطلاعات بیشتری در مورد دایرکت ایکس 12 بدونن. (امیدوارم که اطلاعات کافی رو داده باشه و تکراری هم نباشه :D )

 
DirectX12.jpg

بالاخره پلتفرم یا بهتر است بگوییم API جدید DirectX 12 توسط مایکروسافت معرفی شد و همانطور که در خبر مربوط به این API گفته بودیم، قصد داریم در این بررسی به تفصیل، قابلیت های DirectX 12 مورد بررسی قرار دهیم. داستان از جایی شروع شد که کمپانی محبوب AMD در جنگ کنسول های نسل هشتمی در برابر انویدیا به برتری رسید. معماری GCN به عنوان معماری پایه سخت افزار های نسل هشتمی PS4 و Xbox One انتخاب شد و فضا برای قدرت مانور بیشتر کمپانی AMD بازتر شد. این کمپانی برای فرار از فشار سنگین انویدیا، نیاز به چند پروژه جدید داشت که کمپانی سونی و مایکروسافت، زمینه این پروژه جدید را فراهم کردند. سر انجام این کمپانی از API جدید خود تحت نام AMD API Mantle رونمایی کرد و مدعی شد به واسطه دسترسی سطح پایین این API در مقابل DirectX 3D و OpenGL، توسعه دهندگان قادرند تا 50 درصد قدرت بیشتر بدست آورند.

البته نتایج اولیه تست ها  هم گواهی بر این ادعا بود. حال آنکه این ادعا ماحصلش در سیستم های رده متوسط و ضعیف بود و تاثیر بسیار کمی در سیستم های حرفه ای و رده بالا داشت. با این حال، فناوری AMD Mantle کمپانی های مایکروسافت و انویدیا را وادار به عرضه نسخه جدیدی از API های DirectX 12 و OpenGL خواهد کرد. کما اینکه مایکروسافت با توجه به روند ساخت کنسول نسل جدید Xbox One از ندسال قبل کار بر روی DirectX 12 را آغاز کرده بود و به زودی قرار است نتیجه نهایی DirectX 12 را با اولین بازی های انحصاری Xbox One  مشاهده کنیم. اینکه API مورد استفاده ما کدام یک باشد فرقی ندارد. اما اضافه شدن رقیب قدرتمند و جدیدی به نام AMD Mantle میتواند فضای رقابتی بسیار جدی و سختی ایجاد کند که در نهایت به نفع مصرف کننده نهایی خواهد بود.

هر چند AMD اعلام کرده است که هدفش از معرفی و طراحی پلتفرم AMD Mantle رقابت با دو غول انویدیا و مایکروسافت نخواهد بود، اما به نظر نگارنده این سیاستی است برای ایجاد و زمینه سازی استفاده گسترده استدیوهای بازی سازی از این پلتفرم. کما اینکه کنسول های نسل هشتمی PS4 و Xbox One با توجه به استفاده از معماری GCN، به راحتی قادر به استفاده از AMD Mantle و DirectX 12 خواهند بود و برخلاف کمپانی سونی که در نسل قبل از OpenGL انویدیا استفاده میکرد، این نسل خبری از OpenGL نخواهد بود و قرار است از DirectX 12 و AMD Mantle در بیشتر بازی ها استفاده شود.

DirectX-12.jpg

تصویر ایجادشده توسط DirectX-12

البته کمپانی سونی تا کنون صحبت رسمی مبنی بر توقف استفاده از OpenGL نکرده است، اما گمانه زنی ها حاکی از کنار گذاشتن این پلتفرم از کنسول PS4 سونی است. در مورد پلتفرم AMD Mantle قبلا مقاله مفصلی نوشتیم و به تشریح قابلیت های کلیدی این پلتفرم پرداختیم که از اینجا میتوانید بررسی فوق را ببینید. در این بررسی فقط به بررسی نتایج اولیه تست DirectX 12 و قابلیت های موجود دراین پلتفرم میپردازیم تا با ماهیت کلی قابلیت های DirectX 12 بیشتر آشنا شویم.

چرا برنامه نویسی سطح پایین؟

یکی از دلایل مطرح شدن برنامه نویسی سطح پایین، افزایش سرعت و استفاده بهتر از قابلیت های سخت افزار پیش روی سازنده است. برنامه نویسی سطح پایین، تبدیل به یکی از داغ ترین موضوعات صنعت گرافیک کامپیوتری شده است. همانطور که گفتیم از چند ماه گذشته و با معرفی AMD Mantle بحث نسخه جدید DirectX 12 قوت گرفت که در نهایت شاهد معرفی آن در مراسم GDC 2014 بودیم. سوال اساسی این است که برنامه نویسی سطح پایین چه سودی دارد؟ پاسخ افزایش و بهبود عملکرد و به طور خاص چیزی است که میتوان از حاصل آن بدست آورد. برنامه نویسی سطح پایین نه یک چیز غیر معقول است و نه یک چیز جدید و از گذشته ای دور تابه حال بوده است. 

به لطف ثبات کنسول های نسل هشتمی تا چند سال، این مدل برنامه نویسی به موضوع اصلی نسل هشتم کنسول های بازی تبدیل شده است. این مدل برنامه نویسی سطح دسترسی بسیار زیادی به توسعه دهنده بازی خواهد داد تا بتواند قدرت پردازش بازی توسط کنسول را چندین برابر بیشتر از حالت استاندارد آن کند. به همین دلیل است که چنین سطح برنامه نویسی برای کنسول های نسل هشتمی PS4 و Xbox One مورداستفاده قرار خواهد گرفت. نمیشود گفت PC جزو این پلتفرم حساب نمیشود، پس بهتر است به PC به عنوان یکی از انعطاف پذیرترین پلتفرم های بازی نگاه کنیم که برای مدتی طولانی خارج از پلتفرم های(API) سطح بالایی همچون Direct3D و OpenGL کار میکرد. ویدئوی زیر مربوط به معرفی بازی  Forza MotorSport 5 است که توسط DirectX 12 ساخته شده است که در ادامه بیشتر در این مورد توضیح خواهیم داد. 

از طریق قدرت ارائه شده توسط این رابط های سطح بالا، کامپیوترهای شخصی (PC) برای مدت زمانی طولانی ای قادر به پشتیبانی از طیف گسترده ای از سخت افزارها بوده اند. GPU ها در سال قبل با رشد بسیار خوبی مواجه بودند، به طوریکه طی یک دهه گذشته شاهد افزایش عملکرد بسیار زیاد پردازندهای مرکزی(CPU) نبودیم، به ویژه عملکرد پردازنده های تک رشته ای. در حال حاضر پردازنده های مرکزی به جایی رسیده اند که کلاک بیشتر به معنای قیمت بیشتر و هزینه بیشتر است. چیزی که در مورد GPU صدق نمیکند. در هر حال باید گفت که پردازنده های گرافیکی(GPU) طی سالهای اخیر به سرعت به رشد فزاینده خود ادامه میدهند و در همان مسیر اصلی خودشان که رندر گرافیکی است، قدم برمیدارند. در نتیجه زمانیکه به دنبال عملکرد پردازنده های تک رشته ای هستیم، با GPU هایی برخورد میکنیم که از نظر رشد و عملکرد بسیار جلوتر و پیشرفته تز CPU ها هستند.

این مورد به خودی خود یک مشکل محسوب نمیشود، اما زمانیکه با رابط های برنامه نویسی سطح بالا بخواهیم برای گرافیک کامپیوتری برنامه نویسی انجام دهیم، به مشکل میخوریم. بخش عمده ای از کار رابط های برنامه نویسی(APIها)، آماده سازی دیتا برای پردازنده های گرافیکی(GPU) است که با توجه به ماهیت تک رشته ای خود باعث کاهش سرعت در عملکرد CPU و در نهایت ایجاد تنگنا یا سربار اضافی برای آن میشود. به عنوان یک نتیجه از این موضوع باید گفت که پتانسیل این روش برای bottlenecking یا تنگنا بسیار زیاد است و در واقع بر اساس همین عملکرد است که خلاصه قیمت این پردازنده ها مشخص میشود. پس به دلیل bottlenecking یا تنگنای بسیار زیاد است که نیاز به رابط برنامه نویسی سطح پایین احساس میشود و باید گفت که برنامه نویسی سطح پایین در برابر این نوع تنگناها(bottlenecking) بسیار مقاوم است.

مهمترین رقیب DirectX12 در حال حاضر Mantel است که میتوانید بررسی کامل سایت Guard3d در مورد پلتفرم AMD را در اینجا ببینید. همچنین ما لیستی از بازیهای هماهنگ با Mantel را گردآوری کرده ایم که میتوانید لیست فوق را در اینجا ببینید.

در مدل برنامه نویسی سطح بالا همواره به موضوعی به نام “master” نیاز داریم، از این رو احتمال تنگنا(bottlenecking) در هر “master” زیاد است، اما در برنامه نویسی سطح پایین هیچ نیازی به یک API فشرده برای CPU نخواهد بود که این مورد باعث میشود کار با هسته های چندگانه پردازنده مرکزی(CPU) بسایر راحت تر از گذشتل این روش توسعه دهنده بازی را قادر میکند تا بتوانند با پردازنده های ضعیف کنسولی، همانطوری برنامه نویسی کنند که برای پلتفرم PC برنامه نویسی میکنند که این موضوع به خودی خود باعث افزایش کارایی و عملکرد نهایی بازی میشود.

%D8%AF%D8%B3%D8%AA-%D8%B1%D8%B3%DB%8C-%D

دسترسی سطح پایین به سخت افزار

عمق Direct3D 12

Direct3D 12 توسط مایکروسافت و برای تعطلات 2015 درنظر گرفته شده است و هنوز از نسخه نهایی این پلتفرم(API) خبری نیست. به همین دلیل است که مایکروسافت اطلاعات و جزئیات کمی در باره این API منتشر کرده است. بااین حال اطلاعات فنی مناسبی منتشر شده است که امکان بررسی این API را فراهم کرده است. نمیشود انکار کرد که Direct3D 12 از هر نظر بسیار شبیه به AMD Mantle است. مایکروسافت هم همان اهداف اساسی را دنبال میکند که AMD با Mantle به دنبلاش است. پس اصلا جای تعجبی ندارد که نسخه نهایی هر دو محصول نتایج یکسانی داشته باشد.

همانند AMD Mantle، هدف نهایی Direct3D 12 هم کاهش سربار اضافی CPU و جلوگیری از تنگنا(bottlenecking) های برنامه نویسی سطح بالاست که قبلا در مقاله AMD Mantle به تفصیل در باره اش صحبت کردیم. یکی از بزرگترین منابع سربار CPU داشتن Direct3D است که لیست دستورات و بافرهای مختلف را برای GPU جمع آوری میکند. از این رو Direct3D 12 در حال حرکت به سمت برنامه نویسی سطح پایین و باز گذاشتن دست توسعه دهندگان در بهبود کارایی است. از این رو لیست دستورات و بافرها در صورتیکه دراختیار خود توسعه دهندگان بازی باشد، میتوانند آن را بین هسته های GPU به درستی توزیع کنند تا از سربار CPU جلوگیری شود. 

نکته مهم این است که ما نمیدانیم لیست دستورات و بافرهای مختلف Direct3D 12 چه چیزی است و این همان تفاوتی است که احتمالا میتواند موجب تمایز بین Direct3D 12 و AMD Mantle شود. اما در زمان حال و زمان نگارش این مقاله هم انتظار تفاوت بسیار زیادی بین این دو API رانداریم. مایکروسافت همچنین یک مفهوم مشابه را معرفی کرده است که به نوعی بسته نرم افزاری جدیدی است که قابلیت استفاده مجدد لیست دستورات را به توسعه دهنده خواهد داد. این مورد یکی از روش های صرفه جویی منابع CPU به شمار میرود که با استفاده از بسته نرم افزاری در مکان لیست دستورات مختلف باعث کاهش مقادیری میشود که CPU برای ساخت هر لیست از آن استفاده میکند.

%D8%AA%D8%B3%D8%AA-DirectX-12.jpg

تست-DirectX-12

در مورداین ایده باید گفت که این روش فقط برای یکبار استفاده ایجاد شده است و اجازه میدهد بسته نرم افزاری، چندبار با تغییراتی جزئی اجرا شود. مایکروسافت به طور خاص اشاره کرده است که کشیدن دوباره یک کاراکتر با بافت های مختلف تنها یکبار برای این ساختار استفاده میشود. تنها بازی ای که در تست های مختلف به طور کامل قادر به استفاده از این فابلیت ها بود، بازی Civilization V بود و حتی کارت های گرافیکی AMD هم به خوبی از این قابلیت ها استفاده میکنند. Direct3D 12 تکنیک جدیدی به اسم pipeline state objects را مورد استفاده قرار میدهد که موجب حذف دستورات بافرینگ میشود و این مورد در باره چگونگی معماری گرافیک های مختلف میتواند متفاوت باشد. 

در DirectX 11 مدیریت و تنظیم pipeline state ها توسط آبجکت های متفاوت انجام میشد که این مورد برای سخت افزار های کنونی اصلا مناسب نیست. به دلیل نیاز به نوع دسترسی سطح پایین به سخت افزار نیاز به تغییر این مورد بود تا از ایجاد تاخیر در بار پردازش اضاف و کاهش تعداد نرخ فریم ریت جلوگیری شود. مثلا در نسخه DirectX 11 قابلیت هایی همچون Pixel Shader State, Output Merger State و … به طور مستقل قابل تنظیم هستند که به دلیل مناسب نبودن برای سخت افزار های کنونی در نسخه جدید حذف شده اند تا از کاهش فریم ریت جلوگیری شود. 

مهمترین قابلیت های DirectX 12: 1. دسترسی سطح پایین به سخت افزار برای کد نویسی. 2. کم کردن CPU Overhead در PC های سازگار با DX12. 3. یک سری قابلیتهای جدید در رندرینگ که احتیاج به سخت افزارهای جدید دارد. برای اطلاع از CPU Overhead به اینجا بروید.

API یا پلتفرم DirectX 12 با یکپارچه سازی تمامی ویژگی های نسخه قبلی همچون pipeline state objects یا (PSO) که در ترسیم تصویر نهایی نقش مستقیم دارند مشکلات افت فریم و پردازش اضافی را حل کرده است که حاصل آن را در بازی Forza MotorSport 5 دیده ایم. این تغییر به صخت افزار اجازه میدهد تا به راحتی و به سرعت بتواند PSO ها را به دستورالعمل های سخت افزاری در هر state تبدیل کند. هر کدام از PSO ها نیز به صورت زنده (Real-Time) قابل تغییرند و برای انجام عمل نهایی بدون نیاز به واسطه هایی همچون state ها به ریجسترهای سخت افزاری داده میشوند تا بار پردازش برادری آغاز شود. این روش در نهایت باعث کاهش بار پردازش ترسیمی و افزایش تعداد فریم ریت در بازی نهایی خواهد شد. 

روش کار DirectX 11 بدین گونه بود که تمامی دستورات به صورت Immediate Context به پردازنده گرافیکی ارسال میشد و برای دست یابی به یک پردازش چند رشته ای، بازی های نیاز به state های فراوانی نیاز داشتند. حال آنکه با حذف state های مختلفی همچون Pixel Shader State, Output Merger State و … و افزودن قابلیت pipeline state objects یا (PSO) تمامی مشکلات قبلی حل شده است. به گونه ای که هر PSO خودش شامل تمامی اطلاعات ترسیمی است و لیستی از دستورات ترسیم از جمله از چه منابعی باید استفاده شود؟! از چه بافت هایی باید استفاده شود؟! از چه مقدار بافر باید استفاده شود و. … دیگر استدلال های مختلف استفاده میکند که در نهایت کار پردازش GPU را راحت کرده است. البته در این نسخه علاوه بر قابلیت های فوق دو قابلیت جدید Blend mode و Conservative Rasterization که در یکپارچه سازی سیستم رندرینگ به صورت نقش مکمل عمل میکنند. 

%D9%85%D8%B2%D8%A7%DB%8C%D8%A7%DB%8C-Dir

مزایای DirectX 12 برای پلتفرم موبایل

Direct3D 12 نیز علاوه بر خود DirectX 12 شامل ویژگی جدیدی به نام Work-Pre-Computotion است که تنها یکبار ارائه میشود و پس از هر ارائه پردازشی به GPU از بین میرود. این مدل برای ساخت و رندر نهایی یک کاراکتر بسیار ساده خواهد و فراخوانی آن نیازی به استفاده از روش Self-Contained ندارد تنها نیاز به یک بسته Character Model دارد تا توابع ترسیمی فراخوانی شوند. این روش هم موجب کاهش بار پردازشی و افزایش سرعت رندرینگ و در نهایت افزایش میزان فریم ریت در بازی های سنگین خواهد شد. البته بحث فنی و قابلیت های موجود در این نسخه بسیار فراتر و تخصصی تر این نوشته است و از حوصله این مقاله و خوانندگان عزیز هم خارج است. به همین دلیل مقدار توضیحات ارائه شده تا همین مقدار را کافی میدانیم. 

نگاهی دیگر به DirectX 12

DirectX در کل مجموعه ای از رابط های برنامه نویسی برای اجرای بهتر بازی هاست که تحت عنوان مجموعه ای به نام API عرضه میشود. این مجموعه شامل بسته های Direct3D,DirectdRAW,DirectMusic,DirectPlay و DirectSound میشود. این مجموعه از زمان ویندوز 95 تا زمان حال توسط میکروسافت پشتبانی و به روز رسانی میشود و نسخه آخر آن در تاریخ 20 مارچ 2014 و در همایش کنفرانس توسعه دهندگان بازی یا GDC معرفی شد. طبق گفته های مایکروسافت این نسخه از DirectX بسیار سریعتر از نسخه های قبلی است و تست های اولیه هم این موضوع را ثابت کرده است.

DirectX 12 تنها برای کامیوتر های شخصی طراحی نشده است و برای طیف وسیعی از پلتفرم ها، همچون تبلت ها، تلفن های همراه و حتی کنسول های نسل هشتم Xbox One و PS4 را شامل میشود و تا چند وقت دیگر هم آپدیت رسمی DirectX برای Xbox One منتشر خواهد شد. DirectX 12 بر روی 80% سخت افزار های کنونی قابل اجراست و تنها برای استفاده از چند قابلیت ویژه و جدید این پلتفرم نیاز به خرید کارت های گرافیک نسل جدید خواهد بود. طبق اطلاعات موجود اولین بازی های ساخته شده با DirectX 12 از سال 2015 وارد بازار های تجاری میشوند. اما پیش از این تریلری تکنیکی از بازی Forza MotorSport 5 در مراسم E3 2013 پخش شد که گفته میشود تصاویر گیم پلی آن توسط DirectX 12 ساخته شده است. این تصاویر را در زیر میتوانید مشاهده کنید. 

لینک دانلود:

http://guard3d.com/big-slider/4337/

 

ForzaMotorSport 5
 
سخن آخر

همانطور که در ابتدای مقاله ذکر کردیم، کمپانی AMD با استفاده از AMD API Mantle موفق به ایجاد جهشی بزرگ در صنعت گرافیک کامپیوتری شد. انویدیا و اینتل بنا بر دلایلی قدرت و معماری های اصلی گرافیک کامپیوتری را در دست دارند و در این زمینه برای عقب ماندن AMD انحصاری گری های فراوانی انجام دادند. همینطور مایکروسافت که در زمینه DirectX بسیار انحصار گرا عمل میکند. با این حال همواره شاهد ارائه نوآوری های جالبی از سمت AMD بوده ایم. نوآوری جالبی همچون Mantle که غول هایی همچون سونی، مایکروسافت و انویدیا را به تکاپو برای به روز رسانی API های خودشان کرد. تکاپویی که در نهایت به نفع صنعت گرافیک کامپیوتری و مصرف کننده نهایی خواهد بود.

تمامی کارت های گرافیکی فعلی به خوبی از قابلیت های DirectX 12 پشتیبانی میکنند. اما برخی قابلیت های ویژه و مخصوص رندرینگ در DirectX 12 وجود دارد که تنها مخصوص کارت های نسل جدید است. در رده کارت های گرافیکی کمپانی انویدیا کارت های گرافیکی همچون سری Geforce 400 (به جز 405) و سری های Geforce 400M، Geforce 500، Geforce 500M، Geforce 600، Geforce 600M، Geforce 700 و Geforce 700M در رده کارت هایی قرار میگیرند که از ویژگی های جدید موجود در DirectX 12 نمیتوانند استفاده کنند. در رده کارت های گرافیکی AMD  هم کارت های گرافیکی ای همچون HD 77xx – 79xx و HD 77xxM-79xxM از سری HD7000 و کارت های گرافیک HD8xxxG و HD8xxxD از سری HD8000 از قابلیت های جدید موجود در DirectX 12 نمیتوانند استفاده کنند.

در سری کارت های گرافیک جدیدی همچون سری R7 و R9 کارتهای گرافیکی R7 240 و R7 240 به بالا و کلیه مدلهای سری R9 از قابلیت های جدید DirectX 12 پشتیبانی نمیکنند. زیرا اکثر کارت های فوق تنها مدل های بهبود یافته مدل های گذشته ای همچون سری HD7000 , HD8000 هستند و تنها از نظر کلاک، بافر، فرکانس کاری ردازنده و دیگر قابلیت ها بهینه سازی شده اند و با قیمتی معقول در اختیار مخاطب قرار گرفته است.

منبع: guard3d

ویرایش شده توسط vampirekain
لینک به دیدگاه
Share on other sites

که البته دوستان اگه سخن آخر رو نخون بنظرم بهتر =)) (مخصوصا کسانی که کارت های سری جدید دارن)

واقعا اینکه قراره هر دفه یه بهینه سازی روی دایر انجام بشه و ما قرار باشیم هی کارت هامون رو عوض کنیم خیلی زیاد این میرسونه که این شرکت ها فقط دارن پول جمع میکنن و اصلا به فکر مصرف کننده ها نیستن با اون اعمال کثیفشون :mad:

هی میگن کارت ها از دایر12 پشتیبانی میکنن آخرشم میگه که رندرینگ های جدید رو فقط نمیکشه، خو آخه کسی نیست بشون بگه نصف امتیاز دایر 12 فقط به رندرینگش مربوط میشه نصف بقیه اش به نحوه سایه پردازی، روشنایی، تکسچر و ... ایناش ربط داره

لینک به دیدگاه
Share on other sites

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .
توجه: مطلب ارسالی شما پس از تایید مدیریت برای همه قابل رویت خواهد بود.

مهمان
ارسال پست در این تاپیک...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

 اشتراک گذاری

×
  • اضافه کردن...