المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : التَقنيات الرُسوميّة (الجُزء 5) : ترشيح الاكساءات Anisotropic Filtering



أحمد فرحات
02-22-2011, 07:32 PM
http://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-12.jpgتكلّمنا في المرّة السابقة عن مفهوم الاكساء ، وكيف أنه مجرّد تلوين للأجسام ثلاثية الأبعاد ، ثم التلاعب بتلك الألوان للايحاء وجود تفاصيل زائدة Kعرفنا أيضا أن البطاقة الرسومية تقوم بتصغير وتكبير صورة الاكساء بحسب بٌعد الجسم ثلاثي الأبعاد ، فاذا كان الجسم بعيدا ، فانه يظهر بحجم صغير ، لهذا يتم تصغير اكساؤه ، أمّا اذا كان قريبا جدا ، فانه يظهر بحجم كبير.
لذا يتم تكبير اكساؤه Kاليوم نتعرف علي وجه جديد من وجوه وظيفة بطاقة الرسوميات ، وهو وجه الغباء الفطري Native Stupidity ، وتحديدا الغباء الفطري في عملية تصغير الكساءات.
تعالوا معا ننظر الي هذه الصورة :



http://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-01.png
صورة اكساء بدقة 10X10 ، ويظهر فيها ثلاثة حروف افرنجية : L و F و N .

http://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-02.png
سنحتاج الي تصغير هذه الصورة ، الي دقة 10x5 ، وسنعتبر أنها اكساء يحتاج الي التصغير،بداية ستقوم البطاقة الرسومية بحذف نقاط من الصورة ، وهي النقاط الملونة باللون الأبيض .

http://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-03.png
تم حذف النقاط و تجميع عناصر الصورة معا ،ما الذي حدث ؟ تشوّهت الصورة تماما ، ولم يعد ظاهرا فيها سوي حرف L ، واختفت ملامح الحروف الأخري الي حد أنها لم تعد قابلة للتمييز بعد الآن،سبب ذلك هو عدم قدرة البطاقة الرسومية علي تمييز الأجزاء المهمة من الصورة ، فهي تحذف بآلية كاملة ، دون أن تضع في اعتبارها هل عملية الحذف هذه ستؤثر علي تفاصيل الصورة أم لا ، فهي لا تفهم أصلا محتوي الصورة ، وكل ما تراه البطاقة الغبية هو بعض النقاط اللونية جميلة الشكل ،بالطبع لا يجب السماح بحدوث هذه الظاهرة ، والا تشوّهت صور الكساءات كلما ابتعدنا عنها !

http://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-04.png
صورة لكساء أرضية ، انظر الي أفق الصورة البعيد ، ستلاحظ وجود ألوان مختفية و فواصل بين الألوان ، والسبب بالطبع هو غباء البطاقة الرسوميّة ،والأسوأ من كل هذا ، ما يحدث عندما يغير اللاعب من مسافته بالنسبة الي الكساء ، فبفرض لبتعاده عن الاكساء أكثر ، فان دقة الاكساء تقل أكثر ، وبالتالي تتغير تفاصيله ، وعندما يقترب منه أكثر فان دقة الاكساء تزيد ، وبالتالي تزيد تفاصيله ، وتكرار الاقتراب والابتعاد عن الاكساء بسرعة يجعل تفاصليه تظهر وتختفي بسرعة ، ويعطي شكل الاكساء طابعا من الاهتزاز والاضطراب ، وكأن تفاصيله تومض وتُظلم بسرعة Flicker .

http://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-05.png
ابتعاد اللاعب عن الاكساء ، يقلل دقته ، فيصبح في 10x4 ، وتفاصيل الاكساء تقلّ أكثر (اختفي حرف L تماما) .

http://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-06.png

أحمد فرحات
02-22-2011, 07:34 PM
اقتراب اللاعب من الاكساء يزيد دقته ، فتصبح 10x6 ، وهنا يستعيد الاكساء جزءا من تفاصيله المفقودة (ظهور حرف L وحرف F ) .

