و اینک Ray Tracing

به تفاوت های بین دو تصویر زیر دقت کنید :

تصاویر به صورت In-Game گرفته شده
تصاویر به صورت In-Game گرفته شده
تصاویر به صورت In-Game گرفته شده
تصاویر به صورت In-Game گرفته شده

به نظر میرسد که تصویر اولی ، نمای واضح تری از انعکاس منظره ساختمان ها روی شیشه باشد درصورتی که تصویر دوم نمای کم کیفیت تری را به نمایش می گذارد. اما اشاره به دو نکته دیگر نیز حائز اهمیت است :

  • این دو تصویر هردو روی نمای شیشه ای یک ساختمان و در یک تایم یکسان در زمان بازی گرفته شده
  • در تصویر دوم ، سایه شخصیت اصلی روی شیشه واضح تر است، درصورتی که در تصویر اول، تقریبا سایه نداریم

بنابراین، چطور امکان دارد که با وجود شرایط کاملا یکسان، دو انعکاس مختلف را مشاهده کنیم؟

اگر کمی دوربین را بچرخانیم و به نمای روبه رویی ساختمان نیز نگاهی بیندازیم، با همچین منظره ای مواجه می شویم :

نمای روبه رویی ساختمان
نمای روبه رویی ساختمان

آیا تصویر بالا، کمی آشنا به نظر نمیرسد؟ با نگاهی به تصویر دوم در اول مقاله، متوجه شباهت انعکاس شیشه ها و نمای روبه رویی می شویم، درصورتی که بین نمای روبه رو و انعکاس تصویر اول، هیچ شباهتی مشاهده نمی شود. انگار که در تصویر اول، با نوعی محتوای از پیش آماده شده مواجه ایم ولی در تصویر دوم، دنیای بازی پویاتر به نظر میرسد. علت این تفاوت، چیزی نیست جز Ray tracing، تکنولوژی ای که در ذات خود، چیز جدید و نوظهوری نیست اما اخیرا با رایج شدن در دنیای ویدیو گیم ها، انقلابی در نزدیک تر کردن بازی ها به دنیای واقعی ایجاد کرده است.

برای آشنایی بیشتر با این مفهوم و کاربردهای آن در دنیای سینما و ویدیو گیم ها، اشاره به دو مفهوم متقدم بر Ray Tracing، موجب فهم بهتر آن می شود. پیش از به وجود آمدن Ray Tracing، برای به تصویر کشیدن هرچه بهتر اثر نور روی یک صحنه فیلم یا دنیای گیم، از دو تکنیک Rasterization و Ray Casting استفاده می شد.

ولی Rasterization چیست ؟

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

اما با قوی تر شدن سخت افزار، شرایط برای انجام تکنیک های پیچیده تر که امکان انجام محاسبات در لحظه یا real-time را داشتند، فراهم شد. یکی از ساده ترین ولی درعین حال محبوب ترین این تکنیک ها، تکنیک Ray Casting است که توسط John Carmack، برنامه نویس افسانه ای و CTO سابق شرکت متا، در یکی از بازی های کلاسیک تاریخ صنعت ویدیو گیم، Wolfenstein 3D به کار گرفته شد.

Wolfenstein 3D
Wolfenstein 3D

اما Ray Casting چگونه کار میکند؟

در این روش که از طبیعت پرتویی نور الهام گرفته شده است، مسیر پرتو های نور از کانون دوربین به سمت محیط اطراف، دنبال شده و از این طریق مشخص می شود که در هر پیکسل روی صفحه، از طریق این پرتوی نور، چه چیزی قابل مشاهده است. البته باید به این نکته توجه داشت که، در روش Ray casting، هندسه محیطی که پرتوی نور در آن حرکت میکند، باید نسبتا ساده باشد و نمیتواند با هر شکل دلخواه از محیط اطراف کار کند. محدودیت دیگر این روش، ناتوانی در دنبال کردن مسیر پرتوهای ثانویه نور است که در اثر تعامل با محیط به وجود می آیند. از تعامل نور با محیط اطراف، چندین پدیده نوری حاصل می شود:

  • گذر
  • انعکاس
  • شکست
  • تفرق
  • جذب
  • پراکندگی
پدیده های تعامل نور با ماده
پدیده های تعامل نور با ماده


بنابراین، روش Ray casting با وجود محدودیت های ذکر شده، توانایی تولید تصاویر یا صحنه های بسیار واقع گرایانه را ندارد ولی کماکان نسبت به روش Rasterzation، گامی رو به جلو به حساب می آید. برای غلبه بر محدودیت روش Ray Casting، تکنیک Ray Tracing مطرح شد که عیوب و محدودیت های روش پیشین را ندارد و قابلیت ارائه محیطی بسیار واقع گرا را داراست ولی محدودیت محاسباتی زیادی دارد. در برخی تخمین ها، تعداد عمل هایی که در روش Ray Tracing برای رندر کردن یک تصویر یا صحنه باید انجام شود، از 10 تا 1000 برابر روش Ray casting، متغیر است.

دیاگرام روش Ray Tracing
دیاگرام روش Ray Tracing


اما اگر اخبار تکنولوژی را دنبال کرده باشید، احتمالا میدانید که امروزه، کارت های گرافیک RTX شرکت انویدیا، دارای سخت افزاری است که قابلیت انجام Ray Tracing به صورت لحظه ای را داراست و حتی در دیوایس های قابل حمل مثل لپتاپ ها نیز، این کارت های گرافیک وجود دارند که این خود انقلابی دیگر در زمینه وارد کردن چنین تکنولوژی پیشرویی در ابزارهای روزمره است. تکنولوژی ای که قبلا، فقط برای رندر تصاویر یا صحنه های CGI (Computer Generated Image) ،در صنعت سینما استفاده میشد، آنهم با استفاده از منابع عظیم پردازشی و کامپیوترهای فوق سریع.

ولی چطور امکان انجام پردازش های سنگینی مثل Ray tracing، روی دستگاه های خانگی و قابل حمل فراهم شده؟

در پاسخ به این سوال، باید به این نکته اشاره کنیم که لفظ "پردازش Ray tracing در لحظه"، برای دستگاه های خانگی، چیزی بیش از یک حقه تجاری و تبلیغاتی نیست! واقعیت امر، این است که سخت افزاری که به صورت حقیقتا لحظه ای، بتواند چنین محاسباتی را انجام دهد، چیزی در حد کامپیوترهای عظیم یا مجموعه سرورهای فوق سریعی است که احتمالا یا اخبار آنرا شنیده یا تصاویری از آنها را دیده باشید.

اتفاقی که در حقیقت می افتد، این است که برای تحقق چنین محاسباتی روی ماشین های خانگی، باید از برخی تکنیک های هوشمندانه تقریب و حتی تکنیک های مرتبط با Rasterzation یا پردازش از پیش آماده شده، استفاده کرد. به این معنا که تصاویری که در ابتدای مقاله مشاهده میکنید، تنها کاربرد خیلی محدودی از Ray Tracing را به نمایش میگذارند. ولی همین کاربرد محدود نیز، به افزایش واقع گرایی تصاویر و صحنه ها، کمک شایانی میکند.

در این مقاله، سه تکنیک نورپردازی برای رندرینگ را مورد بررسی قرار دادیم و با رعایت توالی زمانی ارائه هرکدام از این تکنیک ها، مزایا و معایب هرکدام را بررسی کردیم.

تصاویر ابتدای مقاله، به صورت واقعی و درون گیم گرفته شده اند.