موتور بازیسازی (Game Engine) در واقع یک فریمورک نرمافزاری بوده که در اصل جهت طراحی بازیهای ویدیویی ساخته شده و معمولا دربرگیرنده کتابخانههای (Library) مرتبط و سایر برنامههای پشتیبان است. واژه موتور بازی سازی در واقع مشابه موتور نرمافزار در صنعت نرمافزار است.
توسعهدهندگان بازی با استفاده از موتورهای بازیسازی میتوانند بازیها را برای کنسولها و کامپیوترها توسعه دهند. عملکردهایی که در یک موتور بازیسازی وجود دارند معمولا شامل موتور رندر جهت رندر کردن گرافیک دو و یا سه بعدی، موتور فیزیک و یا تشخیص برخورد (و واکنش برخورد)، صدا، کدنویسی، انیمیشن، هوش مصنوعی، شبکه، استریمینگ، مدیریت حافظه، رشتهسازی (Threading)، پشتیبانی از بومیسازی، نمودار صخنه (Scene Graph) و پشتیبانی از ویدیو جهت صحنههای سینمایی میشود. در بسیاری از موارد، استفاده چند باره از یک موتور و یا سازگار کردن آن با نیازمندیهای مختلف باعث میشود تا هزینه توسعه بازیها کمتر شود.
هدف موتور بازی سازی
در بسیاری از موارد، موتور بازیسازی مجموعهای از ابزارهای بصری توسعه و همچنین بخشهای نرمافزاری مختلف قابل استفاده مجدد را فراهم میکند. این ابزارها معمولا در یک محیط توسعه یکپارچه کنار هم گردآوری شده، تا فرایند توسعه بازی را سادهتر و سریعتر کرده و همچنین بهتر بتوان بازیها را بهصورت مبتنی بر داده طراحی کرد. توسعهدهندگان موتور بازیسازی معمولا نیازهای توسعهدهندگان را پیشبینی کرده و سعی میکنند که ابزارهایی را که جهت توسعه یک بازی موردنیاز خواهند بود، در داخل موتور تعبیه کنند.
در بسیاری از موتورها، ابزارکهای گوناگونی همانند قابلیتهای گرافیکی، صداگذاری، فیزیک و هوش مصنوعی قرار داده شدهاند تا فرایند توسعه آسانتر شود. گاهی اوقات موتورهای بازیسازی را میانافزار (Middleware) مینامند، زیرا این موتورها پلتفرمی قابل انعطاف و قابل استفاده مجدد را فراهم کرده و در آنها قابلیتهای اساسی وجود دارند که فرایند توسعه را آسانتر و کمهزینهتر میکنند. موتورهایی همانند Gamebryo ،JMonkeyEngine و RenderWare، چنین میانافزارهایی هستند.
همانند سایر میان افزارها، موتورهای بازیسازی نیز بهنوعی فرایند توسعه را وابسته به پلتفرم خاصی نمیکنند و از این رو میتوان یک بازی را توسعه داد و سپس حداکثر با اعمال تغییرات کوچکی در کد منبع، آن را برای پلتفرمهای مختلف پورت کرد. معمولا برنامهنویسها، موتور بازی سازی را بهصورت بخش-بخش توسعه میدهند. بدین ترتیب میتوان بخش خاصی از موتور را در طول زمان تغییر داد و یا با گزینهای بهتر، جایگزین نمود. برخی از موتورها شامل بخشهای گسسته از هم میشوند که میتوان آنها را بهصورت انتخابی با یکدیگر ترکیب کرد و یک موتور مخصوص ساخت.
رویه مقابل این روش که رایجتر نیز بوده، آن است که یک موتور قابل انعطاف را توسعه داده و یا شخصیسازی کنیم. به هر حال انعطافپذیری مسئله بسیار مهمی برای موتورهای بازیسازی است، زیرا یک موتور قرار است که در طول سالیان متمادی جهت توسعه بازیهای مختلفی مورد استفاده قرار بگیرد. درست است که در عبارت “موتور بازیسازی”، کلمه “بازی” قید شده، اما میتوان از چنین نرمافزارهایی جهت مقاصدی همانند ساخت ویدیوهای تبلیغاتی، تجسمهای معماری، شبیهسازهای آموزشی و مدلسازی محیطی نیز استفاده کرد.
برخی از موتورها فقط قابلیت رندر سه بعدی آنی را ارائه داده و در آنها خبری از سایر ویژگیهای موردنیاز بازیهای ویدیویی نیست. در چنین مواردی، توسعهدهنده باید خودش نسبت به اضافه کردن ویژگیهای موردنیاز، اقدام کند. این موتورها را بیشتر “موتور گرافیکی”، “موتور رندر” و یا “موتور سه بعدی” مینامند تا موتور بازیسازی. از نمونههای موتورهای گرافیکی میتوان به Crystal Space ،Genesis3D ،Irrlicht ،OGRE ،RealmForge ،Truevision3D و Vision Engine اشاره کرد. موتورهای جدید معمولا به یک صحنه گرافیکی مجهز هستند. با استفاده از این ویژگی میتوانید جهان سه بعدی بازی خود را بهتر مشاهده کرده و بدین ترتیب طراحی بازی بهصورت کارآمدتری انجام شده و همچنین مجیطهای مجازی وسیع نیز بهتر رندر خواهند شد.
این مطلب را نیز بخوانید: تاریخچه شرکت Rockstar Games | ستاره درخشان بازیهای ویدیویی
به مرور زمان با پیشرفت فناوری و ارتقای سطح نیازها، ممکن است که تمام یا بخشی از یک موتور بازیسازی، کارایی خود را از دست بدهد. برنامهنویسی یک موتور بازیسازی جدید، فرایندی پیچیده داشته و همین قضیه نیز میتواند باعث بروز تأخیرهایی در فرایند توسعه بازی شود (شاید هم توسعهدهندگان مجبور شوند که پروژه را از ابتدا آغاز نمایند)، از این رو تیمها ترجیح میدهد که موتور خود را ارتقا دهند تا اینکه یک موتور کاملا جدید را برنامهنویسی کنند.
تاریخچه موتورهای بازیسازی
پیش از به وجود آمدن موتورهای بازیسازی، بازیها معمولا بهصورت موجودیتهای منفرد، طراحی میشدند. بهعنوان مثال یک بازی متعلق به Atari 2600 باید از ابتدا تا به انتها بهگونهای کدنویسی میشد که بتواند به نحو بهینه از سختافزار نمایشی استفاده کند. توسعهدهندگان امروزی که بازیها را برای سیستمهای قدیمی طراحی میکنند، این روتین اساسی نمایش را Kernel مینامند. پلتفرمهای دیگر، محدودیتهای کمتری داشتند، اما حتی اگر هم نمایشگر مشکلی به وجود نمیآورد، آنگاه بازهم محدودیتهای حافظه از طراحیهای سنگین مبتنی بر داده (چیزی که موتورهای بازیسازی بدان نیاز دارند)، جلوگیری میکرد. حتی در پلتفرمهایی که انعطافپذیری بالایی داشتند، بازهم امکان بهاشتراکگذاری طراحیها و بخشهای یک بازی با بازی دیگر، در سطح بسیار محدودی امکانپذیر بود.
پیشتر و در زمان سختافزارهای آرکید که در آن زمان نهایت فناوری بازی محسوب میشدند، اکثر کدنویسی یک بازی، پس از عرضه آن بازی دور انداخته میشد. دلیل این قضیه نیز این بود که بازیهای نسل بعد، از طراحیهای کاملا جدیدی استفاده میکردند تا بتوانند از منابع بیشتری به نحو احسن، بهره ببرند. در هر صورت اکثر بازیهایی که در طول دهه 1980 میلادی طراحی شده بودند، بیشتر ساختاری هارد کد شده (Hard-Code) داشتند و در آنها مقدار کمی داده گرافیکی و مرحلهای استفاده شده بود. از زمان عصر طلایی بازیهای آرکید، کمکم شرکتهای بازیسازی شروع به توسعه موتورهای بازیسازی داخلی کردند تا آنها را به همراه نرمافزارهای فرست پارتی، مورد استفاده قرار دهند.
یکی از مثالهای مهم در رابطه با موتورهای بازیسازی توسعه داده شده برای کنسولهای خانگی در میانه دهه 1980، یک موتور پیمایش از کنار بود که توسط تیم شیگرو میاموتو (Shigeru Miyamoto) در شرکت نینتندو، توسعه داده شده بود. هدف از ساخت این موتور، استفاده از آن در کنسول Nintendo Entertainment System یا به اختصار NES بود. موتوری پیمایش از کنار که جهت طراحی بازی Excitebike در سال 1984 مورد استفاده قرار گرفته بود، در ادامه و برای بازی پلتفرمر Super Mario Bros در سال 1985 نیز مورد استفاده قرار گرفت. این موتور باعث شد تا شخصیت ماریو بتواند بهصورت نرم و روان، سرعت راه رفتن خود را از پیادهروی به دویدن افزایش دهد. پیادهسازی چنین قابلیتی پیشتر امکانپذیر نبود.
تا هنگام ظهور گرافیکهای سه بعدی کامپیوتر در دهه 1990، موتورهای بازیسازی شخص ثالثی، چندان رایج نبودند. البته پیشتر و در دهه 1980 میلادی، چندین سیستم بازیسازی دو بعدی جهت استفاده توسعهدهندگان مستقل، در دسترس قرار گرفته بودند. از این موارد میتوان به Pinball Construction Set در سال 1983، ASCII War Game Construction Kit در سال 1983، Thunder Force Construction در سال 1984، Adventure Construction Set در سال 1984، Garry Kitchen GameMaker در سال 1985، Wargame Construction Set در سال 1986، Shoot-‘Em-Up Construction Kit در سال 1987، Arcade Game Construction Kit در سال 1988 و موتورهای بسیار محبوب ASCII RPG Maker از سال 1998 به بعد، اشاره کرد. Klik & Play که متعلق به سال 1994 بود نیز یکی دیگر از موتورهای بازیسازی قدیمی بوده که هنوز هم در دسترس قرار دارد.
اصطلاح موتور بازی سازی در میانه دهه 1990 میلادی و مخصوصا در رابطه با بازیهای سه بعدی همانند شوترهای اول شخص، به وجود آمد. محبوبیت بازیهای Doom و Quake شرکت Id Software به حدی بود که بسیاری از سایر توسعهدهندگان به جای اینکه خودشان همهچیز را از ابتدا شروع کنند، لایسنس بخشهای اساسی موتورهای این بازیها را خریداری کرده و سپس گرافیک، شخصیتها، سلاحها و مراحل خود (در کل همان محتوای خود) را طراحی کرده و بر روی بازی پیادهسازی میکردند. جدا شدن قوانین بازی و دادهها از مفاهیم اساسی همانند تشخیص برخورد و موارد دیگر باعث بزرگتر شدن تیمهای بازیسازی و تخصصیتر شدن کارها شد.
بازیهای بعدی همانند Quake III Arena شرکت id Software و Unreal شرکت Epic Games در سال 1988، از موتورهای بازیسازی استفاده کردند و در واقع توسعه موتور و محتوا در آنها، بهصورت جداگانه صورت گرفت. لایسنس کردن موتورها باعث درآمدزایی شرکتهای طراح آنها میشد. به هر حال لایسنس یک موتور تجاری رده بالا میتواند از 10 هزار دلار تا چندین میلیون دلار، هزینه بردارد و همچنین شرکتهای مختلفی نیز بهصورت همزمان، اقدام به خرید لایسنس میکنند.
استفاده از موتورهای بازیسازی باعث آسانتر شدن و همچنین توسعه راحتتر بازیها شد و این خصیصه در صنعت رقابتی بازیهای ویدیویی، مزیتی باارزش محسوب میشد. تا پیرامون سال 2000 میلادی، رقابت شدیدی مابین موتور بازی سازی شرکتهای Epic Games و id Software وجود داشت، اما پس از آن، محبوبیت Unreal Engine بسیار بیشتر از id Tech 4 و نسخه جدیدتر آن یعنی id Tech 5 بوده است.
امروزه موتورهای بازیسازی را میتوان پیچیدهترین نوع نرمافزارها عنوان کرد. در این موتورها دهها سیستم تعدیل شده وجود دارند تا بدین ترتیب بتوان کنترل بهتری بر تجربه بازیباز اعمال کرد. در ادامه و با پیشرفت فناوری، رندر کردن، کدنویسی، کار هنری و طراحی مرحله، بسیار از یکدیگر جدا شدند. اکنون یک استودیوی عادی در قیاس با نمونه خود در سالهای گذشته، چندین برابر هنرمند و برنامهنویس دارد.
معمولا بازیهای شوتر اول شخص، بیشترین استفاده را از موتورهای بازیسازی شخص ثالثی میبرند، اما طبیعتا ژانرهای دیگر نیز چنین کاری را انجام میدهند. بهعنوان مثال بازی نقش آفرینی The Elder Scrolls III: Morrowind و یا بازی Dark Age of Camelot که در سبک MMORPG بوده، با استفاده از موتور Gamebryo توسعه داده شده است. بازی Lineage II نیز که در سبک MMORPG بوده نیز از موتور Unreal Engine استفاده کرده است. همچنین بازیهای کنسولی نیز وجود دارند که از موتورهای شخص ثالثی استفاده کردهاند و از نمونههای آنها میتوان به Grand Theft Auto و Burnout اشاره کرد که هر دو با استفاده از موتور بازی سازی RenderWare توسعه داده شدهاند.
به دلیل پیشرفت هر چه بیشتر سیستمهای چند هستهای و نیاز به واقعیتر بودن بایها، نقش Threading روز به روز بااهمیتتر میشود. از Threadهای مهم میتوان به رندر کردن، استریم، صدا و فیزیک اشاره کرد. بازیهای مسابقهای (Racing) معمولا در خط مقدم رشتهسازی با موتور فیزیک بودهاند. در این بازیها موتور فیزیک در قالب رشتههای جداگانه و جلوتر از سایر سیستمهای فرعی، کار خود را انجام میدهد. دلیل این موضوع نیز تا حدی به این خاطر است که رندرینگ و سایر و موارد مربوطه میتوانند فقط در 30–60 هرتز بهروز شوند. بهعنوان نمونه در پلیاستیشن 3 و در بازی Need For Speed، فیزیک در 100 هرتز بهروز میشود. این در حالی است این کار در بازی Forza Motorsport 2 در 360 هرتز انجام میگیرد.
درست است که این اصطلاح برای اولین بار در دهه 1990 میلادی مورد استفاده قرار گرفت، اما به هر حال پیشتر از آن زمان و در دهه 1980 نیز سیستمهایی بودهاند که موتور بازی سازی نامیده میشدند. از این موارد میتوان به Sierra Adventure Game Interpreter، SCI Systems ،LucasArts SCUMM System و Incentive Software Freescape در سال 1986 اشاره کرد. برخلاف اکثر موتورهای مدرن، موارد ذکر شده هیچگاه در بازیهای شخص ثالثی مورد استفاده قرار نگرفتند، البته به غیر از SCUMM System که لایسنس آن توسط Humongous Entertainment خریداری شد.
با توسعه بیشتر موتورهای بازیسازی و کاربر پسندتر شدن آنها، کاربردهای این برنامهها نیز بیشتر شد. امروزه از موتورهای بازیسازی جهت مواردی همانند بازیهای جدی (با مقاصد غیر سرگرمکننده)، تجسم، آموزش، پزشکی و همچنین شبیهسازهای نظامی، استفاده میشود. CryEngine یکی از نمونههای موجود در این زمینه است. امروزه جهت راحتتر کردن کار، موتورهای بازیسازی، سختافزارهای جدیدتر همانند گوشیهای هوشمند و مرورگرهای وب (WebGL ،Shockwave، Flash ،Trinigy WebVision، Silverlight ،Unity Web Player ،O3D و DHTML) را هدف قرار دادهاند.
علاوه بر این، روزبهروز موتورهای بیشتری بر اساس زبانهای سطح بالا همانند جاوا و سی شارپ داتنت (همانند موتور TorqueX و Visual3D.NET)، پایتون (Panda3D) و یا Lua Script (همانند Leadwerks)، توسعه داده میشوند. از آنجایی که امروزه اکثر بازیهای سه بعدی دارای گرافیک بالا، توسط کارت گرافیک محدود شدهاند، پس میتوان گفت که کندی بالقوه ناشی از سرعت اجرای زبانهای سطح بالا را میتوان بیشتر نادیده گرفت. این در حالی است که کارآمدی این زبانها باعث راحتتر شدن فرایند توسعه بازیها میشود. چنین گرایشهایی توسط شرکتهایی همانند مایکروسافت پشتیبانی شده تا بدین ترتیب توسعهدهندگان مستقل بهتر بتوانند به بازیسازی بپردازند.
مایکروسافت کیت توسعه نرمافزاری XNA را جهت طراحی بازیهای ایکسباکس و محصولات مرتبط، توسعه داد. این قضیه شامل کانال Xbox Live Indie Games نیز میشود. این بخش مخصوص توسعهدهندگانی است که بودجه لازم جهت قرار دادن بازیهای خود بر روی قفسه فروشگاهها را ندارند. در نهایت اینکه اکنون توسعه موتورهای بازیسازی برای پلتفرمهایی که از فریمورکهای مدیریت شده پشتیبانی میکنند، از همیشه راحتتر شده است.
موتورهای بازیسازی بهعنوان یک صنعت
کسانی که یک موتور بازی سازی را توسعه میدهند، میتوانند در مورد اینکه سایرین چگونه از آن استفاده کنند نیز تصمیم بگیرند. خود بازیها یک صنعت را تشکیل دادهاند و بنابراین میتوان این قضیه را به موتورهای بازیسازی نیز تعمیم داد. هزینه استفاده از موتورهای مختلف، متفاوت است: برخی از شما حق اشتراک دریافت کرده، جهت استفاده از برخی دیگر باید لایسنس تهیه کنید و برخی هم هستند که برای توسعهدهندگان مستقل رایگان بوده و اگر درآمد بازی شما از حدی فراتر رود، آنگاه از شما پول دریافت میکنند.
Unreal Engine 4 یکی از موتورهای قدرتمند بوده که بازیهایی همانند Fortnite ،Valorant، PlayerUnknown’s Battlegrounds و Life Is Strange 2 با استفاده از آن توسعه داده شدهاند. ساختار استفاده از این موتور اینگونه است که استفاده از آن رایگان بوده و فقط درصدی از درآمد فروش بازیهای ساخته شده با آن، توسط Epic Games دریافت میشود. تفاوت میان موتورهای بازیسازی مختلف به دلیل فرایندهای گوناگون توسعه بازی، میتواند بیشتر و یا کمتر شود. در این بین توسعهدهندگانی نیز وجود دارند که آنچنان به یک موتور وابسته شدهاند که نمیتوانند از یک سیستم دیگر استفاده کرده و یا اینکه یک موتور خاص چنان در نزد آنها محبوب است که حاضر هستند هزینههای گزافی را بابت آن پرداخت کنند.
یکی دیگر از موتورهای بازیسازی که در حال حاضر درآمدزایی خوبی دارد، Unity است. مدل کسب درآمد یونیتی نیز مشابه Unreal Engine است. بازیهایی همانند Rust ،Subnautica و Life Is Strange: Before the Storm با استفاده از این موتور توسعه یافتهاند. برخی از موتورهای بازیسازی نیز شیوه اسکریپت نویسی بصری را اتخاذ کردهاند که از جمله آنها میتوان به GameMaker: Studio ،Construct 3 ،GDevelop و Pixel Game Maker MV اشاره کرد.
میانافزارهای بازی
اگر بخواهیم که نگاهی کلیتر داشته باشیم، آنگاه میتوان موتور بازی سازی را یک میانافزار در نظر گرفت. در صنعت بازیهای ویدیویی، اصطلاح میانافزار را اغلب به جهت اشاره به سیستمهای فرعی و یا عملکردهای درون یک موتور بازیسازی، مورد استفاده قرار میدهند. برخی از میانافزارهای بازی فقط یک کار خاص را انجام داده، اما همین کار را راحتتر و کارآمدتر از میانافزارهای عمومی به انجام میرسانند.
مواردی همچون RAD Game Tools Bink ،Firelight FMOD ،Havok و Scaleform GFx از جمله 4 مورد از میانافزارهای پرکاربرد در صنعت ویدیو گیم هستند. RAD Game Tools در کنار Miles و Granny 3D، میانافزار Bink را نیز جهت رندر ابتدایی ویدیو، توسعه داده است. Firelight FMOD یک کتابخانه و مجموعه ابزار صوتی گسترده است. Havok یک سیستم گسترده را در زمینه شبیهسازی فیزیک و همچنین مجموعهای از اپلیکیشنهای انیمیشن و رفتار را ارائه میدهد. Scaleform نیز GFx را برای رابط کاربری Flash UI و پخش ویدیوهای باکیفیت، فراهم کرده و همچنین از طریق آن میتوان به یک افزونه Input Method Editor یا همان IME جهت پشتیبانی از چت آسیایی داخل بازی، دسترسی پیدا کرد.
سایر میانافزارها جهت بهینه کردن عملکرد، مورد استفاده قرار میگیرند. به عنوان مثال Simplygon در رابطه با بهینه کردن و ایجاد مشهای سطح جزئیات، کاربرد دارد. Umbra نیز در زمینه افزودن بهینگیهای مربوط به حذف انسداد (Occlusion) گرافیک سه بعدی، مورد استفاده قرار میگیرد. برخی از میانافزارها حاوی کد منبع کامل بوده و برخی دیگر نیز فقط یک API مرجع مربوط به کتابخانه باینری کامپایل شده را ارائه میدهند. در برخی از میانافزارها با پرداخت پول بیشتر میتوان به کد منبع کامل آنها، دسترسی پیدا کرد.