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

واقعیت در مَجاز!
از نگاه فنی، نور در بازیسازی به مانند یک پدیده فیزیکی واقعی عمل نمیکند، بلکه با محاسبات ریاضی بسیار پیچیده سعی دارند یک نسخه بهینه و واقعگرایانه را نمایش دهند. چنین رخدادی بیشتر به یک شبیهسازی از نور شباهت دارد. آنچه در صفحه نمایشگر جلوه میکند چیزی جز اعداد نیستند! بازیسازها از مدلی به نام نور هندسی (Geometric Optic) استفاده میکنند؛ یعنی فرض کنیم نور به صورت یک خط مستقیم حرکت و در صورت برخورد با یک سطح، امکان “بازتاب (Reflection)”، “شکست (Refraction)” و “پخش (Scattering)”، نور وجود دارد. برای شبیهسازی، بازیها از مفهوم کلیدی و بسیار مهم ریاضیات یعنی: بردار (Vector) استفاده میکنند. بردار یا جهت مشخص، به مانند یک پیکان خیالی دارای جهت و مقدار است. نور، جهت تابش نور، نگاه دوربین و حتی موقعیت سطحها در بازی همگی توسط بردار نمایش داده میشوند. برای فهمیدن چگونگی برخورد نور با یک سطح، باید بدانیم که سطح در چه جهتی قرار گرفته.

در تمامی سطوح یک “بردار نرمال (Normal Vector)” استفاده میشود، پیکانی عمود بر سطح، که جهت سطح را مشخص میکند. از سوی دیگر، بردار نور (Light Vector)، که جهت تابش نور به سطح را نشان میدهد. برای فهمیدن مقدار نور به سطح رسیده، زاویه بین این دو بردار مهم است. این زاویه با یک محاسبه ریاضی به نام ضرب داخلی (Dot Product)، اندازهگیری میشود. اگر نور مستقیم بتابد، زاویه صفر و ضرب داخلی برابر با یک خواهد بود یعنی سطح کاملا روشن است. اما اگر از زاویه کجتری بتابد، عدد کمتر و حاصل به تار دیده شدن سطح منجر میشود. با این همه نور به پخش شدگی ختم نمیشود. وقتی سطح براق باشد، بخشی از نور بازتاب شده با این تفاوت که بردار “بازتاب نور (Reflection Vector)” و بردار نگاه دوربین (View Vector) باهم مقایسه میشوند. اگر دو بردار در یک راستا باشند آن نقطه بشدت میدرخشد؛ به چنین پدیدهای بازتاب آیینهای (Specular Reflection)، میگویند. شدت درخشش در ضریبی به نام: براقیت (Shininess)، بستگی دارد.

منابع نوری
در دنیای واقعی نور از منابع مختلفی خودش را نشان میدهد. این منابع میتواند خورشید، لامپ، شمع، آتش یا مواردی دیگر باشد. در بازیسازی هم باید شما منابع نور خود را شبیهسازی کنید که هر کدام قاعدتا رفتار متفاوتی در پیش دارند. اجازه دهید برای درک مطلب منابع نور به ۳ دسته تقسیم شوند:
نور موازی یا نور جهت دار (Directional Light):
این نور به مانند نور خورشید است. یعنی فرض کنید پرتوهای نور از یک جهت خاص و البته موازی وارد صحنه میشوند. در این دسته نور هیچ نقطه شروع دقیقی ندارد تمام صحنه به یک شکل روشن خواهد شد. تیم توسعه برای این نور فقط یک جهت (Direction)، تعریف میکند نه یک موقعیت مکانی. این تکنیک بیشتر برای آثار جهانباز کاربرد دارد چرا که فارغ از هرچیزی همه اجسام در بازی، نور را از زاویهای یکسان دریافت میکنند.
نور نقطهای (Point Light):
لامپ یا یک شمع مثال مناسبی برای این دسته خواهد بود. این منبع در یک نقطه خاص قرار دارد (لامپ آویزان شده از سقف یا شمعی بر روی میز) و توانایی پخش کردن نور در یک فضای خاص را دارد. هرچقدر از نور فاصله بگیریم از شدت آن کاسته میشود.
نور مخروطی یا اسپات (ُSpot Light):
این نور به مانند یک چراغقوه یا پروژکتور عمل میکند. از یک نقطه شروع اما فقط در یک جهت مشخص و در قالب مخروط نور تابیده میشود. فکر میکنم Alan Wake مثال مناسبی باشد. شما در موقعیتی چراغ قوه را بهدست میگیرید، چراغ قوه در جهت دستوری (طبق خواسته شما)، تابیده و گستره نوری از مرکز به اطراف باز میشود. چنین چیزی شامل دو زاویه داخلی (یعنی محدودهای که نور با شدت بالا تابیده) و زاویه خارجی (محدودهای که نور به تدریج محو میشود) است.
بد نیست بدانید:
امروز از روشی به نام (Image-Based Lighting) IBL استفاده میشود. این نورپردازی اجازه میدهد برای روشنسازی یک تصویر سه بعدی با استفاده از اطلاعات نوری و رنگی، یک تصویر پانورامای واقعی یا شبیهسازی شده شکل بگیرد. این تصاویر معمولا از نوع HDRI است چرا که اطلاعات روشنایی بسیار بیشتری نسبت به یک تصویر معمولی دارد. پس شما به جای استفاده از چند منبع نور، از کل تصویر محیط به عنوان منبع نور استفاده میکنید. پس برای یک مدل سه بعدی (فرضا یک خودرو)، شما ابتدا از یک آسمان خراش یک تصویر ۳۶۰ درجهای عکس میگیرید و این عکس به عنوان یک منبع نور در مدلسازی شما استفاده میشود. نور آفتاب در تصویر باعث روشنایی در سطح، رنگ آسمان دلیل پویایی بیشتر و ساختمانها انعکاس بهتری ارائه میدهند. IBL یک شبیهساز بسیار دقیق است.

