كيف يعمل عرض الألعاب ثلاثية الأبعاد: التركيب وتصفية النسيج

صورة

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

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

الجزء 1: معالجة الرأس

الجزء 2: التنقيط وتتبع الشعاع

لنبدأ ببساطة


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

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

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

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


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

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

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


Barrett and Cloud في كل عظمة تظليل Gouraud (Final Fantasy VII ، 1997)

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

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

تاريخ اللعبة وجرافيك باختصار


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

لكنها فعلت شيئًا آخر أيضًا - فقد أظهرت ما يمكن القيام به باستخدام OpenGL (كانت واجهة برمجة التطبيقات للرسومات هذه في حالة الإصدار الأول في ذلك الوقت) ، وساعدت أيضًا الكثير من الجيل الأول من بطاقات الرسومات مثل Rendition Verite و 3Dfx Voodoo .


قمم الإضاءة والقوام البسيط. نظف عام 1996 ، زلزال نظيف.

وفقًا للمعايير الحديثة ، كان Voodoo بسيطًا للغاية: لا يوجد دعم للرسومات ثنائية الأبعاد ، ولا توجد معالجة للرأس ، فقط معالجة أبسط بالبكسل. ومع ذلك ، كانت جميلة:


صورة: متحف VGA

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

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


مواصفات 3Dfx. المصدر: Falconfly Central

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

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


الصورة: أخذ مدونة مبادرة التكنولوجيا

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

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

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

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

أساسيات التركيب


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

يحتوي كل رأس من المضلع على مجموعة من إحداثيات (يشار إليها عادة باسم u ، v ) ، تخبر الكمبيوتر عن أي بكسل من النسيج يرتبط به. تحتوي القمة نفسها على مجموعة من ثلاثة إحداثيات ( x ، y ، z ) ، وتسمى عملية ربط texels بالقمم رسم خرائط النسيج .

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


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

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

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


حجم الصندوق في تنسيق gif الأصلي بحجم 66 كيلو بايت ودقة 256 × 256 بكسل. الدقة الأولية لجزء من الإطار الذي تغطيه مواد الصندوق هي 1900 × 680 ، أي من وجهة نظر "منطقة" البكسل ، يجب أن تعرض هذه المنطقة 20 مادة فقط.

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


لا تنس أن النسيج له حجم 256 × 256 بكسل فقط ، ولكن هنا نرى نسيجًا أكبر من نصف الصورة بعرض 1900 بكسل. تعرض هذا النسيج لعملية "تكبير النسيج" .

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

تظهر نسخ مصغرة من الأنسجة على المشهد


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

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

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

بمعنى ، بالنسبة إلى بنية الصندوق ، ستكون الأبعاد: 256 × 256 ← 128 × 128 ← 64 × 64 ← 32 × 32 ← 16 × 16 ← 8 × 8 → 4 × 4 → 2 × 2 → 1 × 1.


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

يمكن للقراء اليقظين أن يلاحظوا عدم وجود مواد mip - عليهم أن يدفعوا لهم من خلال زيادة حجم القوام. كان النسيج الأصلي للمربع 256 × 256 بكسل ، ولكن كما ترى في الصورة أعلاه ، فإن النسيج ذو القوام الصغير يبلغ حجمه الآن 384 × 256. نعم ، يحتوي على مساحة فارغة كبيرة ، ولكن بغض النظر عن كيفية حزم مواد أصغر ، بشكل عام سيزداد حجم النسيج على جانب واحد بنسبة 50٪ على الأقل.

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

فيما يلي مقارنة بين الصور مع زخارف mip معطلة / ممكّنة:


على الجانب الأيسر من الصورة ، تم استخدام أنسجة المربعات "كما هي" ، مما أدى إلى ظهور الحبيبية وما يسمى بالموير في المسافة. على اليمين ، يُسمح باستخدام زخارف mip لانتقالات أكثر سلاسة ، وفي الأفق يتم تعتيم بنية الصندوق إلى لون موحد.

ومع ذلك ، من يريد القوام الباهت أن يفسد خلفيات لعبتهم المفضلة؟

Bilinear ، ثلاثي الخطوط ، متباين الخواص - كل هذا بالنسبة لي خطاب صيني


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

ولكن بما أن الأمر ليس كذلك ، فهناك العديد من العوامل التي يجب مراعاتها عند أخذ عينات القوام:

  • هل تم تقليل النسيج أو تكبيره؟
  • هل النسيج هو مصدر أو نسيج mip؟
  • في أي زاوية يتم عرض النسيج؟

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

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

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


هنا استبدلنا نسيج الصندوق بحرف R ، لإظهار الفوضى التي تتحول إليها الصورة دون تصفية القوام!

توفر واجهات برمجة التطبيقات الرسومية مثل Direct3D و OpenGL و Vulkan نفس مجموعة أنواع التصفية ، ولكن تستخدم أسماء مختلفة لها. في الواقع ، جميعهم يتلخصون في ما يلي:

  • قرب نقطة أخذ العينات
  • تصفية الملمس الخطي
  • ترشيح نسيج متباين الخواص

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

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

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


يشير T إلى لون texel ، حيث f هي نتيجة الترشيح ، و 1-4 هو لون أربعة texels عينات. ألفا و بيتا القيم والمتخذة اعتمادا على مدى نقطة مع الإحداثيات ش، ت هو من منتصف الملمس.

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

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

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


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

