بسم الله الرحمن الرحيم
قررت بعد مداولة و تفحيص و دراسة و اشياء كثيرة ملهاش لزمة وضع دورة بها أسرار و خدع برمجية هيا الحقيقة مش أسرار و لكن في وطننا العربي المعلومات البرمجية كالأسرار و متقدرش تطلع المعلومة غير لما تكون محترف الانجليزية فلذلك سأقوم بوضع هذه الدورة و هذه الدورة ليست للغة برمجة معينة و انما نناقش طرق برمجية نظريا يمكنك تطبيقها بأى برنامج تحترفه , و سنبدأ بأول درس ,كما قلت هدف الدورة ليس تعلم لغة برمجة او برنامج و انما تعلم معلومات نظرية عن الطرق و التكنيكات المستخدة في الألعاب:
مقدمة :
نبدأ اول موضوع في خدع و برمجة الألعاب و يتكلم عن الشادرز , و سنعرف ما هى الشادرز, و سنعرف تاريخ الشادرز و كيف بدأت, و بعض التأثيرات و التكنيكات المستعملة
ما هي الشادرز :
أحب ان ابدأ بتعريف الشادرز , و الشادرز ببساطة تعتبر لغة تستعملها لعمل تأثير علي المجسمات الثلاثية الأبعاد و يمكن ان تستخدمها علي الصور كما سنري.
تاريخ الشادرز :
قبل ان يتم عمل كروت الشاشة التي تعمل بالشادرز كان هناك خط لأظهار المجسمات موحد و هنا ظهرت مشكلة ان الاجسام اصبحت متشابهة لأن المبرمج لا يدخل في عمل اظهار المجسم فيقوم كارت الشاشة بأظهار كل المجسمات بنفس الطريقة و بدأت الألعاب تصبح مملة, و بعدها قامت 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;
}
Struct VS_OutPut
{
Float4 pos:POSITION;
}
VS_OUTPUT vs_main(float4 inPos:POSITION)
{
VS_OUTPUT out;
Out.pos = mul(view_proj_matrix,inPos);
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) عادي من دون اى شادر و لا حسابات, و بعدها يتم وضع الصورة النهائية و عمل الشادرز و الحسابات علي الصورة و هذا مثال بسيط :
الصورة النهائية قبل وضع التأثير :
و هنا يتم عمل التأثير علي الصورة النهائية :
ارجو ان تكون الصورة وضحت لك.
خدع الشادرز :
كل الألعاب العالمية الي تراها تقوم بأستخدام الشادرز لعمل خدع لأظهارالمجسم الذي لديها , و سنقوم في هذا الجزء بشرح هذه الخدع عمليا و من دون كود , أولا خدعة Blur,motion blur, نري اولا صورة لهذه الخدعة :
اولا هذه الصورة من Need for speed undercover اللعبة الشهيرة و الغنية عن التعريف , نري هنا ان الصورة و كأنها مهزوزة و هذا التأثير تم عمله لكي يجعل اللاعب يحس و كأن السيارة تجري سريعا !! , في هذا التكنيك يتم أخذ صورة قبل الحركة و صورة أخري بعد الحركة (حركة السيارة مع الكاميرا الخ..) و عمل دمج بين ألوان الصورتان فيطلع لك الصورة مشوهة هذا بالنسبة للتكنيك motion blur, و الفرق بين هذا التكنيك و التكنيك blur ان التكنيك الثاني يحصل من دون تحرك فمثلا في لعبة call of duty لو استعملت الsniper اول ما تقوم بالتقريبا يتم عمل blur للصورة و كأن عينك لم تأخذ علي السلاح بعد لأضافة بعض الواقعية للعبة و طبعا يتم عمل هذا التأثير بالتكنيك Render to texture لأن هنا انت تستعمل الصورة السابقة و الصورة الحالية و تقوم بدمجهم و ليس من الواقعي ان تقوم برسم المجسمات مرتين مرة في الصورة السابقة و مرة في الصورة الحالية !!!, سيكون هذا من الجنون لأن كل مجسم لديك سيتم رسموا مرتين و عمل الحسابات مرتين و انت تريد أفضل اداء للجهاز.
سأكمل في الرد القادم لأن المنتدي لا يسمح بأكثر من 20000 حرف !!
تعليق