All But Reality

Imagine a catchphrase here

Simple template. Background and Customization by Shihab Elagib. Powered by Blogger

May 21, 2015

عن القيمز والجرافيكس - الجزء الثاني

في الجزء الأول تحدثت عن الدقة، كنهيتها و-بعض- تأثيراتها على الجودة الصورية في القيمز. تحدثت أيضاً عن التعرج وبعض صور مكافحته، وانتقلت منها الى الحديث عن الtextures وبعض الأمور المتعلقة بها. 

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



قبل البدء: اود ان أشير -مجدداً- الى قلة خبرتي في هذا المجال. لذا ربما قد تجد هنالك بعض الأخطاء او المعلومات غير الدقيقة ان كنت ذو خبرة في هذا المجال. في هذه الحالة ارجوك\كي اخطاري بهذا الخطأ. ويا حبذا ان كان هذا الإخطار مرفقاً بمصدر موثوق. وسأحاول القيام بتصحيحه في أسرع وقت.

الظلال Shadows

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

القيمز -غالباَ- تستخدم تقنية تعرف بـ"خارطة الظلال" "Shadow Mapping" او تقنيات مستمدة منها. غالب هذه التقنيات تنتج في نهايتها صورة تستخدم كخارطة (اعتبرها صورة مثل الـtextures المذكورة في المقال السابق) يتم دمجها مع باقي نواتج عمليات التصيير المختلفة للسطح الذي سيسقط عليه هذا الظل. 



ملحوظة: صورة خارطة الظلال الوسطى للتوضيح فقط ولا تمثل جميع الصور التي تأتي عليها خرط الظلال المستخدمة في القيمز.

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

لمثال حي، فلنأخذ المشهد التالي من لعبة Tomb Raider الأخيرة:

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


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


كون تطبيق الظلال في القيمز -غالباً- ما يستخدمها كخارطة اوصورة نقطية raster image (تعرف ايضاً في بعض الحالات بالـbitmap)، هذا يجعلها وارثة لجميع المشاكل والتردي في الجودة الذي قد يؤثر على الأخيرة (فيما عدا اغلب تلك المتعلقة بالألوان) إبتداءاً بأهمها: استخدام دقة resolution منخفضة. (انظر الى جزئية الـtextures في المقال السابق لتوضيح الفرق النظري).

لنأخذ كمثال المشهد التالي من لعبة Tomb Raider أيضاً (بإستخدام اعلى جودة ظلال):

ولنأخذ العينات التالية (مجمعة في صورة واحدة) لمقارنة الإختلاف في الجودة عن استخدام أقل دقة للظلال:

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

ربما تتضح هذه الجزئية الأخيرة بصورة اكبر في هذا المشهد من Watch_dogs (وسأرفق الصورتين كما التقطتهما.. كسلت خلاص :/)
الصورة الأولى، أقل اعدادات للظلال:

 الصورة الثانية، اعلى اعدادات للظلال:

لعبة Tomb Raider اتت بخيارين منفصلين لإتاحة تشغيل الظلال واغلاقها، وأخر للتحكم في جودتها (عن طريقة جودة او دقة خارطة الظلال). لعبة Watch_dogs لكن اتت بخيار واحد للظلال تتدرج فيه ما بين تخفيض لجودتها واغلاقها لبعض العناصر في الصورة (وليس جميعها). 
ان ركزت في ظل الشجرة القريب وانتقلت بي الصورتين ستلاحظ التأثير الذي ذكرته اعلاه، الدقة العالية للظلال تسمح بتمثيل افضل للضؤ الذي يتخلل اوراق الشجر، كما انه يمثل اسقاط الظل نفسه بصورة افضل (كما ذكرت في المقال السابق: دقة اعلى = عدد بكسلات اكبر لتمثيل التفاصيل).
بالإضافة لإنخفاض جودة تصيير الظلال القريبة، ستلاحظ ان تقليل خيار الظلال منع محرك اللعبة من تصيير الظلال للأجسام الصغيرة مثل انابيب المياه، صناديق النفايات والشخصيات البعيدة. وهذه احدى ميزات استخدام خرائط الظلال، فمن السهولة تحديد عناصر في الصورة لا تسقط ظلالا او لا تستقبل ظلالا -كليهما غالباً ما يكونان خيارات ضمن خصائص كل نموذج في اللعبة- دون الحوجة لتعديل محرك التصيير بالكامل، مما يسمح بزيادة او تقليل القدرة الحوسبية المستخدمة في العملية. فلذا تجد ان خيارات الظلال في بعض الألعاب تتحكم ليس فقط بدقة الظلال، بل في امكانية بعض الاجسام الثانوية (كصناديق النفايات في المثال اعلاه) لإسقاط ظلال، بل ستجد في بعض الالعاب خيارت اسقاط ظلال لعناصر معينة في اللعبة، كالسحاب مثلاُ او الاشجار منفصلة عن اعدادات الظلال لباقي العناصر من نماذج شخصيات ومركبات ومنشاءات.

