Імпортування 3D сцен

Імпортер сцен Godot

Для роботи з 3D-активами Godot має гнучкий та настроювальний імпортер.

Godot працює зі сценами. Це означає, що вся сцена, над якою ви працювали в вашому улюбленому 3D DCC, буде передана з мінімальними змінами.

Godot підтримує такі формати файлів 3D- сцен:

  • glTF 2.0. Godot має повну підтримку тексту та бінарних форматів.
  • DAE (COLLADA), старіший формат, який повністю підтримується.
  • OBJ (Wavefront) формати. Також повністю підтримується, але з деякими обмеженнями (немає підтримки для поворотів, скелетів тощо).
  • ESCN, специфічний формат Godot, який Blender може експортувати за допомогою плагіна.
  • FBX, supported via the Open Asset Import library. However, FBX is proprietary, so we recommend using other formats listed above, if suitable for your workflow.

Просто скопіюйте файл сцени разом з текстурою у сховище проекту, і Godot здійснить повний імпорт.

Важливо, щоб сітка (меш) не деформувалася кістками при експорті. Переконайтесь, що скелет встановлений у T-позі, або позі за замовчуванням, перед експортом з вашого улюбленого 3D-редактора.

Експорт файлів DAE від Maya та 3DS Max

Autodesk додав вбудовану підтримку COLLADA до Maya та 3DS Max, але вона за замовчуванням зламана і не повинна використовуватися. Найкращий спосіб експорту цього формату - це використання плагінів OpenCollada . Вони працюють добре, хоча й не завжди в курсі останніх версій програмного забезпечення.

Експорт файлів glTF 2.0 з Blender

Існує три способи експорту файлів glTF з Blender. Як бінарний glTF (файл .glb), вбудований glTF ( файл``.gltf``), і з текстурами (gltf + .bin + текстури).

Бінарні файли glTF - найменші із трьох варіантів. Вони включають сітку та текстури, створені в Blender. При перенесенні в Godot текстури є частиною файлу матеріалу об’єкта.

Вбудовані файли glTF функціонують так само, як і бінарні файли. Вони не надають додаткової функціональності в Godot, і їх не слід використовувати, оскільки вони мають більший розмір файлу.

Існує дві причини використовувати glTF з окремими текстурами. Одна полягає в тому, щоб опис сцени був у текстовому форматі, а бінарні дані в окремому бінарному файлі. Це може бути корисно для контролю версій, якщо ви хочете переглянути зміни у текстовому форматі. Друга причина, вам потрібні файли текстур, окремо від файлу матеріалів. Якщо жодна з цих причин для вас не актуальна, використовуйте бінарні glTF.

Примітка

Blender не експортує емісійні (випромінювальні) текстури з файлом glTF. Якщо ваша модель використовує таку текстуру, то її потрібно перенести окремо.

Експорт файлів DAE з Blender

Blender має вбудовану підтримку COLLADA, але вона не працює належним чином для потреб ігрових движків і не повинна використовуватися як є.

Godot пропонує `плагін Blender<https://github.com/godotengine/collada-exporter>`_, який правильно експортує сцени COLLADA для використання в Godot.

Експорт файлів ESCN з Blender

Найпотужніший`godot-blender -експортер <https://github.com/godotengine/godot-blender-exporter>`__. Він використовує файл .escn, який є різновидом файлу .tscn (файл сцени Godot); він зберігає якомога більше інформації зі сцени Blender.

Експортер ESCN має детальну документацію, що описує його функціональність та використання.

Імпорт робочих процесів

Імпортер сцен Godot дозволяє переносити різні робочі процеси при імпорті даних. Залежно від багатьох опцій, можна імпортувати сцену з:

  • Зовнішніми матеріалами (за замовчуванням): де кожен матеріал зберігається у файловому ресурсі. Зміни до них зберігаються.
  • Зовнішніми сітками (мешами): де кожна сітка зберігається в іншому файлі. Багато користувачів вважають за краще безпосередньо працювати з сітками.
  • Зовнішніми анімаціями: Дозволяє змінювати збережені анімації та об’єднувати їх при зміні джерел.
  • Зовнішніми сценами: збережіть кожен кореневий вузол імпортованих сцен як окрему сцену.
  • Одинарна сцена: єдиний файл сцени з усім вбудованим.