http://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-07.pnghttp://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-08.pnghttp://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-09.png
نسخ مختلفة من صورة الاكساء ، من اليمين الي اليسار 4x10 و 5x10 و 6X10 ، العرض السريع لهذه الصور مختلفة الدقة (كما في حالة ابتعاد اللاعب واقترابه بسرعة) ، يعطي تأثير الاهتزاز والاضطراب علي الاكساء .

http://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-10.gif
ظاهرة الاهتزاز الكسائية .. وهي شائعة للغاية في الألعاب ،ولا يقتصر الأمر علي ذلك فقط ، فقد تتسبب ظاهرة الحذف في ظهور تعرجات في الصورة لم تكن موجودة من قبل ، وذلك بسبب تداخل عناصر الصورة بشكل غير طبيعي ،والحل ؟ لا يوجد حل تقني للأسف .. فلا يمكن تطوير طريقة لتفهم بها البطاقة الرسومية الأجزاء المهمة من الصورة لتتجنّب حذفها ، لأن الصور تختلف وتتنوع في ألوانها وتفاصيلها بشدة ، مما يضمن استحالة وجود طريقة شاملة تصلح للتطبيق علي الجميع .

الحل سيكون هنا بالطريقة التقليدية اليدوية ، وهو أن يقوم المصمم بعمل نسخ مختلفة الدقّة من الصورة الأصلية ، فاذا كانت دقة الصورة 512x512 مثلا ، يقوم المصمم بعمل نسخة من هذه الصورة بدقة 256x256 ، ونسخة أخري بدقة 128x128 ، وأخري بدقة 64x64 ، وأخري بدقة 32x32 ، وأخري بدقة 16x16 ..الخ ويستخدام هذه النسخ بدلا من عملية التصغير ، فاذا أرادت البطاقة اكساءا صغيرا ، استخدمت نسخة 16x16 ، واذا أرادت اكساءا متوسطا ، استخدمت نسخة 64x64 وهكذا .


http://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-11.jpg
نسخ مختلفة الدقة من نفس الاكساء .. وتُسمّي هذه النسخ المصغرة باسم MIP-Maps ،هكذا تم التغلب علي غباء البطاقة الرسومية ، فتلك النسخ المُصغّرة ستحتوي علي تفاصيل الصورة الكاملة لكن بحجم أصغر ، وعندما تستخدمها البطاقة الرسومية لا يحدث فقد في التفاصيل ولا يحدث اهتزاز واضطراب للصورة ،لكن ماذا اذا احتاجت البطاقة الي حجم معيّن ، غير موجود في هذه النسخ المصغرة ؟ ، مثلا 50x50 ؟الحل هنا يتمثّل في استخدام اقرب نسخة مصغرة (32x32)، ثم تطبيق عملية التوسيع(التكبير) Stretch عليها بحيث تصبح بدقة 50x50 .

بالطبع نعرف جميعا عيوب عملية التوسيع ، من زيادة في التعرّجات و تشوّه في الصورة بسبب استخدام الألوان الوسطيّة ، لكن تأثير هذه العيوب يكون خفيفا هنا ، لأن الدقة الجديدة (50X50) قريبة نوعا من دقّة الصورة الأصلية (32x32)،لكن حتي هذا الحل لا يصلح في جميع الحالات والظروف ، حيث يعيبه عدم قدرته علي عرض الأسطح الممتدة بشكل جيّد .

