Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Введение в 3D

Creating a 3D game can be challenging. That extra Z coordinate makes many of the common techniques that helped to make 2D games simpler no longer work. To aid in this transition, it is worth mentioning that Godot uses similar APIs for 2D and 3D. Most nodes are the same and are present in both 2D and 3D versions. In fact, it is worth checking the 3D platformer tutorial, or the 3D kinematic character tutorials, which are almost identical to their 2D counterparts.

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

Node3D node

Node2D является базовым узлом для 2D. Control — базовый узел для всегоGUI. Следуя той же логике, движок 3D использует Node3D для всего 3D.

Примечание

Имейте в виду, что узлы «Spatial» теперь называются «Node3D», начиная с Godot 4. Любые ссылки в Godot 3.x на узлы «Spatial» относятся к «Node3D» в Godot 4.

../../_images/tuto_3d1.png

Узлы Node3D имеют локальную трансформацию относительно родительского узла (если родительский узел также наследуется от типа Node3D). Эта трансформация может быть доступна как 4x3 Transform, или как 3 Vector3 в членах, представляющих позицию, вращение по Эйлеру (углы поворота относительно осей X, Y и Z) и масштабирование.

../../_images/tuto_3d2.png

3D контент

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

Модели, созданные вручную (с использованием программного обеспечения для 3D-моделирования)

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

Второй способ заключается в импорте простых файлов .OBJ в качестве ресурсов сетки, которые затем можно поместить в узел MeshInstance 3D для отображения.

Генерация геометрии

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

В любом случае, этот метод предназначен для генерации статичной геометрии (модели которая не будет обновляться часто), так как создание массивов вершин и передача их в 3D API несет существенные затраты в производительности.

Непосредственная геометрия

Если существует потребность в создании простой геометрии, которая будет часто обновляться, Godot предоставляет специальный ресурс ImmediateMesh, который можно использовать в узле MeshInstance3D. Это предоставляет API для создания точек, линий, треугольников и т. д. в стиле непосредственного режима OpenGL 1.x.

2D в 3D

Хотя Godot обладает мощным 2D-движком, во многих играх 2D используется в 3D-среде. Используя фиксированную камеру (ортогональную или перспективную), которая не вращается, такие узлы как Sprite3D и AnimatedSprite3D, могут использоваться для создания 2D-игр, в которых плоские фигуры сочетаются с 3D-фоном, более реалистичным параллаксом, эффектами освещения / тенями и т. д.

Недостатком, конечно же, является увеличение сложности и снижение производительности по сравнению с обычным 2D, а также отсутствие привязки к работе в пикселях.

Окружение

Помимо редактирования сцены, частенько требуется редактировать окружение. Godot предоставляет узел WorldEnvironment, который позволяет изменять цвет фона, режим (например, можно установить скайбокс) и применять несколько типов встроенных эффектов постобработки. Окружения также можно переопределить в камере.

Окно просмотра 3D

Редактирование 3D-сцен выполняется во вкладке 3D. Эта вкладка может быть выбрана вручную, либо, она будет автоматически включаться при выборе узла Node3D.

../../_images/tuto_3d3.png

Элементы управления навигацией по трехмерной сцене по умолчанию аналогичны Blender (стремясь обеспечить некоторую согласованность в конвейере бесплатного программного обеспечения...), но включены параметры для настройки кнопок и поведения мыши, чтобы они были похожи на другие инструменты в настройках редактора:

../../_images/tuto_3d4.png

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

Godot использует метрическую систему для всего. 3D-физика и прочие области настроены на неё, так что попытка использовать другую размерность обычно плохая идея (если вы точно не уверены что делаете).

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

Координата Y используется для направления «вверх». Что касается горизонтальных осей X/Z, Godot использует правую систему координат. Это означает, что для большинства объектов, требующих выравнивания (например, источников света или камер), ось Z используется в качестве направления «указывающего на нас». Это соглашение означает, примерно, что:

  • X это влево/вправо

  • Y это вверх/вниз

  • Z это вперед/назад

