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

بولي 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

محاكاة حركة أمواج البحار في محرك 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 ، لتظهر كما في الصورة التالية:

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

post

كيف تصبح مصمم ألعاب ناجح

 

دور مصمم الألعاب Game Designer

السلام عليكم ورحمة الله وبركاته، يبقى الدور العام لمصمم الألعاب Game Designer هو كيفية عمل اللعبة بشكل صحيح أثناء عملية تصميمها، فهو يقوم بوضع الأهداف Objectives و القواعد Rules و الإجراءات Procedures ، ويقوم بوضع القصة وإعطاءها الحياة وهو أيضاً المسؤول عن التخطيط لكل ما يجعل اللعبة مقبولة، وهو من يقوم ببناء المرحلة Level Design سواءً بناءها على أسس الهندسة المعمارية أو رسم سكيتشات على الورق Blueprint، وهو أيضاً يقوم بتنسيق القصة (السيناريو العام) للعبة. فكل من كان يحلم في عمل مميز في هوليوود أصبح الآن بإمكانه فعل ما يريده بواسطة كتابة سيناريو القصة وإخراجها بشكل كامل، التخصصات السابقة أصبحت الآن متجزءة بشكل تخصصات كاملة، كل شخص مسؤول عن إحداها، لكن مطور الألعاب الناجح يجب أن يكون ملم بتفاصيل كل تخصص من باب تعلم شيء عن كل شيء، ولكن ما هي الأمور المطلوبة لتصبح مصمم ألعاب؟ وما هي المواهب والقدرات المطلوبة؟ وما هي أفضل طريقة لتصميم لعبة؟ هذا كله سنكتشفه من خلال هذه المقالة.

مصمم الألعاب يضع نفسه بدل اللاعب

يتمركز دور مصمم الألعاب وقبل كل شيء أن يتصرف وكأنه اللاعب، فالمصمم يجب أن يشاهد لعبته من زاوية أخرى وهي الزاوية التي يرى بها اللاعب Player هذه اللعبة، وعلى الرغم من أن هذا شيء سهل ولكنه للأسف يتم تجاهله، مما قد ينتج فجوة كبيرة في اللعبة بسبب هذا الخطأ البسيط، من البسيط أن نقوم بالتأكد أن تصميم الجرافيكس والقصة والبرمجة تسير بشكل صحيح، ولكننا نغفل عن أهم ميزة في اللعبة، وهي وجود الإثارة التي تدمج جميع ما سبق لنخرج بشيء متميز. وكمصمم ألعاب Game Designer فإن الجزء الأكبر من دورك يتمثل بالتركيز والحفاظ على تجربة اللاعب User Experience وملاحظة الأمور التي سيكتسبها من عملية اللعب، وأيضاً يجب أن لا تجعل الأمور التقنية (جرافيكس، وتأثيرات، وبرمجة) تطغى على هذا الجانب. دع كل شخص يهتم بتخصصه، فدع مسؤول الرسوميات Art Director يبدع بالتخيلات، ودع المنتج Producer يهتم بالميزانية، ودع المدير التقني Technical Director يهتم بمحرك الألعاب ومشاكله فمهمتك الأساسية هي أنه عندما يتم تسليم اللعبة للاعب يجب أن يندهش من طريقة اللعب Game play وببساطة أن يقول: !!Wow ولا يدع اللعبة في وقت قصير. وعندما نذكر مصطلح Game play يجب مباشرة أن يتبادر لذهنك الأمور التي سيكتسبها اللاعب من خلال لعبة وما هي الخبرات والأسس التي سيجدها في اللعبة.

 

مختبري اللعبة Game Testers

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

