با پیشرفت‌های چشم‌گیر دایرکت‌ایکس۱۲ به خصوص در زمینه ری‌تریسینگ و رندرینگ گرافیکی، باید منتظر بود استدیوهایی که با توجه به چالش‌های موجود بر سر راه توسعه گیم‌های پی‌سی به سمت ساخت گیم برای کنسول رفته بودند، بار دیگر به عرصه ساخت گیم برای رایانه‌های شخصی بازگردند.

 

نکته بسیار مهم دیگر، گسترش عرصه برای شروع یا افزایش فعالیت گیم‌سازان مستقل خواهد شد که از مهم‌ترین اعضای جامعه گیم‌سازی محسوب می‌شوند. می‌توان امیدوار بود بازی‌ها با حداکثر توان برای پی‌سی توسعه داده شوند. در این مقاله می‌خواهیم نگاهی تخصصی به ویژگی ری‌تریسینگ دایرکت ایکس۱۲ بیندازیم. با اگزوگیم همراه باشید.

 

توسعه‌دهندگان بازی‌های کنسول اطلاعات دقیقی راجع‌به سخت‌افزار مربوط به هر کنسول دارند. برای هر مدل از کنسول‌ها، یک پردازنده، یک پردازنده‌ی گرافیکی، حافظه از پیش تعیین شده و ست سخت‌افزاری مشخصی وجود دارد.

 

 

ولی توسعه دهندگان بازی‌های رایانه‌های شخصی، همواره با چالش‌های سخت‌تر و پیچیده‌تری در پروسه‌ی ساخت بازی‌ها روبه‌رو بوده‌اند، زیرا آنها با میلیون‌ها ست از کامپوننت‌های گوناگون ضعیف، قوی و با عملکردهای متفاوت در ترکیب با یکدیگر سر و کار دارند و این موضوع توسعه‌ی گیم برای پی‌سی را دشوارتر می‌کند.

این امر یکی از دلایلی است که در دهه‌ی گذشته استودیوهای زیادی به سمت توسعه بازی‌های کنسول سوق پیدا کرده‌اند.

 

دروغی به نام سه بعدی

در طی سی سال گذشته،‌ تقریبا تمام گیم‌ها از تکنیک رستریزیشن (rastrization) برای رندر کردن تصاویر به روی صفحه استفاده کرده‌اند. در حالی که گیم‌ها به صورت سه بعدی به کاربران ارائه می‌شدند، این متد به صورت دو بعدی عمل می‌کند (متناسب با صفحه‌های نمایش‌گر) و بعد سوم توسط ماتریس‌های تبدیل به روی تصاویر رندر شده نگاشت می‌شود.

در سال‌های قبل، بازی‌ها به وسیله‌ی تکنیک‌های زی-بافرینگ و انسداد تجمعی‌ (occlusion culling) در تلاش برای کاهش تعداد پیکسل‌های فریبنده‌ی رندر شده بودند، زیرا که در تشکیل فریم نهایی مشارکتی نداشتند. در ایده‌آل‌ترین حالت، پیکسل‌های رندر شده تماما همان پیکسل‌های قابل مشاهده در فریم بازی هستند.

 

کاهش رندر کردن پیکسل‌های خارج از صفحه

 

در سال‌های ابتدایی هزاره‌ی جاری، این رویکرد بسیار مناسب بود. نگاشت‌های معمولی و انطباقی برای اضافه کردن لایه‌های تصاویر واقع گرایانه‌ی سه بعدی مورد استفاده قرار می‌گرفتند و پردازنده‌های گرافیکی به پیشرفت خود در جهت فراهم آوردن پهنای باند و قدرت پردازشی مناسب برای پشتیبانی از این تکنیک‌ها ادامه می‌دادند. پس از مدت کوتاهی توسعه دهندگان گیم شروع به استفاده از متدها و رویکردهای دیگری کردند که این بهبودها را بی اثر گذاشت.

 

زی-بافرینگ و انسداد تجمعی

 

