الشبكة العربية لمطوري الألعاب

موهوب  16mofed84 مشاركة 1

السلام عليكم


(هذا الموضوع ليس لطلب فكرة انما لعرض فكره و لكي تستفيدوا منها و شكرا😋 )


العبره :

من مزايا الاجهزة القديمه انها تمنح المبرمج افضل اداء (كيف ؟؟؟) ان كنت لا تصدق فأكمل القراءه

نأخذ مثال:

مبرمج لديه جهاز حديث فانه عندما يبرمج لا يأخذ بعين الاعتبار (او قد لا ينتبه)الى الاداء الضعيف لان جهازه سريع😄

___

مبرمج لديه جهاز قديم(او مثل الموجود عند معظم الناس) فانه عندما يبرمج ينتبه على جميع الاخطاء و يراعيها و يحصل على اداء افضل

و من هنا فهذا سلاح ذو حدين حيث يمكن ان لا تصل الى مستوى الغرافيكس الذي تبحث عنه 🙁

..


المهم الان:

حالتي هي في كرت شاشة قديم (نوعا ما)  و بعد ان فكرت ..و فكرت و فكرت

و جدت ان الطريقه الاسرع لعمل الBlur هي في هذا الملف

فما رأيكم ؟!😋

خبير مدير وسام البهنسي مشاركة 2

بتاريخ 25/شعبان/1433 09:36 ص، قطب 16mofed84 حاجبيه بشدة وهو يقول:

حالتي هي في كرت شاشة قديم (نوعا ما)  و بعد ان فكرت ..و فكرت و فكرت

و جدت ان الطريقه الاسرع لعمل الBlur هي في هذا الملف

فما رأيكم ؟!😋

في الملف طريقتين:
 
الأولى (الغباشة بالاستنساخ Instanced Blur) وهي قائمة على رسم عدة مستطيلات على ملء الشاشة تقوم "بإضافة" محتويات الصورة الأصلية على سطح رسم عدد من المرات، وفي كل مرة يتم إزاحة المستطيل إلى أحد الجوانب أو الزوايا بمقدار ضئيل بحجم دائرة الغباشة.
 
الثانية (الغباشة عن طريق المظلل Shader Blur) وتقوم برسم مستطيل واحد على كامل الشاشة ينفذ مظللاً يقوم بمعاينة محتويات الصورة الأصلية عدد من المرات مع إجراء نفس الإزاحات في الحالة الأولى وتكديس النتيجة في متغير واحد وأخذ المعدل كنتيجة نهائية.
 
لمعرفة أيهما أسرع، يجب أن نعرف حقيقة مهمة عن معالجات الرسوميات المستخدمة في الحاسب الشخصي، وهي أن كلفة دمج ألفا (alpha blending) كبيرة جداً وتكاد تقارب الضعف. أي رسم مستطيل مع دمج ألفا يستهلك ضعف الوقت عن رسمه بدون دمج ألفا.
 
الطريقة الأولى ترسم عدداً من المستطيلات فوق بعضها البعض وتكدس النتائج على سطح الرسم باستخدام دمج ألفا، بينما الطريقة الثانية لا ترسم سوى مستطيلاً واحداً ولا تحتاج لدمج ألفا أبداً. هكذا، نجد أن الطريقة الأولى أبطأ بكثير من الثانية.
 
تعقيباً على الطريقة الأولى أيضاً، لا فائدة من استخدام الاستنساخ هنا. فكل ما يتم استنساخه هو مستطيل ولعدد صغير من المرات (لا يتجاوز العشرين)، كما أنه لا يتحرك أو يتغير البتة. الأسهل والأفضل رصف رؤوس المستطيلات وراء بعضها البعض في مخزن رؤوس واحد ورسمها بضربة واحدة دون استخدام الاستنساخ.
على كل حال، لا يوجد الكثير من الأداء الذي يمكن تحصيله من معالجة رؤوس مستطيل بسيط على كامل الشاشة. فكل مستطيل له أربع رؤوس أو ستة إن كانت غير مشتركة، اضربها مثلاً بعشرين مستطيل يصبح لدينا 120 رأس في اللقطة... هذا لا شيء مقابل قدرة المعالج على معالجة مئات الآلاف وربما الملايين من الرؤوس في لقطة واحدة بتردد 60 لقطة في الثانية.
 
