الشبكة العربية لمطوري الألعاب

مبتدئ  حسام زكريا مشاركة 1

السلام عليكم ورحمة الله وبركاته

أنا حالياً أعمل على مشروع لعبة pinpong أو كرة الطاولة 3D وظهرت لدي صعوبات كبيرة في ضبط فيزيائية حركة الكرة لتكون دائماً ضمن الطاولة

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

السؤال الأول:
كيف تكون برمجة فيزياء حركة الكرة في مثل هذه الألعاب، هل استخدام مكتبة فيزياء مثل الـ Havok أو PhysX يفيد في مثل هذه الألعاب؟ وكيف يتم ضبط مجال تحرك الكرة ضمن الملعب أو ضمن الطاولة في ألعاب كرة الطاولة؟

السؤال الثاني:
كيف يقوم اللاعب دائماً بضرب الكرة بقدمه بحيث تكون قدمه عند الكرة أو كيف يقوم لاعب التنس بضرب الكرة بالمضرب دائماً، هل يجب استخدام IK مثلاً مع الـ animation الخاصة بضرب الكرة أم أن هناك أسلوب أسهل بكثير؟

Husam Zakaria
Game Programmer

محترف مشرف عبد اللطيف حاجي علي مشاركة 2

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

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

يبقى مشكلة اللحظة عندما يقوم اللاعب بالتقاط الكرة وهذه يمكن أن يكون لها حركة خاصة يصممها من يقوم بتحريك الشخصية.

عبد اللطيف حاجي علي
مبرمج
In|Framez

خبير مدير وسام البهنسي مشاركة 3

وفي 10/جمادى الأولى/1431 09:37 ص، قال حسام زكريا متحمساً:

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



وفي 10/جمادى الأولى/1431 09:37 ص، ظهر شبح ابتسامة على وجه حسام زكريا وهو يقول:

وكيف يتم ضبط مجال تحرك الكرة ضمن الملعب أو ضمن الطاولة في ألعاب كرة الطاولة؟

لم أفهم بالضبط ما قصدك من "ضبط مجال تحرك الكرة"، هل تعني كيف نجعل اللاعب يضرب الكرة لتصيب المكان المطلوب على الطاولة أو على أرض الملعب؟ 


أما في 10/جمادى الأولى/1431 09:37 ص، فقد تنهد حسام زكريا بارتياح وهو يرد:

كيف يقوم اللاعب دائماً بضرب الكرة بقدمه بحيث تكون قدمه عند الكرة أو كيف يقوم لاعب التنس بضرب الكرة بالمضرب دائماً، هل يجب استخدام IK مثلاً مع الـ animation الخاصة بضرب الكرة أم أن هناك أسلوب أسهل بكثير؟

لا يوجد أسلوب سهل هنا. الـ IK ضروري جداً في هذه الحالة، إلا أنه لا يشكل حلاً كاملاً، فلو قمتَ بتطبيقه كما هو ستحصل على نتائج غير طبيعية من اللاعب (كامتداد الرجل بشكل كامل وهي تركل الكرة، وهو تصرف غير طبيعي). فيفا تستخدم نظام IK على كامل الجسد (يدعى HumanIK من شركة أوتوديسك) يتيح للجسد أن ينشدّ وراء العضو المشدود، ولكن بالرغم من ذلك فإنه لا يستطيع معالجة كل الحالات لتظهر طبيعية. 



في الحقيقة هذه النقطة حتى الآن ما تزال تمرّ بعدد من التحسينات في فيفا، وحالياً تَستخدم ما يدعى بالتحوير warping لضبط موقع اللاعب ككل قبل تشغيل نظام الـ IK، وذلك كي تكون نتائج الـ IK ضمن حدود المنطق والطبيعة البشرية.
 
لاحظ أن مبدأ العمل في فيفا هو: الكرة دائماً تتحرك وفقاً للمعادلات الفيزيائية. يمنع منعاً باتاً تطبيق أية حـيَـل لتغيير موقع واتجاه الكرة.
 
بحوزتي هدية لطيفة لك إن كنت مهتماً بمعرفة المزيد عن تحريك الشخصيات والكرة في فيفا. فما قولك؟ ☺
 
 
(أرجو ألا أكون قد خرجتُ بعيداً عن الموضوع في التفصيل في الحديث عن كرة القدم بدلاً من الطاولة)

وسام البهنسي
مبرمج في إنفيديا وإنفريمز

مبتدئ  حسام زكريا مشاركة 4

وفي 24 نيسان 2010 12:25 ص، ظهر شبح ابتسامة على وجه وسام البهنسي وهو يقول:

هل تعني كيف نجعل اللاعب يضرب الكرة لتصيب المكان المطلوب على الطاولة أو على أرض الملعب؟

تماماً، هذا ما كنت أقصده من السؤال


أما في 24 نيسان 2010 12:25 ص، فقد تنهد وسام البهنسي بارتياح وهو يرد:

لا يوجد أسلوب سهل هنا.

فعلاً الحياة ليست سهلة كما نتصورها أحياناً


في 24 نيسان 2010 12:25 ص، غمغم وسام البهنسي باستغراب قائلاً:

بحوزتي هدية لطيفة لك إن كنت مهتماً بمعرفة المزيد عن تحريك الشخصيات والكرة في فيفا. فما قولك؟

نعم سأكون شاكراً جداً لك كما أني متلهف لهذه الهدية ☺

