مدونة سلوان الهلالي

تطوير ألعاب - برمجة - علم نفس

كيف تعثر على تخصصك المفضل؟

احدى اكثر الأسئلة حيرة بالنسبة لي هو: لو عملت على لعبة كبيرة وترك لي قرار اختيار اي جزء من اللعبة سأكون مسؤولاً عنه، فهل سأستطيع ان اتوصل لقرار؟ ماذا لو سُئلت انت؟ هل تستطيع الاختيار؟   لا اخفي انني لا امتلك تخصصاً محدداً حتى الآن في تطوير الالعاب، وصدقوني هنالك الكثييـ....ـييير من التخصصات الممكنة، لكل منها عالم لوحده. حتى الآن اتبعت مبدأ Jack of all trades master of none، وقد يكون لذلك فوائد كبيرة في زيادة المعلومات وكذلك القدرة على العمل على المشاريع بشكل فردي، ولكن يجب عاجلاً ام آجلاً اختيار تخصص واحد فقط (كبداية) والتعمق فيه محاولاً الوصول للقاع في يوم ما... وقد يمكن في يوم من الايام ان آتي بطرق وتقنيات جديدة غير موجودة في ذلك التخصص... ولكن اي واحد؟   قمت بتجربة تمرين صغير اليوم في محاولة للتوصل لجواب ما.   أكتب قائمة بأفضل 5 العاب لعبتها في حياتك، لا تهتم للترتيب. لو كنت تستطيع اختيار ثلاثة اجزاء من كل لعبة لكي تعمل عليها، فأي أجزاء ستكون؟   بالنسبة لي، الوضع يبدو هكذا:   Shenmue I نظام الأحداث (تحديداً triggers وتتابع القصة) سوق Dobuita (الليل والنهار، الناس والمتاجر) حركة الشخصيات   Metal Gear Solid 3 المعارك مع القادة (boss fights) الذكاء الصناعي للحراس (من لا يتمنى العمل على ذلك؟ ) نظام الاشتباك (CQC)   Tomb Raider حركة لارا كروفت الاحداث السريعة المتتابعة الألغاز   Half Life 2 الفيزياء ودورها في اللعبة الإظهار المركبة الآلية التي تشبه العنكبوت! (هل كان اسمه Walker؟) Indigo Prophecy/Fahrenheit نظام الاحداث حركة الشخصيات الإظهار يبدو اني اميل الى حركة الشخصيات وكل ما تعلق بها... وعندما أفكر في الموضوع، يبدو الامر منطقياً! حيث مقالي في مسابقة المقالات التي اقامتها الشبكة العربية كان حول حركة الشخصيات، اما الالعاب التي تعجبني اكثر من غيرها فهي التي تكون فيها الشخصيات فريدة ومتكاملة وتساهم في القصة بشكل مباشر، كما اني كنت دائم الاهتمام بقضية تحريك الشخصيات في برامج التصميم وتصدير واستيراد الشخصية مع حركاتها. يبدو اني قد عثرت على تخصصي للتو...   ماذا عنكم؟  

محرك ألعاب إنكيدو 2