Для сравнения с другим 3D программным обеспечением см. следующую таблицу:

3D coordinate systems comparison chart

Image by Freya Holmér

Пространство и гизмо манипуляции

Перемещение объектов в 3D-виде осуществляется с помощью манипуляторов гизмо. Каждая ось представлена цветом: красный, зеленый, синий представляют X, Y, Z соответственно. Это соглашение применяется также к сетке и другим гизмо (а также к языку шейдеров, порядку компонентов для Vector3, Color и т.д.).

../../_images/tuto_3d5.png

Некоторые полезные сочетания клавиш:

  • Чтобы привязать расположение или поворот, нажмите Ctrl при перемещении, масштабировании или повороте.

  • Чтобы центрировать вид на выбранном объекте, нажмите F.

Использование горячих клавиш трансформации в стиле Blender

Начиная с версии Godot 4.2 можно включить горячие клавиши для перемещения, поворота и масштабирования узлов в стиле Blender. В Blender такими горячими клавишами являются:

  • G для перемещения

  • R для вращения

  • S для масштабирования

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

Например, чтобы переместить выделение вверх на 2,5 единицы, введите следующую последовательность (Y + - вверх в Godot):

G-Y-2-.-5-Enter

Чтобы в Godot использовать горячие клавиши преобразования в стиле Blender, перейдите на вкладку «Сочетания клавиш» параметров редактора, а затем в разделе «Spatial Editor»:

  • Назначьте Начать трансформацию перемещения на G.

  • Назначьте Начать трансформацию поворота на R.

  • Назначьте Начать трансформацию размера на S.

  • Наконец, отмените горячую клавишу для «Режим масштабирования», чтобы она не конфликтовала с «Начать трансформацию поворота».

Меню "Обзор"

Параметры просмотра контролируются меню "Обзор" на панели инструментов области просмотра.

../../_images/tuto_3d6.png

Вы можете скрыть гизмо в 3D-виде редактора через это меню:

../../_images/tuto_3d6_1.png

Чтобы скрыть определенные типы гизмо, отключите их в меню "Обзор".

../../_images/tuto_3d6_2.png

Окружение по умолчанию

При создании из Менеджера проектов в 3D окружении по умолчанию установлено небо.

../../_images/tuto_3d8.png

Учитывая, как работает основанный на физике рендеринг, рекомендуется всегда стараться работать с окружением по умолчанию, чтобы обеспечить непрямой и отраженный свет для Ваших объектов.

Камеры

Независимо от того, сколько объектов размещено в 3D пространстве, ничего не будет отображаться, если Camera3D также не будет добавлена в сцену. Камеры могут работать как в ортогональных, так и в перспективных проекциях:

../../_images/tuto_3d10.png

Камеры связаны с родительским окном просмотра и отображают только его. Поскольку корнем дерева сцены является область просмотра, камеры будут отображаться на ней по умолчанию, но если требуются дополнительные области просмотра (либо в качестве цели рендеринга, либо в качестве изображения в картинке), для отображения им нужны их собственные дочерние камеры.

../../_images/tuto_3d11.png

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

  • Если в дереве сцены нет камер, то первая, которая войдет в него, станет активной камерой. Дальнейшие камеры, входящие в сцену, будут игнорироваться (если они не установлены как текущие).

  • Если для камеры установлено свойство "текущая", она будет использоваться независимо от любой другой камеры в сцене. Если свойство установлено, камера станет активной, заменив предыдущую камеру.

  • Если активная камера покидает дерево сцены, её место займет первая камера в древовидной структуре.

Свет

The background environment emits some ambient light which appears on surfaces. Still, without any light sources placed in the scene, the scene will appear quite dark unless the background environment is very bright.

Most outdoor scenes have a directional light (the sun or moon), while indoor scenes typically have several positional lights (lamps, torches, …). See 3D свет и тени for more information on setting up lights in Godot.