من العيوب الأخرى التي قد تنتج من استخدام صور نقطية هي التعرج (aliasing) عند استخدام صور بدقة منخفضة وعرضها بدقة عالية بدون فلترة مناسبة. قديما كانت هذه مشكلة كبيرة في القيمز نسبة لأن العتاد في تلك الفترة لم يكن يملك ما يكفي من الذاكرة وسعات النواقل للتعامل مع خرائط ذات دقة عالية، ولا تزال كذلك في عدة عناوين، خذ مثلا هذا المشهد من لعبة Battlefield 3 مصير بأقل دقة للظلال وأعلاه (على التوالي):



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


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

ما تركز مع القميص شديد...


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

لتوضيح تأثير الظلال الناعمة خذ هذه الصورة المصيرة بواسطة محرك Unreal Engine 4، ولاحظ فيها الإختلاف في الحدة بين الظلال الناتجة من السيارات (مسافة قليلة بين المصدر والظل) وتلك الناتجة من المباني (مسافة كبيرة بين المصدر والظل).
كمثال اخر يبين زيادة ضبابية حواف نفس الظل مع المسافة، يمكن اخذ هذه الصورة من نفس المصدر، لاحظ للظل الناتج من مقعد الأورغن (اورغن انابيب؟) وقارن بين حدته بالقرب من ارجل المقعد، وبينها بعيدا عنها. لاحظ ايضا لحواف الظل عند المدخل الأيسر.

للأسف، لم اجد في متناول يدي لعبة توضح تأثير الظلال الناعمة بصورة جيدة، وفي الحقيقة ليست هنالك العديد من الامثلة لتطبيقات الظلال الناعمة في الالعاب. التطبيق الوحيد الذي اذكره (لا يعني انه الوحيد مطلقاً) هو في تقنية Percentage Closer Soft Shadows من انفيديا، والذي يمكن ملاحظة تأثيره في هذه مدونة الشركة الرسمية لتطبيقها في لعبة GTA V (الموقع سيحتاج الى بروكسي لفتحه من السودان). سأكتفي فقط بهذا الرابط و الحديث النظري وسأنتقل للجزئية الثانية من هذا المقال:

الـAmbient Occlusion

او حسب خدمة ترجمة قوقل: ـ"الإنسداد المحيط".... عربي ولا مش عربي؟...  :|

قبل الحديث عن الambient occlusion يجب أولاً التطرق لما يعرف بالـGlobal Illumination او "الإضاء الكلية" أو "الشاملة" (أو "العالمية"، حسب قوقل :|). الإضاءة الشاملة هي محاولة لمحاكاة الإضاءة التي تحصل على ارض الواقع، والتي يمكن تقسيمها لجزئين: مباشرة و غير مباشرة.
الإضاءة المباشرة تشمل الأشعة الساقطة على جسم ما مباشرة من مصدرها. اما غير المباشرة فهي الساقطة على الجسم بعد سقوطها وانعكاسها او ارتدادها عن اجسام اخرى كجدران الغرفة مثلا.
للتذكير (او التوضيح) يرجى ملاحظة ان هنالك نوعين من الإنعكاسات للضؤ: انعكاس كامل او منتظم، يعرف ايضا بالSpecular Reflection وفيه ترتد الفوتونات بصورة منتظمة بزاوية مساوية لزاوية السقوط. هذا النوع هو الأكثر استخداماً لتوضيح الانعكاس في المناهج التعليمية المحلية (حسبما اذكر) لكنه لا يمثل الانعكاس الكلي او يقاربه سوى في أسطح مثل المرايا. النوع الثاني هو الانعكاس المشتت او ما يعرف بالـDiffuse Reflection، حيث تتبعثر فيه فوتونات الضؤ المكونة للشعاع (التي لم يمتصها الجسم) بصورة عشوائية في اتجاهات مختلفة.


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