وهناك الكثير من المصممين الذي لا يدرجون الـ Game Tester بعملية تصميم اللعبة، لربما بسبب ضيق وقت العمل، أو أنه لا يريد أن يقوم المختبر بإزالة أشياء يظنها المصمم تضفي إيجابية على اللعبة، أو لربما أنهم يعتقدون أن ذلك سيكلفهم الكثير من النقود، أو أن اعتقادهم بأن عملية الاختبار تأتي ما بعد التسويق ومن خلال اللاعبين عبر العالم ولكنهم فعلياً يقومون بتضييع المزيد من الوقت والمزيد من التكلفة وأيضاً الكثير من الإبداع المتوقع من مختبري اللعبة، وذلك بسبب أن اللعبة ليست بطريق واحد للاتصال One-way بمعنى أنه ليس عليك طرح اللعبة ومن ثم إنتظار قدوم النقود!!، وليس الأمر أن يقوم المصمم بالتأكد من أن كل جزء من الأجزاء الوظيفية باللعبة تعمل بنجاح، الأمر يكمن في إيجاد الميزات التي يحب اللاعب أن تكون موجودة في لعبته المثالية Game Play وبالتأكد هذا لن تقوم بإكتشافه إلا من خلال الـ Game Tester.

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

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

 

المهارات

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

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

1 – مهارة التواصل مع مختلف الأشخاص

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

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

2 – مهارة العمل ضمن فريق

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

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

3 – قادر على معالجة الأمور عند الضرورة

