سلام خدمت شما دوستان عزیز
با بخش دوم مقالهی بررسی موقعیت Unreal Engine 5 در خدمتتون هستم؛
در این قسمت نگاهمون در رابطه با سیستم جدید نورپردازی آنریل مقداری تخصصی تر خواهد شد و به بررسی عمیق تر این تکنیک جدید میپردازیم پس حتما توصیه میکنم قبل از مطالعهی بخش دوم این مقاله، حتما بخش اول را مطالعه کرده باشید.
پیرو توضیحاتِ مقالهی قبلی به اینجا رسیدیم که سیستم جدید نورپردازی آنریل انجین 5 یعنی Lumen، به عنوان جایگزین بهتر و به نوعی ادامه دهندهی تکنولوژی Raytracing و تعریف سیستم نورپردازی Dynamic جدید برای آنریل هست.
لازم هست اینجا یک پرانتزی باز کنم اینکه به نظرم کارِ صنعت گیم و VFX با تکنولوژی ریتریسینگ بهصورت Real Time تحت DXR تمام شده نیست و همونطور که ذکر کردم ما نسبت به قدرت پردازشی سخت افزاری کاربران و همچنین طراحان، نیاز به استفادهی بهینه از این تکنولوژی نوپا برای رسیدن به مرحلهی اجرا در سطح گسترده داریم.
چگونه محاسبات Raytracing تحت نرم افزار در لومن بهینه تر و سبکتر از DirectX Raytracing است ؟
لومن با کاهش کیفیت Ray ها یا پرتو های نوری، به همراه استفادهی هوشمند از تعداد مناسبِ پرتو ها و کش کردن اطلاعات آن بهصورت آفلاین که برای محاسبهی ریتریسینگ بازخوانی میشود، اجرای این امر رو در قبال کاهش محدود کیفیت خروجی نهایی و ایجاد مقداری محدودیت های جزئی(که ممکن است در نسخهی اصلی حل شود)، بسیار بهینه تر و سریعتر کرده است و این کار را با کمک فضای محاسباتی جداگانه ای تحت نسخهی ارتقاء یافته و بازنویسی شدهی تکنیک قبلی یعنی Mesh Distance Fields با نام Signed Distance Fields انجام میدهد، لازم به ذکر هست که به اشتباه فکر نکنیم که لومن تحت ریتریسینگ به اجرا درمیآید، بلکه توسط نوع محاسبات بازنویسی شدهای که تحتِ تکنیک Rasterization هست به اجرا درمیآید.
« تکنولوژی های جدید معرفی شده در آنریل انجین 5 و چیزیکه این نسخه رو خاص میکند، نوع تکامل یافته تکنیک ها و راه حل های فوق العاده ای بوده که داخل نسخهی چهارم این انجین معرفی و به اجرا در آمده که در نسخهی جدید شاهد استفاده و مانور قدرتمند آن در این انجین و حتی به جلو بردن صنعت، با تکامل و بازنویسی آنها هستیم »
نورپردازی محیط در لومن به کمک سه تکنیک نورپردازی و بهصورت هم زمان محاسبه و اجرا خواهد شد:
1-Screen Traces
2-Signed Distance Fields
3-Surface Cache
تکنیک اول Screen Trace :
یا بهتر بگم Screen Space Trace به نوعی نسخهی بازنویسی شده ای تحت تکنیک سابق Screen Space هست ولی از کیفیت بسیار بالاتری برخوردار هست، اما بهصورت SSGI محاسبات GI و Reflection را برای ما انجام نمیدهد، بلکه بخشی از محاسبات لومن به عهدهی این تکنیک میباشد که در ScreenTrace مانند Screen Space دو بخش را داریم:
1- فضای آبجکت هایی که بر روی صفحهی نمایش از محیط درحال تماشای آن هستیم
2- فضای آبجکت هایی که خارج از دید صفحهی ما در محیطمان قرار دارند مانند فضای پشت دوربین یا منطقهی دیگری از محیطی که پلیر در آن در حال گشت و گذار است و دیده نمیشود
و عملا در Screen Trace محاسبات فقط برای فضایی که در صفحهی نمایش در حال تماشای آن هستیم به صورت خیلی دقیق تر محاسبه خواهد شد، اما وقتی که آبجکت و یا پرتو نوری که از فضای صفحه خارج میشود یا پرتو نوری که از آبجکتی گذر کرده و به پشت آبجکت و جایی که قابل رؤیت نیست نفوذ میکند ما شاهد تاثیر آن در Reflection و GI و نورپردازی صحنه نیستیم و به نوعی به نظر میرسد که اون آبجکت یا بخش درصورت نبودن داخل صفحهی نمایش یا دید کاربر، ناپدید میشود! که برای حل این مشکل میرسیم به مورد دوم محاسبات نورپردازی در لومن
تکنیک دوم Signed Distance Fields :
Signed Distance Fields فضای موازی یا بهتر بگم فضای متناوبی هست که اطلاعات اون توسط اشکال و آبجکتهای صحنه بهصورت Voxel Based آن هم بهصورت خودکار و پرسرعت محاسبه و ارائه میشود مانند مثال تصویری زیر
این محیط در واقع تکنیک بازنویسی شدهی Mesh Distance Fields ای که داخل نسخهی چهارم آنریل انجین به اجرا درآمده بود هست که در حالت نورپردازی سابق فقط برای Distance Field Occlusion و Distance Field Shadows استفاده میشده که در نسخهی پنجم Unreal Engine کیفیت و سرعت آن بسیار افزایش پیدا کرده است
با قابلیت کنترل کیفیت و اجرا و بازخوانی آن از حافظهی سیستم کاربر (نه حافظهی رم یا کارت گرافیک) با افزایش سرعت اجرا و بیلد شدن ده برابری، کیفیت چهار برابری بهتر از سابق و حجم عملا نصف شده ارائه میشود که علاوه بر لومن همچنین باز هم قابل استفاده برای روش های محاسبات نوریِ سابق بهصورت بهینه تر و با کیفیت تر خواهد بود؛
برای Mesh Distance در لومن از عبارت Signed برای نوع روش محاسبه نور استفاده شده آن هم به این دلیل که برای محاسبه در این بخش از فضای Mesh Distance Field برای محاسبهی نور با جزئیات برای آبجکت های نزدیک و هم از Global Distance Field برای محاسبهی نوری فضای دورتر از "دو متر" و فضای کلی صحنه مورد استفاده واقع میشود، این مورد بخشی است که با استفاده از این تکنیک، از عملیات محاسبات Raytracing برای نورپردازی صحنهی ما استفاده خواهد شد یعنی فضایی که کاربر در صفحه در حال تماشای آن نمیباشد و قابل دسترسی توسط Screen Trace صحنه نیست، لومن برای محاسبات این فضاها از Raytracing ولی با اجرای آن در Signed Distance Field و اعمال نتیجه برروی آبجکتهای پرجزئیات صحنه (مانند Nanite) جهت افزایش سرعت محاسباتی استفاده میکند
در واقع تعداد Ray یا پرتو های Raytracing در لومن با کاهش فراوانی روبرو نشده است اما کیفیت هر پرتو نوری نسبت به پیکسل به شدت بسیار زیادی برای افزایش پرفورمنس، کاهش داده شده است.
خب تا اینجا اطلاعاتِ نوری نرمال صحنه و موقعیت آبجکت ها برای نقاط برخورد پرتو های نوری در صحنه برای محاسبات پیش زمینه ای GI مشخص شده، اما یک مورد مانده آنهم محاسبهی رفتار یا تاثیر متریال و Shader بر روی صحنه که باید بهمراه محاسبات ریترسینگ GI صحنه برای اجرای درست آن تعریف بشود تا بتوانیم تاثیر نوع و رنگ و ... متریال های صحنه را در GI ببینیم، در اینجا استفاده همزمان از تکنیک بعدی مورد نیاز هست
تکنیک سوم Surface Cache :
این بخش بهصورت Realtime اطلاعات یک آبجکت بهمراه متریال آن را از جهت برداری مختلف به شکل مکعب دریافت میکند(مانند تصویر زیر)
و اطاعات دریافتی داخل یک تکسچر با رزولیشن بسیار پایین بهصورت Atlas ذخیره میشود
سرعت این عملیاتِ دریافت داده و ذخیره یا Capture کردن حتی با رزولیشن بسیار کوچکی که برای Atlas ها تعریف شده هم به شدت پایین است زیرا عملیات محاسبات در Rasterization بهصورتی هست که در لحظه فقط یک تصویر قابل رندر میباشد و اینکه سرعت این مورد بسیار وابسته به مقدار Triangle (یا Polygon های آبجکت) مورد نظر هست که با توجه به افزایش شدید تعداد Triangle آبجکتهای پر جزئیات(که بعدا بهصورت Nanite تعریف میشود) محاسبهی این پروسه برای جهات برداری مختلفِ هر آبجکت میتواند بسیار زمانبر باشد که با کمک تکنولوژی جدید هوشمند Nanite مقدار Triangle ها بسیار کاهش پیدا کرده زیرا LOD هر آبجکت بهصورت خودکار و در لحظه Generate میشود که همین مورد سرعت محاسبهی نوری لومن را افزایش میدهد و به همین دلیل در اینجا میتوان گفت که لومن بیشتر بهصورت متمرکز برای استفاده بهمراه تکنولوژی Nanite تعریف شده و بدون کاهش حجم و جزئیات هر آبجکت، سرعتِ محاسبات نورپردازی لومن بسیار کاهش پیدا خواهد کرد ! که البته ممکن هست این محدودیت ها برای نسخهی اصلی دستخوش تغییرات و بهینه سازی بسیار بیشتری بشود.
و حال به کمک این تکنیک آخر، اطلاعات نوع متریال هر آبجکت را هم برای محاسبه با تکنیک قبلی بهصورت همزمان و ترکیب شده در اختیار داریم
که ترکیب این دو تکنیکِ Signed Distance Field و Surface Cache در آنریل انجین 5 صحنه ای به نام Lumen Scene بوجود میآورد که کاربر قادر هست داخل انجین بهصورت Real Time این بخش رو برای آزمون و خطا مشاهده کند :
خب حالا میرسیم به بخش Reflection در لومن که جالب هست بدونیم لومن برای این بخش نه از فضای اصلی محیط بلکه از فضای Lumen Scene برای محاسبهی بخش ریتریسینگ رفلکشن تحت نرم افزار یعنی محدوده ای که Screen Trace به آن دسترسی ندارد استفاده میکند :
همانطور که در تصویر مشاهده کردید در اینجا شبیه به Screen Space Reflection وقتی آبجکت از صفحه خارج شود، داخل انعکاس دیگر شاهد جزئیات آبجکت مورد نظر نخواهیم بود، اما برعکسِ Screen Space آبجکت مورد نظر از صفحه ناپدید نمیشود و بجای آن شاهد دیدن فضای Lumen Scene از این محیط در انعکاس متریالمان هستیم :
همانطور که مشاهده کردید، این فضا از کیفیت خوبی برای متریال های آینه ای مانند برخوردار نیست که در اینجا نیاز به افزایش رزولیشن Distance Field آبجکت مورد نظر داریم که باعث افزایش Voxel های آبجکت در فضای Lumen Scene خواهد و کمی کیفیت بهتری را ارائه کند که به نظرم فیلد مورد استفادهی اصلی این مورد بیشتر برای سطوح و متریال هایی با سختی و Roughness بیشتر نسبت به سطوح آینه ای برای بهره برداری از کیفیت مناسب خواهد بود، همچنین لومن از پرتو های بیشتری برای سطوح آینه ای مانند استفاده میکند که مسلماً نسبت به سطوح سخت نیازمند بار پردازشی بیشتر خواهد بود .
اما برای اینکه شاهد کیفیت نمایشی بهتری برای Reflection تحت لومن باشیم، در اینجا نیاز به استفاده از لومن تحت Hardware Raytracing داریم که در تنظیمات هر پروژه برای آنریل 5 درصورت دسترسی به کارتهای DXR قابل استفاده است که با استفاده از HW Raytracing قادر هستیم به رفلکشن های با کیفیت تری دسترسی پیدا کنیم که در حال حاضر هدف اصلی HW Raytracing هم برای این بخش تعریف شده است.
سرعت HW Raytracing در حالت عادی حدودا 50 درصد پایینتر هست و حتی اگر آبجکتای Overlapped شده در محیط داشته باشیم ممکن هست محاسبات بسیار سنگینتر بشود که حین طراحی Level تحت ریتریسینگ سخت افزاری لومن باید نسبت به این موارد توجه داشته باشیم؛
اما این رو هم ذکر کنم که اپیک گیم برای نسخهی اصلی آپدیت های بزرگی برای انعطاف پذیری بسیار بیشتر ریتریسینگ سخت افزاری لومن ارائه خواهد کرد که شاهد افزایش کیفیت بیشتر برای این بخش باشیم که این به نوعی میتوان پلی بین کارت گرافیک های ارائه شده قبل و بعد از DXR برای آینده باشیم، آن هم از آنجایی که پشتیبانی از Raytracing برای کنسول های نسل جدید و کارتهای گرافیکی دو نسل اخیر تبدیل به یک استاندارد شده است !
و اما هدف لومن چیست ؟
هدف لومن اجرای نور GI و Reflection دقیق و فیزیکال توسط ریترسینگ در صحنه هایی هست که از میلیاردها میلیارد Triangle و صدها هزار آبجکت با جزئیات بسیار به کمک تکنولوژی Nanite تشکیل شده است
اینکه شاهد اجرای Global Illumination در محیطمان با کیفیت و پرفورمنس مناسب برای نسل بعد هستیم میتواند راه خلاصی برای خداحافظی با روش های محاسبات نوری زمانبر سابق باشد، که در حال حاضر در آنریل انجین 5 شاهد اجرای GI تحت شرایط خود بهصورت Realtime در قبال کیفیت و سرعت به بهترین صورت هستیم که صرفا نباید این تکنیک های نوین و تحت توسعه با GI در موتور های رندرینگ کندِ آفلاین مقایسه شود.
و آخرین نکته اینکه لومن هنوز در حالت WIP به سر میبرد و حتی در حال حاضر هم نسبت به نسخهی Early Access تغییرات زیادی کرده و تا نسخهی اصلی و آپدیت های بعدی دستخوش بهینه سازی و تغییرات فراوان و متفاوتی خواهد شد.
محدودیت حال حاضر در Lumen :
از آنجایی که اجرا و محاسبهی Distance Field فقط برای Static Mesh های صحنه صورت میگیرد، برای همین در حال حاضر لومن قادر به محاسبهی داینامیک برای این بخش نیست و در حال حاضر محاسبهی آبجکتهای داینامیک مثل حرکت کاراکتر و اسکلت بندی آن توسط بخش اول Screen Space Trace انجام میشود که همانطور که میتوان حدس زد با خروج آن آبجکت از صفحهی نمایش شاهد ناپدید شدن تاثیر آن از داخل صحنه خواهیم بود البته که چون Unreal Engine 5 در مرحلهی آلفا و Early Access بهسر میبرد به احتمال زیاد شاهد پشتیبانی و اضافه شدن ویژگی های بیشتر در نسخهی اصلی و آپدیت های بعدی خواهیم بود
لومن بر روی پلتفرم موبایل پشتیبانی نخواهد شد و شاید به احتمال کمی در آینده با فعالیت هایی که شرکت های مختلفی مانند سامسونگ درباره پردازنده های ریتریسینگ موبایل قصد انجامش را دارند ، شاهد تحرک اپیک گیمز در این زمینه که مدت زیادی است که رها شده هم باشیم.
علاوه بر موبایل، پلتفرم VR هم در حال حاضر توسط لومن پشتیبانی نمیشود، بدلیل رزولیشن بالای VR و نیازمندی حداقلی به 70 تا 90 فریم بر ثانیه و اینکه تکنیک پایه Pipeline ِ رندرینگ VR بر روی Forward Shading اجرا میشود آن هم برای کنترل Antialiasing و فریم ریت ثابت، درصورتی که Pipeline پایهی رندرینگِ لومن بر روی Deferred Shading اجرا میشود.
برای فضاهای شبیه سازی معماری حتما نیاز هست به این مورد توجه داشته باشیم که در حین پروسهی Modeling به عنوان مثال برای دیوار های یک ساختمان نیاز هست که هر دیوار برای بخش های مختلف ساختمان از آبجکت جداگانه برای هر دیوار استفاده شود زیرا آبجکت های یک دست با مشکل در محاسبهی Surface Cache مواجه خواهند شد و فقط شاهد اعمال Screen Space Trace در آن هستیم که ممکن است نورپردازی آن بخش از فضای مورد نظر شبیه به SSGI به نظر بیاید و شاهد اختلال در نورپردازی محیط باشیم.
ما در لومن قادر هستیم که از متریال های Emissive به عنوان منبع نوری استفاده کنیم، اما در صورتی که اندازهی منبع نوری کوچک نباشد و شدت منبع نوری بالا نباشد زیرا در غیر این صورت شاهد بوجود آمدن نویز در نورپردازی صحنه خواهیم بود که احتمالا در آینده این محدودیت هم رفع شود.
چرا استفاده از فضای Mesh Distance Field برای محاسبه نور در لومن ؟
به دلیل اینکه آبجکت های High Poly بهمراه متریالهای با جزئیاتشان میتواند برای محاسبات هر پرتور نوری بسیار سنگین باشند آنهم با توجه به قدرت سخت افزاری حال حاضر که در بخش اول بهش اشاره داشتم.
این یعنی پایان کار Bake Lighting و Raster Dynamic Lighting و یا روش های محاسباتی سابق نوری ؟
خیر هرگز، ما هنوز هم پلتفرم های متفاوتی مانند VR و موبایل داریم که از لومن پشتیبانی نمیکنند و یا نسبت به پروژه های مختلف هنوز هم نیاز به روش های محاسباتی سابق هست و هرچه تکنیک های بیشتری برای اجرای شرایط مختلف در دسترس توسعه دهندگان باشد به انعطاف پذیری بیشتر برای پروژه های مختلف کمک میکند و لازم هست ذکر کنم بعد از اینکه در نسخه های اولیهی پایدار به نتایج پایدار و نهایی Lumen و Nanite رسیده شود، این تکنیک های سابق هم مانند Distance Field آپدیت و بهینه سازی فراوان به همراه افزایش کیفیت خواهند داشت و با توجه به سابقهی توسعه و تبادل خیلی خوب بین اپیک گیمز و توسعه دهندگان به احتمال بسیار زیاد همه چیز در آینده و با آپدیت های مختلف دستخوش تغییرات فراوان مثبتی خواهد شد .
خب سعی بنده بر این بود که توضیحات اضافه ای در رابطه با پارامتر ها ارائه نکنم تا از حوصلهی بحث خارج شود، اگر نیاز دارید اطلاعات بیشتری از بخش هایی که ارائه شد توضیحات بیشتری خدمتتون ارائه کنم، داخلِ بخش کامنت های این پست در خدمتتون هستم.
در مبحث بعدی هم میریم سراغ بررسی تکنولوژی هیجان انگیزِ Nanite در آنریل انجین.
نظر شما در رابطه با Lumen چیست ؟
دیدگاه خود را بنویسید