السلام عليكم ورحمة الله وبركاته.
نسمع كثيرا عن محركات الألعاب , لكن ماذا تفعل هذه المحركات تحديدا؟ هل هي تعالج اللعبة على جهازك؟ أو تحرك الأجزاء داخل اللعبة؟ وهل هي مدمجة بداخل الجهاز أو غير متعلقة به؟ يبدو الاسم مبهمًا لأول وهلة, لنتعرف هنا عن كيفية نشئ فكرة محرك الألعاب.
لنفترض أنك مدير العمل لشركة “التطوير والتكنولوجيا الحديثة لصنع الألعاب المتطورة” وقررت أن أول لعبة للشركة سوف تكون سباق طائرات نفاثة، وبدأت بتجهيز الموظفين المطلوبين.
وبما أنه يجب أن تحتوي اللعبة على نمط اللعب عبر الشبكة، أحضرت عددا من مهندسي الشبكات ومبرمجي الخوادم المحترفين،
وقام المنتِج برسم خطة ومدة زمنية للمشروع، ووزع المهام على الجميع، ثم شرعوا بالعمل.
بعد مدة ستة أشهر, انتهيتم من بناء الأنظمة الرئيسة: نمط اللعب Gameplay للطيران، نظام عرض للرسوميات والإضاءة، نمط اللعب عبر الشبكة وخوادم مرتبطة به، ليصبح لديكم نسخة تجريبية من اللعبة.
بعد تجريب النسخة البدائية من قبل فريق ضمان الجودة وبعض اللاعبين، تبين أنها ليست بالمستوى المتوقع، وتحتاج إمكانيات تفوق قدرة الشركة لتحسينها.
لذا قررت إلغائها والبدء بلعبة جديدة بنمط مشابه، سوف تكون لعبة سباق سيارات، سوف تنهيها بسنة واحدة هذه المرة.
لكن المشكلة هنا أنه لم يعد لديك ميزانية ووقت كافِيَين، فبرمجة نظام اللعب عبر الشبكة لهذه اللعبة سيحتاج إلى ما لا يقل عن ستة أشهر،
مما لا يُبقي أكثر من ستة أشهر أخرى لإنهاء اللعبة كاملة، ما العمل إذًا؟
هل تذكر الأنظمة التي قام مهندسوك ببرمجتها للعبة الطائرات السابقة؟ من المفترض أنهم قاموا ببناء الأنظمة بشكل يجعلها قابلة للتطبيق على مشاريع جديدة مشابهة.
لذا، فلتعطي مهندسي الشبكات بعض الوقت لتجهيز نظام اللعب عبر الشبكة السابق وربطه بالخادم الجديد.
وخلال هذا الوقت ابدؤوا العمل على نمط لعب السباق للعبة الجديدة، ها قد حفظت من وقتك ستة أشهر!
تعريف محرك الألعاب:
بعد مدة طويلة من تطوير الألعاب وبناء أنظمة برمجية, أصبحت عندما تبدأ العمل على لعبة جديدة, تجمع كل الأنظمة التي قمت ببنائها لألعاب سابقة.
هذه الأنظمة تسمى المكونات, هنا تقوم الشركات غالبا بربط هذه المكونات مع بعضها لتصبح:
بيئة عمل متكاملة تساعد في عملية بناء لعبة، أو “محرك ألعاب”.
بعض الشركات تقوم ببيع محركات الألعاب لشركات أو فِرَق أخرى مخصصة, مثل محرك Frostbite، أو قد تقوم بتقديمه للعامة مجانا, ووضع بعض التكاليف على مزايا معينة، مثل محركَي Unreal و Unity.
ماذا توفر لنا محركات الألعاب؟
بالنسبة للشركات أو صاحبي الخبرة، فمحركات الألعاب توفر لهم الوقت والمال، لأن بناء لعبة من بدون محرك ألعاب يكلف الكثير،
أما بالنسبة لنا، الهواة والجدد في هذا المجال, ففائدة محرك الألعاب أكبر من هذا بكثير.
لنرى كيف يكون ذلك عن طريق إلقاء النظرة على كل مكون من مكونات محرك الألعاب:
لن نحتاج للتعامل مع الذاكرة:
عندما تفتح لعبة ما على جهازك الخاص, بياناتها تذهب إلى الذاكرة العشوائية RAM.
ولحفظ واستخدام هذه البيانات بكفائة فإنك تحتاج إلى استخدام خوارزميات (خطوات برمجية رياضية) خاصة، تحدد المعلومات اللازمة لاسترجاعها وتبقيها في متناول الأيدي، وتتخلص من المعلومات غير اللازمة.
وهذا حقل خاص في البرمجيات يعرف بإدارة الذاكرة، ومن أهم مهامه هي تقسيم الذاكرة لأجزاء لكل عملية، ومحرك الألعاب يقوم بهذا تلقائيا، كجزء لبرنامج العرض وجزء لمنطق اللعبة مثلا، على حسب لغة البرمجة المستخدمة، لذا نحن نسلم منه!
نظام لكائنات اللعبة:
معظم محركات الألعاب تستخدم نظام عناصر الكائنات, و هندسة برمجية تعتمد على العناصر, حيث كل مجسم داخل اللعبة يكون كائن مستقل بإمكانك التحكم به برمجيا وإضافة عناصر وخواص له.
وهذا النظام يساعد في، مثلا، إضافة ملف برمجي واحد لعدة كائنات، أو ربط هذه الكائنات و ملفاتها البرمجية بمحرك الفيزياء، للتعديل على خواص الكائن الفيزيائية.
ولغة البرمجة التي تستخدمها للتحكم بعناصر الكائنات تحتاج لمترجم Compiler يحول الأكواد المكتوبة إلى صيغة قابلة للتنفيذ يستطيع المعالج فهمها.
ويجب أن يكون النظام مرِنًا لتستطيع التعديل عليه وإضافة برامج وسيطة، ومعظم محركات الألعاب تهتم بهذا الشأن ليستطيع المطورون ربط برامج وسيطة حسب الحاجة لإضافة ميزات أخرى.
محرك الفيزياء:
يقوم محرك الفيزياء بمحاكاة قوانين الفيزياء على المجسمات بشكل واقعي، إما بشكل تلقائي عن طريق تطبيق القوى الافتراضية كالجاذبية،
أو يدويًّا عندما تعطي أمرًا بتطبيق قوة معيّنة، كأن تحرك سفينة ما شمالاً بمقدار محدد.
ويستخدم محرك الفيزياء نظام كشف الاصطدامات، لِيوقِف السفينة السابقة عن الحركة عندما تضرب بجبل مثلاً، أو لتردد الكرة عندما تضرب بكرة أخرى،
وكشف التصادم يكون باستخدام معادلات رياضية وهندسية، بإمكانك التعرف على الموضوع هنا.
أشهر محركات الفيزياء هو محرك PhysX لانفيديا، فشركة Unity تستخدمه في محركها مع بعض التعديلات، وكذلك Unreal.
نظاما عرض وإضاءة جاهزين:
برنامج العرض Renderer هو ما يقوم بتكوين المجسمات وعرضها على الشاشة، فالمجسمات تحفظ في المحرك كأرقام (مثل مواقع رؤوس المجسم)،
وبعد أن يستلمها برنامج العرض من قبل نظام العناصر وبرنامج اللعبة، يقوم بإظهارها على الشاشة في الموقع المناسب في عالم اللعبة.
أما نظام الإضاءة فهو المسؤول عن حساب تفاصيل الإضاءة والظلال لكل مجسم حسب البيئة المحيطة به،
وأساس الحسابات يكون الفيزياء والرياضيات، لتظهر الإضاءة بشكل واقعي وجذاب، ويتم ذلك بال Shaders وهي أكواد برمجية تقوم بالعمليات الحسابية وترسل الناتج لبرنامج العرض.
نظام الصوتيات:
أقل ما يجب توفره في هذا النظام هو القدرة على إضافة الأصوات، تخزينها ثم فك ضغطها، وبثها عن طريق سماعة الجهاز، ويبدو هذا بسيطا،
ولكن ماذا عن تغيير تردد الصوت واهتزازه ( pitch)، إضافة ذبذبة وتأثيرات متعددة على الأصوات، وجعل الصوت ثلاثي الأبعاد ليعتمد على مكان اللاعب من مصدر الصوت؟
كلها خيارات متقدمة ومتوفرة في معظم أنظمة الصوتيات في محركات الألعاب، وبرمجتها على حدة تحتاج لمهندسي ومبرمجي صوتيات محترفين، لذلك حتى الشركات قد تستخدم برامج جاهزة للأصوات في محركها، مثل Wwise أو FMOD.
الرسم البياني للمشهد:
توفر محركات الألعاب مساحة فارغة بإمكانك تصميم لعبتك عليها، للألعاب ثنائية الأبعاد تكون مُستَوَى إحداثي في الاتجاهات الأربع، وثلاثية الأبعاد تكون مُستوى إحداثي يمتد لجميع الاتجاهات الستة.
وهذا يساعد في تصميم المراحل والمشاهد وبيئة اللعبة، حيث بعد أن تقوم بتصميم الصور أو المجسمات في برامج أخرى، بإمكانك وضعهم في الأماكن التي تريدها ليصبحوا من كائنات اللعبة..
ودمجهم بشكل سلس مع الواجهات المرئية UI، وإضافة خواص لكل كائن، كالفيزيائية أو الأصوات.
وبعض المحركات تقدم أدوات تسَهِّل هذا الموضوع أكثر، كطريقة لترتيب الصور المختلفة مع بعضها بسرعة لتبني المرحلة، وإضافة الحدود الفيزيائية التي تحتاجها، مما يجعل عملية التجريب أسرع بكثير.
نشر اللعبة لمنصات متعددة:
تكاد تكون أهم ميزة، فبعد أن تنتهي من تطوير نسخة للعبتك، تستطيع تصديرها لمنصات مختلفة في نفس الوقت، مع تعديلات على نمط التحكم (كإضافة اللمس للهواتف)، أو تخفيف الجودة للأجهزة الضعيفة،
مع أن هذا يوفر وقتًا هائلاً، ما زالت عملية نقل اللعبة من منصة إلى أخرى متعبة بعض الشيء، فنقل لعبة من الحاسب PC إلى جهاز Playstation 4 مثلا، يحتاج ما بين شهر إلى ثلاث شهور تقريبا..
لأن كل منصة لها متطلباتها الخاصة، ونظامها الخاص بالعب عبر الشبكة، وقواعد مختلفة لحماية اللاعب، وقواعد للأذونات والتحكم العائلي، وكلها تزيد من وقت النقل.
نظام اللعب عبر الشبكة:
لإضافة نمط multiplayer للعبتك، فأنت تحتاج أولا إلى خادم يحفظ المعلومات الأساسية كقائمة اللاعبين والمنافسات بينهم، وقد تحتاج إلى جهاز حاسب يقوم بتشغيل اللعبة ليكون كالحكم على المنافسة،
ثم ستبني نظام يتلقى ويرسل المعلومات من وإلى اللاعبين، ليعرض المنافسات للاعبين ويربطهم في لعبة واحدة. وعند جانب اللاعب، قد تستخدم خوارزميات تقوم بإخفاء التأخير في وصول البيانات.
تأتي معظم محركات الألعاب بهذه الأنظمة جاهزة، وهي تفي بالغرض للألعاب الصغيرة و المتوسطة على حسب عدد اللاعبين وكمية البيانات المستخدمة.
ولكن عند نقطة معينة، وعلى حسب المحرك المستخدم، في الغالب أنت ستحتاج إلى استخدام خدمات ومكاتب خارجية توفر خوادم أكثر تحملا للضغط وتحتوي على مميزات أكثر ودعم أفضل،
من الأمثلة على هذه الخدمات GameSparks أو Photon Networking
هذه المميزات والمكونات عامة لكل محركات الالعاب، ومازال هناك الكثير منها لم أكتب عنه..
مثل المؤثرات البصرية Visual Effects ونظام الجسيمات الذي يٌنتِجُها: Particle System، ونظام الحركة: Animations، والذكاء الاصطناعي المستخدم للتنقل: Navigation AI.
لأنها تحتاج بعض التفصيل الزائد, وقد تختلف بين كل محرك وآخر.
وسوف أساعدك في اختيار محرك ألعاب لتبدأ به في المقال القادم إن شاءالله.
وبالنسبة للسؤال في بداية المقال، يجب إعادة صياغته: هل نستطيع برمجة وبناء هذه المكونات بأنفسنا؟
ربما نعم عند بناء ألعاب بسيطة، إذا كنت تمتلك الخبرة بالطبع، ولكن محركات بمستوى Unreal أو Unity3D ؟
مرة أخرى، ربما، ولكنني لا أعتقد أن هذا هو الأسلوب الأفضل لاستثمار الوقت.