قم بإنشاء مقاطع فيديو بانورامية في Unity



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



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





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



يمكن أن يوفر ذلك للأشخاص تجربة غامرة أكثر ويعطيهم فكرة عن الهدف من لعبتك. استفادت أفلام مثل It (انظر المقطع الدعائي أدناه) و The Conjuring استفادة كاملة من ذلك من خلال إنشاء ألعاب VR (مع مقطورات في فيديو بانورامي) للحصول على تجربة أكثر تفاعلية.





أخيرًا ، تعد مقاطع الفيديو البانورامية رائعة للأغراض التعليمية ، كما هو موضح في All Discovered Exoplanets: A Narrated 360 VR Journey .



التعامل مع الفيديوهات البانورامية



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





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



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



يوضح الجدول متطلبات هذين النوعين من مقاطع الفيديو.



اسم 360 درجة فيديو فيديو الواقع الافتراضي
كثرة الوحيدات ستيريو
2 د ثلاثي الأبعاد
حلقة الوصل الدعم الدعم
تردد الإطار 24 ، 25 ، 30 ، 48 ، 50 ، 60 25 ، 30 ، 50 ، 60
شكل

نسبة أبعاد متساوية 2: 1


نسبة أبعاد متساوية أعلى من 1: 1
الدقة الموصى بها: 7168 × 3584 ، حتى 8192 × 4096 5120 × 5120 إلى 8192 × 8192


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



عرض الفيديو



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



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



ومع ذلك ، غالبًا ما يتم استخدام الإسقاط متساوي المستطيل في مقاطع الفيديو البانورامية (انظر أدناه).





الصوت المكاني



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



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



لا يحتاج الفيديو البانورامي إلى صوت مكاني. يدعم YouTube تنسيقين:



  • Ambisonics من الدرجة الأولى
  • Ambisonics من الدرجة الأولى مع ستيريو مغلق الرأس


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



على الرغم من أن FOA يستخدم 4 قنوات ، إلا أن YouTube يدعم أيضًا إصدارًا من 6 قنوات ، والذي يضيف ببساطة قنوات الاستريو التقليدية اليمنى واليسرى. هذا التنسيق يسمى FOA مع Head-Locked Stereo...



يجب إيلاء اهتمام خاص لتشفير الفيديو البانورامي (ستريو أو أحادي) لأن ليست كل التنسيقات تدعم 4 أو 6 قنوات صوتية. يوصي موقع YouTube بما يلي:



  • التنسيق: MP4 ، MOV
  • الترميز: H.264 و ProRes و DNxHR


إذا كنت تستخدم Premiere Pro 2018 أو أحدث ، فمن الأفضل تشفير الفيديو الخاص بك كبرنامج ترميز Quicktime ProRes. يمكنك قراءة المزيد حول تنسيقات الصوت المكاني المدعومة من YouTube هنا .



كيفية إنشاء فيديو بانورامي في الوحدة



إحدى الميزات العديدة المضافة في Unity 2018.1 هي القدرة على التقاط لقطات شاشة من الكاميرا بتنسيق متوافق مع مقاطع فيديو YouTube البانورامية. تم وصف هذه الميزة بإيجاز في منشور على موقع Unity على الويب: صورة استريو 360 والتقاط الفيديو . لسوء الحظ ، لا يوجد مرجع للمشهد فيه للاختبار.



نظرية



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



يعد تقديم مشهد بانورامي في Unity عملية بسيطة إلى حد ما من ثلاث خطوات:



  • عرض مشهد على نسيج خريطة مكعب (تنسيق Unity المفضل للتركيبات البانورامية)
  • تحويل خريطة مكعب إلى إسقاط متساوي المستطيل (التنسيق المفضل لمقاطع فيديو YouTube البانورامية)
  • احفظ الإسقاط متساوي البعد كـ PNG


الخطوتان الأوليتان ضروريتان بسبب طريقة عمل الكاميرات في Unity.



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





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



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



ستكون الخطوة الأخيرة هي تصدير النسيج متساوي البعد إلى ملف PNG. بعد عرض جميع إطارات الفيديو ، يمكنك دمجها باستخدام برنامج مثل ffmpeg أو Premiere Pro.