نگاشت و اضافه شدن سایه‌های اشیای خارج از صفحه  باعث ایجاد تعامل آن‌ها در پیکسل‌های فریم گیم می‌شدند. امروزه تکنیک‌هایی نظیر انعکاس فضا و صفحه (screen-space reflection) و روشنایی سراسری (global illumination) رستریزیشن را به پایان خود هدایت می‌کنند. در آینده شاهد استفاده از اطلاعات کل دنیای سه بعدی گیم برای رندر کردن خواهیم بود.

نگاشت و افزودن صفحه سایه‌ها به صفحه

 

در این مقاله یک ویژگی کلیدی از دایرکت‌ایکس۱۲ را که فاصله خالی میان تکنیک رستریزیشن و رندرینگ تمام دنیای سه بعدی را پر می‌کند - به نام ری‌تریسینگ - را بررسی کنیم. ری‌تریسنگ در دایرکت‌ایکس۱۲، با استفاده از پیمایش کل نمایش یک دنیای سه بعدی به وسیله تکنیک‌های رندرینگ نظیر SSR این اجازه را می‌دهد تا به صورت طبیعی و کارآمدی اشکالات موجود در رستریزیشن را برطرف کرده و کلاس جدیدی از تکنیک‌هایی که قبلا امکان استفاده از آن‌ها نبوده را در ساخت گیم‌ها روی کار آورند.

 

ری‌تریسینگ دایرکت‌ایکس۱۲

ری‌تریسینگ ۴ ویژگی جدید را به این اِی‌پی‌آی معرفی می‌کند:

ساختار شتاب (acceleration structure): شی‌ای است که نمایان‌گر و معرف کل یک محیط سه بعدی بوده که در فرمت مناسب برای پیمایش توسط پردازنده گرافیکی قرار دارد. این ساختار در سلسه مراتبی دو سطحی که برای پیمایش بهینه اشیا توسط جی‌پی‌یو و تغییرات کارامد اپلیکیشن بر روی اشیای داینامیک و غیر ایستاست طراحی شده است.

 

DispatchRays: متد جدیدی در لیست دستورات دایرکت‌ایکس که آغازگر فرآیند ری‌تریسینگ بر روی صفحه گیم است. این مرحله شروع کننده بارگذاری حجم کاری ری‌تریسینگ دایرکت‌ایکس۱۲ بر روی جی‌پی‌یو می‌باشد.

 

مجموعه‌ی جدیدی از شیدر HLSL: از جمله ray-generation، closed-hit، any-hit و miss هستند. از شیدرها برای مشخص کردن و تخصیص عملکردهای محاسباتی دی‌ایکس‌آر استفاده می‌شود. زمانی که DispatchRays فراخوانی می‌شود، شیدر ray-generation اجرا می‌شود. این شیدر اشعه‌های (rays) درون صفحه را ردیابی می‌کند و براساس برخورد یا عدم برخورد اشعه با اشیا و اِلمان‌های صفحه در نقطه اشتراک، عملیات خود را انجام می‌دهد. این مکانیزم در قسمت‌های بعدی بیشتر توضیح داده خواهد شد. این پروسه موجب می‌شود که شیدر و تکسچر مناسب برای هر کامپوننت را اختصاص داده و باعث به‌وجود آمدن متریال یکتا (unique) شود.

 

وضعیت پایپ‌لاین ری‌تریسینگ (ray tracing pipeline state): با همگام‌سازی قدرت گرافیکی سخت‌افزار و محاسبه پایپ‌لاین وضعیت اشیا و المان‌ها، شیدرهای ری‌تریسینگ و سایر عملیات‌ مربوط به آن‌ها را کپسوله سازی و فشرده و ذخیره می‌کند.

 

آناتومی دی‌ایکس‌آر (DirectX Ray Tracing – DXR)

اولین گام در رندر کردن هر محتوا به وسیله‌ی دی‌ایکس‌آر، ایجاد ساختار شتاب دو مرتبه‌ای آن است. در مرتبه پایین این ساختار، اپلیکیشن مجموعه‌ای از هندسه‌های خاص متشکل از بافرهای رئوس و اندیس‌هایی که اشیای صفحه‌ی گیم‌ را تشکیل ‌می‌دهند، اختصاص می‌دهد.