http://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-12.jpg
والأسطح الممتدة هي الأشكال التي تمتد في الأفق ، مثل أرضية ممر ممتد ، أو أرضية صحراء أو شارع ممتد ..الخ ،أرضية ممر ، والجزء القريب من اللاعب دقته عالية (عدد نقاطه أعلي) ، والأجزاء البعيدة دقتها قليلة ، الي درجة أن تفاصيل ألوان الأرضية تكاد تختفي تماما ،عند عرض هذه الأسطح ، يأخذ الجزء القريب من اللاعب فيها أقصي دقّة للاكساء (مثلا 512x512)، لكن الجزء البعيد يأخذ دقة أقل (مثلا 128x128) ، والجزء الأبعد يأخذ دقة أقل وأقل (مثلا 64x64) ،والجزء البعيد جدا يأخذ دقة قليلة للغاية (مثلا 16X16 ) ،المشكلة في الحاجة الي استخدام دقات وسطيّة علي طول امتداد هذه الأسطح ، (مثلا 70x70 ) ، وهذه تأخذ أقرب دقة متاحة لها وهي 64x64 ، وتتعرض لعملية توسيع ، مما يجعل من شكل هذه الاكساءات باهتا ومموها الي حد ما .

وتكون هناك دقات شاذة أيضا ، مثلا 150x70، وهذه تأخذ أيضا أقرب دقة متاحة لها ، وهي 64x64 ، لأن الـ64 أقرب الي الـ70 ، ماذا عن الـ150 اذن ؟ لا يمكن استعمال دقة 128x128 معها ، لأن الـ 128 أكبر من الـ70 ، وهذه العملية تتطلب توافقا كاملا بين قيمتي الدقة ، لذا فلا مفر من استخدام نسخة 64x64 مع الـ150 و سيحدث فيها تشوه أكبر بالطبع لأن المصدر دقته 64 فقط ، أي أقل من نصف الـ150،ومما يزيد الطين بلّة هو أن نسبة حدوث الدقات الشاذة (مثل 150X70 )أكبر بكثير من الدقات الوسطيّة (مثل 70X70) ، لأن الأسطح الممتدة تكون واسعة القاعدة ، وضيقة القمة ، أي ذات شكل هرمي تقريبا ،ومحصلة كل هذا هو زيادة تشوّه الصورة كلما ايتعدنا عن الدقة الكبيرة (ابتعدنا عن اللاعب) ،الأسوأ أن هذه الاكساءات ذات الدقات المختلفة تتراص مع بعضها تباعا في حالة الأسطح الممتدة، وهنا يظهر فارق الوضوح والدقة بينها وبين بعضها ، ولا يكون المنظر جميلا أبدا .

أحمد فرحات
02-22-2011, 07:36 PM
http://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-13.jpg
في الصورة أرضية ممتدة مرصوفة بالحجارة ، والأرضية مجرّد صورة اكساء ، ويظهر فيها فروق الوضوح في التفاصيل كلما ازداد البعد ، حيث تتشوه الكساءات نتيجة عملية التوسيع .

http://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-15.jpghttp://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-14.jpg
يمكنك تمييز الفارق بين كل نسخة اكساء MIP-Map ، وهو الخط الفاصل بين درجات وضوح التفاصيل ، فالجزء الأسفل من الصورة (الأقرب للاعب) يظهر واضحا ، بينما الجزء الأعلي يظهر مموّها وغير واضح المعالم .