بازتاب
نور هنگام برخورد با سطوح مختلف دارای رفتارهای گوناگون است. این نور ممکن است پخش، بازتاب یا حتی به درون جسم نفوذ کند. اما ارائه چنین فرایندی تا امروز غیرممکن بنظر میرسد. در بازیسازی این مسائل باید به شکل سادهتری پیاده شوند. در اینجا با مفهومی به نام: مدلهای نورپرزدای آشنا میشویم. مدلهای نورپردازی قواعدی هستند که مشخص میکنند یک جسم سه بعدی در مقابل نور باید چه واکنشی نشان دهد. با این قواعد یک سنگ، پوست بدن یا اشیای دیگر با ظاهری متفاوت به مخاطب نمایش داده میشوند. برای مثال در “در مدل لامبرت (Lambertian Reflection)”، اگر به سطح یک دیوار سنگی نگاهی بیاندازید، متوجه خواهید شد این نور به شکل یکنواخت و بدون بازتاب خاصی پخش شده است. در این مدل، زاویه نگاه دوربین یا مخاطب اهمیتی ندارد بلکه زاویه تابش به شئ در راس امور قرار دارد. مدل لامبرت، سریع، بدون بازتاب و مناسب اشیا غیر براق است. سطح سنگ، خاک و این دسته موارد از کاربردهای لامبرت هستند.
حالا تصور کنید به یک سطح خیس شده نگاه میکنید. در این سطح یک نقطه روشن و براق وجود دارد که با جابهجایی شما این نقطه تغییر میکند. این پدیده Specular Highlight گفته و توسط مدل نورپردازی فونگ (Phong Reflection)، استفاده میشود. این مدل سعی دارد بفهمد نور از چه زاویهای به سطح میتابد و آیا این نور طوری بازتاب میشود که در چشم مخاطب جلوه کند یا خیر. مدل فونگ ارتباط عمیقی با دوربین بازی دارد چرا که زاویه دوربین نحوه و شدت درخشندگی را تعیین میکند.

