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

خبير  أحمد عزالدين مشاركة 1

السلام عليكم

لقد قابلني هذا الموضوع Projective Decals
اثناء تطبيقي لاحد دروس المحرك اوجر Ogre وبصراحة لم افهم بشكل كامل هذا الموضوع
لكن ما فهمته انه يستخدام projector وايضا يستخدام Frustum
كنت اود ان اعرف ما علاقة ال Frustum بهذا الموضوع

يعني  لقد فهمت ايضا ان تطبيقات هذا الموضوع تتلخص في مزج صورة بطريقة مؤقتة او مستمرة لاي جسم لاضفاء تأثير معين عليه
مثل اضافة اثار رصاص علي حائط مثلا
لكن الا يشبه هذا تمام عملية ال multi-texturing  اخذين في الاعتبار انه حتي في المقالة التي تشرح هذا الموضوع وعند بناء frustum جديد
تم بناء new render pass ليقوم بمزج ال texture الذي يمثل صورة التأثير علي ال current object material

اذن ما الفرق بين ال projective decal وبين ال multi-texture العادي
ولماذا نحتاج لل frustum لتنفيذ هذا الموضوع
وايضا تم ذكر انه نحتاج لاضافة filter frustum لالغاء الشكل الخلفي الذي ينتج عند استخدام هذا الموضوع دون تعديل ال decal texture بالطريقة المناسبة

اعتذر عن عدم وضوح سؤالي - لكن هذا حسب ما فهمت
يمكنكم ان تجدوا المقالة وبها صورة توضح المقصود من ال decal
http://www.ogre3d.org/wiki/index.php/Intermediate_Tutorial_6
وهناك ايضا ستجدوا الكود الخاص بتطبيق هذا الموضوع

جزاكم الله خيرا ونراكم قريبا

أحمد عزالدين
طالب دراسات عليا
جامعة كالجري

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

وعليكم السلام أحمد،

سؤال جيد. اللصاقات (ديكال بالإنجليزية) هي صور يتم لصقها على سطوح المجسمات في المشهد. من أشهر الأمثلة والتطبيقات على اللصاقات هي آثار الرصاص على الجدران. الصورة أدناه توضح ذلك (أعتذر على رداءة الجودة، لكن المهم الفكرة ☺ ):

 

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

هناك عدة طرق لرسم اللصاقات في المشاهد الفورية، تتباين في أدائها وتوفيرها للذاكرة. الطريقة الأكثر منطقية هي أن ترسم مضلعاً صغيراً مكسياً بصورة اللصاقة وتضعه على السطح المرغوب. هذه الطريقة تتعقد عندما يكون السطح المرغوب غير مستوي (مثلاً جدار محطم)، كما أنها تعاني من مشكلة الـ z-fighting.

الطريقة الأخرى هي الإكساء الإسقاطي (projective texturing) وتنص ببساطة على إعادة رسم كامل السطح لكن بإحداثيات إكساء خاصة تقوم بإظهار اللصاقة في المكان المطلوب (هذه هي الطريقة المستخدمة في مثال أوجر الذي أرسلته). عيوب هذه الطريقة هي أنها مكلفة جداً وتتسبب ببعض الأعراض الجانبية التي يجب مكافحتها كي تظهر النتيجة كما يجب. أحد هذه الأعراض هي مشكلة ظهور اللصاقة على الجهة الخلفية للسطح إضافة إلى الجهة الأمامية الصحيحة. هذا خطأ ناتج عن طريقة تنفيذ الحسابات نفسها، وهناك عدة طرق لحلها، الطريقة المتبعة في أوجر غير واضحة طبعاً من المثال، لكن من خلال طريقة إعدادها فإني أعتقد أنها تماثل ما فعلتـُه في لعبة SSX Blur لعلاج نفس المشكلة مع الظلال الإسقاطية (projective shadows). ببساطة تستطيع إعداد وحدة الإكساء المتعدد (multi-texturing unit) لتقوم بحساب معادلة نقطة بالنسبة لمستوي فراغي، ومن ثم استخدام النتيجة لقص البكسلات المرسومة. المستوي ممكن أن يكون مستوي القص البعيد (far clipping plane)، وعندما يقع البكسل خلفه، فإنه يمنع من الرسم.

