وسام البهنسي

مدونة مبرمج معماري

مبرمج الرسوميات وتعدد المنصات

من أقوى المزايا التي تصنف محركات الألعاب وفقها هي تعدد المنصات، بمعنى أن المحرك قادر على تشغيل اللعبة على عدة أجهزة مثل الحاسب الشخصي والماكنتوش والبليستيشن والإكس بوكس والأندرويد و و و … دون أن يضطر مستخدم المحرك لأن يعدل لعبته بشكل كبير لتعمل على أي من المنصات المستهدفة. بمعنى آخر، المستخدم يكتب كود لعبته مرة واحدة ونفس الكود سيعمل بشكل صحيح على كافة المنصات المختلفة.

 

مثل هذه المحركات موجودة بالفعل ولن أذكر أسماءها تفادياً للدعاية، لكن للعدل يجب أن نوضح أنه يندر أن تبنى لعبة ما تستهدف عدة منصات بكود واحد لا يختلف أبداً بين المنصات. فالمواصفات التقنية لكل منصة قد تختلف بشكل كبير عن غيرها (مثلاً، بين الأجهزة المحمولة والحاسب الشخصي) وهنا قد تريد أن تعطي المنصات القوية بعض المزايا الخاصة مثل إكساءات أعلى دقة أو مؤثرات خاصة إضافية أو عدد أعداء أكبر … الخ. إذن حتى مع وجود محرك قادر على العمل على منصات متعددة، فقد يرغب المستخدم بتعديل اللعبة بشكل مختلف نوعاً لكل منصة… لكن ليس هذا محط حديثنا اليوم.

 

أريد أن ألمس في هذه التدوينة ما يعنيه هذا الكلام بالنسبة لي أنا كمبرمج لمحرك يدعم العمل على عدة منصات، وما هي التحديات وما هي المهارات المطلوبة مني لتحقيق هذا المنتج.

نهاية حرب دايركت ثري دي ضد أوبن جي إل

نعم يا سادة… لطالما رأينا المعارك والمشادّات الكلامية بين أنصار البرمجة باستخدام دايركت ثري دي وأنصار أوبن جي إل، وكل له حجته… والآن احزروا من المنتصر بينهما:  لا أحد!  فبعيداً عن النظريات بأن أوبن جي إل عديد المنصات وأن دايركت ثري دي لويندوز وإكس بوكس حصراً، الحقيقة أن أي منهما ليس هو الحل العالمي الذي يعمل على كل المنصات. هاك قائمة بكل منصة والمكتبة الرسومية الممكن استخدامها عليها:

 

المنصة المكتبات المتاحة تعليقات
ويندوز دايركت ثري دي أو أوبن جي إل في العقد الأخير كانت الغلبة في الأداء لدايركت ثري دي لا لشيء سوى أن كتاب برامج التشغيل (drivers) فضلوا بذل جهدهم في تحسين أدائها لدايركت ثري دي بدلاً من أوبن جي إل لكثرة الألعاب التي تستخدم دايركت ثري دي مقابل أوبن جي إل. بل وفي الإصدارين الأخيرين من ويندوز (7 و 8) فإن أوبن جي إل أصبح مجرد طبقة مبنية فوق دايركت ثري دي.
ماك أو إس أوبن جي إل حصراً مع طبقة كوارتز  
أندرويد أوبن جي إل إي إس (OpenGL ES) نسخة حديثة محدودة من أوبن جي إل تتخلص من بعض الوظائف التي طالما أقلقت كتاب برامج التشغيل لتسهل تحقيق أفضل أداء مع دعم أحدث المواصفات العتادية باستخدام هذه المكتبة.
HTML5 ويب جي إل نسخة خاصة مبنية فوق OpenGL ES. المعروف حالياً أن كافة المتصفحات التي تدعم هذه المكتبة تستخدم البنية التحتية ANGLE والتي بدورها تستخدم دايركت ثري دي على ويندوز. لكن ما يهمنا هو أن الواجهة البرمجية التي نتعامل معها شبيهة جداً بأوبن جي إل.
نينتيندو وي جي إكس GX مكتبة خاصة غير متاحة للعموم غير غرضية التوجه (مثل أوبن جي إل) لكنها متفردة بوظائفها وإجراءاتها ولا تشبه أي شيء آخر.
إكس بوكس دايركت ثري دي معدل النسخة المعدلة الخاصة بإكس بوكس غير قابلة للترجمة 100% من نسخة ويندوز، فهي تختلف عنها في وظائف ومسميات عدة. هذا الكلام ينطبق على كافة إصدارات إكس بوكس وصولاً لأحدثها (إكس بوكس وان).
بليستيشن 3 جي سي إم GCM مثل نينتيندو وي. مكتبة خاصة متفردة. جدير بالذكر أن سوني قدمت نسخة خاصة من أوبن جي إل على الجهاز لكنها لم تحظى بانتشار لدى المبرمجين لكونها غير قادرة على إتاحة كامل قدرات الجهاز مقارنة بمكتبة جي سي إم.
بليستيشن 4 جي إن إم GNM تشابه مكتبة GCM على بليستيشن 3. لكن في بليستيشن 4 لم تكلف سوني نفسها إطلاقاً بتوفير إصدار خاص من أوبن جي إل بجانب مكتبة GNM.

 