http://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-16.jpghttp://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-17.jpg
مثال آخر علي أرضية مختلفة ويظهر بوضوح الخطوط التي تفصل بين منطقتين اكسائيتين ،يعيب تلك الخطوط أنها تزحف باستمرار أمام اللاعب ، فعندما يتحرّك اللاعب -سواء بالابتعاد أو الاقتراب- فانه يغيّر من دقة الكساءات التي أمامه باستمرار ، وهذا التغيير المستمرّ يصاحبه انتقال لهذه الخطوط ، لأنها تفصل بين كل دقة ودقة ، لذا تظهر وكأنها تزحف أو تتحرك مع حركة اللاعب ، وتلك الحركة غير طبيعية ، وتفسد علي اللاعب متعة مشاهدة الرسوميات الفائقة ،للتغلب علي هذه الخطوط الفاصلة ، يجب عمل عملية دمج للألوان علي جانبي هذه الخطوط ، والدمج هنا يكون بعملية تكوين ألوان وسطية بين المنطقتين ، بحيث يختفي الخط الفاصل هذا تماما ، وهي عملية مماثلة لعمليّة ممانعة التعرّج Anti-Aliasing ، ويطلق عليها هنا اسم Tri-linear Filtering ، أو الترشيح الثلاثي ، لأنها تتضمّن ثلاثة عمليات لتكوين الألوان الوسطيّة ، عملية علي النقطة الملاصقة للخط الفاصل في المنطقة الأولي ، وعملية ثانية علي النقطة في المنطقة الثانية ، ثم عملية ثالثة بين نتيجتي العمليتين الأولتين ، للخروج بلون النقطة علي الخط الفاصل بين المنطقتين ،فائدة الألوان الوسطيّة هنا هي اضافة تأثير التدرّج علي الألوان بين المنطقتين ، بهدف القضاء علي تلك الخطوط الفاصلة ، والتي تنشأ كما ذكرنا بسبب اختلاف الدقة بين منطقتين اكسائيتين ،حيث تمتلك احدي المنطقتين ألوانا أقوي من الأخري ، وهذا يعطي مظهر الخطوط الفاصلة الزاحفة .

http://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-18.jpg

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


http://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-19.jpghttp://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-019.jpg
مثال آخر ، الي اليمين لاتوجد فواصل واضحة بين المناطق الاكسائية مختلة الدقة ، أما علي اليسار فما تزال الخطوط واضحة

أحمد فرحات
02-22-2011, 07:37 PM
http://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-020.jpghttp://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-20.jpg
مثال جديد ، الي اليمين لا توجد خطوط فاصلة ، لكن علي اليسار توجد ،لكن القضاء علي مشكلة الخطوط الفاصلة هو أقل مشاكلنا ، فلا يزال أمر اختفاء وضوح التفاصيل مع بعد المسافة قائما ، وهو لعمري أدهي وأمرّ ،ولقد وضحنا سبب هذه الظاهرة بالفعل ، فكلما زادت المسافة ، استعملت البطاقة الرسومية اكساءا ذي دقة قليلة (16x16 مثلا) ،ثم قامت بتوسيعه الي دقّة شاذة مثل 50x25 باستخدام الألوان الوسطيّة (مع ما صاحب هذا من تشوهات في الصورة ) ومع تشغيل اللعبة علي دقة شاشة كبيرة ، (مثلا 1920x1080 ) ، نجد أن الاكساء يتشوّه أكثر نتيجة تطبيق عملية التوسيع للمرة الثانية عليه ، ويتغيّر منظره تماما .

http://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-21.pnghttp://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-22.png
اكساء أصلي بدقة 20x20 ، والي جواره نسخة مصغّرة منه بدقة 10x10 ،نريد الآن تشغيل هذا الاكساء بدقة 20x10 ، وهذه هي دقة شاذة .

http://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-23.pnghttp://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-24.png
تكبير الاكساء المصغّر من دقة 10x10 الي دقة 20x10 (دقة شاذة)، لاحظ الألوان الوسطية القبيحة التي نشأت .

http://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-25.pnghttp://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-26.png
تكبير الصورة يعني أن تضيف البطاقة الرسوميّة نقاطا زائدة عليها ، وهنا تتم اضافة نقطة واحدة بين كل نقطتين ، واذا كان لون النقطتين غير متماثلا ، فان النقطة الزائدة بينهما تأخذ لونا وسطيا بين لونيهما ، وفي هذا المثال نجد أن اللون الوسطي بين اللون الأخضر والأصفر ، هو الأخضر الباهت .. ومن هنا ينشأ التشويه (راجع الجزء الأول )،لحلّ هذه العقبة الأخيرة ، ابتكر المطورون مرشّحا جديدا ، سمّوه المُرشّح غير الاعتيادي Anisotropic Filtering ، ومُهمّة هذا المرشح غير تقليدية وشاقة بالفعل ،ففي مثالنا الأخير ، نحتاج لتكبير صورة من دقة 10x10 الي دقة 20x10 ، أي ينقصنا 10 نقاط في البعد العرضي .

