post

ميزات 2019.3 Unity – الجزء الثاني

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

في هذا الفيديو سنقوم بالإكمال على الميزات التي تم إضافتها للمطورين Developers وكيف أنهم قامو بإضافة العديد من التحيسنات على الواجهة الرسومية للمحرك ، وتحسينات على آداء المحرك نفسه، بالإضافة إلى الحديث عن بعض الميزات التي أضافوها للمنصات الأخرى إن كانت للـ Mobile أو لل VR أو ال AR.

أدوات جديدة للمطورين

1 . تحسين عملية الـ Serialization

يبدو تبسيط البيانات واضحاً بعدما قدمت الشركة طرق جديدة في ال Serialization ، وبشرح بسيط فعلمية ال Serialization هي تحويل ال Objects إلى قيم أو نصوص يمكن تخزينها على القرص الصلب أو قواعد البيانات أو الذاكرة، فسابقاً كان يتم إضافة وسم [Serializable] لل Class وبالتالي كان المحرك يقوم بتحويله إلى قيم نوعية Value Type ، الآن أصبح بالإمكان إضافة وسم SerializeReference وبالتالي أصبح بالإمكان تحويل ال Classes إلى references ، هذا يعني أنه أصبح الآن بالإمكان ربط أكثر من كائن ببعض، الذي بدوره سيؤدي إلى تبسيط الكود لإدارة هيكلية بيانات معقدة مثل الـ graphs و الـ trees .

أيضاً تم إضافة مكتبة UnityYAML لتسريع عملية ال serialization خصوصاً في مرحلة تحميل المراحل. ويمكن تعريفها على أنها شيء مشابه لل JSON وهي طريقة تحويل ال Object إلى شيء يمكن كتابته على القرص الصلب أو الذاكرة.

2 . تسريع الدخول في Play Mode

قامت الشركة أيضاً بإضافة ميزة تجريبية قد توفر عليك ما يقارب 50% إلى 90% من وقت الإنتظار بعد أن تقوم بالضغط على زر Play لتجريب النتائج الجديدة الخالية من تعديلات الكود. فبواسطة خاصية Enter Play Mode التجريبية يمكنك تجاوز مرحلتين أساسيتين يقوم بهما المحرك. فسابقاً عندما تقوم بالضغط على زر Play كان المحرك يقوم بإعادة تهئية ال Codes بما يعرف بإسم Domain Reload كمرحلة أولى، وبإعادة تحميل المشهد Reload the scene كمرحلة ثانية، الآن بهذه الميزة التجريبية يمكنك بعد تفعيلها من إعدادات المشروع Project Settings تحت قائمة Editor بوضع علامة صح بجانب خيار Enter Play Mode ، يمكنك تقليل الوقت خصوصاً في المشاريع الضخمة.

3. تحسينات على الـ Profiler

في النسخ السابقة لنسخة 2019.3 عندما كنا نقوم بتحليل اللعبة بواسطة أداة الـ Profiler التي تقوم بإعطاء تفصيل دقيق لكل أقسام اللعبة لكشف مقدار السرعة في الأداء ومقدار الحجم في الذاكرة، كان سابقاً يقوم بعمل تسجيل لآخر 300 فريم، والتي كانت أحياناً غير كافية لإستخراج بيانات تفصيلية نريدها، في هذه النسخة تم إضافة ميزة لزيادتها من 300 فريم إلى 2000 فريم .

أيضاً تم إضافة ميزة Deep Profiling Support في حال كانت النسخة لمنصة PC Standalone حيث يمكن تسجيل الوقت عند إستدعاء أي دالة c# Methods ، طبعاً هذا الخيار مفيد جداً في عملية تحسين اللعبة وال Testing مع مراعاة أن تفعيل هذا الخيار سيعطي بطئ للعبة كونها ستقوم بالتسجيل أيضاً.

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

4. تحسينات على طريقة كتابة DOTS

كما ذكرنا في الجزء الأول من الميزات أن DOTS إختصار لـ Data-Oriented Technology Stack ، وهي من أكثر الأمور التي قدمت للمطورين فرص لتحسين ألعابهم، ففي هذه النسخة قامت الشركة بتقليص عدد الأسطر البرمجية لتحقيق الميزات السابقة، حيث أصبحت تستخدم C# Job System بالإضافة إلى Backend Compiled إسمه Burst Compiler حيث يعتبر مترجم متدني المستوى Low Level Virtual Machine ويقوم بتحويل أسطر لغة الـ C# إلى أسطر محسنة بلغة الآلة Machine Code .

5. تحسينات على ال Physics

بالبداية قامت الشركة بتطوير النسخة المستخدمة من PhysX المحرك مفتوح المصدر المطور من شركة Nvidia الخاص بالحسابات الفيزيائية، حيث تم تطوير المكتبة من نسخة v3.4 إلى v4.1 ، ويمكن الرجوع إلى صفحة المحرك لمشاهدة الأمور الجديدة التي تم إضافتها، من أهمها هي تقديم Solver جديد لربط ال Joint الخاصة بتحريك المجسمات وجعلها أقل عرضة لعمليات ال Stretch بالتفاعل مع المجسمات المحيطة، وتطوير خوارزمية سابقة لتصبح أكثر فاعلية في توليد المجسمات في وقت اللعب لتأخذ وقت وكلفة قليلة من مواصفات الجهاز، بالإضافة لأمور أخرى.

على صعيد آخر قامت شركة Unity بتقديم المحرك الفيزيائي الشهير Havok بنسخة متقدمة مبنية على تقنية ال DOTS حيث تعاونت الشركة المنتجة مع شركة Unity لإصدار هذه النسخة الحصرية، فهي متاحة فقط من خلال ال Package Manager وتحتوي على 3 باقات إحداها مجانية والباقي يأتي من ضمن ال subscription plans الخاصة لمحرك اليونيتي، ويجدر بالذكر أن محرك Havok مبني على native C++ حيث أنه يقدم نتائج سريعة ودقيقة لمن يهتمون بالدرجة الأولى بالفيزيائية في ألعابهم، وهي مناسبة جداً لأجهزة ال Consoles والموبايل.

أدوات المرئيات Graphics

1. نمط الإظهار المتقدم HDRP

إن كنت تطمح للإستفادة القصوى من المرئيات والإظهار المتقدم فعليك إختيار HDRP المختصر من High Definition Render Pipeline حيث أنه في هذه النسخة أصبح Verified بعدما كان تجريبي Preview ، فهو يقدم الجودة العالية للإظهار Rendering ، ويمكنك مشاهدة الفيلم الدعائي القصير المنتج من الشركة بعنوان ( The Heretic ) ، ففي نسخة 2019.3 أضافو إمكانية كتابة معالجة للصورة النهائية خاص بك بواسطة Custom Post-Processing ، بالإضافة إلى ميزة Physically Based Sky ، حيث أصبح بالإمكان الآن محاكاة الشمس والسماء الحقيقية بناءاً على الوقت، مما يتيح لك إلتقاط مشاهد نهارية أو ليلية جميلة.

أيضاً الآن بالإمكان تشغيل تقنية الواقع الإفتراضي VR مع الإظهار المتقدم HDRP للحصول على أقصى جودة تحاكي المشاهد الحقيقية، ويجب التنويه أن الإظهار المتقدم HDRP يستنزف موارد الجهاز لذلك ينصح بإستخدامه فقط مع الأجهزة المتطورة جداً high-end hardware.

ومن ضمن الميزات التجريبية الجديدة المضافة إلى HDRP ميزة real-time ray tracing features ، التي تعطي نتائج واقعية للضوء ولفيزيائية الضوء، فهي تقوم بحسابات الإنعكاس والظلال والإنكسار بالإعتماد على نوع المادة الساقط عليها الضوء، وهي تقدم أكثر ميزتين مطلوبتين وهما الـ global illumination والـ ambient occlusion بالإضافة للميزات الأخرى التي تحول الصور إلى حقيقة. التي كانت ولا تزال تحتاج إلى وقت تصيير طويل Long Time Render وإلى مواصفات جهاز عالية جداً، كما المصيرات Renderer المشهورة مثل ال Vray وغيرها.

