تقديم الميزات في المترو: Exodus c raytracing

صورة

مقدمة


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

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

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

الخطوات الأولى


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

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

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

من أجل الكمال ، قمت بالتقاط صور من لعبة تعمل بأقصى قدر ممكن من المعلمات ، ولكن بدون DLSS.

تحليل الإطار



الانتهاء من الإطار

يوضح التحليل الموجز للعرض مجموعة من الوظائف القياسية إلى حد ما ، باستثناء الإضاءة العالمية التي يؤديها تتبع الشعاع (GI raytraced).

قبل تقديم الصورة ، يتم تقليل مقياس الإطار السابق في قائمة انتظار حساب ويتم حساب متوسط ​​السطوع.

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

تملأ بطاقة GBuffer 4 أهداف تجسيدًا وفقًا للرسم البياني أدناه ، كما تكمل تعبئة المخزن المؤقت العمق.



1. استهداف بتنسيق RGBA8 مع albedo ، وربما ، Ambient Occasion في قناة ألفا ؛ على بعض الأسطح تبدو مظلمة للغاية.



2. الهدف بتنسيق RGB10A2 مع القواعد الطبيعية ، وربما قناع انتثار تحت سطح الأرض في قناة ألفا.



3. الهدف في تنسيق RGBA8 مع معلمات المواد الأخرى ، وربما المعدن وخشونة في قناة ألفا. الغريب ، أن قنوات RGB في هذه الحالة تحتوي على نفس البيانات بالضبط.


4. الهدف في شكل RG16F مع ناقلات الحركة 2D.

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

في قائمة انتظار الرسومات ، يتتبع GPU أشعة الإضاءة العالمية ، لكنني سأتحدث أكثر عن هذا أدناه.



قائمة انتظار حساب يحسب انسداد المحيطة ، انعكاسات ، وشيء مشابه التعرف على الحافة.

في قائمة انتظار الرسومات ، يتم تقديم خريطة ظل من أربع مراحل إلى خريطة بعمق 32 بت من الحجم 6k * 6k. المزيد عن هذا أدناه. بعد الانتهاء من خريطة الظلال الموجهة ، يتناقص دقة السلسلة الثالثة لأسباب غير معروفة إلى 768 * 768.


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

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


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


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

لم أجد الجزء الذي يتم فيه إجراء التنعيم ، لذلك سأتركه لاحقًا.

تتبع أشعة الضوء العالمية


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


عرض أعلى

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


عرض قريب

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


عناصر اللاعب

ومن المثير للاهتمام ، أن عناصر اللاعب هي أيضًا جزء من الهيكل المتسارع ، ولكن لسبب ما توجد تحت قدميه.


كسر السلخ؟


كسر السلخ مرة أخرى؟

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


عدد كبير من الأشياء

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


LOD فائقة الارتفاع ، كل مقياس والتبديل على غرار تماما

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

تقديم ظلال الاتجاه


الجزء الرئيسي من تقديم الظلال بسيط ولا يتطلب ذكرًا خاصًا ، ولكن هناك نقاط مثيرة للاهتمام هنا.


تنسجم التي صب الظل من غير المرجح


تفاصيل ضخمة في خرائط الظل


تنسجم التي يبدو أن استخدام المخزن المؤقت الفهرس خاطئ

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

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

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


تنسجم ويبدو أن ضعف السلخ

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

الجزء 2


صورة

تعديل بسيط



في الجزء السابق ، كتبت أن هدف التجسيد الثالث لمخزن GBuffer على الأرجح يحتوي على المعدن ، لكن يبدو أنه يحتوي بالفعل على لون براق. في البداية ، لم أر أي ألوان ولم أفهم لماذا تحتوي جميع قنوات RGB الثلاث على نفس البيانات ، لكن ربما كان ذلك بسبب عدم وجود انعكاسات لونية في المشهد. لهذا السلاح ، يحتوي المخزن المؤقت على العديد من الألوان المختلفة.

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


"تحسين لي!"

تركيب الشفافية ومكافحة التعرج


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


قبل تقديم الشفافية

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


بعد تكوين شفافية الإطار الحالي

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


بعد إضافة العتامة إلى الإطار الحالي

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


بعد TAA

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

عدسة مضيئة


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


عدسة مضيئة في التركيب الجاهزة

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


عدسة مضيئة في ازهر العازلة

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


هندسة عدسة مضيئة

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

تقديم التضاريس


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


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


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


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

راي تتبع الخدع


والآن حول ما كان الجميع ينتظر.

تدفق البيانات


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


اللاعب داخل السفينة

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


انتقل المشغل إلى الركن الأيسر العلوي من هذه الصورة.

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

الإغاثة وما هو تحتها


عدة جوانب لتنفيذ DXR في المترو: يمكن ذكر Exodus بخصوص التضاريس.


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


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


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


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


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

بلا رأس مع السلخ


لقد تحدثت بالفعل عن مشاكل تنسج الشباك ، لكنني لاحظت في هذا المستوى شيئًا آخر.


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


لاحظت أيضًا أن هذه الكائنات الصغيرة ، مثل الخفافيش ، ليس لها رؤوس في الهيكل المتسارع.


مثال آخر لاحظ الثقب حيث يجب أن يكون الرأس. لم أر حالة واحدة كان فيها الرأس مرئيًا.


نفس النوع من المخلوقات في وضع التنقيط. لاحظ أن الرأس مرئي بوضوح.


وهنا رسم خرائط رأس السلكي.

في الختام


هذا كل شيء لهذا اليوم. آمل أن تكونوا قد استمتعت بهذه النظرة إلى جوانب مترو: Exodus.

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

Source: https://habr.com/ru/post/ar447194/


All Articles