مقدمة
مخطط توليد المباني الإجرائية هي فكرة مغرية. يعد استخدام الوحدات النمطية الموحدة والتنسيب التلقائي أمرًا منطقيًا تمامًا ، لأنه بعد كل شيء ، هذه هي نفس البنية. ولكن كيف يمكننا ، عند التركيب ، تحقيق التنوع الطبيعي بدلاً من التكرار؟
تم إنشاء هذا المبنى من وحدة واحدة فقط ،
يتم نسخها تلقائيًا إلى مخطط البناء . الفكرة هي أن المادة لا تتطلب تقريبًا أي إدخال بيانات يدوي.
يتم استخدام مادة واحدة فقط للمبنى بالكامل (باستثناء النوافذ). تُستخدم وظائفها للتحكم في التوزيع العشوائي للون القمم وموضع البيكسلات في مساحة العالم.
الوحدة الوحيدة هي كل ما نحتاجهلا التنسيب اليدوي أو البرمجة النصية. تتم جميع العشوائية في المواد.المواد الموضحة في هذا البرنامج التعليمي:
- يحتوي على طبقة من الأوساخ تعتمد على الارتفاع وتغطي الكائن فقط إلى الارتفاع المطلق المحدد
- يحدد لون الكائنات لكل طابق وشريحة بشكل عشوائي
- يغير وضع الأشياء الصغيرة قليلاً ، وكذلك بشكل عشوائي
- يتيح للمستخدم اختيار 2 لون للجدران ، وكذلك قيمة تدميرها
لون Vertex كبيانات
03:34بالإضافة إلى مواضع القمم والقواعد الطبيعية ، توفر محركات الألعاب عادةً إمكانية الوصول إلى قيم أخرى ، على سبيل المثال ، لون القمم. عند تظليل مثلث شبكة ، يتم تحريف اللون بين الرؤوس. يمكنك رسمه في محرر ثلاثي الأبعاد أو استخدام علامة التبويب "
الرسام" في واجهة المستخدم. إذا قمت بذلك في المحرك ، فستتاح لك الفرصة لتعديل مثيل منفصل للشبكة في العالم. شرحت حالة الاستخدام هذه في
البرنامج التعليمي حول رسم القمم . ومع ذلك ، في هذه الحالة ، سنلتزم بالألوان المستوردة ، لأنني قررت استخدام قنوات RGB
كأقنعة دقيقة تتحكم في التوزيع العشوائي.
لا تنسَ أن اللون في الرسومات ثلاثية الأبعاد هو مجرد
ناقل ثلاثي المكونات . مكوناته هي سطوع الأحمر والأخضر والأزرق في النطاق 0 - 1. القيمة تعسفية ، لأن لون الرأس هو مجرد بيانات. بدلاً من استخدامها مباشرة لتركيبات الطلاء ، قررت أن أحزم ألوان أسطح القناع في كل قناة:
- القناة الحمراء هي قناع الألوان الأساسية والثانوية للجدران . تستخدم المضلعات بقيمة 0 اللون الأساسي ، مع 1 - اللون الثانوي.
- قناة خضراء - تستخدم لتحديد لون من اللوحة . يتيح لك ذلك التحكم في اختلاف لون العناصر الصغيرة ، مثل تجفيف الملابس. يتم تقريب القيمة بين 0 و 1 إلى الفهرس (موضع UV) في نسيج اللوحة.
- قناة زرقاء - إزاحة لمواقع القمم لتحريك القمم أفقياً. هذا يعني أنه سيتم استخدام 0 للجدران (بدون حركة) ، ويمكن تعيين القيم حتى 1 لمكيف الهواء أو الكتان. تتحكم هذه القناة أيضًا في الرؤية (قناع العتامة). إذا كانت القيمة أكبر من 0 ، فسيتم إضافة قيمة عشوائية ، خاصة بها لكل جزء من المبنى ، لإنشاء تباين.
في أي محرر ثلاثي الأبعاد جاد ، هناك وظيفة لرسم لون القمم. يمكنك بسهولة العثور على تعليمات حول كيفية القيام بذلك في محررك. فقط تذكر أن تخبر Unreal Engine في نافذة استيراد الشبكة بحيث تحل محل (
استبدال ) لون القمم (بدلاً من تجاهلها (تجاهلها)).
كما قلت أعلاه ، اللون في هذا المشروع هو مجموعة من القيم الدقيقة. لمهمة مماثلة ، وأي مهمة تقنية تقريبًا لفن اللعبة ، أفضل استخدام
Houdini . ومع ذلك ، يمكن تحقيق نتيجة مماثلة (ببذل المزيد من الجهد) في أي محرر ثلاثي الأبعاد آخر. ما عليك سوى الانتباه إلى ما ينبغي أن تشير إليه كل قناة ملونة في التظليل.
لقد سلطت الضوء على العملية الكاملة لتعيين القيم لقنوات الألوان في قمة الرأس في برنامج تعليمي منفصل: قم
بتخزين البيانات بألوان الرأس باستخدام Houdini . في هذا البرنامج التعليمي ، استخدم أدوات Houdini الصعبة لجعل العملية أكثر كفاءة.
مخطط البناء
07:57المخطط الذي قمت بإنشائه بسيط. إنه ببساطة يخلق جدارًا مسطحًا للمبنى ، مما يكرر الشبكة أفقياً وعموديًا. لديها متغيرات قابلة للتغيير
MeshWall (شبكة ثابتة) ،
NumberOfFloors (عدد صحيح) ،
NumberOfSegments (عدد صحيح)
والمواد .
نتيجة مخطط: 4 طوابق ، 2 شرائح.يتم تنفيذ العملية برمتها في Construction Script ، أي أثناء تحرير المستوى. بفضل هذا ، سوف تتصرف الشبكة الناتجة مثل أي كائن ثابت آخر. على سبيل المثال ، سوف تؤخذ في الاعتبار عند بناء الإضاءة.
يتم قياس أبعاد الشبكة أولاً. طول الحدود يعني نصف حجم الكائن. يمكننا حسابها مرة واحدة وحفظها ، لأن القيمة بالنسبة لجميع القطاعات ستكون هي نفسها.
يعمل باقي الكود في دورتين. تقوم الحلقة الخارجية بإنشاء أرضيات ككل ، وتقوم الحلقة الداخلية بإنشاء مقاطع داخل الأرضية الحالية. يتم حساب الموقع عن طريق فهارس تكرار الحلقة مضروبة في عرض الشبكة وارتفاعها.
تتم إضافة مكون شبكة ثابت جديد إلى كل مقطع. في بعض الحالات ، سيكون من المفيد استخدام المثيلات. تؤدي إضافة مكونات إلى زيادة عدد مكالمات السحب ، والتي في المشاهد "الثقيلة" يمكن أن تسبب مشاكل.
هذا كل شيء. عند إعداد
NumberOfFloors و
NumberOfSegments ، سيتم تحديث المبنى تلقائيًا.
لونين للحائط ملثمين بلون الرأس
21:16يتم الوصول إلى كل الألوان كمعلمات. يتم استخدام القناة الحمراء للون القمم كمعامل خلط بينهما.
قناة التعبئة والخلط
14:22نريد أن تؤثر ألوان الجدران على الجدران فقط ، ولكن لا تؤثر على إطارات النوافذ ومكيفات الهواء. أيضا ، لا ينبغي أن تؤثر على المناطق المتضررة. يمكن القيام بذلك عن طريق التفاف القناع في قناة ألفا من اللون الأساسي. بمعنى آخر ، فإن بنية اللون الأساسي لها خلفية شفافة ، وهناك تتأثر ألوان الجدران.
بالمناسبة ، قمت بتعبئة القوام المعدني ، الخشونة والانسداد (كل ذلك في ظلال رمادية) في قنوات R / G / B من نفس الملمس . هذا يقلل من عدد العينات والملفات و Lerp ثلاث مرات - تحسين كبير لا يتطلب أي تنازلات. ويمكن الاطلاع على البرنامج التعليمي حول هذه التقنية في الملاحظات.
الضوضاء من الملمس
تم استخدام نمط الضوضاء هذا للمزج بين مجموعات النسيج (الأولى) والثانية (التالفة). بدلاً من حسابه في الوقت الفعلي ، والذي سيكون من أجل الضجيج عالي الجودة إجراءً مكلفًا ، أقوم فقط بتحميله من النسيج. تقوم
العقدة WorldAlignedTexture بعرضها من ثلاثة جوانب (
تقوم بإنشاء إحداثيات الأشعة فوق البنفسجية إجرائيًا ).
الأوساخ التي تعتمد على الارتفاع. إعادة رسم وظيفة
18:00الأوساخ هي لون مسطح يطبق بواسطة تدرج في مساحة العالم. يتم تحويل المكون Z من موضع البكسل في العالم إلى الفاصل الزمني 0-1. هذا يعطينا قناعًا مفيدًا - معامل
Lerp . يتم إرسال الحد الأدنى والحد الأقصى الأولي (على سبيل المثال ، من 150 إلى 700 سم) من قبل المستخدم كمعلمات العددية. يضاف القليل من الضوضاء لجعل الانتقال أكثر طبيعية.
تم إنشاء الدالة TAA_Remap_01_Clamped بواسطتي. أنا استخدامها في تظليل جميع تقريبا. يحول القيمة في الفاصل الزمني المصدر إلى الفاصل الزمني 0-1. مثالي لإنشاء أقنعة بناءً على المسافة (من الكاميرا أو من الأرض أو حتى للأشكال الموجودة في مساحة الأشعة فوق البنفسجية).
لون عشوائي ، إخفاء العناصر
10:55 مساءًيسمح لك الحصول على قيمة عشوائية من النقطة المرجعية لموضع القطعة بإزاحة لوحة الألوان للكائنات الصغيرة. لوحة الألوان هي نسيج ذو ألوان محاذاة أفقياً ، وبالتالي فإن نقل الصورة المستخدمة للقراءة يمنحنا اللون النهائي.
نسيج لوحة على نطاق الموسع. حجمها المعتاد هو 8 × 1 بكسل مع تعطيل الضغطتخدم قناة الألوان ذات الرأس الأخضر كقيمة وقناع عشوائي. تعني القيمة 0 "عدم تطبيق اللون هنا."
تطبيق تعويض الموقف المحلي
الوظيفة الأخيرة هي تحريك الكائنات بشكل عشوائي على طول المحور X. للقيام بذلك ، تتم إضافة إزاحة موضع يتحكم فيها المواد إلى القمم. عند استخدام هذه الخدعة ، يلزمك الانتباه إلى أمرين - التصادمات المعقدة (للتصوير) وحقول المسافات. لا يعرف كل من المعلمة والمعلمة الأخرى أنه تم إجراء مثل هذا الإزاحة.
سوف آخذ القناة الزرقاء مرة أخرى وأضيف رقمًا عشوائيًا - نفس الضوضاء استنادًا إلى موضع الشريحة التي استخدمناها مسبقًا. دعنا نحولها من الفاصل الزمني 0-1 إلى الفاصل الزمني من -0.5 إلى 0.5 ، بحيث يتم تنفيذ الحركة في كلا الاتجاهين. ثم نضربها بواسطة
PositionOffsetStrength . ستضيف
العقدة إلحاق المحاور المتبقية (ثابت 0 على Y و Z).
بشكل غير متوقع ، يتطلب Unreal أن يتم تعويض الإخراج في
إحداثيات العالم . حسبنا
الموقف المحلي . كيفية تحويله؟
يمكن القيام بذلك عن طريق تحويل مساحة هذا الموضع المحلي الجديد إلى فضاء عالمي باستخدام عقدة
Transform . ثم أطرح الموضع الأولي للرأس في العالم من هذا الموضع الجديد للرأس ، مع
إزاحة العالم بدلاً من الموضع. ادمج هذا مع إصدار مواد
إزاحة الموقف العالمي ، وهذا هو المكان الذي يتم فيه العمل.
المواد النهائية
أتمنى أن تكون قد تعلمت شيئًا جديدًا من هذا البرنامج التعليمي. فيما يلي لقطة شاشة للرسم البياني لعقدة المواد بالكامل:
ملفات المشروع والمناقشة
يمكنك تنزيل ملفات المشاريع مجانًا (أو للتبرع ، إذا رغبت في ذلك):
ملفات المشروع . إذا كانت لديك ملاحظات أو أسئلة ، فقم بالانضمام إلى المناقشة
في Reddit .
قراءة إضافية
- تتمثل إحدى الطرق السهلة لتعبئة القوام في قنوات RGB في حفظ ثلاثة أشكال رمادية في قنوات لصورة RGB واحدة باستخدام Photoshop. يسمح لك التغليف بتوفير مساحة ، والأهم من ذلك ، الحصول على ثلاثة مواد في عملية قراءة واحدة. هذا يستحق الجهد لأن قراءة القوام من الذاكرة هي واحدة من أكثر عمليات GPU التي تستغرق وقتًا طويلاً.