استيراد النماذج ثلاثية الأبعاد إلى الوحدة والمخاطر

هذه هي المقالة الثالثة في سلسلة أعمالنا حول العمل مع النماذج ثلاثية الأبعاد في الوحدة. مقالات سابقة: "ميزات العمل مع Mesh in Unity" و "Unity: التحرير الإجرائي لـ Mesh" .

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

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



ميزات ModelImporter


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

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

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


سوزانا مثلثة في خلاط (طريقة رباعية: الجمال) والوحدة (تلقائيًا عند الاستيراد)

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


رجل صحي سكوتر ودراجة نارية المدخن

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


مضلع المصدر


المضلع مثلث في خلاط

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


مضلع في الوحدة مع مثلث قريب من الانحطاط (المثلث الأيمن لا يمكن تمييزه تقريبًا عن مقطع)

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

أنا حزمة ثلاثية الأبعاد ، كما أراها




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

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

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


خلاط مكعب المقاييس


الوحدة مكعب المقاييس

توقف عن ذلك!


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

للتحليل والتحقق ، قمنا بتطوير الوظائف التالية:

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

ماذا يعطينا هذا؟

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

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







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

تخيل الآن أنك وضعت الملمس في صقيل (ومغطاة ببطانية: 3). ستظهر الإحداثيات المحولة بالفعل المطابقة للأطلس (x * scale + offset). هذه المرة ، على الأرجح ، لن يكون هناك جزء كامل ولن يكون هناك شيء يمكن اقتصاصه ، وسيصعد النموذج إلى نسيج شخص آخر (اتضح أن البطانية صغيرة). تم حل هذه المشكلة بطريقتين.

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

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



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

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

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


مثال على فحص أساسي للأشعة فوق البنفسجية مع تراكبات (تظهر باللون الأحمر)

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

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


إضاءة طراز مخبأ بشكل غير صحيح (يسار) وتصحيحه (يمين)

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

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



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

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

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

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


All Articles