نویسنده: مرتضی کارگر
// پنجشنبه, ۲۳ تیر ۱۴۰۱ ساعت ۲۲:۲۹

دریایی از طلا؛ نگاهی بر فرایند توسعه بیابان ماسه ای در بازی Journey

از شهر‌های عظیم و پوشش‌های گیاهی خیره‌کننده گرفته تا کاراکتر‌هایی که ما را همراهی می‌کنند، همگی چالش‌های فنی و فکری زیادی را برای بازیسازان به همراه داشته‌اند. در این مقاله به سراغ بازی Journey و شن‌های روان آن رفته‌ایم.

Journey از آن بازی‌های خوش‌ساختی بود که برای اولین‌بار و به‌صورت انحصاری برای پلی استیشن ۳ و در سال ۲۰۱۲ روانه‌بازار شد. این بازی با اتمسفر آرامش‌بخش و دوست‌‌داشتنی خود مورد تحسین قشر بزرگی از منتقدین و گیمرها قرار گرفت. هارمونی و هماهنگی کاملی بین اجزای این بازی قرار داشت و زیبایی محسور کننده‌ دنیای آن زبان‌زد بود. در بخشی از نقد زومجی بر بازی Journey می‌خوانیم که:

در Journey همه‌چیز مانند همان کانسپت‌هاست، انگار همان چیزی که هنرمند روی قلم و کاغذ یا تبلت‌های طراحی کشیده مستقیماً به یک محیط سه‌بعدی و تعاملی تبدیل شده است. شن و ماسه‌ای که زیر نور خورشید برق می‌زنند دریایی از طلا را تداعی می‌کنند، زیرزمین مخوفی که ...

با خواندن این نقد و نقدهای دیگر غیرممکن است که تحسینی دررابطه با محیط‌های درون بازی و به‌خصوص محیط بیابانی آن نشنوید. با‌اینکه در سال ۲۰۲۲ هستیم و ۱۰ سال از انتشار اولیه این بازی گذشته است اما همچنان کمتر بازی را می‌توان یافت که به این شکل و کیفیت محیطی بیابانی را به‌تصویر کشیده باشد.

سازندگان محیط یک بیابان را بهترین مکان برای بیان مفاهیم آرامش‌بخش خود می‌دانستند

ماجرا به آن‌جایی بازمی‌گردد که اعضای تیم به‌دنبال ترسیم محیطی بودند که در آن به‌توانند بیشترین حس گریز از دنیای مملو از تکنولوژی این‌روزها را برای بازیکنان فراهم‌کنند و برای همین درنهایت پهنه‌ی وسیعی از یک بیابان پر از ماسه نظر آن‌ها را به‌خود جلب کرد. گوشه‌ای از نتیجه‌ی نهایی این هدف‌گذاری را می‌توانید در ویدیو زیر که چند دقیقه آغازین بازی را نشان می‌دهد به‌خوبی مشاهده کنید.

مثل همیشه مرحله اول کار پس از انتخاب ساختار کلی بازی را مرحله تحقیق‌وپژوهش تشکل می‌داد. تمامی اعضای این تیم کوچک سفری چند روزه به کالیفرنیای جنوبی داشتند تا در خلال این سفر به‌توانند منابع لازم برای ترسیم یک بیابان ماسه‌ای را جمع‌آوری کنند.

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

اعضای تیم بازی jounrey در ساحل کالیفرنیا

با تمامی این‌موارد آن‌ها از همان ابتدا می‌دانستند که هدف‌نهایی دستیابی به آنچه که در واقعیت وجود دارد نیست و آن‌ها صرفا به‌دنبال ترسیم حالتی واقعی‌گونه از یک بیابان ماسه‌ای هستند. برای همین بعدها در صحبت‌های اعضای تیم به‌ این نکته اشاره شده بود که آن‌ها تقریبا تا جلورفتن بخش‌ زیادی از مراحل ساخت بازی و دنیای بیابانی آن سراغ تطبیق‌دادن آن با عکس‌هایی که در آن سفر گرفته‌بودند نرفتند و آن حس‌وحال اولیه منبع اصلی و الهام‌بخش کارهای آن‌ها بوده است.

برای رسیدن به آن‌ چیزی که در ویدیو بالا مشاهده کرده‌اید، کم‌وبیش ۶ مرحله کار فنی برای آماده‌سازی ماسه‌های درون بازی انجام گرفته‌است که در ادامه به بررسی تک‌تک آن‌ها می‌پردازیم.

۱.مشاهده‌‌ دانه‌بندی ماسه در فواصل