Husam Zakaria
Game Programmer

خبير مدير وسام البهنسي مشاركة 5

أما في 11/جمادى الأولى/1431 01:47 ص، فقد تنهد حسام زكريا بارتياح وهو يرد:

"هل تعني كيف نجعل اللاعب يضرب الكرة لتصيب المكان المطلوب على الطاولة أو على أرض الملعب؟"
 
تماماً، هذا ما كنت أقصده من السؤال

بحسب درجة تعقيد حساباتك الفيزيائية، قد تستطيع إما إيجاد الحل بالطريقة التحليلية (كما اقترح عبد اللطيف، معادلات المقذوفات مثلاً)، أو إن كانت العوامل كثيرة جداً وتصعب السيطرة عليها أو وضعها في معادلة بسيطة الحل، فإن ما يبقى أمامك هو الحلول العددية. انظر للمسألة كمسألة تحسين optimization problem بحيث تجد المعطيات التي تعطيك أقرب حل للمسألة (هذا ما تفعله فيفا أيضاً).
 
بالحديث عن فيفا، نعود لموضوع الهدية. فيما يلي تفريغ لتسجيل محاضرة لشركتنا في مؤتمر GDC 2010 عن التحريك في فيفا. ستجد فيها إجابة عن الأسئلة التي طرحتها، إضافة إلى سيل عارم من المعلومات الأخرى:
 
http://www.agdn-online.com/coverage_images/fifa_anim_gdc10_video.flv
http://www.agdn-online.com/coverage_images/fifa_anim_gdc10_slides.flv
 
الملف الأول للكاميرا التي تصور المحاضرين، والكاميرا الثانية للشرائح. يجب أن تشغل الفلمين بنفس الوقت، فهما متزامنين تماماً. استخدم برنامج مويا لفتح الملفات، لأنه الوحيد القادر على ذلك بشكل صحيح:
 
http://www.flvsoft.com/flv_player/
 
برنامج Media Player Classic سيفشل بتشغيل الصورة في الفيديو الأول، لذلك أنا أنصح بمويا.
 
المعلومات في هذه المحاضرة متقدمة جداً، لكني أنصح الجميع بمشاهدتها حتى وإن لم تكن لديهم أية معلومات عن الموضوع، فالمحاضرة ممتعة ومليئة بالمقاطع التي تساعد على الفهم. ☺
 
أرجو أن تطالعوها وأن نتناقش في النقاط الغامضة في هذا المنتدى.
 
والسلام عليكم

وسام البهنسي
مبرمج في إنفيديا وإنفريمز

موهوب  عبدالله الشمّري مشاركة 6

معلومات قيمة ..

اقوم بتحميل المقاطع ولعلّي أفهم شيء ان شاء الله .



وفي 12/جمادى الأولى/1431 12:24 ص، أعرب وسام البهنسي عن رأيه بالموقف كالآتي:

أرجو أن تطالعوها وأن نتناقش في النقاط الغامضة في هذا المنتدى.

أخشى أن تكون مجموع النقاط الغامضة مجموعة لامتناهية ☺ .

سأشاهدها إن شاء الله .

على الهامش :
قي الحقيقة .. أسأل نفسي أحياناً  .. كيف سأتعلم كل هذا وأنا لست متخصص في الرياضيات أو في الفيزياء الكلاسيكية ؟ كم هائل من المعلومات .. بداية من برمجة الرسوميات وانتهاءً بالرياضيات والفيزياء و الخوارزميات ..

--
طالب - تخصص نظم معلومات .
--

خبير مدير وسام البهنسي مشاركة 7

في 13/جمادى الأولى/1431 06:25 ص، قال عبدالله الشمّري بهدوء وتؤدة:

أخشى أن تكون مجموع النقاط الغامضة مجموعة لامتناهية ☺ .

سأشاهدها إن شاء الله .

حتى وإن كان. إزالة الغموض عن جزء منها أفضل من جهلها كلها، أليس كذلك؟  ☺


في 13/جمادى الأولى/1431 06:25 ص، عقد عبدالله الشمّري حاجبيه بتفكير وقال:

على الهامش :
قي الحقيقة .. أسأل نفسي أحياناً  .. كيف سأتعلم كل هذا وأنا لست متخصص في الرياضيات أو في الفيزياء الكلاسيكية ؟ كم هائل من المعلومات .. بداية من برمجة الرسوميات وانتهاءً بالرياضيات والفيزياء و الخوارزميات ..

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

وسام البهنسي
مبرمج في إنفيديا وإنفريمز

خبير مدير وسام البهنسي مشاركة 8

بتاريخ 13/جمادى الأولى/1431 06:25 ص، قطب عبدالله الشمّري حاجبيه بشدة وهو يقول:

قي الحقيقة .. أسأل نفسي أحياناً  .. كيف سأتعلم كل هذا وأنا لست متخصص في الرياضيات أو في الفيزياء الكلاسيكية ؟ كم هائل من المعلومات .. بداية من برمجة الرسوميات وانتهاءً بالرياضيات والفيزياء و الخوارزميات ..

أدعوكم جميعاً لقراءة هذه التدوينة التي قمتُ بطرحها مؤخراً، وبعنوان "أقصر طريق للاحتراف":
 
http://blog.agdn-online.com/wbahnassi/post/1431/04/25/اقصر-طريق-للاحتراف.aspx

وسام البهنسي
مبرمج في إنفيديا وإنفريمز