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

ردود: 11 | زيارات: 2568
  1. #1
    مشرف منبر Games Design
    صور رمزية general1
    تاريخ التسجيل
    Jun 2007
    ردود
    1,066

    أسرار و خدع برمجية 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. #2
    جزاك الله خيراً
    بس الـHeight map هي زي النورمال ماب او الـDisplacement و له حاجة تانية ؟
    ربنا يوفقك
    .
    C. 4d سابقاً

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

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

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

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

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

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


    I Love Direct-X

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

  5. #5

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

  6. #6
    مشرف منبر Games Design
    صور رمزية general1
    تاريخ التسجيل
    Jun 2007
    ردود
    1,066
    الحقيقة لا اعرف الكثير عن الDisplacement و لكن الHeight map لأنها تم انشاءها برمجيا بتبقي افضل بكثير لكن لو صممتها هتبقي صعب تتحط في اللعبة يعني بتبقي اخف(جايب المعلومات من الاخ اسامة )
    Egypt


    I Love Direct-X

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

  7. #7
    عضو متميز
    صور رمزية The MAS
    تاريخ التسجيل
    Apr 2009
    المنطقة
    Amman, Jordan, Jordan
    العمر
    24
    ردود
    2,132
    فعلاً من أروع الدروس ..........بإنتظار الدرس رقم 99999 و بعد هيك ممكن توقف ^_^
    و يعطيك العافية

    <<Nobody>> سابقاً

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

  9. #9
    عضو
    صور رمزية A.H.M
    تاريخ التسجيل
    Jun 2008
    المنطقة
    الاردن-ابو نصير
    العمر
    24
    ردود
    104
    مشكور جداً و الصراحة الدرس لا يمل وفقك الله اخيي جنيرال
    ................................
    إذا أردت أن تعصي الله
    فاختبئ في مكان لا يراك الله فيه ..


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


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


  10. #10
    مشرف منبر Games Design
    صور رمزية general1
    تاريخ التسجيل
    Jun 2007
    ردود
    1,066
    اقتباس الموضوع الأصلي كتب بواسطة ahmedbna معاينة الرد
    الله عليك مبدع دائما والدرس رهيب وجميل ونادر - بارك الله فيك يا اخى واكثر الله من امثالك - تحياتى لك
    الله يبارك فيك اخي البنا

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

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


    I Love Direct-X

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

  11. #11
    عضو
    صور رمزية LordShadow
    تاريخ التسجيل
    Aug 2009
    المنطقة
    الجزائر
    ردود
    116
    موضوع ممتاز ويضفي إحترافية لألعابنا
    شكرا لك

Bookmarks

قوانين الموضوعات

  • لا يمكنك اضافة موضوع جديد
  • لا يمكنك اضافة ردود
  • لا يمكنك اضافة مرفقات
  • لا يمكنك تعديل مشاركاتك
  •  
  • كود BB مفعّل
  • رموز الحالة مفعّل
  • كود [IMG] مفعّل
  • [VIDEO] code is مفعّل
  • كود HTML معطل