Godot Engine: переход от 2D к 3D играм – основы, примеры, советы

Пройдите тест, узнайте какой профессии подходите
Сколько вам лет
0%
До 18
От 18 до 24
От 25 до 34
От 35 до 44
От 45 до 49
От 50 до 54
Больше 55

Для кого эта статья:

  • Начинающие разработчики игр, желающие перейти от 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:

  1. Запустите Godot Engine
  2. Нажмите "Новый проект" в менеджере проектов
  3. Укажите имя проекта и путь для сохранения
  4. В разделе "Renderer" выберите "Forward+" или "Mobile" в зависимости от требований вашего проекта
  5. Нажмите "Создать и редактировать"

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

Для удобной навигации в 3D-пространстве используйте следующие комбинации клавиш:

  • Средняя кнопка мыши (удерживание) + движение — вращение камеры
  • Shift + средняя кнопка мыши + движение — перемещение камеры
  • Колесо мыши — приближение/удаление
  • Q — выбор инструмента перемещения
  • W — выбор инструмента поворота
  • E — выбор инструмента масштабирования
  • Z — переключение между локальными и глобальными координатами

Перед началом работы создайте правильную структуру проекта с помощью системы папок:

  • models/ — для хранения 3D моделей
  • textures/ — для текстур и материалов
  • scenes/ — для сцен и уровней
  • scripts/ — для GDScript файлов
  • sounds/ — для аудиофайлов

Теперь создадим базовую 3D сцену:

  1. Перейдите в меню Scene → New Scene
  2. Выберите Node3D как корневой узел
  3. Переименуйте его в "Main"
  4. Сохраните сцену в папку scenes/ (например, main.tscn)

Далее добавим основные элементы 3D сцены:

  1. Правый клик на узле Main → Add Child Node
  2. Добавьте Camera3D, переименуйте в "MainCamera"
  3. Добавьте DirectionalLight3D для общего освещения
  4. Добавьте WorldEnvironment для настройки окружения

Для WorldEnvironment необходимо создать окружение:

  1. В инспекторе WorldEnvironment нажмите "Empty" рядом с Environment
  2. Выберите "New Environment"
  3. Настройте базовые параметры: включите 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 модели выглядит следующим образом:

  1. Создайте или скачайте 3D модель (можно использовать ресурсы с Sketchfab, Turbosquid или OpenGameArt)
  2. Поместите файл модели в папку models/ вашего проекта
  3. Godot автоматически импортирует модель при обнаружении файла
  4. При необходимости настройте параметры импорта, щелкнув на модели и используя вкладку "Import" в инспекторе

После импорта модели её необходимо разместить на сцене:

  1. В FileSystem найдите вашу модель (она должна иметь расширение .mesh или .glb)
  2. Перетащите модель в 3D-вьюпорт или на узел в дереве сцены
  3. Godot создаст новый узел MeshInstance3D с вашей моделью
  4. Используя инструменты трансформации (Q, W, E), позиционируйте модель в сцене

Важные настройки импорта для 3D моделей:

  • Scale — масштаб модели (Godot использует метры как единицы измерения)
  • Generate Tangents — включите для корректного освещения нормал-маппинга
  • Light Baking — настройки запекания освещения
  • Animation — настройки импорта анимаций

Мария Соколова, 3D художник игровых проектов

Я работала над небольшой инди-игрой, и мы столкнулись с серьезной проблемой — все импортированные модели выглядели либо гигантскими, либо микроскопическими. Никакие манипуляции с масштабированием в редакторе не помогали: объекты либо искажались, либо физика работала некорректно.

Решение оказалось простым, но неочевидным: мы не учли, что Godot по умолчанию считает, что 1 единица соответствует 1 метру. Наши модели были созданы с совершенно другим масштабом. После настройки параметра Scale в настройках импорта всех моделей (мы использовали коэффициент 0.01 для моделей из Blender), все встало на свои места. Этот опыт научил нас с самого начала проекта определять масштаб мира и придерживаться его во всех моделях.

После размещения модели часто требуется настроить её материалы и текстуры. Если модель импортирована с материалами, они автоматически создаются в папке импорта. Для редактирования материала:

  1. Выберите узел MeshInstance3D с вашей моделью
  2. В инспекторе найдите раздел "Surface Material Override"
  3. Нажмите на текущий материал для его редактирования или создайте новый

Для создания простых коллизий для вашей модели:

  1. Выберите узел MeshInstance3D
  2. Правый клик → Create Static Body
  3. Godot автоматически создаст StaticBody3D с коллизионной формой, основанной на вашей модели
  4. При необходимости выберите более простую форму коллизии для оптимизации производительности

