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

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

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

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

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

  • glTF 2.0 (рекомендується). Godot має повну підтримку як текстового (.gltf), так і бінарного (.glb) форматів.

  • DAE (COLLADA), старіший формат, який повністю підтримується.

  • OBJ (Wavefront) формат + його файли матеріалів MTL. Також повністю підтримується, але з деякими обмеженнями (немає підтримки для поворотів, скелетів, анімації, PBR матеріалів, ...).

  • ESCN, специфічний формат Godot, який Blender може експортувати за допомогою плагіна.

  • FBX, підтримується через бібліотеку імпорту Open Asset. Однак FBX є патентований, тому ми рекомендуємо використовувати інші формати, перелічені вище, якщо вони підходять для вашого робочого процесу.

Просто скопіюйте файл сцени разом з текстурою у сховище проєкту, і 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. Він не працює в Blender 2.8 або новіших версіях, але є плани оновити його в майбутньому.

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

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

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

Експорт текстур окремо

Хоча текстури можна експортувати з моделлю у певних форматах файлів, таких як glTF 2.0, ви також можете експортувати їх окремо. Godot використовує PBR (фізично правильну візуалізацію) для своїх матеріалів, тому, якщо програма для текстурування може експортувати текстури PBR, вони можуть працювати в Godot. Сюди входять Substance suite, ArmorPaint (з відкритим кодом), і Material Maker (з відкритим кодом).

Примітка

Для отримання додаткової інформації про матеріали Godot дивіться Spatial Material.

Міркування щодо експорту

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

Щоб уникнути проблем із некоректною тріангуляцією після імпортування в Godot, рекомендується зробити 3D-об'єкти триангуляції DCC самостійно. У Blender це можна зробити, додавши модифікатор Triangulate до своїх об’єктів і переконавшись, що у діалоговому вікні експорту встановлено галочку Apply Modifiers. Як варіант, залежно від експортера, ви можете знайти та ввімкнути опцію Triangulate Faces (Трикутні грані) у діалоговому вікні експорту.

Щоб уникнути проблем із виділенням 3D у редакторі, рекомендується застосувати перетворення об’єкта в 3D DCC перед експортом сцени.

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

Імпортер сцен 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.

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

Примітка

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

Щоб змусити повторно імпортувати матеріали кожного разу, коли повторно імпортується 3D-сцена, змініть режим зберігання матеріалів у 3D-сцені, вибравши його на панелі Файлова система, перейшовши до панелі Імпорт, а потім встановивши Матеріал> Зберігання на Built-In (Вбудований) замість Files (Файли).

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 сцени, потрібно змінити параметр зберігання анімації з Built-In (Вбудований) на Files (Файли) на панелі Імпорт. Інакше зміни, внесені до анімації з Godot, будуть загублені під час запуску проекту.

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

Більшість форматів 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 (Оптимізатор)

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

Кліпи

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

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

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

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

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

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

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

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

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

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

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

  • Додати виявлення зіткнень до об'єктів.

  • Встановити об'єкти як навігаційні сітки.

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

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

Примітка

Всі описані нижче суфікси чутливі до регістру.

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

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

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

Параметр -col працюватиме лише для об’єктів Mesh. Якщо він виявлений, буде додано дочірній вузол статичного зіткнення, що використовує ту ж геометрію, що і меш (сітка). Буде створена побудована з трикутників форма зіткнення, яка є повільним, але точним варіантом виявлення зіткнень. Цей варіант, як правило, потрібен для геометрії рівня (але дивіться також -colonly нижче).

Опція -convcol створить ConvexPolygonShape замість ConcavePolygonShape. На відміну від побудованих з трикутників сіток, які можуть бути увігнутими, опукла форма може точно представляти лише фігуру, яка не має жодного увігнутого кута (піраміда опукла, а порожниста коробка увігнута). Через це опуклі форми зіткнення, як правило, не підходять для геометрії рівня. Представляючи досить прості сітки, опуклі форми зіткнення можуть призвести до кращих показників порівняно з формою зіткнення трикутникових сіток. Цей варіант ідеально підходить для простих або динамічних об'єктів, які вимагають здебільшого точного виявлення зіткнень.

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

Для вирішення цієї проблеми існує модифікатор -colonly. Він видалить сітку (меш) під час імпорту та створить зіткнення StaticBody. Це допомагає відокремити візуальну сітку (меш) та фактичне зіткнення.

Параметр -convcolonly працює подібним чином, але замість нього буде створено ConvexPolygonShape.

Параметр -colonly також може використовуватися з порожніми об'єктами Blender. При імпорті він створить StaticBody з вузлом зіткнення в якості нащадка. Вузол зіткнення матиме одну з заздалегідь визначених форм, залежно від типу порожнього об'єкта Blender:

../../../_images/3dimp_BlenderEmptyDrawTypes.png
  • Просто стрілка створить форму RayShape.

  • Куб створить BoxShape.

  • Зображення створить форму PlaneShape.

  • Сфера (та інші, які не перераховані) створить форму SphereShape.

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

Примітка

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

Дивись також

Дивіться Collision shapes (3D) для детального огляду форм зіткнення.

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

Вузол сітки (меша) з суфіксом -navmesh буде перетворений у навігаційну сітку. Оригінальний об'єкт Mesh буде видалено під час імпорту.

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

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

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

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

Тверде тіло (-rigid)

Вузол сітки з суфіксом -rigid буде імпортований як RigidBody.

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

Анімаційні кліпи в документі COLLADA, які починаються, або закінчуються приставкою loop чи cycle, будуть імпортовані як анімація Godot з встановленою галочкою циклу. На відміну від інших суфіксів, описаних вище, для цих не потрібен дефіс.

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