Godot Engine: переход от 2D к 3D играм – основы, примеры, советы
Для кого эта статья:
- Начинающие разработчики игр, желающие перейти от 2D к 3D
- Студенты и профессионалы в области графического дизайна и анимации
Люди, интересующиеся использованием Godot Engine для создания игр и 3D приложений
Переход от создания 2D к 3D играм в Godot ощущается как шаг в новое измерение — буквально! Многие начинающие разработчики избегают 3D из-за кажущейся сложности, но правда в том, что Godot Engine делает этот переход максимально плавным. Если вы уже освоили базовые концепции 2D, вы готовы к следующему шагу. В этом руководстве я проведу вас через все этапы создания вашей первой полноценной 3D сцены — от настройки проекта до программирования объектов. 🚀
Мечтаете перенести свои идеи из 3D проектов в коммерчески успешные дизайн-решения? Курс Профессия графический дизайнер от Skypro поможет вам трансформировать навыки визуализации в востребованную профессию. Вы научитесь не только создавать впечатляющие 3D модели, но и адаптировать их для различных медиа, включая игровую индустрию. Наши выпускники успешно применяют принципы 3D дизайна в коммерческих проектах — присоединяйтесь к ним!
Основы 3D разработки в Godot Engine
Перед погружением в трехмерную разработку важно понять ключевые различия между 2D и 3D в Godot. В отличие от плоского мира 2D, трехмерное пространство добавляет ось Z, что меняет принципы работы с объектами, камерой и физикой.
Godot 4.0 и выше предлагает мощные инструменты для 3D-разработки, включая улучшенный рендеринг, физический движок и поддержку различных форматов 3D-моделей. Ключевые компоненты, с которыми вам предстоит работать:
- Spatial/Node3D — базовый класс для всех 3D объектов
- MeshInstance3D — компонент для отображения 3D моделей
- Camera3D — компонент для настройки точки обзора
- DirectionalLight3D, SpotLight3D — различные типы освещения
- RigidBody3D, StaticBody3D — физические тела для симуляции
Координатная система в Godot следует правилу правой руки: X указывает вправо, Y — вверх, а Z — к зрителю (из экрана). Понимание этой концепции критично для правильного позиционирования объектов.
Александр Петров, технический директор игровой студии
Когда я впервые открыл 3D проект в Godot, я почувствовал себя потерянным. После двух лет разработки 2D-игр все инструменты выглядели знакомыми, но работали совершенно иначе. Моей ошибкой было желание перескочить сразу к сложным системам, пропустив базовые концепции.
Поворотным моментом стало возвращение к основам: я создал простую сцену с кубом, настроил камеру и добавил базовое освещение. Каждый день я добавлял по одному новому элементу — сначала научился перемещать объекты в 3D пространстве, затем освоил импорт моделей, потом разобрался с материалами и текстурами. Через месяц такого пошагового обучения я уже мог создавать полноценные 3D прототипы не сложнее, чем в 2D.
Важно понимать разницу между различными типами 3D ресурсов:
| Тип ресурса | Описание | Применение |
|---|---|---|
| Mesh (сетка) | Структура вершин, рёбер и граней | Базовая геометрия объектов |
| Material (материал) | Визуальные свойства поверхности | Определение внешнего вида объектов |
| Texture (текстура) | 2D изображение для материалов | Детализация поверхностей |
| Skeleton (скелет) | Иерархия костей для анимации | Анимация персонажей и объектов |