التمثيل الكامل للإضاءة يحتاج متابعة لجميع الفوتونات الساقطة من مصدر ضؤ افتراضي ومتابعة انعكاساتها حتى وصولها للكاميرا. هذه العملية شبه مستحيلة التنفيذ (بالتكنولوجيا المتاحة اليوم، على الأقل) عند الأخذ في الاعتبار ان عدد الفوتونات الساقطة وانعكساتها قد يؤلان لما لا نهاية، لذا تقتصر تكنولوجيا التصيير عالية الجودة المتوفرة حاليا على اختيار عينات من هذه الفوتونات ومتابعة انكساراتها وانعكساتها لحد معين (وغالبا ما يتم االتتبع عكسياً من الكاميرا وحتى المصدر، النظام المتبع في تقنيتي تتبع المسار Path Tracing وتتبع الشعاع Ray Tracing). هذه العملية لا تزال مكلفة و قد تحتاج عشرات المعالجات عالية القدرة وساعات من العمل لتصيير مشهد واحد، لذا لا يمكن تنفيذها في تطبيقات مثل الألعاب تحتاج تصيير المشهد بكامله في ما لا يزيد عن 16ملي ثانية (تعليق هامشي: وماف واحد يجيني يقول لي 30FPS!) في معالجات ذات قدرة اقل بكثير. 
لهذا السبب، فإن القيمز غالبا ما تقوم بتجاهل الإضاءة غير المباشرة وتقتصر حساباتها على المباشرة. او هكذا كان الأمر قديما، فمع زيادة الطلب على جرافيكس اكثر واقعية، تم تطوير تقنيات اكثر كفاءة لمحاولة الـ "إيحاء"  بمثل هذه الإضاءة. احدى اشهر هذه الطرق هي ما يعرف بالـAmbient Occlusion.

مفهوم الAmbient Occlusion (او اختصاراً: AO) (في القيمز تحديداً) تسلك طريقأ عكسياً للمفهوم المذكور اعلها، فبدلاُ من تتبع الأشعة واضاءة الأسطح تبعا لشدة الأشعة الساقطة عليها، تفترض الAO ان جميع عناصر المشهد مضاءة بنفس الشدة (فيما يعرف بالـAmbient Light) وتحاول تحديد دكون اللون لكل منطقة في الصورة من ابسط السبل لذلك هي مقارن موقعها في الفضاء بمصدر الإضاءة و تحديد ما اذا كان هنالك جسم واقع بينهما (وهذه هي نفس الطريقة المستخدمة في تكوين خرائط الظلال)، او مقارنة عمق كل جزء من الصورة في الفضاء مقارنة بالأجزاء المقاربة وافتراض ان دكون اللون يزداد بزيادة العمق، هذه الطريقة مناسبة لتقدير الإضاءة عند حالات مثل الجزء 2 من المثال التوضيحي اعلاه، هذه الطريقة ايضاً هي المستخدمة في تقنية الScreen Space Ambient Occlusion (او اختصارا:SSAO)، اولى تقنيات الAO المتاحة للقيمز والتي بنيت عليها اغلب الطرق اللاحقة.

لتوضيح تأثير الAO لنأخذ نفس مثال الظلال النظري اعلاه ونطبق عليه خارطة للAO بدلا عن الظلال



التأثير الكبير للAO يظهر في 3 مناطق:
  • الزوايا ومناطق تلاقي الأجسام مع الأسطح العامودية عليها. تلاقي الإناء والاعشاب مع السطح مثلا. لذ تجد ان الـAO يعرف احياناً بـ"ظل التلاقي" او الcontact shadow.
  • التجويفات كفتحة الإناء.
  • المناطق ذات الفضاء المعقد كتلك بين الأعشاب مثلا.

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


لندع الجانب النظري وننتقل للعملي، ولنبدأ بمثال لتطبيق الAO في بنشمارك Unigine Heaven، الصورة الأولى بإستخدام تعتمد فقط على الظلال الناتجة من الاضاءة المباشرة بدون AO، والثانية تتطبق كليهما:


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