آخرین لایه‌ای که به ظاهر ماسه‌ها اضافه‌شد، Sharp Mips نام داشت. Mip که در دنیای گرافیک رایانه‌ای به آن Mipmap هم می‌‌گویند در اصل خلاصه‌شده‌ی کلمه‌ی لاتین Multum in Parvo به‌معنای «زیاد در کم» است. با‌اینکه توضیح خاصی برای این نام‌گذاری ارائه نشده است اما می‌توانیم این‌گونه حدس بزنیم که با‌توجه به هدف این تکنیک که جلوگیری از قراردادن بی‌مورد جزییات زیاد در یک وسعت کم است، استفاده از این اصطلاح لاتین چندان بی‌معنی هم جلوه نمی‌کند. از هر چیزی که دور می‌شویم اندازه آن کوچک می‌شود و بخش کوچک‌تری از صفحه مانیتور را به‌خود اختصاص می‌دهد. حال اگر تمامی جزییات اولیه مثلا یک شی را همچنان نگه داشته باشیم، در‌حال نمایش‌دادن جزییات خیلی زیادی در یک بخش خیلی کوچکی از تصویر هستیم که شاید قابل تشخیص هم نباشد ولی همچنان در‌حال مصرف منابع سخت‌افزاری سیستم شما است.

Jounrey محصولی برای نسل هفتم کنسول‌های بازی است و منابع سخت‌افزاری و نرم‌افزاری محدود آن زمان را نباید فراموش کرد

اهمیت مقوله Mips در این است که با‌استفاده از آن می‌توانیم از جزییات در فاصله‌های دور از بازیکن کم کنیم. جزییات یک شی بسته به اندازه‌ی و شکل‌ظاهری آن صرفا در فاصله‌ها‌ی مشخصی قابل مشاهده است و از یک نقطه به‌بعد می‌توانیم آن‌ها را حذف یا دستکاری کنیم. برای مثال عکس پایین یک نمونه‌ Mip را نشان می‌دهد. بزرگ‌ترین عکس پرجزییات‌ترین نمونه را که در نزدیک‌ترین حالت ممکن به بازیکن قرار دارد را نشان می‌دهد. برای مراحل بعدی به‌طور پیوسته اندازه‌ی تصویر در طول و عرض نصف می‌شود و این‌کار را تا جایی که لازم باشد ادامه می‌دهیم.

نمای صورت مجسمه mips

موتور ساخت‌بازی باتوجه‌به سیستم‌های خود هرگاه بازیکن از چیزی دور می‌شود سعی می‌کند از تصاویر با ابعاد کوچک‌تری که از Mip موردنظر در اختیار دارد استفاده کند و این‌گونه بارپردازشی نهایی را کم‌کند و هر چقدر فاصله شما بیشتر شود، این‌کار با تصاویر کوچک‌تری انجام می‌شود تا اینکه درنهایت آن شی یا آن‌ قسمت از زمین قابل مشاهده نباشد.

این کم‌کردن از جزییات باعث می‌شود که در فاصله‌های دور به‌دلیل جزییات کم‌تر همه‌ی چیز مقداری تار و غیرشفاف جلوه کند و در بازی Journey هم منجر به نرم‌تر دیده‌شدن ماسه‌های شود. چنین چیزی را در عکس پایین‌ هم می‌توانید با کمی دقت مشاهده کنید.

مقایسه افکت دانه‌بندی ماسه در بازی journey

اعضای تیم با اطلاعاتی که از دنیای واقعی داشتند می‌دانستند که این مسئله منطبق با آن‌چیزی است که در واقعیت وجود دارد ولی با‌این‌حال تصمیم‌گرفتند که تغییراتی در آن اعمال کنند. آن‌ها Mips-های بازی را به‌گونه‌ی طراحی کردند که تا مقدار دلخواهشان از تاری و نرمی ماسه‌ها در فاصله‌ها کم‌کنند تا همچنان دانه‌دانه‌بودن ماسه‌ها در فواصل هم تاحدودی قابل مشاهده باشد. برای همین است که آن‌ها اسم لایه‌‌ای که در این مرحله به تصویر‌سازی ماسه‌ها اضافه‌شد را هم Sharp Mips نامیدند.

۲.بازتاب و درخشش دانه‌های ماسه

این ویژگی‌ها را می‌توانیم «بازتاب درخشش» ماسه‌ها در زیر نور خورشید بدانیم. این ویژگی از آن موارد اصلی تماشای بیابان‌های ماسه‌ای در طول روز است و وجود آن برای تیم حیاتی بود. آن‌ها در ابتدا به‌دنبال پیاده‌سازی منطقی و دقیق این قابلیت بودند ولی باگذر زمان متوجه شدند که انجام چنین کاری بیهوده است. برای همین آن‌ها تمرکز خود را روی بررسی هرچه‌دقیق‌تر ماجرا گذاشتند تا به‌توانند راه‌حل ابتکاری و کم‌هزینه‌تر خود برای این ماجرا را ابداع کنند.

