تكلّمنا في المرّة السابقة عن مفهوم الاكساء ، وكيف أنه مجرّد تلوين للأجسام ثلاثية الأبعاد ، ثم التلاعب بتلك الألوان للايحاء وجود تفاصيل زائدة Kعرفنا أيضا أن البطاقة الرسومية تقوم بتصغير وتكبير صورة الاكساء بحسب بٌعد الجسم ثلاثي الأبعاد ، فاذا كان الجسم بعيدا ، فانه يظهر بحجم صغير ، لهذا يتم تصغير اكساؤه ، أمّا اذا كان قريبا جدا ، فانه يظهر بحجم كبير.
لذا يتم تكبير اكساؤه Kاليوم نتعرف علي وجه جديد من وجوه وظيفة بطاقة الرسوميات ، وهو وجه الغباء الفطري Native Stupidity ، وتحديدا الغباء الفطري في عملية تصغير الكساءات.
تعالوا معا ننظر الي هذه الصورة :
صورة اكساء بدقة 10X10 ، ويظهر فيها ثلاثة حروف افرنجية : L و F و N .
سنحتاج الي تصغير هذه الصورة ، الي دقة 10x5 ، وسنعتبر أنها اكساء يحتاج الي التصغير،بداية ستقوم البطاقة الرسومية بحذف نقاط من الصورة ، وهي النقاط الملونة باللون الأبيض .
تم حذف النقاط و تجميع عناصر الصورة معا ،ما الذي حدث ؟ تشوّهت الصورة تماما ، ولم يعد ظاهرا فيها سوي حرف L ، واختفت ملامح الحروف الأخري الي حد أنها لم تعد قابلة للتمييز بعد الآن،سبب ذلك هو عدم قدرة البطاقة الرسومية علي تمييز الأجزاء المهمة من الصورة ، فهي تحذف بآلية كاملة ، دون أن تضع في اعتبارها هل عملية الحذف هذه ستؤثر علي تفاصيل الصورة أم لا ، فهي لا تفهم أصلا محتوي الصورة ، وكل ما تراه البطاقة الغبية هو بعض النقاط اللونية جميلة الشكل ،بالطبع لا يجب السماح بحدوث هذه الظاهرة ، والا تشوّهت صور الكساءات كلما ابتعدنا عنها !
صورة لكساء أرضية ، انظر الي أفق الصورة البعيد ، ستلاحظ وجود ألوان مختفية و فواصل بين الألوان ، والسبب بالطبع هو غباء البطاقة الرسوميّة ،والأسوأ من كل هذا ، ما يحدث عندما يغير اللاعب من مسافته بالنسبة الي الكساء ، فبفرض لبتعاده عن الاكساء أكثر ، فان دقة الاكساء تقل أكثر ، وبالتالي تتغير تفاصيله ، وعندما يقترب منه أكثر فان دقة الاكساء تزيد ، وبالتالي تزيد تفاصيله ، وتكرار الاقتراب والابتعاد عن الاكساء بسرعة يجعل تفاصليه تظهر وتختفي بسرعة ، ويعطي شكل الاكساء طابعا من الاهتزاز والاضطراب ، وكأن تفاصيله تومض وتُظلم بسرعة Flicker .
ابتعاد اللاعب عن الاكساء ، يقلل دقته ، فيصبح في 10x4 ، وتفاصيل الاكساء تقلّ أكثر (اختفي حرف L تماما) .
اقتراب اللاعب من الاكساء يزيد دقته ، فتصبح 10x6 ، وهنا يستعيد الاكساء جزءا من تفاصيله المفقودة (ظهور حرف L وحرف F ) .
نسخ مختلفة من صورة الاكساء ، من اليمين الي اليسار 4x10 و 5x10 و 6X10 ، العرض السريع لهذه الصور مختلفة الدقة (كما في حالة ابتعاد اللاعب واقترابه بسرعة) ، يعطي تأثير الاهتزاز والاضطراب علي الاكساء .
ظاهرة الاهتزاز الكسائية .. وهي شائعة للغاية في الألعاب ،ولا يقتصر الأمر علي ذلك فقط ، فقد تتسبب ظاهرة الحذف في ظهور تعرجات في الصورة لم تكن موجودة من قبل ، وذلك بسبب تداخل عناصر الصورة بشكل غير طبيعي ،والحل ؟ لا يوجد حل تقني للأسف .. فلا يمكن تطوير طريقة لتفهم بها البطاقة الرسومية الأجزاء المهمة من الصورة لتتجنّب حذفها ، لأن الصور تختلف وتتنوع في ألوانها وتفاصيلها بشدة ، مما يضمن استحالة وجود طريقة شاملة تصلح للتطبيق علي الجميع .
الحل سيكون هنا بالطريقة التقليدية اليدوية ، وهو أن يقوم المصمم بعمل نسخ مختلفة الدقّة من الصورة الأصلية ، فاذا كانت دقة الصورة 512x512 مثلا ، يقوم المصمم بعمل نسخة من هذه الصورة بدقة 256x256 ، ونسخة أخري بدقة 128x128 ، وأخري بدقة 64x64 ، وأخري بدقة 32x32 ، وأخري بدقة 16x16 ..الخ ويستخدام هذه النسخ بدلا من عملية التصغير ، فاذا أرادت البطاقة اكساءا صغيرا ، استخدمت نسخة 16x16 ، واذا أرادت اكساءا متوسطا ، استخدمت نسخة 64x64 وهكذا .
نسخ مختلفة الدقة من نفس الاكساء .. وتُسمّي هذه النسخ المصغرة باسم MIP-Maps ،هكذا تم التغلب علي غباء البطاقة الرسومية ، فتلك النسخ المُصغّرة ستحتوي علي تفاصيل الصورة الكاملة لكن بحجم أصغر ، وعندما تستخدمها البطاقة الرسومية لا يحدث فقد في التفاصيل ولا يحدث اهتزاز واضطراب للصورة ،لكن ماذا اذا احتاجت البطاقة الي حجم معيّن ، غير موجود في هذه النسخ المصغرة ؟ ، مثلا 50x50 ؟الحل هنا يتمثّل في استخدام اقرب نسخة مصغرة (32x32)، ثم تطبيق عملية التوسيع(التكبير) Stretch عليها بحيث تصبح بدقة 50x50 .
بالطبع نعرف جميعا عيوب عملية التوسيع ، من زيادة في التعرّجات و تشوّه في الصورة بسبب استخدام الألوان الوسطيّة ، لكن تأثير هذه العيوب يكون خفيفا هنا ، لأن الدقة الجديدة (50X50) قريبة نوعا من دقّة الصورة الأصلية (32x32)،لكن حتي هذا الحل لا يصلح في جميع الحالات والظروف ، حيث يعيبه عدم قدرته علي عرض الأسطح الممتدة بشكل جيّد .
والأسطح الممتدة هي الأشكال التي تمتد في الأفق ، مثل أرضية ممر ممتد ، أو أرضية صحراء أو شارع ممتد ..الخ ،أرضية ممر ، والجزء القريب من اللاعب دقته عالية (عدد نقاطه أعلي) ، والأجزاء البعيدة دقتها قليلة ، الي درجة أن تفاصيل ألوان الأرضية تكاد تختفي تماما ،عند عرض هذه الأسطح ، يأخذ الجزء القريب من اللاعب فيها أقصي دقّة للاكساء (مثلا 512x512)، لكن الجزء البعيد يأخذ دقة أقل (مثلا 128x128) ، والجزء الأبعد يأخذ دقة أقل وأقل (مثلا 64x64) ،والجزء البعيد جدا يأخذ دقة قليلة للغاية (مثلا 16X16 ) ،المشكلة في الحاجة الي استخدام دقات وسطيّة علي طول امتداد هذه الأسطح ، (مثلا 70x70 ) ، وهذه تأخذ أقرب دقة متاحة لها وهي 64x64 ، وتتعرض لعملية توسيع ، مما يجعل من شكل هذه الاكساءات باهتا ومموها الي حد ما .
وتكون هناك دقات شاذة أيضا ، مثلا 150x70، وهذه تأخذ أيضا أقرب دقة متاحة لها ، وهي 64x64 ، لأن الـ64 أقرب الي الـ70 ، ماذا عن الـ150 اذن ؟ لا يمكن استعمال دقة 128x128 معها ، لأن الـ 128 أكبر من الـ70 ، وهذه العملية تتطلب توافقا كاملا بين قيمتي الدقة ، لذا فلا مفر من استخدام نسخة 64x64 مع الـ150 و سيحدث فيها تشوه أكبر بالطبع لأن المصدر دقته 64 فقط ، أي أقل من نصف الـ150،ومما يزيد الطين بلّة هو أن نسبة حدوث الدقات الشاذة (مثل 150X70 )أكبر بكثير من الدقات الوسطيّة (مثل 70X70) ، لأن الأسطح الممتدة تكون واسعة القاعدة ، وضيقة القمة ، أي ذات شكل هرمي تقريبا ،ومحصلة كل هذا هو زيادة تشوّه الصورة كلما ايتعدنا عن الدقة الكبيرة (ابتعدنا عن اللاعب) ،الأسوأ أن هذه الاكساءات ذات الدقات المختلفة تتراص مع بعضها تباعا في حالة الأسطح الممتدة، وهنا يظهر فارق الوضوح والدقة بينها وبين بعضها ، ولا يكون المنظر جميلا أبدا .
مثال جديد ، الي اليمين لا توجد خطوط فاصلة ، لكن علي اليسار توجد ،لكن القضاء علي مشكلة الخطوط الفاصلة هو أقل مشاكلنا ، فلا يزال أمر اختفاء وضوح التفاصيل مع بعد المسافة قائما ، وهو لعمري أدهي وأمرّ ،ولقد وضحنا سبب هذه الظاهرة بالفعل ، فكلما زادت المسافة ، استعملت البطاقة الرسومية اكساءا ذي دقة قليلة (16x16 مثلا) ،ثم قامت بتوسيعه الي دقّة شاذة مثل 50x25 باستخدام الألوان الوسطيّة (مع ما صاحب هذا من تشوهات في الصورة ) ومع تشغيل اللعبة علي دقة شاشة كبيرة ، (مثلا 1920x1080 ) ، نجد أن الاكساء يتشوّه أكثر نتيجة تطبيق عملية التوسيع للمرة الثانية عليه ، ويتغيّر منظره تماما .
اكساء أصلي بدقة 20x20 ، والي جواره نسخة مصغّرة منه بدقة 10x10 ،نريد الآن تشغيل هذا الاكساء بدقة 20x10 ، وهذه هي دقة شاذة .
تكبير الاكساء المصغّر من دقة 10x10 الي دقة 20x10 (دقة شاذة)، لاحظ الألوان الوسطية القبيحة التي نشأت .
تكبير الصورة يعني أن تضيف البطاقة الرسوميّة نقاطا زائدة عليها ، وهنا تتم اضافة نقطة واحدة بين كل نقطتين ، واذا كان لون النقطتين غير متماثلا ، فان النقطة الزائدة بينهما تأخذ لونا وسطيا بين لونيهما ، وفي هذا المثال نجد أن اللون الوسطي بين اللون الأخضر والأصفر ، هو الأخضر الباهت .. ومن هنا ينشأ التشويه (راجع الجزء الأول )،لحلّ هذه العقبة الأخيرة ، ابتكر المطورون مرشّحا جديدا ، سمّوه المُرشّح غير الاعتيادي Anisotropic Filtering ، ومُهمّة هذا المرشح غير تقليدية وشاقة بالفعل ،ففي مثالنا الأخير ، نحتاج لتكبير صورة من دقة 10x10 الي دقة 20x10 ، أي ينقصنا 10 نقاط في البعد العرضي .
في طريقة التكبير التقليدية ، تمّ تعويض هذه النقاط بألوان وسطيّة ، لكن هذا المرشّح غير تقليدي ، فهو يقوم بتحليل الكساء الصغير ذو دقة 10x10 ، وتحليل الكساء الكبير ذو دقة 20x20 ، وتحليل الألوان الوسطيّة بينهما للوصول لأفضل الحلول اللونية الممكنة لتعويض النقاط الناقصة ،بل يتمادي المرشّح في عمله الي درجة فحص 128 نقطة لونية من أجل تعويض نقطة واحدة فقط ،والنتيجة هي دقة غير عادية في تكبير الصور ، دون وجود فقد في التفاصيل ، مع تقليل التشوّهات الي الحد الأدني.
الي اليمين ، باستخدام المرشّح غير التقليدي . الي اليسار ، التكبير بالطريقة التقليدية .
مثال عملي : الي اليمين اللعبة باستخدام المرشح غير التقليدي ، الي اليسار بدون استخدامه ، لاحظ كيف تمتد الأرضية أمام اللاعب بكامل تفاصيلها (اليمين) .
مثال آخر : الي اليمين ، المرشّح غير التقليدي ، الي اليسار ، بدونه ،بالطبع فارق السماء والأرض ، وتظهر الاكساءات و كأنها جديدة ،وعلي وجه العموم فان مرشحات الاكساءات تستهلك طاقة حسابية كبيرة من البطاقة الرسومية ، بل وتخفض من قدرة البطاقة الاكسائية الي النصف في الكثير من الأحيان ، لكن فارق الصورة يستحقّ كما رأينا ،الشئ الجيد ، هو أن البطاقات الرسومية الحديثة ، تستطيع معالجة هذه المرشّحات بكفاءة عالية ، دون فقد كبير في الأداء ، لذا فانه من المفضل تفعيل هذه المرشّحات في كل الألعاب ، وبالذات المرشّح غير التقليدي Anisotropic Filtering .
تفعيل هذا الأخير ، يكون علي مستويات ، أوّل مستوي وهو 1X ، يقوم بتحليل ثمانية نقاط لونية من أجل تعويض نقطة واحدة ، ثاني مستوي 2X ، يقوم بتحليل 16 نقطة .. 4X يقوم بتحليل 32 نقطة ، 8X يقوم بتحليل 64 ، و 16X ، يقوم بتحليل 128 نقطة ، وكلما زاد المستوي ، زادت كفاءة المرشّح في تكوين الاكساء ،يمكن تفعيل هذا المرشّح بشكل اجباري في كل الألعاب من لوحة التحكم ببرنامج القيادة (التعريف Driver )، ومن المُستحسن وضعه علي المستوي الثامن 8X ، أو المستوي الأقصي 16X ، للحصول علي أفضل النتائج البصريّة .
في النهاية رأينا كيف تطورت الاكساءات من مجرد وسيلة خادعة لتوفير عدد المضلّعات ، الي أداة معقدة ذات مزايا جمّة ، لكن مع عيوب تحتاج الي اصلاح ، ولحسن الحظ ، فان مزايا الاكساءات تفوق عيوبها أضعافا ، فيكمن للاكساء الواحد توفير 50% من عدد المضلّعات اذا تم استخدامه بشكل جيّد .
الذين يشاهدون الموضوع الآن: 1 (0 من الأعضاء و 1 زائر)
مواقع النشر (المفضلة)