PBR
با واقعگرایی آثار امروزی همهچیز باید به خوبی جلوه کند. از طراحی شخصیتها گرفته تا محیط و هرآنچه در این پروسه نیاز است. در موتورهای بازیسازی امروزی عنصری به اسم (Physically-Based Rendering) PBR است؛ سیستمی که سعی دارد نور را مطابق قوانین فیزیکی شبیهسازی کند. PBR روشی مبتنی بر فیزیک، برخلاف مدلهای سنتی به مانند فونگ، روشی است که در آن نور و عناصر بازی به شکلی طراحی میشوند که بازتاب، جذب و پخش نور مطابق واقعیت باشد. پس دیگر بحث محاسبه نور مطرح نخواهد شد بلکه باید ببینیم ماده چگونه به نور پاسخ میدهد. اما چرا PBR؟ تا پیش از ظهور این فناوری، توسعهدهندگان برای هر سطح نور باید یک شکل تقریبی را محاسبه میکردند. مثلا برای یک فلز باید خودشان نقاط براق را روی بافت میگذاشتند. یا اگر جسم زِبر بود باید به نحوی این بازتاب نور در این جسم را محاسبه میکردند. چنین فرایندی قطعا عذاب آور خواهد بود. جدا از سختی کار، این مدل نوری در همه حالات عملکرد مناسبی نداشت. در شب ممکن است یک شئ نور بهتری از خود نشان دهد اما در روز این فرایند تغییر کند. درواقع پایداری در کار نیست! با PBR هر محیط یا ساعت دیگر تأثیری در بازتاب نور ندارد، هرچیزی به مانند واقعیت رفتار میکند. پس با نگاه به یک جسم، حتی بدون لمس آن میتوان فهمید که این یک فلز است یا چوب چون رفتار ماده دیگر تغییر نمیکند.
لازم به ذکر است، PBR یک حالت پایه در نورپردازی یا بهتر است بگوییم یک استاندارد محسوب میشود. با این حال PBR در کنار فناوریهای امروزی مثل، ردیابیپرتو (Ray tracing) و تابش حجمی (Volumetric Lighting)، عملکرد بهتری از خود نشان میدهد.

سایهها
بدون سایه نور معنایی ندارد چرا که مکمل یکدیگر هستند. بدون سایه اشیا بدون احساس و یک نمایش تو خالی بنظر میرسند. سایهها باعث میشوند یک جسم به صورت طبیعی و سهبعدی خودنمایی کنند. شاید عجیب یا حتی بیاهمیت باشد اما سایهای که از یک درخت نمایش داده میشود نمایانگر ساعات طی شده در بازی است یا حتی خورشید در کدام نقطه قرار دارد. سایهها برخلاف نور، نیاز به دقت و خلاقیت بیشتری دارند. برای خلق یک سایه دقیق باید محاسبات سنگینی انجام شود که در این صورت، ممکن است بر دیگر اجزای بازی تأثیر بگذارد؛ فرضا فریمریت پایین آمده و بازی سنگین شود. اینجاست که بین کیفیت بصری و اجرای روان بازی باید تعادل برقرار شود. علاوه بر این سایهها در خدمت روایت و احساسات هستند. در یک بازی ترسناک این سایهها هستند که مسئولیت ترس به عهده میگیرند. حال میخواهد سایهای از چراغ لرزان باشد یا شخصی که پشت در کمین کرده باشد.
چند مدل سایه:
نقشهبرداری سایه (Shadow Mapping):
در این روش ابتدا از نگاه منبع نور، یک تصویر سیاه و سفید گرفته و نشان میدهد کدام بخش دیده (روشن) و کدام بخش پنهان (تاریک) است.
سایهنگاری لایهای (Cascaded Shadow Maps):
نسخه بهبود یافته ” نقشهبرداری سایه ” است که برای نوریهایی مانند نور خورشید، که باید در فواصل مختلف سایه دقیق بدهند استفاده میشود. در این روش صحنه به لایههای نزدیک، میانه و دور تقسیم و هرلایه سایه با دقت محاسبه میشوند.
سایههای ردیابی شده با پرتو (Ray Tracing): پیشرفتهترین روش فعلی است. در این روش، پرتوها بررسی میکنند یک نقطه دقیقا زیر نور است یا تنها بخشی از نور به آن میرسد. پس با چنین فناوری اجسام در آینه، آب، فلز یا حتی چشمان شخصیت اصلی یا دیگر شخصیتها بهخوبی بازتاب دهنده هستند. در این حین این فناوری بدون ایراد نیست. باید اعتراف کنیم که این فناوری عاری از ایراد نیست. سنگینی پردازش و زمانبر بودن برای توسعهدهندگان از نکات منفی این فناوری هستند.
هرآنچه در این مقاله گفته شد صرفا قطرهای از دریای نور و سایه محسوب میشود. محاسبات ریاضی، فرمولها، حل مشکلات، معایب و مزایای هر کدام از این روشها نیاز به بررسی بسیار دقیقی دارند که در این مقاله نمیگنجد. از اینکه تا انتهای این مقاله بنده را همراهی کردهاید سپاسگزارم.
منبع خبر: گیم فا