Unconfigured Ad Widget

تقليص

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

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

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

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

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

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

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

    مقدمة :

    نبدأ اول موضوع في خدع و برمجة الألعاب و يتكلم عن الشادرز , و سنعرف ما هى الشادرز, و سنعرف تاريخ الشادرز و كيف بدأت, و بعض التأثيرات و التكنيكات المستعملة

    ما هي الشادرز :

    أحب ان ابدأ بتعريف الشادرز , و الشادرز ببساطة تعتبر لغة تستعملها لعمل تأثير علي المجسمات الثلاثية الأبعاد و يمكن ان تستخدمها علي الصور كما سنري.


    تاريخ الشادرز :

    قبل ان يتم عمل كروت الشاشة التي تعمل بالشادرز كان هناك خط لأظهار المجسمات موحد و هنا ظهرت مشكلة ان الاجسام اصبحت متشابهة لأن المبرمج لا يدخل في عمل اظهار المجسم فيقوم كارت الشاشة بأظهار كل المجسمات بنفس الطريقة و بدأت الألعاب تصبح مملة, و بعدها قامت Microsoft بأنشاء طريقة للتحكم بأظهار المجسمات و هي بأستخدام لغة الأسمبلي و هي لغة جميلة تتيح لنا النزول الي الهاردوير و استعمال المسجلات (Registeries) و لكنها صعبة جدا , لهذا اعادت مايكروسوفت التفكير و قامت بأنشاء مشروع مع Nividia لعمل أول لغة متخصصة في الشادرز و تم تسميتها High level shading language(HLSL) ثم ظهر لأول مرة كارت شاشة يدعم للشادرز 1.1 و كان الكارت Geforce 3 Series و طبعا من انتاج Nivide, و كان هذا من حلم المبرمجين ان يتم عمل مثل هذه اللغة ليقوموا بالتحكم بأظهار المجسمات التي لديهم من دون استعمال لغة صعبة مثل الاسمبلي , ثم توالت الاصدارات في الشادرز وصولا لشادرز 5.0 و لكن لا يتم استعمالها الا قليلا و الان المنتشر هو شادرز 3.0.

    طريقة عمل الشادرز :

    طريقة عمل الشادرز بسيطة يتم ادخال مجسم في خط الاظهار (Rendering) و يقوم هذا الخط بجعل كل فيرتكس في المجسم و بكسل بالدخول لكود الشادرز الذي كتبته لتتم معالجته فمثلا :


    Float4x4 view_proj_matrix;
    Struct VS_OutPut
    {
    Float4 pos:POSITION;
    }


    VS_OUTPUT vs_main(float4 inPos:POSITION)


    {

    VS_OUTPUT out;
    Out.pos = mul(view_proj_matrix,inPos);

    Return out;

    }



    Float4 Ps_Main():COLOR0


    {

    Return Color(1,0,0,1);

    }


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

    Out.pos = mul(view_proj_matrix,inPos);

    و اخيرا الجملة Ps_Main هي تخص كود البكسل فكل بكسل تمر هنا لكي اللون النهائى بعد كل الحسابات , لقد جعلنا الدالة تأخد قيمة اللون 1,0,0,1 و هو اللون الأحمر فكل بكسل ستمر من هنا سيتم تلوينها باللون الأحمر فيظهر المجسم أحمر , و كما قلت هذا أبسط كود يمكن كتابته لأظهار المجسم و هذه النتيجة :



    ملاحظة : الألوان في الشادرز تتكون من RGBA و هو اختصار لـ: اول لون هو الأحمر Red و ثاني لون هو الأخضر Green و ثالث لون هو الأزرق Blue و أخر قيمة هي الAlpha و هي اظهار المجسم فأذا وضعت اقصي قيمة و هي 1 سيتم اظهار المجسم و اذا وضعت قيمة أقل سيكون المجسم شفافا.

    تكنيكان مستعملان في الشادرز :

    هناك تكنيكات مستعملان للشادرز الأول هو استعمال الشادرز كما هي فيمر كل مجسم و يتم عمل التأثير علي المجسم و لكن هناك بعض التأثيرات التي لا يمكن ان تقوم بعملها علي كل المجسمات لعدة أسباب :
    • المجسمات كثيرة و هذا سيؤثر علي أداء الجهاز و ستعاني اللعبة من البطء
    • من الممكن ان يكون المجسمات عادية و لكن التأثير يحمل كثيرا علي الجهاز فخذ في اعتبارك انك لو اضفت الجملة 1 + 1 في كود البكسل فسيتم عمل هذا الحساب في كل مرة يتم رسم بكسل فلو هناك مليون بكسل علي الشاشة سيتم عمل هذه الحسابات مليون مرة !! فما ادراك لو كانت الحسابات أعقد من 1 + 1 !!!!
    • هناك بعض التأثيرات لا يمكن عملها علي كل المجسمات و يجب ان يستعمل التكنيك الاخر الذي سيتم شرحوا
    التكنيك Render to texture :

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




    و هنا يتم عمل التأثير علي الصورة النهائية :




    ارجو ان تكون الصورة وضحت لك.

    خدع الشادرز :

    كل الألعاب العالمية الي تراها تقوم بأستخدام الشادرز لعمل خدع لأظهارالمجسم الذي لديها , و سنقوم في هذا الجزء بشرح هذه الخدع عمليا و من دون كود , أولا خدعة Blur,motion blur, نري اولا صورة لهذه الخدعة :




    اولا هذه الصورة من Need for speed undercover اللعبة الشهيرة و الغنية عن التعريف , نري هنا ان الصورة و كأنها مهزوزة و هذا التأثير تم عمله لكي يجعل اللاعب يحس و كأن السيارة تجري سريعا !! , في هذا التكنيك يتم أخذ صورة قبل الحركة و صورة أخري بعد الحركة (حركة السيارة مع الكاميرا الخ..) و عمل دمج بين ألوان الصورتان فيطلع لك الصورة مشوهة هذا بالنسبة للتكنيك motion blur, و الفرق بين هذا التكنيك و التكنيك blur ان التكنيك الثاني يحصل من دون تحرك فمثلا في لعبة call of duty لو استعملت الsniper اول ما تقوم بالتقريبا يتم عمل blur للصورة و كأن عينك لم تأخذ علي السلاح بعد لأضافة بعض الواقعية للعبة و طبعا يتم عمل هذا التأثير بالتكنيك Render to texture لأن هنا انت تستعمل الصورة السابقة و الصورة الحالية و تقوم بدمجهم و ليس من الواقعي ان تقوم برسم المجسمات مرتين مرة في الصورة السابقة و مرة في الصورة الحالية !!!, سيكون هذا من الجنون لأن كل مجسم لديك سيتم رسموا مرتين و عمل الحسابات مرتين و انت تريد أفضل اداء للجهاز.

    سأكمل في الرد القادم لأن المنتدي لا يسمح بأكثر من 20000 حرف !!
    التعديل الأخير تم بواسطة general1; 12 / 08 / 2009, 05:18 PM.
    Egypt


    I Love Direct-X

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

  • #2
    التكنيك الثاني و هو تكنيك Normal mapping و يقوم هذا التكنيك بأظهار بعض التفاصيل للمجسم و هي أساسا غير موجودة بالمجسم !! و لكن ببعض الأضاءة يوهمك بذلك و هذه بعض الصورة للتأثير:





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




    و هناك عدة برامج متخصصة لعمل مثل هذه الصورة و تقوم بأدخال هذه الصورة للشادر و يقوم ببعض الحسابات المعروفة بوضع تفاصيل علي المجسم ليظهر لك مجسمك و عليه التفاصيل و بالتالي لن يستعمل المبرمج التكنيك render to texture لأنه يريد ان يقوم بوضع التفاصيل لكل بكسل في المجسم و بتطبيق الصورة علي المجسم الذي لدينا يصبح هكذا :




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

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




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




    و بالنسبة للReflect فهو تقريبا نفس التأثير فنقوم بأخذ صورة للمشهد (render to texture )و كأن الكاميرا تنظر للوراء (الاتجاه المعاكس للمجسم)و نقوم بأخذ هذه الصورة و لصقها علي المجسم مع وضع دالة جاهزة تسمي Reflect. و تكون هذه النتيجة النهائية :




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


    I Love Direct-X

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

    تعليق


    • #3
      موضوع رائع اخى جينيرال منتظرين البقية بشوق ^_^
      حلمى ان اكون مصمم العاب و3دى ناجح

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

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

      تعليق


      • #4
        شكراً لك على الموضوع ....و في الواقع كان موضوع الشادرز بالنسبة لي أصعب من برمجة الأسمبلي تخيل !!

        و بإنتظار مواضيعك الباقية

        <<Nobody>> سابقاً

        تعليق


        • #5
          موضوع رائع اخى جينيرال منتظرين البقية بشوق ^_^

          اشكرك اخي و ان شاء الله انتظر الدرس في الاسبوع القادم

          المشاركة الأصلية بواسطة <<nobody>> مشاهدة المشاركة
          شكراً لك على الموضوع ....و في الواقع كان موضوع الشادرز بالنسبة لي أصعب من برمجة الأسمبلي تخيل !!

          و بإنتظار مواضيعك الباقية
          يااااه الاسمبلي !! هوا المشكلة انها محتاجة تخيل و لازم تدرسها كذي مرة عشان تفهمها و تبدع فيها , و انتظرني
          Egypt


          I Love Direct-X

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

          تعليق


          • #6
            الله الله ما شاء اله عليك يا جنرال بجد موضوع رائع جدا ووالله انا استفدت منه وفعلا نوعية هذه المواضيع المميزة والنادرة الشرح كانت تنقصنا فى مجتمعاتنا العربية - استمر فى مجهوداتك يا جنرال وبالتوفيق لك

            صورة من الشيدر بتاعى



            واللى عاوز يشوف مقطع فيديو منه اهو
            http://filaty.com/f/908/98965/shaderwater.rar.html

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

            تعليق


            • #7
              موضوع جميل جداً بارك الله فيك

              ممكن يستخدم Blur,motion blur في الأفلام أيضاً

              مثل الفيلم 6 لهاري بوتر في بدايته تكون المباني مثل هكذا تقنية هل هذا صحيح ؟؟

              تقنياً كيف يمكننا عمل هذه الخاصية في الألعاب بدمج الصور التي تكلمت عنها ؟؟

              احسن الله إليك

              تعليق


              • #8
                موضوع رائع من البداية

                موضوع رائع من البداية يا صديقي وأخي العزيز

                اتمنالك التوفيق والنجاح في اعمالك المميزة أخي

                واصل التقدم نحن معك لأخر المشوار حتى الأحتراف

                الله معك بأذن الله

                تعليق


                • #9
                  السلام عليكم ورحمة الله وبركاته
                  1. هذه الغرفة لتبادل الافكار عن صناعة الالعاب 3d game studio
                  2. يجب ان يكون عندك برنامج Windows Live Messenger
                  3.طريقة الدخول الى الغرفة اضط على add a contact ثم اكتب
                  group357624@groupsim.com
                  ثم next ثم اتظر قليلا ثم close
                  4. الغرفة مفتوحة 24/24 ساعة
                  5. ممنوع الشتم من فضلكم
                  انا اتظركم السلام عليكم

                  تعليق


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


                    و الله اشكرك اخي علي هذا الاطراء و انتظر ان شاء الله الدرس الجديد و علي فكرة الشادر قوي جدا و انا عملت داون لود للفيديو (شادر محترفين) ^_^

                    موضوع جميل جداً بارك الله فيك

                    ممكن يستخدم Blur,motion blur في الأفلام أيضاً

                    مثل الفيلم 6 لهاري بوتر في بدايته تكون المباني مثل هكذا تقنية هل هذا صحيح ؟؟

                    تقنياً كيف يمكننا عمل هذه الخاصية في الألعاب بدمج الصور التي تكلمت عنها ؟؟

                    احسن الله إليك
                    اشكرك علي ملاحظاتك و بالنسبة للشادر فهو يستخدم في الأفلام ايضا كما قلت و لكن في الأفلام لا يأخذ في حساباته اذا كان الشادر معقد او هناك موديلز كثيرة لأنه سيقوم بعمل أظهار للمجسمات كلها من دون ان يكون هناك runTime فمثلا سيقوم بعمل جميع الحسابات في 70 ساعة ثم سيسجلها و يحفظها في ملف لن تؤثر في المستخدم فيما بعد

                    تقنيا فبأستخدام الشادرز يمكنك فعل هذا , لذلك اذا كنت تريد فعل هذا يمكنك ان تتعلم لغة الشادرز HLSL


                    موضوع رائع من البداية يا صديقي وأخي العزيز

                    اتمنالك التوفيق والنجاح في اعمالك المميزة أخي

                    واصل التقدم نحن معك لأخر المشوار حتى الأحتراف

                    الله معك بأذن الله
                    اشكرك اخي و ان شاء الله انتظروا الموضوع القادم
                    Egypt


                    I Love Direct-X

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

                    تعليق


                    • #11
                      أخ جنرال ممكن درس عن طريق عمل Blur,motion blur لأنها عجبتني ^^

                      ممكن عمل هذه الخاصية من غير لغة برمجة

                      يعني في الماكس والافتر إفكت فقط أم لا ؟؟ "أم يجب لغة برمجية"



                      والكود أعلاه باي لغة ؟؟

                      هل هو #C ؟؟؟

                      تعليق


                      • #12
                        مذهل للغاية هذا الموضوع
                        القوانين وضعت لكي تخرق

                        تعليق


                        • #13
                          بالنسبة للأخ اللذى يسأل بأى لغة صنع الكود - بعد اذن الجنرال - هذه اللغة تسمى لغة HLSL وهى التتى تستخدم لصنع الشيدر
                          واليك عينة اخرى من كود اخر لتتفحصة

                          matrix ViewProj;//by bna
                          vector Color;//By bna
                          vector BColor={1.0f,1.0f,0.0f,1.0f};
                          struct Input
                          {
                          vector Pos:POSITION;
                          };
                          struct Output
                          {
                          vector Pos:POSITION;
                          vector Color:COLOR;
                          };

                          Output Main(Input input)
                          {
                          Output output=(Output)0;
                          output.Pos=mul(input.Pos,ViewProj);
                          output.Color=BColor*Color;
                          return output;
                          }

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

                          تعليق


                          • #14
                            بارك الله فيك يا أحمد

                            حتى Blur,motion blur تصنع من لغة HLSL

                            تعليق


                            • #15
                              المشاركة الأصلية بواسطة kakarot مشاهدة المشاركة
                              بارك الله فيك يا أحمد

                              حتى blur,motion blur تصنع من لغة hlsl
                              طبعا كما رد عليك الاخ احمد البنا فبكود hlsl يمكنك عمل هذه التأثيرات و كل التأثيرات التي في الالعاب يتم عملها بهذه اللغة hlsl : High level shading language

                              ممكن عمل هذه الخاصية من غير لغة برمجة

                              يعني في الماكس والافتر إفكت فقط أم لا ؟؟ "أم يجب لغة برمجية"
                              بالنسبة للماكس فالصراحة لا اعرف هل يمكنه عمل هذه الخاصية ام لا و لكن بالنسبة لافتر افكت به هذه الخاصية

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

                              مذهل للغاية هذا الموضوع
                              شكرا اخي علي مرورك و الرد و بالتوفيق للجميع...
                              Egypt


                              I Love Direct-X

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

                              تعليق

                              يعمل...
                              X