../../../_images/scene_import1.png

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

Параметри імпортування

Імпортер має кілька параметрів, про які піде мова нижче:

../../../_images/scene_import2.png

Вузли

Root Type (Тип кореня)

За замовчуванням тип кореневого вузла в імпортованих сценах є «Spatial» («просторовим»), але це можна змінити.

Root Name (Назва кореня)

Дозволяє встановити конкретне ім’я для згенерованого кореневого вузла.

Root Scale (Шкала кореня)

Шкала кореневого вузла.

Custom Script (Власний скрипт)

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

Створіть такий скрипт:

tool # Needed so it runs in the editor.
extends EditorScenePostImport


func post_import(scene):
    # Do your stuff here.
    return scene # remember to return the imported scene

Функція post_import приймає імпортовану сцену в якості аргументу (цей параметр це актуальний кореневий вузол сцени). Використана сцена повинна бути повернута. Повертатися може щось інше.

Storage (Зберігання)

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

Звичайно, інстансування таких імпортованих сцен в інших місцях вручну, теж працює.

Матеріали

Місце

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

Storage (Зберігання)

Матеріали можуть зберігатися в сцені, або у зовнішніх файлах. За замовчуванням вони зберігаються у зовнішніх файлах, так можна їх редагувати. Це пояснюється тим, що більшість 3D DCC не мають таких самих варіантів матеріалів, як ті, що є в Godot.

Коли матеріали вбудовані, вони будуть втрачатися при кожній зміні та повторному імпорті сцени-джерела.

Keep On Reimport

Після редагування матеріалів під функції Godot, імпортер буде зберігати відредаговані та ігнорувати ті, що надходять зі сцени-джерела. Ця опція є лише у випадку, якщо матеріали зберігаються як файли.

Meshes (Сітки)

Compress (Стиснення)

Змушує сітки використовувати менш точні числа для декількох аспектів сітки, щоб заощадити місце.

Це:
  • Матриця перетворення (розташування, обертання та масштаб): 32-бітове дійсне (float) число перетворюється на 16-бітове ціле.
  • Вершини: 32-бітове дійсне (float) число перетворюється на 16-бітове ціле.
  • Нормалі: 32-бітове дійсне (float) число перетворюється на 32-бітове ціле.
  • Тангенси: 32-бітове дійсне (float) число перетворюється на 32-бітове ціле.
  • Кольори вершин: 32-бітове дійсне (float) число перетворюється на 32-бітове ціле.
  • UV: 32-бітове дійсне (float) число перетворюється на 32-бітове ціле.
  • UV2: 32-бітове дійсне (float) число перетворюється на 32-бітове ціле.
  • Вага вершин: 32-бітове дійсне (float) число перетворюється на 16-бітове ціле.
  • Кістки арматури: 32-бітове дійсне (float) число перетворюється на 16-бітове ціле.
  • Індекс масиву: 32-бітове дійсне (float) число перетворюється на 16-бітове ціле на основі кількості елементів.
Додаткова інформація:
  • UV2 = Другий UV-канал для деталізації текстур та текстур запечених карт світла.
  • Індекс масиву = масив чисел, які нумерують кожен елемент масивів вище; тобто вони нумерують вершини та нормалі.

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

Ensure Tangents

Якщо потрібно використовувати текстури з картами нормалей, сітки повинні мати дотичні (tangent) масиви. Ця опція гарантує, що вони генеруються, якщо їх немає в сцені джерела. Godot використовує для цього Mikktspace, але краще, щоб вони генерувалися в експортері.

Storage (Зберігання)

Сітки (меші) можуть зберігатися в окремих файлах (ресурсах) замість вбудованих. Це не має особливого практичного використання, якщо, тільки, не хочеться будувати об’єкти використовуючи їх безпосередньо.