في أغلب الأحيان وعندما يكون عندك حط زمني معين للمشروع Deadline ، ستضطر لأخذ قرار أحياناً يؤثر سلباً على جودة اللعبة ككل أو على سير عملية التطوير، ومن شأنه أن يولد مشاكل مستقبلية تستمر بالظهور واحدة تلو الأخرى حتى تصبح اللعبة ككل مجموعة من المشاكل لا يمكن حلها!!، فالألعاب نظامها ضعيف، وكل العناصر ترتبط إرتباطاً وثيقاً ببعضها، فعند ظهور خلل في عنصر معين، سيؤثر هذا العنصر سلبياً على كل العناصر وبالتالي على كل المشروع، وهذه القضية خطيرة خصوصاً في المراحل النهائية لتصميم اللعبة، فحين ينفذ الوقت ستظهر بعض المشاكل التي لم تتمكن من حلها، وستضطر لحذف بعض المراحل وبعض العناصر للحفاظ على العناصر التي تم تصميمها بشكل سليم، إنها كارثة حقيقية، ولكنها بالنهاية تساعدنا على فهم سبب إحتواء الكثير من الألعاب على تناقضات والتي غالباً ما تميت اللعبة قبل وصولها للسوق (Dead On Arrival (D.O.A بفترة وجيزة.

4 – قادر على الإستنباط من حوله

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

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

5 – قادر على الإبداع

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

من أكبر وأشهر مصممي الألعاب Nintendo’s Shigeru Miyamoto يقول:
“دائماً ما أنظر لطفولتي ولأحلامي وهواياتي التي تتميز بالإلهام عندما كنت طفلاً، ذهبت لحديقة ووجدت بحيرة كانت لطيفة ومذهل بالنسبة لي أن أعثر عليها وعندما تجولت في البلدان بدون خريطة، حاولت شق طريقي الخاص، ووجدت أشياء مذهلة، وأدركت مدى سعادتي بمغامرة مثل هذه.”
“When I was a child, I went hiking and found a lake. It was quite a surprise for me to stumble upon it. When I traveled around the country without a map, trying to find my way, stumbling on amazing things as I went, I realized how it felt to go on an adventure like this”
وفي كثير من ألعابه قام بالإستفادة مما حلم به ورآه في طفولته.

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

 

post

#13 المصفوفات Arrays – البرمجة بواسطة #C

رمز فتح مرحلة هذا الدرس في تطبيق طورني : YIL

تَعلُمُ البرمجةِ للمبتدئينَ كلياً بواسطةِ #C –  المصفوفات Arrays

السلام عليكم و رحمة الله و بركاته , و أهلا بكم في درس جديد من دروس سلسلة تعلم البرمجة للمبتدئين كلياً بواسطة الـ #C

في درس اليوم سنتكلم إن شاء الله عن المصفوفات أو الـ Arrays

تعريف المصفوفات :

يمكن تعريفها على أنها وعاء يحتوي على قيم بداخلها , أو هي عبارة عن صندوق فواكه يحتوي على عدداً من التفاح على سبيل المثال , و كل تفاحة لها قيمة الخاصة  ، و الصندوق الحامل لها يسمى المصفوفة .

 

نذهب إلى File  ثم New ثم project و نتأكد من اختيار #Visual Cو نختار Console App
تكلمنا سابقاً أن المكان المخصص لكتابة الأكواد البرمجية هو بين قوسي الدالة void Main

كي لا نضيع الوقت قمت بكتابة هذه الاسطر سابقاً و سأقوم بلصقها هنا

لاحظو أنني قمت بتعريف خمسة متغيرات هنا ، و كل متغير يحتوي على قيمة معينة

نريد الآن أن نقوم بالبحث عن الرقم 16 ، عندها سأكون مجبراً على كتابة جمل شرطية if statement  لكل متغير لكي أحصل على القيمة و أقارنها بالقيمة المطلوبة

في البداية نسأل هل قيمة المتغير number1 تساوي 16

ثم ننتقل إلى الثاني … الثالث ……. الخامس و هكذا

في هذه الحالة سأكون مضطراً لكتابة كل المتغيرات و كتابة عدد كبير من جمل if statement

هنا يأتي دور المصفوفة Array

سأقوم مبدئيا بتحويل الجمل السابقة إلى جمل ملاحظات

يمكن تعريف الـ array كالتالي

;int[ ] myNumber = new int [5]

لاحظو في هذا السطر قمت بتعريف مصفوفة اسمها myNumber  من النوع integer و تحتوي على خمس قيم

قمنا بكتابة الأقواس المربعة بعد النوع مباشرةً

الآن أصبح عندي 5 عناصر أو خمس خانات استطيع التعامل معهم

كيف يمكنني أن أقوم بإدخال قيم إلى هذه العناصر ؟

يمكننا فعل ذلك كالتالي :

;myNumber[0] = 10
;myNumber[1] = 22
;myNumber[2] = 14
;myNumber[3] = 66
;myNumber[4] = 22

الخانة الموجودة بين القوسين [ ] تسمى index

لذلك عندما تريد استدعاء عنصر ضمن المصفوفة تضع اسم المصفوفة و رقمه بين الأقواس [  ] مع ملاحظة أن الخانة الأولى يجب أن تحمل الرقم 0

إذاً من خلال الأسطر السابقة قمت بإدخال قيم إلى العناصر الموجودة ضمن الـ Array

الآن ماذا لو أردت أن أقوم بعملية استدعاء للقيم ؟

سأقوم من خلال التالي بطباعة قيمة أحد العناصر في المصفوفة

;Console.WriteLine(myNumber[2] )

 و لا ننسى كتابة الدالة ReadLine لنتمكن من مشاهدة النتائج.

نقوم بتشغيل التطبيق و نلاحظ أن التطبيق قام بطباعة القيمة 14

طريقة ثانية

الآن هناك طريقة ثانية لتعريف المصفوفة و إدخال القيم بها مباشرةً .

;int [ ] myNumbes = new int [ ] {1, 5 , 3 , 4 , 66 , 55 }

و كما تكلمنا لو اردنا طباعة القيمة رقم 3 فسنكتب :

; Console.WriteLine(myNumber[2] )

 

هناك إمكانية لطباعة ” عدد العناصر الموجودة داخل المصفوفة “

عن طريق التالي :

;Console.WriteLine(myNumber.Length)

هنا قمنا بطلب أخذ الـ Length ، و هو كم عدد العناصر الموجودة ضمن المصفوفة

و لو قمنا بعمل تشغيل للتطبيق ، سنحصل على القيمة 6 ، و هو فعلاً عدد عناصر المصفوفة السابقة .

في الاسطر السابقة استعملنا النوع integer ، و بالمثل يمكننا استعمال أي نوع آخر

مثلا هنا أقوم بكتابة

;  string[] myStrings = new string[] { “Ahmad”, “Mohammad”, “Shady”, “Safaa” }

و بالمثل سنقوم بطباعة قيمة العنصر رقم 3

 

;Console.WriteLine(myStrings[2] )

و لاحظ أنه قام بطباعة شادي

 

تحدثنا في المحاضرة السابقة عن For Loop Statement  التي تقوم بعملية تكرار لأوامر معينة ، لاحظة الآن سأقوم باستخدامها لطباعة كل عناصر المصفوفة

و ذلك كالتالي :

 

لاحظو أنه قام بطباعة كل عنصر من عناصر المصفوفة و ذلك بناءً على الـى Length

لاحظو أن عدد العناصر في المصفوفة هو 4 و هذا يعني أن myStrings.Length يساوي 4

و لذلك عندما وصل إلى الرقم 3 لقيمة i  فهو فعلياً وصل إلى آخر عنصر في المصفوفة ، و عندما أصبحت i = 4 يقوم بالخروج من الحلقة و ذلك لأن 4 تساوي 4 و ليست أصغر منها طبقاً لشرط الحلقة و بالتالي بعد أن أصبح شرط الحلقة غير محقق قام بالخروج منها

حلقة foreach

هناك أيضاً حلقة يتم استخدامها بشكل كبير مع المصفوفات ، ألا و هي  foreach

شرح هذه الحلقة :

بعد إضافة foreach  نقوم بتعريف متغير من النوع الذي تم تعريف المصفوفة به
و هنا قمنا بتعربفه من النوع string  تبعاً لنوع المصفوفة myStrings و بالنسبة لاسم المتغير الجديد فهو اختياري لأننا سنقوم باستخدامه حصراً ضمن الاقواس {  }

ثم نقوم بإضافة الكلمة المحجوزة in ثثم اسم المصفوفة و ذلك بدون أقواس [  ]

عمل الحلقة :

في كل مرة سيقوم بأخذ أحد العناصر (على الترتيب) ثم يقوم بإسناده الى المتغير name و يقوم بطباعته

و لاحظ أننا لم نقم بإعطائه الـ index  الخاص بالعنصر و إنما طلبنا منه أن يقوم بجلب جميع العناصر الموجودة داخل المصفوفة

 

 

هناك أيضاً إمكانية للتعامل بشكل أكبر مع المصفوفات :

 

إذا كان لدي نص معين و أردت أن أقوم بطباعة هذا النص بالعكس ( عمليةReverse )

هناك نوع جديد من أنواع البيانات هو النوع char و تكلمنا سابقاً أنه يقبل حرفاً واحداً فقط

;’char x = ‘a

الآن لدينا التالي :

;!! string myWords = “i need to go to the hospital now

يمكنني  أن أحصل على مصفوفة من myWords عن طريق الجملة :

;()Char[ ] x = myWords.ToCharArray

من خلال هذا الجملة نقوم بفصل جميع الحروف الموجودة في النص و تحويلها إلى عناصر في المصفوفة

myWords.ToCharArray تقوم بالعودة بمصفوفة يتم اسنادها للمصفوفة x  من النوع char

و نلاحظ هنا أننا قمنا بكتابة char و ليس فقط Array في myWords.ToCharArray لأنني أريد تحويل جميع الخانات خانة خانة إلى النوع char

الآن لو قمت بوضع بكتابة الحلقة foreach كما في التالي :

لو قمت بتنفيذ التطبيق سيقوم بطباعة الجملة حرف حرف في كل سطر

و لعكس المصفوفة نقوم بكتابة التالي :

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

 

طبعاً المصفوفات لها استخدامات أكثر مما تم ذكره ، و الدروس القادمة ستكون كفيلة بصقل مهارتك باستخدام الـ Array

نصل الآن إلى نهاية هذا الدرس ، ألقاك في الدرس التالي إن شاء الله .

ملخص الدرس :

تعريف المصفوفات:

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

المصفوفة Array :

يمكن تشبيه المصفوفة أنا عبارة عن صندوق فاكهة يحتوي تفاح، حيث أن هناك عدد كبير من التفاح غير أنه غير متساوي في المواصفات، فهناك الكبير وهناك ذو الحلاوة أكثر وهناك ذو الحمرة أكثر، غير أنهم يتشاركون بصفه أنهم جميعاً من النوع الواحد ألا وهو التفاح، والمصفوفة يمكن أن تكون أي نوع من أنواع البيانات الموجودة بداخل لغة السي شارب، سواءاً كانت نصية أو رقمية أو حتى متجهات ثلاثية البعد.
ويتم حجز المصفوفة بكنابة نوعها ثم أقواس مربعة ثم إسم المصفوفة ثم إعطاءها رقم للعناصر التي ستكون بداخلها هكذا :
int[] myNumbers = new int[5];

أو كما في المثال التالي :

مصطلحات الدرس :

Arrays :

Length :

foreach :

 index  :

Zero Base :

Reverse :

char :

ToCharAray :

 

post

#11 التعبيرات Expressions – البرمجة بواسطة #C

رمز فتح مرحلة هذا الدرس في تطبيق طورني : OSO

تَعلُمُ البرمجةِ للمبتدئينَ كلياً بواسطةِ #C –  العوامل والجمل والتعبيرات

العوامل والجمل والتعبيرات:

السلامُ عليكم ورحمةُ اللهِ وبركاته، وأهلاً بكمْ في الدرسِ الحادي عشر من دروسِ سلسلةِ، تَعلُمِ البرمجةِ للمبتدئينَ كلياً بواسطةِ السي شارب، سنتعرفُ على كافة أنواع الجمل البرمجية في لغة السي شارب، بالإضافة إلى كافة عوامل Operators اللغة و مفهوم التعبير Expression داخل تراكيب هذه اللغة. كما تعلمنا لبداية مشروع جديد نذهب إلى File ==> New ==> Project ، و سأقوم باختيار #Visual c  و من ثم Console Application ، وتكلمنا سابقاً أن المكان المخصص لكتابة الكود هو بين قوسي الدالة void Main ، سأقوم بتعريف المتغيرات التالية :

int x,   y,   z;

في السطر السابق، تسمى العملية عملية تعريف المتغيرات و تكون طبيعة هذه الجملة هي Variable Declaration  ، و هي جملة برمجية لحجز المتغيرات في الذاكرة، كما تعلمنا في الدروس السابقة، سأتابع وأكتب التالي :

;x  =  6
;y  =  44
;z  =  66

تسمى الأسطر السابقة: أسطر إسناد للمتغير Variables Assignment ، ولكن نتذكر وظيفة هذه الأسطر، دعنا نكتب جملة ملاحظة عنها، و تكلمنا عن كيفية كتابة جمل الملاحظة ، و تكلمنا عن أهمية جمل الملاحظة لتذكيرك بوظيفة الأسطر التي قمت بكتابتها، نكمل كتابة :

x  =  5 + 7;

في السطر السابق، استخدمنا عامل Operator الجمع المسمى Addition operator ، و إذا قمنا باستعمال الإشارات الباقية لعمليات الحساب فستكون كالتالي :

x  =  5 + 7;
y  =  4 – 2;
z  =  10 * 50;
x  =  10 / 2;

وهذه العوامل هي العوامل الأساسية للعمليات الحسابية Mathematical Operators ، أما في حال كانت القيمة المراد اسنادها لمتغير عبارة عن شيء مركب، فيمكن استخدام الأقواس لتحديد ترتيب أولويات العمليات المطلوبة كما في المثال التالي :

x  =  x + y * x – z;

قد تجد أن هذا التركيب للوهلة الأولى غير مفهوم لديك، و قد لا تكون على دراية بكيفية ترتيب العمليات الحسابية، فستسأل نفسك ما هي العملية التي تجري أولاً ، هل y * x ، ثم يتم جمع ناتجهما مع x  ثم يتم لاحقاً طرح z أم ماذا ؟ والحقيقة أن ترتيب الأولويات Order of Operations  هنا يتم باستخدام الأقواس ، حيث يتم إضافة الأقواس لإعطاء أولويات العمليات الحسابية و لتسهيل القراءة . فتصبح هذه الجملة بالشكل التالي :

x  =  ( x + y ) * ( x – z );

و يصبح المعنى ؛ قم بجمع (  x و y ) ثم قم بطرح ( z من x ) ثم قم بضرب الناتجين ببعضهما ، و حدث ذلك لأن الأولوية للأقواس دوماً

 

نكتب الآن :

If ( x == y)
}

{

تعلمنا أنه إذا اردنا أن نقوم بمقارنة ؛ هل قيمة هذا الجانب (x) تساوي قيمة الجانب الثاني (y)

هذا الـ Expression الموجود بين القوسين يسمى Equality operator و هو يقوم بعمل مقارنة بين طرفين و يقوم بإعطاء قيمة منطقية (True or False) و هذا عبارة عن Expression  و ليس عبارة حسابية أو إسناد قيم ، فعندما نرى x = 5 فهذا يعدّ عملية إسناد ، أما اذا رأينا إشارة مساواة مزدوجة فيكون عبارة عن Expression  و تكون القيمة True or False

 

لدينا هنا Expression  جديد يمكن أن نستخدمه ؛ ألا و هو :

If ( x < y )
}

{

هذا الـ Expression يسأل هل x  أكبر من y   ؟

ملاحظة: يخطئ البعض في تمييز الاشارتين أكبر و أصغر (  < & >)

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

و يسمى هذا الـ Expression  بـ ” Greater than operator “

و بالمقابل لدينا الـ Expression  المسمى “Less than operator”

و تكون جهة فم السمكة بالجهة المعاكسة للـ Expression السابق

 

لدينا الآن Expression  جديد ، و هو يسأل هل الطرف الأول x أكبر أو يساوي y

و  نلاحظ أن إشارة المساواة تمت اضافتها بعد العامل Greater than و

يسمى هذا الـ Expression بالاسم ” Graeter or equal operator ” و يكون بالشكل التالي :

if ( x >= y)
}

{

و بالطبع لدينا بالمثل الـ Expression  المعاكس للسابق و يكون بالشكل التالي :

if ( x <= y)
}

{

 و هو يسأل هل الطرف الأول أصغر أويساوي الطرف الثاني ؟ و يسمى Less than or equal operator

 

الآن سوف نتعلم إمكانية عمل أكثر من Condition  داخل الـ Expression  الواحد

تكلمنا سابقاً أن جملة الشرط تحتاج إلى شرط موجود بين القوسين (….)  لتقوم بتحديد هل هو [True or False]

الآن سوف نكتب التالي :

if ( x > y && z > y )
}

{

في هذا الـ Expression يلزم تحقق الشرطين (x > y) و (z > y) حتى تكون نتيجة الشرط ككل True  و يمكن توضيح ذلك من خلال التالي :

True && True = True

True && false = false

False && True = False

False && False = False

 

و في حال كانت النتيجة True  يتم تنفيذ جملة الشرط
و لتسهيل القراءة نستخدم الأقواس كما يلي :

if  (  (x  > y) && (z > y)  )

و يسمى العامل الشرطي ”  و  ” /  Conditional AND operator

 

نذهب الان لدراسة العامل الشرطي ”  أو  ” / Conitional OR operator  

و يكون بالشكل التالي :

if  (  (x  > y) || (z > y)  )

و هو يعني هل التعبير (x > y) أو (z > y) صحيح ؟؟

و يكتفي بتحقق أحد الشرطين لاعتبار النتيجة النهائية True و يمكن تلخيص ذلك كما يلي :

True || True = True

True || false = True

False || True = True

False || False = False

و كما نعلم إذا كانت القيمة النهائية True يتم تحقيق الشرط و البدء بتنفيذه

و الفرق بين ” العامل الشرطي (و) و العامل الشرطي (أو) هو أن العامل الشرطي (و) يتطلب تحقق كلا الشرطين ليعطي النتيجة True  … أما العامل الشرطي (أو) فيكتفي بتحقق أحدهما أو كليهما ليعتبر النتيجة النهائية True.

 

لاختبار ما سبق نكتب

;y = 6
;z = 7

if ( x == y)
}
;Console.WriteLine(“True”)
{

else
;Console.WriteLine(“False”)

;()Console.ReadLine

و يجب أن نضع الدالة Console.ReadLine  لنتمكن من مشاهدة نتيجة التطبيق

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

ملاحظة : كما تكلمنا سابقاً اذا كان لدينا تحت if  جملة واحدة فيمكننا إزالة الأقواس

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

نقوم بإضافة الجملة else

else
;Console.WriteLine(“False”)

نعود و نشغل التطبيق
و نلاحظ أن التطبيق أعطانا القيمة False ، و ذلك لأنه بالفعل الشرط لم يتحقق ، حيث أن x لا تساوي y

 

كذلك لدينا بالمثل الـ Condition  الذي يقول هل x لا تساوي  y

و تكون كتابته بالشكل

if ( x != y)
}

{

و لو قمنا بتطبيق هذا الكلام على تطبيقنا السابق لوجدنا النتيجة True  لأنه فعلا x لا تساوي y .

 

لنقم بتطبيق التالي على تطبيقنا السابق

نقوم بتغيير التعبير إلى (x > y) فنجد أن التطبيق سيعطينا False  و ذلك لأن x في الحقيقة أصغر من y

و لو قمنا بعكسه من “أكبر من” إلى “أصغر من” أي (x < y) فسنجد النتيجة True  لأن المقارنة صحيحة

 

الآن سنقوم بتجربة العامل الشرطي && كما سوف نرى :

if (  (z > y)  &&  (y > x)  )
}
;Console.WriteLine(“True”)
{
;()Console.ReadLine

فإذا كان True && True  تكون النتيجة النهائية True و يظهر التطبيق الكلمة True

لنقم بجعل النتيجة False  ، لذلك سنغير (y > x)  إلى (y == x)
عندها تصبح النتيجة النهائية False على رغم تحقق الشرط الأول ، إلا أن العامل && يتطلب تحقق الشرطين سوياً ليصبح True

 

نصل الآن إلى نهاية هذا الدرس ، ألقاك في الدرس التالي إن شاء الله .

 

ملخص الدرس :

 

الجملة البرمجية Statement :

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

التعبير البرمجي Expression :

خليط بين واحد أو أكثر من : القيم ، المتغيرات ، المعاملات ، الثوابت أو الدوال Methods تقوم لغة البرمجة بتنفيذه أو بتعمل مجموعة عمليات سواء كانت حسابية أو تنفيذية، وهذه بعض الأمثلة عليها :

التعبير الحسابي : x = 5 + 7
إستدعاء الدوال : Console.WrieLine(x)

العوامل البرمجية Operators :

هناك العديد من العوامل البرمجية أكثرها إستعمالاً هي :
– العوامل الحسابية ( الرياضية ) : لإجراء عمليات حسابية والتعامل مع الناتج، وهناك 4 عمليات أساسية هي الجمع + والطرح – والضرب * والقسمة / .
– العوامل المنطقية : هي عوامل غالباً تستخدم في مقارنة قيمتين وأشهرها معامل و ذو الإختصار && And Operator ومعامل أو ذو الإختصار || Or Operator .

مصطلحات الدرس :

Variable Declaration :

Assignment Operator :

Addition Operator :

Mathematical  Operator :

Order of Operations :

Expression :

Greater than Operator :

Less than Operator :

Greater or Equal Operator :

Less than or Equal Operator :

Conditional AND Operator :

Conditional OR Operator :

Condition :