دانه‌های ماسه به‌طور متوسط ۰.۵ میلی‌متر قطر دارند و در مقیاس بازی می‌توانستیم ۴۰۰ عدد از آن‌ها را در یک پیکسل قرار دهیم که کار غیرممکن و بیهوده‌ای بود

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

درخشش دانه‌های ماسه

به‌دلیل ماهیت بسیار ریز دانه‌های ماسه‌ عملا امکان شبیه‌سازی آن‌ها درون بازی وجود نداشت وگرنه اعضای تیم مجبور بودند در هر پیکسل چیزی درحدود چهارصد دانه‌ی ماسه را قرار دهند که هم فایده‌ای نداشت و هم امکان‌پذیر نبود. یادتان نرود که یک مانیتور با وضوح تصویر FHD بیش از ۲ میلیون پیکسل دارد و ترکیب آن با ۴۰۰ دانه ماسه در هر پیکسل رقم غیرقابل تصوری را آن هم برای آن سال‌ها تشکیل می‌داد. برای همین با تکنیک‌های آن روزها صرفا ظاهری شبیه به دانه‌های ماسه را روی تصویر صاف کف بیابان ترسیم کردند.

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

مقایسه افکت درخشش بازی journey

۳.برطرف‌کردن ناهنجاری

پیاده‌سازی افکت درخشش ماسه‌ها منجر به ایجاد اختلالی در یکی از لایه‌های گرافیکی بازی شد که در آن فیلترگرافیکی به‌نام Anisotrpic به‌درستی کار نمی‌کرد. قبلا توضیح دادیم که با استفاده از Mips-ها سعی می‌کنند میزان مصرف منابع سخت‌افزاری بازی را با عدم نمایش سطوح بالای جزییات در فواصل کاهش دهند. چنین چیزی برای زمین بازی هم مورد استفاده قرار می‌گیرد و در‌نهایت می‌‌تواند منجر به تار و غیرشفاف‌شدن تصویر اجرام در فاصله‌های دور از دوربین شود.

anisotropic filtering

برای برطرف‌کردن چنین تاثیری معمولا از تکنیک‌های در دنیای گرافیک رایانه‌ای استفاده می‌شود که به آن Texture Filtering می‌گویند. البته کیفیت خروجی نهایی بسته به نوع و شدت تکنیک استفاده‌شده متغیر است. با‌این‌حال اعضای تیم از حداکثر مقدار مجاز تکنیکی به‌نام Anisotropic Filtering در پلتفرم پلی استیشن ۳ برای بازی خود استفاده کرده‌ بودند تا بهترین کیفیت ممکن در این زمینه را داشته باشند.

اما این تکنیک درکنار تمامی مزایای خود در ترکیب با تکنیکی که برای شبیه‌سازی درخشش ماسه‌های پیاده‌سازی شده‌بود، منجر به ایجاد یک ناهنجاری شد. همانند تصویر زیر در قسمت‌هایی از بازی این تکنیک دچار خطا می‌شد و عملا بخش انتهایی تپه‌ها روی تصویر نشان‌ داده ‌نمی‌شد.

ناهنجاری افکت aniso با درخشش دانه‌های ماسه

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

آنالیز ناهنجاری بازی jounrey

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

آنالیز ناهنجاری بازی jounrey

با تمامی این‌ها اعضای تیم بعدها متوجه شدند که هیچ نیازی به‌انجام تمامی این‌ کارها نبوده است و آن‌ها خیلی راحت می‌توانستند از قابلیت‌های یکی از ابزارهای آماده آن روزهای دنیای بازی‌سازی برای رفع این مشکل استفاده کنند ولی خب هیچ‌کدام آن‌ها از وجود چنین چیزی خبر نداشتند!

۴.بازتاب و تلألو اقیانوسی

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

مقایسه افکت بازتاب/تلألو اقیانوسی بازی jounrey

۵. بهبود بازتاب نور از روی ماسه‌ها

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

lambert diffuse

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

توپ قرمز زمینه سفید