هناك أساليب عدة لتحسين أداء تأثير الغباشة مع الحصول على مقدار غباشة أكبر، ولعل السيد ماساكي كاواسي (Masaki Kawase) كان أحد الرواد الذين نشروا أعمالهم في هذا المجال. فقد حقق تأثير غباشة بدائرة كبيرة جداً وبأداء سريع للغاية على الأجهزة القديمة مثل إكس بوكس الأول وبطاقات دايركت ثري دي 8. أنصح بالاطلاع على محاضرته في GDC 2003، فأساليبه ما زالت مستخدمة حتى الآن...

وسام البهنسي
مبرمج في إنفيديا وإنفريمز

موهوب  16mofed84 مشاركة 3

على فكره ..على الجهاز عندي كان الاستنساخ اسرع..
و لكن نأخذ بعين الاعتبار يمكنك زياده الحجم الغباشه الى 9x9 او اكثر (مثلاً)
فعنده يظهر ان الاستنساخ اسرع(والله اعلم)

اما سيئات الshader لا يمكنك ان تصل الى هذا العدد (لانه لا يسمح ب أكثر من 64 متغير)

على ما اعتقد انه الدمج الالفا لا يأخذ الكثير من السرعه لانه مجرد اضافه الوان مثل (1+1) هههه او شيء من هذا القبيل

خبير مدير وسام البهنسي مشاركة 4

في 26/شعبان/1433 01:38 ص، قال 16mofed84 بهدوء وتؤدة:

اما سيئات الshader لا يمكنك ان تصل الى هذا العدد (لانه لا يسمح ب أكثر من 64 متغير)

هذه المعلومة غير دقيقة. عدد المتغيرات مفتوح في أي مظلل. أعتقد أنك تعني عدد السجلات (registers)، والذي -بدوره- يختلف من جيل مظللات إلى آخر. في الجيل الثالث لدينا 32 سجل لحفظ الأعداد بشكل مؤقت بعرض عدد رباعي عشري (من نوع float4، المجموع 32*4=128 عدد عشري)، إضافة إلى 224 سجل لحفظ الثوابت. لكن على كل حال، مظلل الغباشة لا يحتاج لأكثر من سجل واحد فقط لإتمام الحسابات، فأنت تقوم بمعاينة الصورة الأصلية للحصول على القيمة اللونية ومن ثم تكديسها في متغير واحد كما هو موضح في كود المظلل الذي أرسلته في مشاركتك الأولى.



في 26/شعبان/1433 01:38 ص، عقد 16mofed84 حاجبيه بتفكير وقال:

على ما اعتقد انه الدمج الالفا لا يأخذ الكثير من السرعه لانه مجرد اضافه الوان مثل (1+1) هههه او شيء من هذا القبيل

صحيح أن الحسبة غير معقدة (المعادلة الكاملة أعقد من مجرد جمع في الواقع)، لكن العقبة التي تسبب بطء الأداء ليست في الحسبة، وإنما في الوصول للذاكرة. بدون دمج ألفا أنت فقط تحتاج لكتابة القيمة الجديدة في سطح الرسم، أما مع دمج ألفا فعليك أولاً قراءة القيمة السابقة في سطح الرسم قبل كتابة القيمة الجديدة محلها. هذه العملية غالباً تضاعف زمن العملية ككل إذ أنها يجب أن تتم بالتسلسل.

وسام البهنسي
مبرمج في إنفيديا وإنفريمز