من الجدول أعلاه نكتشف أن مبرمج المحرك مضطر لتعلم عدد من مكتبات الرسوميات بدلاً من واحدة فقط. تحت هذا الواقع تضمحل المقارنة بين دايركت ثري دي وأوبن جي إل لتصبح مجرد “مكتبة أخرى” من بين المكتبات المستخدمة في المحرك، وتبقى الحقيقة الصعبة وهي أن المبرمج أمامه الكثير من العمل لإتقان كل هذه المكتبات المختلفة كي يجعل محركه يعمل على كل من هذه المنصات.

 

 

 

تعلم المواصفات وليس الميكانيكيات

الجدول السابق قد يجلب الإحباط للبعض. فمن منا يملك القدرة والوقت لإتقان كل ما سبق؟ وإن كنت قد سبق وتعلمت إحدى تلك المكتبات، فهل هذا يعني أن المعرفة التي اكتسبتها غير قابلة للتطبيق على المنصات الأخرى والمكتبات الأخرى؟

 

كلا! الوضع ليس بهذا السوء في الحقيقة. فمن تعلم واحدة من هذه المكتبات الرسومية فسيستطيع تعلم المكتبات الأخرى بسرعة كبيرة. الصعوبة هي في المكتبة الأولى أياً كانت. بعد أن تتعلم المكتبة الأولى، سيصبح تعاملك مع الأخريات يعتمد أسلوب المقارنة بدلاً من الحاجة للخوض في استيعاب مفاهيم جديدة كلياً (والذي برأيي هو أصعب جزء في العملية التعليمية). مثلاً، إن أردت تحديد سطح الرسم فستستطيع معرفة كيف يتم ذلك بسهولة سواءً باستخدام دايركت ثري دي أو أوبن جي إل أو أية مكتبة أخرى… المهم أنك تعرف مفهوم تحديد سطح الرسم.. البقية هي مجرد تفاصيل ميكانيكية بسيطة مثل: هل أفعل ذلك عن طريق نداء إجراء عضو من واجهة ID3D11DeviceContext أو عن طريق نداء إجراء glBindFramebufferOES الخ الخ.

 

أهم ما يميز المنصات عن بعضها البعض هو مواصفاتها: السرعة، الوظائف المتاحة، حجم الذاكرة… تعلُّم برمجة الرسوميات لمنصة ما يعتمد بالنسبة الكبرى على معرفة مواصفات المنصة واستغلال تلك المواصفات لتحقيق الجودة المطلوبة بالسرعة المناسبة. مثلاً، هل المنصة تدعم مظللات الحوسبة (Compute Shaders)؟ ما هو أداء الرسم مع دمج ألفا في المنصة؟ ما هي نقاط القوة والضعف في الأداء؟

 

بالنسبة لأجهزة اللعب المنزلية (كونسول) فإن هذه المواصفات محكمة ومحددة وغير قابلة للتغير. وبالتالي لديك كمبرمج رسوميات القدرة على الاعتماد على هذه المواصفات واستهدافها لتحقيق أفضل أداء. بينما الحاسب الشخصي والمنصات مجهولة المواصفات فهي برأيي التحدي الصعب. يمكنك التعامل مع هذه المنصات بوضع حد أدنى من المواصفات المطلوبة، واستهداف تلك المواصفات.. لكنك عندها لن ترضي أولئك اللاعبين الذين دفعوا الكثير من المال لقاء بطاقة عرض قوية… هذا هو التحدي الأصعب في برمجة الألعاب للحاسب الشخصي… وباعتبار أن الكثيرين من المبرمجين يبدؤون مشوارهم على الحاسب الشخصي، فأبشركم بأنكم في الحقيقة تعلمتم الجزء الصعب، وأنتم أكثر من جاهزين لتعلم برمجة المنصات الأخرى… لا سيما الكونسول.

 

في الخلاصة، أوجز الكلام في القول: لا تتعصب لمكتبة رسوميات معينة، وركز على تعلم مفاهيم رسوميات الحاسوب الفورية وستستطيع عندها تطبيق المفاهيم في أية مكتبة طالما أنك تعرف مواصفات المنصة المستهدفة.

 

وإلى تدوينة أخرى بإذن الله…

التعليقات (1) -

  • Salwan Badra

    19/11/2014 08:33:09 ص | الرد

    شكرا على المقال الجميل

أضف تعليقاً

Loading