السلام عليكم،   لقد سألني أمس أحد الأصدقاء في الجامعة ماذا أفعل بالضبط؟ لأنه يسمع دائماً أني مشغول ولدي عمل كثير، لم استطع أن أجيبه بشكل مباشر، ولم أعرف كيف أجيب، ماذا كنت أفعل بالضبط خلال السنة الماضية وحتى الآن؟   قبل ما يقارب 8 أشهر، قررت الدخول في مجال تطوير الألعاب المستقلة والألعاب الخفيفة (casual) التجارية، وقد بدأت منذ تلك اللحظة وحتى الآن سباقاً مع الزمن للوصول لأنسب تقنية أستطيع استخدامها لبناء الألعاب مع الاحتفاظ بالمرونة الكافية لتنفيذ الأفكار الغير تقليدية، وقد اعطيت نفسي مهلة تنتهي بعد سنة تقريباً لكي أصدر أول لعبة لي، وهي أعتقد مهلة كافية. في الشهور الأولى، بحثت ونقبت في الانترنت عن محرك ألعاب كامل مجاني يتيح المنتجات التجارية استطيع استخدامه لعمل ألعابي ولكني لم أعثر على ضالتي، جميع المحركات المعروفة إما تكون محركات رسوميات فقط وذلك ليس ما أبحث عنه، أو تكون محركات لا تصل للمستوى المطلوب.   ولكن في نفس الوقت، بدأت ببناء المحرك الذي أبحث عنه ولم اعثر عليه، وقد اسميته إطار عمل إنكيدو، وهو محرك موجه لصناعة الألعاب ثنائية الأبعاد، يستند إنكيدو على مكتبة مفتوحة المصدر تسمى ClanLib وهي مكتبة نظام متكاملة موجهة للألعاب ومتعددة المنصات، تتضمن نظام GUI كامل، مكتبة شبكات موجهة للألعاب، مكتبة صوتية، نظام Signal/Slot لتوزيع الأحداث،... وأشياء كثيرة أخرى، وقد شاركني في العمل الصديق العزيز أحمد عز. عندما بدأت العمل كانت مكتبة ClanLib في الإصدارة 0.8 وكان هنالك الإصدارة 0.9 أيضاً ولكنها كانت تجريبية وغير كاملة في وقتها. بعد شهرين من العمل وصل محرك إنكيدو لشكل إعتقدته جيد، أضفت له مزايا مثل إمكانية تحميل الملفات -خاصة ملفات الإكساء- في الخلفية (secondary thread) لكي لا تقاطع سلاسة اللعبة، وهي الميزة التي شكلت أكبر تحدّي لي في تلك الفترة. بعد ذلك وبشكل مفاجئ غير متوقع تم اصدار النسخة 2.0 من مكتبة ClanLib، وقد احتوت على مزايا جميلة مثل الدخول لقواعد البيانات ونظام عرض ثلاثي الأبعاد متكامل مستند على OpenGL ويستخدم مظللات GLSL، وهذه مزايا كنت أخطط إضافتها مستقبلاً، لذلك لم يكن لدي خيار إلا التحويل لـ ClanLib2، وجدت لسوء الحظ إن جزءاً كبيراً من إنكيدو يجب إعادة كتابته، لأن ClanLib2 يختلف كثيراً، كذلك فوجئت عندما اكتشفت أنهم قرروا إلغاء نظام الموارد (Resource System) الذي كان موجوداً في النسخة الأولى والذي يستند عليه نظام إدارة الموارد في إنكيدو، وبالتالي إضطررت لإلغاء نظام إدارة إنكيدو بالكامل أيضاً. بسبب الإعتمادية الكبيرة على ClanLib القديم أصبح إنكيدو فجأة لا يصلح لشيء، في النهاية شطبته بالكامل وقررت إعادة كتابته بطريقة أفضل، احتفظت بالنسخة القديمة واسميت النسخة الجديدة Enkido2.   بعد ذلك توقفت عن العمل لما يقارب 4 شهور بسبب الامتحانات وبسبب إنضمامي لشركة TimeLine Interactive كمبرمج ألعاب متدرب في فترة الصيف. عندما إنتهت فترة التدريب، عدت للعمل بقوة على Enkido2، حتى وصلت بحمد الله إلى الإصدارة التجريبية 0.2، المزايا الموجودة الآن في المحرك يمكن تلخيصها كالآتي: تتألف الألعاب في Enkido2 من عالم اللعبة (World) ��هو يدير كل شيء، عدد من المشاهد (Scenes)، وعدد كبير من عناصر اللعبة (Entities) سواء كانت مرئية أو غير مرئية، والتي تشكّل المشاهد. إمكانية تبادل المعلومات بين جميع الأجزاء عن طريق الرسائل. دعم العمق (Z-index) أثناء الرسم ويقوم جزء خاص من المحرك بعملية ترتيب العناصر حسب عمقها لكي ترسم بشكل صحيح، إحدى المحدوديات التي لم أستطع تلافيها أن كل عنصر يستطيع الرسم لعمق واحد فقط، لا يمكن مثلاً رسم الجسم وظله كل في عمق مختلف من قبل عنصر لعبة واحد. بنك المعلومات (InfoBank) ويمكن استخدامه لحفظ أي بيانات يجب أن تتوفر بشكل Global لجميع الأجزاء. نظام لقياس الأداء التفصيلي (Profiler) مدمج ضمن المحرك. يستخدم المحرك ملفات إعدادات (configurations) تعتمد XML. نظام لتسجيل وتوزيع أحداث الإدخال (Input Events) حالياً يقدم دعم للوحة المفاتيح فقط، يتم تسجيل الأحداث فيه عن طريق ملفات XML الخاصة بالإدخال. نظام مؤقت للتعرف على التصادم بين أجزاء اللعبة يدعم التصادم باستخدام الصندوق المحيطي وتعريف مجموعات تصادم مختلفة. نظام بسيط لآلات الحالة State Machines يمكن إضافتها لأي عنصر.   المشكلة التي أعتقد أنها تواجه جميع المطوّرين الذين يعملون لفترة طويلة على مشروع كهذا أنهم يكتشفون بعد عدة شهور طرق أفضل لكتابة بعض الأجزاء التي تمت كتابتها في البداية، وقد واجهت عدة مرات هذه المشكلة وفي احدى المرات أعدت كتابة المحرك بكامله، وانا لا زلت اواجهها الآن، لا أعرف كيف أتعامل مع هذه الرغبة التي تدفعني لإعادة كتابة جزء ما بطريقة أفضل خاصة وأن ذلك يعني إعادة كتابة عدة أجزاء تعتمد عليه أو حتى إلغاء أجزاء بالكامل، هكذا لن أنتهي من هذا المحرك للأبد، وانا فعلاً في حيرة، ماذا كنتم لتفعلوا إن كنتم مكاني؟ نصائحكم؟   بالنسبة لـ Enkido2، قررت بناء المحرك عن طريق التطبيق، كيف ذلك؟ ما أقوم به هو عمل فكرة للعبة بسيطة جداً تستخدم مكونات محددة من المحرك هي قيد التطوير حالياً، وأمشي في تطوير المحرك بموازاة تطوير اللعبة، بحيث أكتشف أحياناً مشاكل عملية في تصميم أجزاء المحرك من المستحيل التعرّف عليها لو تم بناء المحرك بشكل مستقل، وجدت أن هذه الفكرة ممتازة، وأنصح بها شخصياً لمن يطور محركه الخاص لأهداف عملية لأول مرة، المشكلة الوحيدة التي لم أحلها هي أن بعد عدة ألعاب سوف تكون هنالك أجزاء كثيرة تغيرت من المحرك ويكون هنالك احتمال كبير أن الألعاب التي تم عملها في السابق لن تعمل الآن إلا بإعادة كتابتها، وإعادة الكتابة قد تأخذ وقتاً طويلاً.   بالنسبة للإصدار 0.2 من المحرك، كان التركيز على أساسيات المحرك نفسه، وقد انشأت لعبة صغيرة أسميتها TopDown Shooter (ليس أفضل إسم جئت به بالتأكيد )، يمكنكم تجربة اللعبة (وإعلامي بأي مشاكل تلاحظوها إن لم يكن في ذلك مانع): TopDown Shooter (الحجم: 3 MB) موسيقى البداية هي أحد مقاطع موسيقى Metal Gear والمسماة "Old Snake"، وقد أضفتها لتجربة تشغيل الموسيقى بطريقة Streaming، تشغيل الصوت يتم في مسار تنفيذ ثانوي (secondary thread).   الإدخال: مفاتيح الأسهم لتحريك الدبابة. مفتاح المسافة أو مفتاح الإدخال لبدء اللعبة أو تجاوز الشاشات مثل المقدمة. مفتاح المسافة لإطلاق النار. مفتاح `p` لعمل pause للعبة. مفتاح Escape في أي وقت للخروج من اللعبة.   للحصول على نقاط إضافية ثمينة يمكنك محاولة إسقاط الصواريخ باستخدام المدفع. صورة من اللعبة:     بالمناسبة لعلكم لاحظتم الاسم (RedHawk Interactive) في البداية وهو فقط اسم مؤقت، لدي اسم أفضل بدأت باعتماده مؤخراً.   ماذا بعد؟ سؤال محيّر دائماً. هدفي الآن الوصول للإصدارة 0.3 من المحرك وأثناء ذلك تطوير لعبة صغيرة جديدة سأطرحها أيضاً للتجربة عندما تكتمل، الإصدارة الجديدة سوف تشهد إضافة ما يلي للمحرك: استبدال نظام التصادم البسيط الموجود حالياً بمحرك فيزياء ثنائية الأبعاد كامل، سوف استخدم Box2D لهذا الهدف. هنالك مشكلة في ClanLib2 وهي أنه يقدم نظام إحداثيات يعتمد على إحداثيات النافذة، أي إن كانت النافذة 800x600 سوف تكون إحداثيات ClanLib للرسم 800x600 أيضاً، ما أود الوصول إليه هو تثبيت الإحداثيات بغض النظر عن إحداثيات النافذة، كما أن محرك الفيزياء يحتاج إحداثياته الخاصة والتي يجب أن لا تتجاوز 100 وحدة للطول او العرض (للحصول على أفضل دقة لـ Box2D في التعرّف على التصادم والحسابات الفيزيائية يجب ان تكون أبعاد الأجسام من 10 وحدات إلى 0.1 وحدة)، لذلك سوف استخدم نظام احداثيات موحّد غريب قليلاً، مثلاً 100x100 مشترك بين إنكيدو و Box2D، لا زلت أفكر بطريقة لحل هذه المشكلة وأرحب بأي اقتراحات. إنشاء نظام الكاميرا والتي تستطيع الحركة بأربعة اتجاهات إضافة إلى عمل zoom in/out، ترتبط الكاميرا إرتباطاً كبيراً بما أتوصل إليه في ما يخص محرك الفيزياء والإحداثيات الموحدة. تحسين قابلية الاتصال بين عناصر اللعبة المختلفة عن طريق إضافة إمكانية امتلاك عناصر اللعبة لأسماء وسم (tags)، ويمكن كذلك إعطاء العنصر إسماً يشير لطبيعته (names)، مثلاً العنصر الذي يمثل اللاعب سوف يحمل الاسم "Player". أيضاً إضافة إمكانية الاستعلام عن العناصر بالاسم أو الوسم عن طريق المشهد الحالي. أحد المتطلبات التي اكتشفتها خلال تطوير TopDown Shooter الحاجة للربط بين عنصري لعبة بحيث يعتمد أحدهما على الآخر، إن تم تدمير عنصر معين يتم تدمير جميع العناصر التي تعتمد عليه، ينطبق هذا الكلام على الطائرة وظلها مثلاً، الظل يعتمد على وجود الطائرة ويجب تدميره عند تدمير الطائرة، في TopDown Shooter الطائرة وظلها يرسمهما عنصر واحد (أي في نفس العمق) ولكن ذلك لم يسبب أي مشاكل مرئية ملحوظة بسبب بساطة اللعبة. نظام إدارة اصوات للعبة: هنالك مشكلة عملية أيضاً وهي عند تشغيل المؤثرات الصوتية مرة واحدة (fire and forget) واثناء ذلك قام اللاعب بعمل pause، يجب عمل pause لجميع المؤثرات الصوتية التي تعمل في تلك اللحظة، لا يحصل هذا الآن، نظام إدارة (أو قل تشغيل) الأصوات يقدم مقابس للمؤثرات الصوتية بعدد محدود (sound banks) ويتولى عملية أيقاف وتشغيل المؤثرات الصوتية والموسيقى عند عمل pause للمشاهد.   بالطبع لدي فكرة للعبة الصغيرة التالية، وقد قام صديقي الفنان عاصف برسم بعض الشخصيات التي ستدخل في اللعبة التالية:     شكراً عاصف   ما مستقبل إنكيدو 2؟ لم أتكلم حتى الآن عن إمكانية إصدار المحرك في يوم ما للعامّة، هنالك إمكانية بالطبع ولكن ليس الآن وهو لا زال في المراحل الأولى ويتغير باستمرار. من المزايا التي انا عازم على إضافتها: نظام موارد متكامل يستطيع التحميل من ملفات مضغوطة (قد تكون مشفّرة) مع تقديم طريقة لتحميل موارد المشاهد قبل تشغيل المشهد مع إظهار progress bar وما إلى ذلك، قد يستخدم نظام الموارد قاعدة بيانات فعلية لمتابعة كل شيء. برنامج Project Editor: يستطيع تعديل وإنشاء أجزاء كثيرة من اللعبة مثل إنشاء الأشباح (sprites) ومعلوماتها الفيزيائية، الخطوط، رزم الموارد، كتابة نصوص إعداد اللعبة، عمل build لكل شيء، كتابة وتعديل النصوص البرمجية للعبة، ...الخ أود أن أنقل كتابة اللعبة نفسها من كود ++C إلى نصوص برمجية ينفذها المحرك لتسريع وتسهيل عملية تطوير الألعاب، سوف استخدم مكتبة Mono الرائعة لإنشاء نظام النصوص البرمجية وتنفيذها بطريقة JIT للترجمة، بسبب ذلك فالأداء سيكون مقارب من أداء ++C ويمكن كذلك كتابة النصوص بأي لغة برمجية تدعم CLI، مثل #C، فجوال بيسك، أو Python، لقد شغلت هذه الميزة فعلاً للتجربة خارج إنكيدو حالياً، وانا عازم على إعتماد لغة Boo (وهي نكهة من Python مع دعم لـ static typing و generators ومزايا أخرى لطيفة). دعم لأنظمة الجزيئات (particle systems) وامكانية كتابة نصوص XML لتعريف تلك الأنظمة باستخدام Project Editor. نظامان للإظهار. القياسي يستخدم المظللات (shader driven)، اما في حالة عدم إمكانية العتاد التعامل مع المظللات، يمكن استخدام نظام الإظهار الثانوي والذي يعتمد ممر الرسوميات الثابت (Fixed Function Pipeline). النظامان يستخدمان OpenGL.   كما ترون المشروع ضخم رغم كونه محرك ألعاب ثنائية الأبعاد فقط، الهدف منه الوصول لمحرك يمكن استخدامه لإنشاء ألعاب 2D ذات جودة عالية بأقصر وأسهل طريقة ممكنة، عندما استطيع تطوير لعبة كاملة من البداية للنهاية خلال شهر أو إثنين، أكون قد حققت الهدف المراد من تطوير المحرك. ... وها انا بدلاً من العمل على إضافة محرك الفيزياء لإنكيدو 2، أكتب قصة حياتي، عد إلى العمل! *يصفع نفسه عدة مرات عقاباً*  

