مقدمه الي نظام الجزئيات – Particle System

unity

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

الإجابة على هذا قد تطول, ولكن من احد اهم العناصر إن لم يكن أهمها, و الذي لا غني عنه هو نظام الجزيئات – Particle System -, وهو ما سنتكلم عنه الآن والذي ليس مخصصا فقط للقدرات الخارقه في حال ظننت ذلك, ولكنه يشمل أشياء أخرى كمؤثرات البيئة المحيطة,العناصر الطبيعية كالنار والماء, تفاعلات واجهات المستخدم, تأثيرات الاسلحة, وغيرها الكثير.

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

ما هو نظام الجزيئات-Particle System؟

الان عند انشائك لنظام الجزئيات لأول مرة ستلاحظ ظهور مجسم جديد وعليه المركبة-Component- الخاصة بنظام الجزيئات ولكن ما هي هذه الاشياء التي تتصاعد او تنبثق منه؟

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

وسأبدأ بتوضيح وظيفة كل لوحة في نظام الجزيئات.

اللوحة الأولى

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

  • المده / Duration
    وهي ما تعبر عن مدة عمل الباعث نفسه الذي يقوم بتوليد الجزئيات, وعند انتهاء فترة عمله يتوقف توليد الجزيئات, لكن لا يعني هذا أنها ستختفي بل ستكمل حياتها بشكل طبيعي كما تم تحديده في النظام.
  • التكرار / Looping
    هو مسئول فقط عن تحديد إذا كان النظام سيستمر في العمل من جديد لحظة انتهائه, أم انه سيعمل لمرة واحدة فقط.
  • مدة الحياة الابتدائيه / Start Lifetime
    هذا ما يحدد فترة حياة كل جزيء بذاته, وبعد توليد كل جزيئ سيبدأ عداد خاص به, ويجعل الجزيء يموت عندما تنتهي فترة الحياة الذي بدأها لحظة تولدة, ولا علاقة له بالمدة التي سيستمر الباعث خلالها بتوليد الجزئيات.
  • السرعة الابتدائية / Start Speed
    كما لاحظت في الاعلى فان الجزيئات لحظة تولدها تنطلق في اتجاه معين, وبسرعة معينة, وهذا ما يحدد هذه السرعه, ويمكنك ايضا ان تجعل قيمتها سالبة لعكس اتجاه حركتها.
  • الحجم الابتدائي / Start Size
    لا شيء معقد, فقط يحدد حجم كل جزيئ عند تولده.
  • الدوران الابتدائي / Start Rotation
    يحدد قيمة دوران كل جزيئ عند تولده, او بمعنى اخر فهو يحدد زاوية تولدها فقط, ولكنه لا يجعلها تدور بسرعة معينة على مدار فترة حياة الجزيئ.
  • اللون الابتدائي / Start Color
    وهو ما يحدد قيمة لون كل جزيئ لحظة تولده فقط.
  • مساحة المحاكاة / Simulation Space
    وهو ما يحدد طريقة تاثر الجزيئات بالنسبة لمكان الباعث الأصلي,فلو كانت علي Local, فذلك يجعل الجزئيات دائما مربوطة بمكان الباعث الأصلي الذي تتولد منه, وتتحرك معه وتقف معه, ويمكنك تخيل أن هذا الباعث هو عالمه الوحيد, وبتحرك هذا الباعث سيتحرك معه, كان العالم تحرك وتحركت الجزئيات مع عالمها,
    أما لو تم تحديده علي World, عندها لن تتأثر حركة الجزئيات بعد تولدها بمكان الباعث الاصلي, وستكون لها حركتها الخاصة, فاذا تغير مكان الباعث الأصلي, لن تتأثر طريقة حركة كل جزيء, وسيتحول عالم الجزيئات لعالم اللعبة الحقيقي, وفي هذه الحالة سيكون الباعث مجرد شيء يولد الجزئيات فقط, وليس له أي تحكم عليها بعد ذلك, فهي تقع الآن تحت تحكم العالم نفسه.

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

