امروز میخواهیم در مورد یک بحث بسیار جذاب و هیجان انگیز به نام VXGI صحبت کنیم. شرکت Nvidia تولید کننده کارت های گرافیک در سری های GTX Geforce , Quadro , Tesla , Grid و … به صورت اختصاصی در بخش کارت های گیمینگ از سری Geforce خود، کتابخانه ای را به نام NVIDIA VXGI معرفی کرد که به سرعت در مباحث شبیه سازی و رندرینگ در موتورهای گیمینگ و در خود بازیهای نسل جدید مورد استقبال قرار گرفت.
Nvidia VXGI یک الگوریتم روشنایی عمومی یا همان global illumination می باشد که وظیفه محاسبه روشنایی و نورپردازی کل پرتوهای نور در یک صحنه را به عهده دارد. این وظیفه همانطور که میدانید شامل نورهای بازگشتی بروی سطوح می باشد که به نورهای ثانویه نیز معروف هستند و ما آنها را به نام های reflection light می شناسیم. همانطور که میدانید اضافه شدن GI به یک صحنه بشدت به حس واقع گرایانه آن کمک میکند و در حقیق مرز یک تصویر غیر واقعی و واقعی را میتوان با GI آن شناخت.
Nvidia VXGI
در موتورهای گیمینگ مانند unreal engine و unity و … ، محاسبه GI به روش های شبیه سازی شده انجام میشود. این شبیه سازی به این معنی است که تا حد امکان قوانین فیزیکی رعایت شده و سعی میشود مانند یک موتور رندرینگ offline ، عملیات محاسبه global illumination با دقت بالایی انجام شود . شرکت nvidia برای ارتقا این محاسبات، روشی را ابداع کرده است که به نام VXGI یا Voxel Global Illumination شناخته میشود. در این روش که یک روش شبیه سازی GI به حساب می آید، صحنه سه بعدی به Voxel تبدیل میشود و پرتوهای نور مستقیم و بازتابی در آن محاسبه میشود.
تمام کاری که در VXGI انجام میشود دقیقا به همین فرایند voxelization یعنی تبدیل مدلهای سه بعدی در یک صحنه کامل به voxel شروع میشود. برای اینکه محاسبه الگوریتم global illumination در این روش به درستی انجام شود، VXGI در سه مرحله به صورت Opacity Voxelization سپس Emittance Voxelization و در نهایت Cone Tracing جهت محاسبه پرتوها و بازتاب های آن انجام میشود.
به صورت خلاصه ، در مرحله اولOpacity Voxelization ، Geometry های صحنه به یک Map تبدیل میشوند که میتوان آن را به فضای voxel قابل دیدن encode کرد.
Related posts:
این مرحله با Projection planning شروع شده و فرایند تبدیل صحنه سه بعدی به یک Map را شروع میکنند. Nvidia برای این مرحله از روش rasterization با الگوریتم MSAA یا همان Multisampling Anti Aliasing کمک می گیرد. پس همانطور که تکرار کردم، در مرحله اول صحنه سه بعدی به دیتایی تبدیل میشود که قابلیت encode شدن به فضای قابل دید voxel را دارد.
در مرحله دوم Multisampling Anti Aliasing ، محاسبات بروی voxel ها شروع میشود. اگر در بالا دقت کرده باشید، عرض کردم که voxel های قابل دیدن. منظور از قابل دیدن میزان کدری یا Opacity آنهاست که به معنی این است که دیتای voxel ایجاد شده، آیا در فرایند نورپردازی و برخورد پرتوهای نور قابل محاسبه است یا خیر. ممکن است یک بخش از voxel میزان opacity لازم برای محاسبه و برخورد پرتوهای نور را نداشته باشد. در نتیجه به صورت کامل از محاسبات global illumination به کنار میرود. در مرحله دوم، ابتدا ارزش Opacity هر دیتا مورد ارزیابی قرار میگیرد.
مرحله سوم و آخر ، Cone Tracing، محاسبه و ردگیری پرتوهای نور به منظور تولید GI می باشد. در این روش از الگوریتم surface irradiance به منظور tracing پرتوهای نور استفاده میشود. هر ray از نور به صورت مجزا مورد محاسبه قرار گرفته و در نهایت روشنایی کل صحنه بدست می آید.
به منظور آشنایی با الگوریتم محاسبه Cone Tracing میتوانید تصویر زیر را مشاهده نمایید.
نتیجه نهایی بدست آمده از پردازش الگوریتم Cone Tracing به پیدا شدن نورهای indirect diffuse و indirect specular منتهی میشود. در نتیجه این روش یک شبیه سازی کامل و بسیار نزدیک به واقعیت از GI را ایجاد میکند
در نهایت رندر صحنه را میتوانید با محاسبه GI توسط روش ابداعی VXGI با رندرینگ در I-Ray در تصویر زیر مقایسه کنید.
اما VXGI برای کاربران CG چگونه قابل استفاده خواهد بود؟
اگر شما قصد برنامه نویسی و کدنویسی ندارید، میتوانید بدون نیاز به دانش استفاده از کتابخانه VXGI، این قابلیت را در موتور Unreal در اختیار داشته باشید. در نتیجه میتوانید global illumination را در unreal engine با استفاده از VXGI محاسبه و استفاده نمایید. نتیجه کار بسیار شگفت انگیز خواهد بود. به تصاویر و ویدیوهای زیر نگاه کنید و به راحتی از VXGI استفاده نمایید.