Цей параметр надається для тим, хто любить працювати з сітками безпосередньо.

Light Baking (Запікання світла)

Незалежно від того, використовується сітка (меш), чи ні, в запечених картах світла.

  • Disabled: (Покалічений) Сітка (меш) не використовується в запіканні карт світла.
  • Enable: (Увімкнутий) Сітка (меш) використовується в запіканні карт світла.
  • Gen Lightmaps: Сітка (меш) використовується в запіканні карт світла і розгортає другий UV шар для карт світла.

Примітка

Для додаткової інформації про запікання світла дивіться Baked lightmaps.

External Files (Зовнішні файли)

Створені сітки та матеріали можуть зберігатися (необов’язково) у підкаталозі з назвою сцени.

Параметри анімації

Godot пропонує безліч параметрів для обробки даних анімації. Деякі експортери (наприклад, Blender) можуть генерувати багато анімацій в одному файлі. Інші, такі як 3DS Max, або Maya, розміщують багато анімацій в одній часовій шкалі, або, в гіршому випадку, складають кожну анімацію в окремий файл.

../../../_images/scene_import3.png

Імпорт анімації є включений за замовчуванням.

Кадри за секунду

Більшість форматів 3D експорту зберігають хронологію анімації в секундах замість кадрів. Щоб імпортувати анімацію максимально вірно, вказуйте кадри за секунду, які використовуються для її редагування. Якщо цього не зробити, анімація може відтворюватися невірно.

Filter Script (Фільтрувальний скрипт)

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

Фільтрувальний скрипт виконується проти кожної імпортованої анімації. Синтаксис складається з двох типів виразів, перший для вибору анімації для фільтрації, а другий для фільтрації окремих треків у відповідній анімації. All name patterns are performed using a case insensitive expression match, using ? and * wildcards (using String.matchn() under the hood).(Усі шаблони імен є виконані використанням нечутливої виразної пари, використанням символів ? та * (використанням String.matchn() всередині)).

Скрипт повинен починатися з виразу фільтра анімації (який позначається рядком, що починається з @). Наприклад, якщо ми хотіли б застосувати фільтри до всіх імпортованих анімацій, які мають назву, що закінчується на "_Loop":

@+*_Loop

Аналогічно до того ж рядка можуть бути додані додаткові шаблони, розділені комами. Ось модифікований приклад, що додатково включає всі анімації з іменами, які починаються "Arm_Left", але також виключає всі анімації, імена яких закінчуються на "Attack":

@+*_Loop, +Arm_Left*, -*Attack

Після виразу фільтра вибору анімації ми додаємо шаблони фільтрації треків, щоб вказати, які треки анімації слід зберігати, чи відкидати. Якщо шаблони фільтрів треків не вказані, всі треки в межах відповідної анімації будуть відкинуті!

Важливо зауважити, що для кожного треку в анімації застосовуються вирази фільтра треків, це означає, що один рядок може включити трек, а більш пізній фільтр все одно може відкинути його. Аналогічно, трек, виключений раніше, потім може бути знову включений фільтром нижче у фільтрувальному скрипті.

Наприклад: включіть усі треки в анімації, імена яких закінчуються на "_Loop", але відмовтеся від будь-яких треків "Skeleton", що мають на кінці "Control", якщо вони не мають у своєму імені "Arm":

@+*_Loop
+*
-Skeleton:*Control
+*Arm*

У наведеному вище прикладі такі треки, як "Skeleton:Leg_Control" будуть відкинуті, тоді як треки "Skeleton:Head", або "Skeleton:Arm_Left_Control", будуть збережені.

Будь-які рядки фільтрів треків, які не починаються з +, або -, ігноруються.

Storage (Зберігання)

За замовчуванням анімації зберігаються як вбудовані. Можна зберегти їх у файл. Це дозволяє додавати власні треки до анімацій та зберігати їх після повторного імпорту.

Optimizer (Оптимізатор)

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

Кліпи