لوحة الباعث-Emission

الان سننتقل الى اللوحة الثانية, والتي كل وظيفتها هي تحديد طريقة عمل الباعث نفسه.

المعدل بمرور الوقت / Rate over Time
وهو ما يحدد عدد الجزيئات التي ستتولد لكل وحدة من الزمن, ففي هذا المثال ستتولد 10 جزئيات لكل وحدة زمن.

المعدل بالنسبة للمسافة / Rate over Distance
وهو ما يحدد عدد الجزيئات التي ستتولد لكل وحدة مساحة, مما يعني انه يعتمد على تحرك الباعث نفسه, وماعدا ذلك فلن يتولد شيء, فاذا قمت بوضع قيمة له -مع تصفير قيمة البقية- ولتكن 5 مثلا, يمكنك ملاحظة أن الجزيئات تتولد فقط عند تحركه.
وشيء كهذا سيكون مفيدا في حالة قمت بعمل تأثير الدخان الخاص بمقذوفة ما, ففي هذه الحاله لن ينبعث منها دخان الا اثناء تحركها بعد انطلاقها.

الدفعات / Bursts
وهذا يغير نظام التوليد ليجعله عباره عن دفعات بأعداد محددة من الجزيئات, وستجد فيه 5 خانات وهي:

  1. الزمن / Time
    وهو ما يحدد الوقت الذي ستنطلق فيه هذه الدفعة, ويبدأ عد هذا الوقت ابتداء من بداية فترة عمل الباعث نفسه.
  2. العدد / Count
    وهو ما يحدد عدد الجزيئات المتولدة في هذه الدفعة.
  3. الدورات / Cycles
    وهو ما يحدد عدد مرات تكرار عمل هذه الدفعة.
  4. الفترات / Intervals
    وهو ما يحدد الزمن الفاصل بين كل دوره والتي بعدها, وهذا في حالة انك قمت بتحديد نظام الدفعات ليعمل اكثر من مره.
  5. الاحتمالية / Probability
    وهو ما يحدد نسبة عمل هذه الدفعة, وهنا قد تم تحديدها علي 1 مما يعني أنها ستعمل دائما.

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

لوحة الشكل-Shape

والان سننتقل الى اللوحة التالية, وهي لوحة (الشكل / Shape) والتي وظيفتها هي تحديد خصائص شكل نظام الباعث نفسه, والذي تتولد الجزئيات من خلاله.

  • الشكل / Shape
    وهو ما يحدد الشكل الأساسي لنظام الباعث, ومع كل شكل سيظهر معه متغيرات مختلفة للتحكم بخصائصة مثل الحجم, الزاوية, او القطر.
  • الوضع / Mode
    وهو ما يحدد طريقة تولد الجزيئات نفسها من خلال شكل الباعث, وقد يصعب فهمها نظريا لذا انصحك ان تجربها بنفسك.
  • الموقع / Position
    وهو ما يتحكم باحداثيات شكل نظام الباعث بالنسبة لموقع الجسم الذي يحمل هذا الباعث.
  • الدوران / Rotation
    وهو ما يتحكم بدوران أو زاوية شكل نظام الباعث بالنسبة للجسم الذي يحمل هذا الباعث.
  • الحجم / Scale
    وهو ما يتحكم بحجم شكل نظام الباعث بالنسبه لحجم الجسم الذي يحمل هذا الباعث.

لوحة الحجم بمرور فترة الحياة-Size over Lifetime

والان سننتقل الى لوحة (الحجم بمرور فترة الحياة / Size over Lifetime ), والتي تقوم بتحديد طريقة تغير الحجم اثناء فترة حياة كل جزيء.

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

وهذا لا يعني ان هاتان القيمتان تعبران عن الزمن الفعلي, إنما هو نوع من النسبة المئوية, فـ1 هو القيمة العظمي لفترة حياة الجزيء, بينما – هو القيمة الصغرى لفترة حياة الجزيء.

