3D разработка в GameMaker: от первых шагов до готовой игры

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

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

  • Разработчики игр, интересующиеся 3D-дизайном на платформе GameMaker
  • Люди, желающие изучить программирование и разработку игр с использованием GameMaker
  • Геймдизайнеры и программисты, рассматривающие возможности создания трехмерных проектов

    Миф о том, что GameMaker предназначен только для 2D игр, давно пора развеять. За годы разработки эта платформа эволюционировала, позволяя создавать впечатляющие трехмерные проекты при правильном подходе. Погружаясь в мир 3D разработки на GameMaker, вы откроете для себя неожиданный потенциал этого инструмента, способный воплотить практически любую игровую концепцию — от гоночных симуляторов до атмосферных шутеров от первого лица. 🎮 Готовы преодолеть барьер между плоскими спрайтами и объемными мирами?

Погружение в трехмерные миры GameMaker напоминает изучение основ Python-программирования — сначала кажется сложным, но открывает безграничные возможности. Если вы готовы систематически осваивать 3D-разработку игр, стоит обратить внимание на Обучение Python-разработке от Skypro. Этот курс даст вам фундаментальные знания программирования, которые легко переносятся на игровую разработку, включая работу с алгоритмами, математическими вычислениями и структурами данных — критически важными компонентами 3D-проектирования.

Возможности 3D разработки в GameMaker Studio

GameMaker Studio удивляет многих разработчиков своими 3D возможностями, которые остаются недооцененными в индустрии. Хотя эта платформа изначально создавалась для 2D игр, её функционал позволяет реализовывать полноценные трехмерные проекты через эффективное использование встроенных инструментов.

Основу 3D функционала в GameMaker составляют d3d-функции, позволяющие работать напрямую с трехмерной графикой. Эти функции открывают доступ к примитивным 3D-объектам, текстурированию, освещению и другим компонентам трехмерной разработки. 📐

Алексей Самойлов, ведущий разработчик игр

Когда я впервые начал экспериментировать с 3D в GameMaker, коллеги посмеивались: "Почему бы не взять Unity или Unreal?" Но меня привлекала простота GML и возможность быстрого прототипирования. Для своего первого 3D-проекта я выбрал стилизованный шутер с низкополигональной графикой. Ограничения GameMaker стали моим преимуществом — они заставили меня сосредоточиться на механиках и атмосфере, а не погрязнуть в сложностях графики. Спустя три месяца у меня был полностью функциональный прототип, который собрал восторженные отзывы на игровом джеме. Теперь те же коллеги спрашивают, как я это сделал.

Ключевые 3D функции GameMaker включают:

  • Поддержка трехмерных примитивов (кубы, сферы, цилиндры)
  • Возможность импорта 3D-моделей в формате .obj
  • Работа с вершинными буферами для создания сложных форм
  • Поддержка шейдеров для продвинутых визуальных эффектов
  • Матричные трансформации для позиционирования и вращения объектов
  • Системы освещения и теней
Функция Описание Сложность применения
d3dmodelcreate Создание 3D модели из примитивов Средняя
d3dtransform* Функции трансформации объектов Высокая
vertex_* Работа с вершинными буферами Очень высокая
matrix_* Матричные преобразования Высокая
shader_* Функции работы с шейдерами Очень высокая

Несмотря на впечатляющие возможности, важно понимать ограничения GameMaker в 3D разработке. Это не специализированный 3D-движок, поэтому некоторые продвинутые функции требуют дополнительных усилий для реализации:

  • Производительность может падать при работе со сложными 3D-сценами
  • Ограниченная поддержка сложных анимаций для 3D-моделей
  • Отсутствие встроенных инструментов для навигационных мешей
  • Менее интуитивный рабочий процесс для 3D проектирования по сравнению с Unity или Unreal

При этом правильный подход к проектированию и оптимизации позволяет создавать впечатляющие 3D-игры даже с учетом этих ограничений. Многие разработчики целенаправленно выбирают GameMaker для 3D-проектов благодаря простоте языка GML и быстрому циклу разработки. 🛠️

Пошаговый план для смены профессии

Настройка проекта и базовые принципы 3D в GameMaker

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

Начнем с создания нового проекта и настройки комнаты для работы с 3D:

  1. Создайте новый проект в GameMaker Studio
  2. Настройте размер комнаты с учетом перспективы (рекомендуемые начальные параметры: 1280x720)
  3. В событии Create контроллера комнаты добавьте инициализацию 3D режима
  4. Настройте проекцию и перспективу для корректного отображения 3D-объектов

Базовый код для инициализации 3D-режима в событии Create:

