سلام دوباره خدمت شما دوستان عزیز،
با بخش سوم بررسی موقعیت و جایگاه آنریل انجین 5 در خدمتتون هستم
خب در مبحث قبلی به معرفی Lumen و بررسی ساختار و کارکرد تکنیک های جدیدی که درش پیاده سازی شده بود رسیدیم و طبق گفتهی اپیک گیمز متوجه شدیم که لومن هدفش برای اجرا بهمراه تکنولوژی جدید Nanite که امروز قرار هست بهش بپردازیم هست.
این تکنیک توضیحات کوتاه و ساده ای دارد، اما تاثیرش را تا سالیان سال نه تنها در ضمینهی بازی های رایانه ای، بلکه در ضمینهی رندرینگ و شبیه سازی هم شاهد خواهیم بود، Nanite یعنی کاهش استفاده از منابع رایانهی کاربر برای اجرای صحنه های حجیمی که توسط آن قادر هستیم میلیارد ها Triangle/Polygon را براحتی داخل موتور بازی سازی آنریل آن هم بصورت Real Time و با سرعت بالا به اجرا دربیاوریم .
اپیک گیم برای این تکنیک از عنوان Virtualized Geometry استفاده میکند، اما ما در این سالهای های اخیر عنوان "Virtual" رو در نسخهی چهارم آنریل انجین برای تکنیک های قدرتمند و کاربردی زیادی شنیده ایم مانند Virtual Texturing و یا Virtual Heightfield Mesh
شخص دولپر اصلی پشت نَنایت هم آقای Brian Karis بوده که قبلا نقش مهمی رو در اجرای تکنولوژی Virtual Texturing در آنریل اجرا کرده بوده.
خب همونطور که در بخش دوم خدمتتون اعلام کرده بودم، ایده اصلی این تکنیک های جدیدی که در آنریل اجرا شده است، نوع بازنویسی شده و تکامل یافته ای از تکنیک های قبلی بوده، یعنی در عمل به نظر میاد که با نوعی سیستم پیشرفته از تکنیک بارگذاری LOD آبجکت های صحنه مواجه هستیم، اما برای اجرای حجم بیشتری از Triangle آن هم بدون از دست دادن کیفیتِ آبجکت ها در هر لحظه نیاز به یک سیستم ای داریم که با Streaming یا بازخوانی لحظهای از توان پردازشی موجود، فقط برای بخشی که مورد نیاز هست روی صفحهی کاربر بارگذاری بشود استفاده شود تا بار بی جهت به رایانه کاربر برای محاسبات اضافی تحمیل نشود.
خب ما شاهد بودیم که در Virtual Texturing فقط تکسچرِ بخش هایی که نزدیک به موقعیت پلیر داخل محیط بوده با رزولیشن کامل بارگذاری میشده و بخش های دیگر یا صرفا بارگذاری نمیشده و یا ابعاد آن به شدت کاهش پیدا میکرد و این کار بار محاسبات گرافیکی برای تکسچر هایی با ابعاد بالا را بسیار کاهش داده است
به عنوان مثال وقتی که کاربر فاصلهی زیادی از چند کوهپایه درون محیط بازی را دارد و تکسچر تعریف شده برای کوه ها با ابعاد 8K تعریف شده (که در حالت عادی بدون Virtual Texturing کل حجم این تکسچر سنگین برای اجرا وارد حافظهی گرافیکی رایانه میشود)، در صورت فاصلهی زیاد پلیر از محیط کوه ها این ابعاد حتی ممکن هست به 512x512 و یا کمتر هم برسد که به برای کاربر نظر میرسد تکسچر ها تار شده اما حتی این مورد هم ممکن هست به واقعگرایانه تر شدن نتیجهی اجرا شده کمک کند! ممکن هست کمی عجیب به نظر برسد اما وقتی در جهان بیرون از فاصله ی دور به کوه ها نگاه میکنیم چشم ما قادر نیست که جزئیات بسیار زیادی را دریافت کند و همین مورد برای اجرا در بازی کافیست که وقتی تکسچر روی کوه ها با کاهش رزولیشن و تار شدن مواجه میشوند حس دوری و ایجاد عمق بصورت مجازی (Virtual) را برای کاربر ایجاد خواهد کرد.
به عنوان مثال بازی های پرجزئیات سنگینی مانند GTA V با بالاترین تنظیمات گرافیکی با وجود کارتهای قدرتمندی که امروزه معرفی شده است، پس از سالها هنوز هم نیاز به بار محاسباتی بالایی برای اجرا دارد، زیرا بسیاری از تکنولوژی های به کاربرده شده در اون منسوخ شده و تکنیک های جدید، بهینه و باکیفیت تر جایگزین آن شده اند و به همین دلیل باید بدانیم که اگر نسخهی جدید از این نوع بازی ها منتشر شود، شاهد کاهش بارِ محاسبات در بخش هایی باشیم که در بازی قبلی نبوده ایم و همین موارد باعث افزایش زمان آزاد بیشتر توسعه دهندگان بازی های رایانهای برای افزایش کیفیت پروژه آن هم با متمرکز کردن این زمان توسعه بروی بخش های حیاتی تری که بروی کیفیت خروجی بازی تاثیر مستقیم دارد بشود،
به عنوان مثال وقتی که در آنریل Nanite به ما کمک میکند که به بار پردازشی اضافه برای آبجکت های سنگین درون صحنه نیاز نداشته باشیم (که با این وجود، حتی Nanite باعث افزایش جزئیات و کیفیت خود آبجکت های درون صحنه خواهد شد !) پس به عنوان مثال میتوانیم قدرت سخت افزاری برای محاسبهی رفتار نور را برروی محاسبات تقریبا سنگین تکنیک جدید Lumen متمرکز کنیم، پس با این وجود اگر نسخهی بعدی ای از این بازی در میان باشد:
1-شاهد افزایش کیفیت و جزئیات بازی بصورت بسیار گسترده خواهیم بود
2- و بهمراه این تغییرات مثبت شاهد قابلیت اجرای آن با بالاترین کیفیت برروی قطعات امروزی باشیم
مثال دیگری که میتوانم در این رابطه بزنم بازی تازه عرضه شدهی Forza Horizon 5 است که برای نورپردازی بجای استفاده از Raytracing و محدود کردن گزینه های انتخابی و کاهش پرفورمنس کاربر، از تکنیکی شبیه به Lumen به کمک Mesh Distance Field و SSR برای نورپردازی استفاده کرده است که حتی شاهد این هستیم که این بازی حتی قادر هست با کیفیت خوب و قابل قبولی حتی بر روی کارت گرافیکی قدیمی 3 نسلِ پیش یعنی GTX 950 با رزولیشن 1080p اجرا بشود !
هدف Nanite چیست ؟
انجام محاسبات فقط برای اجرای بخشی که نیاز است داخل تصویر مشاهده شود
حذف کردن محدودیت هایی قبیل : Polycount, Draw Calls, Memory Usage
استفادهی مستقیم و بدون واسط از Asset های طراحی شده در سطح VFX و Film
سادگی و راحتی ! بدون نیاز به بهینه سازی و اتلاف وقت برای مدل های سه بعدی ساخته شده
اجرای تمامی موارد بالا آن هم بدون فدا کردن کیفیت نهایی !
و اما چگونه ؟!
به طور ساده و مختصر.
Nanite نسبت به فاصلهی کاربر از آبجکت و مقدار محدودیت مشخص شدهی برای سقف اجرای Triangle ها، نسبت به رزولیشن صفحه برای هر پیکسل در حال نمایش، مقداری از جزئیات را بصورت خودکار به نسبت به اطلاعات دریافتی محاسبه خواهد کرد، این به این معنی هست که عملا فقط جزئیاتی محاسبه خواهد شد که قابل رویت و در صحنه تاثیرگذار باشند، پس یعنی اگر در صحنه یک یا چند بخش از آبجکت های سنگین صحنه در زیر آبجکت دیگری که در حال مشاهدهی آن هستیم مخفی شده باشد، محاسباتی برای آن بخش های مخفی مانده انجام نخواهد شد و بار گرافیکی اضافه به سیستم کاربر تحمیل نمیشود
و این یعنی نه فقط مانند سیستم سابق LOD کل آبجکتی که داخل صحنه دیده نمیشود به اجرا در نمیآید، با Nanite ما شاهد این هستیم که "اگر" بخشی از یک آبجکت پرجزئیات و سنگین دیده میشود و بخشی از آن زیر آبجکت های دیگر مدفون شده و دیده نمیشود ما "فقط" شاهد بارگذاری بخشی از آن آبجکت خواهیم بود که در حال مشاهده بر روی پیکسل های صفحه هستیم
که این یعنی هدف نَنایت هم درواقع جلوگیری از بار اضافی و همچنین کنترل حجم محاسباتی صحنه است.
در نَنایت با در نظر گرفتن مقدار پیکسل های روی صفحهی نمایش ما فقط شاهد بارگذاری و نمایش مقدار کنترل شده ای از Triangle های درون صحنه هستیم، یعنی به اندازهی محدودهی مورد نمایش پیکلس های صفحه نمایش و نه بیشتر که باعث افزایش بار محاسبات نشویم !
قبلا ما در سیستم LOD برای هر سطح و مقدار از آبجکت ها برای رنج ها و فواصل مختلف یک تنظیمات از پیش محاسبه شده در نظر میگرفتیم، مانند LOD1, LOD2 و ...
اما در Nanite هر بخشی از آبجکت نسبت به نیاز کاربر بارگذاری خواهد شد یعنی ممکن است همزمان در بخشی از آبجکت جزئیات بیشتر و دربخشی جزئیات کمتری برای ایجاد ثبات در کیفیت خروجی و بار پردازشی محاسبه شود که اینکار با تبدیل شدن آبجکت به بخش های کوچک فراوان امکان پذیر شده است
اما نیازی نیست مانند قبل در هر لحظه کل بخش های هر LOD داخل Memory گرافیکی بارگزاری بشود !
در واقع بخشی از آبجکتی که در حال اجرا و بارگزاری نمیباشد، درصورت نیاز و فراخوانی بجای حافظهی گرافیکی از روی حافظهی رایانه اجرا خواهد شد و به همین دلیل در صورت استفاده از حافظه HDD بجای SSD برای بارگذاری و اجرای پروژه های آنریل انجین 5 که از این تکنیک ها استفاده خواهند کرد، شاهد زمانبر بودن Loading Time پروژه ها خواهیم بود !
این مورد حتی به این معنی است که در آینده برای بهره برداری و اجرای این تکنیک ها برای بازی های آینده، دولپرها نیاز به سیستم های High-End (تا به این تاریخ) برای ساخت بازی در این موتور بازی سازی نیاز پیدا خواهند کرد،
با تست های که در این نسخه در Unreal Editor انجام دادم، متوجه شدم که ممکن است برای استفاده از تمام توانِ این تکنیک های جدیدِ آنریل انجین 5 برای اجرا در پروژه و کامپایل آن برای خروجی نهایی به عنوان مثال به حداقل 64 گیگابایت رم، کارت گرافیکی با مموری بالای 8 گیگابایت و همچنین CPU قدرتمندی برای تبدیل و کامپایل نیاز داشته باشیم، اما باید توجه داشته باشیم پروژهای که ما با اینچنین رایانهی قدرتمندی کامپایل میکنیم بصورت Standalone برای اجرا حجم بسیار پایینی از حافظه، رم و حتی رم گرافیکی رایانهی کاربر را برای اجرا اشغال خواهد کرد که این بهینه سازی از طرف آنریل جای تحسین فراوان را خواهد داشت !
تاثیر Lumen و Nanite بر روی ورک فلوی بازی سازی و طراحان چیست ؟
قاعدتاً این تکنیک ها تاثیر خودشان را بر روی زمان انجام و اجرای پروژه تا رسیدن به نتیجهی مورد نظر در صورت استفاده در پروژه خواهد گذاشت، اما باید به این نکتهی مهم توجه داشت که دیگر ممکن است نیازی به طی کردن روند زمانبر و طاقت فرسای Optimize کردن آبجکتهای درون بازی و ساخت Normal Map و Displacement برای آبجکتهای مختلف نداشته باشیم.
آیا Nanite یعنی پایان Tessellation و Displacement ؟
احتمالا جواب دادن به این سوال مقداری زود باشد چون در نسخهی Early Access آنریل انجین 5 با اینکه این موارد در بخش متریال ها به حالت Disable درآمده بوده امکان استفاده از آن را داشتیم، و پس از آن اپیک گیم پلاگین Virtual Heightfield Mesh را برای جایگزین کردن آن بجای استفاده از روش قدیمی Tessellation در نسخهی 4 و 5 معرفی کرد که بسیار بهینه تر از سیستم Tessellation قبلی عمل میکند، اما همانطور که با نسخه های اخیر تحت توسعهی آنریل انجین 5 که داخل GitHub که در دسترس کاربران قرار دارد تست انجام داده ام، متوجه شدم که بخش Displacement و Tessellation بطور کامل از آنریل حذف شده ! و این مشخص نیست که این تصمیم موقتی یا همیشگی است !
باید ببینیم که اپیک چه جایگزینی را برای اجرای Displacement با رزولیشن بالا در نظر دارد، زیرا به نظرم فقط تکیه به مدل های سنگین اسکن شده و اسکتر زمانبر آن در محیط راه حل اصلی برای فضاهای Landscape نمیباشد.
چه توقعی از اپیک برای نسخهی نهایی آنریل انجین 5 و آپدیت های بعدی برای استاندارد شدن Lumen و Nanite و انتخاب اول شدن آنها برای بازیسازان باید داشته باشیم ؟
قابلیت استفاده بر روی Asset های انیمیت شدهی آبجکتهای تحت Nanite و همچنین قابلیت استفاده از امکانات متریال متحرک برای آبجکت های تحت Nanite آن هم با پشتیبانی Lumen برای نورپردازی این نوع Asset ها مانند فضاهای پوشش گیاهی برای کاهش بار پرفورمنس باشیم
قابلیت استفاده از امکانات جدید Nanite و یا Lumen با تکنیک های مختلف و حتی شرایط مختلف نوری مانند استفاده از Nanite با نورپردازی Bake شده برای پلتفرم های موبایل و VR و ... (به عنوان مثال برای جایگزین کردن روش نورپردازی سبک تری که صرف پردازش انجام محاسبات تقریبا سنگین Realtime لومن نشود.)
Game Changing ؟
آیا این تکنولوژی ها انقلابی در عرصهی بازی سازی و حتی گسترده تر، در عرصه CGI ایجاد خواهد کرد ؟ جواب این سوال رو به خودتون میسپارم
در بخش بعدی این مقاله به تکنولوژی های معرفی شدهی بعدی مانند Virtual Shadow Maps، Temporal Super Resolution و Metasounds میپردازیم
دیدگاه خود را بنویسید