تسمح لك العديد من الألعاب ثلاثية الأبعاد الحديثة بتشغيل التصفية متباينة الخواص ثم تغيير مستواها (من 1x إلى 16x) ، ولكن ما الذي تغيره حقًا؟ تتحكم هذه المعلمة في الحد الأقصى لعدد عينات texel الإضافية التي يتم أخذها في كل عينة خطية أولية. افترض أنه تم تشغيل تصفية ثنائية الخطوط متباينة الخواص 8x في اللعبة. هذا يعني أنه بدلاً من أربع قيم texel ، سيحصل على 32 قيمة.

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


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

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

إذا أخذت ، على سبيل المثال ، AMD Radeon RX 5700 XT، ثم يمكن لكل من كتل التركيب داخل المعالج استخدام ما يصل إلى 32 عنوان texel في دورة ساعة واحدة ، ثم في دورة الساعة التالية تحميل 32 قيمة texel من الذاكرة (كل منها بحجم 32 بت) ، ثم خلط أربعة منها في واحد آخر براعة. وهذا يعني أن خلط 128 عينة texel في واحدة يتطلب 16 دورة ساعة على الأقل.


GPU AMD RDNA Radeon RX 5700 بتقنية معالجة 7 نانومتر

إذا كانت سرعة ساعة 5700 XT تبلغ 1605 ميجاهرتز ، فإن ستة عشر دورة تستغرق 10 نانو ثانية فقط . لن يستغرق تنفيذ هذه الدورات لكل بكسل في إطار 4K باستخدام وحدة نسيج واحدة سوى 70 مللي ثانية. عظيم ، يبدو أن الأداء ليس بالأمر الكبير!

حتى في عام 1996 ، تعاملت 3Dfx Voodoo والبطاقات المماثلة بسرعة مع القوام. على الأكثر ، يمكنهم تقديم 1 texel مع ترشيح ثنائي الخط لكل دورة ، ومع تردد رقاقة TMU من 50 MHz ، وهذا يعني أنه يمكن معالجة 50 مليون texel في الثانية. تتطلب اللعبة التي تعمل بسرعة 800 × 600 و 30 إطارًا في الثانية فقط 14 مليون تكسل مع فلترة ثنائية في الثانية.

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

أضف الإضاءة


لفهم سبب أهمية التركيب ، ألق نظرة على هذا المشهد من الزلزال:


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

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

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

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

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


Nvidia GeForce 2 Ultra ، حوالي نهاية عام 2000. الصورة: ويكيميديا

حدث هذا لأن المعالجة الثانية للقمة فقط لتطبيق مواد إضافية كانت مكلفة للغاية من حيث الأداء. بعد Voodoo ، اضطررنا إلى الانتظار بضع سنوات عندما ظهرت بطاقتا رسوميات ATI Radeon و Nvidia GeForce 2 ، القادرة على التعدد المتعدد في تمريرة واحدة.

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

ولكن مع بعض القوام ، يمكن عمل الكثير ، لذلك دعونا نستكشف قدراتها.

لتغيير الارتفاع أمر طبيعي


في هذه السلسلة من المقالات حول العرض ثلاثي الأبعاد ، لم نتحدث عن كيفية تأثير دور GPU على العملية بأكملها (سنتحدث عن هذا ، ولكن ليس الآن!). ولكن إذا عدت إلى الجزء الأول وقرأت عن العملية المعقدة بأكملها لمعالجة القمم ، فقد تعتقد أن هذا هو أصعب جزء من كل العمل الذي يجب أن تقوم به GPU.

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

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


تم إنشاء الصور في عرض تجريبي بواسطة Emil Persson . الزخرفة المنقوشة معطلة / ممكّنة. الزخرفة المنقوشة

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


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

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

تشبه الخريطة العادية خريطة الارتفاع ، فقط ألوان الملمس هي المعتادة نفسها. بمعنى آخر ، لا يلزم إجراء حسابات لتحويل خريطة الارتفاع إلى عادية. يمكنك طرح سؤال: كيف يمكن للألوان أن تصف متجهًا في الفضاء؟ الجواب بسيط: كل texel لديه مجموعة من قيم r ، g ، b (أحمر ، أخضر ، أزرق) وهذه القيم تتوافق مباشرة مع قيم x ، y ، z للمتجه العادي.


يوضح الرسم البياني الأيسر التغيير في اتجاه المعايير الطبيعية على سطح غير مستوٍ. لوصف نفس المعايير مع نسيج مسطح (مخطط متوسط) ، نعين لهم الألوان. في هذه الحالة ، استخدمنا القيم r ، g ، b (0.255.0) للمتجه الموجه لأعلى مباشرة ، ثم قمنا بزيادة قيمة اللون الأحمر للإمالة إلى اليسار ، والأزرق للإمالة إلى اليمين.

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

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


صورة: Ryan Benno من Twitter من

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

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

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

رسم خرائط النسيج هو عملية حاسمة.


التركيب أمر ضروري للغاية عند تطوير الألعاب. خذ ، على سبيل المثال ، لعبة Kingdom Come: Deliverance 2019 ، وهي أول لعبة تقمص أدوار تدور أحداثها في بوهيميا في القرن الخامس عشر. سعى المصممون إلى إنشاء العالم الأكثر واقعية في تلك الفترة. ولإغراق اللاعب في الحياة منذ مئات السنين ، من الأفضل تنفيذ منظر طبيعي دقيق ومباني وملابس وتسريحات شعر وعناصر يومية وأكثر من ذلك بكثير.

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


البعض الآخر لديه دقة عالية والعديد من التفاصيل الصغيرة. إنهم يخضعون لتصفية متباينة ومختلطة مع الخرائط العادية والقوام الآخر - فقط انظر إلى وجه الشخص في المقدمة. يؤخذ في الاعتبار الاختلاف في متطلبات التركيب لكل كائن مشهد من قبل المبرمجين.

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

All Articles