Как я создал собственный 3D движок и игру на нём за 20 месяцев / Хабр
Эту статью я написал для своего блога в октябре 2017 года.
Речь идёт об игре Speebot, которая сейчас выпущена в Steam. Бесплатная demo версия прилагается.
Я разрабатывал эту игру с января 2016 года в своё свободное время в одиночку. Мною выполнено всё программирование, дизайн игрового процесса, создание графики и музыки. Кроме того, я написал собственный игровой движок с нуля.
Люди часто спрашивают меня, почему я решил создать свой движок, когда на рынке доступно множество бесплатных универсальных движков. Есть много причин, и о них я попытаюсь рассказать в этой статье.
Одним из самых больших преимуществ собственного движка является абсолютный контроль кода. Есть возможность настроить его именно так, как это нужно для конкретной задачи. Такой узкоспециализированный движок получается оптимизированным для конкретного типа игр и работает быстрее и надёжнее, чем универсальный движок.
Универсальные игровые движки называются так, потому что они предназначены для общего использования, и в них заложены функции, которые не всем нужны. Это неизбежно приводит к «раздуванию» кода, и к замедлению производительности игр.
Второе преимущество — это контроль самого процесса разработки. Я считаю, что инструментарий должен быть по-максимуму удобным для разработчика. Что является удобным — зависит от самого типа данной игры. Например, для Speebot — это встроенный редактор уровней, который позволяет быстро создавать новые уровни и незамедлительно их тестировать.
Решение использовать собственный движок позволяет мне интегрировать мои собственные инструменты таким образом, чтобы мне было проще и быстрее создавать контент.
Ещё один большой плюс: не нужно соглашаться с условиями лицензии стороннего движка, подписывать договора и платить проценты от прибыли.
Ну и наконец: написание собственного движка — это очень интересно.
Разработка движка началась в январе 2016 года. Я назвал его YUME («мечта» по-японски). Он написан на Haxe, C++ и OpenGL. Я использую модифицированную версию библиотеки Lime, которая включает в себя несколько полезных функций, например, позволяет загружать ресурсы и открывает доступ к OpenGL.
До начала создания движка я почти ничего не знал о разработке 3D игр. Нужно было разбираться в OpenGL читая документацию, форумы и уроки, предназначенные для других языков (Java и C++). Через пару месяцев у меня получился довольно стабильный 3D-визуализатор.
Кроме самого 3D-визуализатора, нужно было с нуля создать множество разных систем: 2D-визуализатор, машину состояний, систему временных шагов (об этом позже), систему интерфейсов, систему управления мышью, клавиатурой и джойстиками, динамические тени, 3D звуковую систему (используя OpenAL), загрузку моделей (в собственном формате, основанном на IQM), «скелетные» анимации, иерархию объектов, эффект зеркального отражения в реальном времени, отображения текста и так далее.
В конце концов, получилась 3D библиотека, которую можно использовать для чего-то конкретного. Многое из того, что я перечислил, присутствует и в других движках, но в YUME есть несколько отличий. Одно из них — система временных шагов.
Система временных шагов гарантирует, что движок обрабатывает и показывает кадры игры с определённым интервалом. В YUME нет ограничения по количеству кадров в секунду, т.е. нет привязанности к 30 или 60 кадрам в секунду. Частота кадров может быть любая, а игра всё равно будет работать с одной и той же скоростью, потому что частота обновления логики не связана с частотой обновления экрана. На компьютерах разных мощностей может быть разная производительность, и время для показа одного кадра может быть любым. А логика всегда привязана к частоте 62.5 циклов в секунду (16 миллисекунд на каждый цикл). В этом основной принцип системы временных шагов, хотя есть некоторые крайние случаи.
В результате: на более слабых компьютерах уменьшается частота кадров в секунду, но на игровой процесс это не влияет.
Ранняя версия YUME.У меня была готовая библиотека, но пока ещё не движок. Пришла пора начать разрабатывать игру, и принимать решения о нужных функциях. К тому времени у меня уже было несколько идей, и я знал, что хотел попробовать поэкспериментировать с 3D «плитками».
Я начал создавать систему игровых уровней, которая использовала что-то похожее на 2D плитки (tilemaps), но с одним дополнительным измерением. Получается, что уровень можно сложить из «кубиков», как конструктор. Я создал редактор карт, чтобы ускорить процесс создания уровней. В итоге этот редактор попал в финальную версию игры и доступен каждому игроку.
Движок автоматически определяет, какую 3D модель использовать для отображения каждой плитки, в зависимости от соседних плиток. Придумал способ, как объединить все плитки в одну общую 3D модель, чтобы видеокарте не нужно было рисовать каждую плитку индивидуально. Вся карта рисуется за один раз, что очень сильно улучшает производительность.
Уровни можно редактировать и тестировать сразу. Для продуктивности — то что нужно.
Я написал простую систему игровой физики и начал экспериментировать с игровым процессом. Через несколько недель был готов первый прототип игры, в котором игрок мог перемещать цилиндр по 3D уровню.
YUME продолжал развиваться параллельно с разработкой Speebot (примерно в это время я выбрал такое название для игры). Было найдено и устранено несколько проблем с архитектурой движка, добавилось несколько новых функций: физика, частицы, отражения на поверхности воды, инструменты для анимации камеры, интерактивные объекты… Постепенно библиотека эволюционировала в игровой движок.
Я продолжал добавлять новые элементы игрового процесса, оставляя элементы, которые казались мне интересными, и избавляясь от лишнего. После некоторых экспериментов с художественным направлением графики игры я создал персонажа в Blender — маленького робота с одним колесом. Персонаж нарисован и анимирован в мультяшном стиле.
В это время я уже работал в основном над самой игрой, а не над движком. Я продолжал создавать новые уровни, декорации, персонажи и элементы игры.
В конце 2016 года я сделал паузу от разработки игры, и посвятил несколько месяцев изучению и практике написания музыки. У меня нет музыкального образования, но это — моё хобби. У меня уже был небольшой опыт в композиции музыки для моей предыдущей игры Hypnorain, но я хотел улучшить свои навыки, поэтому снова погрузился в изучение музыкальной теории. Для композиции музыки я использовал программу SunVox, которая является виртуальным модульным синтезатором. В финальной версии игры Speebot всего 23 трека, которые вместе составляют более часа оригинальной музыки. Я удовлетворён результатом, и продолжу улучшать свои навыки для следующей игры.
После этого я концентрировался на создании новых уровней, добавлении новых игровых элементов, написании музыки и устранении ошибок. Такой подход к разработке игр мне по душе. Если мне становится скучно заниматься одним и тем же делом, я переключаюсь на другой вид деятельности, и поэтому не теряю интереса к разработке игры.
После выпуска нескольких демо версий, обработки отзывов от игроков и улучшения игры, Speebot был выпущен в октябре 2017 года. В финальной версии игры 200 уровней, 4 мира, редактор пользовательских уровней, несколько дополнительных режимов игры, и много другого дополнительного контента.
Самое сложное при разработке игры было сохранять мотивацию и интерес на протяжении всех 20 месяцев. Работать над игрой мне удавалось только по вечерам после университета и работы, и по выходным дням. Но всё равно, это было очень интересно.
Я продолжу использовать и развивать свой движок YUME в своих будущих играх, и уже начал работать над своим следующим проектом.
После написания этой статьи я разработал и выпустил ещё две игры на этом движке: сюжетная приключенческая игра Phantom Path, и игра-головоломка Pilie Pals.
Японский домик. 3D игра-конструктор | Правильные игры
Количество игроков:
Рекомендуемый возраст:
Среднее время игры:
10-90 минут
— 102 карты стен;
— 12 карт ширм;
— 36 карт перекрытий;
— правила игры.
Бумажные стены — неотъемлемый элемент традиционного японского дома. Сначала возводился деревянный каркас здания, потом на нём закрепляли рамы с натянутой плотной бумагой. В любой момент такие стены можно было снять или передвинуть, чтобы объединить несколько комнат или проветрить жилище в летнюю жару. Кроме того, бумага пропускала свет, обходилась недорого и была безопасна при землетрясениях.
Настольная игра «Японский домик» — это трёхмерный конструктор, который продолжает вековые традиции японского строительства. С помощью специальных карт игроки сооружают многоярусные бумажные здания, соревнуясь как в скорости, так и в прочности построек. В зависимости от числа участников и выбранного режима игры, «Японский домик» может быть как шумным состязанием в ловкости, так и медитативным занятием, требующим полного сосредоточения.
В «Японском домике» карты четырёх типов: по две разновидности стен и перекрытий. Хэки — это стены обычного размера, чуть пошире классических игральных карт. Они отличаются изображениями и пронумерованы от 1 до 4, однако эти цифры имеют значение только в некоторых режимах игры. Гамэн — стены вдвое больше хэки. На них тоже встречаются разные иллюстрации, однако все гамэн отмечены нулями. Перекрытия называются янэгаэ, они тоже бывают маленькие, размером с хэки, и большие, величиной с гамэн. В янэгаэ сделаны отгибающиеся упоры-симэгу, которые не дают стенам разъезжаться. Простейший строительный модуль называется каригоя: это две хэки, поставленные «шалашиком» на маленькую янэгаэ. Однако чаще всего в строительстве используется кёдо — два перпендикулярных «шалашика» на большой янэгаэ. Если установить друг на друга несколько кёдо и увенчать их каригоя, получится элегантная башня, напоминающая классические японские замки.
В правилах описано 11 вариантов игры, однако на деле их разнообразие ограничено только вашей фантазией. Одни варианты предлагают каждому участнику построить башню по определённому проекту: высотой в шесть, семь, восемь или даже десять этажей. Побеждает тот, кто сделает это быстрее остальных. В других режимах игры важнее не скорость, а аккуратность. Например, игроки строят домики высотой не меньше трёх этажей, а потом вместе начинают трясти стол: тот, чья конструкция разрушится последней, становится победителем. Есть и варианты со свободным творчеством, когда каждый участник возводит постройку по собственному усмотрению, а её ценность определяется количеством использованных элементов и высотой здания. При желании можно вообще ничего не строить, а наоборот, разгребать завалы: игроки высыпают на стол груду хэки, устанавливают сверху несколько каригоя и по одной вытаскивают карты из кучи, стараясь не уронить «шалашики». Ну и разумеется, вы вправе ни с кем не соревноваться, а просто построить большой и красивый японский замок — совместными усилиями или в одиночку.
«Японский домик» — это спокойная и красивая творческая игра, которая подойдёт и для семейного круга, и для детского досуга. Она учит терпению, спокойствию, сосредоточенности, а также умению создавать красоту из обыкновенных кусочков картона.
Форум по игре «Японский домик» на сайте BGG
Если у Вас есть любые вопросы по правилам нашей игры, будем рады ответить на специальном форуме о ней на международном портале BoardGameGeek на русском языке.
Частицы истории
Строительные карты «Японского домика» оформлены не просто иллюстрациями в японском стиле, а изображениями, взятыми с подлинных предметов японской старины конца XIX — первой половины XX столетия. Например, на одной из гамэн воспроизведён фрагмент бумажной ширмы с иллюстрацией к классическому японскому роману «Повесть о Гэндзи», а в основу хэки легли экраны и ширмы периода Мэйдзи. Эти раритеты были любезно предоставлены московской галереей японского антиквариата «Югэн».
Об авторе
дизайнов 3D-игр, тем, шаблонов и загружаемых графических элементов на Dribbble
Просмотреть Frozeverse — веб-сайт игры Metaverse
Frozeverse — веб-сайт игры Metaverse
Контроллер просмотра 🕹
Контроллер 🕹
Просмотр игрового мира
Игровой мир
Просмотреть эволюцию — Zelda
Эволюция — Зельда
Посмотреть мини-игру
Мини-игра
Посмотреть приложение Game Store
Приложение Game Store
Посмотреть Стреляй и беги
Стреляй и беги
Посмотреть GME- Игровая комната
GME- игровая комната
Посмотреть мэшап компьютерных игр
Мэшап игр для ПК
Просмотр мобильного приложения Chess Game UI/UX Дизайн и анимация
Мобильное приложение Chess Game UI/UX Дизайн и анимация
Посмотреть анимацию игровой комнаты
Анимация игровой комнаты
Посмотреть 3D — Исследование игры 🎮
3D — Исследование игры 🎮
Посмотреть советник
Посмотреть торговую площадку
Торговая площадка
-
Посмотреть Frozeverse — внутриигровую торговую площадку NFT
Frozeverse — внутриигровая торговая площадка NFT
Просмотр Kiyoto Brawl — игровой проект Метавселенной
Kiyoto Brawl — игровой проект Metaverse
Посмотреть тренировочные площадки
Тренировочная площадка
Просмотр Emoji Game — 3D-анимация
Игра с эмодзи — 3D-анимация
Просмотреть Frozeverse — веб-сайт, посвященный играм в виртуальной реальности
Frozeverse — веб-сайт с игрой в виртуальной реальности
Посмотреть Crypto City / Дизайн веб-сайта
Криптовалютный город / Дизайн веб-сайта
Посмотреть значок Игры 3D
Значок игр 3D
Посмотреть учебник по игровой анимации
Учебник по игровой анимации
Просмотр Создайте свою идею!
Создайте свою идею!
Посмотреть консольную игру
Консольная игра
Зарегистрируйтесь, чтобы продолжить или войдите
Идет загрузка…
Unity I: Курс 3D-игр и игровых движков
Чему вы можете научиться.

