Редагування Кімнат і Порталів

Зразок Дерева сцени

Ось зразок Дерева сцени, в якому зібрані всі ідеї докупи:

../../../_images/example_scenetree.png
  • Ми використовували RoomGroup для позначення зовнішньої області.

  • Вузли MeshInstance всередині вузлів Room є STATIC, або DYNAMIC.

  • Ми створили просторовий вузол Spatial<class_Spatial>`(я вирішив назвати його "Freeform", але ви можете використовувати будь-яке ім'я), під яким розмістили об'єкти ``STATIC` and DYNAMIC, які будуть автоматично розміщені в кімнатах (Freeform знаходиться всередині roomlist, але не всередині кімнати.)

  • Гравець і монстри знаходяться на гілках ЗА МЕЖАМИ roomlist.

  • Гравець і монстр сітки мають режим порталів ROAMING, так що вони можуть бути в будь-якій кімнаті.

  • Камера знаходиться за межами roomlist.

Створення систем кімнат в Blender (або інших інструментах моделювання)

Хоча ви можете створити свою систему кімнат повністю в редакторі, ви також можете створювати кімнати та портали з допомогою свого інструменту моделювання. Існує одна невелика проблема - інструменти моделювання, такі як Blender, нічого не знають про вузли Room, RoomGroup і Portal. Для того, щоб обійти це, ми використовуємо ряд іменних конвенцій. Перший раз, коли Godot стикається з цими спеціально названими вузлами, він перетворить їх на Room, RoomGroup та Portal.

Конвенції закінчень

  • -room стане вузлом кімнати Room.

  • -roomgroup стане вузлом групи кімнат RoomGroup.

  • -portal стане вузлом порталу Portal.

  • -bound стане ручним зв'язком.

Кімнати та групи кімнат повинні створюватися в Blender, як Порожняки. Таким чином, будь-які нащадки Порожняка -room будуть розміщені в вузлі Room під час переведення в Godot.

Приклад:

  • kitchen-room - створить вузол Room під назвою "kitchen" (кухня).

  • outside-roomgroup - створить вузол RoomGroup під назвою "outside" (зовнішня).

  • kitchen-portal - створить вузол Portal, що веде до кімнати "kitchen".

Портали

Портали відрізняються від Кімнат. На Порталах нам потрібно вказати геометрію Порталу в нашому інструменті моделювання, на додаток до назви. Для цього ваш "портал-туди" повинен бути створений як Меш.

Меші порталів мають деякі обмеження для належної роботи. Вони повинні бути опуклими, а багатокутні точки повинні знаходитися в одній площині. Точність до площини не обов'язково повинна бути точною, так як Godot автоматично усереднить напрямок площини порталу. Після перетворення на вузол Portal застосовується прив'язка до площини порталу, а вершини вказуються (і редагуються) в інспекторі, як 2D-координати, а не 3D-точки.

Назва порталу дуже важлива. Ви можете, або назвати портал -portal, сподіваючись, що спрацює автоматична прив'язка порталів в Godot, або ви можете використовувати ім'я Кімнати, на до якої хочете прив'язати портал, як префікс.

Узагальнення

У більшості випадків достатньо імені, на зразок kitchen-portal. Однак є одна проблема. Blender і Godot погано справляються, коли у вас є кілька об'єктів з однаковим ім'ям. Що станеться, якщо нам захочеться, щоб на кухню вело кілька порталів?

Обхідний шлях — це використання символу узагальнення, *. Коли Godot читає символ узагальнення, він починає ігнорувати все, що знаходиться після нього в назві.

Це означає, що ми можемо використовувати такі назви порталів:

  • kitchen*1-portal - створює портал, що веде до "kitchen".

  • kitchen*2-portal - також створює портал, що веде до "kitchen".

  • kitchen*anything_you_want_here-portal - також працює.

Символи узагальнення працюють на всіх вузлах, які використовують ці правила іменування.

Ручні межі

Ручні межі - це спосіб явно встановити опуклий корпус для кімнати, який використовується, якщо вони присутні в якості нащадків кімнати на дереві сцени. В назві має значення лише закінчення -bound. Вони повинні бути мешами (тобто MeshInstance в Godot). Майте на увазі, що вони будуть перетворені в опуклі корпуси під час процесу перетворення, тому вони не повинні бути ідеальними.

Порада

