المقدمة
لا يحتاج Doom Eternal إلى مقدمة منفصلة: فهو خليفة مباشر لـ Doom 2016 ، تم تطويره بفضل التكرار السابع لمحرك id Tech الداخلي لبرنامج id. في وقت من الأوقات ، أدهشتني الجودة العالية للمكون المرئي لـ Doom 2016 ، وبساطة الحلول التقنية وأناقتها. في هذا الصدد ، تفوق Doom Eternal على سابقتها في العديد من المجالات ، وبعضها يستحق تفصيلاً مفصلاً. سأحاول في هذا المقال التحليلي مناقشة كل منهم.
استلهم تحليلي من الصعب Adrian Courrèges حول Doom 2016 ( translation). في رأيي ، تقدم مثل هذه الأعمال لمحة عن مناهج حل بعض مشكلات التقديم لمشاريع AAA وبالتالي تصبح مواد تعليمية ممتازة. في هذا التحليل ، أخطط لمناقشة الميزات العامة وعدم الغوص بعمق في تعقيدات كل طريقة عرض وتمرير. بالإضافة إلى ذلك ، فإن بعض المقاطع في Doom Eternal متطابقة تقريبًا مع نظيراتها في Doom 2016 وتم تفكيكها بالفعل في أعمال Adrian Courrèges ، لذا يمكنني تخطيها.
أود أن أحدد بطريقة خاصة التدريس الصارمطبيعة المقال الحالي. لا أؤيد بأي حال الهندسة العكسية للمنتجات لغرض سرقة الملكية الفكرية أو أي نوايا خبيثة أخرى. إذا لم تكن قد لعبت Doom Eternal بعد ، فلا داعي للقلق: لقد غطيت فقط بداية اللعبة ، لذا فأنت لست في خطر المفسدين.
اذا هيا بنا نبدأ.
مع إصدار id Tech 7 ، أتاح انتقال المحرك من OpenGL إلى Vulkan API للمطورين العمل بكفاءة أكبر مع ميزات الجيل الحالي من وحدات معالجة الرسومات ، مثل الموارد غير المقيدة.
إطار واحد في Doom Eternal
أعلاه يمكننا أن نرى قسمًا من اللعبة قريبًا من البداية: تصميم داخلي به العديد من المعارضين وإضاءة حجمية. عن طريق القياس مع سابقتها ، فإن عملية التقديم في Doom Eternal هي المسؤولة عن العرض المباشر ، ولكن إذا تم إجبار Doom 2016 على العرض جنبًا إلى جنب مع G-buffering للأسطح العاكسة ، في حالتنا لا يتم استخدام المخزن المؤقت ويتولى العرض جميع المهام.
الابتعاد عن الملمس الضخم
مع إصدار لعبة Rage ، التي تم إنشاؤها على محرك id Tech 5 ، تعرف العالم على مفهوم تنفيذ مواد تسمى "القوام الضخم". تُستخدم هذه الطريقة في Doom 2016 ولكل إطار يتم عرض ما يسمى "نسيج افتراضي" مع معلومات حول الأنسجة المرئية. يتم تحليل النسيج الافتراضي في الإطار التالي لتحديد الأنسجة التي يجب تحميلها من القرص. ومع ذلك ، فإن الملمس الضخم لديه مشكلة واضحة: بمجرد دخول النسيج إلى مجال الرؤية ، يكون قد فات الأوان لتحميله ، لذلك يبدو النسيج ضبابيًا في الإطارات القليلة الأولى بعد ظهوره. مع إصدار معرف Tech 7 ، تخلى المطورون عن هذه الطريقة.
السلخ من خلال GPU
عادة ، حتى قبل تقديم أي نسيج وتظليل ، يقوم تظليل قمة الرأس بتقييم الجلد. يتم تنفيذ Skinning id Tech 7 مسبقًا بواسطة تظليل حسابي مع كتابة الرؤوس النهائية إلى المخزن المؤقت. بفضل هذا النهج ، لم يعد تظليل قمة الرأس بحاجة إلى بيانات سلخ ، وبما أنه لم يعد يتم إجراؤه على كل ممر هندسي ، ونتيجة لذلك ، تحدث مقايضات التظليل كثيرًا.
يتمثل الاختلاف الرئيسي بين السلخ في تظليل حسابي وتظليل قمة الرأس في كتابة النتيجة إلى مخزن مؤقت وسيط. كما هو الحال مع تظليل قمة الرأس ، لكل رأس ، يتلقى خيط تظليل الحساب تحويلًا لكل عظم يؤثر على الرأس. ثم يغير موضع الرأس مع كل تحول عظمي ويضيف جميع المواضع الجديدة وفقًا لوزن الجلود المخزنة في الرأس. نتيجة لذلك ، يمكن أن يستخدم تظليل قمة الرأس النتيجة من المخزن المؤقت لتفسيرها على أنها شبكة ثابتة. يوفر
الرابط مقالة ممتازة عن Compute Shader Skinning بواسطة János Turánszki.
من المفيد أيضًا ملاحظة أن Doom Eternal يستخدم نوعًا مثيرًا للاهتمام من التخزين المؤقت - Alembic Cacheيمكن مقارنته بالفيديو المضغوط القابل لإعادة التشغيل. تخزن هذه ذاكرات التخزين المؤقت الرسوم المتحركة المخبوزة ليتم إصدارها وتوسيعها أثناء تنفيذ البرنامج. نقلاً عن التحليل الفني لـ Digital Foundry ، يتم تطبيق Alembic Cache على مجموعة واسعة من الرسوم المتحركة ، من المشاهد السينمائية واسعة النطاق إلى المجسات الصغيرة على الأرض. هذا النهج مناسب بشكل خاص للرسوم المتحركة ذات التعقيدات في التنفيذ من خلال الرسوم المتحركة للجلد ، على سبيل المثال ، لمحاكاة المواد العضوية والأنسجة. إذا كنت مهتمًا بهذه التقنية ، فأوصيك بمراجعة عرض Axel Gneiting في Siggraph 2014 .
خرائط الظل
الخطوة التالية هي عرض الظل ، وللوهلة الأولى لا يختلف معرف Tech 7 والنهج السابق لإنشاء خرائطهم.
كما ترى أدناه ، يتم تحويل الظلال إلى نسيج كبير بعمق 24 بت وحجم 4096 × 8196 بكسل ، متفاوتة الجودة في الأماكن. لا يتغير النسيج بين الإطارات ، ووفقًا للعرض التقديمي "Devil is in the Details" في Siggraph 2016، يتم تخزين الهندسة الثابتة مؤقتًا في خريطة الظل لتجنب إعادة رسمها لكل إطار. الفكرة في حد ذاتها بسيطة: لا نحتاج إلى تحديث الظلال حتى تكون هناك حركة أمام مصدر الضوء ، وبالتالي يمكننا إعلان خريطة ظل "مخبأة": خريطة عادية بهندسة ثابتة ، لأننا نفترض أن الهندسة لا تتغير ... إذا تحرك كائن ديناميكي في مخروط العرض ، فسيتم نسخ خريطة الظل "المخزنة مؤقتًا" إلى الخريطة الرئيسية ، ويعاد رسم الهندسة الديناميكية فوقها. يسمح هذا الأسلوب بعدم إعادة رسم المشهد بالكامل في مخروط العرض في كل مرة يتم فيها تحديثه. بطبيعة الحال ، إذا تم تغيير الضوء ، فسيتعين إعادة رسم المشهد بأكمله من نقطة الصفر.
لتنعيم حواف الظلال عند أخذ عينة من الخريطة ، يتم استخدام عينات 3x3 PCF. نظرًا لأن ضوء الشمس يغطي عادةً جزءًا كبيرًا من البيئة ، يتم استخدام خرائط الظل المتتالية لتوزيع الجودة بشكل أفضل.
على سبيل المثال ، ألق نظرة على أطلس خرائط الظل. كلما زادت أهمية الضوء ، زادت المساحة على الشاشة أو كلما اقترب الكائن من الكاميرا ، زاد حجم الجزء المحدد من الأطلس - وهذا ضروري لزيادة التفاصيل. يتم تقييم هذه الاستدلالات ديناميكيًا.
سرعة العمق والتمرير المسبق
بدءًا من سلاح اللاعب ، يتم تقديم الأشكال الهندسية غير الشفافة والثابتة والديناميكية بالتسلسل إلى عمق الهدف. عادة ، من أجل عدم إجراء حسابات غير ضرورية لتظليل البكسل عند تقاطع محتمل للأشكال الهندسية ، يتم إجراء تمريرة أولية لمعالجة العمق مع إضافة النتيجة إلى المخزن المؤقت. نظرًا لأن إعادة رسم وحدات البكسل أثناء تقاطعها يؤدي إلى عمليات إعادة حسابات غير ضرورية ويؤثر سلبًا في النهاية على الأداء ، تصبح أهمية هذا النهج لا تقدر بثمن. مع التمرير المسبق للعمق ، يمكن لتظليل بكسل الإضاءة المباشرة التخلص من وحدات البكسل الإضافية عن طريق مقارنتها بمخزن عمق قبل الحساب الفعلي ، وبالتالي توفير موارد قيمة. كائنات
أسلحة
ثابتة كائنات
ديناميكية
في التمريرة المسبقة ، لا يتم عرض العمق فحسب ، بل أيضًا اللون المستهدف. في الهندسة الديناميكية ، يتم عرض السرعة من خلال متجهات الحركة ، أي موضع الموضع الحالي مطروحًا من موضع البكسل في الإطار السابق. نظرًا لأنه يتم تخزين الحركة في القنوات الحمراء والخضراء لهدف تصيير النقطة العائمة 16 بت ، نحتاج فقط إلى معرفة الحركة X و Y. ثم يتم استخدام هذه المعلومات في مرحلة ما بعد المعالجة لتطبيق التمويه وإعادة إسقاط الصقل الزمني. لا تحتاج الهندسة الساكنة إلى متجهات حركة ، لأنها "تتحرك" فقط بالنسبة إلى الكاميرا ويمكن حساب حركتها من خلال حركة الكاميرا نفسها. كما ترى في لقطة الشاشة أدناه ، ليس هناك الكثير من الحركة في مشهدنا.
العمق الهرمي Z
تتمثل الخطوة التالية في إنشاء سلسلة mip للمخزن المؤقت للعمق الهرمي: هذه السلسلة تشبه خريطة mip ، ولكن بدلاً من متوسط أربعة بكسلات متجاورة ، فإنها تأخذ أقصى قيمة لها. غالبًا ما يستخدم هذا النهج في الرسومات لمجموعة متنوعة من المهام ، مثل تسريع الانعكاسات والتخلص من الهندسة المعوقة. في حالتنا ، تتجاهل سلسلة mip الإضاءة والملصقات ، والتي سنتحدث عنها لاحقًا. في الآونة الأخيرة ، تم تنفيذ إنشاء mip في مسار واحد ، مع التسجيل في عدة mip-s مرة واحدة ، ولكن في Doom Eternal ، لا يزال التسجيل يتم بشكل منفصل لكل mip.
شارات شبكة
حتى الآن ، لم يكن لدينا وقت للتعرف على أي اختلافات كبيرة بين العمليات في Doom Eternal مقارنة بـ Doom 2016 ، لكن ملصقات الشبكة تتناسب مع هذه الفئة. هذه ملصقات صغيرة (مسامير ، شبكات ، نتوءات) والتي ، مثل الملصقات العادية ، يمكن أن تؤثر على أي خصائص سطح (عادي ، خشونة ، لون). ومع ذلك ، يتم تعيين ملصق شبكي نموذجي من قبل الفنانين أثناء تطوير الشبكة ، وعلى عكس الوضع القياسي للشارات في البيئة ، فإنه ينتمي إلى شبكته الخاصة. اعتمد Doom بشكل كبير على الشارات في الماضي ، وقد أدى الانتقال الحالي إلى الشارات الشبكية إلى زيادة تفاصيل ومرونة الرسومات.
لتحقيق هذه الميزة ، فإن التمرير الهندسي التالي يجعل معرفات كل ملصق في نسيج ثماني بت. علاوة على ذلك ، عند تطبيق الظلال ، نقوم بتجربة النسيج ومن خلال المعرفات نحصل على مصفوفة الإسقاط المرتبطة بكل دعوة للرسم. تقوم المصفوفة بإحداثيات البكسل من الفضاء العالمي إلى مساحة النسيج ، ثم يتم استخدام هذه الإحداثيات لأخذ عينات من الملصق ودمجها مع مادة السطح. هذه التقنية سريعة بشكل لا يصدق في تنفيذها وتفتح مجالًا واسعًا للفنانين للعمل مع مجموعة متنوعة من الشارات. نظرًا لأن المعرفات يتم تقديمها إلى نسيج 8 بت ، فمن المحتمل أن يكون هناك ما يصل إلى 255 ملصق على شبكة واحدة.
الشرط الوحيد لكل هذا هو أن جميع الزخارف اللاصقة مرتبطة بالعمليات عند عرض الشبكات. من خلال عملية عرض غير مرتبطة تمامًا ، يمكن للمطورين ربط جميع مواد الملصق مرة واحدة وفهرستها ديناميكيًا في التظليل. نظرًا لأن المطورين يستخدمون هذه الطريقة لتنفيذ العديد من الحيل الأخرى في اللعبة ، فسوف نتحدث أكثر عن عملية العرض غير ذات الصلة لاحقًا.
أدناه يمكننا أن نرى شبكة نسيج صائق. لتسهيل التصور ، يتم تلوين المعرفات بألوان مختلفة.
إلقاء الضوء والشارات
الضوء في Doom Eternal ديناميكي بالكامل ، ويمكن لما يصل إلى عدة مئات من المصادر الوصول إلى مجال الرؤية في نفس الوقت. بالإضافة إلى ذلك ، كما أشرنا سابقًا ، فإن الشارات في اللعبة لها أهمية كبيرة ، على سبيل المثال ، في نفس Doom 2016 ، تجاوز عدد الشارات الآلاف. كل هذا يتطلب نهجًا خاصًا للتخلص من الفائض ، وإلا فلن يتحمل الأداء شدة تظليل البكسل.
استخدم Doom 2016 إصدارًا قائمًا على المعالج لرفض الضوء العنقودي: تم جمع الضوء والشارات في "froxels" على شكل مخروطي ، والتي تمت قراءتها بعد ذلك أثناء التظليل عن طريق تحديد مؤشر الكتلة من موضع البكسل. كان حجم كل مجموعة 256 بكسل وتم تقسيمها لوغاريتميًا إلى 24 مقطعًا للحفاظ على شكل مربع. سرعان ما تم تبني هذه التقنية من قبل العديد من المطورين الآخرين ، وتم العثور على طرق مماثلة ، على سبيل المثال ، في ديترويت: كن إنسانًا وقضية عادلة.
بالنظر إلى العدد المتزايد من مصادر الإضاءة الديناميكية (المئات) والشارات (بالآلاف) ، لم يكن تجميع وحدة المعالجة المركزية لمجموعة الإضاءة كافية في Doom Eternal حيث أن وحدات البكسل أصبحت خشنة للغاية. نتيجة لذلك ، توصل المطورون إلى نهج مختلف لـ id Tech 7 ، ومن خلال التظليل الحسابي الذي تم تنفيذه في مراحل مختلفة ، قاموا بإنشاء أداة تحويل البرامج. أولاً ، يتم ربط الملصقات والضوء في شكل سداسي الوجوه (مسدس) ونقلها إلى جهاز تنقيط حسابي ، حيث يتم عرض الرؤوس في مساحة الشاشة. ثم يقوم تظليل الحساب الثاني بقص المثلثات على حواف الشاشة ويجمعها في مربعات بحجم 256 × 256 بكسل. في الوقت نفسه ، عن طريق القياس مع تجاهل الكتلة ، يتم تسجيل العناصر الفردية لمصادر الضوء والشارات في froxels ،وبعد ذلك يقوم التظليل الحسابي التالي بتنفيذ إجراء مشابه للبلاط 32 × 32 بكسل. في كل بلاطة ، يتم تمييز العناصر التي تجتاز اختبار العمق في حقل بت. يقوم التظليل الحسابي النهائي بترجمة حقول البت إلى قائمة من الأضواء التي تُستخدم في النهاية في ممر الضوء. ومن المثير للاهتمام ، أن مؤشرات العناصر لا تزال مسجلة في مجسمات ثلاثية الأبعاد تبلغ 256 × 256 بكسل ، على غرار نهج الكتلة. في الأماكن ذات الانقطاع الكبير في العمق ، تتم مقارنة الحد الأدنى لقيمة كل من قائمة المصابيح الجديدة والقائمة القديمة للمصادر المجمعة لتحديد عدد الأضواء في كل بلاطة.التي تستخدم في نهاية المطاف في ممر الإضاءة. ومن المثير للاهتمام ، أن مؤشرات العناصر لا تزال مسجلة في مجسمات ثلاثية الأبعاد تبلغ 256 × 256 بكسل ، على غرار نهج الكتلة. في الأماكن ذات الانقطاع الكبير في العمق ، تتم مقارنة الحد الأدنى لقيمة كل من قائمة المصابيح الجديدة والقائمة القديمة للمصادر المجمعة لتحديد عدد الأضواء في كل بلاطة.التي تستخدم في نهاية المطاف في ممر الإضاءة. ومن المثير للاهتمام ، أن مؤشرات العناصر لا تزال مسجلة في مجسمات ثلاثية الأبعاد تبلغ 256 × 256 بكسل ، على غرار نهج الكتلة. في الأماكن ذات الانقطاع الكبير في العمق ، تتم مقارنة الحد الأدنى لقيمة كل من قائمة المصابيح الجديدة والقائمة القديمة للمصادر المجمعة لتحديد عدد الأضواء في كل بلاطة.
إذا لم تكن قد تعاملت مع التنقيط التقليدي ، فقد لا يكون هذا الوصف الغني واضحًا لك. إذا كنت تريد التعمق في السؤال بمزيد من التفصيل ، فإنني أوصي باستكشاف المبادئ العامة لكيفية عمل هذه العمليات ، على سبيل المثال ، لدى Scratchapixel تحليل جيد جدًا للموضوع .
يتجاهل هذا النظام أيضًا "النطاقات" المزعومة المستخدمة للاستعلام عن رؤية اللعبة. نظرًا لأن تحويل البرامج إلى مؤشرات ترابط حسابية عملية طويلة ، فمن المحتمل أن يكون الإشغال منخفضًا جدًا ، وبالتالي فإن إضافة بعض الإطارات الإضافية ليس له أي تأثير تقريبًا على الأداء. مع وضع ذلك في الاعتبار ، من المحتمل أن يتم إلقاء الضوء بشكل غير متزامن ، وبالتالي يكون التأثير الصافي على الأداء ضئيلًا.
حجب الضوء المحيط في مساحة الشاشة
يتم حساب الانسداد المحيط بنصف الدقة بطريقة قياسية إلى حد ما: أولاً ، تنبثق 16 شعاعًا عشوائيًا من موضع كل بكسل في نصف الكرة ، ثم يتم تحديد الأشعة المتقاطعة مع الهندسة باستخدام المخزن المؤقت للعمق. وكلما زاد عدد الأشعة التي تعبر الهندسة ، زاد حجم العائق. تسمى هذه التقنية انسداد اتجاه مساحة الشاشة ، أو SSDO ، ويمكن العثور على وصف تفصيلي بواسطة Yuriy O'Donnell هنا . بدلاً من التخزين التقليدي لقيم الانسداد في نسيج أحادي القناة ، يتم تخزين الانسداد الاتجاهي في نسيج ثلاثي المكونات ، ويتم تحديد الانسداد الناتج من خلال المنتج النقطي فوق البكسل العادي.
نظرًا لأن الحساب يتم بنصف الدقة ، فإن النتيجة صاخبة تمامًا. لتحسين الجودة باستخدام مخزن مؤقت للعمق ، يتم تطبيق تمويه على الوجهين. عادةً ما يحدث حجب الضوء المحيط عند الترددات المنخفضة ، لذلك لا يمكن ملاحظة الضبابية عادةً.
ممر مستقيم غير شفاف
في هذا المقطع ، العديد من العناصر تقع أخيرًا في مكانها. على عكس Doom 2016 ، يتم تقديم كل شيء هنا مباشرةً من خلال العديد من أجهزة التظليل الضخمة الضخمة. من المفترض أن يكون هناك حوالي 500 حالة معالج وعشرات تخطيطات واصفات في جميع أنحاء اللعبة. يتم تقديم أسلحة اللاعب أولاً ، ثم الكائنات الديناميكية ، ثم العناصر الثابتة. يرجى ملاحظة أن الطلب ليس مهمًا بشكل خاص ، لأنه بفضل مقدمة العمق ، تلقينا بالفعل مخزنًا مؤقتًا للعمق ، ويمكنه استبعاد وحدات البكسل التي لا تتوافق مع العمق مسبقًا.
أسلحة اللاعب
الكائنات الديناميكية
المجموعة الأولى من الكائنات الثابتة
المجموعة الثانية من الكائنات الثابتة
بالنسبة لمعظم محركات ألعاب AAA ، تسمح الرسوم البيانية المظللة وميزات التظليل الثابت للمطورين بالإبداع مع جميع أنواع المواد والأسطح ، وكل مادة ، كل سطح ، تؤدي إلى تظليل فريد خاص بها. نتيجة لذلك ، نواجه مجموعة متنوعة لا تصدق من تباديل التظليل لجميع المجموعات الممكنة من ميزات المحرك. ومع ذلك ، فإن id Tech يختلف تمامًا عن مشاريع AAA الأخرى: فهو يجمع تقريبًا جميع المواد والميزات في عدد قليل من أجهزة التظليل الضخمة. يسمح هذا الأسلوب لوحدات معالجة الرسومات بدمج الهندسة بشكل أكثر إحكامًا ، والذي بدوره له تأثير إيجابي على الأداء. سنناقش ذلك لاحقا.
موارد غير منضمة
من الجدير بالذكر أن العملية الكاملة لتشكيل الرسومات تحتوي على فكرة "الموارد غير ذات الصلة". هذا يعني أنه بدلاً من ربط التمويه والانعكاسات وخشونة النسيج قبل كل مكالمة رسم ، يتم ربط القائمة الكاملة للأنسجة في المشهد مرة واحدة. يتم الوصول إلى الأنسجة من القائمة ديناميكيًا في التظليل من خلال المؤشرات التي تم تمريرها إلى التظليل بواسطة الثوابت. وبالتالي ، من خلال أي دعوة للرسم ، يمكنك الحصول على أي نسيج ، والذي يفتح الطريق للعديد من التحسينات ، والتي سنتحدث عنها الآن.
دمج مكالمات السحب ديناميكيًا
علاوة على بنية الموارد المنفصلة تمامًا ، يتم تخصيص جميع بيانات الهندسة من مخزن مؤقت كبير واحد . يخزن هذا المخزن المؤقت إزاحة الهندسة بأكملها.
هذا هو المكان الذي تلعب فيه أكثر تقنيات idTech 7 إثارة للاهتمام: الدمج الديناميكي لمكالمات السحب.... وهو يعتمد على بنية موارد منفصلة وذاكرة قمة مشتركة ، ويقلل بشكل كبير في النهاية عدد مكالمات السحب ووقت المعالج. قبل أن يبدأ أي عرض ، يقوم تظليل الحساب بشكل ديناميكي بإنشاء مخزن مؤقت للفهرس "غير المباشر" لدمج الأشكال الهندسية بكفاءة من الشبكات غير المرتبطة في استدعاء رسم غير مباشر واحد. لن يعمل دمج الاستدعاءات بدون موارد غير مرتبطة ، لأنه يعمل مع الأشكال الهندسية بخصائص مادة غير متطابقة. في المستقبل ، سيكون من الممكن استخدام المخزن المؤقت للمؤشر الديناميكي مرة أخرى ، لكل من تمهيد العمق ولإعدادات الإضاءة.
خواطر
يستخدم التظليل الحسابي الأكثر شيوعًا خوارزمية raymarching لإنشاء انعكاسات مساحة الشاشة. تصدر الخوارزمية شعاعًا من البكسل إلى الفضاء العالمي باتجاه الانعكاس ، والذي يعتمد على خشونة السطح العاكس. كان الشيء نفسه هو الحال في Doom 2016 ، حيث تم تسجيل G-buffer صغير كجزء من التمريرة الأمامية. ومع ذلك ، في Doom Eternal لم يعد هناك أي G-buffer ، وحتى انعكاسات مساحة الشاشة لا يتم حسابها في التظليل الحسابي بشكل منفصل ، ولكن على الفور في التظليل المباشر . من المثير للاهتمام معرفة كيف يؤثر هذا الانحراف في تظليل البكسل على الأداء ، حيث يبدو أنه على حساب زيادة الحمل على السجل ، كان المطورون يحاولون تقليل عدد أهداف التجسيد ، ونتيجة لذلك ، تقليل الحمل على النطاق الترددي للذاكرة.
غالبًا ، عندما لا تتوفر المعلومات المطلوبة في نسيج مساحة الشاشة ، تظهر عيوب التجسيد في التأثيرات المقابلة. غالبًا ما يظهر هذا في انعكاسات مساحة الشاشة في الحالات التي لا يمكن فيها انعكاس الأشياء العاكسة غير المرئية. عادة ما يتم حل المشكلة بالطريقة التقليدية ، باستخدام خرائط مكعب الانعكاس الثابت كنسخة احتياطية.
ولكن نظرًا لأن الزخارف الضخمة لم تعد تُستخدم في Doom Eternal ، فليست هناك حاجة أيضًا إلى الزخارف الاحتياطية.
حبيبات
محاكاة
في Doom Eternal ، يقع جزء من محاكاة معالج الجسيمات على أكتاف التظليل الحسابي ، نظرًا لأن بعض أنظمة الجسيمات تعتمد على معلومات مساحة الشاشة ، مثل المخزن المؤقت للعمق لمحاكاة التصادمات. في حين يمكن تشغيل أنظمة الجسيمات الأخرى في الإطار مرة واحدة وحسابها بشكل غير متزامن ، تتطلب مثل هذه المحاكاة بيانات تمهيدية للعمق الأولي. ما هو مميز ، على عكس محاكاة التظليل التقليدية للجسيمات ، هنا يتم تنفيذ المحاكاة من خلال تنفيذ سلسلة من "الأوامر" من المخزن المؤقت في التظليل الحسابي. يدير كل خيط تظليل جميع الأوامر ، من بينها يمكن أن يكون هناك العديد من تعديلات معلمة القتل أو البث أو الجسيمات. كل هذا يبدو وكأنه آلة افتراضية مكتوبة في تظليل. لا أفهم الكثير عن تعقيدات مثل هذه المحاكاة ، لكن النهج قائمفي عرض براندون ويتني "The Destiny Particle Architecture" في Siggraph 2017 . الطريقة في العرض تشبه إلى حد بعيد الطريقة التي وصفتها أعلاه وتستخدم في العديد من الألعاب الأخرى. على سبيل المثال ، أنا متأكد تمامًا من أن نظام محاكاة جسيمات نياجرا يعمل بطريقة مماثلة في Unreal Engine 4.
إضاءة
بالقياس مع Doom 2016 والطريقة الموصوفة في Siggraph 2016 ، يتم فصل دقة جزيئات الإضاءة عن دقة الشاشة الفعلية ، مما يمنح المطورين التحكم في دقة كل نظام جسيمات بناءً على الجودة وحجم الشاشة والتحكم المباشر. بالنسبة لتأثيرات التردد المنخفض ، يمكن توفير الإضاءة بدقة أقل بكثير مع عدم فقدان الجودة تقريبًا مقارنة ، على سبيل المثال ، بالشرر الذي يتطلب دقة عالية. يتم تخزين الإضاءة والاتجاه السائد للضوء في أطلسين 2048 × 2048 بكسل ، وكلاهما متاح لكل منهما يمر عبر موارد غير منضمة ، تمامًا مثل أي نسيج آخر. علاوة على ذلك ، لتصيير الجسيمات ، يتم رسم هندسة بسيطة من خلال أخذ عينات من هذه الأطالس.
جزء مكبر من أطلس الإضاءة.
السماء وتشتت
الآن سنتحدث عن الإضاءة الحجمية . يتكون تكوينه من أربعة تمريرات ويبدأ بإنشاء نسيج LUT ثلاثي الأبعاد لجو السماء من خلال تدفق الشعاع عبر السماء نفسها باتجاه مصدر الضوء.
من المرة الأولى ، قد لا تفهم بالضبط ما يعرضه النسيج في الصورة ، ولكن إذا قمنا بتدويرها 90 درجة وقمنا بمدها أفقيًا ، يصبح كل شيء واضحًا: لدينا تشتت للغلاف الجوي. نظرًا لأنه متغير عموديًا أكثر من أفقيًا ، فإن الدقة الرأسية تكون أكبر. يتم تمثيل الغلاف الجوي بواسطة كرة ، لذلك يُطلق على الدوران الأفقي عادةً اسم خط الطول وعادةً ما يسمى الدوران الرأسي بخط العرض. يُحسب الانتثار في الغلاف الجوي من خلال نصف الكرة الأرضية ويغطي خط طول 360 درجة وخط عرض 180 درجة لأعلى الكرة. لتغطية مسافات مختلفة للمراقب ، يحتوي نسيج LUT على 32 مقطع عمق ، وبدلاً من إعادة حساب بيانات السماء في كل إطار ، تنتشر العملية على 32 إطارًا.
بفضل نسيج LUT ، يحسب التمرير التالي تشتت الضوء بواسطة "froxel" المرصود بالقياس مع عائق كتلة على نطاق أصغر. يمكنك ملاحظة عدة شرائح ، من القريب إلى البعيد ، أدناه.
في التمرير الثالث ، يتم ضرب بيانات التشتت لكل خلية في كل خلية لاحقة في اتجاه العرض وكتابتها في نسيج ثلاثي الأبعاد جديد.
نتيجة لذلك ، يتم وضع الإضاءة الحجمية أعلى الصورة المقدمة من خلال أخذ عينات من النسيج ثلاثي الأبعاد الذي تم إنشاؤه حديثًا بناءً على عمق البكسل.
قبل
بعد
يتم عرض السماء "المرئية" النهائية في نصف الكرة إذا كانت في العرض. في هذا المشهد ، لم يتم تضمين السماء في المراجعة ، ولكن يمكنك أدناه إلقاء نظرة على مثال على عرض السماء في مشهد خارجي.
الشفافية
على غرار Doom 2016 ، يتم تقديم الشفافية عن طريق تمرير للأمام بعد الهندسة المعتمة عند وجود بيانات تشتت للضوء. يفقد نسيج المشهد في هذه الحالة الدقة (العينات المصغرة) ، ومن أجل "محاكاة" الشفافية بناءً على نعومة السطح ، يتم تحديد مستوى Mip مناسب. تساعد بيانات تشتت الضوء في إنشاء تشتت جيد بصريًا من داخل السطح.
يمكنك أن ترى أدناه مثالاً لسلسلة mip-mip-chain من المشهد ، حيث تقع أسطح أكثر شفافية في منفذ العرض.
للشفافية ، يتم فقد وحدات البكسل المتعلقة بها فقط في الدقة.
واجهة المستخدم
عادةً ما يكون آخر تمرير في الإطار هو واجهة المستخدم. كما هو الحال عادةً ، يتم تحويل الواجهة إلى هدف تصيير ثانوي كامل الدقة LDR (ثماني بتات) ، ويتم مضاعفة اللون مسبقًا بواسطة قناة ألفا. أثناء تعيين درجة اللون ، يتم فرض الواجهة على نسيج HDR. عادةً ما يكون الحصول على الواجهة للعمل مع بقية محتوى HDR في الإطار أمرًا صعبًا ، ولكن في Doom Eternal ، يعمل تعيين النغمات على قياس الواجهة بطريقة سحرية ويبدو طبيعيًا مقابل المحتوى ثلاثي الأبعاد الآخر.
المعالجة البعدية
أول شيء في مرحلة ما بعد المعالجة هو التعتيم : هذا التأثير ثنائي المسار يقرأ البيانات من نسيج اللون ومخزن سرعة مخصص. يجمع الممر الأول أربع عينات على المحور الرأسي ، والثاني - أربعة على طول المحور الأفقي. ثم يتم مزج حوامل الألوان وفقًا لحركة البكسل. لتجنب التعتيم ، يجب أن يضمن مخزن السرعة المخصص عدم وجود ظلال وأن سلاح اللاعب مستبعد من العملية.
بعد ذلك يأتي التأثير المستهدف: يحتوي نسيج RG (ثنائي اللون) 1 × 1 هذا على متوسط إضاءة المشهد بأكمله ويتم حسابه عن طريق تقليل دقة نسيج اللون على التوالي والحصول على متوسط الإضاءة لمجموعة من البكسلات. في أغلب الأحيان ، تُستخدم هذه التقنية لمحاكاة تعويد العين البشرية على تغير حاد في السطوع المحيط. أيضًا ، يتم استخدام متوسط الإضاءة عند حساب التأثير أثناء تعيين النغمة.
بعد كل هذا ، تم حساب بلوم . هذا التأثير ليس كافيًا في مثالنا ولن يكون من الممكن عرضه على نطاق واسع ، لكن يكفي أن نعرف أن الحساب يتم من خلال الحصول على بيانات ملونة أعلى من حد معين وتقليل دقة النسيج تدريجيًا لطمسها.
ثم تعيين النغمةيجمع كل التأثيرات. يقوم تظليل حساب واحد بما يلي:
- يطبق تشويه
- يجسد نسيج بلوم
- تحسب التظليل والأوساخ على الكاميرا والانحراف اللوني وتوهج العدسة والعديد من التأثيرات الأخرى
- يحصل على قيمة التعريض على أساس متوسط الإضاءة
- يسمح بتعيين درجات الألوان لتوزيع ألوان HDR على النطاقات الصحيحة لكل من LDR و HDR عبر مشغل خرائط لوني مخصص.
أخيرًا ، الواجهة متراكبة في الأعلى. يتم تقديم
نسيج التشويه حتى قبل مرور ما بعد المعالجة: يتم تحويل الهندسة مثل ضباب النار من تأثيرات الجسيمات إلى هدف تجسيد جديد بتنسيق بربع الدقة الأصلية. في هذا التصيير ، يتم تخزين بيانات التشويه في القنوات الحمراء والخضراء ، والانسداد باللون الأزرق. يتم تطبيق البيانات التي تم الحصول عليها عندما يتم تشويه الصورة في خطوة تعيين الدرجة اللونية.
خاتمة
انتهى الانهيار السريع الذي قمنا به من لقطة واحدة لـ Doom Eternal ، على الرغم من أنني متأكد من أنني لم أتطرق إلى بعض الأشياء التي تؤثر على مظهر اللعبة. في رأيي ، يعد Doom Eternal نجاحًا تقنيًا مذهلاً ، وستكون ID Software قادرة على رفع المستوى أكثر في المستقبل. لقد أثبت فريق التطوير لنا بنجاح كيف ساعد التفكير الذكي والتخطيط الفعال في إنشاء لعبة عالية الجودة ، وأعتقد أن هذا نموذج رائع ، بالإضافة إلى مادة تعليمية. إنني أتطلع إلى التطورات المستقبلية من خلال برنامج id.
تمزق وتمزق حتى يتم ذلك.