كرنفال المطوّرين المستقلين: UDK

من أشهر محركات الألعاب اليوم هو محرك Unreal Engine، هو بلا منازع أكثر محركات الألعاب استخداماً حتى الآن، خاصة إصدارته الثالثة والتي تم استخدامها لتطوير Batman Arkham Asylum و  Mirror's Edge و Gears of War وآخرين، ما أروع الحصول على نفس الأدوات التي تم استخدامها لتطوير هكذا ألعاب؟ في مفاجأة رائعة فجرّتها شركة Epic قبل أسابيع، تم طرح طقم تطوير Unreal والمسمى UDK اختصاراً، والمذهل في الموضوع إنه نفسه محرك Unreal Engine 3 ولا وجود لأي محدودية مفروضة على إمكانياته على حد علمي، يتضمن UDK كذلك مجموعة من التقنيات التجارية مثل FaceFX و SpeedTree والمضمنّة مع المحرك لكي تستخدمها مجاناً! (اتفاق بين Epic والشركات المسؤولة عن تلك التقنيات) هل بدأ لعابك يسيل؟ لقد بدئنا للتو..     Unreal Development Kit   UDK هو Unreal Engine 3 نفسه، إطار العمل الاحترافي المتكامل والذي يضم عدداً كبيراً من الأدوات التي تمكنّك من تطوير ألعاب عظيمة، إنشاء عوالم افتراضية، أو تطوير برامج محاكاة واقعية. تم تطويره من قبل شركة Epic Games بقيادة Tim Sweeny مؤسس الشركة، أول ظهور لـ Unreal Engine كان سنة 1998 في ثاني لعبة ناجحة للشركة والتي سميت Unreal، أصبح Unreal Engine في السنوات اللاحقة أساساً للكثير من الألعاب ذات الجودة العالية. آخر جيل من المحرك هو الجيل الثالث، من الألعاب التي استخدمته: Unreal Tournament 2007 Gears of War Bioshock Mirror's Edge Batman Arkham Asylum Mass Effect وغيرها كثير نواة المحرك مكتوبة بلغة ++C ويقدم محرك Unreal Engine 3 الكامل دعماً لجميع المنصات الأساسية مثل Windows، Linux، MacOS X، XBOX360، Playstation3 ودعم لـ DirectX9، DirectX10، OpenGL حسب المنصة، أما UDK فبالطبع يقتصر دعمه على Windows فقط، وكذلك فإن كود ++C للمحرك غير مقدّم مع UDK.   التطوير   يختلف محرك Unreal عن جميع المكتبات والمحركات المجانية الأخرى في إنه مصمم لكي يتم استخدامه من قبل فريق تطوير ألعاب، عدد الأدوات التي يوفرها Unreal كبير وكل شيء تقريباً يمكن القيام به ب��ريقتين على الأقل، طريقة تناسب المطوّرين، وأخرى موجهة أكثر للفنانين، لذلك أعتقد أنّ من الصعب الوصول لأكبر فعالية ممكنة في استخدام محرك Unreal من دون فنّانين مختصين.   محرّر Unreal   الأداة الرئيسية التي يعتمد عليها محرك Unreal هي المحرّر UnrealEd، ويمكن من خلاله عمل كل شيء تقريباً عدا كتابة البرامج التي تعرّف عناصر اللعبة (Actors) في Unreal. ولكن ما هي عناصر اللعبة؟ كما في Unity والكثير من محركات الألعاب الأخرى يتألف العالم من مجموعة من العناصر التي تسمى Actor أو GameObject أو Entity (أو ما شابه) والتي تشكل بمجموعها اللعبة نفسها، قد يكون العنصر شجرة أو صخرة لا تتحرك ولا تتفاعل مع أي شيء، او قد يكون وحش كاسر يمتلك ذكاء اصطناعي، مخالب مخيفة، وكره شديد غير مبرّر تجاه اللاعب، أو قد يكون العنصر أميرة حسناء محبوسة في قمة قصر، صاروخ أطلقته دبابة معادية، أو سيارة يستطيع اللاعب أن يركبها ويقودها ويحولها إلى طائرة عندما يريد، ... حسناً سأتوقف الآن. في Unreal يسمى عنصر اللعبة الواحد Actor، وهنالك طريقة واحدة فقط لكتابة عناصر جديدة وهي البرمجة باستخدام UnrealScript. UnrealScript هي اللغة التي يستخدمها Unreal وهي تستعير أفكار من لغتي ++C و Java، ولكن تضيف الكثير من الأفكار الموجهة للألعاب خصيصاً، على سبيل المثال كل عنصر يمتلك State Machine تعمل بالتوازي مع كود العنصر الفعلي، وكذلك فإن إمكانات الشبكات وتعدّد اللاعبين (networking/multiplayer) جزء من اللغة نفسها وليست مكتبة منفصلة. أول عيب لاحظته في UDK هو عدم توفير برنامج لكتابة أكواد UnrealScript، يمكن بالطبع استخدام أي محرّر نصوص اعتيادي بدءاً من Notepad وانتهاءاً بـ Visual Studio، ولكن ليس لدي معلومات حول إمكانية إعداد Debugger لـ UnrealScript يدوياً باستخدام ادوات خارجية.   الجزء الرئيسي من محرّك Unreal هو محركّ اللعبة، ومعظمه مكتوب بلغة UnrealScript ويمكنك أن تلقي نظرة على الأكواد في المسار التالي (UDK/Development/Src/Engine/Classes)، على سبيل المثال تصفح ملف Actor.uc والذي يتضمن تعريف عنصر اللعبة النموذجي وجزء كبير من خصائصه مثل الفيزياء والحركة، يمكنك قراءة الكود بسهولة حتى وإن لم تكن درست UnrealScript لأنه مشابه لـ ++C كما ذكرت. ولكي تزيد الأمور روعة، تقدم Epic مع UDK ديمو كامل للعبة Unreal Tournament مع أربعة خرائط، وبالطبع، أكواد اللعبة وعناصر اللعبة مقدّمة بالكامل لكي تستفيد منها، تجد تلك الأكواد في المسار (UDK/Development/Src/UTGame/Classes).   ديمو UTGame   بالإضافة إلى ذلك هنالك 3 ألعاب معمولة باستخدام UDK مقدمة لنا للدراسة، Whizzle وهي لعبة من نمط Casual، والثانية The Ball وهي تعديل على لعبة Unreal Tournament، وأخيراً Prometheus وهي لعبة شبيهة بلعبة Portal.   من الجدير بالذكر أن عدم توفير كود ++C لمحرك Unreal Engine سوف يؤدي إلى حتمية الاعتماد الكامل على UnrealScript وهي لغة يقوم محرك Unreal بتنفيذها بطريقة التفسير فوري (Interpreted) من ما يعني أنها أبطئ كثيراً من كود ++C، قد يؤثر ذلك على المشاريع المتوسطة التي يتم تطويرها باستخدام UDK لأن أي أكواد معقدة سوف تكون بالنتيجة بطيئة، وسوف يؤثر ذلك سلباً بالتأكيد على المشاريع الضخمة تأثيراً جدّياً. من الأفضل أن أشير أيضاً إلى أن كود UnrealScript الذي يشكل محرك اللعبة والمقدم مع UDK يقدم اداءاً جيد جداً لسبب، إن حاولت تصفح بعض ملفات UnrealScript المقدمة لا شك أنك لاحظت معرّفات كثيرة تسبق تعريف الإجراءات وأحياناً تصف class معيّن، يهمنا هنا تحديداً المعرّف native، يعني هذا المعرّف أن كود الإجراء الفعلي (أو جزء من الـ class) مكتوب باستخدام ++C للحصول على أفضل اداء ممكن، وليس باستخدام UnrealScript، بطبيعة الحال لا نملك مع UDK هذه الإمكانية، ألا وهي كتابة جزء من الكود في ++C، كذلك لا يمكن تعديل جزء كبير من محرك اللعبة المقدّم مع UDK مباشرة، لأن أي تعديل على جزء native يجب أن ينعكس على ++C ونحن لا نملك تلك الإمكانية، ولكن يمكن بدلاً عن ذلك وراثة class من نوع native، وعمل override لإجراءاته. ونقطة أخيرة تعد معلومة جديدة بالنسبة لي ذكرها المطوّر وسام البهنسي مشكوراً وهي عدم إمكانية كتابة مظللات مباشرة بالكود، وبالتالي فإن الخيار الوحيد لإنشاء المظللات هو محرّر المواد المرئي الذي هو جزء من UnrealEd. ومن المهم فهم تبعات عدم تقديم كود ++C قبل اتخاذ قرار استخدام UDK لعمل مشروع جدّي.   رخصة الاستخدام رخصة استخدام UDK فريدة من نوعها بالنسبة لمحرك ألعاب تجاري (خاصة من هذا الحجم)، وسأركز على تطوير ألعاب باستخدامه لأن هنالك شروط خاصة بتطوير برامج لمؤسسات ثالثة وغير ذلك من الكلام الذي لا يهمنا هنا، كبداية فإن المحرك مجاني تماماً للاستخدام الشخصي الغير تجاري بلا قيود، عندما تقرّر تطوير لعبة تجارية باستخدام UDK يمكنك تطوير اللعبة مجاناً أيضاً، ولكن عندما تنتهي من اللعبة وتستعد لإصدارها يجب أن تدفع رسماً مقداره 99 دولاراً فقط للحصول على الرخصة المسماة Royalty Bearing License، ليس واضحاً لي ما إذا كان هذا الرسم يدفع مرة واحدة للمنتج الأول فقط أو يجب دفعه لكل منتج، على كل حال فهو مبلغ رمزي ولا مشكلة إن كان يدفع لكل منتج. والآن، لنفرض أنك قد أصدرت لعبتك وبدأت أرباح المبيعات تصلك، الـ 5000 دولار الأولى من الأرباح التي تحصل عليها لك بالكامل، ولا تطالب Epic بأي نسبة هنا، بعد الـ 5000 دولار الأولى يجب عليك أن تدفع لشركة Epic ما نسبته 25 بالمئة من الأرباح، تلك هي الرخصة باختصار. على سبيل المثال، لنفترض أنك طوّرت لعبة أسميتها الأرنب المفترس، ثم قررت إصدارها تجارياً، يجب عليك أولاً دفع 99 دولار لشركة Epic للحصول على حق النشر التجاري، لنفترض أنك حصلت على أرباح  5000 دولار من اللعبة في أول شهر، هذه الأرباح لك بالكامل (مبروك مقدماً وأنت مطالب بعزيمة غداء محترمة)، ثم في الشهر الثاني حصلت على أرباح 10000 دولاراً، فيجب أن تدفع من هذه الـ 10000 دولار 25% أي 2500 دولار لشركة Epic، وتستمر بعد ذلك في دفع 25% من أي أرباح تحققها اللعبة.   مزايا UDK محرّر Unreal والذي يقدم بيئة تحرير كاملة لمشروعك مع إمكانية استخدام جميع أدوات المحرّك الأساسية من داخل المحرّر. أهم تلك الأدوات: محرّر التضاريس (Terrain Editor) محرّر المواد (Material Editor): يقدم نظاماً فريد من نوعه لإنشاء المواد بشكل مرئي، يمكنك استخدامها لكي تطوّر مظلّلات لعبتك ومؤثراتها خاصة من دون الحاجة لكتابة سطر برمجي واحد. (تذكّر أن معظم أدوات المحرّر موجهة للفنانين الذين ليسوا من المعجبين بالبرمجة عادةً) محرّر المجسّمات (Mesh Editor): يمكنك تغيير الخصائص الفيزيائية للمجسّم كذلك يمكن تبسيط المجسّم، إنشاء مستويات الدقة للمجسّم، إنشاء إحداثيات الإكساء، وكذلك أداة لتكسير المجسّم لإضافة قابلية التدمير. محرّر الحركة (Animation Editor): لضبط الحركة العظمية للشخصيات وربطها بأحداث اللعبة وأكواد UnrealScript. محرّر النباتات (Foliage Editor): يستخدم محرّك SpeedTree لإنشاء الأشجار، الحشائش، والزهور بكافة الأشكال والأحجام. محرّر الهياكل الفيزيائية (Unreal PhAT): يمكن استخدامها لإنشاء هيكل عظمي فيزيائي للشخصيات والأشياء للحصول على مؤثرات من قبيل الدمى القماشية (Ragdolls). محرّر الأنظمة الجزيئية (Unreal Cascade): تستخدم لإنشاء الأنظمة الجزئية والمؤثرات البيئية. محرّر السينمائيات (Unreal Matinee): أداة إنشاء العروض السينمائية للعبة (Cutscenes or FMVs). محرّر النصوص البرمجية المرئي (Unreal Kismet): يمكن استخدامه لكتابة أكواد بسيطة بشكل مرئي، مثلاً إن أردت أن تشغل مصعد ضمن مرحلة من مراحل اللعبة يمكنك كتابة وظيفية المصعد باستخدام Kismet. محرّر واجهة المستخدم (UI Editor): يمكن استخدامه لإنشاء قوائم اللعبة وواجهتها (HUD) بالشكل الذي ترغب فيه، يقدم دعم لاستيراد خطوط TrueType. محرّر الصوت (Sound Cue Editor): لإنشاء الأحداث الصوتية وتغيير خصائص الصوت. محرّر المؤثرات الخاصة (Post-process Editor): يمكنك إنشاء أي عدد من المؤثرات الخاصة التي تنطبق على كامل العرض مثل Depth of Field أو Motion Blur. متصفح المحتوى (Unreal Content Browser): أداة لإدارة جميع محتويات اللعبة. الإظهار: نظام إظهار Gemini يقدم لك نظام إظهار متعدد المسارات (multi-threaded) يتيح إظهار مشاهد معقدة ومفصلة، يستطيع كذلك تعديل دقة المشاهد والمؤثرات الخاصة لكي يتناسب مع العتاد الذي يعمل عليه، يستند النظام على 64-بت HDR ويقدم مؤثرات كثيرة يمكن تطبيقها على المشاهد مثل Depth of Field، Motion Blur، و Bloom مع إمكانية إنشاء مؤثرات جديدة بأيدي الفنانين. الحركة: نظام قوي للحركة، مع محرّرات متعددة، يستطيع نظام الحركة تطبيق الحركات الإجرائية (Procedural Animation) على الهياكل العظمية للشخصيات ويقدم نظام حركية عكسية كامل (Inverse Kinematics)، نظام حركة المجموعات، دعم لحركة الوجوه التحولية وإمكانية إنشاءها وتصديرها في Maya أو Max. النصوص البرمجية: إمكانية كتابة النصوص البرمجية باستخدام لغة UnrealScript وهي لغة عالية المستوى مرنة وبسيطة، وإمكانية كتابة النصوص البرمجية بشكل مرئي باستخدام Unreal Kismet. الفيزياء: يستخدم Unreal محرك الفيزياء PhysX من NVIDIA مع دعم لفيزياء العربات (Vehicle Physics)، البيئات القابلة للتدمير، نظام لمحاكاة الحشود (Crowd System). الإضاءة والظلال: دعم لجميع تقنيات الإضاءة الحديثة (مثل Ambient Occlusion)، نظام Unreal Lightmass لإنشاء الإضاءة المحسوبة مسبقاً (باستخدام Global Illumination)، دعم للظلال في الزمن الحقيقي إضافة لتنعيمها. المشاهد السينمائية: يمكن استخدام أداة Unreal Matinee لإنشاء المقاطع السينمائية بتحكم كامل بالكاميرات والمؤثرات الصورية. الشبكات: نظام ألعاب شبكات عالي المستوى مع دعم عدد لاعبين يصل 64 واللعب عن طريق الإنترنت أو الشبكة المحلية. المظلّلات: أداة تصميم مظلّلات مرئي مشابهه للأدوات الموجودة في برنامجي XSI و Maya موجهة للفنانين. الصوت: دعم الأصوات ثلاثية الأبعاد، يستخدم Unreal مكتبة Ogg Vorbis لضغط الملفات، ويأتي مجهز بمحرّر أصوات. الأنظمة الجزيئية: محرّر الأنظمة الجزيئية Unreal Cascade لإنشاء المؤثرات. الذكاء الاصطناعي: نظامان لإنشاء المسارات في العالم ثلاثي الأبعاد مع خوارزمية خاصة لإيجاد المسار. الفيديو: يستخدم Unreal أداة Bink Video لترميز الفيديو. النباتات: محرّك SpeedTree الكامل متوفر مع UDK (برنامجي SpeedTree Modeler و SpeedTree Compiler المستقلين عن المحرّر)، يستطيع المحرّك إنشاء الأشجار والأعشاب بكافة أشكالها وأنواعها وتحريكها بشكل صحيح. حركة الوجوه: نظام FaceFX مضمّن كجزء من UDK، يستطيع تحريك وجوه الشخصيات إستناداً إلى الملفات الصوتية للكلام.   روابط مهمة موقع UDK الرسمي شبكة مطوّري Unreal - وثائق المحرك ومقالات متنوعة رخصة استخدام UDK مزايا UDK تحميل UDK الآن قائمة الألعاب التي تستخدم محرك Unreal  