این پدیده‌ی طبیعی قبل از اینکه وارد دنیای گرافیک رایانه‌ای به‌شود، چند قرن پیش و در سال ۱۷۶۰ توسط دانشمندی چند رشته‌ای به‌نام جاناتان هِنریچ لامبرت (Johann Heinrich Lambert) برای اولین‌بار و به‌صورت ریاضی مدل‌سازی شده بود که به‌لطف تلاش‌های او، قانون کسینوس لامبرت نام‌گذاری شد. این قانون شکل ریاضی این فرایند را به‌تصویر می‌کشید و تقریبا تمامی موتورهای گرافیکی از جمله‌ی موتورهای ساخت بازی با استفاده از آن رنگ اجرام درون تصویر را در مواجه با نور به‌تصویر می‌کشیدند.

به‌دلیل عدم آشنایی اعضای تیم با تعدادی از روش‌ها و ابزارهای موجود آن روزها، آن‌ها وقت زیادی را برای برطرف‌کردن مشکلی که به‌آسانی قابل حل بود گذاشتند

با‌این‌حال اعضای تیم ساخت Journey با استفاده از این تکنیک به‌ نتیجه مطلوب خود نرسیدند و به‌دنبال موارد جایگزینی رفتند. جایگزین مورد نظر آن‌ها مدلی ریاضی به‌نام مدل بازتابی Oren–Nayar نام داشت که به‌لطف تلاش‌های دو دانشمندی که آن را توسعه داده بودند این‌گونه نام‌گذاری شده بود. این مدل جدید که در سال ۱۹۹۳ و تقریبا ۲۳۰ سال بعد توسعه‌داده شده بود، برای پوشش ضعف‌های مدل قبلی و برای پیش‌بینی نحوه‌ی بازتاب نور از سطوح زبری همانند بتن و ماسه و گچ و امثال آن به‌میدان آمده بود و برای همین این‌روزها کم‌وبیش می‌توانیم آن را درتمامی موتورهای گرافیکی و درکنار قانون اولیه مشاهده کنیم.

صرف همین تغییر مدل در نحوه‌ی محاسبه‌ی بازتاب نور، شما می‌توانید مناظر زیبایی همانند آن‌‌چیزی که در تصویر پایین است را مشاهده کنید. این تقریبا همان چیزی بود که اعضای تیم از ابتدا دنبال آن بودند.

oren-nayar reflection diffuse بازی jounrey

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

۶.موج‌های ماسه‌ای

لایه‌ی دیگری که وجود دارد، ناهمواری‌های موج مانند ماسه است که روی دامنه‌های تپه‌ها به‌راحتی قابل مشاهده است. جالب است که این لایه تنها ویژگی بود که اعضای تیم برای پیاده‌سازی آن به‌سراغ عکس‌هایی رفتند که در مرحله تحقیق اولیه تهیه کرده بودند. پیاده‌سازی چنین لایه‌ی کار آسانی بود و توضیحات فنی آن هم جذابیت چندانی ندارد. صرفا برای درک هرچه‌بیشتر میزان تأثیر این لایه عکس زیر را برای شما قرار می‌دهیم.

Detail heightmap on بازی jounrey

Detail heightmap off بازی jounrey

رده‌پا در شن

این مورد جدای از موارد قبلی توسعه‌داده شده است. در این یک مورد آن‌ها سعی کردند با استفاده از حدود ده هزار ذره‌ به‌شکل دانه‌های ماسه که از قوانین نزدیک به واقعیت پیروی می‌کنند، حالت حرکت درون ماسه‌ها و ایجاد رده‌پا را شبیه‌سازی کنند.

پیاده‌سازی رده‌پا در شن از معدود کارهایی بود که ‌کم‌وبیش به‌صورت واقعی شبیه‌سازی شده بود

البته اگر درون بازی دقت‌ کرده باشید، این رده‌پا موقتی است و طول آن هم از مقداری بیشتر نمی‌شود. در یک کلام اعضای تیم خود را محدود به پلتفرم هدف خود که در آن زمان پلی استیشن ۳ بود می‌دانستند و شبیه‌سازی واقعیت با دقت‌بالا آن هم با ابزارهای آن روزها امکان‌پذیر نبود.

درنهایت قرارگیری تمامی این موارد درکنار یکدیگر و درترکیب با اتمسفر درگیر‌کننده‌ی بازی بدون‌شک ما را با یکی از زیباترین بیابان‌های دنیای بازی‌های رایانه‌ای مواجه کرد که همچنان در نسخه‌های اولیه خود نیز چشم‌نواز جلوه می‌کند.

نظر شما در رابطه با بازی Jounrey و کیفیت بیابان آن چگونه است؟ آیا اعضای تیم در شبیه‌سازی یک بیابان ماسه‌ای موفق بوده‌اند؟


منبع زومجی
اسپویل
برای نوشتن متن دارای اسپویل، دکمه را بفشارید و متن مورد نظر را بین (* و *) بنویسید
کاراکتر باقی مانده