Введение в 3D
Создание 3D-игр может быть сложной задачей. Дополнительная координата Z делает нерабочими многие техники, упрощавшие разработку 2D-игр. Для упрощения перехода стоит отметить, что Godot использует схожие API для 2D и 3D: большинство узлов идентичны и существуют в 2D- и 3D-версиях. Рекомендуем ознакомиться с туториалом по 3D-платформерам или 3D-кинематическим персонажам — их логика практически идентична 2D-аналогам.
Демонстрационная версия шутера от третьего лица Godot (TPS), доступная в репозитории Github или Asset Library.
В 3D математика несколько сложнее, чем в 2D. Для ознакомления с соответствующей математикой, написанной специально для разработчиков игр (а не для математиков или инженеров), см. разделы Векторная математика и Использование 3D-преобразований.
3D рабочее пространство
Редактирование 3D-сцен происходит в рабочей области 3D. Эту область можно выбрать вручную, но она автоматически активируется при выборе любого узла Node3D.
Подобно 2D, вкладки под селектором рабочей области используются для переключения между текущими открытыми сценами или создания новой с помощью кнопки плюс (+). Левый и правый доки должны быть знакомы из editor introduction.
Под selector сцен расположена главная панель инструментов, а под главной панелью инструментов — область 3D-просмотра.
Основная панель инструментов
Некоторые кнопки на главной панели инструментов такие же, как и в 2D-рабочем пространстве. Краткое объяснение дается вместе с сочетанием клавиш, если курсор мыши наведен на кнопку на одну секунду. Некоторые кнопки могут иметь дополнительную функциональность, если выполняется еще одно нажатие клавиши. Ниже слева направо приведен обзор основных функций каждой кнопки с ее сочетанием клавиш по умолчанию:
Режим выбора (Q): Позволяет выбирать узлы в области просмотра. Щелкните левой кнопкой мыши по узлу, чтобы выбрать один. Щелкните левой кнопкой мыши и перетащите прямоугольник, чтобы выбрать все узлы в пределах границ прямоугольника после отпускания. Удерживание Shift при выборе добавляет больше узлов к выбору. Щелчок по выбранному узлу с удерживанием Shift отменяет выбор узла. В этом режиме вы можете использовать гизмо для перемещения или вращения.
Режим перемещения (W): Включает режим перемещения (или трансляции) для выбранных узлов. Подробнее см. Пространство и гизмо манипуляции.
Режим вращения (E): Включает режим вращения для выбранных узлов. Подробнее см. Пространство и гизмо манипуляции.
Режим масштабирования (R): Включает масштабирование и отображает гизмо масштабирования в разных осях для выбранных узлов. Подробнее см. Пространство и гизмо манипуляции.
Показать список выбираемых узлов в позиции щелчка: как следует из описания, это предоставляет список выбираемых узлов в позиции щелчка в виде контекстного меню, если в области щелчка находится более одного узла.
Заблокировать (Ctrl + L) выбранные узлы, предотвращая выбор и перемещение в области просмотра. Повторное нажатие кнопки (или использование Ctrl + Shift + L) разблокирует выбранные узлы. Заблокированные узлы можно выбрать только в дереве сцены. Их можно легко определить по замку рядом с именами их узлов в дереве сцены. Нажатие на этот замок также разблокирует узлы.
Group selected nodes (Ctrl + G). Это позволяет выбрать корневой узел, если выбран любой из дочерних узлов. Использование Ctrl + G разгруппирует их. Кроме того, нажатие кнопки разгруппировать в дереве сцены выполняет то же действие.
Ruler Mode (M): Если этот режим включен, вы можете щелкнуть и перетащить курсор, чтобы измерить расстояние на сцене в метрах.
Use Local Space (T): Если этот параметр включен, гизмо узла рисуются с использованием угла поворота текущего узла вместо глобальных осей области просмотра.
Use Snap (Y): Если включено, движение и вращение привязываются к сетке. Привязку также можно временно активировать с помощью Ctrl во время выполнения действия. Настройки для изменения параметров привязки описаны ниже.
Toggle preview sunlight: Если в сцене нет DirectionalLight3D, предварительный просмотр солнечного света может использоваться в качестве источника света. Подробнее см. Предварительный просмотр окружения и освещения.
Toggle preview environment: Если в сцене нет WorldEnvironment, предварительный просмотр окружения можно использовать в качестве заполнителя. Подробнее см. Предварительный просмотр окружения и освещения.
Edit Sun and Environment Settings (three dots): открывает меню для настройки параметров солнечного света и окружения предварительного просмотра. Подробнее см. Предварительный просмотр окружения и освещения.
Меню трансформации: имеет три опции:
Snap Object to Floor: прикрепляет объект к твердому полу.
Transform Dialog: открывает диалоговое окно для ручной настройки параметров преобразования (перемещение, поворот, масштабирование и преобразование).
Snap Settings: позволяет изменять параметры преобразования, поворота привязки (в градусах) и масштабирования привязки (в процентах).
View menu: управляет параметрами просмотра и включает дополнительные области просмотра:
В этом меню вы также можете показать/скрыть сетки, которые по умолчанию установлены на 1x1 метр, и начало координат, где пересекаются синяя, зеленая и красная линии осей. Кроме того, в этом меню можно переключать определенные типы гизмо.
Открытый глаз означает, что штуковина видна, закрытый глаз означает, что она скрыта. Полуоткрытый глаз означает, что она видна также через непрозрачные поверхности.
Нажатие на Settings в этом меню просмотра открывает окно для изменения параметра Вертикальное поле зрения (VFOV) (в градусах), значений Z-Близко и Z-Далеко.
Рядом с меню View могут быть видны дополнительные кнопки. На изображении панели инструментов в начале этой главы появляется дополнительная кнопка Mesh, поскольку выбран MeshInstance3D. Это меню предоставляет некоторые быстрые действия или инструменты для работы с определенным узлом или выбором.
Система координат
Godot использует метрическую систему для всего. 3D-физика и прочие области настроены на неё, так что попытка использовать другую размерность обычно плохая идея (если вы точно не уверены что делаете).
Во время работы с 3D-ассетами всегда лучше использовать правильный масштаб (установите единицу измерения в метрику в программном обеспечении для 3D-моделирования). Godot позволяет масштабировать их после импорта, и, это работает в большинстве случаев, но, изредка, это может привести к проблемам точности с плавающей запятой (и, следовательно, к сбоям или артефактам) в таких деликатных областях, таких как рендеринг, или физика. Убедитесь , что Ваши художники всегда работают в правильном масштабе!
Координата Y используется для направления «вверх». Что касается горизонтальных осей X/Z, Godot использует правую систему координат. Это означает, что для большинства объектов, требующих выравнивания (например, источников света или камер), ось Z используется в качестве направления «указывающего на нас». Это соглашение означает, примерно, что:
X это влево/вправо
Y это вверх/вниз
Z это вперед/назад
Для сравнения с другим 3D программным обеспечением см. следующую таблицу:
Изображение от Freya Holmér
Пространство и гизмо манипуляции
Перемещение, вращение и масштабирование объектов в 3D-окне выполняется с помощью манипуляторов-гизмо. Каждая ось представлена цветом: красный (Red), зелёный (Green) и синий (Blue) соответствуют осям X, Y и Z. Эта система обозначений также применяется к сетке и другим гизмо (а также в языке шейдеров, порядке компонентов для Vector3, Color и т.д.).
Некоторые полезные сочетания клавиш:
Чтобы привязать расположение или поворот, нажмите 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.
Наконец, отмените горячую клавишу для «Режим масштабирования», чтобы она не конфликтовала с «Начать трансформацию поворота».
Совет
Дополнительные сочетания клавиш можно найти на странице 3D / Пространственный редактор.
Узел Node3D
Node2D является базовым узлом для 2D. Control — базовый узел для всегоGUI. Следуя той же логике, движок 3D использует Node3D для всего 3D.
Узлы Node3D имеют локальную трансформацию, которая относительна к родительскому узлу (если родительский узел также является или наследуется от типа Node3D).** Эту трансформацию можно получить как 3×4 Transform3D или в виде трёх компонентов Vector3: позиции, вращения Эйлера (углы X, Y и Z) и масштаба.
3D контент
В отличие от 2D, где загрузка изображения и рисование происходит просто, в 3D немного сложнее. Контент должен быть создан с помощью специальных 3D-инструментов (также называемых инструментами создания цифрового контента, или DCC) и экспортирован в файл с форматом обмена для импорта в Godot. Это необходимо, поскольку 3D-форматы не так стандартизированы, как изображения.
Генерация геометрии
Возможно создание пользовательской геометрии используя ресурс ArrayMesh напрямую. Просто создавайте ваши массивы и используйте функцию ArrayMesh.add_surface_from_arrays(). Существует вспомогательный класс SurfaceTool, который предоставляет более простой API и вспомогательные функции для индексации, генерации нормалей, тангенсов, итд.
В любом случае, этот метод предназначен для генерации статичной геометрии (модели которая не будет обновляться часто), так как создание массивов вершин и передача их в 3D API несет существенные затраты в производительности.
Примечание
Чтобы узнать больше о создании прототипов внутри Godot или с использованием внешних инструментов, см. Прототипирование уровней с помощью CSG.
Непосредственная геометрия
Если существует потребность в создании простой геометрии, которая будет часто обновляться, Godot предоставляет специальный ресурс ImmediateMesh, который можно использовать в узле MeshInstance3D. Это предоставляет API для создания точек, линий, треугольников и т. д. в стиле непосредственного режима OpenGL 1.x.
2D в 3D
Хотя Godot обладает мощным 2D-движком, во многих играх 2D используется в 3D-среде. Используя фиксированную камеру (ортогональную или перспективную), которая не вращается, такие узлы как Sprite3D и AnimatedSprite3D, могут использоваться для создания 2D-игр, в которых плоские фигуры сочетаются с 3D-фоном, более реалистичным параллаксом, эффектами освещения / тенями и т. д.
Недостатком, конечно же, является увеличение сложности и снижение производительности по сравнению с обычным 2D, а также отсутствие привязки к работе в пикселях.
Окружение
Помимо редактирования сцены, частенько требуется редактировать окружение. Godot предоставляет узел WorldEnvironment, который позволяет изменять цвет фона, режим (например, можно установить скайбокс) и применять несколько типов встроенных эффектов постобработки. Окружения также можно переопределить в камере.
Предварительный просмотр окружения и освещения
По умолчанию любая 3D-сцена, в которой нет узла WorldEnvironment или DirectionalLight3D, будет иметь включенный предварительный просмотр того, чего не хватает для освещения сцены.
Предварительный свет и окружение будут видны только в сцене в редакторе. Если вы запустите сцену или экспортируете проект, они не повлияют на сцену.
Подсветку и окружение можно включить или выключить в верхнем меню, нажав на соответствующий значок.
Раскрывающееся меню с тремя точками рядом с этими значками можно использовать для настройки свойств среды предварительного просмотра и освещения, если они включены.
Для каждой сцены в одном проекте используется одно и то же предварительный просмотр солнца и окружения, поэтому вносите только те изменения, которые будут применяться ко всем сценам, для которых вам понадобятся предварительный просмотр света и окружения.
Камеры
Независимо от того, сколько объектов размещено в 3D пространстве, ничего не будет отображаться, если Camera3D также не будет добавлена в сцену. Камеры могут работать как в ортогональных, так и в перспективных проекциях:
Камеры связаны с родительским окном просмотра и отображают только его. Поскольку корнем дерева сцены является область просмотра, камеры будут отображаться на ней по умолчанию, но если требуются дополнительные области просмотра (либо в качестве цели рендеринга, либо в качестве изображения в картинке), для отображения им нужны их собственные дочерние камеры.
При работе с несколькими камерами для каждого окна просмотра применяются следующие правила:
Если в дереве сцены нет камер, то первая, которая войдет в него, станет активной камерой. Дальнейшие камеры, входящие в сцену, будут игнорироваться (если они не установлены как текущие).
Если для камеры установлено свойство "текущая", она будет использоваться независимо от любой другой камеры в сцене. Если свойство установлено, камера станет активной, заменив предыдущую камеру.
Если активная камера покидает дерево сцены, её место займет первая камера в древовидной структуре.
Свет
Фоновая среда излучает некоторое окружающее освещение, которое появляется на поверхностях. Тем не менее, без каких-либо источников света, размещенных в сцене, сцена будет выглядеть довольно темной, если только фоновая среда не очень яркая.
Большинство сцен на открытом воздухе имеют направленный свет (солнце или луна), в то время как сцены в помещении обычно имеют несколько позиционных источников света (лампы, факелы, …). См. 3D свет и тени для получения дополнительной информации о настройке света в Godot.