تصبح تلك الفجوات داكنة اللون كما يفترض ان تكون. بالإضافة لذلك فإنها تساهم في تدعيم الـdepth perception الذي تطرقت اليه في جزئية الظلال.

كما ذكرت ايضاً، فإن اولى تقنيات الAO المستخدمة في القيمز هي الSSAO (لا تخلط بينها وبين تقنية مكافحة التعرج الSSAA)، انبثقت منها لاحقاً عدة تقنيات مختلفة. على سبيل المثال -وليس الحصر- أذكر:
Horizon-Based Ambient Occlusion (HBAO)
Horizon-Based Ambient Occlusion Plus (HBAO+)
High Definition Ambient Occlusion (HDAO)

هذه التقنيات الثلاث -غالباً- ما تأتي بنتائج افضل من الSSAO في مقابل انخفاض نسبي في أداء اللعبة، وان كانت افضلية ايهم عى الأخر تختلف من تطبيق لتطبيق (فيما عدا الHBAO+، بحكم كونه تحسين لنفس خوارزمية الHBAO). 


لمقارنة بسيطة بين كلاً من الHBAO والSSAO لنأخذ المشهد التالي من لعبة Battlefield 3 (بدون أي AO)

ولنأخذ عينة من المشهد عن تطبيق كلاً من الSSAO والHBAO



اذا دققت النظر في منطقة تلاقي الرصيف مع الأسفل، ستجد ان كلاً من الطرقيتين تظللانها مقارنة بالأصل، لكن الSSAO تزيد من هذا التظليل بعيداً عن منطقة التلاقي، اما الHBAO فتحصر غالب تأثيرها بالقرب منه.

لمثال اوضح أخر لنأخذ مشهداً اخر من نفس اللعبة:

ونطبق عليه التقنيتين، هذه المرة سأرف الصورتين بدون قص بما ان الفرق كبير بينهم. الصورة الأولى عند استخدام الSSAO والثانية HBAO:


لاحظ كيف ان الSSAO تفشل في تظليل الفضاء داخل الصناديق وتكتفي فقط بتظليل ما بينها وبين الحائط ونقاط التلاقي، بينما تمكنت الHDAO من تظليل اغلب الاماكن الـ"occluded" بدرجة عالية نسبياً من الدقة. 

كمثال اخير في هذه الجزئية، لنأخذ المشهد التالي من لعبة Watch_dogs التي تأتي بخيارين للAO. الصورة الاولى بدون اي AO، الثانية بإستخدام الmHBAO (تطبيق للHBAO من شركة يوبيسوفت) والثالثة بإستخدام الHBAO+، وسأترك التعليق حول ايهم "افضل" لكم.






نقطة يجب ذكرها: ليست جميع المناطق التي تحدث فيها Ambient Occlusions يتم حسابها عند تصيير اللعبة للمستخدم، فالكثير من هذه الحالات يتم تصييرها مسبقاً ودمجها في texture الأجسام (فيما يعرف بالـbaking، وهنا تحديدا: AO baking). هذه العملية عادة ما تتم لتفاصيل دقيقة يتوقع انها دائما ما تكون occluded مثل مناطق التجاعيد في جلد الشخصيات، والتفاصيل المعقدة لموديلات مثل الأسلحة. تستخدم هذه الطريقة ايضاً لـ"تزوير" النتؤات والبروزات في الاجسام (واذكر للمرة الثالثة بتأثير الظلال في الاحساس بالأبعاد) دون ان تحتوي نماذج هذه الأجسام على هذه النتؤات او البروزات، وبالتالي mesh اقل تعقيداً لتلك النماذج.
 هذا التطبيق يختصر متطلبات القدرة الحوسبية الضرورية لتصيير اللعبة النهائية مع الاحتفاظ بجودة عرض كافية في أغلب الظروف.

الإنعكاسات Reflections

القيمز (عادة) لا تعتمد على خوارزميات تتبع لأشعة الضؤ لتصيير بيئتها، لذا فإن الطريقة الواقعية لتصيير الإنعكاسات في أسطح مثل المرآة و الأسطح المعدنية المصقولة عبر تتبع الفوتونات غير قابلة للتطبيق هنا. القيمز (غالباً) تتبع طرقاً تدور حول نفس الفكرة التي تدور حولها تقنيات الظلال: تحصل على الصورة المطلوبة، حولها لخارطة نقطية وامزجها مع باقي خرط عملية الshading للسطح المستقبل للإنعكاس، او في ابسط الحالات، استخدمها كـtexture مباشرة للسطح.
(لاحظ: بعض صور الانعكاس (مثل الspecular highlights) يمكن "خبزها" (bake)  وتحويلها لtexture ومن ثم مزجها مع باقي عناصر الtexture مسبقاً قبل التصيير من قبل المستخدم، كحال الAO Baking المذكور سابقا.)

