Введення в 3D

Створення 3D-гри може бути складним завданням. Ця додаткова координата Z робить багато звичайних технік для 2D-ігор недієздатними. Тим не менше, варто пам'ятати, що Godot використовує подібні API для 2D і 3D. Більшість вузлів однакові і присутні як в 2D, так і в 3D версіях. Насправді, варто переглянути уроки з 3D-платформера, або 3D кінематичних персонажів, які майже ідентичні їх 2D-аналогам.

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

Просторовий вузол (Spatial)

Node2D є основою для всіх 2D вузлів. Control є основою для всіх вузлів інтерфейса. Відповідно вузол Spatial є основою для всіх вузлів 3D.

../../_images/tuto_3d1.png

Просторові вузли мають локальне перетворення відносно батьківського вузла (до тих пір, поки батьківський вузол також ** успадковує** від типу Просторовий). До цього перетворення можна отримати доступ як до перетворення 4×3 Transform, або 3 Vector3 члени, що представляють розташування, обертання Ейлера (кути X, Y та Z) та масштаб.

../../_images/tuto_3d2.png

3D-вміст

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

Моделі, створені DCC

Є два шляхи імпорту 3D-моделей в Godot. Перший і найпоширеніший з них - Імпортування 3D сцен, який дозволяє імпортувати цілі сцени (так, як вони виглядають в DCC), включаючи анімацію, скелетні конструкції тощо.

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

Згенерована геометрія

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

У будь-якому випадку цей метод призначений для генерації статичної геометрії (моделі, які не будуть оновлюватися часто), так як створення вершинних масивів і перенесення їх в 3D API створює значні навантаження на продуктивність.

Безпосередня геометрія

Якщо є необхідність генерувати просту геометрію, яка буде часто оновлюватися, Godot надає спеціальний вузол ImmediateGeometry, який надає API негайного режиму в стилі OpenGL 1.x для створення точок, ліній, трикутників тощо.

2D в 3D

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

Недоліком, звичайно ж, є те, що зростає складність і падає продуктивність в порівнянні з простим 2D, а також відсутність прив'язки до роботи з пікселями.

Середовище

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

3D вікно перегляду

Редагування 3D-сцен здійснюється на вкладці 3D. Цю вкладку можна вибрати вручну, але вона буде автоматично включена, при обиранні просторового вузла.

../../_images/tuto_3d3.png

Елементи керування навігацією 3D-сцени за замовчуванням схожі на Blender (з метою мати якусь узгодженість у вільному програмному конвеєрі..), але в параметрах редактора можна налаштувати власні параметри для налаштування кнопок мишки та поведінки і отримати схожість з іншими програмами:

../../_images/tuto_3d4.png

Система координат

Godot використовує метричну систему для всього в 3D, причому 1 одиниця дорівнює 1 метру. Фізика та все інше пристосовані до цієї шкали. Тому спроба використовувати іншу шкалу, як правило, погана ідея (якщо ви не знаєте, що ви робите).

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

Координата Y використовується "вгору", хоча для більшості об'єктів, які потребують вирівнювання (наприклад, світла, камер, капсули зіткнень тощо), вісь Z використовується для напрямків "вперед/назад". Ця конвенція приблизно означає, що:

  • X це сторони

  • Y це верх і низ

  • Z це перед і зад

Простір і маніпуляція gizmos

Переміщення об'єктів в 3D здійснюється через маніпулятор гізмо. Кожна вісь представлена кольором: Червоний, Зелений, Синій позначають X, Y, Z відповідно. Ця конвенція відноситься і до сітки та інших гізмо (а також до мови шейдера, порядку компонентів для Vector3, Color і т. д.).

../../_images/tuto_3d5.png

Деякі корисні прив'язки клавіш:

  • Щоб прив'язати розміщення, або обертання, натисніть Ctrl під час переміщення, масштабування, або обертання.

  • Щоб центрувати вид на виділеному об'єкті, натисніть клавішу F.

Меню «Перегляд»

Параметри перегляду керуються меню "Перегляд" на панелі інструментів вікна перегляду.

../../_images/tuto_3d6.png

Ви можете приховати gizmos в 3D-перегляді редактора через це меню:

../../_images/tuto_3d6_1.png

Щоб приховати певний тип gizmos, ви можете вимкнути їх в меню "Перегляд > Гаджети".

../../_images/tuto_3d6_2.png

Середовище за замовчуванням

Під час створення з Керівника проектів 3D-середовище за замовчуванням має небо.

../../_images/tuto_3d8.png

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

Фотоапарати

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

../../_images/tuto_3d10.png

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

../../_images/tuto_3d11.png

Під час роботи з кількома камерами для кожного вікна перегляду застосовуються такі правила:

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

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

  • Якщо активна камера покине дерево сцени, її місце займе перша камера в порядку дерева.

Освітлення

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