التقنيات الرسومية: المضلعات Polygons
في هذه السلسلة سوف نتناول كل التقنيات الرسومية التي تستخدمها الألعاب، سوف نشرح طريقة عملها والهدف من استخدامها، بالاضافة الي تأثير تفعيلها علي أداء اللعبة وعلي بطاقة الرسوميات نفسها. والهدف رفع ثقافة القارئ وجعله مستعدا لتطويع تجربة لعبته كيفما يشاء، أو بما يناسب امكاناته.
المضلعات Polygons
ناقشنا في الحلقة الماضية مسألة دقة العرض والألوان، وعرفنا أن فائدة بطاقة الرسوميات هي حساب ألوان الصورة وعرضها علي الشاشة في شكل نقاط Pixels.
اليوم نتحدث عن وظيفة أخري لبطاقة الرسوميات Graphics Card، وهي وظيفة تحريك تلك الألوان علي الشاشة، أو بمعني أدق نقلها من مكانها الي مكان جديد، لتعطينا الايحاء بأن الصور تتحرك علي الشاشة.
يجب علي البطاقة نقل هذا المستطيل الي أسفل قليلا ..
المستطيل في الصورة أعلاه يتكون من 2000 نقطة Pixel خضراء ، اذن يجب علي البطاقة نقل 2000 نقطة الي أسفل.
يجب علي البطاقة الرسومية أداء 2000 عملية حسابية لنقل المستطيل الأخضر الذي يتكون من 2000 نقطة الي أسفل.
من الواضح جدا أن هذا عدد كبير للغاية من العمليات الحسابية لنقل مستطيل تافه، فما بالك بمئات المستطيلات ؟! وبالوضع في عين الاعتبار حالة البطاقات الرسومية في بداية نشأتها، حيث كانت ضعيفة للغاية مقارنة بالوقت الحالي، نجد أننا في مشكلة عويصة حقا.
لكن لكل مشكلة حل بالطبع، والحل الذي فكر فيه المطورون هو الاكتفاء بأداء الحسابات علي النقاط المكوّنة لاطار المستطيل (حوافه)، ثم ملأ ما بين الحواف باللون الأخضر.
ستتعامل البطاقة الرسومية فقط مع حواف المستطيل .. والحواف فقط هنا تكوّن 600 نقطة، وهو عدد اقل بثلاثة اضعاف من السابق!
بعد التحريك الي أسفل، تبدأ عملية الملأ، و ستقوم فيها البطاقة بملأ المساحة ما بين حواف المستطيل باللون الأخضر.
وفّرت البطاقة الرسومية هنا 1400 عملية حسابية، فهي تتعامل الآن مع 600 نقطة بدلا من 2000. لكن 600 نقطة لا يزال عدد كبي، وطالما توصّلنا الي تطبيق مبدأ الملأ، فانه يمكننا الآن التمادي في اختصار النقاط أكثر، فبدلا من التعامل مع كل نقاط حواف المستطيل، سنتعامل فقط مع النقاط الأساسية فيه، وهي أركانه الأربعة.
ستتعامل البطاقة الآن مع أربعة نقاط فقط، وهي النقاط المكونة لأركان المستطيل، ثم تملأ ما بينها بالنقاط الخضراء.
عملية الملأ بين أركان المستطيل.
هنا تم توفير 1996 عملية حسابية، والاكتفاء بأربع عمليات فقط علي أربعة نقاط، ثم ملأ ما بين النقاط الأربع.
وقد يسأل سائل .. ألا تعتبر عملية الملأ جهدا حسابيا أيضا؟ هذا صحيح .. لكنها جهد أقل بكثير من جهد النقل والتحريك .. فلو اعتبرنا مثلا أن جهد تحريك 2000 نقطة يساوي 2000 كجم حسابي، فان جهد تحريك 4 نقاط، ثم ملأ ما بينهم يساوي 1000 كجم حسابي فقط! وهو تخفيض للحمل الحسابي الي النصف.
اذن ما فعلناه هنا هو تقليل كمية الحسابات الي تقوم بها البطاقة الرسومية، وبذلك نحصل علي أداء أعلي، وكل هذا عن طريق تعديلات بسيطة في اسلوب المعالجة، فبدلا من أن تتحكم البطاقة في كل نقاط الشكل، ستتحكم فقط في النقاط المحوريّة فيه.
يطلق علي النقاط التي تتعامل معها البطاقة اسم نقاط التحكّم أو رؤوس التحكّم Vertices، وذلك لأن البطاقة تستطيع التحكم في المستطيل من خلالها، بنقله من مكانه الي مكان جديد، أو حتي بتغيير شكله .
يمكن للبطاقة تغيير شكل المستطيل، بحذف احدي نقاط التحكم تماما، ليتحوّل الي مثلث!
فيما بعد احتاج المطورون الي المزيد من التحكم في الأشكال الرسومية، وفرض هذا عليهم اضافة المزيد من نقاط التحكّم، وذلك علي الرغم من محاولتهم تقليل عددها، لكن العائد يستحقّ.
بدلا من أربعة، ستتحكم البطاقة في تسعة نقاط (رؤوس) تحكم .
عملية الملأ ما بين الرؤوس لتكوين الحواف أولا ..
عملية الملأ ما بين الحواف ..
زيادة نقاط التحكم أعطت قدرة أكبر علي التحكم في الشكل، فبحذف نقطة واحدة من التسعة، يتحول المستطيل الي شكل أكثر تعقيدا!
حذف نقطتين يغيّر من شكل المستطيل أكثر و أكثر ..
حذف ثلاثة نقاط يضيّع نصف المستطيل، ويفيد هذا في المواقف التي يكون فيها نصف المستطيل محجوبا خلف شئ آخر ...
زيادة عدد نقاط التحكم الي 14 نقطة، يزيد من احتمالات التحكم في المستطيل، وتغيير شكله الي أشكال جديدة ..
وهنا يجد المطورون أنفسهم في حيرة، فزيادة عدد نقاط التحكم، يزيد من العمليات الحسابية التي يتوجّب علي البطاقة عملها وبالتالي يحتاج الي بطاقة أقوي، لكنه في نفس الوقت يعطي مرونة أكبر في التحكم في الأشكال الرسومية، وهذا مهم للغاية في الألعاب .
بغض النظر عن ذلك، فان نظام نقاط (رؤوس) التحكم اصبح نظاما قياسيا شاملا، فكل الرسوميات المولّدة عن طريق الحاسوب تستعمل هذا النظام، سواء كانت ألعابا، أو عروض احترافية سينمائية (رسوم مسجلة CGI). فحتّي عندما يرغب المطورون في رسم الأشكال ثلاثية الأبعاد فانهم يبدأون برسم نقاط التحكم أولا، وعلي برامج التصميم ثلاثي الأبعاد التوصيل بين نقاط التحكم هذه.
منظر يدّ ثلاثية الأبعاد تحت التصميم (لونها رمادي)، ويظهر في الخلفية صورتين ليد حقيقية من زاويتين مختلفتين، يسترشد بهما المُصمّم أثناء رسم اليد بنقاط التحكم.
أصبحت كل رسوميات الحاسوب مكونة من نقاط تحكم .. أو مضلعات Polygons، والمضلّع هو عبارة عن مجموعة من رؤوس التحكّم متّصلين ببعض، وفي الصورة أعلاه، فان كل مضلع هو عبارة عن أربعة رؤوس تحكم ..
أثناء عملية الرسم، فان عدد نقاط التحكم يؤثر علي جودة الشكل النهائية، وخصوصا في الأشكال ذات الخطوط المنُحنية.
شكل قوس دائري من خمسة نقاط تحكم، وبالطبع يقوم الحاسوب بالتوصيل ما بين النقاط ..
نفس القوس، لكنه مصنوع من سبعة نقاط (رؤوس) تحكم هذه المرّة، لاحظ كيف أنه أكثر استدارة من سلفه ذو الخمسة رؤوس ..
اذن كلما زاد عدد رؤوس التحكم في الشكل المنحني كلما أصبح أكثر استدارة وتفصيلا، لكن بالطبع فان زيادة عدد النقاط يؤدي الي زيادة كمية الحسابات التي يجب أن تحسبها البطاقة الرسومية ..
تتيح الألعاب استخدام عدد متفاوت من نقاط (رؤوس) التحكم، بحيث تُلائم أكبر عدد من البطاقات الرسومية، الضعيف منها والقوي ..
عادة ما تحوي الألعاب خيارات مثل Model Details، أو Model Quality، أو Object Quality ..الخ، وكلّها خيارات لضبط عدد رؤوس التحكم للأشكال ثلاثية الأبعاد .. امّا بأقل عدد ممكن Low، أو بعدد وسطيّ Medium، أو بأقصي عدد متوافر High.
صورة لعجلة طائرة، الي اليمين العجلة بأكبر عدد ممكن للرؤوس، لذا تظهر كاملة الاستدارة، والي اليسار العجلة بأقل عدد ممكن من الرؤوس، لذا تظهر مدببة الزوايا .
صورة لوجه بشري، القسم الأعلي يوضّح الوجه بعدد مضلّعات/رؤوس كبير ويظهر الوجه مستديرا ومتناسقا، والقسم الأسفل يوضح الوجه بعدد رؤوس قليل، ويظهر الوجه مدببا وأقل تناسقا
صورة لشخصية من لعبة Team Fortress 2، الي اليمين الشخصية بعدد رؤوس كبير، والي اليسار الشخصية بعدد رؤوس أقل .. لاحظ الفارق في قوة التجسيم ..
لن نحتاج لتكرار أنه بزيادة عدد الرؤوس فان العبأ الحسابي يكون أكبر علي البطاقة الرسومية، وبالذات علي المعالج الرسومي GPU، وكذلك الذاكرة الرسومية VRAM، ذلك لأن كل رؤوس (نقاط) التحكم تخزّن في الذاكرة أولا. واذا كانت بطاقتك الرسومية ضعيفة، أو ذات ذاكرة بسعة تبادل بيانات Bandwidth متواضعة، فانه من المفضّل أن تقوم بضبط اعدادت تفاصيل الرؤوس الي Low، أو Medium.
لكن المطورون ابتكروا طرقا أخري لتقليل عدد الرؤوس بشكل عام في أي مشهد، لتتمكن معظم البطاقات الرسومية من تشغيل الألعاب جيدا. واحدي الوسائل هي طريقة تقليل عدد رؤوس الأشكال البعيدة عن نظر اللاعب. لأن الشكل البعيد قلما يتم ملاحظته، فهنا يتم رسمه بعدد رؤوس ضئيل، و كلما اقترب اللاعب من الشكل كلما زادت كمية رؤوسه أكثر وأكثر حتي يظهر بعدد الرؤوس الكامل أمام اللاعب مباشرة. يطلق علي هذه الطريقة اسم المستويات المختلفة للتفاصيل Levels Of Details، أو LOD اختصارا، ويقوم فيها المطور بصناعة نسخ بعدد رؤوس مختلفة لكل شكل، من الأقل فالأوسط فالأعلي Low to Medium to High ثم يضع النسخ حسب المسافة من اللاعب، النسخ قليلة التفاصيل تكون هي البعيدة، والنسخ كثيرة التفاصيل هي القريبة.
صورة لنسخ متفاوتتة في عدد الرؤوس (التفاصيل) من الشخصية، من الخلف النسخة الأقل ثم الوسط ثم النسخة كاملة التفاصيل
ستخدم المطور مستويات عديدة مختلفة في عدد الرؤوس لكل شكل، من الأقل فالأوسط فالأعلي، ويضعهم حسب المسافة من اللاعب
صورة لمستويات التفاصيل المختلفة، الي اليسار الشكل كامل التفاصيل عندما يكون أمام اللاعب مباشرة، الي اليمين الشكل دون أغلب تفاصيله عندما يكون بعيدا جدا عن اللاعب
يعيب هذه الوسيلة انها تشتت اللاعب بظواهر غريبة، فكلما اقترب اللاعب من الشخصية/الشكل، كلما لاحظ الظهور المباغت لتفاصيل جديدة لم تكن ظاهرة، وكانها ظهرت من العدم، وبابتعاد اللاعب يلاحظ ايضا اختفاء مفاجئ لتفاصيل كانت موجودة، وكانها اختفت للعدم! يطلق علي هذه الظاهرة اسم الدخول/الخروج المفاجئ Pop in/out. وهي تشتت انتباه اللاعب لغرابتها، خصوصا اذا ما حدثت مع أجسام كبيرة وضخمة.
لتقليل هذه الظاهرة أو للقضاء عليها، تحوي الألعاب خيارات كي يجبر المستخدم اللعبة علي استخدام أقصي عدد رؤوس حتي علي أبعد المسافات، غالبا ما تأتي هذه الخيارات باسماء مثل Level Of Details، و Draw Distance، و View Distance. ومن خلالها يتمكن المستخدم من استعمال أقصي جودة مضلعات في كل الأحوال، ويحتاج هذا بالطبع الي قوة من بطاقة الرسوميات. بشكل عام فان ضبط هذه الخيارات علي أقصي اعدادات لها High أو Ultra، يرسم كل الأشكال ثلاثية الأبعاد بأقصي قدر متاح من التفاصيل حتي لو كانت علي مسافة بعيدة جدا، ويضيف هذا جمالا جزئيا علي المشاهد، لكنه يكلف البطاقة الرسومية قدرا كبيرا من الأداء، ويكلف المعالج المركزي CPU قدرا أكبر، لأنه المسئول عن تحضير هذه الأشكال للبطاقة الرسومية. اذا كان لديك معالجا مركزيا ضعيفا فمن الأفضل ترك هذه الخيارات علي الضبط المتوسط Medium أو المنخفض Low.
مشهد من لعبة تعمل بأقصي مسافة رسم Ultra View Distance وكل شئ في الخريطة يظهر رغم ابتعاد الطائرة كثيرا عن الأرض
ابتكر المطورون أيضا طريقة جديدة لزيادة عدد الرؤوس دون الحاجة لمساحة ضخمة من الذاكرة، ويتم هذا بعملية حسابية تقوم بمضاعفة عدد مضلعات الشكل عدة مرات بعد قراءته من الذاكرة. تسمي تلك العملية باسم الترصيع Tessellation.
والترصيع هو أحد الخصائص الجديدة في DirectX11، وهو يؤدي وظيفة زيادة عدد رؤوس (نقاط التحكم) لأي شكل ثلاثي الأبعاد بطريقة تلقائية، بحيث يحصل الشكل علي تفاصيل اكثر ..
صورة لوجه بسيط ..
بعد تطبيق الترصيع ازداد عدد مضلعات الوجه (رؤوس التحكم) ، وحصل الوجه علي تفاصيل أكثر ..
بالطبع يضغط الترصيع بشكل أكبر علي البطاقة الرسومية، بسبب عدد الرؤوس الكبير، لكنه يوفّر في استهلاك الذاكرة الرسومية VRAM، لأن عملية زيادة عدد الروؤس تتم بعد قراءة الشكل الأصلي من الذاكرة.
الترصيع يضيف خاصية جديدة أيضا، وهي الترصيع التفاعلي Adaptive Tessellation، وهي أن تقوم اللعبة بتخفيض عدد مضلعات الشكل تلقائيا أو تزيده تلقائيا حسب المسافة عن اللاعب، وبمستويات هائلة من التدرج بحيث تتفادي عيوب الدخول والخروج المفاجئ pop in/out للتفاصيل.
في النهاية .. فان أفضل صورة ممكنة وأفضل تجسيم ممكن للألعاب يتحقق باستخدام أعلي كم ممكن من المضلعات Polygons، وأيضا بأقل مستوي ممكن من تغير التفاصيل LOD، بحيث يظل عدد المضلعات عاليا وكاملا في كل مشهد وعلي كل المسافات. وبحيث تتفادي عيوب ظواهر الدخول والخروج المفاجئ. ويزداد احتياجك لهذا كلما استعملت شاشة كبيرة تظهر أدق التفاصيل. حينها ستحتاج لكل مضلع متاح كي تتفادي عيوب نقص المضلعات. بالطبع تحتاج هنا الي بطاقة رسومية قوية ومعالج قوي.