Unconfigured Ad Widget

تقليص

إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

أسرار و خدع برمجية 3

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • أسرار و خدع برمجية 3

    بسم الله الرحمن الرحيم



    المقدمة :

    هذا هو الموضوع الثالث من سلسلة مواضيع (أسرار و خدع في برمجة الألعاب) , سنتكلم في هذا الموضوع عن الاضاءة , كيف يفعلونها في الالعاب, و ايضا الظلال , و اخيرا سنتكلم عن خدعة الHeight map, و تذكر ان هذا الموضوع لا يشرح علي لغة او برنامج معين و انما نشرح التكنيك ليستعمل علي اى لغة او برنامج.

    الأضاءة :

    يجب ان تعرف ان هناك اكثر من نوع من الاضاءة يستخدم في الألعاب و يمكنك تصنيفهم هكذا :
    • Directional light
    • Point light
    • Spot light لن نقوم بشرحوا هنا
    • Hemisphere lightening
    حسنا كل نوع من الاضاءة له استخدام و له تكلفة علي اداء الجهاز !! , اولا كلنا نعرف ان الاضاءة عبار عن خطوط تصطدم بالمجسم فترجع لونها, و لكن هنا الامر مختلف فلن نحسب كل خط و اذا اصطدم و لونه الخ هذا من المستحيل عمله علي الجهاز !! و لكن تستخدم تكنيكات ابسط,و يجب ان تعرف ان الاضاءة تقوم بعملها بلغة بالشادرز (HLSL) .

    Directional light :

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

    Pixel color = light_color * clamp(0,1,dot(light_direction,Normal));

    و هذا تقريبا من ابسط انواع الاضاءة و هذه هي النتيجة




    حسنا النتيجة غير مرضية قليل ^_^, هذا لأن ليس هناك ضوء يتصرف هكذا في الحياة الحقيقة و لكن هذه طريقة غير مكلفة لعمل الضوء و هي ابسط الطرق فالنري طريقة اخري !!.

    Point Light :

    حسنا هذا الضوء له خصائص أخري !!, و هو افضل و لكنه اكثر تكلفة للجهاز, فهذا الضوء له مكان معين , و طبعا من مكانه تقدر ان تعرف اتجاهه الي المجسم , و بعدها نحصل علي الDirectional light بحساب الاتجاه مع النورمالز كما فعلنا في الDirectional lightening, و هذا الضوء ايضا له قوة فكلما بعد هذا الضوء عن المجسم زادت ظلامة المجسم (حسب قوته), و هذا النوع من الاضاءة يتصرف كما يتصرف الكشاف او لمبة (مصدر ضوء),و لقوة هذا النوع من الاضاءة يستخدم لعمل ثلاث انواع من البريق ^_^ و هم :
    • Ambient lightening
    • Diffuse lightening
    • Specular lightening
    فالنري كل نوع من البريق الاول هو الAmbient و هو ابسط الانواع علي الاطلاق و هو ان يأخذ المجسم لون الاضاءة فقط من دون اى حسابات هكذا :

    Pixel color = light_ambient و تكون النتيجة مثل هذه :



    Diffuse lightening :

    انت الان تملك بعض الAmbient lightening فالنضف الPoint light الحقيقي بواسطة هذا النوع فنضيف لون الاضاءة و مكانها و قوتها و ستكون النتيجة هكذا :




    و اذا كانت المسافة اكبر بين الضوء و المجسم يصبح هكذا :



    نري ان الان لديك تحكم اكثر في الضوء و قوته الخ و هذا جيد و لكن للاماكن المغلقة كغرفة و لكن لو كان المشهد في الخارج !! فلن تستطيع ان تستخدم مثل هذا النوع من الاضاءة , ستسخدم النوع الأول مثلا ,و اخر نوع من البريق هو الSpecular lightening:

    حسنا هذا الضوء يشبه الDiffuse lightening كثيرا و لكن الفرق الوحيد ان قوة هذا الضوء لا تحدد علي اساس المسافة و المكان فقط و لكن ايضا حسب اتجاه الرؤية او المكان الذي تنظر اليه للمجسم فالنتخيل و كأن الضوء يصطدم بالحائط ثم يرتد اليك فيقوم بعمل ضوء عالي من الجهة التي تنظر اليها و كلما تحركت يتحرك الضوء معك و هذا النوع من الاضاءة موجود في الحقيقة و لكن مع خامات معينة و هي الخامات اللامعة, فالنري النتيجة :



    و كلما تحركت يتحرك معاك و لكن في اطار مكانه و قوته:



    Hemisphere lightening :

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






    تري هنا ان هذا التكنيك قوي جدا و غير مكلف تماما !! و اري انه الانسب للتطبيقات التي تسمي out door يعني في بيئة مفتوحة , و الحمد لله هكذا انتهينا من هذا الجزء و انتهي علمي بفضل الله الي هنا , و سننتقل لجزء اخر و هو مصاحب لهذا الجزء !! .

    الظلال :

    الظلال كما نعرف هي الجزء الذي لا يصله الضوء بسبب مجسم يحجب الضوء عنه, و غالبا ما تأخذ الظلال شكل هذا المجسم , و هناك تكنيكان مستعملان هنا و سنشرحهم بأذن الله .

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

    هذا التكنيك مكلف جدا جدا للجهاز و لكن ما باليد حيلة , تقوم بحساب عمق نقاط هذا المجسم من جهة الضوء , بمعني ان نري عمق كل pixel و كأننا ننظر من مكان الضوء , و بعدها نري عمق كل Pixel في مستقبل الظلال (Receiver) و لكن ايضا و كأننا ننظر من مكان الضوء , و نري اذا كان العمق أكبر فيتم تطبيق الظل علي هذا الجزء و ان لم يكن فأجعل هذه المنطقة تضىء و سيكون التطبيق هكذا :



    و نري هنا ايضا اننا استعملنا self shadowing بمعني ان المجسم يظلل علي نفسه و يمنع الضوء عن نفسه و هذا بأن نجعل ايضا المجسم كReceiver و طبعا كما قلت ان هذا التكنيك مكلف جدا , بما ان التكنيك الأول ضعيف و الثاني مكلف فنتمني ان يتم اختراع اجهزة أفضل تمكنا من فعل كل ما نريد ^_^ .

    Height map :

    حسنا الHeight map هو تكنيك يستخدم لبناء تضاريس معقدة جدا و لكن بسهولة !, حسنا هذا التكنيك يقوم بأستعمال صورة مثل هذه :



    حسنا هذه ليست صورة رادار طيارة, فهذه الصورة تستعمل لبناء تضاريس كاملة (جبال و مرتفعات و منخفضات الخ) حسنا يقوم الكود بعمل الآتي :

    يأخذ كل بكسل في الصورة و يقوم ببناء فيرتكس ثلاثية الأبعاد بحسب لون هذه البكسل فيأخذ ارتفاع هذه الفيرتكس , فكلما كانت البكسل في الصورة أغمق انخفضت الفيرتكس و كلما كانت البكسل في الصورة أفتح كانت الفيرتكس أعلي او العكس , و هذا يوفر لك الكثير من التصميم , و تكون النتيجة هكذا :



    طبعا بعد الاكساء بتكون رهيبة مثل هذه:



    طبعا احنا ما لنا دخل بالمياه ^_^ , و بهذا نكون توغلنا اكثر في عالم الشادرز و عرفنا بعض التأثيرات الأخري , و عرفنا الفكرة العامة لهذه التأُثيرات , و نأمل ان تعم الفائدة و انتظروا الدرس الجديد و لا تنسونا من دعائكم .
    التعديل الأخير تم بواسطة general1; 21 / 08 / 2009, 07:39 PM.
    Egypt


    I Love Direct-X

    سبحان الله و بحمده سبحان الله العظيم
    اللهم صلي وسلم و بارك علي سيدنا محمد

  • #2
    جزاك الله خيراً
    بس الـHeight map هي زي النورمال ماب او الـDisplacement و له حاجة تانية ؟
    ربنا يوفقك
    .
    C. 4d سابقاً

    تعليق


    • #3
      الله عليك يا جينيرال مبدع كالعادة ما شاء الله
      حلمى ان اكون مصمم العاب و3دى ناجح

      ادعووووووووووووولى

      عضو في نادي محبي البطاطا

      تعليق


      • #4
        المشاركة الأصلية بواسطة C. 4d مشاهدة المشاركة
        جزاك الله خيراً
        بس الـHeight map هي زي النورمال ماب او الـDisplacement و له حاجة تانية ؟
        ربنا يوفقك
        شوف النورمال ماب و الDisplacement بيوهموا اللاعب ان هناك تفاصيل اضافية و لكن بيكون تلاعب بالاضواء فقط و لكن الHeight map فبتكون التفاصيل ديه موجود فعلا بالمجسم يعني مش مجرد تلاعب اضواء .و شكرا لمرورك

        الله عليك يا جينيرال مبدع كالعادة ما شاء الله
        و الله هذا من ذوقك بس

        و بالتوفيق للجميع...و اعتقد ان الدرس القادم هيبقي المفاجئة ^_^
        Egypt


        I Love Direct-X

        سبحان الله و بحمده سبحان الله العظيم
        اللهم صلي وسلم و بارك علي سيدنا محمد

        تعليق


        • #5

          يعني كل ده معمول بالنمذجة مش هيبقى ثقيل على اللعبة ؟
          الـDisplacement مش زي النورمال ماب اظن زي الـHeight map .
          .
          C. 4d سابقاً

          تعليق


          • #6
            الحقيقة لا اعرف الكثير عن الDisplacement و لكن الHeight map لأنها تم انشاءها برمجيا بتبقي افضل بكثير لكن لو صممتها هتبقي صعب تتحط في اللعبة يعني بتبقي اخف(جايب المعلومات من الاخ اسامة )
            Egypt


            I Love Direct-X

            سبحان الله و بحمده سبحان الله العظيم
            اللهم صلي وسلم و بارك علي سيدنا محمد

            تعليق


            • #7
              فعلاً من أروع الدروس ..........بإنتظار الدرس رقم 99999 و بعد هيك ممكن توقف ^_^
              و يعطيك العافية

              <<Nobody>> سابقاً

              تعليق


              • #8
                الله عليك مبدع دائما والدرس رهيب وجميل ونادر - بارك الله فيك يا اخى واكثر الله من امثالك - تحياتى لك

                مع تحياتى
                عميد المبرمجين العرب سابقا

                تعليق


                • #9
                  مشكور جداً و الصراحة الدرس لا يمل وفقك الله اخيي جنيرال
                  ................................
                  إذا أردت أن تعصي الله
                  فاختبئ في مكان لا يراك الله فيه ..


                  إذا أردت أن تعصي الله ..
                  فلا تعصه فوق أرضه ..


                  إذا أردت أن تعصي الله ..
                  فلا تأكل من رزقه ..

                  تعليق


                  • #10
                    المشاركة الأصلية بواسطة ahmedbna مشاهدة المشاركة
                    الله عليك مبدع دائما والدرس رهيب وجميل ونادر - بارك الله فيك يا اخى واكثر الله من امثالك - تحياتى لك
                    الله يبارك فيك اخي البنا

                    مشكور جداً و الصراحة الدرس لا يمل وفقك الله اخيي جنيرال
                    العفو حبيبي و شكرا علي المرور

                    و بالتوفيق للجميع...
                    Egypt


                    I Love Direct-X

                    سبحان الله و بحمده سبحان الله العظيم
                    اللهم صلي وسلم و بارك علي سيدنا محمد

                    تعليق


                    • #11
                      موضوع ممتاز ويضفي إحترافية لألعابنا
                      شكرا لك
                      سبحان الله وبحمده * سبحان الله العظيم

                      تعليق

                      يعمل...
                      X