جیسون توی کتابش این واقعیت رو بیان می کنه که: وقتی اولین کنسولم رو در سال ۱۹۷۹ گرفتم (Intellivision از شرکت Mattel)، اصلاً کسی چیزی به نام "موتور بازی" نمیشناخت! در اون زمان بازیها خیلی خاص و وابسته به سختافزار بودن، هر بازی یه برنامهی اختصاصی برای خودش داشت، هیچ چیزی به اسم کد قابل استفاده مجدد یا موتور عمومی وجود نداشت.
اما امروزه، بازیها یه صنعت چند میلیارد دلاری هستن و با موتورهای عمومی مثل Unreal، Unity، CryEngine یا موتور های اختصاصی استودیو ها ساخته میشن
اجزای مشترک موتورهای بازی
با اینکه موتورهای مختلف (مثلاً Unreal، Unity، Frostbite...) از لحاظ فنی متفاوت هستن، ولی معمولاً اجزای مشترکی دارند:
موتور رندر (Rendering Engine)
سیستم فیزیک و برخورد (Collision & Physics)
انیمیشن (Animation)
صدا (Audio)
مدل اشیای بازی (Object Model)
هوش مصنوعی (AI)
…
این موارد معمولا در همه موتور های بازی وجود دارند، اما با پیاده سازیهای متفاوت.
Jason Gregory توی کتابش میگه من ندیدم کتابی که همهی این اجزا رو یهجا و منسجم توضیح بده. هدف این کتاب اینه که یه تور جامع از معماری موتورهای بازی بهت بده
مواردی که توی این کتاب باهاش سر و کار داریم:
چطوری یه موتور بازی واقعی تو صنعت ساخته میشه؟
تیمهای بازیسازی چطوری سازماندهی میشن؟
چه اجزایی تو اکثر موتورهای بازی هستن؟
کدوم اجزا بین همهی بازیها مشترکن و کدوم اختصاصی هستن؟
خط مرز بین «بازی» و «موتور بازی» دقیقاً کجاست؟
مواردی که از ما خواننده کتاب، نویسنده انتظار داره پیش زمینه داشته باشیم:
آشنایی با مفاهیم شیءگرایی (OOP)
تجربهی برنامهنویسی C++ یا زبانهای مشابه (مثل C#) حتی کم
آشنایی اولیه با ریاضی پایهی گرافیک (مثل ماتریس و بردار و جبر خطی)
ترجیحاً تجربه با real-time و event-driven programming
اما در فصل های بعدی مفاهیم مهم مثل ریاضی سه بعدی، concurrency، سحت افزار و … مرور میشه.
۱.۱ ساختار یک تیم توسعه بازی (Structure of a Typical Game Team)
قبل از وارد شدن به بحث معماری موتور باید بفهمیم تیم های بازی سازی چطور کار می کنن، چون موتور بازی برای استفاده همین تیم ها ساخته میشه.
پنج بخش اصلی یک تیم ساخت بازی:
برنامهنویسها (Engineers)
آرتیستها (Artists)
طراحان بازی (Game Designers)
تولیدکنندهها یا مدیر پروژه (Producers)
پشتیبانها (مثل مارکتینگ، مدیریت، IT و...)
1.1.1 برنامهنویسها (Engineers)
به دو دسته تقسیم میشن:
Runtime programmers: روی موتور بازی و خود گیمپلی کار میکنن (مثل فیزیک، گرافیک، سیستم برخورد، هوش مصنوعی)
Tools programmers: ابزارهایی میسازن که بقیه راحتتر کار کنن (مثل ادیتور مرحله، ادیتور انیمیشن، ابزار ایمپورت داراییها)
بعضی تخصصها:
گرافیک (Rendering)
فیزیک و برخورد
صدا
هوش مصنوعی
گیمپلی
سیستمهای زیرساخت (مثل مدیریت فایل، حافظه، لاگها)
نقشهای پیشرفتهتر:
Lead Engineer: رهبر فنی پروژه
Technical Director (TD): نظارت سطحبالا روی چند پروژه
CTO (Chief Technical Officer): مدیر فنی کل استودیو
1.1.2 هنرمندها (Artists)
یه حمله معروفی هست که میگن مجتوا پادشاهه
نقش هندمند ها بسیار پر اهمیته، هنر صداگذاری و صدا، گراقیک و … میتونه به شدت روی شکست یا موفقیت یک پروژه تاثیر مستقیمی داشته باشه.
نقش های هنرمندان:
عنوان
وظیفه
Concept Artist
طراحی اولیهی ظاهر بازی، شخصیتها، دنیاها
3D Modeler
ساخت مدلهای سهبعدی (کاراکتر، محیط، وسایل)
Texture Artist
ساخت تکسچر برای مدلها
Lighting Artist
طراحی نور صحنهها
Animator
متحرکسازی کاراکترها و اشیاء
Motion Capture
بازیگرهایی که حرکتهاشون ضبط میشه برای انیمیشن
Sound Designer
ساخت افکتهای صوتی و موسیقی
Voice Actor
صداگذاری کاراکترها
Composer
ساخت موسیقی متن بازی
توی تیم هم Art Director داریم که بر روند کلیت بازی نظارت دارن تا ظاهری یکپارچه رو توی گیم داشته باشیم.
1.1.3 طراحان بازی (Game Designers)
تعریف تعاملات بازی کار اصلی اون هاست، یعنی:
مکانیکهای بازی
قوانین، دشمنها، پازلها، داستان، گیمپلی
چالشها و پاداشها
دیزاینرها هم به چند نوع دسته بندی میشن:
Macro Designer: داستان کلی، مراحل اصلی، مسیر پیشرفت بازیکن
Level Designer: طراحی مرحلهها، مکان آیتمها، دشمنها
طراح فنی: کدنویسی با زبانهای اسکریپتی برای رفتارهای خاص
نویسنده: نوشتن دیالوگها و داستان بازی
بعضی طراحها قبلاً مهندس بودن و به طراحی علاقهمند شدن.
1.1.4 تولیدکنندهها (Producers)
بسته به شرکت، نقش متفاوتی دارن:
مدیریت پروژه و زمانبندی
ارتباط با تیم فنی و تجاری
گاهی نقش طراح ارشد
یا حتی پل بین تیم و ناشر (Publisher)
در شرکتهای کوچیک ممکنه اصلاً Producer نداشته باشیم، یا مدیران ارشد این وظیفه رو بهعهده می گیرن.
1.1.5 تیمهای پشتیبانی
مدیران استودیو
بازاریابی و روابط عمومی
IT و پشتیبانی فنی
مدیر مالی و حقوقی
1.1.6 ناشرها و استودیوها (Publishers & Studios)
معمولاً ناشر (Publisher) بازی رو منتشر میکنه و هزینهها رو تأمین میکنه (مثلاً EA، Sony، Ubisoft)
بعضی استودیوها مستقلن و هر بار با یه ناشر قرارداد میبندن
بعضی استودیوها متعلق به ناشرن (مثلاً Naughty Dog مال Sony هست و فقط برای PlayStation بازی میسازه)
توی این بخش دید خوبی از اعضای و تیم های بازیسازی رو بدست آوردیم و متوجه شدیم که توی دنیای واقعی و صنعتی تیم های بازیسازی چطور سازماندهی و مدیریت میشن، و وقتی درباره موتور بازیسازی صحبت می کنیم در واقع درباره چیزی حرف میزنیم که به این تیم ها ابزار میده.
۱.۲ بازی چیه (What Is a Game)؟
ما معمولاً حس میکنیم "بازی" یعنی چی، ولی وقتی دقیقتر نگاه کنیم، بازی میتونه چیزای خیلی مختلفی باشه:
شطرنج، مونوپولی، پازلها
بازیهای ورق مثل پوکر
بازیهای ویدیویی، جنگی، داستانی
حتی بازیهای نظامی شبیهسازیشده و بازیهای آنلاین چندنفره
تعریف آکادمیک (از دید نظریهپردازها):
«چند بازیکن، در یک سیستم با قوانین مشخص، تصمیم میگیرن تا برنده بشن یا به هدفی برسن.»
تعریف جالب کاستر (Raph Koster):
«بازی، تجربهای تعاملیه که به بازیکن مجموعهای از الگوهای چالشبرانگیز میده تا اونها رو یاد بگیره و مسلط بشه.»
Raph Koster نویسنده کتاب A Theory Of Fun
ما تو این کتاب، درباره چه نوع بازیهایی حرف میزنیم؟
تمرکز این کتاب روی بازیهاییه که:
دو بعدی یا سه بعدی هستن
دنیای مجازی دارن
۱ تا ۱۶ بازیکن دارن (نه خیلی زیاد مثل MMOها)
مثل بازیهای:
FPS: شوتر اول شخص مثل Call of Duty
Third-Person Action: اکشن سومشخص مثل Uncharted
Racing: مسابقهای
Fighting: مبارزهای
پس بازیهایی مثل Tetris یا بازیهای متنی و وبی خیلی موضوع اصلی کتاب نیستن.
بیشتر بازیهای ویدیویی، شبیهسازیهایی نرم (soft real-time interactive simulations) هستن.
اگر بخوایم این جمله را بیشتر درک کنیم و اون رو بفهمیم:
اصطلاح
توضیح ساده
شبیهسازی (Simulation)
دنیای واقعی یا تخیلی با مدل ریاضی ساده شده شبیهسازی شده
عاملمحور (Agent-based)
اشیاء مستقل مثل دشمن، پلیر، آیتمها باهم تعامل دارن
تعاملی (Interactive)
بازیکن با دکمه یا ماوس به بازی ورودی میده
بلادرنگ (Real-Time)
بازی باید سریع واکنش نشون بده، مثلاً فریمریت ۳۰ یا ۶۰
نرم (Soft)
اگه یه فریم دیر بشه، مشکلی نیست (برخلاف هواپیما یا راکتور هستهای!)
Game Loop = شبیهسازی گامبهگام
بازیها معمولاً مدل دقیق ریاضی ندارن، بلکه:
تو هر فریم، وضعیت بازی رو آپدیت میکنن (مثل موقعیت، فیزیک، هوش مصنوعی، انیمیشن)
بعد رندر میکنن، صدا پخش میکنن، و منتظر ورودی میمونن
این رو بعداً تو فصل ۸ بهش مفصل میرسیم: Game Loop و شبیهسازی بلادرنگ
مثال ریاضی کتاب:
وقتی یه جسم سقوط می کنه، اگر بخوایم دقیق جساب کنیم
y(t) = (1/2) * g * t² + v₀ * t + y₀
ولی توی بازی ها به این دقت نمیشه حساب کرد، چون:
ورودی بازیکن لجظه ای تغییر می کنه
دنیای بازی پویاس
پس یه مدل عددی داریم:
y(t + Δt) = F(y(t), ẏ(t), ...)
با گام های کوچیک وضعیت رو اپدیت می کنیم.
این یعنی بازیها مثل «شبیهسازیهای عددی بلادرنگ» هستن که توی هر فریم دوباره و دوباره محاسبه میشن.
۱.۳ موتور بازی چیه(What Is a Game Engine)؟
موتور بازی = زیرساخت بازیهای مختلف
Jason Gregory:
موتور بازی، یه پلتفرم نرمافزاری قابل استفاده مجدد برای ساخت و اجرای بازیهای ویدیوییه.
یعنی:
یه موتور خوب میتونه برای ساخت چندین بازی استفاده بشه، بدون نیاز به بازنویسی کلی.
خودش شامل مجموعهای از ماژولها و ابزارهاست.
تفاوت «موتور بازی» و «خود بازی»:
ویژگی
موتور بازی
خود بازی
قابل استفاده مجدد
بله
معمولاً نه
هدف
فراهم کردن زیرساخت برای ساخت بازی
پیادهسازی قوانین و محتوای خاص اون بازی
شامل چی میشه؟
رندر، فیزیک، صدا، ابزار طراحی، گیملوپ و...
مرحلهها، دشمنها، دیالوگها، داستان و...
یک مثال از بازی + موتور:
فرض می کنیم یه استودیو بازی ساحته به اسم Zombie Hunter و از موتور خودش به اسم ZombieX Engine استفاده کرده. جالات مقابل رو خواهیم داشت:
اگه زمانی بخواد بازی Zombie Racer بسازه، میتونه از ZombiX Engine دوباره استفاده کنه.
فقط محتوای جدید میسازه: مراحل، گرافیک، دشمنها، داستان جدید
ولی هستهی فیزیک، انیمیشن، رندر و صدا همون باقی میمونه
اجزای اصلی موتور بازی (که مستقل از محتوای خاص هستن):
Rendering Engine: برای کشیدن گرافیک روی صفحه (۲D یا ۳D)
Physics Engine: برای برخورد، گرانش، حرکت اشیاء
Animation System: کنترل انیمیشنها
Audio System: پخش صدا و موسیقی
Input System: دریافت ورودی از کاربر (دکمه، ماوس، کنترلر)
Scripting System: تعریف رفتارها با زبانهای سادهتر مثل Lua یا C#
AI System: هوش مصنوعی برای دشمنها، NPCها
UI System: ساخت منوها، HUD و رابط کاربری
Networking: برای بازیهای آنلاین چندنفره
Editor Tools: ابزارهایی برای ساخت مرحله، گذاشتن دشمن و...
خطمرز بین "موتور" و "بازی" همیشه واضح نیست!
تو بعضی پروژهها ممکنه یه ابزار خاص فقط برای همون بازی ساخته بشه (مثلاً ادیتور دیالوگ برای یک بازی داستانی). پس اون ابزار دیگه یه بخش عمومی از موتور نیست.
Jason میگه:
یه قانون خوب اینه: "آیا این ماژول میتونه تو بازی دیگه هم استفاده بشه؟" اگه آره → بذارش تو موتور اگه نه → بذارش تو خود بازی
نکته: بعضی شرکتها سیستمهای خاص خودشون رو دارن که همزمان هم بازی هست هم موتور (مثلاً Naughty Dog با موتور اختصاصیاش). توی اون موارد هم سعی میکنن تا جایی که میتونن اجزای قابل استفاده مجدد بسازن.
خلاصهی بخش ۱.۳:
موتور بازی یعنی:
مجموعهای از سیستمهای نرمافزاری که ساختار و ابزار لازم برای ساخت انواع بازی رو فراهم میکنن – بدون اینکه به محتوای خاص بازی وابسته باشن.
بازیسازیموتور بازیسازیjason gregorygame enginearchitectureموتور بازی سازیبرنامه نویسمهندس نرم افزارموتور بازی