الرمز



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



كثرة الوحيدات



لنبدأ بالإصدار الأحادي:



public class Camera360 : MonoBehaviour
{
    public Camera Camera;
    
    public RenderTexture EyeCubemap;
    public RenderTexture EquirectTexture;

    void Update ()
    {
        Camera.RenderToCubemap(EyeCubemap, 63, Camera.MonoOrStereoscopicEye.Mono);
        EyeCubemap.ConvertToEquirect(EquirectTexture, Camera.MonoOrStereoscopicEye.Mono);
    }
}


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



القيمة 63المستخدمة في الطريقة RenderToCubemapأننا نريد التقاط لقطات شاشة من الجوانب الستة للمكعب.



كلاهما EyeCubemap، EquirectTextureويمكن إنشاؤه إما في المحرر أو في التعليمات البرمجية.





ستيريو



رمز إصدار الاستريو مشابه جدًا ، لكنه يتطلب خطوة إضافية:



    void Start ()
    {
        Camera.stereoSeparation = 0.064f; // 64mm
    }

    void Update ()
    {
        Camera.RenderToCubemap(EyeCubemap, 63, Camera.MonoOrStereoscopicEye.Left);
        EyeCubemap.ConvertToEquirect(EquirectTexture, Camera.MonoOrStereoscopicEye.Left);

        Camera.RenderToCubemap(EyeCubemap, 63, Camera.MonoOrStereoscopicEye.Right);
        EyeCubemap.ConvertToEquirect(EquirectTexture, Camera.MonoOrStereoscopicEye.Right);
    }


لتجسيد صورة مُجسمة ، تحتاج إلى عرض خريطتي مكعب. stereoSeparationيحدد المسافة بين هذه الخرائط المكعبة. القيمة القياسية هي 64 مم ، وهي تساوي تقريبًا المسافة بين العين اليمنى واليسرى.





إنشاء وحفظ القوام



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



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



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



public string FileName;

void Update ()
{
    ...    

    // Creates buffer
    Texture2D tempTexture = new Texture2D(EquirectTexture.width, Equirect.height);

    // Copies EquirectTexture into the tempTexture
    RenderTexture currentActiveRT = RenderTexture.active;
    RenderTexture.active = EquirectTexture;
    TempTexture.ReadPixels(new Rect(0, 0, EquirectTexture.width, EquirectTexture.height), 0, 0);

    // Exports to a PNG
    var bytes = tempTexture.EncodeToPNG();
    System.IO.File.WriteAllBytes(FileName, bytes);

    // Restores the active render texture
    RenderTexture.active = currentActiveRT;
}


شريطة أن FileNameيحتوي على المسار الصحيح لملف PNG ، فإن الكود أعلاه سيؤدي المهمة. لا يوجد سوى تغيير صغير واحد يجب إجراؤه: تأكد من أن البرنامج النصي لا يستبدل نفس الملف مرارًا وتكرارًا. للقيام بذلك ، ما عليك سوى إضافة عداد اسم الملف لإعادة الكتابة المتكررة frame.png، الذي كان يكتب به frame_0.png، frame_1.pngوما إلى ذلك.



مشاكل



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



أداء



عرض الإطارات البانورامية في Unity مهمة مكلفة للغاية. في الحل الخاص بي ، يتم عرض المشهد 6 أو 12 مرة (اعتمادًا على تنسيق الفيديو - أحادي أو ستريو). يمكن أن تؤدي المعالجة اللاحقة المطلوبة لدمج الصور وحفظ كل إطار على القرص إلى تقليل الأداء بعامل 10-15. إذا عرضت مقطع فيديو بجودة عالية (8192 × 8192 بكسل) ، فيمكن أن يزيد حجم كل إطار فردي عن 100 ميغابايت. من الواضح أنه إذا لم يكن لديك آلة قوية جدًا ، فلن تتمكن من اللعب في الوقت الفعلي وتصدير اللقطات البانورامية في نفس الوقت.



المعالجة البعدية



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





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



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



عارضات الخط



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



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



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



أنظر أيضا:






All Articles