разработка игр, программирование, сценарии, графика и музыка

English По-русски

Моему игровому 3D движку YUME исполнился один год

Прошёл год с тех пор, как я начал работать над игровым движком 3D под названием YUME. Сначала я ничего не знал об OpenGL и разработке 3D-игр в целом, так что это был очень сложный, но очень полезный опыт. На самом деле, создание этого движка — самое сложное, что я когда-либо делал.

Сегодня YUME используется игрой, над которой я сейчас работаю — Speebot. Игра далека от завершения, но движок прошел долгий путь!

Я подумал, что воспользуюсь этим шансом, чтобы дать общее представление о том, что может сделать этот движок.

YUME год назад
YUME год назад

Как и любой 3D-визуализатор, YUME может отображать 3D-модели: персонажей, реквизит и т.д. Эти модели хранятся в специальных файлах. Формат файла OBJ — это общий стандарт, который поддерживается большинством программ для 3D-моделирования, включая Blender, который я использую. Изначально YUME использовал именно этот формат, но теперь все модели хранятся в моем собственном формате файла под названием MOE — формате, который похож на OBJ, но поддерживает различные полезные дополнительные функции, такие как скелетная анимация.

Самым первым шагом в создании движка было создание системы временных шагов.

Система временных шагов гарантирует, что движок отображает кадры с определёнными интервалами. В отличие от большинства современных игровых движков, YUME не имеет ограничения по частоте кадров, то есть не привязан к 30 или 60 кадрам в секунду. Фактически, частота отображения кадров может быть от 1 до 250 кадров в секунду, но логика игры всегда работает с одинаковой скоростью. Это достигается за счёт отделения игровой логики от отображения картинки на экране. Отображение одного кадра может занимать разное количество времени на разных компьютерах, поэтому частота кадров зависит от производительности программы. А игровая логика всегда обновляется 62.5 раза в секунду (16 миллисекунд на каждый цикл), независимо от частоты кадров на экране. В результате: частота кадров уменьшается на более слабых компьютерах, не нарушая игровой процесс.

Написание и переработка 3D отображения заняли месяцы, и поначалу эта система была довольно простой. Сегодня же 3D ядро YUME поддерживает динамические тени, окружающее освещение, направленное освещение, точечные источники света, точечные светильники, глянцевость текстуры, прозрачность, отражения в реальном времени, искажения и большое количество движущихся частиц. Объекты могут иметь скелетную анимацию, прикрепляться и быть прикреплены к другим объектам.

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

Слой 2D-графики для отображения элементов пользовательского интерфейса и текста
Слой 2D-графики для отображения элементов пользовательского интерфейса и текста

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

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

Шейдеры были для меня в то время совершенно новой концепцией, и мне пришлось какое-то время изучать учебные пособия и примеры кода по этой теме. В конце концов я достаточно хорошо овладел GLSL (язык шейдеров OpenGL), чтобы самостоятельно писать и оптимизировать различные шейдеры, включая водяной шейдер с анимированными текстурами, отражениями и искажениями.

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

Прототип Speebot, июль 2016
Прототип Speebot, июль 2016

3D-звуковую систему пришлось писать с нуля. Все аудио в YUME реализовано с использованием OpenAL.

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

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

Speebot в разработке
Speebot в разработке

В настоящее время я провожу большую часть своего свободного времени, практикуясь в создании музыки. Единственные изменения, которые я вношу в YUME сегодня: оптимизация для лучшей производительности и исправление ошибок.

Я думаю, что на данный момент уже реализовал все основные функции, которые мне нужны.

Следующая статья

Игровой процесс Speebot в HD

Подписаться

Получайте уведомления о новых статьях, чтобы:

Следить за процессом разработки моей следующей игры.

Читать статьи об искусстве и технологиях создания игр и движков.

Получать новости об изменениях в моих играх.

Подписка бесплатная, просто нажмите на кнопку!