Після перетворення їх режим порталу буде IGNORE і вони не відображатимуться. Ви можете також використовувати Generate Points у редакторі, щоб перетворити їх на набір точок, що зберігаються в кімнаті, і видалити оригінальний MeshInstance -bound.

Редагування точок Порталу

Портали визначаються комбінацією перетворень вузла порталу, а також набором точок, які утворюють кути.

Портал за замовчуванням має 4 кути, як показано в інспекторі:

../../../_images/portal_point_editing.png

Ви можете редагувати ці точки в gizmo, або в інспекторі, щоб краще підігнати під прохід на ваш рівень гри. Як правило, краще тримати кількість точок якомога нижче для ефективності системи. Наприклад, краще ризикнути зробити трохи завеликий рендеринг, ніж витрачати час на вибракування об'єктів по 20 різних краях.

Редагування точок кімнати

У вас також є можливість вручну редагувати точки, які використовуються для визначення опуклого корпусу кімнати. Ці точки не присутні за промовчанням. Зазвичай вони створюються, натисканням кнопку Згенерувати точки на панелі інструментів редактора, коли вибрано кімнату. Це перенесе автоматичні межі геометрії (або ручні межі -bound) в інспектор. Як тільки в інспекторі з'являться точки, вони будуть використовуватися і пере-визначатися, як будь-який інший метод. Отже, якщо ви хочете повернути ручне редагування, видаліть усі точки кімнати.

../../../_images/room_point_editing.png

Редагування точок вручну може бути корисними в деяких ситуаціях, особливо коли автоматичне межі дають не зовсім потрібний результат. Гарна ідея полягає в тому, щоб використовувати велике Simplification (Спрощення) в інспекторі для кімнати, перш ніж генерувати точки. Майте на увазі, що за замовчуванням значення Simplification буде успадковане від RoomManager.

RoomManager (Керівник кімнати)

Показати налагодження

Це може бути використано для контролю лоґів, особливо лоґів перетворення кімнати. Налагодження завжди буде налаштовано на false для експортованих проектів.

Налагодження розлогих об'єктів

У цьому режимі відображатимуться лише розлогі меші, які поширюються через портали з поточної кімнати з камерою. Типовими прикладами можуть бути ділянки меша місцевості, або великі меші для підлоги, або стелі. Зазвичай ви не хочете, щоб такі речі, як дверні рами, проникали до сусідньої кімнати - саме для цього потрібна тонка настройка поля порталу в Portal Margin.

Об'єднати меші

Щоб звести малюючі виклики до мінімуму, система пропонує можливість автоматичного злиття подібних мешів STATIC всередині кімнати (також відоме як static batching). Це може підвищити продуктивність у багатьох випадках. Точність вибракування знижується, але оскільки приміщення є досить логічною одиницею для вибракування, цей компроміс зазвичай працює на вашу користь.

Спрощення площини

У деяких випадках опуклі корпуси, автоматично створені для кімнат, можуть містити дуже велику кількість площин, особливо якщо ви використовуєте вигнуті поверхні. Це не ідеально, тому що уповільнює систему. Ця опція може спростити корпуси. Ступінь спрощення може бути обраний користувачем, між 0 (без спрощення) і 1 (максимальне спрощення). Ви також можете перевизначити це значення для окремих кімнатах.

Портали

Активний портал

Портали можна вмикати та вимикати під час виконання гри. Це особливо корисно, якщо у вас є двері, які можуть відкриватися і закриватися.

Двобічний

Портали можуть бути двосторонніми, або односторонніми. Двосторонні портали за замовчуванням швидше налаштовуються в більшості випадків, але односторонні портали можуть бути корисні в деяких випадках. Наприклад, ви можете використовувати односторонні портали для створення вікон, крізь які можна бачити зсередини, але нічого не бачити ззовні. Це може допомогти продуктивності при перегляді будівель з вулиці.

Системи частинок

Майте на увазі, що при розміщенні систем частинок STATIC, AABB при перетворенні може мати нульовий розмір. Це означає, що система частинок може бути несподівано зарано вибракована. Щоб запобігти цьому, або встановіть portal mode системи частинок на DYNAMIC, або, як альтернативу, додайте Extra Cull Margin (Додаткові поля для вибракування) до системи частинок у інспекторі геометрії.

Мультимеші

Запримітьте, що мультимеші будуть вибраковані, як група, а не індивідуально. Тому ви повинні намагатися тримати їх локалізованими в тому ж районі, де це можливо.