Імпортування 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 does not export emissive textures with the glTF file. If your model uses one, it must be brought in separately.

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

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

Godot provides a Blender plugin that will correctly export COLLADA scenes for use in Godot. It does not work in Blender 2.8 or newer, but there are plans to update it in the future.

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

The most powerful one, called godot-blender-exporter. It uses a .escn file, which is kind of another name for a .tscn file (Godot scene file); it keeps as much information as possible from a Blender scene. However, it is considered experimental.

Експортер 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.

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

Примітка

Godot will not reimport materials that are stored in external files unless you remove the associated .material file before reimporting.

To force reimporting materials every time the 3D scene is reimported, change the material storage mode in the 3D scene by selecting it in the FileSystem dock, going to the Import dock then setting Material > Storage to Built-In instead of 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 експорту зберігають хронологію анімації в секундах замість кадрів. Щоб імпортувати анімацію максимально вірно, вказуйте кадри за секунду, які використовуються для її редагування. Якщо цього не зробити, анімація може відтворюватися невірно.

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

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

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

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

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

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

  • Adding collision detection to objects.
  • Setting objects as navigation meshes.
  • Deleting nodes that are not used in the game engine (like specific lights used for modelling).

To simplify this workflow, Godot offers several suffixes that can be added to the names of the objects in your 3D modelling software. When imported, Godot will detect suffixes in object names and will perform actions automatically.

Примітка

All the suffixes described below are case-sensitive.

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

Objects that have the -noimp suffix will be removed at import-time no matter what their type is. They will not appear in the imported scene.

Create collisions (-col, -convcol, -colonly, -convcolonly)

The option -col will work only for Mesh objects. If it is detected, a child static collision node will be added, using the same geometry as the mesh. This will create a triangle mesh collision shape, which is a slow, but accurate option for collision detection. This option is usually what you want for level geometry (but see also -colonly below).

The option -convcol will create a ConvexPolygonShape instead of a ConcavePolygonShape. Unlike triangle meshes which can be concave, a convex shape can only accurately represent a shape that doesn't have any concave angles (a pyramid is convex, but a hollow box is concave). Due to this, convex collision shapes are generally not suited for level geometry. When representing simple enough meshes, convex collision shapes can result in better performance compared to a triangle collision shape. This option is ideal for simple or dynamic objects that require mostly-accurate collision detection.

However, in both cases, the visual geometry may be too complex or not smooth enough for collisions. This can create physics glitches and slow down the engine unneccesarily.

To solve this, the -colonly modifier exists. It will remove the mesh upon importing and will create a StaticBody collision instead. This helps the visual mesh and actual collision to be separated.

The option -convcolonly works in a similar way, but will create a ConvexPolygonShape instead.

The option -colonly can also be used with Blender's empty objects. On import, it will create a StaticBody with a collision node as a child. The collision node will have one of a number of predefined shapes, depending on Blender's empty draw type:

../../../_images/3dimp_BlenderEmptyDrawTypes.png

When possible, try to use a few primitive collision shapes instead of triangle mesh or convex shapes. Primitive shapes often have the best performance and reliability.

Примітка

For better visibility in Blender's editor, you can set the "X-Ray" option on collision empties and set some distinct color for them in Blender's User Preferences > Themes > 3D View > Empty.

Дивись також

See Collision shapes (3D) for a comprehensive overview of collision shapes.

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

A mesh node with the -navmesh suffix will be converted to a navigation mesh. The original Mesh object will be removed at import-time.

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

A mesh node with the -vehicle suffix will be imported as a child to a VehicleBody node.

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

A mesh node with the -wheel suffix will be imported as a child to a VehicleWheel node.

Rigid Body (-rigid)

A mesh node with the -rigid suffix will be imported as a RigidBody.

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

Animation clips in the COLLADA document that start or end with the token loop or cycle will be imported as a Godot Animation with the loop flag set. Unlike the other suffixes described above, this does not require a hyphen.

In Blender, this requires using the NLA Editor and naming the Action with the loop or cycle prefix or suffix.