فإذا كنت قد حددت مثلا فترة حياة الجزيئ بقيمة 5 فحينها ستكون قيمة 0.5 علي سبيل المثال في محور الزمن علي المنحني تعني نصف قيمة الحياة أي تعني 2.5.

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

لكن الفرق انك يمكنك زيادة القيمة العظمي في المنحني نفسه, فحينها ستكون القيمة العظمي تساوي نفسها مضروبة في الحجم الذي قمت بتحديده مسبقا

وبالنسبة للمنحني هنا ــ الذي لم اقم بتغيير بالمناسبة ــ سيكون تأثيره بأن كل جزيئ سيبدأ حياته وقيمة حجمه تساوي 0 ثم يكبر بمرور فترة حياته حتى يصل لقيمة الحجم التي تم تحديدها مسبقا, ثم سيختفي في نفس اللحظة او يموت بالاصح لان هكذا تكون فترة حياته قد انتهت.

لوحة اللون بمرور فترة الحياة-Color over Lifetime

والآن إلى لوحة اللون بمرور فترة الحياة / Color over Lifetime : والتي تتحكم بتغير قيمة اللون أثناء فترة حياة كل جزيء, ولا يقتصر الأمر علي اللون فقط, بل يمكن كذلك تغيير قيمة الشفافية ايضا.

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

لوحة الإظهار -Renderer

والان تبقى اخر لوحة وهي لوحة الإظهار/ Renderer والتي سيتم عرضها خلال الجزء التطبيقي; لكي تتضح بشكل أفضل, ولكن بشكل عام فإن وظيفتها هي التحكم بكيفية عرض و اظهار ــ او معالجة ــ كل جزيء.

صنع تأثير الشرارة

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

والتي قمت فيها بتغيير نوع الشيدر واضفت بعض التوهج من خلال زيادة الشدة – Intensity 

والآن ستقوم باضافة نظام الجزئيات نفسه من خلال قائمة Effects واختيار Particle System.

ثم ستقوم بوضع الماتيريال التي قمت توا بانشائها في خانة الـ Material, وبعدها ستقوم بتغيير الـ Render Mode الي Stretched Billboard; لكي يجعل كل جزيء يتمدد, عوضا ان يكون حجمه ثابت كما في الحاله الافتراضية, ثم زيادة قيمة الـ Length Scale, وهي التي تتحكم بمقدار هذا التمدد.

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

ثم في لوحة الشكل ستقوم بترك شكل المخروط, مع زيادة قيمة الزاوية, وتقليل القطر لأقل شيء ممكن; لأن الشرارة عادة تخرج من منطقة واحدة.

ثم ستقوم بتفعيل لوحة الـ ;Collision لكي تضيف خاصية التصادم للجزئيات, ثم تقوم بتغيير الـ Type الي World; لكي تستطيع الجزيئات أن تتصادم مع كل العالم المحيط بها, ثم تقوم بتقليل قيمة الـ Bounce وهي التي تضيف خاصية الارتداد للجزيئات, لأن الشرارة ترتد لكن بدرجه بسيطه, ثم زيادة الـ LifeTime Loss والذي يقوم بتقليل قيمة فترة حياة كل جزيء يقوم بالاصطدام, وفي حال قمت بجعلها على القيمة الكاملة اي 1 فهذا يعني أنه عند اي اصطدام سيقوم بجعل قيمة فترة الحياة لأقل قيمة, أي سيجعلها 0, ولكن هنا اريدها ان تبقى قليلا بعد الاصطدام, لذا قمت بجعلها بقيمة أقل من الـ 1 بقليل. 

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

بوابة لعالم لا ينتهي

الان بعد ان تعرفت على أساسيات نظام الجزيئات فقد تقدمت خطوة لتصبح ما يدعى بـ فنان المؤثرات البصرية.

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

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

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

0 تعليقات
Oldest
Newest Most Voted
Inline Feedbacks
View all comments