2. نمط الإظهار المتوسط URP

نمط الإظهار المتوسط الـ Universal Render Pipeline أو ما كان يعرف سابقاً بالـ LWRP المختصر من Lightweight Render Pipeline هو نسخة مبسطة من نمط HDRP وهو أفضل من النمط التقليدي Default Render Pipeline ، حيث يأتي هذا النمط حالياً بشكل forward renderer حيث يقوم بحساب جميع الإضاءة في طبقة واحدة، وهو يدعم أنواع جديدة من الإضاءة في حال تم إستخدام 2D Renderer كما وضحنا في الجزء الأول من الميزات، وتم زيادة عدد الأضواء المسموح بها بهذا النمط إلى 256 ضوء في حال كان التطوير لغير الموبايل، أما الموبايل فتم زيادته أيضاً وهو يدعم 32 ضوء ، وهناك نسخة deferred renderer قادمة قريباً إليه.

المؤثرات البصرية Post-processing الآن تم تضمينها داخل النمط بعدما كان يتم إضافتها بشكل منفصل، حيث بإمكانك الحصول على تأثير تنعيم الأطراف ومانع التكسير anti-aliasing ، وتأثير التركيز بعمق depth of field ، وتأثير camera motion blur ، و Panini projection ، و bloom ، و lens distortion ، و chromatic aberration ، و color grading ، و tone mapping ، و vignette ، و film grain ، 8-bit dithering .

3. أداة Shader Graph

قبل الحديث عن أداة Shader Graph يمكننا التحدث أولاً عن أداة Visual Effect Graph، حيث يمكنك بشكل بصري أن تقوم بصنع نظام جزئيات Particle System معقد ومن صنع تأثيرات على مستوى الشاشة Post Processing أو حتى تأثيرات على واجهات اللعبة UI ، الضباب والمجسمات المضيئة وغيرها من التأثيرات التي تعطي إظهار أفضل Visual Effects كلها يمكن عملها داخل هذا المحرر. وفي هذه النسخة أصبحت هذه الأداة Verified بعدما كانت تجريبية Preview وهي تعمل الآن فقط مع النمط HDRP. ويمكنها التعامل مع أداة Shader Graph كما سنوضح الآن .

أما بالنسبة لأداة الـ Shader Graph ، فإنها ولا تزل مركز للتطوير كونها تفتح أفاق جديدة للمطورين ليقومو ببناء Custom Shader لكي يضعوه على المجسمات في داخل البرنامج، فقد قامو بإضافة vertex skinning لـ DOTS animation ، وأصبح هناك إمكانية لعمل العديد من النسخ static branches بعدما قامو بإضافة الـ Shader keywords ، أيضاً أصبح هناك إمكانية لعمل جمل ملاحظات Sticky notes داخل الـ Shader Graph للتوضيح لتساعد كل من يعمل معك في المشروع على فهم ما قمت بعمله.

4. تحسينات على أدوات الإضاءة

قامت الشركة أيضاً بعمل تحسينات على بعض الأدوات الخاصة بحسابات الإضاءة والظلال، فأصبح الآن بإمكانك دمج نفس الـ Light Probe بأكثر من مشهد الذين يعملون بطريقة المشاهد الترابطية additively loaded Scenes ، هذا يتيح للمطور تقسيم المرحلة الكبيرة إلى مشاهد Scenes صغيرة مترابطة مما يعطي فعالية أكبر للعبة، فبعد دمجهم وتحميل المراحل الصغيرة الجديدة يمكنك الحصول على نفس الحسابات السابقة بطريقة سلسة وبنتائج تعطي واقعية عالية، وتم تحسين حسابات الإضاءة فيها وتفادي بعض النتائج المزعجة سابقاً التي كانت تؤدي إلى ظهور Noise في المجسمات بسبب العدد الكبير للإضاءة.

على صعيد آخر، قامت الشركة بتحسين أداء حسابات الـ Progressive Lightmapper ، فحالياً هناك نوعين يمكنك بواسطتهما حساب خرائط الضوء Lightmap إما بالمعالج CPU أو بكرت الشاشة GPU ، فسابقاً كان التعامل مع ال Editor أثناء هذه الحسابات يعطي عدم أريحية للمطور حيث أنه يلاحظ وجود تقطيع كبير وقلة إستجابة بسبب العمل المستمر على حسابات الضوء، الآن أصبح الأمر أكثر إستقرارية وقابلية للتنقل والتعامل حتى أثناء الحسابات، بالإضافة إلى ميزات أخرى كلها تعمل بشكل أساسي على تقليل الوقت المستغرق وإعطاء نتائج مرضية والتقليل من الـ Noise الناتج أثناء عملية الحسابات.

واجهة المحرر، وأدوات العمل الجماعي

1. واجهة رسومية جديدة

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