عموماً أنا أفضل الابتعاد عن هذا الأسلوب إن أمكن، فهو فعلاً غير اقتصادي. الطريقة الأولى برأيي الشخصي أفضل وأكثر منطقية، ويمكن التغلب على عيوبها ببساطة. وقد استخدمتها شخصياً في قريش لرسم جميع ظلال الشخصيات إضافة إلى دوائر التحديد، وبصراحة لم يكن أداؤها سيئاً على الإطلاق.

هناك مقالة في Game Programming Gems 2 عن هذا الموضوع، مرفقة مع كود تستطيع استخدامه بسهولة لحساب اللصاقات على السطوح المتعرجة. المقالة تدعى
Applying Decals to Arbitrary Surfaces
للكاتب Eric Lengyel على ما أعتقد.

أما في 13 مارس 2009 09:43 ص، فقد تنهد ahmed ezz بارتياح وهو يرد:

الا يشبه هذا تمام عملية ال multi-texturing  اخذين في الاعتبار انه حتي في المقالة التي تشرح هذا الموضوع وعند بناء frustum جديدتم بناء new render pass ليقوم بمزج ال texture الذي يمثل صورة التأثير علي ال current object materialاذن ما الفرق بين ال projective decal وبين ال multi-texture العادي

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

في 13 مارس 2009 09:43 ص، غمغم ahmed ezz باستغراب قائلاً:

ولماذا نحتاج لل frustum لتنفيذ هذا الموضوع

هرم الإسقاط (projection frustum) هذا هو ما يحدد توضع اللصاقة على السطح. أنت بحاجة لاتجاه تطلق فيه اللصاقة كي تقع على سطح، كما أنك تحتاج لأن تحدد أبعادها عند نقطة الارتطام. هرم الإسقاط هو طريقة مناسبة جداً لتحديد هذه المعلومات. كما أننا معتادون على التعامل مع هذا الهرم الناقص في عمليات الكاميرا. تخيل اللصاقة وكأنها أشعة تنطلق من كاميرا لتسقط على سطوح الأجسام. 😄

أرجو أن تكون قد وضحت لك الصورة، ولا تتردد بالسؤال إن كان هناك شيء ما غامض في الموضوع.

سلام

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

مفصول عمر سمير  مشاركة 3

شئ رائع حقاً 

ارجو  ان لا يكون وجودي هنا قد أزعجكم 

فأنا (أعوذ بالله من كلمة أنا ) والكمال لله وحده   , معجب حقاً  بهكذا انتاج بسيط 

لأنني  سوف  أساعدكم  في الموضوع 

يوجد برنامج شهير ورائع جداً يضيف أشياء حقيقية  مطابقة للواقع  لكي ندمجها في المشروع  الذي يتكلم  وسام وأحمد

وهو  عملاق المؤثرات الخيالية والسينمائية particleIllusion 3.0

وهو الوحيد في العالم الذي ينتج اشياء خيالية انت بنفسك سوف تتحكم فيه لليعطيك  النتيجة فعالة 100%  وحقيقية مطابقة للواقع

مستعمل من قبل لعبة المعروفة  Crysis WarHead    ولعبة  Call of Duty 4

وانا شخصياً استخدمه لسهولة استعمله وانتاجه الرائع 

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

سوف يساعدك في كثير من الأشياء الذي تتخيلها  وتنتجها في العابك  وافلامك  ايضاً

هذا هو الموقع 
http://www.wondertouch.com

OSF متخصص محترف

خبير  أحمد عبد الغني مشاركة 4

في 18/ربيع الأول/1430 04:20 ص، قال عمر بهدوء وتؤدة:

عملاق المؤثرات الخيالية والسينمائية particleIllusion 3.0

ما تتحدث عنه أخي عمر هو رسم الجزيئات. بينما السؤال عن اللصاقات (شكراً وسام للمصطلح!) 😄
التقنيتان مختلفتان تماماً

اللهم انصر أهلنا في فلسطين وآجرنا أن نكون عوناً لهم