لا اعتقد ان هنالك داعي لكتابة الفوائد من الانعكاسات، لذا سأنتقل مباشرة لعرض مثال لها في حالة عدم استخدامها (الصورة الأولى) وعند استخدامها بدقة عالية (الصورة الثانية). المشهد من لعبة Max Payne 3:



"فرق السماء من الأرض" كما يقال (pun not intended).
 احدى اكبر العلامات المميزة للسيراميك والاسطح المصقولة مقارنة بمواد "ماتيّة" (من matte) اخرى مثل الأسمنت، الجبص والجير هي انخفاض نسبة الانعكاس المشتت مقابل المنتظم، وبالتالي عملها بصورة اقرب للمرآة (ذات الانعكاس المنتظم بالكامل... تقريباً). 
اضافة الانعكاس تضيف روحاً للمشهد وتمنح الناظر مزيداً من المعلومات الصورية لتحديد ماهية نوع الأرضية التي اختارها راسم المشهد. ناهيك من دفع المشهد اكثر نحو الواقعية.

كما قلت سابقا، نظم الانعكاسات المستخدمة في القيمز في غالبها تحول الانعكاس لخارطة نقطية، لذا فإن جودة هذه الصورة تؤثر تبعا في جودة الانعكاس. Max Payne 3 تسمح بتحديد هذه الجودة بواسطة خيار يسمى "Reflections" (كحاله في اغلب الألعاب). لنأخذ المشهد اعلاه ونجربه مرة بأقل الخيارات جودة، ومرة بأعلاها:

لاحظ زيادة ضبابية تفاصيل انعكاس العامود في الجودة المنخفضة مقارنة بأعلى جودة.
(تعليق ما شرط تفهمه: او ممكن تقنع روحك انه دي glossy reflections وتكسب كواليتي احسن بأداء اعلى >_>)

ليس هنالك الكثير يمكن ذكره في هذه الجزئية، لذا سأكتفي بإضافة هذا المثال من Watch_dogs:


وأنتقل للجزئية التالية:

الترصيع Tesselation (وأشياء اخرى)

بدائيات geometry: ما هو النموذج ثلاثي الأبعاد؟ 
مجموعة من الارقام تمثل مواقع نقاط في الفضاء ناتج التوصيل بين هذه النقاط هو الشكل المطلوب.
هذه النقاط تسمى Vertices (والمفرد Vertex)، وناتج توصيل اي ثلاثة فأكثر من هذه النقاط يسمى "مضلع" او Polygon.
(ملحوظة: وان كانت توجد عدة طرق اخرى لتمثيل الأجسام كمنحنيات واشكال مقعرة او محدبة عوضا عن خطوط مستقيمة ومضلعات، الا ان الأخيرة هي الأكثر شيوعاً واستخداما في الألعاب)

تمثيل النماذج ثلاثية الأبعاد (3D models) كخطوط مستقيمة واصلة بين نقاط ربما يكون بسيطا رياضيا، لكنه يخلق مشكلة عند محاولة رسم اشكال منحنية (كأسطوانة او كرة مثلا). هذه المشكلة تتمثل في صورتين، لكني سأتحدث عن الوحيدة التي تهمنا لهذا الموضوع: ظهور حدود الشكل المنحني كخطوط "مكسرة". لتفادي هذا الأثر يجب استخدام عدة مضلعات يميل كل مضلع فيهم عن سابقه بزاوية محددة. ومن البديهي ان هذه الطريقة تحتاج استخدام العديد من المضلعات لخلق شكل منحني بدرجة كبيرة.
 وللتوضيح:


الست (او ثلاث، المجموعة السفلية هي نفس العلوية لكن رسم عليها توزيع المضلعات للتوضيح) كرات في الصورة اعلاه متساوية في الحجم المستهدف، ومختلفة في عدد المضلعات المستخدمة (الرقم مذكور اسفل كل ثنائي). لاحظ الى حواف الكرة ذات ال 120 مضلع، وكيف يمكنك تمييز كل مضلع حتى بدون توضيحه بالرسم. اما عند استخدام 360 مضلع يقل ظهور اماكن تلاقي المضلعات لكنها لا تختفي تماما. اما عند 2860 مضلع يصبح من العسير تحديد المضلعات دون النظر الى الـwireframe.

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

حتى يدخل الترصيع في المعادلة.

الـ tessellation او الترصيع -حسب الترجمة الشائعة- عملية يقوم فيها الحاسوب بتقسيم (او ما يسمى بالـsubdivision) المضلعات الى مضلعات صغيرة (غالبا ما تكون مثلثات، الأكثر استخداما في القيمز. لكن هذا ليس بشرط). بالتالي يمكن الوصول لمنحنيات سلسة ابتداءا من شكل بمضلعات قليلة. وللتوضيح اخذت الكرة ذات ال120 مضلع وقمت بـ"ترصيعها" (ان صح اللفظ) حتى الوصول لشكل مقارب لذلك ذو ال2860مضلع:


(ملحوظة: طريقة التقسيم التي يتبعها السوفتوير الذي استخدمه مختلفة بعض الشيء عن تلك المستخدم في الألعاب، لكن تظل الفكرة العامة كما هي)

ميزة الترصيع الرئيسية هي انها تعمل عند تنفيذ السوفتوير بصورة ديناميكية، ان ان النموذج المخزن (نموذج الشخصية المرفق ضمن ملفات اللعبة عند بيعها مثلا) لا يحتاج ان يكون بعدد مضلعات كبير لكي يمكن عرضه كذلك. هنالك ميزتين لهذه الخاصية: الأولى انها تتيح للمطور ارفاق خيار للمستخدمين ذوي الحواسيب القوية تصيير الألعاب بجودة نماذج اعلى، مع الاحتفاظ بإمكانية تصييرها بإستخدام النموذج ذو عدد المضلعات المنخفض. بالإضافة لذلك، فإن امكانية تغيير عدد التقسيمات عند الترصيع تجعل من التقنية بديلاً جيدا لمفهوم الLoD.
الLoD اختصار للـLevel of Detail، و هي مفهوم في الالعاب (وبعض البرامج الأخرى) يتم فيه تحديد "مستويات" للجودة، سواء كانت دقة ام عدد مضلعات، لعناصر الصورة المختلفة. هذه المستويات هي التي يصيير على اساسها العنصر حسب بعده من الكاميرا. فالعناصر القريبة من الكاميرا تحتاج تصييرها بعدد مضلعات كبير و دقة texturesعالية، لكن البعيدة عن الكاميرا لا تحتاج لذلك (حسبما شرحت في المقال السابق)، لكن ان استخدمت نماذج وtextures بجودة عالية فإن الحاسوب سيبذل فيها نفس المجهود الذي سيبذله في العنصر القريب بدون اي فائدة. لذا استحدث مفهوم المستويات اياه.
بالطبع، هنالك مشاكل لهذه المستويات، اولها ان المطور سيضطر الى عمل النماذج قليل الجودة وارفاقها مع اللعبة، مكلفاً زمنا ومساحة. وثانيها ان الإنتقال من مستوى لمستوى غالبا ما يكون فجائياً، وحتى خدع تمويه هذ الانتقال لا تنجح دائما  مما يقلل من واقعية الحركة والمشهد المتحرك ككل. 

زيادة سهولة تطبيق الترصيع (مع صدور الd3d11، او ما يعرف خطأاْ بالDirectX11) فتح الباب امام تطبيق تقنية اخرى كانت غير متاحة سابقاً: الDisplacement Mapping او تخطيط الازاحة. هذه التقنية تفتح الباب امام امكانية اعادة تشكيل المجسم ثلاثي الأبعاد -بدون ان يقوم المنمذج بتعديله بيده- عن طريق "ازاحة" الفيرتسيس بقيم يستمدها السوفتوير من صور خاصة تعرف بالdisplace mapes (او في حالات: normal maps، مع مراعاة ان ال"normal mapping" تقنية منفصلة، المزيد عنها في مثال صوري لاحق). ولكن بما ان هذه التقنية تعمل على ازاحة الفيرتسيس، اذا فهي تتطلب كمية كبيرة منها لتطبيق ازاحات معقدة على النماذج، وهنا يدخل الترصيع الى الصورة.
المثال التالي يوضح استخدام الdisplacement mapping لتشكيل حائط قرميد من نموذجين (سطحين مربعين)، الاول ب25 مضلع فقط، اما الثاني فيحتوي على اكثر من 10,000! (ما متذكر الرقم بالزبط >_> )
لاحظ كيف ان تخطيط الازاحة حاول ازاحة ما يمكن من الفيريتسيس في الشكل 1 بدون ان ينتج شكلاً مفهوما، بينما في الشكل 2 تمكن من تمثيل الحائط بدقة عالية.

