كيف يعمل عرض الألعاب ثلاثية الأبعاد: معالجة قمة الرأس

صورة

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

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

تُظهر لقطة الشاشة في بداية المنشور اللعبة GTA V في وضع عرض الإطار السلكي. قارنها مع إطار نصف الحياة الأقل تعقيدًا للنصف 2. تم إنشاء الصور بواسطة thalixte مع ReShade .


ما هي النقطة؟


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

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


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


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

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

ما هو المطلوب لمثلث؟


يوضح مثلث الاسم أن الشكل له ثلاث زوايا داخلية ؛ للقيام بذلك ، تحتاج إلى ثلاث نقاط ركن وثلاثة قطاعات تربطها. من الصحيح استدعاء نقطة ركن (قمة) (في صيغة الجمع - رؤوس) ؛ يتم تعريف كل قمة بواسطة نقطة. نظرًا لأننا في عالم هندسي ثلاثي الأبعاد ، يتم استخدام نظام الإحداثيات الديكارتية للحصول على نقاط. عادةً ما تتم كتابة الإحداثيات في شكل ثلاث قيم ، على سبيل المثال ، (1 ، 8 ، -3) ، أو بشكل عام ( x ، y ، z ).


بعد ذلك ، يمكننا إضافة رأسين آخرين لتشكيل مثلث:


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

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


من اليسار إلى اليمين: قائمة النقاط وقائمة الخطوط وشريط المثلثات

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

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

  • قمة الرأس تنتقل إلى موضع جديد.
  • يتغير لون Vertex

هل أنت مستعد للرياضيات؟ ممتاز ، لأننا في حاجة إليها.

ناقل يظهر على خشبة المسرح.


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

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


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


يشير هذا المتجه في نفس الاتجاه وله نفس طول متجه الموضع السابق ، أي أن القيم ( س ، ص ، ض ) ستكون هي نفسها ؛ ومع ذلك ، المكون w ليس 1 ، ولكن صفر. سنشرح استخدام متجهات الاتجاه لاحقًا ، ولكن الآن ، تذكر حقيقة أن جميع القمم في المشهد ثلاثي الأبعاد سيتم وصفها بهذه الطريقة. لماذا؟ لأنه في هذا التنسيق يكون من الأسهل بكثير نقلها.

الرياضيات والرياضيات والرياضيات مرة أخرى


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

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

يُطلق على تحريك قمة في مساحة ثلاثية الأبعاد ترجمة ، وتتطلب الحساب التالي:


القيم × 0 ، إلخ. تمثل الإحداثيات الأصلية للناقل. تمثل قيم delta - x المقدار الذي يجب نقل الرأس إليه. يؤدي مضاعفة المصفوفة والناقل إلى حقيقة تلخيصها ببساطة (لاحظ أن المكون w يبقى كما هو دون تغيير بحيث تظل الإجابة النهائية هي متجه الموضع كما كان من قبل).

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


هذا التحول يدور الرأس حول المحور z في المستوى XY


ويستخدم هذا إذا كنت بحاجة إلى تغيير حجم الرقم

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


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

لنطبق التحولات المختلفة على المربع:


في الصورة أعلاه ، تم نقل الرقم 5 وحدات على طول كل محور. يمكن رؤية هذه القيم في العمود الأخير من المصفوفة الكبيرة المتوسطة. يبقى متجه الموضع الأصلي (4 ، 5 ، 3 ، 1) كما ينبغي ، ولكن يتم الآن نقل الرأس المحول إلى (9 ، 10 ، 8 ، 1).


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



تم تدوير الموازي من خلال زاوية 45 درجة ، ولكن الجيب وجيب التمام لهذه الزاوية يستخدمان في المصفوفة. بعد التحقق من الحاسبة العلمية ، يمكننا أن نرى أن sin (45 °) = 0.7071 ... ، والتي يتم تقريبها إلى القيمة الموضحة وهي 0.71. نحصل على نفس الإجابة لقيمة جيب التمام .

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

فيرتكس شادر السلطة


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

ولكن كيف يبدو كل هذا من حيث الكود؟

لفهم هذا ، سوف نستخدم أمثلة من موقع Braynzar Soft المذهل . إذا كنت ترغب في البدء في العمل باستخدام البرمجة ثلاثية الأبعاد بنفسك ، فهذا هو المكان المناسب لتعلم الأساسيات ، وكذلك الأشياء الأكثر تعقيدًا ...


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

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

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

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


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

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

الضوء ، الكاميرا ، السيارات!


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


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

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

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


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

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


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

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

  • اللون الأساسي الأصلي
  • سمة المواد المحيطة - القيمة التي تحدد مقدار الإضاءة "الخلفية" التي يمكن أن تمتص قمة الرأس وتعكسها
  • سمة مادة Diffuse هي قيمة أخرى ، ولكن هذه المرة تحديد "خشونة" الرأس ، والتي بدورها تؤثر على مقدار الامتصاص وانعكاس الضوء المبعثر
  • سمات المواد الخاصة - قيمتان تحددان لمعان Vertex

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


مصدر إضاءة اتجاهي واحد يضيء العديد من العروض التوضيحية لـ Nvidia

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


رمز عينة B. Anguelov يوضح كيف يمكن معالجة نموذج انعكاس الضوء فونج في تظليل قمة الرأس.

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

من فضلك سيدي ، أريد أكثر (مثلثات)


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

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

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


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


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


يُرى بوضوح لماذا تبدو الأرض غريبة جدًا - إنها مسطحة تمامًا! يدمج الباب مع الجدران ، وحواف المبنى عبارة عن مواز بسيطة.

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

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

كيف تبدو؟ دعنا نطلق نسخة الإطار السلكي للمشهد بالفسيفساء:


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

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

دعونا نرى كيف يمكن أن تبدو من حيث رمز Direct3D ؛ لهذا نستخدم المثال من موقع رائع آخر ، RasterTek .

هنا مثلث أخضر بسيط مزين بالفسيفساء في العديد من المثلثات الصغيرة ...


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

"الحديد" لا يمكن أن يقف عليه!


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

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




يتيح برنامج 3DLark Vantage من UL Benchmark - التظليل الهندسي معالجة الجسيمات وأعلام Direct3D ، مثل جميع واجهات برمجة التطبيقات للرسومات الحديثة ، أنه يتيح لك إجراء الكثير من العمليات الحسابية باستخدام رؤوس. يمكن إما نقل البيانات النهائية إلى المرحلة التالية من عملية التقديم ( التنقيط ) ، أو إعادتها إلى تجمع الذاكرة لإعادة معالجتها أو قراءتها بواسطة المعالج المركزي لأغراض أخرى. كما تقول وثائق Microsoft على Direct3D ، يمكن تنفيذ ذلك كدفق بيانات:


(stream output) , , ( ), , . , , .

— , , . , - .


. .

, (GPU) API — , .

3D- ; , . 3D- — , , .

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


All Articles