تاثير ظهور الكائنات خلف الجدران في محرك Unity

unity

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

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

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

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

فكرة العمل:

بداية من تحليل التأثير نفسه فيمكنك استنتاج أن هناك حالتين أساسيتين للشخصية من حيث المكان بالنسبة للكاميرا، وهما حالة ظهور الشخصية بدون حوائل بينهما، وحالة وجود حائل يمنع الكاميرا من مشاهدة اللاعب بشكل مباشر.

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

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

خاصية البُعد هنا ستعبر عن بعد المجسم عن الكاميرا في المشهد، فعندما اصطدم الشعاع بالكرة, كانت قيمة بُعد المشهد تساوي 0.3، ومع اكتمال مسار الشعاع سيصطدم أيضا بالمربع، حيث قيمة بُعد المشهد حينها تساوي 0.5 .

كيف يمكنك الاستفادة من هذا البُعد في هذا التاثير؟ ببساطة عن طريق حساب بُعد كل بكسل على مجسم الشخصية.

عندئذ في حالة كون قيمة بعد أي بكسل على الشخصية أكبر من بُعد أي مجسم آخر، فسيتم تطبيق ماتيريال مخصصة على هذا البكسل، لتستطيع تمييزه أنه وراء حائل ما.

تجهيز المشروع:

ستبدأ اولا بتجهيز المشروع بتغيير نظام الرسومات فيه, لتصبح قادرا على استعمال محرر الشيدر.

من خلال قائمة Window >> Package Manager >> Universal RP ثم تقوم بتثبيته في مشروعك.

ستقوم بعدها بعمل URP Asset، وهو عبارة عن ملف للتحكم باعدادات نظام الرسومات الجديد، ويمكنك إيجاده من خلال قائمة Rendering في نافذة المشروع ثم اختيار URP Asset with Universal Renderer ، ثم تأكد من تفعيل الـ Depth Texture والـ Opaque Texture والـ HDR فيه.

بعد هذا ستقوم بتطبيق المعالجة النهائية – Post Process, عن طريق الذهاب الى نافذة الـ Hierarchy, واضافة Global Volume من خلال قائمة Volume, ومن نافذة المشروع ستقوم بعمل Volume Profile.

بعد هذا ستقوم بإضافة تاثير الوهج – Bloom, والـ Vignette, الى الـ Volume Profile.
ويمكنك اضافة اي تاثير اخر تريده.
ثم ستقوم بتفعيل الـ Post Process في الكاميرا.

إنشاء خاصية الإظهار الجديدة:

خاصية الاظهار هي عبارة عن أوامر تقوم بوضعها في ملف الرسوميات التي قمت بانشائه منذ قليل، ووظيفة هذه الأوامر هي اضافة خواص جديده لكيفية ظهور عناصر معينة في عالم اللعبة.

ولإضافة هذه الخاصية عليك الذهاب اولا الى ملف الاعدادات، الذي ستجده بنفس الاسم الذي قمت بوضعه متبوعا بـ _Renderer.

بعد تحديده ستقوم بالضغط علي Add Renderer Feature، ثم اختيار Render Objects، ويمكنك بعد ذلك تسمية هذه الخاصية كيفما تريد.

بعد انشائها ستقوم بتغيير خانة الطبقة – Layer Mask – التي تعبر عن الطبقة التي سيتم تطبيق التأثير عليها – إلى الطبقة التي تضمن اللاعب، او بشكل عام اي عنصر تريده ان يكون ظاهرا طوال الوقت.

ويمكنك بسهولة إنشاء طبقة جديدة عن طريق تحديد اي مجسم، ثم من خانة الطبقة – Layer يمكنك اختيار إضافة طبقة – Add Layer، وبعدها يمكنك كتابة اسم الطبقة الجديدة في اي خانة فارغة.

من ثم ستقوم بتفعيل العمق – Depth وبعدها في اختبار العمق – Depth Test ستقوم بتحديد الشرط الذي ستتفعل من خلاله هذه الخاصية.

وكما تم ذكره مسبقا في فكرة العمل، فنحن نريد أن تظهر الشخصية بالشكل المميز فقط في حالة كونها وراء حائل، أي أن بُعدها أكبر من بُعد هذا الحائل، لذا ستكون قيمة اختبار العمق “أكبر من – Greater”.

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

اضافة مظهر خاص خلف الجدران:

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

وذلك من خلال قائمة Create ثم :
Shader Graph >> URP >> Unlit Shader Graph
مع جعل نوعه شفاف Transparent.

بعد ذلك ستستخدم عقدة النمط النقطي – Dither، التي تقوم بتوفير هذا النوع من الانماط، وجعل قيمتها 0.5، ومن ثم إنشاء متغيرين، احدهما من نوع اللون – Color مع جعل نوعه HDR، والآخر من نوع الرقم العشري – Float، ليعبر عن تكرار النسيج الذي ستستعمله، وتحديد قيمته الافتراضية الي 1.

من ثم ستقوم بإنشاء عقدة التكرار والإزاحة Tiling and Offset وتوصيلها بعقدة النمط النقطي – Dither، ولا تنس توصيل متغير  التكرار في مدخل التكرار.

والآن ستقوم بضرب عقدة النمط النقطي  – Dither مع اللون الذي أنشأته، ومن ثم توصيلهما في مخرج اللون الأساسي – Base Color.

لكن بعد ذلك إذا قمت بتطبيقه على مجسم مختلف، وقمت بتغيير اللون و جعل قيمة متغير التكرار لشيء مثل 0.02، ستلاحظ ان شكله يبدو سيئا ومشوه، وهذا يرجع لان صورة، هذا النسيج يتم تطبيقها علي الـ UV الخاصه بالمجسم نفسه، والتي تكون متغيرة من جسم لآخر.

 ولتفادي هذا التشوه ستحتاج لإستعمال الـ UV الخاصة بالشاشة نفسها، وسيكون هذا عن طريقه عقدة موقع الشاشة – Screen Position، التي تقوم بتحديد موقع كل بكسل على الشاشة نفسها، وبعدها تقوم بتوصيلها في مدخل الـ UV في عقدة التكرار والازاحة.

ستلاحظ بعد ذلك أن المشكلة قد حلت تقريبا، لكن هناك مشكله اخري وهو انه كلما ابتعدت عن المجسم، فإن مقدار التكرار يتغير، وهذا يرجع لان المجسم كلما ابتعدت عنه فانه يشغل حيزا أقل من الشاشه.

حل هذا سيكون عن طريق ضرب قيمة المسافة بين المجسم والكاميرا بقيمة التكرار، ولحساب المسافة ستحتاج عقدة المسافة – Distance، وتقوم بتوصيل عقدة المجسم – Object وعقدة الكاميرا كما هو موضح.
وما حصل هنا انه تم حساب المسافة بين موقع مركز المجسم، نفسه وبين موقع الكاميرا.

من ثم تقوم بضرب عقدة المسافة بعقدة التكرار، قبل توصيلها في مدخل التكرار في عقدة التكرار والازاحة.

إصلاح مشكلة ظهور المجسم خلف نفسه:

ولكن بعد ذلك ستلاحظ وجود مشكلة مجددا وهي أن المجسم يظهر وراء نفسه، عندما لا تنظر إليه من وراء أي حائل.

وحلها بسيط جدا، عن طريق اضافة خاصية اظهار جديده، مع جعل خانة الطبقة – Layer Mask بنفس طبقة المجسم نفسه.


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

1 1 vote
Article Rating
Subscribe
نبّهني عن
guest

0 تعليقات
Inline Feedbacks
View all comments