امروز میخواهیم در مورد یک بحث بسیار جذاب و هیجان انگیز صحبت به نام VXGI صحبت کنیم. شرکت Nvidia تولید کننده کارت های گرافیک در سری های GTX Geforce , Quadro , Tesla , Grid و ... به صورت اختصاصی در بخش کارت های گیمینگ از سری Geforce خود، کتابخانه ای را به نام VXGI معرفی کرد که به سرعت در مباحث شبیه سازی و رندرینگ در موتورهای گیمینگ و در خود بازیهای نسل جدید مورد استقبال قرار گرفت.

Nvidia VXGI یک الگوریتم روشنایی عمومی یا همان global illumination می باشد که وظیفه محاسبه روشنایی و نورپردازی کل پرتوهای نور در یک صحنه را به عهده دارد. این وظیفه همانطور که میدانید شامل نورهای بازگشتی بروی سطوح می باشد که به نورهای ثانویه نیز معروف هستند و ما آنها را به نام های reflection light می شناسیم. همانطور که میدانید اضافه شدن GI به یک صحنه بشدت به حس واقع گرایانه آن کمک میکند و در حقیق مرز یک تصویر غیر واقعی و واقعی را میتوان با GI آن شناخت. در موتورهای گیمینگ مانند unreal engine و unity و ... ، محاسبه GI به روش های شبیه سازی شده انجام میشود. این شبیه سازی به این معنی است که تا حد امکان قوانین فیزیکی رعایت شده و سعی میشود مانند یک موتور رندرینگ offline ، عملیات محاسبه GI با دقت بالایی انجام شود . شرکت nvidia برای ارتقا این محاسبات، روشی را ابداع کرده است که به نام VXGI یا Voxel Global Illumination شناخته میشود. در این روش که یک روش شبیه سازی GI به حساب می آید، صحنه سه بعدی به Voxel تبدیل میشود و پرتوهای نور مستقیم و بازتابی در آن محاسبه میشود.

nvidia vxgi voxel global illumination real time unreal engine rendeirng gi 3d scene رندرینگ گلوبال روشنایی نور صحنه گرافیک dfmrendering 01

تمام کاری که در VXGI انجام میشود دقیقا به همین فرایند voxelization یعنی تبدیل مدلهای سه بعدی در یک صحنه کامل به voxel شروع میشود. برای اینکه محاسبه الگوریتم GI در این روش به درستی انجام شود، VXGI در سه مرحله به صورت Opacity Voxelization سپس Emittance Voxelization و در نهایت Cone Tracing جهت محاسبه پرتوها و بازتاب های آن انجام میشود.
به صورت خلاصه ، در مرحله اولOpacity Voxelization ، Geometry های صحنه به یک Map تبدیل میشوند که میتوان آن را به فضای voxel قابل دیدن encode کرد. این مرحله با Projection planning شروع شده و فرایند تبدیل صحنه سه بعدی به یک Map را شروع میکنند. Nvidia برای این مرحله از روش rasterization با الگوریتم MSAA یا همان Multisample Anti Aliasing کمک می گیرد. پس همانطور که تکرار کردم، در مرحله اول صحنه سه بعدی به دیتایی تبدیل میشود که قابلیت encode شدن به فضای قابل دید voxel را دارد.

nvidia vxgi voxel global illumination real time unreal engine rendeirng gi 3d scene رندرینگ گلوبال روشنایی نور صحنه گرافیک dfmrendering 02
در مرحله دوم Emittance Voxelization ، محاسبات بروی voxel ها شروع میشود. اگر در بالا دقت کرده باشید، عرض کردم که voxel های قابل دیدن. منظور از قابل دیدن میزان کدری یا Opacity آنهاست که به معنی این است که دیتای voxel ایجاد شده، آیا در فرایند نورپردازی و برخورد پرتوهای نور قابل محاسبه است یا خیر. ممکن است یک بخش از voxel میزان opacity لازم برای محاسبه و برخورد پرتوهای نور را نداشته باشد. در نتیجه به صورت کامل از محاسبات GI به کنار میرود. در مرحله دوم، ابتدا ارزش Opacity هر دیتا مورد ارزیابی قرار میگیرد.

images/softnews/30/nvidia-vxgi-voxel-global-illumination-real-time-unreal-engine-rendeirng-gi-3d-scene-رندرینگ-گلوبال-روشنایی-نور-صحنه-گرافیک-dfmrendering-03.jpg

مرحله سوم و آخر ، Cone Tracing، محاسبه و ردگیری پرتویهای نور به منظور تولید GI می باشد. در این روش از الگوریتم surface irradiance به منظور tracing پرتوهای نور استفاده میشود. هر ray از نور به صورت مجزا مورد محاسبه قرار گرفته و در نهایت روشنایی کل صحنه بدست می آید.

images/softnews/30/nvidia-vxgi-voxel-global-illumination-real-time-unreal-engine-rendeirng-gi-3d-scene-رندرینگ-گلوبال-روشنایی-نور-صحنه-گرافیک-dfmrendering-04.jpg
به منظور آشنایی با الگوریتم محاسبه Cone Tracing میتوانید تصویر زیر را مشاهده نمایید.

images/softnews/30/nvidia-vxgi-voxel-global-illumination-real-time-unreal-engine-rendeirng-gi-3d-scene-رندرینگ-گلوبال-روشنایی-نور-صحنه-گرافیک-dfmrendering-05.jpg
نتیجه نهایی بدست آمده از پردازش الگوریتم Cone Tracing به پیدا شدن نورهای indirect diffuse و indirect specular منتهی میشود. در نتیجه این روش یک شبیه سازی کامل و بسیار نزدیک به واقعیت از GI را ایجاد میکند

images/softnews/30/nvidia-vxgi-voxel-global-illumination-real-time-unreal-engine-rendeirng-gi-3d-scene-رندرینگ-گلوبال-روشنایی-نور-صحنه-گرافیک-dfmrendering-06.jpg

در نهایت رندر صحنه را میتوانید با محاسبه GI توسط روش ابداعی VXGI با رندرینگ در I-Ray در تصویر زیر مقایسه کنید.

images/softnews/30/nvidia-vxgi-voxel-global-illumination-real-time-unreal-engine-rendeirng-gi-3d-scene-رندرینگ-گلوبال-روشنایی-نور-صحنه-گرافیک-dfmrendering-07.jpg
اما VXGI برای کاربران CG چگونه قابل استفاده خواهد بود؟
اگر شما قصد برنامه نویسی و کدنویسی ندارید، میتوانید بدون نیاز به دانش استفاده از کتابخانه VXGI، این قابلیت را در موتور Unreal در اختیار داشته باشید. در نتیجه میتوانید GI را در unreal engine با استفاده از VXGI محاسبه و استفاده نمایید. نتیجه کار بسیار شگفت انگیز خواهد بود. به تصاویر و ویدیوهای زیر نگاه کنید و به راحتی از VXGI استفاده نمایید.

 

images/softnews/30/nvidia-vxgi-voxel-global-illumination-real-time-unreal-engine-rendeirng-gi-3d-scene-رندرینگ-گلوبال-روشنایی-نور-صحنه-گرافیک-dfmrendering-08.jpg

images/softnews/30/nvidia-vxgi-voxel-global-illumination-real-time-unreal-engine-rendeirng-gi-3d-scene-رندرینگ-گلوبال-روشنایی-نور-صحنه-گرافیک-dfmrendering-09.jpg