الطريقة القديمة لخلق مثل هذه الأشكال (عدا مجرد رسمها كtexture وعرضها كبوستر على حائط املس) هي تطبيق تقنية الBump Mapping وتفرعها: الnormal mapping. هاتين التقنيتين لا تؤثران سوى على طريقة اضاءة السطح وبالتالي خلق ظلال لا يمكن ان توجد في شكل املس لكي تستفيد من ميزة الdepth perception في ايهام الناظر بأن البروزات ثلاثية الأبعاد. 
ولكن، هاتين التقنيتين لا تعملان على الشكل ثلاثي الأبعاد نفسه، لذلك فإن قدرتيهما على خلق التفاصيل محدودة جدا. انظر للمثال التالي مقارنة إستخدام نفس خريطة الحائط كـbump map مرة وكdisplacement map مرة اخرى:


الdisplacement map منحت النموذج حجماً ملحوظا مقارنة بالbump التي اكتفت بحساب الإضاءة على السطح كأن هنالك بروز فيه. يصبح المشهد عند تطبيق الtextures عليه:
ايهما تفضل؟



الdisplacement mapping ليست تقنية رخيصة، بل تحتاج اجهزة ذات قدرة حوسبية مرتفعة نسبياً لتشغيلها. التقنية عادة ما تسوق و تأتي تحت خيار "Tessellation" في الألعاب (غالباً لكون المصطلح هو اكثر ما التصق باذهان المستخدمين من فترة تسويق الd3d11). للأسف، لم تكن متوفرة لدي لعبة تدعم هذه التقنية حين كنت اعد لهذا المقال، لذا سأكتفي بالأمثلة التي التقطتها من بنشمارك Unigine Heaven ذو السمعة المبنية على دعمه للTessellation. بإمكانكم تحميل النسخة المجانية من البرنامج وتجبرتها بأنفسكم ان كنتم تملكون بطاقة صورية داعمة للـDX11 من هنا .

الصورة الأولى لمشهد لم تجرى فيه اي تعديل على النماذج قبل التصيير:

اما عند تفعيل الترصيع (والازاحة حسب الصور التي حددها المصمم لكل نموذج) يصبح المشهد:

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


استخدام الترصيع حول الwireframe من شبكة يمكن حساب عناصرها الى صفحة ممتلئة بالخيوط البيضاء لدرجة تجعل تتبع المضلعات كلاً على حدى امراً مستحيلاً! بالتأكيد هو ليس مستحيلاً على الهاردوير، لكنه ليس امراً يسيراً ايضاً. 

سأرفق مثالا واحداً اخرا من البرنامج لتوضيح الازاح، نفس المشهد المستخدم في جزئية الAO اعلاه، مرة بدون ازاحة، ومرة بإضافتها:


لأن احد اهم الاهداف من هذا البرنامج هو توضيح مميزات الترصيع والازاحة في واجهة الـd3d11 تجد ان مصمم النماذج لم يتعب نفسه حتى بتنمذجة شكل درجات السلم واكتفى بسطح املس مائل عليه texture لسلم. ليس فعلاً شائعاً في صناعة الالعاب، للأمانة، لكنه هنا يقوم ببيان تأثير الترصيع بصورة جيدة.

ربما لم استطع التحصل على العاب توضح تأثير الترصيع عن استخدام الازاحة معه (يمكنكم ملاحظة امثلة لها هنا)، لكني تمكنت من اخذ عينات توضح تأثير الترصيع فقط على جودة النماذج، او ربما لا....
من دون اطالة في الكلام، خذ هاتين الصورتين من Max Payne 3، احداهما تستخدم الترصيع لزيادة تفاصيل النماذج، والأخرى لا. حاول ان تحدد ايهما تستخدمها:


ان لم تستطع، اليك بعض المساعدة:


(تعديل بعد النشر: الـaliasing الناتج من تكبير الصورة اخفى الكثير من التأثير القليل للترصيع على هذا المشهد، لذا يستحسن المقارنة بالصورتين الاصليتين)
الإجابة الصحيحة (ان كانت كذلك) هي ان الصورة الثانية هي التي تستخدم الtessellation. اما في المقارنة، فالصور اليسرى هي التي تستخدم التقنية. بإمكانك ملاحظة الفرق في عينتي كوع الشخصية الرئيسية الأيمن. ان ركزت ستلاحظ لأني العينة اليسرى اكثر "دائرية" من اليمنى بقليل.
Max Payne 3 توضح احدى المشاكل في تطبيق الترصيع لتنعيم الزوايا في الالعاب: التقنية لا توجد منها فائدة كبيرة في نماذج ذات كثافة مضلعات عالية اصلاً، ولكن اغلب تطبيقاتها تختصر على الشخصيات وبعض الأجسام الأخرى التي تدمج في اللعبة اصلا بعدد مضلعات عالي. 

لمثال بفرق اوضح بقليل، خذ المشهد التالي من Deus Ex: Human Revolution (بإستخدام الـmeshes الاصلية بدون ترصيع):


وللنتقل مباشرة للمقارنة:

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

ربما يكون الفرق اوضح من Max Payne 3، لكنه لا يزال محصور بصورة رئيسية في الشخصيات، في لعبة يقضي فيها اللاعب وقته في منظور الشخص الأول.... -_-


قبل الإنتقال للجزئية الأخيرة من هذا المقال (نعم، هنالك المزيد) اود ان اضيف مثالاً للخيارات المتعلقة بالbump/normal mapping. هذه الخيارات عادة ما تكون مدمجة مع خيارات جودة الtexture (بما انها -في اخر المطاف- textures)، لكن في بعض الأحيان تجدها منفصلة كحال لعبة Call of Duty: Advanced Warfare:



ولننتقل لأخر جزئية في هذا المقال:

الأسطح المائية

ذكرتها في الأخير لأنها ببساطة تطبيق لجميع ما ذكر اعلاه!
الأسطح المائية (كالأنهار والبحار) عادة ما تصور كأسطح متموجة و عاكسة. هذا التموج يمكن نمذجته اما بواسطة الbump/normal mapping، او بالإستفادة من الترصيع وخرائط الإزاحة، اما الإنعكاس فهو يستخدم نفس المفاهيم المذكورة اعلاه. الأسطح المائية ايضاً تضيف ناحية ثالثة: انكسار الضوء وبيان شكل القاع. لكني لن اتحدث في هذا الجانب (او نمذجة حركة التموجات).

للمثال الأول أخترت لعبة Red Alert 3: Uprising، حيث يوضح تدرج خياراتها تغير كلٍ من الإنعكاس والموجات، الصورة الأربعة الأولة على الترتيب: اقل جودة للمياه، جودة متوسطة، جودة عالية وجودة فائقة.






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


المثال التالي من لعبة Crysis 2، احدى اولى الالعاب التي استخدمت الtesselation في زيادة جودة عرض المياه. الصورة الأولى بإستخدام ادنى جودة للمياه، والثانية بأعلى جودة:



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


ولأخر مثالِ لهذا المقال، اليكم هذا المشهد من لعبة Watch_dogs، الصورة الأولة بأدنى اعدادات لجودة الأسطح المائية، والثانية لأعلاها:



ربما يكون افضل التأثيرات واقعية من بين هذه الأمثلة هو تأثير الأسطح المائية في Watch_dogs. بالإضافة الى انعكاس جميل للبيئة المحيطة، والانعكاس المنتظم اشعة الشمس، تضفي التموجات (افترض انه normal mapped؟ لا اعتقد ان مثل هذه الحالة تحتاج تغير كبيراً في الmesh) لمسة واقعية على المشهد ككل.


وبعد كدة خلاص... انا ذاتي فترت -_-


بوست-سكريبت: ترجمات قوقل المذكورة اعلاه غالبها لغرض التهكم، لأي زول ما وقعت ليه الفكرة يعني :|