Введение в 3D

Создание 3D игры может быть трудоемким. Дополнительная Z координата делает многие обычные техники для создания 2D игр неработоспособными. Для помощи в этом переходе, стоит упомянуть что Godot использует похожие API для 2D и 3D. Большинство узлов одинаковые и представлены в 2D и 3D версиях. На самом деле, стоит проверить пример с 3D платформером, или примеры с кинематикой 3D персонажей, чтобы убедиться что они почти идентичны с их 2D версиями.

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

Узел Spatial

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

../../_images/tuto_3d1.png

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

../../_images/tuto_3d2.png

3D контент

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

Модели, созданные DCC

В Godot есть два способа импорта 3D-моделей. Первый и наиболее распространенный - Импорт 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. Эту вкладку можно выбрать вручную, либо она будет автоматически включена при выборе узла Spatial.

../../_images/tuto_3d3.png

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

../../_images/tuto_3d4.png

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

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

When working with 3D assets, it's always best to work in the correct scale (set your DCC to metric). Godot allows scaling post-import and, while this works in most cases, in rare situations it may introduce floating-point precision issues (and thus, glitches or artifacts) in delicate areas, such as rendering or physics, so make sure your artists always work in the right scale!

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

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

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

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

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

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

../../_images/tuto_3d5.png

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

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

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

Меню "Обзор"

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

../../_images/tuto_3d6.png

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

../../_images/tuto_3d6_1.png

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

../../_images/tuto_3d6_2.png

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

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

../../_images/tuto_3d8.png

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

Камеры

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

../../_images/tuto_3d10.png

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

../../_images/tuto_3d11.png

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

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

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

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

Свет

Godot has a limit of up to 8 lights per mesh. Aside from that, there is no limitation on the number of lights, nor of types of lights, in Godot. As many as desired can be added, as long as performance allows, and no more than 8 lights shine on a single mesh.