وسام البهنسي

مدونة مبرمج معماري

ناظم من؟

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

 

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

 

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

struct VERTEX // بنية رأس مجسم
{
   float posX, posY, posZ; // إحداثيات الموقع الفراغية
   float normalX, normalY, normalZ; // الناظم
   float texU, texV; // إحداثيات الإكساء
};

لحظة لحظة… الموقع في الفراغ مفهوم… واللون مفهوم (لو أردنا أن نلون المجسم مثلاً بألوان مختلفة)، لكن من هذا الناظم؟ وما هي إحداثيات الإكساء؟

 

دعنا الآن من إحداثيات الإكساء، فهي ليست محط اهتمامنا اليوم… ولنعد إلى ناظم. الناظم يا سيدي الكريم، هو متجه ينطلق من السطح وباتجاه عمودي على السطح. انظر الصورة أدناه مثلاً:

 

نواظم سطوح مضلعات كرة

 

لاحظ في الصورة أن النواظم تنطلق من منتصف السطح. في الحقيقة طالما أننا نتحدث عن سطح مستوٍ، فالناظم سيكون نفسه مهما تغيرت نقطة انطلاقه. أما للأسطح المنحنية، فالناظم دائماً عمودي على المنحني، كما في الصورة هذه:

مماس وناظم المنحني

 

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

 

 

نواظم رؤوس سطح مضلع يمثل منحني

 

 

تعال معي الآن لننظر إلى بعض تبعات هذا الكلام…

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

 

حساب الإضاءة باستخدام الناظم

 

 

تأمل في الصورة التالية الآن وحاول تبرير الفرق بين الكرتين أدناه وفقاً لما قرأته للتو:

 

تظليل مسطح وتظليل ناعم (جوروه)

 

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

 

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

 

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

التعليقات (2) -

  • Osama Deep

    24/08/2011 05:47:54 م | الرد

    كلام جميل ومعلومات قلما نجدها وبشرح مبسط في مكان آخر ، ولعلي وبقراءتي للمقالة قد يتبادر بذهني أكثر من سؤال وأتمنى الإجابة عليها :
    - هل النواظم للنقطة أم للسطح ؟
    - من التعريف السابق للنقطة ، أنها تتكون من إحداثيات للمكان وإحداثيات للناظم على المحاور الثلاث ، فهل هذا يعني أنه يمكن أن تكون النقطة تمتلك 3 نواظم غير منطبقة على بعضها ؟
    - وهل في حال الكرات الحمراء على اليسار تحتاج بروسيس أعلى من الذي على اليمين ؟

  • wbahnassi

    24/08/2011 06:48:40 م | الرد

    أسامة، سأجيب عن أسئلتك ضمن سياق رسوم الحاسوب:

    - هل النواظم للنقطة أم للسطح ؟
    للنقطة (الرأس). ويتم استيفاء الناظم عبر سطح المضلع انطلاقاً من النواظم الموجودة على رؤوسه. فلحساب قيمة الناظم في مكان ما على سطح المضلع، تقوم بدمج النواظم من الرؤوس بنسب تكافئ بُعد الرأس عن المكان المطلوب.


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


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

    شكراً على هذه الأسئلة الجميلة Smile

أضف تعليقاً

Loading