كرنفال المطوّرين المستقلين: Unity

بشرى سارة لمطوّري الألعاب المستقلين، لقد اصبح بإمكانكم استخدام اشهر محركات الألعاب المتوفرة مجاناً! خلال الشهر الماضي، قامت عدة شركات بطرح محركات ألعابها التجارية للاستخدام المجاني متوجهة بذلك إلى دعم المطوّرين المستقلين ذوو الإمكانات المادية المحدودة، ولا شك أنّ لإزدهار تطوير الألعاب المستقلة في السنوات الأخيرة التأثير الأكبر لهذا التوجه الجديد. سوف أستعرض في سلسلة من التدوينات عدد من تلك المحركات، ولنبدأ بأولها...   محرك Unity3D   أحد محركات الألعاب الأكثر متعة في الاستخدام، كان هذا المحرّك حديث أروقة مطوّري الألعاب لفترة من الزمن، بدأ تطويره قبل عدة سنوات وأول ظهور لاصدارته التجارية كان في سنة 2005 وهو الآن في الجيل الثاني، يدعم هذا المحرك أنظمة التشغيل Windows و Mac OSX ويستطيع تشغيل الألعاب عن طريق المتصفح مباشرة عن طريق Unity web player plugin ويدعم جميع المتصفحات المعروفة، ويبلغ حجم Unity web player ثلاثة ميغابايت فقط، بالنسبة للمنصات فهو يدعم Wii و iPhone.   التطوير يعتمد محرك Unity على مبدأ بيئة التطوير بطريقة شبيهه بمحرك وبرنامج التصميم ثلاثي الأبعاد Blender3D، يمكنك كتابة النصوص البرمجية التي تشكّل اللعبة من داخل بيئة Unity باستخدام أي من لغات البرمجة المدعومة حالياً: #C Javascript نكهة من نكهات Python تسمى Boo   بيئة تطوير Unity   من الداخل، يستخدم المحرك زمن تشغيل MONO لتنفيذ النصوص البرمجية، يقود ذلك إلى الحصول على أداء جيد جداً مقارب لأداء ++C، مايكروسوفت دوت نت يستخدم المبدأ نفسه (مبدأ Just-In-Time Compiler).   رخصة الاستخدام وهي رخصة المحرك الموجهة للمطوّرين المستقلين، قبل أسبوع كانت هذه الرخصة تكلّف 500 دولاراً، اما الآن فهي مجانية! سواءاً كانت للاستخدام الشخصي أم التجاري(هنالك شرط واحد مهم وهو إن كانت أرباح شركتك تتعدى 100 ألف دولار سنوياً لا يحق لك استخدام النسخة المجانية)، ولكن بالطبع النسخة المجانية تأتي مع بعض المحدودية، أولها ظهور شاشة عند تشغيل اللعبة تشير إلى إن اللعبة تستخدم محرك Unity إن تم تشغيل اللعبة كتطبيق مستقل على وندوز أو ماكنتوش، أما في حالة تشغيلها داخل متصفح فتظهر علامة مائية في إحدى الزوايا باسم Unity.   تستخدم Unity - تظهر في بداية تشغيل اللعبة   كذلك هنالك مزايا متقدمة تم تعطيلها في الإصدارة المجانية يحصل عليها من يشتري الرخصة الإحترافية Pro من Unity (حالياً يبلغ سعر الرخصة الاحترافية 1500 دولار)، تضم هذه المزايا بعض الأشياء المهمة مثل امكانية برمجة جزء من اللعبة عن طريق ++C/C أو إظهار الظلال أثناء التنفيذ (Realtime Shadow) وكذلك إظهار التأثيرات الخاصة التي تنطبق على كامل الشاشة (fullscreen post-processing effects).   مزايا المحرك تحت الرخصة المجانية مزايا بيئة التطوير (Editor): يمكن تشغيل اللعبة من داخل البيئة مباشرة، تقدم البيئة عدداً من المكونات الجاهزة التي يمكن استخدامها داخل اللعبة (Prefabs)، يتم تجهيز ملفات اللعبة كاملة وجاهزة للتوزيع بضغطة زر واحدة. مزايا الرسوميات: أداء عالي، دعم لـ Direct3D و OpenGL، دعم الأنظمة الجزيئية. استيراد الموارد: يدعم Unity نظام كامل لاستيراد الموارد للصور ثنائية الأبعاد والمجسّمات ثلاثية الأبعاد (مع الحركة طبعاً) مع دعم جميع برامج التصميم ثلاثية الأبعاد المعروفة، لحظة حفظك للملفات الناتجة من برامج التصميم يقوم Unity بتحديث الملفات التي لديه، دعم استيراد المقاطع الصوتية وتحويلها إلى هيئة Ogg داخلياً. التوزيع (Deployment): دعم التطبيقات المستقلة بذاتها (standalone) تحت نظامي Windows و Mac، دعم تشغيل الألعاب عن طريق جميع المتصفحات المعروفة على نظامي التشغيل المذكورين. المظللات (Shaders): عدد من المظللات الجاهزة المبنية مسبقاً (40 مظلّل)، نظام مبسط لبناء المواد. خرائط التضاريس (Terrain): نظام كامل للتضاريس يدعم الأشجار، الأعشاب، الصخور، والإضاءة عن طريق خرائط الضوء (light mapping). دعم الشبكات: دعم كامل مبني داخل Unity للشبكات، إمكانية التعامل المباشر مع بروتوكولات الإنترنت UDP و TCP/IP، يمكن عند تشغيل اللعبة داخل متصفح التعامل مع AJAX. الفيزياء: يستخدم Unity محرك PhysX للفيزياء. النصوص البرمجية: يستخدم Unity زمن تشغيل MONO للحصول على أداء مقارب لبرامج ++C ويقدم واجهة استخدام شبيهه تماماً بتلك التي يقدمها دوت نت، دعم لغات برمجة متعددة. الإضاءة: دعم لخرائط الإضاءة (Light Maps). الوثائق (Documentation): توثيق كامل لمزايا المحرك ودروس تفصيلية كاملة تتضمن دروس لبناء ألعاب ثلاثية الأبعاد من الصفر.   روابط مهمة موقع محرك Unity مزايا محرك Unity مقارنة بين رخص الاستخدام المتاحة تحميل Unity الآن قائمة الألعاب التي تم تطويرها باستخدام Unity