- Изучите стратегические навыки, необходимые для создания захватывающих миров и игр
- Развитие навыков работы с программным обеспечением
- Создание полноценного 3D-опыта к концу класса
Об этом курсе:
Присоединяйтесь и создавайте трехмерные игры с помощью игрового движка мирового класса, известного как Unity. Учащиеся проектируют среду своего творения, правдоподобную и/или фантастическую реальность другого мира. На этом занятии учащиеся знакомятся с мощным игровым движком Unity и знакомятся со стратегическими навыками, необходимыми для создания захватывающих миров и игр в различных приложениях. Класс предназначен для того, чтобы учащиеся могли создать 3D-опыт к концу класса. На этом интенсивном, но выполнимом занятии учащиеся быстро приобретают технические навыки работы с программным обеспечением, а затем используют эти знания для создания убедительных и увлекательных занятий. Базовая грамотность кода и знание 3D полезны, но не обязательны.
Расписание на весну 2023 г.
—
Вторник с 19:00 до 22:00 по тихоокеанскому времени
Регистрация закрыта
См. подробности
Преподаватель: Дариус Кларк
391483
Плата:
789 долларов США
Удаленный
Расположение: Удаленный класс
Обновление…
Подробнее
Примечания
Набор ограничен. Требуется доступ в Интернет.
Крайний срок возврата
После 11 апреля 2023 г. возврат средств невозможен
Расписание
Лекция
Вт, 4 апреля 2023 г.
Лекция
Вт 11 апр, 2023
19:00 PT — 22:00 PT
Дистанционный класс
Лекция
Вт, 18 апреля 2023 г.
19:00 PT — 22:00 класс 90 Remote PT
5 006 Лекция
Вт 25 апр, 2023
19:00 PT — 22:00 PT
Дистанционный класс
Лекция
Вт, 2 мая 2023 г. 0006 Вт 9 мая 2023 г.
19:00 PT — 22:00 PT
Дистанционный класс
Лекция
Вт, 16 мая 2023 г.
Вт 23 мая 2023 г.
19:00 по тихоокеанскому времени — 22:00 по тихоокеанскому времени
Дистанционный класс
Лекция
Вт 30 мая 2023 г.
19:00 PT — 22:00 PT
Дистанционный класс
Лекция
0 7 0 0 20 39 июня 2023 г. :00 вечера по тихоокеанскому времени — 22:00 по тихоокеанскому времениДистанционный класс
Лекция
Вт 13 июня 2023 г.
19:00 PT — 22:00 PT
Дистанционный класс
Лето 2023 Расписание 6 июня
28 —
Среда 19:00 — 22:00, PT
Отменено
Подробнее
392919
Плата:
789,00 $
Удаленный
Расположение: Удаленный класс
Обновление. ..
Подробнее
Примечания
Набор ограничен. Требуется доступ в Интернет.
Крайний срок возврата
После 05 июля 2023 г. возврат невозможен0005
Дистанционный класс
Лекция
Ср 5 июля 2023 г.
19:00 PT — 22:00 PT
Дистанционный класс
Лекция
20 июля6, Ср 0006 19:00 по тихоокеанскому времени — 22:00 по тихоокеанскому времени 19 июля 2023 г.19:00 по тихоокеанскому времени — 22:00 по тихоокеанскому времени
Удаленный класс
Лекция
Ср 2 августа 2023
19:00 PT — 22:00 PT
Дистанционный класс
Лекция
Ср 9 августа 2023
19:00 PT 9000 PTУдаленный класс
Лекция
Ср, 16 августа 2023 г.
19:00 PT — 22:00 PT
Удаленная аудитория
Лекция
Ср, 23 августа 2023 г. — 0 PT
5 9:00 00PM PT
Удаленный класс
Лекция
Среда, 30 августа 2023 г.