زیبای آخرالزمانی | نگاهی بر فرایند توسعه پوشش گیاهی Horizon Zero Dawn
نقل شده که خدا دنیای زیبا رو توی هفت روز آفریده و حتی یکشنبه رو هم استراحت کرده اما برای گوریلا گیمز هفت سال طول کشید تا دنیای هورایزن رو خلق کنه و اغلب اوقات یکشنبهها رو هم مجبور بودیم که کار کنیم! ژیلبرت ساندرز – رئیس بخش هنری گوریلا گیمز
Killzone Shadow Fall بهعنوان نخستین بازی گوریلا گیمز برای پلیاستیشن ۴، اولین تجربه واقعی آنها در فرایند تولید در رابطه با پوششهای گیاهی، ظاهر و حرکات آنها بود. با توجه به اینکه فرایند تولید هورایزن در میانه فرایند تولید آخرین کیلزون و حوالی سال ۲۰۱۱ آغاز شده بود، آنها دریافتند که تولید پوششهای گیاهی در یک بازی جهانباز همانند هورایزن به روشی که در بازی کیلزون پیادهسازی شده بود، غیرممکن است و باید بازنگریهایی در رابطه با نحوهی آمادهسازی و رنگآمیزی آنها صورت بگیرد.
همچنین در همین مرحله اولین قدمها برای طراحی سیستم جدید جایگذاری اقلام گیاهی برداشته شد چرا که پرکردن دنیای بزرگ هورایزن به همان روش مورد استفاده در بازی کیلزون غیرممکن بود. در مطلب پیشرو میخواهیم نگاهی مختصر به این فرایندها و چالشهایی که گوریلا گیمز با آن روبرو بوده است بیاندازیم. در ابتدا نگاهی مختصر دستاورد گوریلا گیمز در پوششگیاهی بیاندازیم.
آمادهسازی پوششگیاهی
با توجه به سابقه کاری تیم گوریلاگیمز، تجربه آنها در آمادهسازی اقلام محیطی بازی معمولا به مواردی همچون ستونهای آسیب دیده و تَلی از آشغالهای ساختمانی روی هم انباشتهشده خلاصه میشد و پوششگیاهی در حداقلیترین شکل ممکن در بازی آنها نقش داشت.
بهمنظور روشنکردن افقکاری پیش روی اعضای تیم، در این نقطه تصمیم گرفتهشد که یک نمونه اولیه از پوششگیاهی ایدهآلی که بدنبال آن هستند آماده کنند و به همهی اعضای استودیو بفهمانند که آنها به نسبت بازیهای قبلی اینبار بهدنبال چه چیزهای متفاوتی هستند. ویدیو زیر که در اوایل سال ۲۰۱۴ میلادی آماده شده است، درکنار موارد اشاره شده، میزان تراکم و کیفیت اولیه که تیم آن را هدف گرفتهبود را هم نشان میدهد.
جالب است بدانید که منظره بالا درون بازی صرفا با میانگین ۱۰ فریم بر ثانیه اجرا میشد که البته در آن هنگام اهمیتی نداشت. بااینحال نکتهای که مورد توجه قرار گرفت این بود که آنها همچنان اقلام مورد نیاز خود را به همان روشی تولید میکردند که در ساخت کیلزون مورد استفاده قرار گرفته بود.
اینکه عمده تمرکز روی سطوح جزییات [به مقاله آرمان شهر جادویی | نگاهی بر فرایند ساخت شهر Beauclair مراجعه شود] مدلها قرار بگیرد و سعی کنیم با کمکردن از جزییات در فاصلههای دور تا جای ممکن، در آخر به نقطهای برسیم که بازی قابل اجرا باشد. چنین روشی تا حوالی E3 2015 استفاده میشد اما وقتی صحبت از آمادهسازی یک نمونه قابل بازی برای نمایش بهمیان آمد، مسائل مربوط به بهینهسازی رنگوبوی جدیدی به خودش گرفت.
معکوس کردن فرایند تولید اقلام بازی هزینه بازنگری در ایدههای اولیه را بهشدت کاهش داد
نهتنها بالاترین سطوح جزییات در جلوی دوربین که حتی کمجزییاتترین پوششها در فواصل نیز نیاز به بازنگری پیدا کردند تا به شکلی نیاز آنها به منابع سختافزاری کاهش پیدا کند. با توجه به محدودیت زمانی، اولین کاری که صورت گرفت این بود که هر تغییر احتمالی باید در مرحله تولید اقلام و در خارج از محیط موتوربازیسازی اعمال شود و البته تا حدممکن به کیفیت فعلی پوششگیاهی لطمهای نخورد.
خب بهعنوان اولین راهکار، فرایند تولید اقلام را بهطور کامل معکوس کردند. در حالت عادی همیشه مدل پرجزییاتی از مثلا یک درخت آماده میشود و سپس برای رسیدن به عملکرد مناسب، تا آنجایی که ممکن است از جزییات نمونه اولیه کم میکنند. چنین روشی معمولا بصورت پایه در آمادهسازی اقلام تمامی بازیها مورد استفاده قرار میگیرد اما با معکوس کردن فرایند، اعضا تیم در ابتدا کمجزییاتترین شکل یک پوشش گیاهی را خلق میکردند و اگر از نمای کلی و عملکرد آن درون بازی رضایت داشتند، شروع به اضافهکردن جزییات برای سطوح بالاتر میکردند.
بهعنوان نمونه یک درخت را درنظر بگیرید. در روش اشاره شده در ابتدا تنه و شاخههای اصلی آن در نرمافزارهای مربوطه همانند Speed Tree آماده میشود. این نرمافزار که به نوعی معروفترین نمونه در آمادهسازی پوششهای گیاهی است، امکانات فراوانی را برای خلق اشکال مختلف یک درخت و جزییات آن فراهم میکند که بد نیست صرفا نمونهای از فیلمهایی که از این نرمافزار برای خلق پوشش گیاهی خود استفاده کردهاند را نیز در این نقطه تماشا کنید.
همزمان با انجام این کار، تیم اقدام به طراحی و آمادهسازی شاخههای فرعی و اجزای درختها میکرد. طرحهای اولیه که نقشههای ساده دوبعدی بودند به سرعت در فتوشاپ آماده میشد و سپس با انجام یکسری کارها روی آنها در نرمافزار مدلسازی و انیمیشن مایا(Maya) این اقلام برای پرکردن تنه درخت آماده میشدند. نرمافزار Speed Tree این امکان را به شما میدهد که درکنار خلق فرمکلی درخت خود، شاخههای آن را با جزییاتی که خودتان مایل هستید پر کنید.
در این نقطه درخت آماده شده برای ارزیابی در محیط بازی قرار داده میگیرد. به محض اینکه تیم به این نتیجه میرسید که نمونه آماده شده استانداردهای آنان را دربردارد، دستور آمادهسازی طرحهای پرجزییات اجزای درخت صادر میشد. این طرحها به مقدار خیلی زیادی از همان الگوی ساختاری شاخهها و اجزای ساده قبلی پیروی میکردند تا با جایگزینی آنها با نمونههای قبلی، ظاهر درخت و نمایی که شکل میدهد تفاوت خاصی با وضعیت قبلی نکرده باشد و صرفا وضوح و جزییات کار افزایش پیدا کند.
درکنار تمامی اینها اعضای تیم مجبور شدند برای پوشش نیازهای خود، ابزارهایی را توسعه دهند که بوسیله آن بتوانند به بهترین شکل ممکن نرمافزارهای گفته شده را به یکدیگر متصل کنند و بتوانند یک مدل آماده شده را در کاملترین شکل ممکن از یکی به دیگری منتقل کرده و درنهایت وارد موتور ساخت بازی کنند که توضیح در رابطه با این موارد خارج از حال این مطلب است. شما در زیر میتوانید مشاهده کنید که مثلا برای یک درخت ۵ سطح و برای گیاهان ۴ سطح از جزییات آماده شده است تا در زمان مناسب از هر یک از آنها استفاده شود. برای درک بهتر تصاویر پایین میتوانید توضیحات خلاصه مربوط به مثلثها(Triangles) را در مقاله مربوط به ساخت شهر بوکلر مطالعه کنید.
شبیهسازی
با گذر از ساخت پوششهای گیاهی نوبت به جانبخشیدن به آنها میرسد. از همان ابتدا مشخص بود که حرکات پوشش گیاهی باید منطبق با سیستمی باشد که برای آبوهوای بازی طراحی شده است و مهمترین بازیگر این سیستم بدون شک نیرویی است که از جانب باد به محیط اعمال میشود. تا قبل از هورایزن، سیستمی برای شبیهسازی باد پیادهسازی شده بود که صرفا بصورت دستی درون محیط جایگذاری میشد و جدای از اندازهی کوچک خود، صرفا برای تاثیرگذاری بر ذرات محیطی همانند دودها و ... آماده شده بود و لازم به توضیح نیست که برای دنیای بزرگی همانند هورایزن نمیتوان بر چنین شاخصههای ضعیفی تکیه کرد.
در سیستم جدید که حالت بهبودیافته سیستم قبلی بود، محیط تاثیرگذاری باد به بازیکن یا از نگاه دیگر به دوربین بازی متصل شده بود و همراه بازیکن حرکت میکرد. در این ناحیه تاثیر نیروی باد با بیشترین جزییات ممکن شبیهسازی میشد. برای فاصلههای بیشتر نیز مراتبی درنظرگرفته شد که به نسبت فاصله از دوربین، جزییات شبیهسازی کمتر و کمتر میشد. در ویدیو زیر سه مرحلهای که برای این مسئله درنظرگرفته شده بود را مشاهده میکنید.
البته فلشهایی که در ویدیوی بالا مشاهده میکنید صرفا برای بهتصویر کشیدن خروجی نهایی سیستم و برای اعضای تیم توسعهدهنده است وگرنه در عمل این سیستم صرفا بر مبنای یکسری معادلات و محاسبات ریاضی عمل میکند و در ظاهر همانند دنیای واقعی باد به خودی خود قابل مشاهده نیست و ما صرفا از روزی عکسالعمل محیط پیرامون خود متوجه آن میشویم. هر یکی از آن فلشها میزان شدت و نیروی باد در آن نقطه را به تصویر میکشد و اینگونه میتوان عملکرد سیستم را خیلی سریع و شهودی مورد بررسی قرار داد.
نکته عمومی که در رابطه با تمامی بازیها وجود دارد این است که بیشتر سیستمهای درون بازیها در چرخهی عمر هر فریم از بازی محاسبات خود را بروز میکنند. نگران نباشید به عمق تخصصی موضوع وارد نخواهیم شد ولی حتی درک حداقلی از این نکته میتواند دید شما نسبت به بزرگی کار فنی که بهخصوص در بازیهای مطرح AAA انجام میگیرد را به کلی تغییر بدهد.
برای اینکه یک بازی بتواند در هر ثانیه ۶۰ فریم به شما بدهد، نیاز دارد که یک فریم را بهطور میانگین در یک شصتم ثانیه یا حدودا 0.016 ثانیه آماده کند. این بدین معنی است که مثلا در بازی هورایزن و صرفا در رابطه با حرکات پوششهای گیاهی، بخشی از کاری که در این مدت زمان بسیار کوتاه باید انجام بگیرد بدین شکل است که در ابتدا باید وضعیت جدید باد بعد از فریم قبلی در یک نقطه مشخص شود. مثلا ممکن است به نسبت فریم قبلی از شدت باد در یک نقطه هر چند کم ولی مقداری کاسته شود.
درک حداقلی از چرخه عمر هر فریم میتواند دید شما نسبت به بزرگی کار فنی که بهخصوص در بازیهای مطرح AAA انجام میگیرد را به کلی تغییر بدهد.
سپس برمبنای نیروی جدید باد، باید وضعیت فعلی مثلا فلان علف یا علفهایی که در این نقطه قرار دارند را محاسبه کنیم که شکل و میزان حرکت در فریم فعلی چگونه خواهد بود. ممکن است تا الان در حال خمشدن باشند ولی با کاهش شدت باد، وقت آن است که به سمت وضعیت عادی خود برگردند.
در این مرحله تازه محاسبات تمام شده و تکان دادن مثلا همان علفها بر اساس این محاسبات مرحله بعدی است که پیچیدگیهای فنی خودش را دارد که به خلاصه بعدا در رابطه با آن خواهیم گفت! دقت کنید این خلاصهای که گفتیم ۶۰ بار در ثانیه تکرار میشود تا درنهایت شما بتوانید تکان خوردن طبیعی دستهای از علفها در باد را بهصورت روان مشاهده کنید. البته بدانید که در فرایند توسعه همیشه بخش نه چندان زیادی از منابع سختافزاری به این جور مسائل اختصاص پیدا میکند و عمده منابع با اولویت در اختیار سیستمهای مهمتری از جمله سیستمهای مرتبط با شخصیت بازی و دشمنان قرار میگیرد. برای همین درنظر داشته باشید که از آن 0.016 ثانیهای که گفتیم، صرفا بخشی سهم تیم مرتبط با پوشش گیاهی میشود. مثلا آنها باید تمامی کارهای خود را در 0.005 ثانیه به اتمام برسانند و مابقی زمان آن فریم را در اختیار دیگر تیمها قرار بدهند تا کارهایشان را انجام بدهند.
به مبحث اصلی خودمان برگردیم. از سیستمی که برای شبیهسازی نیروی باد طراحی شد گفتیم. تیم درنهایت توانست با بهرهگیری از آن حرکت پوششهای گیاهی در مقابل باد را برای ۴ دسته مختلف پیادهسازی کند. برای درختان، گیاهان، بهطور ویژه علفها و البته یکسری موارد خاص همانند حرکت بنرها.
برمبنای تحقیقات میدانی که انجام گرفت، تیم متوجه شد که برای شبیهسازی یک حرکت واقعی، آنها نیاز دارند که مثلا یک درخت را در سه سطح حرکت بدهند. اول حرکت بدنه اصلی است که میزان آن رابطهی مستقیمی با ارتفاع کلی درخت داشت. در سطح بعدی حرکت شاخهها و هر آن چیزی که به آنها متصل بود قرار داشتند که فاصله انتهای شاخه با بدنه اصلی، میزان حرکت آن را مشخص میکرد. در سطح بعدی برگها یا هر چیزی که همانند آنان رفتار میکرد قرار داشت که در این مرحله فاصله آنها از شاخه معیار شدت تکان خوردن آنها بود.
تا به اینجا از مولفههای کلی برای شبیهسازی حرکت یک درخت گفتیم ولی تیم برای شخصیسازی این مسئله برای درختهایی با شکل و ظاهر متنوع، مولفهی استحکام را برای تنه اصلی و خمیدگی، نوسان و برخاستگی را برای شاخهها درنظرگرفت. میزان هر کدام از این شاخصهها تقریبا بصورت سیستمی برای هر درختی تعیین میشوند تا درنهایت تکان خوردن شاخهها و بدنهی هر درخت با درخت بعدی متفاوت بوده و یک منظره کاملا طبیعی را چشم مخاطب تداعی کند. همچینن اعضای تیم براساس میزان قدرت باد، روشی را برای شبیهسازی حرکت برگها ابداع کردند که جزییات آن پیچیدهتر از آن است که در این مطلب بدان بپردازیم.
گیاهان به نوعی شکل کوچکتری از ساختار درختها هستند و برای همین در رابطه با آنها تقریبا از همان سیستم مرتبط با درختها استفاده شد با این تفاوت که در بیشتر موارد مولفهی خمیدگی برای شاخهها بدلیل عدم نیاز به این سطح از جزییات از مولفههای تاثیرگذار در شبیهسازی حرکت گیاهان حذف شد.
علفها بخش مهمی از پویایی طبیعت را در بازیها برعهده دارند و میتوان آنها را در تمامی نقاط مشاهده کرد. تیم درکنار جنبههای هنری درنظر داشت که الوی(Aloy) بتواند دربرخورد با علفها روی آنها تاثیربگذارد و همین مسئله این بخش از پوشش گیاهی را متمایز میکرد. اولین پیادهسازی علفها به تصویر پایین منتهی شد که گرچه ظاهری قابل قبول را فراهم میکرد، اما میزان مصرف منابع سختافزاری آن به قدری بالا بود که جایی برای دیگر کارها باقی نمیگذاشت.
اگر مقاله توسعه شهر Beauclair بازی ویچر ۳ را مطالعه کرده باشید، در آن در رابطه با سطوح جزییات کمی صحبت کردهایم. در این جا نیز برای کاهش مصرف منابع سختافزاری سه سطح از جزییات برای علفها تعیین شد. سطح LOD1 که پرجزییاتترین به حساب میآمد در نزدیکترین فاصله از بازیکن مورد استفاده قرار میگرفت و هرچقدر که از دوربین و بازیکن دور میشویم، از سطوح دیگر استفاده میشد. سطح آخر LOD3 که کمجزییاتترین سطح به حساب میآید و در تصویر پایین سمت راست قرار دارد، نهتنها از لحاظ ظاهری تراکم کمتری را شامل میشود که یکسری از رفتارهای حرکتی سطوح دیگر همانند تاثیرپذیری از نیروی باد را هم ندارد.
برای شبیهسازی حرکت طبیعی علفها در باد، چندین حرکت مختلف با یکدیگر ترکیب شدند. شکل پایهای حرکت، همان حرکتی است که بر اثر نیروی باد و براساس ارتفاع پوشش گیاهی به آن اعمال میشد و شما میتوانید آن را در سمت چپ ویدیو پایین مشاهده کنید. چنین حرکتی به تنهایی کافی نبود و برای همین نوع جدیدی از حرکت به نام «حرکت محیطی» در دو سطح برای علفها ابداع شد. سطح اول در مقیاسی بزرگتر، حرکتی هماهنگ را میان دستهای از علفها اعمال میکرد و در سطح دوم ما شاهد حرکتی در مقیاسی کوچکتر برای هر علف را داشتیم تا اینگونه حرکت هر علف با علف کناری خود تفاوت داشته باشد و خروجی نهایی طبیعیتر بهنظر برسد. در ویدیو زیر میتوانید حرکت نهایی علفها را ویدیو سمت راستی مشاهده کنید که به نوعی ترکیبی از سه حرکت اشاره شده است. بر اساس توضیحات توسعهدهندهها، ۸۵ درصد حرکات علفها متشکل از دوسطح حرکت محیطی و مابقی متاثر از حرکت ناشی از نیروی باد است.
نکتهی جانبی که شاید در تصویر سطوح جزییات علفها متوجه آن شده باشید این است که علفها در اصل چیزی بیشتر از تعدادی عکس دوبعدی ترکیب شده در زوایای مختلف نیستند. چنین تکنیکی نهتنها برای علفها که برای موهای سر انسانها و هر چیزی که شبیه این دو است هم مورد استفاده قرار میگیرد.
با این توصیف لحظهای را درنظر بگیرید که در یک نگاه از بالا به پایین، به علفها جلوی پای خود نگاه میکنید. در چنین وضعیتی شما بوضوح دوبعدی و در اصطلاح کارتی بودن علفها را به چشم خواهید دید و مصنوعی بودن علفها و پیادهسازی آنها منظره ناخوشایندی را تداعی میکند. برای همین با استفاده از فرمول ابداعی کوتاهی در بازی هورایزن هر گاه بازیکن دوربین را به سمت زمین نشانه برود، برای جلوگیری از مسئله اشاره شده، علفهای آن ناحیه همانند تصویر زیر تغییر وضعیت میدهند تا در نگاه بازیکن همه چیز همانند یک نگاه عادی رو به جلو طبیعی جلوه کند.
سایهها
بله این مورد نهتنها از لحاظ هنری بسیار پراهمیت است که از جنبهی بهینهسازی هم نباید آن را نادیده گرفت. بهعنوان نمونه در نمودارهای زیر میتوانید تاثیر حالتهای مختلف این شاخص بر عملکرد فنی بازی ویچر ۳ را مشاهده کنید که چگونه حتی سیستمی با داشتن دو کارت پرچمدار GTX Titan X در سال ۲۰۱۵ هم افت فریم قابل توجهی را در بالاترین تنظیمات ممکن برای سایهها در یک بازی جهانباز تجربه میکند.
اولین قدم همانند تمامی موارد قبلی، کمکردن از جزییات سایهها در فواصل مختلف است. تا فاصلهی ۸ متری از دوربین، شما پرجزییاتترین سایه را مشاهده میکنید سپس تا فاصله ۸۰ متر کیفیت بعدی و برای بیشتر از ۸۰ متر هم اگر لازم باشد، سطح سوم به شما نشان داده خواهد شد. همچنین سایه خود الوی هم جدای از این موارد بوده و بصورت مجزا و با جزییات بالا پردازش میشود.
توسعهدهندهها با آگهی از اینکه تعویض کیفیتها مختلف سایهها میتواند در چشم مخاطب ناجور جلوه کند، حالت گذاری را برای این بخش طراحی کردند تا این مورد تا حدممکن از دید مخاطب پنهان شود. در ویدیو زیر میتوانید سطوح مختلف سایهها و نحوهی تعویض کیفیت آنها در فاصله را مشاهده کنید.
همچنین در این بخش با جدا کردن سایه یک جسم از خودش، سعی کردند فرایند تولید سایه جسمی که در مقابل نور قرار میگیرد را هم سادهتر کنند. در این سازوکار بهجایی اینکه نور مثلا به یک درخت با جزییات فراوان بتابد و سایه را از روی آن تولید کند، در واقع به شکلی سادهشده از آن که همراه درخت در محیط قرار دارد و قابل رویت نیست برخورد میکند و تولید سایه میکند. این شکل سادهشده دقیقا در همان جای درخت مورد نظر قرار داشته و همانند تصویر زیر به مقدار زیادی از لحاظ حجمی با آن همپوشانی دارد ولی درون بازی ما قادر به دیدن آن نیستیم.
طبق صحبتهای اعضای تیم، این بخش نامریی در باجزییاتترین حالت خود به اندازهی سطح سه از سطوح پنجگانهای که برای ظاهر درختها آماده شده است و قبلا به آن اشاره کردیم، جزییات دارد. بر مبنای این توضیح اگر ما به مرور فاصله خود را با درختی کاهش دهیم، از یک نقطه مشخص به بعد در حالی که جزییات درخت در حال افزایش است، اما هیچ سایهی تازهای برای آن تولید نخواهد شد چرا که سایهها در بهترین حالت خود هماندازه سطح سه یا میانی که برای درختها درنظر گرفته شده است جزییات دارد.
وقتی از پرجزییاتترین وضعیت ممکن این اجسام نامريی گفتیم، کاملا مشخص است که فرمهای سادهتری هم برای آنها درنظر گرفتهشده است. این اجسام در حالت کمجزییاتتر خود، نهتنها سایهی هیچ برگی را تولید نمیکنند بلکه دیگر خبری از سایهای که با باد حرکت میکند هم نیست و تمامی انیمیشنهای این بخش نیز حذف میشود.
جایگذاری در محیط
در سریهای بازیهای کیلزون تمامی وسعت محیط بصورت دستی با اقلام آمادهشده پر میشد ولی مشخص بود که در ساخت بازی جهانبازی مثل هورایزن چنین روشی با اینکه قابل استفاده است ولی اصلا بهصرفه نیست و هزینه طراحی و تغییرات را بهشدت بالا میبرد. در همین راستا با جلساتی که برگذار شد درنهایت اینگونه نتیجهگیری شد که هر سیستمی که طراحی میشود باید ویژگیهای زیر را دارا باشد.
- تولید پوشش گیاهی با سرعت بسیار بالا
- تولید تنوع وسیعی از پوشش گیاهی با ظاهری قابل پذیرش
- جنبهی هنری قابل هدایتی داشته باشد: بر مبنای اطلاعات ورودی هنرمندان عمل کندخروجی شانسی و نامشخصی نداشته باشدهمپوشانی خوبی با ویرایشهای دستی داشته باشد
- بر مبنای اطلاعات ورودی هنرمندان عمل کند
- خروجی شانسی و نامشخصی نداشته باشد
- همپوشانی خوبی با ویرایشهای دستی داشته باشد
در قدم اول تیم به استفاده از روشهای مرسوم و سنتی این حوزه روی آوردند و با سیستمی که از قدرت پردازنده مرکزی یا همان CPU بهره میبرد، چینش خودکار اقلام درون محیط را انجام میداد.
این سیستم بدینگونه عمل میکرد که یکسری الگوهای اولیه برای چینش پوششگیاهی را دریافت کرده و بر مبنای آن یک محیط ساده را پر میکرد. در این گام، این سیستم بصورت آنی عمل نمیکرد و روند کار مثل این میماند که شما دکمهی پر شدن محیط را بزنید، مدتی را صبر کنید و سپس یک محیط پر از درخت و گیاهان و ... به مرور در جلوی شما ظاهر شود و تا زمان آمادهسازی هم نتوانید کار دیگری انجام دهید. همچنین برای مشاهده نتیجه هر تغییری در الگوهای چینش پوششگیاهی نیز ایجاب میکرد که روند اشاره شده را تکرار کنید و تا حصول نتیجه منتظر بمانیم.
جدای از آنی نبودن این فرایند، سرعت چینش پوششگیاهی هم قبل قبول نبود و این مسئله به این برمیگشت که این سیستم از قدرت پردازندهمرکزی استفاده میکرد که برای انجام کارهای با تعداد دستورات بالا گزینه مناسبی نبود.
برای چینش منظرهای که تا دهها هزار شی مختلف را شامل میشود، کارتگرافیک عملکرد بسیار بهتری بهنسبت پردازنده مرکزی دارد
فرض کنید میخواهیم ۱۰ تن آجر را دانهبهدانه از نقطهای به نقطهی دیگری ببریم. در یک وضعیت ما ۱۰ هزار آجر یک کیلویی و در یک وضعیت صرفا ۱۰ عدد آجر یک تنی داریم. سیپییو بهخاطر اینکه صرفا چند هسته قدرتمند دارد، در جابهجایی ۱۰ آجر یک تنی عملکرد بهتری دارد ولی در مقابل پردازندهگرافیکی یا همان کارتگرافیک خودمان، بدلیل اینکه از هزاران هستهی کوچک و کمقدرت تشکیل شده، درجابهجایی ۱۰ هزار آجر یک کیلویی عملکرد بهتری دارد. در مثال چینش هزاران درخت و گیاه و سنگ و ... هم کاملا مشخص است که پردازندهمرکزی گزینه مناسبی برای ما نخواهد بود.
در این نقطه تیم با علم بر اینکه کارتگرافیک در انجام چنین کارهایی بسیار بهتر عمل میکند، سیستم را برای بهرهبردن از قدرت این قطعه سختافزاری بازطراحی کردند و البته نتیجه کار هم آنقدری رضایتبخش بود که تصمیمگرفتن سیستم را بگونهای آماده کنند که بتوانند تغییرات را بصورت آنی و لحظهای اعمال کرده و برای طراحان محیط به نمایش بگذارند.
عملکرد این سیستم آنقدری خوب بود که درخواستها از بخشهای دیگر برای استفاده از آن بسیار زیاد بود. تیمهای صدا، گیمپلی و حتی افکتها بهطور پیوسته سؤال میکردند که آیا امکان استفاده از این سیستم برای آنها نیز میسر است یا خیر. اینکه لازم نباشیم صدا یا افکت مربوط به هر چیزی را بصورت دستی در محیط قرار دهیم آرزوی هر کدام از این تیمها بود و به مقدار زیادی هم محقق شد.
از سرعت بالای این سیستم گفتیم و بد نیست بدانید که قابلیت فعال و غیرفعالکردن این سیستم به خاطر عملکرد سریع آن امکانپذیر بود. در ویدیو زیر میتوانید یک محیط را در هنگام فعال بودن و سپس در وضعیت غیرفعال شدن این سیستم مشاهده کنید.
همانگونه که قابل مشاهده است، تقریبا تمامی پوششگیاهی بازی توسط این سیستم درون محیط قرار میگیرد. درنهایت این سیستم توانست در جایگذاری بیش از ۵۰۰ نوع از اقلام درون بازی نقشآفرینی کند و حتی مواردی همچون چینش جانوران و آیتمهای قابلبرداشت درون بازی را هم پوشش دهد که بسیار بیشتر از پیشبینیهای اولیه تیم بود. در ادامه بیایید کمی در رابطه با نحوهی عملکرد این سیستم صحبت کنیم.
نقشههای تراکم
مبنای کاری سیستم چینش پوششگیاهی استفاده از نقشههای دوبعدی به نام «نقشههای تراکم» بود. این به اصطلاح عکسهای دوبعدی که تقریبا برای هر چیزی بصورت جداگانه آماده میشدند، مشخص میکردند که در هرنقطه از نقشه بازی باید چه مقدار از فلان چیز را آن هم به چه شکلی قرار دهیم. مثلا به تصویر پایین دقت کنید.
این تصویر که بخشی از نقشه بازی را پوشش میدهد، در رابطه با تراکم درختها در یک ناحیه است. رنگ سیاه بهمعنی عدم وجود درخت و رنگ سفید به معنای حداکثر تراکم ممکن برای درختها است. بر همین مبنا رنگهای خاکستری هم نقاط قرارگیری درختها را مشخص میکنند اما تراکم کمتری را نشان میدهند. یادمان نرود حداکثر تراکم ممکن براساس نوع پوشش متفاوت است. مثلا درختها بهطور متوسط نمیتوانند کمتر از ۶ واحد فاصله داشته باشند و این برای بوتهها یک واحد است.
البته همه چیز به همین سادگی نیست چرا که در دنیای واقعی ما همیشه با یک مجموعه طرف هستیم و درختها بخش کوچکی از یک محیط را شامل میشوند. همچنین در واقعیت ما شاهد مناطق مختلف با پوششهای گیاهی و جانوران و در کل شاخصههای مخصوص به خودش هستیم. در کوچکترین حالت به هر کدام از این نواحی یک ایکوتوپ(Ecotope) میگویند و تیم سازنده هم با بهرهگیری از این مفهوم، ویژگیهای مختص یک ایکوتوپ بازی هورایزن را در موارد زیر معنی کرد:
- نوع اقلام (درختها، علفها، سنگها و ...)
- الگوی توزیع و پراکندگی
- رنگ آمیزی سخرهها، گیاهان و ...
- آب و هوا
- افکتها
- صداها
- حیاتوحش
یادمان نرود که هدف نهایی چینش خودکار تمامی ویژگیهای مرتبط با یک ایکوتوپ است. فقط این نکته را در ذهن داشته باشید که یک منظره در بازی هورایزن میتواند بیش از ۱۰۰ هزار چیز مختلف را در آن واحد شامل شود و این بدون برخورداری از یک سیستم چینش خودکار تقریبا غیرقابل دسترس بود.
پس از تعریف مفهوم یک ایکوتوپ و ویژگیهایش، ابزارهایی برای طراحان محیط درنظر گرفتهشد که بتوانند بوسیله آنها ایکوتوپهای متعددی را درون موتور بازی تعریف کنند. تمامی اینکارها با استفاده از یک سیستم کاملا بصری قابل انجام بود و نیازی به کدنویسی و انجام کارهای پیچیده از جانب طراحان محیط نداشت. تصویر زیر تمامی آن کاری است که یک طراح محیط برای تعریف یک ایکوتوپ انجام داده است.
پس از تعریف یک ایکوتوپ ما میدانیم چه چیزهایی را باید با چه الگوهایی درون محیط قرار دهیم. مثلا میدانیم اگر زمینی ساده را در اختیار ما قرار دهند، باید درختهای فلان ایکوتوپ را با فلان فاصله درکنار همدیگر بچینیم و کمی هم علف و بوته را هم پیرامون آنها قرار دهیم. ولی خب در واقعیت مسئله پیچیدهتر است.
چیدن اقلام روی زمین ناهمواری همانند تپهها و دامنه کوهها یا حتی اطراف رودخانهای که پر از سنگها و سخرههای بزرگ است بسیار متفاوت از یک زمین بدون ناهمواری است. در این نقطه برنامهنویسان زیرسیستمهایی را طراحی کردند که در آنها بصورت لایهبهلایه نقشههای راهها، رودخانهها، ناهمواریها و حتی سنگها و سخرهها را آنالیز میکردند تا در هنگام چینش هر چیزی، امکان قرارگیری آن در آن نقطه را بررسی کنند. در زیر نمودار منطقی چنین چیزی را مشاهده میکنید.
در این نقطه بهتر است بصورت عملی نگاهی هم به این توضیحات بیاندازیم. در ویدیو زیر و بهعنوان مثال میتوانیم نمایی از کنار یک رودخانه را مشاهده کنیم که در آن طراح بازی اقدام به قرار دادن اقلام میکند و سیستم بصورت خودکار چینش آنها را مطابق آنچه که به آن اشاره کردیم مدیریت میکند.
همانگونه که اشاره کرده بودیم، این سیستم گزینه ویرایشهای دستی را دارد و ویدیو بالا هم نتیجه وجود همین ابزارهاست، بااینحال سیستم در چینش دستی هم از اصولی که برایش تعریف شده پیروی میکند و یک طراح نمیتواند مثلا با گزینه اضافهکردن درختان به محیط یک درخت را روی یک سنگ قرار داده یا با جابهجا کردن جاده، منجر به قرارگیری یک سنگ بزرگ وسط آن بشود.
در ویدیو زیر هم میتوانید بصورت کلی پیادهسازی ایکوتوپهای مختلف روی یک محیط یکسان را مشاهده کنید و ببینید که چطور این ایکوتوپهای متفاوت بهصورت منحصربفردی به پرکردن محیط اقدام میکنند. یادمان نرود که تغییرات آبوهوایی هم جزیی از تعاریف یک ایکوتوپ است.
در انتهای این بخش به چند نکته تکمیلی اشاره میکنیم. اولین مورد اینکه این سیستم بهطور پیوسته دنیای بازی را پیرامون بازیکن ایجاد میکند و فراتر از دید بازیکن هیچ اقدامی انجام نمیدهد. همچنین این سیستم بهطور تقریبی برای هر کیلومترمربع از دنیای بازی و چینش آن، به ۴ مگابایت اطلاعات نیاز دارد که شامل همان نقشههای تراکم و موارد مشابه میشود. همچنین نقشههای تراکم نه بصورت دستی که بهصورت سیستمی و با استفاده از نرمافزارهایی همانند هودینی(Houdini) آماده شدهاند و سپس صورت دستی ویرایشهایی روی آنها انجام شده است.
مورد انتهایی هم این که این سیستم عریضوطویل با توانایی چینش بیش از ۵۰۰ شی مختلف و ویرایش ناهمواریهای محیطی، توانایی ایجاد یا تزیین وضعیتهایی همانند یک غار یا صخرههایی همانند تصویر زیر را ندارد و باید این چیزها بصورت دستی درون محیط قرار داده و تزیین شود. البته توسعهدهندههای گوریلا گیمز وعده دستیابی به چنین چیزی را در نسخه بعدی بازی هورایزن دادهاند.
نکات تکمیلی
بازی هورایزن و طبیعت شگفتانگیز آن صرفا نتیجهی بازتولید طبیعت دنیای واقعی نبودند و در مواردی تیم هنری گوریلا گیمز یک ظاهر هنری را به ظاهری طبیعی ترجیه میداد. بهعنوان مثال در تصویر پایین درخت سمت چپ ظاهر طبیعی یک درخت را بهتصویر میکشد ولی درنهایت آنها تصمیمگرفتند که با دستکاری نور و بازتابهای آن ظاهر سمت راستی را مثلا برای همین درخت انتخاب کنند.
همچنین در بسیاری از موارد و به منظور پرهیز از مشکلات احتمالی، سادهسازی گیمپلی و البته بهینهسازی بهتر بازی، سیستمهای واضحی که میتوانست درون بازی قرار بگیرد نیز حذف شد. مثلا درختان و گیاهان و شاخههای آنها به نیروی باد واکنش داده و بعضا با ترکیب چندین حرکت تکان میخورند ولی بااینحال اگر به سمت آنها تیری پرتاب کنید، تیر شما از میان آنها رد شده و تاثیری روی آنها نمیگذارد. دراصل الوی صرفا با تنهی اصلی هر درخت برخورد دارد تا نتواند از میان آن عبور کند و هیچ جزیی از سیستم حرکت درختان به کارهای او واکنش نشان نمیدهد.
در انتهای تمامی این موارد بهتر است بدانید که تمامی ایکوتوپهای درون بازی توسط یک نفر و تمامی درختها و پوششگیاهی توسط سه نفر آماده شده است. در استودیو گوریلا گیمز به این تیم سهنفره تیم گرین(Team Green) میگویند و آنها مسئول آمادهسازی تمامی پوششگیاهی بازی هورایزن بودهاند!