It is possible to specify multiple animations from a single timeline as clips. For this to work, the model must have only one animation that is named default. To create clips, change the clip amount to something greater than zero. You can then name a clip, specify which frames it starts and stops on, and choose whether the animation loops or not.

Успадкування сцен

У багатьох випадках може знадобитися внесення змін до імпортованої сцени. За замовчуванням, це не можливо, тому що , якщо не буде змінено первісний (source) актив (повторно експортовані первісні файл .dae, .gltf, .obj з додатку 3D моделювання), Godot буде повторно імпортувати всю сцену.

Однак можливо зробити локальні модифікації за допомогою Успадкування сцени. Спробуйте відкрити імпортовану сцену, і з’явиться наступне діалогове вікно:

../../../_images/scene_import4.png

В успадкованих сценах єдиними обмеженнями є те що:

  • Не можна видаляти вузли (але їх можна додати в будь-якому місці).
  • Не можна редагувати під-ресурси (збережіть їх зовні, як описано це описано вище)

Решту все можна!

Поради по імпорту

Часто під час редагування сцени виникають загальні потреби, які потрібно виконати після експорту:

  • Додати виявлення зіткнень до об’єктів
  • Встановити об’єкти як навігаційні сітки
  • Видалити вузли, які не використовуються в ігровому движку (наприклад специфічні світильники, що використовуються для моделювання)

Щоб спростити цей робочий процес, Godot пропонує кілька суфіксів, які можна додати до назв об’єктів у вашому програмному забезпеченні для 3D моделювання. При імпорті Godot виявить їх і виконає дії автоматично:

Вилучити вузли (-noimp)

Імена вузлів, які мають цей суфікс, будуть видалені під час імпорту, незалежно від їх типу. Вони не з’являться на імпортованій сцені.

Створити зіткнення (-col, -colonly, -convcolonly)

Суфікс «-col» буде працювати лише для Mesh (Сіток) вузлів. При його виявлено, буде доданий дочірній вузол статичного зіткнення, з використанням тої самої геометрії, що і сітка.

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

Для таких випадків існує суфікс «-colonly», який видалить сітку при імпорті та, натомість, створить зіткнення StaticBody. Це допомагає розділити видиму сітку та фактичне зіткнення.

Суфікс «-convcolonly» створить ConvexPolygonShape замість ConcavePolygonShape.

Суфікс «-colonly» також може використовуватися з порожніми об’єктами Blender. При імпорті він створить :ref:`class_staticbody з вузлом зіткнення в якості нащадка. Вузол зіткнення матиме одну з заздалегідь визначених форм, залежно від типу порожнього об’єкта Blender:

../../../_images/3dimp_BlenderEmptyDrawTypes.png
  • Просто стрілка створить форму RayShape
  • Куб створить BoxShape
  • Зображення створить форму PlaneShape
  • Сфера (та інші, які не перераховані) створить форму SphereShape

Для кращої видимості в редакторі Blender користувач може встановити параметр «X-Ray» на порожніх об’єктах зіткнення та встановити для них певний колір у розділі Налаштування користувача / Теми / 3D Перегляд / Порожняки (Empty).

Створити навігацію (-navmesh)

Меш вузол (вузол сітки) з цим суфіксом буде перетворений на навігаційну сітку. Оригінальний вузол сітки буде видалений.

Створити VehicleBody (-vehicle)

Вузол сітки з цим суфіксом буде імпортований в якості нащадка вузла VehicleBody.

Створити VehicleWheel (-wheel)

Вузол сітки з цим суфіксом буде імпортований в якості нащадка вузла VehicleWheel.

Rigid Body (-rigid)

Створює жорстке (тверде) тіло з цієї сітки.

Цикл анімації (-loop, -cycle)

Анімаційні кліпи в документі COLLADA, які починаються, або закінчуються приставкою «loop», або «cycle», будуть імпортовані як анімація Godot з встановленою галочкою циклу. Це залежне від регістру і не потребує дефісів.

Для Blender це вимагає використання редактора NLA та іменування дії (Action) з префіксом, або суфіксом, «loop» або «cycle».