Настройка рабочего пространства для создания 3D игры
Создание 3D-проекта в Godot начинается с правильной настройки рабочего пространства. Этот этап закладывает основу для комфортной работы и помогает избежать проблем на поздних стадиях разработки.
Для начала создайте новый проект в Godot:
- Запустите Godot Engine
- Нажмите "Новый проект" в менеджере проектов
- Укажите имя проекта и путь для сохранения
- В разделе "Renderer" выберите "Forward+" или "Mobile" в зависимости от требований вашего проекта
- Нажмите "Создать и редактировать"
После создания проекта важно настроить макет редактора для 3D-разработки. Godot предлагает гибкую систему настройки интерфейса. В верхнем правом углу 3D-вьюпорта вы найдёте кнопки для переключения между различными режимами отображения: сетка, текстуры, освещение и т.д.
Для удобной навигации в 3D-пространстве используйте следующие комбинации клавиш:
- Средняя кнопка мыши (удерживание) + движение — вращение камеры
- Shift + средняя кнопка мыши + движение — перемещение камеры
- Колесо мыши — приближение/удаление
- Q — выбор инструмента перемещения
- W — выбор инструмента поворота
- E — выбор инструмента масштабирования
- Z — переключение между локальными и глобальными координатами
Перед началом работы создайте правильную структуру проекта с помощью системы папок:
- models/ — для хранения 3D моделей
- textures/ — для текстур и материалов
- scenes/ — для сцен и уровней
- scripts/ — для GDScript файлов
- sounds/ — для аудиофайлов
Теперь создадим базовую 3D сцену:
- Перейдите в меню Scene → New Scene
- Выберите Node3D как корневой узел
- Переименуйте его в "Main"
- Сохраните сцену в папку scenes/ (например, main.tscn)
Далее добавим основные элементы 3D сцены:
- Правый клик на узле Main → Add Child Node
- Добавьте Camera3D, переименуйте в "MainCamera"
- Добавьте DirectionalLight3D для общего освещения
- Добавьте WorldEnvironment для настройки окружения
Для WorldEnvironment необходимо создать окружение:
- В инспекторе WorldEnvironment нажмите "Empty" рядом с Environment
- Выберите "New Environment"
- Настройте базовые параметры: включите SSAO, активируйте тени, настройте туман если необходимо
Базовые настройки рекомендуются для различных типов 3D проектов:
| Тип проекта | Рекомендуемый рендерер | Настройки окружения |
|---|---|---|
| Мобильная игра | Mobile | Без SSAO, упрощенные тени |
| ПК/Консоль (средние требования) | Forward+ | SSAO medium, тени средней четкости |
| Высококачественный проект | Forward+ | SSAO high, высокая четкость теней, bloom |
| VR проект | Mobile (для производительности) | Минимальные эффекты, оптимизация для FPS |
Импорт и размещение 3D моделей на сцене Godot
Импорт 3D моделей — один из ключевых аспектов создания трехмерной игры. Godot поддерживает различные форматы 3D моделей, но рекомендуется использовать универсальный формат glTF (.gltf или .glb), который сохраняет материалы, текстуры, анимации и другие данные. Также поддерживаются форматы .obj, .fbx и .dae (Collada).
Процесс импорта 3D модели выглядит следующим образом:
- Создайте или скачайте 3D модель (можно использовать ресурсы с Sketchfab, Turbosquid или OpenGameArt)
- Поместите файл модели в папку models/ вашего проекта
- Godot автоматически импортирует модель при обнаружении файла
- При необходимости настройте параметры импорта, щелкнув на модели и используя вкладку "Import" в инспекторе
После импорта модели её необходимо разместить на сцене:
- В FileSystem найдите вашу модель (она должна иметь расширение .mesh или .glb)
- Перетащите модель в 3D-вьюпорт или на узел в дереве сцены
- Godot создаст новый узел MeshInstance3D с вашей моделью
- Используя инструменты трансформации (Q, W, E), позиционируйте модель в сцене
Важные настройки импорта для 3D моделей:
- Scale — масштаб модели (Godot использует метры как единицы измерения)
- Generate Tangents — включите для корректного освещения нормал-маппинга
- Light Baking — настройки запекания освещения
- Animation — настройки импорта анимаций
Мария Соколова, 3D художник игровых проектов
Я работала над небольшой инди-игрой, и мы столкнулись с серьезной проблемой — все импортированные модели выглядели либо гигантскими, либо микроскопическими. Никакие манипуляции с масштабированием в редакторе не помогали: объекты либо искажались, либо физика работала некорректно.
Решение оказалось простым, но неочевидным: мы не учли, что Godot по умолчанию считает, что 1 единица соответствует 1 метру. Наши модели были созданы с совершенно другим масштабом. После настройки параметра Scale в настройках импорта всех моделей (мы использовали коэффициент 0.01 для моделей из Blender), все встало на свои места. Этот опыт научил нас с самого начала проекта определять масштаб мира и придерживаться его во всех моделях.
После размещения модели часто требуется настроить её материалы и текстуры. Если модель импортирована с материалами, они автоматически создаются в папке импорта. Для редактирования материала:
- Выберите узел MeshInstance3D с вашей моделью
- В инспекторе найдите раздел "Surface Material Override"
- Нажмите на текущий материал для его редактирования или создайте новый
Для создания простых коллизий для вашей модели:
- Выберите узел MeshInstance3D
- Правый клик → Create Static Body
- Godot автоматически создаст StaticBody3D с коллизионной формой, основанной на вашей модели
- При необходимости выберите более простую форму коллизии для оптимизации производительности
Для управления несколькими 3D моделями удобно использовать группировку:
- Выберите несколько узлов, удерживая Shift
- Правый клик → Group Selected Nodes
- Введите имя для нового узла Node3D, который будет содержать выбранные модели
Освещение и камеры: создание реалистичной 3D среды
Освещение играет ключевую роль в создании атмосферы и реализма в 3D сцене. Godot предлагает несколько типов источников света, каждый со своими особенностями применения. 🌟
Основные типы освещения в Godot:
- DirectionalLight3D — имитирует отдаленный источник света, как солнце
- OmniLight3D — излучает свет во всех направлениях из точки (лампочки, факелы)
- SpotLight3D — направленный конический луч света (фонарики, прожекторы)
- ReflectionProbe — не является источником света, но помогает создавать реалистичные отражения
Для настройки базового освещения сцены:
- Добавьте DirectionalLight3D как дочерний узел к корню сцены
- Настройте его положение и поворот (обычно под углом сверху)
- В инспекторе настройте параметры:
- Color — цвет света
- Energy — интенсивность (обычно 1.0-2.0 для дневного света)
- Shadow — включите и настройте параметры теней
Для создания более сложного освещения добавьте вторичные источники света:
- Добавьте OmniLight3D для локального освещения объектов
- Используйте SpotLight3D для акцентного освещения важных элементов
- Настройте параметры Range для контроля дистанции освещения
Сравнение настроек источников света для различных сценариев:
| Сценарий | Тип света | Настройки |
|---|---|---|
| Солнечный день | DirectionalLight3D | Color: светло-желтый, Energy: 1.5-2.0, Shadows: включены |
| Ночь/Луна | DirectionalLight3D | Color: синеватый, Energy: 0.2-0.5, Shadows: мягкие |
| Факел/Костер | OmniLight3D | Color: оранжевый, Energy: 3-5, Range: 10-20, Attenuation: 1.5 |
| Фонарик | SpotLight3D | Color: желтоватый, Angle: 30-45°, Range: 15-30, Attenuation: 2.0 |
Для управления восприятием сцены критично правильно настроить камеру. Camera3D в Godot предоставляет множество параметров для создания желаемого визуального эффекта:
- Добавьте Camera3D как дочерний узел к корню сцены
- Позиционируйте камеру в желаемую точку обзора
- Настройте основные параметры:
- Fov (Field of View) — угол обзора (обычно 70-90 градусов)
- Near/Far — ближняя/дальняя плоскости отсечения
- Current — включите, чтобы сделать эту камеру активной
Для более динамичной игры вам может понадобиться настроить перемещение камеры. Простой скрипт для камеры от третьего лица:
extends Camera3D
@export var target: Node3D # Цель для слежения
@export var distance = 5.0 # Расстояние до цели
@export var height = 2.0 # Высота над целью
@export var smoothness = 0.1 # Плавность движения
func _physics_process(delta):
if target:
var target_pos = target.global_transform.origin
var camera_pos = target_pos + Vector3(0, height, distance)
global_transform.origin = global_transform.origin.lerp(camera_pos, smoothness)
look_at(target_pos, Vector3.UP)
Для улучшения визуального качества сцены настройте постобработку через WorldEnvironment:
- Выберите узел WorldEnvironment
- В настройках Environment включите следующие эффекты:
- SSAO (Screen Space Ambient Occlusion) — для реалистичных теней в углах
- Glow/Bloom — для свечения ярких объектов
- Adjustment — для тонкой настройки цветов и контраста
Для реалистичного неба используйте Sky в настройках WorldEnvironment:
- В разделе Background выберите Sky
- Нажмите New ProceduralSky
- Настройте цвет неба, солнца, горизонта и земли
Скрипты управления объектами в трехмерном мире Godot
Создание интерактивных 3D объектов требует программирования их поведения с помощью скриптов. В Godot для этого используется язык GDScript, обладающий простым синтаксисом и глубокой интеграцией с движком. 🎮
Начнем с создания базового скрипта для управляемого игроком персонажа:
- Создайте новую сцену с Node3D в качестве корневого узла
- Добавьте узел CharacterBody3D и назовите его "Player"
- Добавьте CollisionShape3D как дочерний узел для Player
- Создайте простую коллизию (например, CapsuleShape3D)
- Добавьте MeshInstance3D с соответствующей моделью персонажа
- Правой кнопкой мыши кликните на узел Player и выберите "Attach Script"
Базовый скрипт для перемещения персонажа в 3D мире:
extends CharacterBody3D
@export var speed = 5.0
@export var jump_strength = 10.0
@export var gravity = 20.0
@export var mouse_sensitivity = 0.002
var camera_angle = 0.0
func _ready():
# Захватываем мышь для управления камерой
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
# Создаем камеру если её еще нет
if !has_node("Camera3D"):
var camera = Camera3D.new()
add_child(camera)
camera.position = Vector3(0, 1.5, 0) # На уровне глаз
func _input(event):
# Вращение камеры мышью
if event is InputEventMouseMotion:
rotate_y(-event.relative.x * mouse_sensitivity)
var camera = $Camera3D
camera_angle = clamp(camera_angle – event.relative.y * mouse_sensitivity, -1.2, 1.2)
camera.rotation.x = camera_angle
func _physics_process(delta):
# Обработка гравитации
if not is_on_floor():
velocity.y -= gravity * delta
# Обработка прыжка
if Input.is_action_just_pressed("jump") and is_on_floor():
velocity.y = jump_strength
# Получаем входные данные для движения
var input_dir = Input.get_vector("move_left", "move_right", "move_forward", "move_back")
var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
# Применяем горизонтальное движение
if direction:
velocity.x = direction.x * speed
velocity.z = direction.z * speed
else:
velocity.x = 0.0
velocity.z = 0.0
# Перемещаем персонажа
move_and_slide()
Для работы скрипта необходимо настроить систему ввода в Project → Project Settings → Input Map:
- move_forward — W
- move_back — S
- move_left — A
- move_right — D
- jump — Space
Для взаимодействия с объектами в 3D пространстве можно использовать лучи (raycast). Добавим функцию взаимодействия с объектами к нашему персонажу:
func _process(delta):
if Input.is_action_just_pressed("interact"):
interact()
func interact():
var camera = $Camera3D
var ray_length = 3.0
var from = camera.global_transform.origin
var to = from + camera.global_transform.basis.z * -ray_length
var space_state = get_world_3d().direct_space_state
var query = PhysicsRayQueryParameters3D.create(from, to)
var result = space_state.intersect_ray(query)
if result:
if result.collider.has_method("on_interact"):
result.collider.on_interact()
Теперь создадим интерактивный объект, с которым можно взаимодействовать:
- Создайте новую сцену с StaticBody3D в качестве корневого узла
- Добавьте MeshInstance3D с моделью (например, куб)
- Добавьте CollisionShape3D с соответствующей формой
- Прикрепите следующий скрипт:
extends StaticBody3D
var can_interact = true
var is_active = false
func _ready():
# Начальное визуальное состояние
update_appearance()
func on_interact():
if can_interact:
is_active = !is_active
print("Объект активирован: ", is_active)
update_appearance()
# Здесь может быть код для запуска событий,
# анимаций или изменения игрового состояния
func update_appearance():
# Меняем материал в зависимости от состояния
var material = StandardMaterial3D.new()
if is_active:
material.albedo_color = Color(0.0, 1.0, 0.0) # Зеленый
else:
material.albedo_color = Color(1.0, 0.0, 0.0) # Красный
$MeshInstance3D.material_override = material
Для управления сложной анимацией 3D моделей используйте AnimationPlayer:
- Импортируйте модель с анимациями
- Выберите узел MeshInstance3D
- В нижней панели редактора откройте вкладку Animation
- Создайте новую анимацию или используйте импортированные
- Управляйте анимациями через скрипт:
func play_animation(anim_name):
if $AnimationPlayer.has_animation(anim_name):
$AnimationPlayer.play(anim_name)
Для создания системы физики и коллизий в 3D мире:
- RigidBody3D — для объектов с полной физической симуляцией
- StaticBody3D — для неподвижных объектов, с которыми сталкиваются другие
- CharacterBody3D — для управляемых персонажей с ручной физикой
- Area3D — для обнаружения объектов, вошедших в определенную зону
Пример скрипта для создания подбираемого предмета с использованием Area3D:
extends Area3D
@export var item_name = "Ключ"
@export var item_value = 1
func _ready():
connect("body_entered", _on_body_entered)
func _on_body_entered(body):
if body.is_in_group("player"):
print("Игрок подобрал: ", item_name)
if body.has_method("add_item"):
body.add_item(item_name, item_value)
queue_free() # Удаляем предмет из сцены
Работа с 3D в Godot открывает удивительные возможности для ваших игровых проектов. Начав с простых сцен и постепенно добавляя сложности, вы можете создать впечатляющие 3D миры без необходимости в дорогостоящих инструментах или больших командах разработчиков. Помните, что ключом к успеху является постоянная практика и изучение новых техник. Самые сложные проекты начинаются с одного куба и одного источника света — все остальное приходит с опытом и терпением. Теперь у вас есть все необходимые знания для первых шагов в мир 3D разработки в Godot. Пришло время воплотить ваши идеи в трехмерную реальность!
Читайте также
- Godot Engine: какой язык программирования выбрать для разработки игр
- Godot Engine 4.0: создание впечатляющей 3D-графики с нуля
- Спрайты и анимации в Godot: полное руководство для 2D игр
- Экспорт игры в Godot Engine: подробное руководство по платформам
- Годот: понимание сцен и узлов, ключи архитектуры игр
- Оптимизация и тестирование игр в Godot 4: секреты профессионалов
- Настройка физики и столкновений для идеальной 2D игры в Godot
- Оптимизация и архитектура Godot: избегаем ошибок в разработке
- Первая 2D-сцена в Godot Engine: создание и настройка с нуля
- Освещение в Godot: создание реалистичных 3D сцен с тенями