كيفية عمل تاثير الثلج المتساقط في محرك unity

unityمحركات

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

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

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

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

من قائمة 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 في الكاميرا.

المصادر التي سيتم استخدامها

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

فكرة عمل الشيدر

تعلم بالتأكيد ان الثلج يتساقط من السماء, أي أنه دائما يتساقط من اعلي, مما يعني انه عندما يستقر علي اي جسم سيكون طبقة الثلج دائما في أعلى الجسم.

ولهذا باستخدام ناظم السطح “Normal” الخاصة بالمجسم, يمكننا تحديد دائما اتجاه النقاط التي تقع في الجانب العلوي من المجسم, وفي حالة أنك لا تعرف ناظم السطح, فهي عبارة عن اتجاه كل نقطه, ضلع, أو وجه في المجسم ثلاثي الأبعاد.

ويستحسن ألا تقوم بتغيير اتجاهها بنفسك, الا في حالة انك تعرف فعلا مالذي تفعله, لأن أحد وظائفها ايضا هو التحكم بكيفية تفاعل الضوء مع المجسم, لذا عند التغيير في اتجاهها سيسبب بظهور أنماط اضائه غير مرغوبة على المجسم.

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

فاذا افترضنا ان الاسهم الخضراء تعبر عن ناظم السطح, والأحمر يمثل المتجه الذي قمت بتعيينه, ستجد ان السهم رقم 1 في اتجاه متعامد معه; لذا فإن حاصل الضرب الاتجاهي سيكون 0 أي بقيمة اللون الأسود.

أما في حالة السهم رقم 3 فإن اتجاهه يوازي السهم الأحمر, وايضا في نفس اتجاهه, لذا في هذه الحالة ستكون محصلة الضرب الاتجاهي 1 أي بقيمة اللون الأبيض.

وفي حالة السهم 2 فهو ليس متعامد وليس موازي, لذا في هذه الحالة ستكون محصلة الضرب الاتجاهي بقيمة بين الـ 0 والـ 1, وهذا الامر ينطبق مع كل ناظم سطح في الوسط.

أما في السهم رقم 4 فإنه يوازي السهم الأحمر; لذا قد تعتقد أن قيمته يفترض أن تكون 1, لكنها في الحقيقة ليست 0 او 1 بل هي -1 لانه يوازيه بالفعل, لكنه بعكس الاتجاه, فهذا يعني ان قيمته ستكون سالبه.

ولكن كونه أقل من الصفر فلا يوجد لون محدد يعبر عنه غير الأسود, وهذا الأمر ينطبق مع كل ناظم سطح اسفل السهم 1, فجميعها بقيم سالبه بين الـ 0 والـ -1.

ستستفيد من هذا بأن تجعل هذا التدرج كقناع “Mask” للخامات, حيث الابيض دائما سيبقى بالاعلي; لذا يمكن جعله يعبر عن الثلج, أما في الاسفل ستبقى قيمته دائما أقل; لذا سنستعمله ليعبر عن الخامة التي سيتساقط عليها الثلج, وفي هذه الحالة هي الصخر.

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

بداية العمل

في هذا المثال يمكنك اختيار أي نوع شيدر يناسبك, وفي حالتي ساختار الـ Lit. ومن خلال قائمة Shader Graph ثم قائمة URP يمكنك الاختيار منها ما يناسبك. بعد ذلك ستقوم بفتح المحرر لتبدأ بالعمل على الشيدر.

في البداية ستحتاج أن تحصل على اتجاه ناظم السطح في المجسم, وهذا من خلال عقدة Normal Vector, وتأكد من تحديد الـ Space الي World. وبعد ذلك ستحتاج ان تقوم بعمل متجه ثلاثي “Vector 3” يعبر عن اتجاه الثلج, والذي سيكون طرفا في عملية الضرب الاتجاهي من خلال عقدة Dot Product, عليك الان توصيله في الـ Base Color, مع تحديد قيمة الـ Y في المتجه الثلاثي الذي قمت بانشائه بـ 1, ومنها يمكنك مشاهدة النتيجة بعد حفظ الشيدر مباشرة.

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

لذا ستقوم بعمل Clamp بين قيمتي الـ 0 والـ 1 لكي لا يتعدي هاتان القيمتان, فلا يسبب هذا التوهج الشديد, وبعد حفظه ستجد أن المشكلة قد حلت.

ولكن الآن لا يوجد اي طريقة للتحكم بشدة أو قيمة تلاشي هذا القناع, لذا ستحتاج ان تقوم بعمليتين, هما القسمه قبل الـ Clamp الذي قمت توا بإنشائه, و النمو الأسي بعده.

حيث أن القسمة ستقوم بالتحكم في مدى تلاشي حافة القناع, اما النمو الأسي سيتحكم بشدة حافته, ولهذا بالطبع ستحتاج متغيرين من نوع Float, وتقوم بتعيين قيمهم الافتراضية بـ 1.

ولكن بالطبع الثلج لا يسقط بشكل دائري, ولكنه بشكل عشوائي لذا ستقوم بضرب كل هذا بصورة التشويش التي قمت بذكرها سابقا مع اضافة متغيرين من نوع Float, و متغير من نوع Vector 2.

وهذا للتحكم بخصائص صوره التشويش من حيث مقدار التكرار, الشدة, وقيمة التلاشي, مع تعيين قيمها الافتراضية بـ 1.

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

والان فقط يتبقى اضافة الخامات التي تريدها, وهذا سيكون عن طريق عقدة Blend, و تحديد الوضع الي Overwrite, الذي من خلال وضع القناع في خانة التعتيم Opacity, سيقوم بعرض قيمة القاعدة Base في جزء القناع الذي يحتوي قيمة 0, وعرض قيمة الـ Blend في جزء القناع الذي يحتوي قيمة 1.

واي قيمة بين الـ 0 والـ 1 سيكون شيئا بين الـ Base والـ Blend, ولهذا ستقوم بعمل متغيرين من نوع Texture 2D, إحداهما للثلج, والأخر للصخر, ووضع الصخر في مدخل الـ Base والثلج في مدخل الـ Blend.

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

تفاصيل صغيرة وتأثيرات كبيرة

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

0 0 votes
Article Rating
Subscribe
نبّهني عن
guest

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