تکنولوژی DirectX حدود 25 سال با ما بوده و ابزارهایی را برای ساخت بازیهای باورنکردنی در اختیار توسعه دهندگان قرار داده است. آخرین نسخه DirectX، یعنی DX12 در سال 2015 منتشر شد اما در چند سال گذشته، مایکروسافت این کتابخانه نرمافزار را برای پشتیبانی از رهگیری پرتو، یادگیری ماشین و مدیریت دادهها گسترش داده است.
عناوین بزرگ نسل جدید مانند Cyberpunk 2077 ، Far Cry 6 و Watch Dogs: Legion از برخی از ویژگیهای جدید DirectX 12 استفاده میکنند. اما این ویژگیها دقیقاً چه هستند؟ این پیشرفتها چه کاری میتوانند انجام دهند و چگونه بازیها را برای همه ما بهتر میکنند؟ در این مقاله از اگزوگیم به همه این سؤالات پاسخ خواهیم داد.
دایرکت ایکس 12 دقیقاً چیست؟
بیایید با توضیح سریع آنچه DirectX است، شروع کنیم. از هر بازی مدرنی استفاده کنید، چه یکی از جدیدترین عناوین پرفروش و چه یک عنوان کوچک و مستقل، متوجه خواهید شد که کدهای این بازیها به زبان عمومی مثل C++ نوشته شدهاند. تمام مکانیکهای گرافیکی، صوتی، و گیم پلی بازی با هزاران یا میلیونها خط دستورالعمل نوشته میشوند (این دادهها را بگیرید، آنها را با آن داده ضرب کنید، نتیجه را در اینجا قرار دهید و ...)
اما بسیاری از این کارها و کدهای لازم، بدون توجه به بازی و پلتفرم مشترک خواهند بود؛ بنابراین مایکروسافت برای آسان ساختن روند ساخت یک بازی، مجموعهای از APIهای سطح پایین را در سال 1995 ایجاد کرد. (API مخفف عبارت Application Programming Interface است که به صورت تحتاللفظی میتوان آن را به «رابط برنامهنویسی نرمافزار» ترجمه کرد) این مجموعه را به عنوان یک کتابخانه عظیم از کتابها در نظر بگیرید که در آنها انواع قوانین و ساختارها در مورد چگونگی صدور دستورالعملهای مختلف تنظیم شده است. در واقع DirectX شامل دستورالعملها، انواع دادههای مورد نیاز بازی سازان و همچنین ارائه دستورات ساده شده است که میتواند به جای کدهای بسیار زیاد استفاده شود.
بخشی از کوه فایلهایی که DirectX را تشکیل میدهند!
DirectX درواقع APIها را برای گرافیک، صدا، ویدئو، موسیقی و دستگاههای ورودی (تقریباً تمام آنچه برای اجرای یک بازی در رایانه شخصی نیاز خواهید داشت.) فراهم میکند. درایورهای دستگاههایی که این توابع چندرسانهای را تولید یا از آنها استفاده میکنند، دستورالعملهای تعریف شده را با کمک API ترجمه میکنند و آنها را به کدهایی تبدیل میکنند که سختافزار قادر به درکشان باشد. (به طور سادهتر: در ابتدا توابع خاصی برای راحتی بیشتر بازیسازان نوشته میشود. مثلاً پخش موسیقی، استفاده از کنترلر، یا ایجاد یک افکت را در نظر بگیرید؛ بازیساز برای انجام این کارها بدون کمک DirectX باید کدهای بسیاری را بنویسد که کار برایش بسیار سخت میشود اما با DirectX تعداد این کدها بسیار کمتر میشود و هر بخشی که در انبار عظیم DirectX موجود باشد، تنها با چند خط کد فراخانی و استفاده میشود.)
مایکروسافت طی 25 سال گذشته به طور مداوم این کتابخانه عظیم را به روز کرده و همچنان این روند ادامه دارد. آخرین نسخه آن با نام DirectX 12 ، هنگام عرضه ویندوز 10 در اواخر جولای 2015 در معرض دید عموم قرار گرفت و همانطور که قبلاً ذکر کردیم، طی چند بهروزرسانی، موارد جدیدی به آن اضافه شد.
DirectX Raytracing
اولین مورد اضافه شده به مجموعه DirectX 12 ، یک ساختار نرمافزاری برای رهگیری پرتو بود که از زمان انتشارش تعجبها و البته انتقادات زیادی را در پی داشت.
درواقغ DirectX Raytracing (ابزار استفاده از رهگیری پرتو) اولین بار در اواخر سال 2018 چشم به جهان گشود و در حال حاضر علاوه بر انویدیا، دو شرکت AMD و اینتل هم از آن پشتیبانی میکنند.
انویدیا با پردازنده گرافیکی بر پایه معماری ولتا، اولین کمپانیای بود که پشتیبانی از رهگیری پرتو را ارائه داد اما این تراشهها از ویژگی خاصی برای کنترل رهگیری پرتو برخوردار نبودند. این امر با عرضه کارتهای گرافیک GeForce RTX مجهز به معماری تورینگ در سپتامبر 2018 تغییر کرد و تیم بازاریابی انویدیا RTX را به عنوان گام بعدی در تکامل گرافیک معرفی کرد.
شرکت AMD هم در نوامبر سال 2020 با معرفی معماری RDNA 2 (همان معماریای که در پردازندههای گرافیکی سری Radeon RX 6000 و کنسولهای Xbox S X / S و PlayStation 5 از آن استفاده میشود) پشتیبانی از رهگیری پرتو را به پردازندههای گرافیکیاش افزود.
برای دههها، بازیهای سه بعدی از تکنیکهای مختلفی برای شبیه سازی نحوه نمایش رنگ و روشنایی یک جسم، بر اساس تأثیر منابع نور و سایهها استفاده میکردند. پیش نمایش نحوه تعامل نور هنگام برخورد با سطوح مختلف، تنها با چند ترفند انجام میشد و پیاده سازی این ترفندها هم سخت و پیچیده بود. رهگیری پرتو با دنبال کردن مسیر پرتوی نور و دیدن اینکه نور با چه اشیاءی برخورد دارد، کار میکند. سپس بر اساس اطلاعات مربوط به آن، سطح، رنگ، و شدت نور بازتاب شده از آن سطح محاسبه میشوند.
پرتو ممکن است منعکس، جذب یا شکسته شود (یعنی عبور میکند، اما در یک زاویه متفاوت قرار میگیرد) و این روند میتواند با دنبال کردن پرتو ادامه یابد زیرا پس از هر برخورد در صورت جذب نشدن کمانه میکند. با سختافزار امروزی، انجام این کار برای یک پرتو چندان دشوار نیست اما برای تولید نتایجی نزدیک به واقعیت هر پیکسل از هر فریم حداقل به یک پرتو نیاز دارد تا منتشر و ردیابی شود.
اگر وضوح تصویر این فریم 1920 x 1080 پیکسل باشد، این امر منجر به کمی بیش از 2 میلیون پرتو خواهد شد. پردازش این حجم از پرتوها کار کمی نیست، بنابراین تولید کنندگان همه تلاش خود را میکنند تا به تسریع این پردازشها کمک کنند.
رهگیری پرتو کار سختی است، حتی در بازیهای سادهای مانند Minecraft
برای تسریع روند رهگیری پرتو در صحنهها، تکنیکهای مختلفی وجود دارد که ساختارهای شتابدهنده نامیده میشوند. DXR (مخفف DirectX Raytracing) قوانین کلی پشت این ساختارها را تنظیم و آنها را به دو نوع تقسیم میکند: سطح پایین و سطح بالا. ساختارهای شتابدهنده سطح پایین (به اختصار BLAS) حاوی دادههایی در مورد اشکال اولیه است؛ اشکالی که برای ایجاد محیط استفاده میشوند.
تنظیم هر BLAS به زمان نیاز دارد، اما آنها یک سیستم سریع برای بررسی تعامل یا عدم تأثیر پرتو بر یک جسم را فراهم میکنند. با این حال، پیادهسازی همه تفاوتهای BLAS برای هر فریم جدید بسیار وقت گیر است و اینجاست که سطح بالای شتابدهندهها (TLAS) وارد عمل میشود.
درواقغ TLAS به جای اینکه حاوی تمام اطلاعات هندسی اشکال باشد، حاوی اشاره گرها (ارجاعات به یک یا چند BLAS خاص) یا نمونهها (چندین مراجعه به همان BLAS) است. TLAS همچنین حاوی دادههایی در مورد چگونگی تبدیل اشکال اولیه در BLAS (به عنوان مثال جابهجایی، چرخش، مقیاس بندی) و سایر جنبهها، مانند خصوصیات ماده اولیه (به عنوان مثال شفافیت) است. شاید در نگاه اول درک BLAS و TLAS کمی سخت بنظر برسد اما به طور خلاصه BLAS را سطحی فرض کنید که در آن اشکال اولیه موجود در تصویر و خاصیتهای مختلف آن ذخیره میشوند و TLAS شامل یک یا چند BLAS است.
ساختارهای سطح بالا (TLAS) بسیار سریع ساخته میشوند، انعطاف پذیری و استفاده مجدد از اشکال را بهبود میبخشند، اما استفاده بیش از حد از آن میتواند عملکرد را تحت تأثیر قرار دهد. برای بهترین عملکرد، ساختارهای سطح پایین (BLAS) باید تا آنجا که ممکن است همپوشانی داشته باشند. درواقع DXR مشخص نمیکند که از چه روشی برای ایجاد ساختارهای شتابدهنده استفاده شود و این کار را به سختافزار / درایور میسپارد تا دستورالعملهای API را برای ساخت آنها تفسیر کند.
مجموعهای از اشکال اولیه و حجمهای محدود کننده آنها (بالا) و سلسله مراتب مرتبط (پایین)
دو شرکت AMD و Nvidia از فناوری BVH یا (Bounding Volume Hierarchy) هم برای بهبود عملکرد رهگیری پرتو استفاده استفاده میکنند و اینها کاملاً توسط GPU مدیریت میشوند. چرا؟ از آنجا که پردازندههای آنها شامل مدارهای ویژهای برای پردازش چنین ساختارهایی است (که به آن BVH traversal میگویند) و در نهایت باعث سرعت بخشیدن به روند تعیین اینکه آیا یک پرتو در جایی نزدیک به محل مشخص قرار دارد یا خیر، میشود.
اگر برایتان سؤال شده که BVH دقیقاً چیست و به چه کار میآید، باید بدانید که بخش بزرگی از سختافزار به حل اساسیترین مشکل رهگیری پرتو یعنی اینکه چگونه متوجه شویم که یک پرتو با چه چیزی در ارتباط است، رسیدگی خواهد کرد. رایجترین راه حل برای این مشکل ذخیره کردن مثلثها در یک ساختار داده مناسب برای Ray Tracing خواهد بود. این ساختار داده با عنوان Bounding Volume Hierarchy یا به اختصار BVH شناخته میشود.
در حقیقت، به جای تست همه چند ضلعیها برای دیدن اینکه آیا یک پرتو با آن ارتباط برقرار میکند یا خیر، بخشی از یک صحنه مورد آزمایش قرار میگیرد تا داشتن یا نداشتن تعامل پرتو با آن مشخص شود، سپس این کار ادامه خواهد یافت. اگر تعاملی از پرتو با آن قسمت از صحنه مشاهده شود، دوباره آن را به بخشهای کوچکتر تقسیم میکنند و مورد آزمایش قرار میدهند. این کار همینطور ادامه خواهد یافت تا جایی که آن چند ضلعی منحصر به فرد برای بررسی پرتو شناسایی شود.
در BVH یک درخت ساختار داده با زیربخشهای مختلف تشکیل شده است که هر کدام از این زیربخشها به عنوان فرزندان زیربخش مادر خود قرار گرفتهاند. نکته مهم در خصوص BVH این مسئله است که با وجود کاهش میزان تقسیم شدن پرتو مورد نیاز نسبت به رویکرد سادهسازی، با این حال هنوز پردازش سنگینی محسوب میشود و باید آزمون و خطا زیادی جهت تشخیص چندضلعی اصلی انجام شود.
تمام این فرایند که گفته شد، تنها برای یک پرتو صورت میگیرد. این در حالی است که برای هر پیکسل به تعداد قابل توجهی از پرتوها نیاز است، به همین خاطر شتابدهندههای سختافزاری (هستههای RT) برای تسهیل فرایند مورد نظر نقشی مهمی را ایفا میکنند. البته ساختار دادهها (BVH) نیز از قبل به صورت آماده در دسترس نیستند و خود این بخش هم برای پیکربندی نیاز به هزینه محاسباتی زیادی دارد.
پایپلاین یا خط لوله DXR در ابتدا نیاز دارد که BLAS / TLAS ایجاد شود و سپس برای هر پیکسل در فریم، نیازمند یک Shader برای تولید یک پرتو است. این Shader سپس از ساختار شتابدهنده برای تعیین اینکه آیا مستقیماً به یک سطح برخورد میکند یا خیر، استفاده میکند.
نتیجه بررسی تقاطع پرتو ابتدایی بستگی به این دارد که چه دستورالعملی برایش کدنویسی شده است. برای اجرا میتوان یک یا چند Shader (سایه زن) زیر را ساخت:
- Hit shader
- Any-hit shader
- Closest-hit shader
- Miss shader
اولین و آخرین مورد واضح هستند: اگر پرتوی به یکشکل اولیه برخورد (Hit)، یا آن را رد (Miss) کند، Shader رنگ خاص یا حتی پرتو دیگری را بر میگرداند. در صورت انفجار پرتو Any-hit Shader میتواند فعال شود که برای بررسی برخورد پرتو با سطوح شفاف مانند آب یا شیشه مفید است. Closest-hit هم روال را بر اساس این که کدام شکل ابتدایی به پرتو نزدیکتر است، مشخص میکند و میتواند برای تعیین رنگ سایه استفاده شود.
این چرخه تولید یک پرتو، بررسی یک تقاطع و کشف رنگ آن میتواند هر چند بار که نیاز باشد تکرار شود تا نتایج واقعیتری حاصل شود. پردازش همه این میلیونها پرتو کوچک، تأثیر بسیار زیادی بر عملکرد خود بازی دارد.
بنابراین بیشتر پیاده سازیهای DXR شامل یک رویکرد ترکیبی است: از گرافیکهای Direct3D معمولی و پایپلاین محاسبه برای ایجاد صحنه، استفاده از بافتها، نورپردازی عمومی و جلوههای پس از پردازش استفاده کنید و برای موارد بسیار خاص مانند بازتابها یا سایهها به پایپلاین DXR بروید.
تکنیک متداول دیگری که برای کم کردن تأثیر رهگیری پرتو بر عملکرد تا حد ممکن استفاده میشود، محدود کردن تعداد پرتوهای موجود است - معمولاً با استفاده از یک پرتو در هر بلوک پیکسل، به جای یک پرتو در هر پیکسل یا فقط رهگیری بازتاب اولیه و در نظر نگرفتن سایر انعکاسها، انجام میشود.
نکته منفی استفاده از این روشها و رهگیری پرتو این است که تصویر نهایی حاوی مصنوعات یا نویز زیادی است.
نتیجه استفاده از یک پرتوی اصلی واحد برای هر پیکسل
راه حلهای زیادی برای مقابله با این مسئله وجود دارد که در مجموع به آنها Denoising گفته میشود. با کارتهای گرافیک، این کار معمولاً با سایه زنها (Shader) انجام میشود تا فریم کامل شده را نمونه برداری کرده و سپس فیلتر کند. اکنون که جدیدترین کنسولها و کارتهای گرافیک دارای ویژگیهای رهگیری پرتو هستند، مایکروسافت به وضوح توسعه و گسترش DXR را ادامه میدهد تا کنترل و انعطاف بیشتری در مورد نحوه انتشار پرتو به کمک سایه زنها (Shader ها) و نحوه مدیریت آنها داشته باشد. اولین بهروزرسانی API رهگیری پرتو در ماه می سال 2020 رونمایی شد و ویژگیهای گروهی تحت عنوان DXR Tier 1.1 را به آن اضافه کرد. برخلاف اکثر بهروزرسانیهای DirectX ، این ویژگیها به سختافزار جدید نیاز ندارد، و تنها به روز کردن درایور برای اعمال تغییرات کافی است.
DirectML
در حقیقت DirectML در بهروزرسانی ویندوز 10 می 2019 در دسترس قرار گرفت. DirectML کاملاً در مورد یادگیری ماشین است، اصطلاحی آزاد که برای توصیف طیف وسیعی از پارادایمها و الگوریتمهای برنامه نویسی استفاده میشود. به طور خلاصه یادگیری ماشین یا Machine Learning، از زیرمجموعههای هوش مصنوعی است که این امکان را برای سیستمها فراهم میکند تا به صورت خودکار یادگیری و پیشرفت داشته باشند.
درواقع API یادگیری ماشین مایکروسافت ساختار یکنواختی را ارائه میدهد که میتواند پردازش مدلهای استنتاج را بر روی GPU تسریع کند. مانند DXR ، دقیقاً مشخص نمیکند که سختافزار چگونه باید این کار را انجام دهد - شما فقط کد خود را مینویسید و به درایور اجازه میدهید که این کارها را برای شما انجام دهند.
شبکههای عصبی عنصر مهمی در یادگیری ماشین هستند
قبلاً یادگیری ماشینی، مخصوص رایانههای قدرتمند چند پردازندهای بود، اما با افزایش توانایی پردازندههای گرافیکی، آنها این روند را به دست گرفتهاند. هنگامی که انویدیا ولتا را در اواسط سال 2017 معرفی کرد، به ویژگی سختافزاری جدیدی در تراشهها پرداخت: هستههای Tensor.
این واحدها منحصراً عملیات به اصطلاح تنسور را کنترل میکنند (شاخهای از ریاضیات که شامل رسیدگی همزمان به مجموعههای بزرگ اعداد مرتبط است). تنسورها به شدت در عملیات شبکه عصبی (یکی از عناصر اصلی در مدلهای استنباطی) مورد استفاده قرار میگیرند. در مقالهای جداگانه از اگزوگیم به هستههای تنسور و کاربردهای آنها پرداختهایم که برای دریافت اطلاعات بیشتر در رابطه با این هستهها روی این لینک کلیک کنید.
کارتهای گرافیک برای پشتیبانی از DirectML نیازی به هستههای تنسور ندارد - در واقع شما حتی به GPU هم نیازی ندارید. همه اینها به لطف ویژگی جالب Direct3D 12 به نام Meta Commands است. Meta Commandها کد اشیاءی هستند که به فروشندگان سختافزار اجازه میدهند از ویژگیهای خاصی در دستگاههای خود برای انجام محاسبات استفاده کنند.
نه، برای یادگیری ماشین نیازی به کارت گرافیک 2500 دلاری ندارید
بنابراین حتی گفته میشود DirectML اعتقادی به سختافزار مخصوص به خود ندارد (یعنی به این موضوع که دستورالعملها توسط چه سختافزاری اجرا میشوند، بی توجه است). در عوضMeta Commands ابزاری را برای GPU فراهم میکند تا از روش منحصر به فرد خود برای انجام کارها استفاده کند.
در مورد Nvidia و پردازندههای گرافیکی Volta / Turing / Ampere آن، اگر Meta Commandها به روش صحیحی تنظیم شده باشند، هستههای Tensor شروع به کار میکنند و ریاضیات را پردازش میکنند. در غیر این صورت، GPU دوباره به کار میرود تا سایهزنها را روی هستههای "استاندارد" اجرا کند و اگر آنها هم در دسترس نبودند، در عوض پردازنده پردازشها را انجام میدهد.
این همه بسیار خوب است، اما توسعه دهندگان دقیقاً چه کاری میتوانند با DirectML انجام دهند؟
سه کاربرد قابل توجه وجود دارد:
- Anti aliasing
- بزرگنمایی یا اصطلاحاً Super Resolution
- Denoising
هیچ یک از اینها به DirectML احتیاج ندارند، اما ترکیب ویژگیهای API و استفاده از Meta Commands به این معنی است که اینتل، AMD و انویدیا همه میتوانند نوعی شتابدهنده سختافزاری را برای این تکنیکها فراهم کنند. در رابطه با مورد دوم، انویدیا قبلاً از هستههای تنسور خود برای الگوریتمی اختصاصی به نام Deep Learning Super Sampling (DLSS) استفاده کرده است.
درواقع DLSS این امکان را میدهد که یک بازی با وضوح پایینتری رندر و از مزایای اجرای بازیها با رزولوشن پایینتر (برای مثال عملکرد بهتر و فریم ریت بیشتر) برخوردار شود، اما فریم رندر نهایی را با وضوح بسیار بالاتر ارائه دهد تا کیفیت تصویر افت چندانی نداشته باشد. این فناوری ممکن است در ابتدا مانند یک فرایند ساده بزرگنمایی صفحه به نظر برسد و مشابه با آنچه باشد که توسط پخش کنندههای Blu-ray هنگام تبدیل یک فیلم DVD به یک خروجی HD استفاده میشود.
اما شبکههای عصبی قادر هستند نتایج باکیفیت بسیار بهتری را ارائه دهند زیرا میتوانند رنگ پیکسلها را به درستی تنظیم کنند تا حرکت را بر اساس محل قرارگیری اشیا و مکان انتقال آنها مشخص کنند. موارد مشابه DLSS میتوانند نتایج شگفت انگیزی ایجاد کنند و از DirectML میتوان برای تولید الگوریتمهای مشابه استفاده کرد. این روش نام Super Resolution را به خود اختصاص داده است و به خصوص در بازیهایی که به شدت از DXR استفاده میکنند، بسیار مفید خواهد بود.
با کاهش وضوح، به پرتوهای کمتری برای هر فریم نیاز است و بنابراین عملکرد نهایی بعد از استفاده رهگیری پرتو قابلقبولتر میشود. تغییر مقیاس مجدد تصویر برای مانیتور شما بدین معناست که کیفیت نهاییای که شما دریافت میکنید، همچنان خوب است و شاید حتی متوجه تفاوت کیفیت تصویر در مقایسه با قبل از فعال سازی DLSS نشوید و در عین حال عملکرد کلی بازی به طرز قابل توجهی افزایش یابد.
یادگیری ماشین Denoising در عمل
از DirectML همچنین میتوان برای کاهش نویز در کیفیت بالا استفاده کرد، بنابراین میتوان بدون اینکه خیلی روی کیفیت تصویر تأثیر بگذارد، پرتو را منتشر کرد. در تصویر بالا، میتوانید تصویری رهگیری شده در سمت چپ را ببینید، جایی که فقط یک پرتو اصلی در هر پیکسل استفاده شده و سپس در سمت راست دوباره همان روند انجام میشود اما بار با استفاده از شبکه عصبی Open Image Denoiser اینتل.
از زمان انتشار، API یادگیری ماشین دو بهروزرسانی دریافت کرده که تعداد زیادی عملیات اضافی و پشتیبانی از نوع جدیدی از داده را به همراه دارند. برخلاف DXR ، به نظر میرسد در حال حاضر هیچ بازیای از DirectML استفاده نمیکند، اما طولی نمیکشد که بازیسازان این کار را انجام دهند.
DirectStorage
سومین پیشرفتی که ما قصد پوشش آن را داریم، هنوز بهصورت عمومی منتشر نشده است. این بدان معناست که جزئیاتی بیش از آنچه مایکروسافت از طریق وبلاگ توسعه دهنده خود گفته، چندان موجود نیست. DirectX DirectStorage یکی دیگر از API هاست اما به گرافیک اختصاص ندارد.
این کتابخانه نرمافزار در ابتدا برای کنسولهای Xbox Series X | S ایجاد شده و برای ارائه مزایای مشابه در رایانههای ویندوز 10 منتشر میشود. DirectStorage به شما این امکان را میدهد که بازیها و سایر برنامهها، دسترسی مستقیمتری به منابع موجود در یک درایو ذخیره سازی و نحوه انجام کارها در حال حاضر داشته باشند.
در حال حاضر وقتی مشغول انجام یک بازی رایانهای میشوید، تمام بافتها و مدلهای مورد نیاز برای ایجاد گرافیک ابتدا از حافظه محلی کپی شده و در حافظه سیستم نوشته میشوند. سپس همه دوباره کپی شده و در حافظه کارت گرافیک نوشته میشوند.
بازیهای جهان باز باید به طور مداوم به هزاران بافت و مدل دسترسی داشته باشند
این به خودی خود مسئله چندانی نیست، زیرا انتقال از حافظه محلی به RAM معمولاً کندترین قسمت کل دنباله است. با این حال، یک عنوان AAA مدرن ممکن است منابع عظیمی از اطلاعات را بر روی درایو داشته باشد، بنابراین بازی به جای تلاش برای کپی کردن هر آنچه که نیاز دارد یا ممکن است نیاز داشته باشد، فقط بخشهای کوچکی از آن را درخواست میکند.
این امر به ویژه در بازیهای جهان باز که بافتها و مدلهای جدید به طور منظم توسط سیستم درخواست میشوند، بیشتر صدق میکند. هر بار که این اتفاق میافتد، پردازنده باید آنچه را که درخواست ورودی / خروجی نامیده میشود (ورودی / خروجی) پردازش کند، پس اگر تعداد زیادی درخواست به طور مداوم انجام شود، CPU باید مشغول پردازش همه آنها باشد. این، به نوبه خود میزان منابع موجود در سیستم را برای انجام هر کار دیگر محدود میکند (در بازیها، ممکن است کارهایی مانند مدیریت هوش مصنوعی، یافتن مسیر، نظارت بر ورودی و ... محدود شوند) و حتی بر منابع در دسترس برای بازی هم تأثیر دارد.
این روزها بسیاری از بازیها، بافت، صدا و پروندههای مدل را به صورت فشرده ذخیره میکنند (به خصوص اگر به صورت دیجیتالی بازی خریداری شود). قبل از استفاده از چنین منابعی، آنها باید توسط CPU از حالت فشرده خارج شوند و اگر در آن لحظه مشغول رسیدگی به بسیاری از درخواستهای ورودی و خروجی باشید، انتقال دادهها از فضای ذخیره سازی به کارت گرافیک بسیار محدود میشود. ما چنین مواردی را به صورت زمان بارگذاری طولانی یا لگ در هنگام گیم پلی تجربه میکنیم و مطمئناً هر کاری که قادر به بهبود این مشکلات باشد، بسیار خوب است.
ترفندهای کلیدی DirectStorage برای کمک به شما این است که به جای اینکه درخواستهای I / O (ورودی/خروجی) را به صورت سریالی مدیریت کند، آنها دسته بندی کرده و بهشان اجازه میدهد تا تصمیم بگیرند که چه زمانی یک درخواست انجام شود و اولویت کدام درخواست بیشتر است. البته CPU هنوز مجبور است همه این بارها را به دوش بکشد، اما اکنون میتواند از چندین رشته به موازات استفاده کند.
دلیل دیگر نیاز به این تغییر، سرعت بالای SSDهای NVMeبرای ذخیره سازی محلی است. این حافظهها در مقایسه با درایوهای SATA ، بسیار سریعتر و دارای پهنای باند دادههای بسیار پر سرعتتری هستند. انجام درخواست I / O در درایوهای SATA به مدت زمان نسبتاً زیادی نیاز دارد در حالی که SSDهای NVMe میتوانند به سرعت به درخواستها پاسخ دهند.
احتمالا DirectStorage هیچ بهبودی برای رایانههای شخصی و بازیهای قدیمی ایجاد نمیکند، اما برای جدیدترین سیستمها و عناوین نسل جدید، استفاده از این API به ما کمک میکند تا زمان بارگذاری سریعتر، جریان سریعتر دادهها، و کمی فضای تنفس بیشتر برای پردازنده داشته باشیم. متأسفانه، توسعه دهندگان تا سال آینده نمیتوانند به DirectStorage دسترسی داشته باشند و هنوز هیچ اطلاعاتی از زمان انتشار عمومی آن وجود ندارد.
در همین حال، ممکن است شنیده باشید که انویدیا در حال توسعه چیزی است که آن را RTX IO مینامند. این سیستم با DirectStorage تفاوت دارد زیرا در واقع از وسیلهای برای دور زدن کپیکردن منابع در حافظه سیستم استفاده میکند و یک بازی میتواند مستقیماً دادهها را از درایو ذخیره سازی به حافظه محلی کارت گرافیک منتقل کند.
این برنامه در حال طراحی است که همراه با API مایکروسافت برای کاهش بیشتر زمان ورودی / خروجی پردازنده مورد استفاده قرار میگیرد. احتمالاً سایر فروشندگان هم به زودی از ترفندهای مشابه با انویدیا استفاده خواهند کرد.
وقتی DirectX به Ultimate تبدیل شد
در نسخههای قبلی DX ، بهروزرسانیهای جزئی مطابق با توافق شماره گذاری نسخه صورت میگرفت. به عنوان مثال، DirectX 11 در پاییز 2009 ، ورژن 11.1 در سال 2012 ، و نسخه 11.2 یک سال بعد به بازار آمدند. با این حال، DirectX 12 نزدیک به پنج سال به عنوان "12" باقی ماند، تا اینکه DirectX 12 Ultimate معرفی شد.
این نسخه بهروزرسانیهای قابل توجهی را در Direct3D و DirectX Raytracing (که در این مقاله به آنها پرداختیم) به ارمغان آورد؛ بنابراین بیایید نگاهی سریع به ویژگیهای جدید بیندازیم:
- Variable Rate Shading (VRS)
- Mesh Shaders
- Sampler Feedback
اولین مورد در اصل به توسعه دهندگان این امکان را میدهد تا کنترل کنند که چگونه سایهزنها در یک صحنه، کل یا بخشی از آن یا حتی فقط یک نمونه اولیه را استفاده کنند. به طور معمول، سایهزنها در هر پیکسل در یک قاب اعمال میشوند، اما Variable Rate Shading به شما این امکان را میدهد که یک بلوک از پیکسلها را انتخاب کنید (به عنوان مثال یک بلوک x22) و سایهزنها را بر روی آن اجرا کنید. برای درک بهتر به تصویر زیر نگاه کنید؛ در بخشهایی که در تصویر راست به رنگ آبی مشخص شدهاند، نیازی نیست برای هر پیکسل یک Shader استفاده شود، زیرا جزئیات در این نواحی اهمیت زیادی ندارند و در هر 4 پیکسل از یک Shader استفاده شده است. در نواحی قرمز رنگ به دلیل وجود جزئیات بیشتر برای هر پیکسل هم یک Shader یا همان سایهزن نیاز بوده و استفاده شده است.
استفاده ازVRS در Civilization VI – سایه زن در هر پیکسل (قرمز) در مقابل سایه زن در هر 4 پیکسل (آبی)
اگرچه انجام این کار منجر به کاهش کیفیت بصری میشود اما تأثیر مثبت زیادی بر عملکرد خواهد داشت بنابراین اگر نیازی به دقیق به نظر رسیدن ناحیهای نباشد، زیرا در فاصلهی دور قرار دارد یا به سرعت از کنار عبور میکند، کاهش میزان سایهزنها کاری منطقی است.
در حقیقت Mesh Shaderها یک پیشرفت منطقی برای هندسه و سایه زنهای رأس هستند، ابزاری که برای حرکت و مقیاس گذاری اشیا و محیط در یک صحنه استفاده میشوند.
این نسخهی نمایشی Asteroids ، مزیت Mesh Shaderها را به نمایش میگذارد
در گذشته، این منطقه از پردازش رأس از نظر انعطاف پذیری و کنترل برنامه نویسی کاملاً سفتوسخت بود، اما Mesh Shaderها آن را به سمت حوزه سایهزنهای محاسباتی سوق میدهند.
منافع ما گیمرها در داشتن مدلها و مناظر پیچیدهتر در بازیها، بدون کاهش عملکرد خواهد بود. این وعدهای است که قبلاً در طول سالها شنیدهایم (خصوصاً با سایهزنهای هندسی) اما این بار، واقعاً پیشرفت خوبی صورت گرفته است.
مزیت حافظه با استفاده ازSampler Feedback
Sampler Feedback با موضوع مشابهی کار میکند: دادن اطلاعات و کنترل بیشتر به توسعه دهنده. اما این بار، مزیت آن در مورد این است که سازندگان از چه بافتهایی استفاده کنند. مزایایی که Sampler Feedback به طور بالقوه میتواند به همراه داشته باشد، کاهش میزان بافتهایی است که باید از حافظه به پردازنده گرافیکی منتقل شوند؛ و در جایی که یک بازی اشیا را به صورت بافت درآورده، به آنها اجازه میدهد تا به طور مؤثرتر و در نتیجه با سرعت بیشتری استفاده شوند.
ویژگی نهایی DirectX 12 Ultimate یک ترفند گرافیکی جدید یا یک API جالب برای سرعت بخشیدن به مدیریت دادهها نیست. مایکروسافت APIهای خود را برای ویندوز و پلتفرم Xbox در یک کتابخانه منسجم متحد کرده است - از نظر تئوری، حالا ایجاد یک عنوان جدید که برای انتقال آن از یک سیستم به سیستم دیگر به زحمت کمی نیاز دارد، بسیار آسانتر خواهد بود.
این ایده در دوران اولین Xbox هم بود، اما 360 با استفاده از یک طراحی سختافزاری و نرمافزاری که بیش از حد با کامپیوتر تفاوت داشت، از این مسئله دور شد (همانند One ، اما تا حدودی کمتر). با سری X و S کنسول Xbox، اجزا داخلی تقریباً به کامپیوتر بودن نزدیک شدند (البته همچنان هم تفاوتهایی دارند). بنابراین منطقی بود که نرمافزار از این شباهتها برای راحتتر کردن کار بازی سازان، استفاده کند.
آنچه برای توسعه دهندگان خوب باشد برای ما هم مفید است
اگرچه تمام آنچه که در اینجا توضیح دادهایم صرفاً برای استفاده توسعه دهندگان است، اما حتی اگر مدتی طول بکشد تا همه این ویژگیها در بازیها دیده شوند، در نهایت ما هم از این مزایا بهرهمند خواهیم شد. در حالی که هنوز تمرکز اصلی بر روی ایجاد گرافیکهای واقعگرایانهتر است (به خصوص در مورد رهگیری پرتو) مایکروسافت بر بهبود عملکرد تمرکز ویژهای کرده است. دلیل این امر این است که تولیدکنندگان سختافزار برای تولید محصولات جدید با افزایش قدرت قابل توجه نسبت به نسل قبلی که قیمت مناسبی داشته باشند، با مشکل مواجه شدهاند.
نه همه از نظر مالی میتوانند و نه میخواهند که فقط برای اجرای بازیها در بالاترین تنظیمات و نرخ فریم خوب 1000 دلار برای کارت گرافیک هزینه کنند؛ و از سوی دیگر، ناشران معمولاً میخواهند عناوین آنها بیش از آنکه فقط برای تعداد معدودی قابل اجرا باشد، به بیشتر مصرف کنندگان برسد.
همه اینها به این معنی است که DirectX 12 Ultimate و همه پیشرفتهای خوب آن برای ساخت بازیهایی با عملکرد و ظاهری بهتر مورد استفاده قرار میگیرند، و همه ما میتوانیم از آنها لذت ببریم.
منبع: techspot.com
برای ارسال دیدگاه ابتدا باید وارد شوید.