در مرحله بالاتر ساختار شتاب، اپلیکیشن لیستی از توضیحات مربوط به هر کدام از هندسه‌های خاص و اطلاعات اضافی در مورد ماتریس‌های تبدیل اختصاص می‌دهد که این لیست فریم به فریم مانند اشیای داینامیک گیم آپدیت می‌شود. این سلسله مراتب به کمک ساختارهای هندسی پیچیده، گیم را پیمایش می‌کند.

 

هندسه‌های منحصر به فرد که هر کدام ماتریس تبدیل مربوط به خود را دارند

 

در گام دوم در استفاده از دی‌ایکس‌آر، ایجاد پایپ‌لاین وضعیت ری‌ترسینگ است. امروزه اکثر گیم‌ها، اشیا خود را دسته‌‌بندی و اعضای هر دسته را یک جا رندر می‌کنند، برای مثال رندر اشیای پلاستیکی یا آهنی یا سنگی. ولی چون در ری‌تریسینگ پیش‌بینی حالت‌های بَعدی غیرممکن است، این‌گونه دسته بندی در این متد غیرقابل انجام است.

 

به جای آن، پایپ‌لاین وضعیت این امکان را می‌دهد تا مجموعه‌های متعددی از شِیدرها و تکسچرهای ری‌تریسنگ اختصاص یابند. در نهایت، این قابلیت این امکان را به اپلیکیشن می‌دهد که اگر اشعه‌ای با شی A اشتراک داشته باشد (با قسمتی از اشعه برخورد کند) از شیدر P و تکستچر Y و اگر با شی B اشتراک داشته باشد از شیدر Q و تکسچر Y استفاده شود. یعنی اپلیکیشن با اشتراک اشعه‌ی خود با اشیای درون گیم، توانایی اجرای شیدر و تکسچر مناسب را خواهد داشت.

 

بازتاب اشعه‌ها در فریم گیم

 

در قدم سوم، مرحله‌ی انجام عملیات شیدرهاست. داخل این شیدرها، اپلیکیشن TraceRay را فراخوانی کرده که این امر باعث آغاز پیمایش ساختار شتاب می‌شود و عملیات مربوط به برخورد یا عدم برخورد اشعه‌ها با اشیا، المان‌ها و کامپوننت‌ها اجرا می‌شود.

 

پیکس(PIX)

نرم‌افزار پیکس از ویژگی ری‌ترسینگ دایرکت‌ایکس۱۲ پشتیبانی می‌کند و این خبر بسیار خوبی برای توسعه دهندگان گیم‌هاست. نسخه‌ی ویندوز پیکس،‌ با دریافت و آنالیز کردن فریم‌های ساخته شده توسط دی‌ایکس‌آر به توسعه‌دهندگان در درک و دنبال کردن نحوه‌ی تعامل دی‌ایکس‌آر با سخت‌افزار کمک مهمی می‌کند.

 

توسعه‌دهنگان می‌توانند توسط پیکس فراخوانی‌های اِی‌پی‌آی،‌ پایپ‌لاین‌های منابعی که در فرایند ری‌ترسینگ مشارکت دارند، وضعیت و حالات اشیا و المان‌های گیم و حالت تصویر سازی شده و شماتیک ساختار شتاب را مشاهده کنند. این ویژگی‌های پیکس اطلاعات و ابزار مناسبی را برای سازندگان بازی در جهت توسعه و ساخت تجربه‌ای بی‌نظیر توسط دی‌ایکس‌آر فرآهم می‌آورد.

 

 

موتورهای بازی سازی زیادی نیز برای پشتیبانی و همگام‌سازی با دایرکت‌ایکس۱۲ خود را بهبود داده‌اند. برای مثال می‌توان فراست بایت (الکترونیک آرتز)، سید (الکترونیک آرتز)، آنریل انجین (اپیک گیمز)، تری‌دی مارک (فیوچر مارک)، یونیتی انجین (یونیتی تکنولوژی) و سایر موتورهای بازی سازی را نام برد.