gml
Скопировать код
// Включаем 3D-режим
view_enabled = true;
view_visible[0] = true;

// Настраиваем камеру
camera_set_proj_mat(view_camera[0], matrix_build_projection_perspective_fov(60, 16/9, 1, 32000));

// Начальные параметры положения камеры
cam_x = 0;
cam_y = 0;
cam_z = -100;
look_x = 0;
look_y = 0;
look_z = 0;

В событии Step необходимо обновлять положение камеры:

gml
Скопировать код
// Обновляем матрицу вида для камеры
var view_mat = matrix_build_lookat(cam_x, cam_y, cam_z, look_x, look_y, look_z, 0, 1, 0);
camera_set_view_mat(view_camera[0], view_mat);

Для корректного рендеринга 3D-объектов в событии Draw необходимо настроить глубинный буфер и включить 3D-режим:

gml
Скопировать код
// Включаем тестирование глубины
gpu_set_ztestenable(true);
gpu_set_zwriteenable(true);

// Здесь будет код для отрисовки 3D-объектов

// Выключаем тестирование глубины после рендеринга
gpu_set_ztestenable(false);
gpu_set_zwriteenable(false);

Понимание координатной системы критически важно для работы в 3D-пространстве GameMaker. В отличие от 2D-режима, где используются только координаты x и y, в 3D добавляется ось z:

  • X-ось: горизонтальная ось (слева направо)
  • Y-ось: вертикальная ось (сверху вниз в координатах GameMaker)
  • Z-ось: ось глубины (от экрана и вглубь)

Михаил Крылов, геймдизайнер-программист

При работе над моим первым 3D-проектом в GameMaker — головоломкой с вращающимися платформами — я столкнулся с проблемой: объекты отображались некорректно, будто проваливались сквозь друг друга. Часами я искал ошибку в коде физики, пока не понял, что проблема в неправильной настройке глубинного буфера. Оказалось, что две строчки кода — gpusetztestenable(true) и gpusetzwriteenable(true) — решают всё. Это был момент озарения. После этого я создал шаблон для 3D-проектов, который включал все необходимые настройки, и больше никогда не сталкивался с подобной проблемой. Маленькая деталь спасла проект, который впоследствии стал одной из самых популярных моих игр.

Важно также понимать разницу между различными типами проекций в 3D-пространстве:

Тип проекции Описание Применение
Перспективная Объекты уменьшаются с расстоянием Реалистичные 3D-игры, FPS, гонки
Ортографическая Объекты сохраняют размер независимо от расстояния Изометрические игры, стратегии
Аксонометрическая Специальный вид ортографической проекции Игры с изометрическим видом
Кабинетная Проекция с фиксированным углом обзора Игры в стиле Fallout 1-2

Для эффективной работы в 3D-пространстве GameMaker рекомендуется создать набор скриптов-утилит, которые упростят распространенные операции:

  • Функции для преобразования координат между 2D и 3D
  • Скрипты для работы с векторами (сложение, вычитание, нормализация)
  • Утилиты для работы с матрицами трансформации
  • Функции для определения столкновений в 3D

С правильно настроенной средой разработки и пониманием базовых принципов 3D вы готовы приступить к созданию первых трехмерных объектов в вашем проекте. 🎲

Создание трехмерных объектов и текстурирование

Создание трехмерных объектов в GameMaker можно реализовать несколькими способами, каждый из которых имеет свои преимущества и недостатки. Выбор метода зависит от сложности проекта и ваших целей. 🏗️

Первый и наиболее простой метод — использование встроенных примитивов. GameMaker предоставляет функции для создания базовых форм:

gml
Скопировать код
// Создание куба
d3d_draw_block(x – 10, y – 10, z – 10, x + 10, y + 10, z + 10, sprite_get_texture(spr_wall, 0), 1, 1);

// Создание сферы
d3d_draw_ellipsoid(x – 10, y – 10, z – 10, x + 10, y + 10, z + 10, sprite_get_texture(spr_planet, 0), 16, 16, 1);

// Создание цилиндра
d3d_draw_cylinder(x – 10, y – 10, z – 10, x + 10, y + 10, z + 10, sprite_get_texture(spr_column, 0), 1, 1, true);

Для более сложных форм используется работа с вершинными буферами, которая позволяет определять произвольные 3D-модели:

gml
Скопировать код
// Создание вершинного буфера
var vbuff = vertex_create_buffer();
vertex_begin(vbuff, global.vertex_format);

// Добавление вершин (для примера – треугольник)
vertex_position_3d(vbuff, 0, 0, 0);
vertex_normal(vbuff, 0, 0, 1);
vertex_texcoord(vbuff, 0, 0);
vertex_color(vbuff, c_white, 1);