في طريقة التكبير التقليدية ، تمّ تعويض هذه النقاط بألوان وسطيّة ، لكن هذا المرشّح غير تقليدي ، فهو يقوم بتحليل الكساء الصغير ذو دقة 10x10 ، وتحليل الكساء الكبير ذو دقة 20x20 ، وتحليل الألوان الوسطيّة بينهما للوصول لأفضل الحلول اللونية الممكنة لتعويض النقاط الناقصة ،بل يتمادي المرشّح في عمله الي درجة فحص 128 نقطة لونية من أجل تعويض نقطة واحدة فقط ،والنتيجة هي دقة غير عادية في تكبير الصور ، دون وجود فقد في التفاصيل ، مع تقليل التشوّهات الي الحد الأدني.

أحمد فرحات
02-22-2011, 07:37 PM
http://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-27.pnghttp://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-28.png
الي اليمين ، باستخدام المرشّح غير التقليدي . الي اليسار ، التكبير بالطريقة التقليدية .

http://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-29.jpg
مثال عملي : الي اليمين اللعبة باستخدام المرشح غير التقليدي ، الي اليسار بدون استخدامه ، لاحظ كيف تمتد الأرضية أمام اللاعب بكامل تفاصيلها (اليمين) .

http://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-030.pnghttp://www.arabhardware.net/images/stories/Articles/November/anisotropic-filtering/27112010-30.png
مثال آخر : الي اليمين ، المرشّح غير التقليدي ، الي اليسار ، بدونه ،بالطبع فارق السماء والأرض ، وتظهر الاكساءات و كأنها جديدة ،وعلي وجه العموم فان مرشحات الاكساءات تستهلك طاقة حسابية كبيرة من البطاقة الرسومية ، بل وتخفض من قدرة البطاقة الاكسائية الي النصف في الكثير من الأحيان ، لكن فارق الصورة يستحقّ كما رأينا ،الشئ الجيد ، هو أن البطاقات الرسومية الحديثة ، تستطيع معالجة هذه المرشّحات بكفاءة عالية ، دون فقد كبير في الأداء ، لذا فانه من المفضل تفعيل هذه المرشّحات في كل الألعاب ، وبالذات المرشّح غير التقليدي Anisotropic Filtering .

تفعيل هذا الأخير ، يكون علي مستويات ، أوّل مستوي وهو 1X ، يقوم بتحليل ثمانية نقاط لونية من أجل تعويض نقطة واحدة ، ثاني مستوي 2X ، يقوم بتحليل 16 نقطة .. 4X يقوم بتحليل 32 نقطة ، 8X يقوم بتحليل 64 ، و 16X ، يقوم بتحليل 128 نقطة ، وكلما زاد المستوي ، زادت كفاءة المرشّح في تكوين الاكساء ،يمكن تفعيل هذا المرشّح بشكل اجباري في كل الألعاب من لوحة التحكم ببرنامج القيادة (التعريف Driver )، ومن المُستحسن وضعه علي المستوي الثامن 8X ، أو المستوي الأقصي 16X ، للحصول علي أفضل النتائج البصريّة .

في النهاية رأينا كيف تطورت الاكساءات من مجرد وسيلة خادعة لتوفير عدد المضلّعات ، الي أداة معقدة ذات مزايا جمّة ، لكن مع عيوب تحتاج الي اصلاح ، ولحسن الحظ ، فان مزايا الاكساءات تفوق عيوبها أضعافا ، فيكمن للاكساء الواحد توفير 50% من عدد المضلّعات اذا تم استخدامه بشكل جيّد .