Для управления несколькими 3D моделями удобно использовать группировку:

  1. Выберите несколько узлов, удерживая Shift
  2. Правый клик → Group Selected Nodes
  3. Введите имя для нового узла Node3D, который будет содержать выбранные модели

Освещение и камеры: создание реалистичной 3D среды

Освещение играет ключевую роль в создании атмосферы и реализма в 3D сцене. Godot предлагает несколько типов источников света, каждый со своими особенностями применения. 🌟

Основные типы освещения в Godot:

  • DirectionalLight3D — имитирует отдаленный источник света, как солнце
  • OmniLight3D — излучает свет во всех направлениях из точки (лампочки, факелы)
  • SpotLight3D — направленный конический луч света (фонарики, прожекторы)
  • ReflectionProbe — не является источником света, но помогает создавать реалистичные отражения

Для настройки базового освещения сцены:

  1. Добавьте DirectionalLight3D как дочерний узел к корню сцены
  2. Настройте его положение и поворот (обычно под углом сверху)
  3. В инспекторе настройте параметры:
    • Color — цвет света
    • Energy — интенсивность (обычно 1.0-2.0 для дневного света)
    • Shadow — включите и настройте параметры теней

Для создания более сложного освещения добавьте вторичные источники света:

  1. Добавьте OmniLight3D для локального освещения объектов
  2. Используйте SpotLight3D для акцентного освещения важных элементов
  3. Настройте параметры 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 предоставляет множество параметров для создания желаемого визуального эффекта:

  1. Добавьте Camera3D как дочерний узел к корню сцены
  2. Позиционируйте камеру в желаемую точку обзора
  3. Настройте основные параметры:
    • Fov (Field of View) — угол обзора (обычно 70-90 градусов)
    • Near/Far — ближняя/дальняя плоскости отсечения
    • Current — включите, чтобы сделать эту камеру активной

Для более динамичной игры вам может понадобиться настроить перемещение камеры. Простой скрипт для камеры от третьего лица:

gdscript
Скопировать код
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:

  1. Выберите узел WorldEnvironment
  2. В настройках Environment включите следующие эффекты:
    • SSAO (Screen Space Ambient Occlusion) — для реалистичных теней в углах
    • Glow/Bloom — для свечения ярких объектов
    • Adjustment — для тонкой настройки цветов и контраста

Для реалистичного неба используйте Sky в настройках WorldEnvironment:

  1. В разделе Background выберите Sky
  2. Нажмите New ProceduralSky
  3. Настройте цвет неба, солнца, горизонта и земли

Скрипты управления объектами в трехмерном мире Godot

Создание интерактивных 3D объектов требует программирования их поведения с помощью скриптов. В Godot для этого используется язык GDScript, обладающий простым синтаксисом и глубокой интеграцией с движком. 🎮

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

  1. Создайте новую сцену с Node3D в качестве корневого узла
  2. Добавьте узел CharacterBody3D и назовите его "Player"
  3. Добавьте CollisionShape3D как дочерний узел для Player
  4. Создайте простую коллизию (например, CapsuleShape3D)
  5. Добавьте MeshInstance3D с соответствующей моделью персонажа
  6. Правой кнопкой мыши кликните на узел Player и выберите "Attach Script"

Базовый скрипт для перемещения персонажа в 3D мире:

gdscript
Скопировать код
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). Добавим функцию взаимодействия с объектами к нашему персонажу:

gdscript
Скопировать код
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()

Теперь создадим интерактивный объект, с которым можно взаимодействовать:

  1. Создайте новую сцену с StaticBody3D в качестве корневого узла
  2. Добавьте MeshInstance3D с моделью (например, куб)
  3. Добавьте CollisionShape3D с соответствующей формой
  4. Прикрепите следующий скрипт:
gdscript
Скопировать код
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:

  1. Импортируйте модель с анимациями
  2. Выберите узел MeshInstance3D
  3. В нижней панели редактора откройте вкладку Animation
  4. Создайте новую анимацию или используйте импортированные
  5. Управляйте анимациями через скрипт:
gdscript
Скопировать код
func play_animation(anim_name):
if $AnimationPlayer.has_animation(anim_name):
$AnimationPlayer.play(anim_name)

Для создания системы физики и коллизий в 3D мире:

  • RigidBody3D — для объектов с полной физической симуляцией
  • StaticBody3D — для неподвижных объектов, с которыми сталкиваются другие
  • CharacterBody3D — для управляемых персонажей с ручной физикой
  • Area3D — для обнаружения объектов, вошедших в определенную зону

Пример скрипта для создания подбираемого предмета с использованием Area3D:

gdscript
Скопировать код
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 для создания корневого узла 3D сцены?
1 / 5

Загрузка...