آموزش بازی سازی: نکات فنی توسعه بازی موبایل
اگرچه وقتی صحبت از بازی و بازیسازی باشد، در وهلهی اول نگاه ما به سمت رایانههای شخصی و کنسولهای بازی میرود، اما چند سالی است که بازار جدید رو به رشدی در کنار این پلتفرمهای قدیمی بازار بهوجود آمده است. شاید صرف همین که بدانید در تمامی نقاط دنیا حدودا ۳.۱ میلیارد گوشی موبایل وجود دارد به راحتی بتوانید این مسئله را درک کنید که چرا امروزه تا این حد به این پلتفرم توجه میشود.
اگر چه در سراسر دنیا پلتفرم موبایل در کنار دیگر پلتفرمهای بازی تعریف شده است، اما در ایران شرایط کمی فرق کرده و میتوانیم ادعا کنیم که صرفا بازی و بازیسازی در آن بر بستر پلتفرم موبایل وجود دارد. صحبت در مورد چرایی این مسئلهی موضوع بحث امروز ما نیست و هدف اصلی ما صحبت در مورد جوانب فنی انتخاب این پلتفرم برای توسعهی یک بازی ویدیویی است. همچنین با توجه به این که حدودا ۹۰ درصد گوشیهای فعال در ایران را گوشیهای اندرویدی تشکیل میدهند، برای همین ما از بررسی گوشیهای مبتنی بر سیستم عامل iOS در این مقاله خودداری میکنیم.
ایجاد تعادل بین نیازهای فنی و گسترهی بازار هدف
برای توسعه در پلتفرم موبایل و به خصوص دستگاههای اندروید، مهمترین مسئله در همان ابتدا این است که ما بر اساس دو شاخص نیازهای فنی پروژه و همچنین گسترهی مخاطبان هدف، دامنهی نرمافزاری و سختافزاری خود را مشخص کنیم. دلیل این مسئله این است که برخلاف پلتفرم iOS و نمونههای محدود آن، پراکندگی عجیبی در پلتفرم اندروید چه به لحاظ نرمافزاری و چه به لحاظ سختافزاری وجود دارد و هر دستگاهی صرفا از یکسری از تکنیکهای فنی برای ساخت بازی پشتیبانی میکند.
اگر مقالهی قبلی ما با عنوان چالشهای ساخت یک بازی مولتی پلتفرم را مطالعه کرده باشید فهمیدهاید که برای ساخت بازی برای هر پلتفرمی باید تمامی اجزای سازندهی بازی متناسب با پلتفرم هدف آماده شده باشد و صرفا نمیتوان با تکیه بر توانایی خروجی گرفتن موتورهای بازیسازی به هدف نهایی دست پیدا کرد. پس زمانی که قرار است تمامی اجزای بازی را متناسب با پلتفرم هدف (گوشیهای اندرویدی) آماده کنیم، باید بدانیم که ما مجاز به استفاده از چه عناصری در بازی خود هستیم. به عنوان مثال صرف همین که ما بخواهیم از کانال آلفا (Alpha Channel) در بافتهای خود استفاده کنیم، این گونه روی محاسبات ما تاثیر میگذارد که ما برای فشردهسازی بافتهای خود احتمالا از مدل فشردهسازی ETC2 که رایجترین مدل موجود است، استفاده کنیم که چنین چیزی موقعی در دسترس ما است که ما از OpenGL ES 3.0 در گوشی هدف بهرمند باشیم. پشتیبانی از همین API گفته شده هم باید به صورت نرمافزاری و هم سختافزاری در گوشیهای هدف قرار داده شده باشد. به عنوان مثال از لحاظ نرمافزاری حداقل نسخههای اندروید برای پشتیبانی از این ویژگی، نسخهی ۴.۳ اندروید یا همان API level 18 است. تازه این را هم به موضوع اضافه کنید که صرفا داشتن نسخهی اندروید گفته شده هیچ تضمینی برای ما فراهم نمیکند که ما به نسخهی OpenGL ES گفته شده دسترسی داشته باشیم چرا که همچنان بخشی از موضوع به سختافزار هم بستگی دارد. برای همین با این که این مسئله موضوع چندانی پیچیدهای جلوه نمیکند ولی رسیدن به یک تعادل مناسب بین دو شاخص گفته شده کار بسیار مشکلی است چرا که در کنار آشنایی کامل با مفاهیم گفته شده باید دید درستی هم روی توزیع نرمافزاری و سختافزاری بازار هدفمان هم داشته باشیم.
جنبهی دیگر مسئله که اشارهای هم به آن داشتیم، آشنایی با تکنولوژیهای مختلف موجود در بازار است. مثلا در زمان حاضر برای پیادهسازی دستورات گرافیکی هم میتوان از رابط برنامهنویسی OpenGL ES و هم رابط برنامهنویسی Vulkan استفاده کرد. رابط برنامهنویسی Vulkan یک محصول جدید و پیشرفتهتر در این عرصه به حساب میآید و علاوه بر عملکرد بهتر و بهینهتر، به کارگیری آن میتواند مسئلهی پورت کردن بازی برای پلتفرمهای دیگر را هم راحتتر کند، چرا که این رابط برنامهنویسی همانند OpenGL ES صرفا به یک پلتفرم خاص محدود نیست. اما این رابط برنامهنویسی برخلاف OpenGL ES ، صرفا در نسخههای ۷ به بعد سیستم عامل اندروید و آن هم در دستگاههایی وجود دارد که از نوع مشخصی از پردازندههای گرافیکی استفاده میکنند و برای همین بازار فعلی Vulkan بسیار کمتر از OpenGL ES است و برای همین اگر صرفا عملکرد فنی یا راحتی پورت کردن بازی اولویت بالاتری برای شما دارد، بهتر است به سمت این رابط برنامهنویسی بروید. به عنوان مثال عکس زیر پردازندههایی را که از این رابطگرافیکی بهره میبرند به شما معرفی میکنند.
در انتهای این بخش بهتر است به این موضوع توجه کنید که مثلا همان رابط برنامهنویسی OpenGL ES دارای چهار نسخهی مختلف است که هر کدام قابلیتهای مخصوص به خودشان را دارند و این شما هستید که باید به طور کامل در رابطه با هر کدام از اینها به تحقیق و بررسی بپردازید.
آمادهسازی محتوا برای موبایل
در گام قبلی ما صرفا گسترهی تواناییهای فنی خودمان را مشخص کردیم و این در حالی است که آماده کردن عناصر درون بازی برای پلتفرم موبایل هم دارای قاعده و قانونهای خودش است. به عنوان مثال طبق اسناد موتور آنریل (این بخش کاملا بر مبنای آنریل توضیح داده شده است)، ما در زمینهی Meshها صرفا میتوانیم از گزینههای زیر در بازی خود استفاده کنیم:
- Skeletal Mesh
- Static Mesh
- Landscape
- CPU Particle Sprites، Particle Mesh
همچنین در این بخش اشاره شده که بر اساس محدودیتهای سختافزاری واضحی که در پلتفرم موبایل وجود دارد، انواع مشهای ما حدکثر میتوانند از 65K راس تشکیل شده و مشهای اسکلتی ما هم حداکثر میتواند از ۷۵ استخوان تشکیل شده باشند. دقت کنید این موارد حداکثر مقادیر ممکن را برای شما بیان کردند وگرنه در حالت عادی مشهای شما باید بسیار سادهتر از موارد گفته شده باشد. البته این نکته را هم در این جا اضافه کنیم که مقیاس مدلها و عناصر درون بازی تاثیری بر راندمان بازی شما نخواهند داشت. مثلا این که فکر کنید بهتر است یک صحنه از بازی خود را به منظور بهبود عملکرد فنی آن در مقیاس کوچکتری تولید کنید تصور اشتباهی است و تنها خودتان را اذیت میکنید. برای درک بهتر این مسئله میتوانید یک صحنهی از قبل آماده شده را در مقیاس ۴ برابر بزرگ کنید و سعی کنید وضعیت مصرف منابع سختافزاری را در دو حالت بایکدیگر مقایسه کنید. مشاهده خواهید کرد که هیچ تغییری در شاخصهای گفته شده رخ نمیدهد.
همچنین در زمینهی آمادهسازی بافتها هم نکتهای که وجود دارد این است باید سعی شود برای مدیریت بهتر منابع رم، تمامی بافتهای بازی در شکل مربعی آماده و به کار گرفته شود و اندازهی ابعاد آنها هم بر توانهای عدد ۲ استوار باشد (همانند ۲، ۴، ۸، ۱۶، ۳۲ و ...). البته این را هم اضافه کنیم که بافتها نقش بسزایی را در شکلگیری حجم فایل بازی شما ایفا میکنند و اگر مشکلی بابت کیفیت بصری بازی خود ندارید بهتر است همواره از اندازههای کوچکتر این موارد در تولید بازی استفاده کنیم.
در زمینهی متریالها هم تقریبا مشکلی خاصی وجود ندارد و ما به بیشتر خصوصیات یک متریال در پلتفرم رایانههای شخصی دسترسی داریم. برای همین صرفا به چند ویژگی که از آنها در این پلتفرم پشتیبانی نمیشوند اشاره میکنیم:
- Scene Color Expression
- Refraction Input
- Tessellation Input
- Subsurface Scattering Shading Mode
با این حال در تهیه متریالها چندین ملاحظه وجود دارد که باید رعایت شوند و برای همین اگر به دانستن این مواردعلاقمند هستید میتوانید آنها را از لینک مطالعه کنید. برای کوتاهتر شدن مقاله از توضیح موارد دیگر از قبیل نکات مربوط به نورپردازی و افکتهای پسپردازشی چشمپوشی میکنیم اما شما میتوانید به ترتیب در مورد هر کدام از این موارد در این لینک و این لینک اطلاعات مناسب را به دست آورید.
نکتهای که در انتهای این بخش باید به آن اشاره کنیم این است که به هیچ وجه نباید از مسئلهی قدرت سختافزاری پایین دستگاههای موبایل غافل شویم. به خصوص زمانی که ما گسترهای از قدرتهای سختافزاری مواجه هستیم همواره دستگاههایی قرار دارند که در پایینترین نقطهای این بازه قرار میگیرند و برای همین بهتر است ما مبنای اولیهی خود را روی آنها در نظر بگیریم.
تجربه و آزمایش بهترین وسیله است
هنگامی که تعداد فراوانی از موارد اشاره شده در کنار هم قرار میگیرند، مدیریت آنها به خصوص برای افراد تازهکار موضوع بسیار مشکلی میشود. با این حال تازه ما هیچ صحبتی از میزان مصرف منابع سختافزاری و مدیریت آن در فضای محدود دستگاههای موبایل نکردهایم. دلیل آن این است که بازی به بازی این مسئله بسیار متفاوت میشود و برای همین بهتر است که شما خودتان با آزمایش و خطا به چنین مهارتی دست پیدا کنید. شما میتوانید با شروع از محیطها ساده و کوچک، تاثیر به کارگیری هر عنصر را در مصرف منابع سختافزاری رصد کرده و برای این کار هم تنها به یک گوشی، یک کابل و یک موتور بازیسازی آماده احتیاج دارید. حتی میتوانید صحنههای آماده را از گوشه و کنار اینترنت دریافت کرده و سعی کنید آنها را برای یک گوشی موبایل طوری بهینه کنید که میزان مصرف منابع سختافزاری آن به نسبت قبل کمتر شده باشد. اینها تمرینهایی هستند که به مرور به شما مسئلهی ارزشمند مدیریت منابع را یاد میدهند و بعدها میتوانید از دانستههای خود در ساخت بازی مورد علاقهتان بهره ببرید.
نظرات