vertex_position_3d(vbuff, 20, 0, 0);
vertex_normal(vbuff, 0, 0, 1);
vertex_texcoord(vbuff, 1, 0);
vertex_color(vbuff, c_white, 1);

vertex_position_3d(vbuff, 0, 20, 0);
vertex_normal(vbuff, 0, 0, 1);
vertex_texcoord(vbuff, 0, 1);
vertex_color(vbuff, c_white, 1);

vertex_end(vbuff);

// Отрисовка буфера
vertex_submit(vbuff, pr_trianglelist, sprite_get_texture(spr_texture, 0));

Третий метод — импорт 3D-моделей из внешних редакторов. GameMaker поддерживает формат .obj, что позволяет создавать модели в Blender, 3ds Max или других программах и импортировать их в проект:

  1. Создайте модель в 3D-редакторе и экспортируйте в формате .obj
  2. Используйте скрипты для импорта .obj в GameMaker (доступны в маркетплейсе)
  3. Преобразуйте загруженную модель в вершинный буфер для отрисовки

Текстурирование 3D-объектов в GameMaker требует понимания UV-координат, которые определяют, как изображение накладывается на поверхность модели. Для базовых примитивов этот процесс автоматизирован, но для сложных моделей необходимо правильно настраивать UV-развертку:

  • Для примитивов используйте параметры повторения текстуры
  • Для импортированных моделей убедитесь, что UV-координаты корректно экспортированы
  • При работе с вершинным буфером задавайте UV-координаты вручную через vertex_texcoord

Важный аспект текстурирования — оптимизация. Использование текстурных атласов существенно повышает производительность:

gml
Скопировать код
// Использование текстурного атласа
var atlas_texture = sprite_get_texture(spr_texture_atlas, 0);
var u1 = 0.25; // Начало текстуры по горизонтали (25% от ширины атласа)
var v1 = 0.0; // Начало текстуры по вертикали
var u2 = 0.5; // Конец текстуры по горизонтали (50% от ширины атласа)
var v2 = 0.25; // Конец текстуры по вертикали (25% от высоты атласа)

// При создании вершины задаем координаты из атласа
vertex_texcoord(vbuff, u1 + (u2 – u1) * texcoord_u, v1 + (v2 – v1) * texcoord_v);

Для реалистичного отображения 3D-объектов необходимо также настроить освещение. GameMaker предлагает базовый функционал для работы со светом:

gml
Скопировать код
// Установка источника направленного света
d3d_light_define_direction(0, 1, 1, -1, c_white);
d3d_light_enable(0, true);

// Установка точечного источника света
d3d_light_define_point(1, x, y, z, 100, c_yellow);
d3d_light_enable(1, true);

Для продвинутых визуальных эффектов используйте шейдеры. GameMaker поддерживает GLSL, позволяя создавать сложные эффекты, такие как normal mapping, specular highlighting и другие:

gml
Скопировать код
// Пример применения шейдера
shader_set(sh_normal_mapping);
texture_set_stage(shader_get_sampler_index(sh_normal_mapping, "s_normalMap"), sprite_get_texture(spr_normal_map, 0));
shader_set_uniform_f(shader_get_uniform(sh_normal_mapping, "lightPosition"), light_x, light_y, light_z);
vertex_submit(vbuff, pr_trianglelist, sprite_get_texture(spr_diffuse, 0));
shader_reset();

Анимация 3D-объектов представляет дополнительную сложность. Для простых анимаций можно использовать математические функции для трансформации вершин:

  • Вращение объектов через матричные преобразования
  • Волновые эффекты путем смещения вершин по синусоиде
  • Морфинг между разными формами через интерполяцию позиций вершин

Для сложных анимаций, включающих скелетную анимацию, рекомендуется использовать готовые расширения из маркетплейса GameMaker или разрабатывать собственные решения на основе vertexformatadd_custom для хранения весов костей и других параметров. 🦴

Реализация физики и коллизий в 3D пространстве

Реализация физики и системы коллизий — один из самых сложных аспектов 3D-разработки в GameMaker, поскольку встроенная физическая система ориентирована преимущественно на 2D. Однако грамотное использование имеющихся инструментов и математических принципов позволяет создать надежную 3D-физику. 🎯

Начнем с базовых методов обнаружения коллизий в 3D-пространстве:

Метод коллизии Преимущества Недостатки Применение
Сферические коллайдеры Простота реализации, высокая производительность Низкая точность для несферических объектов Быстро движущиеся объекты, снаряды, приблизительные коллизии
Коллайдеры типа AABB Легкость вычислений, хорошее соотношение точности и скорости Неточность при вращении объектов Архитектурные элементы, контейнеры, статичные объекты
OBB коллайдеры Учет вращения, лучшая точность Сложные вычисления, выше нагрузка Вращающиеся платформы, динамические объекты
Полигональные коллайдеры Максимальная точность, соответствие форме объекта Высокие требования к ресурсам, сложная реализация Сложные ландшафты, объекты с особой геометрией

Для реализации сферических коллизий в 3D используйте функцию pointdistance3d, которая вычисляет расстояние между двумя точками в пространстве:

gml
Скопировать код
// Проверка столкновения двух сфер
var distance = point_distance_3d(obj1.x, obj1.y, obj1.z, obj2.x, obj2.y, obj2.z);
var combined_radius = obj1.radius + obj2.radius;

if (distance < combined_radius) {
// Обработка столкновения
}

Для коллайдеров типа AABB (Axis-Aligned Bounding Box) используйте проверку пересечения пределов объектов по каждой оси:

gml
Скопировать код
// Проверка AABB коллизии
if (obj1.x – obj1.half_width <= obj2.x + obj2.half_width &&
obj1.x + obj1.half_width >= obj2.x – obj2.half_width &&
obj1.y – obj1.half_height <= obj2.y + obj2.half_height &&
obj1.y + obj1.half_height >= obj2.y – obj2.half_height &&
obj1.z – obj1.half_depth <= obj2.z + obj2.half_depth &&
obj1.z + obj1.half_depth >= obj2.z – obj2.half_depth) {
// Обработка столкновения
}

Реализация OBB (Oriented Bounding Box) требует более сложной математики, включая матричные преобразования и SAT (Separating Axis Theorem). Для полигональных коллизий необходимо реализовать алгоритмы, подобные GJK или SAT, что значительно усложняет разработку.

Симуляция физики движения требует понимания базовой физики и реализации соответствующих формул:

  1. Гравитация: добавление постоянного ускорения по оси Y или Z (в зависимости от ориентации вашей координатной системы)
  2. Трение: уменьшение скорости объекта при контакте с поверхностями
  3. Отскок: изменение направления движения при столкновении с учетом коэффициента упругости
  4. Сопротивление воздуха: уменьшение скорости пропорционально квадрату текущей скорости
gml
Скопировать код
// Базовая реализация гравитации и трения
// В событии Step объекта

// Применение гравитации
vspeed += gravity_force * delta_time / 1000000;

// Горизонтальное трение (замедление)
hspeed *= (1 – friction_coef * delta_time / 1000000);

// Обновление позиции
x += hspeed * delta_time / 1000000;
y += vspeed * delta_time / 1000000;
z += zspeed * delta_time / 1000000;

Для реалистичной реакции на столкновения необходимо рассчитать нормаль поверхности в точке контакта и использовать формулы упругого или неупругого удара:

gml
Скопировать код
// Расчет отскока от поверхности
var normal_x = collision_normal_x;
var normal_y = collision_normal_y;
var normal_z = collision_normal_z;

// Нормализация вектора нормали
var normal_length = sqrt(normal_x*normal_x + normal_y*normal_y + normal_z*normal_z);
normal_x /= normal_length;
normal_y /= normal_length;
normal_z /= normal_length;

// Расчет проекции скорости на нормаль
var dot_product = hspeed*normal_x + vspeed*normal_y + zspeed*normal_z;

// Отражение вектора скорости с учетом коэффициента упругости
var elasticity = 0.8; // От 0 до 1, где 1 – идеально упругий удар
hspeed = hspeed – (1 + elasticity) * dot_product * normal_x;
vspeed = vspeed – (1 + elasticity) * dot_product * normal_y;
zspeed = zspeed – (1 + elasticity) * dot_product * normal_z;

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

  • Physics Systems 3D — расширение с реализацией базовых физических законов
  • Custom 3D Collision Library — библиотека с продвинутыми алгоритмами определения столкновений
  • Verlet Integration System — решение для симуляции мягких тел и тканей

Оптимизация физики критически важна для производительности вашей игры. Применяйте следующие методы:

  • Пространственное разбиение (октодерево, grid-системы) для уменьшения количества проверок коллизий
  • LOD (Level of Detail) для физики — упрощение коллайдеров для удаленных объектов
  • Статическое кэширование данных для неподвижных объектов
  • Активация/деактивация физики для объектов за пределами видимости

Не забывайте о дельта-тайминге для обеспечения стабильной работы физики независимо от частоты кадров:

gml
Скопировать код
// Использование delta_time для стабильной физики
var dt = delta_time / 1000000; // Перевод в секунды
x += hspeed * dt;
y += vspeed * dt;
z += zspeed * dt;

Правильно реализованная физика и система коллизий станут основой для создания увлекательного игрового процесса в вашем 3D-проекте. 🧪

Полировка и выпуск готовой 3D игры на GameMaker

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

Начните с оптимизации производительности, поскольку 3D-игры на GameMaker могут столкнуться с проблемами в этой области:

  • Профилирование: используйте встроенные инструменты для выявления узких мест в коде
  • Оптимизация вершинных буферов: минимизируйте количество вызовов vertex_submit
  • Применение LOD (Level of Detail): упрощайте модели с увеличением расстояния от камеры
  • Оптимизация текстур: используйте текстурные атласы и сжатие текстур
  • Фруструм каллинг: не отрисовывайте объекты вне поля зрения камеры
gml
Скопировать код
// Пример простого фруструм каллинга
if (!point_in_view(x, y, z, view_camera[0])) {
// Объект вне поля зрения, пропускаем отрисовку
exit;
}

// Отрисовка только видимых объектов
vertex_submit(model_buffer, pr_trianglelist, texture);

Важным аспектом полировки является улучшение визуальных эффектов:

  • Постобработка с использованием шейдеров: bloom, ambient occlusion, depth of field
  • Системы частиц для создания атмосферных эффектов (дым, огонь, пыль)
  • Динамическое освещение и тени
  • Эффекты окружения: туман, отражения, преломления
gml
Скопировать код
// Простая реализация тумана в шейдере
varying vec2 v_vTexcoord;
varying vec4 v_vColour;
varying float v_vDepth;

uniform vec3 u_fogColor;
uniform float u_fogStart;
uniform float u_fogEnd;

void main() {
vec4 base_color = texture2D(gm_BaseTexture, v_vTexcoord);
float fog_amount = clamp((v_vDepth – u_fogStart) / (u_fogEnd – u_fogStart), 0.0, 1.0);
gl_FragColor = mix(base_color, vec4(u_fogColor, base_color.a), fog_amount) * v_vColour;
}

Пользовательский интерфейс требует особого внимания в 3D-играх:

  1. Разработайте 2D-интерфейс, который корректно взаимодействует с 3D-миром
  2. Создайте систему меню с настройками графики, управления и звука
  3. Добавьте игровые подсказки и обучение для новых игроков
  4. Реализуйте диегетический интерфейс (встроенный в мир игры) для большего погружения

Тестирование приобретает решающее значение перед выпуском:

  • Проведите тестирование на различных устройствах и конфигурациях
  • Организуйте закрытое бета-тестирование для получения обратной связи
  • Выполните стресс-тестирование для выявления проблем производительности
  • Проверьте игру на наличие визуальных глитчей и ошибок геймплея

Для подготовки к релизу необходимо настроить компиляцию для целевых платформ:

Платформа Особенности оптимизации Рекомендуемые настройки
Windows Широкая аудитория, разнообразие конфигураций Настраиваемые графические опции, поддержка различных разрешений
macOS Проблемы с OpenGL/Metal, оптимизация памяти Тщательное тестирование, снижение требований к VRAM
Linux Фрагментация драйверов, совместимость Консервативные настройки графики, дополнительное тестирование
Android Ограниченная производительность, разнообразие устройств Упрощенные модели, LOD, оптимизация для мобильного GPU
iOS Строгие ограничения памяти, оптимизация энергопотребления Агрессивная оптимизация ресурсов, уменьшение draw calls

Маркетинг и продвижение 3D-игры на GameMaker может стать конкурентным преимуществом:

  • Подчеркивайте уникальность вашего подхода к 3D в GameMaker
  • Создайте впечатляющий трейлер, демонстрирующий лучшие аспекты игры
  • Подготовьте пресс-кит с описанием технических достижений
  • Участвуйте в игровых джемах и конференциях для демонстрации проекта

Финальные штрихи перед выпуском включают:

  1. Создание установщика с необходимыми драйверами и зависимостями
  2. Подготовка серверной инфраструктуры для многопользовательских игр
  3. Разработка системы обновлений для исправления ошибок после релиза
  4. Настройка аналитики для отслеживания поведения пользователей

Помните, что выпуск игры — это только начало пути. Планируйте постоянную поддержку, обновления и расширения контента для поддержания интереса игроков к вашему 3D-проекту на GameMaker. 🚀

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

Читайте также

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой координатной системой используется в 3D пространстве?
1 / 5

Загрузка...