في هذا الفيديو سنصنع تأثير التزييح (Displacement) التفاعلي باستخدام اداة Shader Graph في يونيتي
لدينا مشروع تجربي هنا للـShader Graph, وبعض الامثلة من حزمة الالعاب 3D Game Kit
اذا بدأنا تشغيل المشروع يمكننا ان نرى تأثير التزييح التفاعلي على الكرة اذا ضغطنا على مفتاح Space
بالطبع في لعبتك ستستخدم هذا التأثير في بعض الاشياء اثناء اللعب.
في هذا الفيديو سنرى كيف يمكننا صنع هذا الـShader باستخدام اداة الـShader Graph, مع دمج مفتاح Space لتشغيل التأثير.
الهدف هو مساعدتكم في فهم كيف تصمم التأثيرات في الـShader Graph والتفاعل معها باستخدام #C سكربت.
هذه الاصول متاحة بشكل مجاني للتحميل في الرابط في خانة الوصف في الاسفل.
المشروع يحتوي على الـShader, السكربت الذي يتحكم بهذا الـShader, مستوى تجربي, ايضاً نظام Lightweight scriptable render pipline, ايضاً مشهد تجربي لتبدأ منه.
في البداية دعنا نقوم بتثبيت الـShader Graph وانشاء الـShader
نقوم اولاً بفتح نافذة Package Manager ونثبت كلاً من Lightweight render pipline ايضاً Shader Graph.
لتثبيت الـLightweight render pipline نحتاج اولاً انشاء ملف Pipeline جديد في نافذة Project.
لانشاء الـPipeline اختر Create ثم Rendering ثم Lightweight render pipline assets
يمكننا الان تفعيل هذه الـPipeline عبر الدهاب الى Edit ثم Project Settings ونختر Graphics, الان نسحب الـLightweight render pipline assets الى حقل Scriptable Render Pipeline Settings.
اذا تابعتنا جيداً مع تنزيل الاصول فأن هذه الخطوات قد اكتملت بالنسبة لك.
بما ان Lightweight render pipline قد تم تثبيته, فأنه يمكننا انشاء Shader Graph جديد.
دعنا ننشى Shader Graph جديد عبر الدهاب الى Create ثم Shader ثم PBR Graph
الـPBR Graph يسمح لنا بأنشاء خامة جديدة تتفاعل مع الضوء بما في ذلك الظلال والانعكاسات وتحتوي على مدخلات فيزيائية رئيسية
بمجرد انشاء هذا الShader نقوم باضافتة الى خامة جديدة ووضع الخامة على الكرة (Sphere) في مشروعنا التجربي.
لتطبيق هذا التأثير نقوم بتزييح اطراف المجسم (الكرة) باتجاه اوجهه بتغيير مخرجات الموقع عبر العقد الرئيسية.
نقوم بأجراء التزييح عبر استخدام عقدة Add على موقع كل طرف في الجسم بأضافة عقدة Normal Vector الى الموقع الاساسي للكائن سنتمكن من رؤية جميع الاطرف بارزة.
مما يجعل الكرة تبدو اكبر.
لتغيير هذا التزييح نقوم بضرب العقدة Normal Vector بشكل عشوائي باستخدام عقدة Simple Noise.
عند الضغط على Save Assets يمكننا في المشهد رؤية أن اطراف الكرة قد تم تزييحها اعتماداً على عقدة Simple Noise.
تالياً سنصطلح مشكلة الحواف باستخدام فضاء الكائن لعقدة Simple Noise بدلاً من فضاء الUV.
ثم نحرك خريطة التزييح لانشاء تأثير نبضي.
ببساطة نقوم باضافة عقدة Position واجعلة Object (يقصد فية اعدادات العقدة) لعقدة Time واربطة مع مدخل UV في عقدة Simple Noise
يمكننا ايضاً استخدام عقدة (عقدة Add) لضربها في عقدة Time لتسريع الحركة.
للتحكم بالتزييح نستخدم خاصية جديد لهذا الـShader في الـShader Graph
الخاصيات في الـShader توفر لنا مدخلات للـShader عن طريق السماح بتغير القيم من نافذة الـInspector او من سكربتات الـ#C خاصتنا.
سنقوم بأنشاء خاصية Vector1 بأسم Amount ونغير خانة الـReference الى Amount_
حقل الReference عبارة عن String يسمح لنا بالوصول الى عقدة التزييح وتغيير قيمتها من السكربت.
اذا لم نغير هذا فأنه سيستخدم قيمة تلقائية.
اذا لم يكن النص مطابق تماماً فاننا لن نصبح قادرين على الوصول الى هذه الخاصية بواسطة السكربت.
نستخدم قيمة هذه الخاصية في عقدة Multiply مع عقدة Simple Noise قبل ضربها في عقدة Normal Vector
يسمح لنا هذا بتغيير حجم الـNoise قبل تطبيقة على مواقع الاطراف.
الان يمكننا ان نرى ان المتغير Amount يتحكم بمقدار تزييح الاطراف في الجسم.
للتحكم بالمتغير Amount بنقوم بأنشاء سكربت #C باسم Displacement Control ونضعه الى الكرة.
هذا السكربت يتحكم بالمتغير Amount_ بواسطة تفاعلة مع الخاصية الموجودة في الخامة الموجودة في المكون Mesh Renderer
نقوم بالحصول على المكون MeshRenderer وتخزينة في المتغير MeshRender, ايضاً نعرف متغير float جديد باسم displacementAmount
نستخدم الدالة Lerp داخل الدالة Update لنقل قيمة التغير displacementAmount الى القيمة 0.
ثم نقوم باضافة هذا المتغير الى متغير Amount_ (الموجود في الـShader).
هذا سيجعل المتغير Amount_ يغير قيمتة بشكل تدريجي دائماً الى صفر.
نستخدم المدخل Jump الافتراضي في يونيتي وهو بالاساس عبارة عن المفتاح Space
لزيادة قيمة المتغير displacemenAmount بواحد عند الضغط.
الان عند تشغيل المشهد فأنه يمكننا رؤية ان المتغير displacemenAmount يزيد بواحد عند الضغط على مفتاح Space, وتلقائياً يعود الى الصفر.
لانشاء تأثير توهج نستخدم العقدة emission الموجودة في عقد الـPBR الرئيسية.
دعنا نستخدم عقدة Voronoi Noise ونضربها مع عقدة Color
هذا سيصنع درجات في تأثير التوهج مع بعض البقع السوداء.
ثم نستخدم العقدة Lerp مع عقدة Color اخرى باعتبارها اللون الاساسي, ونستخدم المتغير Amount في المدخل T
يسمح لنا هذا بمزج العقدتين Color و Voronoi بواسطة المتغير Amount
ثم يمكننا تحريك التوهج كما عملنا سابقاً.
يمكننا ايضاً اضافة طبقة توهج اخرى لعمل تابين مضاعف عبر استخدام عقدة Simple Noise تتحرك بواسطة عقدة Time اخرى, ونضرب مخرجات عقدتي الـNoise مع بعض.
هذا يعطينا طبقة اخرى من الـnoise تضيف تأثير مثير.
لان تأثير التوهج يتغير بواسط المتغير Amount في العقدة Lerp.
وباستطاعتنا ان نرى في المشهد عند الضغط على مفتاح Space أن الكرة تطبق التأثيرين معاً (التزييح و التوهج), وتدريجياً ترجع الى الحالة الطبيعية.
لاضافة لمسة اخيرة, نربط تأثير Particle System بسيط مع السكربت الذي يتحكم بالتزييح.
اذا اردت ان تختبر هذه التجربة بنفسك, نحن نقدم لك المشروع بشكل كامل,Meshs, Shaders, ومشهد تجربي في الرابط اسفل الوصف.
نحن نتطلع لنرى الاشياء الرائع التي ستصنعها.
شكراً للمشاهدة :) ----- ترجمة:- عماد عارف التوي
تُرجم من قبل فريق Amara.org