وعلى غرار أغلب البرامج الكبيرة، تم الآن إضافة ميزة البحث السريع Quick Search من خلال الضغط على زر Alt + ` (حرف الذال ) والبحث مباشرة عن أي شيء داخل أو خارج المحرك، وهذا من هدفه تسريع عملية التطوير من خلال الإختيار السريع لما يحتاجه المطور أو المصمم.

2. محرر واجهات UI Builder

من أكثر الميزات التي جذبتني شخصياً هي أداة UI Builder ، فكل مطور يدرك تماماً مدى المشاكل التي تنتج بشكل دوري بواجهات اللعبة UI ، فمثلاُ ما أن تقوم بعمل زر في الشاشة وتقوم بتغيير دقة اللعبة إلا وتتغير جميع الواجهة التي قمت بعملها سابقاً، هناك حلول بسيطة يمكن إستخدامها سابقاً، لكنها لا تزال واحدة من أكثر الأمور المزعجة للمطورين والمصممين داخل المحرك، الآن أصبح هناك أداة منفصلة كليا ًويمكن تنزيلها من ال Package Manager تحت إسم UI Builder ، يمكنك من خلالها بناء واجهة رسومية جداً رائعة وجداً متفاعلة مع كل أقسام الشاشة، ليس هذا فحسب، بل يمكنك إيضاً التعامل مع ملفات CSS التي تقوم بإضافة Template لنمط معين ويمكنك إستخدامه للكثير من العناصر بضغطة زر واحدة. وهذه الأداة مخصصة للمصممين الذين يتقنون التعامل مع CSS و الـ UXML .

هناك أيضاً العديد من الأدوات التي قامت الشركة بتطويرها، فقامت الشركة بتحسين أداة ال Package manager نفسها، بدعمها لـ Git repository من خلال رابط، فضلاً عن إمكانية رؤية ال Assets التي قمت بشراءها أو تنزيلها مباشرة منه،

على صعيد العمل التشاركي، قامت الشركة بتطوير Unity Accelerator الذي من هدفه أن يقوم بسرعة عكس التغيرات من شخص بالفريق إلى كافة الأطراف الأخرى، بمعنى رؤية النتيجة التي يقوم بها المبرمج بشكل أسرع لدى باقي الفريق، أيضاً هناك Addressables الذي تسهل تنظيم جميع ال Assets المستخدمة من خلال مسارات معينة داخل اللعبة لإستدعاءها داخل المشروع من أي مكان بالكود، أيضاً قامت الشركة بتطوير AssetDatabase Pipeline من النسخة الأولى إلى النسخة الثانية، المهمة في عملية تنظيم جميع ال Assets الموجودة في المشروع.

المنصات Platforms

1. نظام الإدخال Input System

من أكثر الطلبات الملحة لدى المطورين هي إمكانية تغيير أزرار التحكم داخل اللعبة، فسابقاً كان يمكنك إختيار الأزرار فقط وقت التطوير، ولا يمكن تعديلها بعد أن تقوم بنشر اللعبة، مما كان يدفع البعض إلى شراء Assets مخصصة مبنية لنظام Input System جديد، الآن أخيراً تم حل هذه المشكلة مع أداة جديدة لازالت في وضع التجربة Preview ، وهناك العديد من الميزات التي أنصح بالإطلاع عليها.

أيضاً بهذه النسخة أصبحت أداة Incremental Garbage Collector مستقرة Verified ، الأداة المسؤولة عن إدارة الذاكرة وإزالة أي مجسمات لا حاجة للعبة بها، وأخيراً أعلنت شركة Unity عن دعمها لتصدير ألعابك لمنصة Stadia التي أعلنت عنها شركة Google قبل بضع سنوات.

أدوات أخرى

هناك العديد من المزايا الجديدة أيضاً التي لم يسعفنا الوقت للحديث عنها مثل AR Foundation ، وكيف قامت الشركة بتطوير وزيادة إنتاجية الواقع الإفتراضي VR والواقع المعزز AR ، وأيضاً أداة Device Simulator التي تتيح لك تجربة اللعبة على Emulator لرؤية النتيجة، والعديد من المزايا الأخرى التي يمكن الإطلاع عليها من صفحة الميزات الجديدة لدى الشركة.

إلى هنا نكون قد وصلنا إلى نهاية درسنا على أمل أن نلقاكم في درس جديد إن شاء الله.

post

ميزات 2019.3 Unity – الجزء الأول

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

تم إضافة الميزات للعديد من الاقسام الرئيسية، وسنتناول في هذا الجزء الأقسام التالية :
– التقسيم الجديد لنسخ المحرك، التجريبية وطويلة الأجل
– الأدوات الجديدة للفنانين والرسامين Artist and designers
– الأدوات الخاصة بالألعاب ثنائية البعد 2D Tools

على أن يتم الحديث عن الأقسام التالية في الجزء الثاني وهي:
– الأدوات الجديدة للمطورين Developers
– تحسينات الظهور Graphics
– تحسينات المحرك
– وإدارة المنصات

النسخ التجريبية، والنسخة طويلة الأمد

في البداية، قامت الشركة بتأكيد فصل المحرك إلى قسمين، القسم الأول يحتوي على المحرك الأصلي لوحده الـ Core ، والقسم الثاني هو Packages يتم إضافتها للقسم الأول، بهذه الخطوة يمكنك إستخدام نسخ مستقرة من المحرك أو ما أسموه LTS المختصر من Long-Term Support وإضافة أي مزايا جديده عليه مما يتم تطويره ما بعد إصدار تلك النسخة دون الحاجة لتجديد المحرك في كل نسخة مقبلة، فأي ميزة جديدة ستراها في هذه النسخة ستكون عبارة عن إضافة Package جديدة يمكن تنزيلها من ال Package Manager داخل المحرك، وهنا أيضاً قامو بتعريف النسخ الحديثة والتي تحتوي على نسخ تجريبية بـ TECH Releases حيث سيتم إصدار إثنتان منها كل سنة، على أن يتم إصدار النسخة المستقرة LTS مرة واحدة كل سنتين.

فيديو يشرح نظام النسخ المستقبلية من محرك الألعاب Unity

أدوات جديدة للـفنانين والمصممين

1. أدوات الأرضية Terrain Tools

يمكنك الآن صنع فجوات Hols وكهوف Caves في نظام الأرضية التابع للمحرك، الشيء الذي كان من أكثر الطلبات الملحة من قبل المصممين، حيث أنهم كانو سابقاً يضطرو لنمذجة مجسم الجبل والكهف بشكل منفصل عن Terrain مما كان يحتاج لكتابة أكواد خاصة بما يتعلق بالفيزيائية والأمور الأخرى، الآن أصبح بإمكانك بكل بساطة إختيار Paint Surface Mask tool ومسك الفرشاة والرسم على الـ Terrain كما لو كنت تقوم بتلوينها. والفجوات Holes ستتأثر بكل الأنظمة الأخرى مثل الفيزيائية والـ navigation mesh وحتى خرائط الضوء lightmapping التي ترتبط بشكل أساسي بمجسم الـ Terrain ، ويمكن للمبرمجين الوصول للفجوات والتحكم بها عبر custom terrain logic .

أداة Terrain Tools التي تسمح بصنع فجوات في الأرضية

أيضاً قامو بتحسين رسم التضاريس من خلال أدوات الرسم Terrain Material painting حيث قامو بإضافة 15 أداة للحفر على الـ Terrain لتعطي تفاصيل دقيقة وتقلل من الإعتماد على برامج خارجية قدر الإمكان، هذا كله يمكنك الحصول عليه بإضافة الـ Terrain Tools Package من الـ Package Manager .

أدوات فرشاة جديدة للرسم على الأرضية وإضافة تضاريس عالية الجودة

2. أدوات التحريك Animation Tools

تم إضافة أداة Animation Rigging التجريبية أيضاً إلى الـ Package Manager، حيث أنها تساعد وتسهل من عملية التحريك في الخط الزمني Timeline المخصص لعمل الحركة وهي موجة بشكل أساسي للأشخاص المسوؤلين عن التحريك Animators ، فهناك أدوات الدمج بين حركتين وإضافة الطبقات الخاصة بالتحريك Sequences and Layers لإنشاء حركات جديدة كلياً عن التي أتت عندما قمنا بإستيراد المجسم، والتي ترتبط إرتباط وثيق مع محرر الـ Rig Editor و ال Animation Window لتساعد المحركين من التقليل على إعتمادهم أيضاً على البرامج الخاصة بالتحريك خارج محرك الألعاب Unity.

أدوات منفصلة للمحركين Animator

3. الهئيات المُعَدّة مسبقاُ Presets

الآن أصبح بإمكانك تغيير الإعدادات الأولية default state لأي شيء في المحرك، سواءاً العناصر components او الإستيراد Importers أو حتى الـ Managers ، فمثلاً تريد كل مجسم جديد أن يمتلك خامة ذو لون أحمر بالإضافة إلى كود خاص يأتي عليه مباشرة بعد قيامك بإنشاء هذا المجسم، أصبح الآن من السهل عمله بدون كتابة أي سطر برمجي لذلك. الأمر الذي من شأنه تسهيل عملية التصميم ، وهو أيضاً يساعد في إتخاذ القرار بين تصميمين معينين، فبدلاً من عمل مشهدين بإعدادات مختلفة يمكنك بضغطة زر واحدة تغيير كل المجسمات إلى حالة معينة، وفي النسخة 2019.3 يمكنك عم أكثر من إعدادات أولية، بالتالي يمكن إعطاء مجسمات إعدادات مختلفة حسب إحتياج تصميمك.

تغيير الإعدادات الأولية لأي شيء يزيد من سرعة التصميم

4. خامات من برامج مختلفة renderer materials

في هذه النسخة أصبح بالإمكان الإعتماد على مكتبات خامات Material من خارج المحرك، فهناك الكثير من برامج التصميم التي تمتلك أنواع مختلفة من الخامات بما يتناسب مع البرنامج، وفي هذا النسخة 2019.3 أصبح بالإمكان إستيرادها والتعامل معها مباشرة، والتي ستظهر نتيجة متطابقة مع البرنامج الأصلي دون الحاجة لعمل خامات جديدة متقاربة في المحرك، وهذا يعطي إمكانية أكبر للمصممين على البرامج الأخرى من الإبداع أكثر في الخامات على برامجهم. والأنواع التي يتم دعمها الآن هي: Autodesk Arnold Standard Surface shader, Autodesk 3ds Max physical material, and the Autodesk Interactive shader.

أصبح بالإمكان إستيراد الخامات من البرامج الخارجية دون الحاجة لتعديلها

5. منع إختيار مجسمات معينة Scene Picking

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

إظهار وإخفاء المجسمات أصبح أسهل الآن

أيضاً تم إستبدال الـ grids القياسية بأداة أكثر إنتياجية إسمها ProGrids ، حيث يمكنك إختيار المحور الذي تود إظهار الـ grid عليه وقيمة الإنتقال أو الدوران Snap ، ويمكنك الحصول على هذه الأداة من خلال تثبيتها من Package Manager ثم ستجدها متاحة ضمن قوائم المحرك.

أداة ال ProGrids تعطي تحكم أكبر في موقع المجسمات

6. أدوات DOTS-powered للمصممين

لعل من أبرز ما جاء في هذه النسخة هي إحتوائها على أداتين موجهة للـ Designers تعمل بتقنية الـ DOTS ، و DOTS إختصار لـ Data-Oriented Technology Stack ، ويمكن توضيحها بشكل بسيط على أنها محاولة إستغلال الـ MultiCore Processors لإعطاء أداء خارق خصوصاً على أجهزة الموبايل، والتي تعطي سرعة عالية أيضاً في الحسابات والـ Frame Rate . الأداتان الجديدتان يمكن إضافتهما من خلال Package Manager تحت إسم Entities package ، وهي حالياً تجريبية Preview ، الأداة الأولى Conversion Workflow تقوم بتحويل المجسمات GameObjects إلى entities بضغطة واحدة، والأداة الثانية هي Unity Live Link ، حيث أنه أي تغيير داخل المحرك ينتج عنه تعديل في كل الأجهزة المتصلة معه. للمزيد من التفاصيل يمكن مراجعة الروابط في الأسفل.

أدوات DOTS سرعة خارقة في الأداء

الأدوات ثنائية البعد 2D Tools

في هذه النسخة أيضاً تم التركيز بشكل كبير على الألعاب ثنائية البعد فتم إضافة العديد من الأدوات التي تعطي جودة عالية وتأثيرات حقيقية، لذلك تم جعل الأدوات التالية مستقرة Verified :

1. مستورد ملفات الفوتوشوب 2D PSD Importer :

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

نفس الشخصية في الفوتوشوب هي في المحرك

2. التحريك ثنائي الأبعاد 2D Animation :

أصبح الآن من السهل تحريك الصور ثنائية الأبعاد Skeleton 2D Sprite ، حيث بإمكانك إضافة Bones وإضافة وزن لك منها، وبالتالي عمل حركة متكاملة للشخصية، وتم تقديم كل الأدوات التي يحتاجها المحرك Animator لينتهي من الحركة كما لو أنه يقوم بها في برنامج خارجي.

عمل عظام لتحريك الشخصية بسهولة

3. أداة بناء المراحل وأداة تشكيل الصورة:

المحرك الآن يتحوي على أداتين مهمتين في بناء المرحلة أو ما يسمى بخريطة اللعبة World Map ، حيث أن الأداة الأولى هي 2D TileMap Editor ، وتقوم بأخذ مجموعة من الصور ثنائية البعد ورسمها لتبني خريطة لعبة كاملة، فمثلاً تقوم بعمل 3 صور واحدة للعشب وواحدة للتراب وواحدة للماء، وكل ما عليك هو إختيار إحداها وبدء الرسم على المحرك ليقوم هو بنفسه بضبط الصور وتركيبها معاً. والأداة الثانية هي 2D Sprite Shape ، حيث تفيد هذه الأداة في عمل خط طويل من صورة واحدة دون الحاجة لتكرارها في كل مرة، وايضاً يمكنك إختيار صور تقوم بملء الفجوة الداخلية بالتالي تحصل على شكل مناسب الذي إن قمت بعمله يدوياً سيأخذ منك الوقت الكثير عدا عن الدقة المطلوبة في حال كانت يدوية.

الرسم أصبح أسهل مع أدوات الصور ثنائية الأبعاد 2D Tools

4. دقة الصورة ذو النوع Pixel :

أيضاً هناك ميزة 2D Pixel Perfect التي تضمن أن الصور ذو النمط Pixel ستبقى حادة وبنفس حجمها في حالات تغير الدقة المستخدمة في اللعبة، مما يعطي الإنطباع الأصلي الذي يريده المطور.

الصورة تبقى كما هي في حالة دورانها أو تغيير الدقة

أيضاً لازالت الشركة تقوم بتطوير العديد من الأدوات التي يهتم بها مطور الألعاب ثنائية الأبعاد، فهناك تحسينات على الضوء وعلى الظلال المستخدمة من خلال إستخدام خريطة Normal Map ، وأيضاً قامو بإضافة عدد من الأدوات الجديدة مثل 2D Animation’s Sprite Swap التي تجعلك تقوم بتبديل صور من شخصية معينة مع الحفاظ على العظام وتركيبها دون الحاجة لعملها من جديد.

إدوات إضاءة وظلال للشخصية

نلتقي في الجزء الثاني إن شاء الله.

post

لمحة حول ميزات 2019.2 Unity النسخة التجريبية

السلام عليكم ورحمة الله وبركاته ، طرحت شركة unity تسخة تجريبية للإصدار الجديد لمحركها لعام 2019 تحت رقم إصدار 2019.2 ، حيث قامت بذكر أهم الأجزاء التي سيحتويه والتي ستكون مضمنة في النسخة النهائية من الإصدار، حيث سيحتوي الإصدار على الكثير من التحسينات والإضافات الجديدة مثل تحسين الأداء لأجهزة المحمول، وإضافة أداة Polybrush وتسهيل نشر اللعبة على متاجر متعددة بواسطة The Unity Distribution Portal للوصول إلى عدد أكبر من اللاعبين، وتحسين الإضاءة وأدوات الواقع الإفتراضي والمعزز وغيرها الكثير.
يمكن تنزيل النسخة التجريبية من خلال Unity Hub البرنامج المسؤول عن التحكم في النسخ الموجودة في جهازك، مع الأخذ بالحسبان أن هذه النسخة التجريبية قد تحتوي على مشاكل تقنية معينة، حيث تطرح الشركة النسخة ليقوم المطورين بتجريبها وإيجاد أي مشكلة فيها لحلها قبل الإعلان النهائي عن النسخة المستقرة منها.
هنا ذكر لأهم الميزات لهذه النسخة :

تحسينات للأجهزة المحمولة


قامت الشركة بالتعاون مع فريق من شركة Google بتقديم تحسين للألعاب لتبقى على Frame ثابت وهو ما يعرف بإسم Frame Pacing ، وذلك بجعل الفرق بين عدد ال Frames المحسوبة أقل. والنتيجة كانت الحصول على smoother gameplay experience .


بالإضافة إلى ذلك تم تقديم إمكانية تفتيح الشاشة من خلال الخاصية Screen.brightness ، وقامو بإضافة تحديد لحجم الشاشة التي يمكن عرض اللعبة عليها من غير قص منها من خلال خاصية Screen.cutouts ، وهذه الميزة ستكون مفيدة مع الهواتف الجديدة مثل Samsung S10e .

تم إضافة أداة Polybrush


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

مزايا جديدة في إضاءة الـ 2D


تم تحديث وتطوير نظام الإضاءة Lightweight Render Pipeline (LWRP) ، حيث تم إضافة 2D Pixel Perfect وإضافة أنواع إضاءة خاصة بالمجسمات ثنائية الأبعاد، وتم إضافتها أيضاً إلى الـ Shader Graph الخاص بها. وقد تم تفصيل هذا المزايا في مؤتمر GDC 2019


تحديثات الإضاءة


الميزة الخاصة بإزالة ال Noise وبما يعرف بال Denoise الآن أصبحت تعمل على كل الكروت، حيث سابقاً كان بعض الأنواع تعاني منها وبعضها لا يعاني، ايضاً تم تغيير طريقة حساب خرائط الضوء Lightmaps ، حيث بإمكان أي مجسم موجود في المشهد المشاركة في حساب الإضاءة الغير مباشرة global illumination bake ، وتم زيادة سرعة الحسابات خصوصاً إذا تم إستخدام كرت الشاشة في ذلك.

صورة توضح الفرق بين ال Denoising وعدمه
الميزة الجديدة لتفعيل المجسمات من إستقبال الحسابات الخاصة بالإضاءة


أما بالنسبة لتحديثات خرائط الضوء بواسطة كروت الشاشة فهي أصبحت تمتلك الآن :
1 – أكثر من Importance Sampling support لإضاءة المحيط
2 – أصبحت تدعم NVIDIA OptiX denoising
3 – زيادة سرعة الحسابات عندما تستخدم النوع view prioritization او للمجسمات الصغيرة


متاجر عالمية لزيادة اللاعبين


أصبحت يونيتي تدعم بعض المتاجر العالمية لتساعدك بنشر ألعابك عليها وهي ما يعرف بإسم The Unity Distribution Portal (UDP) ، حيث تم التعاقد من بعض المتاجر الكبيرة التي تنافس جوجل ستور وأبل ستور مثل : Catappult/Aptoide, MOO Store, ONE Store, Jio Games Store
مع العلم أن جميع هذه المتاجر تعمل على نظام Android فقط، بمعنى أنك في حال قمت بتطوير لعبة للأندرويد يمكنك ببضع خطوات أن تقوم بإنزال لعبتك على المتاجر المذكورة


AR Foundation


في هذه النسخة هناك العديد من الميزات التي تم إضافتها مثل : face-tracking, 2D image-tracking, 3D object-tracking, and environment probes


هناك العديد من الميزات الأخرى التي يمكنك مشاهدتها في الرابط الأصلي للإعلان عن النسخة هنا :
https://blogs.unity3d.com/2019/05/09/unity-2019-2-beta-is-now-available/

post

لمحة حول ميزات 2018.1 Unity النسخة التجريبية

السلام عليكم ورحمة الله وبركاته ، طرحت شركة unity تسخة تجريبية للإصدار الجديد لمحركها لعام 2018 تحت رقم إصدار 2018.1 ، حيث قامت بذكر أهم الأجزاء التي سيحتويه والتي ستكون مضمنة في النسخة النهائية من الإصدار، حيث سيحتوي الإصدار على الكثير من التحسينات والإضافات الجديدة مثل نظام التفاصيل الزائدة Tessellation for Metal و إستحدام كرت الشاشة في الإضاءة غير المباشرة GPU Instancing ، إضافة منظور ال PS4 لنافذة Game Resolution وتحسينات على نظام الجزئيات Particle system والتحسين على بلجت التصدير FBX وغيرها الكثير. وهنا ذكر لأهم الميزات لهذه النسخة :

* نظام تصيير جديد  Scriptable Render Pipeline

حيث قدمت الشركة في هذه النسخة نظام إظهار آني real-time rendering ذو الإختصار SRP ، حيث أنه تم تصميمه خصيصاً لمواكبة الأجهزة الحديثة وكروت الشاشة السريعة جداً ، فبدلاً من النظر إلى ملايين أسطر البرمجة بلغة السي ++ أصبح الآن بالإمكان التعامل معه بواسطة لغة السي شارب و عمل شيدرز سريع للمواد Material Shaders بسهولة. حيث ستقوم الشركة بوضع أنظمة جاهزة Templates تستطيع من خلالها إختيار طريقة العرض التي ستلائم مشروعك بتقسيمين : Lightweight  حيث سيكون مثالي لأجهزة الموبايل والأجهزة الخفيفة و High-Definition حيث سيكون ملائم للمواصفات العالية جداً مثل أجهزة الحاسوب وغيرها.

* أداة visual shader creation

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

* قريباً C# Job System

تحسينات وتطويرات ستكون متاحة قريباً تزيد من كفاءة اللعبة خاصة لمن يقوم بكتابة الأسطر البرمجة بلغة السي شارب

* تعديل على المواصفات الدنيا System Requirements

قامت الشركة بحذف العديد من الأمور التي كانت ضمنياً متاحة داخل المحرك وذلك بهدف جعل المحرك أكثر مرونة، وتركت باب الحصول على الميزات السابقة متاحة بتنزيلها منفصلة عن المحرك ، فقد قامت بفصل إمكانية إستيراد مواد Substance Designer materials وفصل Wii U  و فصل Windows XP in standalone player و فصل محرر MonoDevelop حيث أنها تنصح بإستخدام فيجوال ستوديو من شركة مايكروسوفت ، وقامت بزيادة مواصفات macOS إلى النسخة 10.11 على الأقل ، وهي تعمل على فصل نظام الجزئيات التقليدي  Legacy Particle System في النسخة القادمة وإستبداله بنظام جديد

يجدر بالذكر أن النسخة هي نسخة تجريبية ويمكنك تنزيلها والمشاركة بها من خلال هذا الرابط : https://unity3d.com/unity/beta

 

 

post

البرمجة كائنية التوجه OOP – الجزء الأول

البرمجة كائنية التوجه OOP :

السلام عليكم ورحمة الله وبركاته، عندما تم تطوير البرمجة كائنية التوجه Object Oriented Programming المعروفة بالإختصار OOP أحدثت ثورة كبيرة في علم البرمجة، فلقد قامت بحل العديد من الإشكاليات والمعضلات التي كانت تؤرق المطورين أنفسهم، سنأخذكم في جولة سريعة نشرح فيها أهم المبادئ للبرمجة كائنية التوجه ومن ثم نتطرق إلى كيفية إستخدامها داخل لغة #C مباشرة، فمن أهم مبادئها :

التغليف (Encapsulation ):

وتعني ببساطة منع الوصول إلى المتغيرات الموجودة داخل الكلاس بشكلٍ مباشر، والسماح بتعديلها أو استرجاعها من خلال دوال مخصصة لذلك، وتبرز أهمية التغليف في قدرتنا على وضع قواعد معينة للتعامل مع المتغيرات، مثلا لنفرض ان هناك متغير لتخزين عمر الشخص، لو أتحنا الوصول المباشر لهذا المتغير سنفقد أي تحكم بالقيمة التي سيدخلها الشخص الذي يستخدم هذه الفئة Class (مبرمج آخر)، ولربما لن يكون لديه معرفة كافية عن طريقة عمل هذه الفئة Class فربما سيفترض أن إدخاله للعمر 0 لن يسبب اي مشاكل، لكن هذا افتراض خاطئ، ربما في أحد دوال هذه الكلاس هناك عملية قسمة لمتغير آخر على هذا العمر، و القسمة على صفر تؤدي إلى حدوث خطأ، والمشكلة أن مثل هذه الأخطاء عادةً لا تظهر مباشرة لـ مستخدم الفئة Class، إنما يظهر الخطأ فيما بعد وربما أثناء عمل البرنامج لدى المستخدم النهائي وهي ما تعرف بإسم Run-Time Error، لكن لو قمنا بالسماح باستخدام هذا المتغير من خلال دالة فنستطيع التحكم وتنبيه المطور مباشرة عند ادخاله للرقم 0 للعمر، أو تحويل الـ 0 الى 1 او غيرها .. ولأن مطور الفئة Class يعرف آلية عملها بالتفصيل فيجب أن يحمي المتغيرات الموجودة داخلها.

الوراثة (Inheritance):

الوراثة هي عملية إنشاء كلاس جديد بنائاً على كلاس سابق، أو بمعنى آخر اشتقاق، وتبرز أهمية الوراثة في تمكيننا من إعادة استخدام أكواد مكتوبة سابقاً، وتعديل بعضها أو إضافة خصائص جديدة بدل من إعادة كتابتها كل مرة، وتسمى الفئة Class التي نرث منها بالأب Parent والتي نُورِّثُ إليها بالابن Son . لنفهم أهمية الوراثة نأخذ المثال التالي، لنفرض أن هناك فئة Class تقوم باستخدامها لإظهار زر على الشاشة، وهذه الفئة كتبها مبرمج غيرك وهي تعمل بكفائة، وداخل تطبيقك تحتاج لإضافة خصائص إضافية لهذا الزر ، أو خصائص غير موجودة حالياً، لنقل مثلاً خاصية النقر المزدوج، في هذه الحالة لديك عدة خيارات قد تستطيع القيام بها:
1 – الدخول إلى تلك الكلاس والقيام بتعديله وقد تقوم بتعطيل شيء فيها دون قصد.
2 – القيام بنسخ الكود الخاص بهذه الكلاس ولصقها ثم إجراء التعديلات واستخدام هذه الكلاس الجديدة، لكن في هذه الحالة أي شيء نقوم بتغييره او تطويره، او اصلاح بعض الاخطاء على الكلاس الأصلية يجب أن نغيره على هذه ايضاً، وهذا فيه إضاعة كبيرة للوقت.
3 – الوراثة ! عمل كلاس جديدة ترث الكلاس القديمة بكامل خصائصها، ثم تقوم بإضافة الخاصية الجديدة فقط، وبهذه الطريقة نتأكد من استمرارية عمل الكلاس القديمة بلا اي مشاكل، واي تطويرات على الكلاس القديمة ستنعكس ضمنياً على هذه الكلاس.

تعدد الأشكال (Polymorphism):

ويعني أن الكائن يمكن أن يتخذ أكثر من شكل، والفكرة ببساطة أن مجموعة كائنات ترث خصائصها من أب واحد، لكن كل منهم يقوم بتعديل هذه الخصائص لـ تقوم بأمر مختلف.
ومن أهم استخداماته هو القدرة على تمرير هذه الكائنات المختلفة إلى نفس الدالة، أي لو كان لدينا الكائنات التالية: مربع، مستطيل و مثلث، ولدينا كلاس اسمه Area للتعامل مع المساحات وفيها خاصية طباعة مساحة الشكل على الشاشة، بدون مفهوم تعدد الأشكال سيكون علينا أن نقوم بعمل ثلاث دوال لطباعة مساحة كل شكل من هذه الاشكال، مثلا PrintSquareArea و PrintTriangleArea و PrintRectangleArea لكن بتطبيق مبدأ تعدد الأشكال بإمكاننا الاكتفاء بـ دالة واحدة مثلا PrintArea وتستطيع استقبال جميع الاشكال، لانهم بالنهاية مشتقين من كائن واحد، وهذا ممكن ببساطة لان جميع الكلاسات الخاصة بهذه الاشكال يجب ان ترث من كلاس أب يمتلك الخصائص التي نحتاجها وليكن اسمه Shape مثلاً ولديه دالة CalculateArea لحساب المساحة، ثم تقوم كل كلاس ترث منه بتعديل طريقة حساب المساحة بما يناسبها، لكن المهم انها تمتلك هذه الدالة ! فتستطيع دالة الطباعة استدعاء الدالة على أي شكل يمرر لها دون الاهتمام بـ نوعه، المهم أنه يرث من اب يمتلك هذه الدالة فبالتأكيد أن الكائن الابن يمتلكها ايضاً.

تطبيق البرمجة كائنية التوجه OOP بواسطة #C

هناك بعض المصطلحات المرافقة للبرمجة كائنية التوجه التي يجب عليك كمطور الإلمام بها ومعرفتها، سنقوم بالتعرف عليها وإستخدامها مباشرة بشكل أسطر برمجة بإستخدام لغة C# ، وهنا  أهمها تباعاً :

1 – الفئات والكائنات (Classes and Objects)

الفئة هي عبارة عن نموذج أو وصف للكائن (blueprint)، أما الكائن فهو عبارة عن نسخة من هذه الفئة (instance)، على سبيل المثال، لو كان لدينا فئة Student فإننا نقوم بإنشاء كائنات من هذه الفئة كما يلي:

Student std = new Student();

فهنا لدينا Student هي النموذج العام، ثم قمنا بإنشاء كائن Std وهو مستقل بذاته، أي إذا قمنا بانشاء 10 كائنات، فإن التعديل على خصائص أحدهما لا يؤثر في الآخر، لكن التعديل على الفئة نفسها ينعكس على جميع الكائنات المنشئة منها. وهنا طريقة إنشاء الفئة Class في لغة #C :

Class Student
{
}

تتكون الفئة Class من التالي :
الخصائص والمتغيرات (properties): وهي عبارة عن البيانات التي يتم تخزينها داخل الفئة Class
الدوال (methods): ويمكن ان نقول انها تمثل سلوك هذه الكلاس أو بعبارة أبسط المهام والأمور التي تقوم بها هذه الكلاس، مثلا دالة Max لإيجاد الأكبر بين رقمين.
الأحداث (events): والأحداث عبارة عن قنوات للتواصل بين الفئات والكائنات المختلفة.

2 – الخصائص والمتغيرات Properties & Variables

يمكن أن نقوم بإضافة متغيرات Variables للفئات Classes في لغة ال #C كما يلي :

Class Student
{ 
       public int age;
}

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

Class Student
{ 
      private int age;
}

هنا يأتي دور الخصائص Properties والتي تقوم بتعديل أو طباعة قيمة هذا المتغير وتحافظ عليه من أي تعديل خارجي، حيث يمكننا تعريفها داخل لغة #C كالتالي :

Class Student
{
	private int _age;
	public int Age
	{
		get {return _age;}
		set 
		{
			if(value <= 0)
				_age = 1;
			else 
				_age = value;
		}
	}
}

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

Class Student
{
	Public int Age { get; set; };
}

3 – الدوال Methods

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

public int Method(string param)
{
// code
}

ويمكن للفئة Class امتلاك أكثر من دالة تحمل نفس الاسم، لكن بشرط اختلاف عدد المتغيرات الممررة لها Parameters او اختلاف نوعها، وهو ما يعرف ب overloading ، كالتالي :

public int Method(string param) {};
public int Method(int param) {};

4 – دوال البناء Constructors

دالة البناء هي دالة يتم استدعائها بشكل تلقائي عند إنشاء الكائن باستخدام new ويجب ألا تقوم بإرجاع أي قيمة، وان يكون اسمها نفس اسم الفئة Class، كما يمكنك انشاء اكثر من دالة بناء من خلال ال overloading وعادة تستخدم دالة البناء لتهيئة الكلاس ووضع قيم أولية لـ متغيراتها قبل البدء باستخدامه.وهذا مثال عليها

public class SampleClass 
{
	public SampleClass()
	{
	}
	public SampleClass(int age)
	{
	}
}

كما تلاحظ، قمنا بإنشاء دالتي بناء، الاولى سيتم استدعائها عندما ننشئ كائن بهذا الشكل

SampleClass sc1 = new SampleClass();

والثانية عند تمرير قيمة مثل

SampleClass sc1 = new SampleClass(22);

5 – الكلاسات المتداخلة Nested Class

بإمكاننا تعريف فئة Class داخل فئة أخرى، وتسمى nested class اي فئة داخلية أو متداخلة

class Main
{
	Class Nested
	{
	}
}

كما نلاحظ هنا الكلاس Nested موجودة داخل الكلاس Main ونستطيع استخدامها بهذا الشكل

Main.Nested nested = new Main.Nested();

6 – سماحية الوصول (Access Modifiers)

نستطيع التحكم بإمكانية الوصول إلى المتغيرات والدوال داخل الكلاس عن طريق ال Access Modifiers ، وهناك خمس أنواع :
عام (public): نستطيع الوصول إلى هذا المتغير أو الدالة من اي مكان في المشروع، او حتى من خلال مشروع آخر يعتمد على هذا المشروع.
خاص (private): نستطيع الوصول إلى هذا المتغير أو الدالة من خلال نفس الكلاس فقط، وليس من أي مكان آخر.
محمي (protected): نستطيع الوصول إلى هذا المتغير أو الدالة من نفس الكلاس او من كلاس أخرى مشتقة منها (أي ترث منها كما شرحنا سابقاً).
داخلي (internal): نستطيع الوصول إلى المتغير أو الدالة من نفس المشروع فقط، أي أن المشاريع الأخرى التي تعتمد على هذا المشروع لا تستطيع الوصول اليه.
داخلي محمي (protected internal): نستطيع الوصول إلى هذا المتغير أو الدالة من نفس المشروع أو من كلاس موجودة في مشروع آخر تشتق (ترث) من هذه الكلاس.

تم كتابة الجزء الاول من المقالة بواسطة Ward Mahmoud وترجمتها إستناداً إلى مقالة أصلية هنا، نلقاكم في الجزء الثاني قريباً إن شاء الله.

post

بولي Poly مقصدك للمجسمات الخاصة بالواقع الإفتراضي

السلام عليك ورحمة الله وبركاته، أطلقت شركة Google موقع متخصص بتحميل المجسمات القليلة التفاصيل والتي قامت بتسميته Poly ، حيث أنها أعطت الفرصة لمن يقومون بتطوير تطبيقات الواقع الإفتراضي Virtual Reality المعروف بالإختصار VR والواقع المعزز Augmented Reality المعروف بالإختصار AR ،بإستخدام ألاف النماذج 3D Models القابلة للتحميل المباشر والإستخدام في تطوير التطبيقات السابقة.

استخدم Poly في كل مكان:

من الجدير بالذكر أن معظم التصاميم الموجودة هي من خلال تطبيقي  Tilt Brush  و Blocks  التي تمكنك من تصميم النموذج داخل الواقع الإفتراضي، بالتالي يمكنك تصديره ليراه الجميع، حيث قامت شركة Google  بإيجاد خدمة Poly خصيصاً لرفع تصاميمك من التطبيقين السابقين، لكن هناك إمكانية لرفع النماذج التي قمت بصنعها خارج هذين التطبيقات بواسطة الإمتداد OBJ وملف الخامة الخاصة به MTL . أيضاً يمكنك إستدعاء أي نموذج للتعديل عليه أو إستخدامه في التطبيقين السابقين أو حتى في تطوير لعبتك على محرك الألعاب Unity.

ألاف النماذج تنتظرك:

يمكنك زيارة الموقع poly.google.com لتجد العديد من النماذج، فإن قمت بالبحث عن طائرة مثلاً ووضعت Plane ستجد عشرات النماذج، قم بإختيار أي واحدة منها وقم بتصديرها لتستخدمها في مشاريعك، لكن إنتبه أن هناك بعض النماذج يشترط عليك أن تقوم بذكر إسم صاحبه في حال إستخدمته في مشروعك. ليس هذا فحسب، بل يمكنك تحويل أي مجسم أعجبك إلى صورة متحرك Gif لتستطيع نقلها لأي مكان آخر بعد ذلك، كما في الصورة التالية:

 

 

post

النسخة 2017.2 من محرك Unity متاحة الآن!

السلام عليكم ورحمة الله وبركاته

عن النسخة :

النسخة التي وُعدنا بها من شركة Unity لمحركها الشهير Unity Engine أصبحت متاحة الآن! نعم النسخة 2017.2 أصبحت قابلة للتحميل، وبإمكانك الحصول عليها من هنا. التي تحتوي على العديد من الميزات الجديدة والتحديثات وحلول لمشاكل كانت تؤرق المطورين.

العناوين الرئيسية :

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

  • محرر المراحل Tilemap : 

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

مدير الإنتاج cinemachine الثنائي الأبعاد:

شهدنا في الإصدارات السابقة تواجد مدير الإنتاح الغني عن التعريف cinemachine للألعاب ثلاثية البعد 3D والتي بإمكانك التحكم في الكاميرات الموجودة في لعبتك وعمل الكثير من الميزات الحصرية التي تختصر عليه المئات من الساعات لعملها بمفردك، في هذه النسخة أصبحت الميزة متاحة لألعاب البعد الثاني 2D أيضاً، كما هو موضح في الفيديو السابق.

الدروس التفاعلية Interactive Tutorials :

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

ميزة إستيرا المجسمات Asset Management :

أو ما يعرف بالـ DCC المختصر من Digital Content Creation ، فالآن أصبح من السهل التعامل مع التطبيقات المختلفة مثل Autodesk وغيرها، ليس فقط إضافة ميزات لما تحويه هذه الملفات مثل الملف الشهير FBX الذي يحوي المجسمات والصور والحركة فحسب، بل إمتد الموضوع لإضافة مجسم جديد يمكنك إنشاءه وربطه لاحقاً بملف من تلك البرامج مما يتيح لك التعديل الآني ومن غير معاناة من إنتظار الوقت الكثير لإنعكاس التعديلات بين البرامج، فلقد تم إضافة Linked Prefabs  إلى قائمة الإنشاء كما هو موضح في هذا الفيديو :

إضافات للواقع الإفتراضي/المعزز XR :

يتضح جلياً تركيز المحرك على إعطاء القدرة القصوى لمطوريه للتماشي مع أكثر التطبيقات طلباً في الوقت الحالي، فقد إعتبرت كبرى الشركات مثل Microsoft و Sony و Google سنة 2016 على أنها سنة الواقع الإفتراضي VR المختصر من Virtual Reality والواقع المعزز AR المختصر من Argumented Reality بجدارة، أو ما يعرف كليهما بالإختصار XR ، فهناك العديد من الميزات التي تم إضافتها لتسهل العمل مع هذه التطبيقات، فها هي تضيف Vuforia  إلى محركها ضمنياً، وتدعم OpenVR و Google ARCore كما في الفيديو التالي :

ليس هذا فحسب، فهناك بعض الإضافات والتحسينات كالتالي :

+ ميزة Timeline للأصوات : بإمكانك الآن التعامل مع الأصوات أيضاً
+ تحديثات بالـ Profiler لتحليل اللعبة بشكل أكثر تفصيلاً
+ ميزة Lightmap background لإضافة لايت ماب للأماكن الفارغ سابقاً
+ أصبحت الأشجار يتم حساب ال Lightmap الخاص بها أيضاً
+ تحسينات على نظام ال Particle System

 

الخلاصة

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

post

محاكاة حركة أمواج البحار في محرك Unity

 

مقدمة :

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

إعرف ميزانيتك قبل البدء :

عندما أتكلم هنا عن الميزانية، لا أقصد إطلاقًا النقود، وإن كانت جزء من الميزانية إلا أنها ليست كل شيء، فعندما تريد إنجاز أي شيء ( نتكلم هنا عن مجال الألعاب )، تحتاج إلى معرفة تفاصيل معينة مثل، كم من الوقت تجتاجه لإنجاز هذا الأمر، أيضاً هل يتوافق مع متطلبات مشرعك، فمثلاً يمكننا الإستعانة بمحاكاة متوفرة على المتجر ومناسبة، إلا أنها تفتقر للعمل بشكل سلس على متصفح الويب مثلاً, بمعنى آخر أنك لن تستطيع الإستفادة من تلك المحاكاة إن كان مشروعك على متصفح الويب، لذلك لا تضع الوقت بالحصول عليها وتجربتها إن كانت لا تتناسب مع منصتك أصلاً!
مسك، المشروع الحالي الذي أعمل عليه وأديره، تطلب مني محاكاة لبحر يحيط جزيرة، ليس هذا فحسب، بل تطلب أيضاً محاكاة حركة السفن التي يحملها هذا البحر، فللوهلة الأولى قمت إختصاراً للوقت بالذهاب إلى متجر Asset Store للبحث عن شيء يتناسب مع ما أريد، ووجدت العديد منها هذه الأداة :

للوهلة الأولى بدى لي أن هذا ما أريده،  لكن بعد البحث والقراءة عن هذه الأداة وجدت أنها لا تتناسب مع ميزانيتي ( الوقت + المنصة ) فمشروعي سيصدر على منصة Web GL وهذا ال Shader لا يدعها بشكل كلي، فضاع جزء من وقتي بلا فائدة!

الحل أبسط مما تتخيل أحياناً :

بحثت كثيراً عن Shaders تتناسب وما أريد، لكني لم أجد شيء مناسب، ثم خطر ببالي أن أقوم بعمل خدعة ستوفر علي الوقت الكثير وتعطي كفاءة أعلى بكثير كونها تعتمد على حسابات أقل، فما لبثت أن شرعت في تنفيذها كالتالي:

  • – قمت بوضع وجه Quad واحد وقمت بجعله بحجم كبير لكي يبدوا وكأنه البحر، أي قمت بجعل الـ Scale له 2000 كل كل محور.
  • – ثم قمت بوضع صورة لموج قابلة للتكرار Seamless .
  • – ثم قمت بكتابة أسطر برمجية تقوم بعمل تحريك لإكساء المجسم Texture Scrolling ، كما في الصورة التالية :

عند هذه النقطة، حصلت على البحر كما في الصورة التالية :

لكن هذا وحده لم يكفي بالغرض، فضفاف الجزيرة وإمتداد الرمل يجب أن يبدوا واضحاً لإعطاء مصداقية بتدرج العمق، وكان الحل بتحويل Shader المادة التي أستخدمها من Standard إلى Particle –> Multiply كما في الصورة التالية :

عند هذه النقطة، إنتهيت من البحر نفسه، لكن بقي المشكلة هي حركة الأجسام التي تطفو عليه، فالبحر هنا عبارة عن وجه واحد فقط Quad وليس فيه أي حساب للتضاريس Deformation لكي يتأثر بها مجسم السفينة!

حركة السفينة :

بعد دراسة حركة السفينة إتضح لي أنه لا داعي لإشغال موارد الجهاز في حساب شيء قد يبدوا ثانوياً وليس أساسياً، فلجأت إلى محاكاة حركة السفينة عن طريق الأسطر البرمجية كالتالي :

بهذه الطريقة حصلت على المطلوب تماماً، وكنت راضياً جداً عن النتيجة!

الخلاصة المستفادة :

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

 

أسامة ديب
مطور ألعاب

 

 

post

بناء نموذج ذو جودة عالية وإظهاره داخل محرك Unity

خطوات تحويل صور إلى مجسم ثلاثي الأبعاد لإظهاره داخل محرك Unity

 لمحة عن المقالة:

السلام عليكم ورحمة الله وبركاته، في الآونة الأخيرة ظهرت برامج تساعد المنمذجين 3D Modelers لبناء نماذج حقيقية Models تحتوي على تفاصيل كثيرة High Details بالإضافة إلى الخرائط الخاصة بها Textures ، ولعل من أشهرها تطبيق Reality Capture ، هذه النماذج غالباً تحتاج لإعادة تنقيح قبل إستخدامها في محركات الألعاب بسبب حجمها الكبير، وغالباً يتم ذلك بواسطة برامج النمذجة مثل 3Ds Max أو Maya، قامت شركة Unity بكتابة درس تفصيلي من 100 صفحة تقريباً خطوة بخطوة من تجهيز الأدوات إلى تجهيز النموذج لوضعهم داخل لعبتك، سنقوم بسرد أهم العمليات المستخدمة في المقالة ثم وضع رابط للنسخة المفصلة.

الأدوات والتطبيقات المستخدمة :

بالنسبة للأدوات، تتراوح حسب قدرتك وحسب إمكانياتك المتاحة، كل ما كانت أدوات التصوير أفضل كلما حصلت على جودة أعلى، يمكنك إستخدام كاميرا الموبايل لكن النتيجة بالتأكيد لن تكون كمن يقوم بإستخدام كاميرا متخصصة للتصوير الفوتوغرافي، الكاميرا المستخدمة في المقالة هي Canon 6D مع العدة الخاصة بها.
أما بالنسبة للتطبيقات التي سيتم إستخدامها للتعديل وللإخراج النهائي فهنا أهمها:

– Reality Capture : البرنامج الذي ستستخدمه لتحويل الصور إلى مجسمات ثلاثية الألعاب ، رابط موقع البرنامج هنا.
– Autodesk 3ds Max : البرنامج الذي ستقوم بتعديل النموذج الأولي Raw model وإعادة بناءه Retopology لكي يصبح جاهز للإستخدام، أيضاً سيستخدم لعملية فرد الخرائط Unwrap UV ، رابط موقع البرنامج هنا.
– Adobe Photoshop : البرنامج الذي ستستخدمه لعمل تعديل على الخرائط الناتجة من البرنامج الأول Textures بحيث تتناسب مع النتيجة النهائية، رابط موقع البرنامج هنا.
– Unity : بالتأكيد لا ننسى المحرك الذي سنقوم بإظهار النموذج النهائي عليه، محرك اليونيتي مجاني ويمكن تحميله من هنا.
هناك بعض التطبيقات التي ستحتاجها في بعض التعديلات البسيطة أيضاً.

ما قبل التصوير:

هناك بعض القواعد الأساسية التي يجب أن تأخذها بالحسبان قبل البدء بعملية التصوير، أهمها:
– الإجابة على The 3 W’s : الشيء الذي تود تصويره What،  أفضل موقع يمكن الحصول عليه Where، أفضل وقت تستطيع الحصول على جودة عالية عليه When.
– صور أم فيديو : في النهاية يجب الحصول على صور من كل الزوايا لإعطاء إمكانية لبرنامج Reality Capture الحصول على جودة عالية.
– إعدادات الكاميرا : النتيحة تختلف كلياً حسب إعدادات الكاميرا المختارة، يجب أن تكون على دراية تامة بهذه الإعدادات.

الحصول على الصور :

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

معالجة النموذج :

بعد الحصول على الصور ووضعهم داخل تطبيق Reality Capture سيقوم بمعالجتهم وتحويلهم إلى مجسم 3D Model ، يجدر الإشارة إلى أن النموذج الناتج غالباً يحتاج إلى تعديل، سواءاً بإعادة ترتيب الأوجه Polygons Retopology ، أو بإعادة تركيب طريقة فرد المجسمات على الخريطة Unwrap UV Texture ، ويتم ذلك بإستخدام تطبيق 3ds Max .

معالجة خرائط النموذج :

أو ما يسمى 3D Model Textures ، وهناك العديد من الخرائط التي يتوجب عليك العناية بها للحصول على جودة عالية في إظهار النموذج، حيث ستستخدم هذه الخرائط في إخراج المادة النهائية Material التي تتأثر بفيزيائية المادة، ويتم إستخدام تطبيقات للحصول على هذه الخرائط أشهرها Xnormal، وهنا لمحة عن أهم الخرائط Textures المهمة :

– خريطة الألوان الأساسية Albedo Map: أو تسمى Diffuse Map، هذه الخريطة أساسية وتحتوي على الألوان الحقيقية للمجسم.
– خريطة التفاصيل Normal Map : وتحتوي على معلومات يتم إستخدامها لإظهار تفاصيل إضافية على المجسم إستناداً إلى زاوية الضوء.
– خريطة الظل الغير مباشر Ambient Occlusion Map : وتحتوي على الظلال الخفيفة التي تتواجد في حال عدم وجود مصدر ضوء مباشر على المجسم.
هناك العديد من الخرائط الأخرى أيضاً منها : Height Map, Vertex color Map,Object space Normals Map.

تجميع النموذج النهائي :

بعد الحصول على نموذج نظيف يمكن تصديره كـ FBX ، وبعد الإنتهاء من الخرائط الأساسية يمكن تصديرها كـ TGA لجودة عالية أو يمكن تحويلها إلى PNG لحجم أقل، بعد السابق يتم تجميعهم وإضافتهم داخل محرك الألعاب Unity ، لتظهر كما في الصورة التالية:

الكتاب الإلكتروني الأصلي الذي يحتوي على التفاصيل تجده هنا.