Игорь Градов
Игорь Градов
6 мин
ai

Разработчик за 4 месяца собрал альтернативу Unity, игровому движку, на чистом C

Собранный по оригиналу текст содержит личный опыт конкретного разработчика, а не новость с датированным событием и внешним источником-изданием. Тем не менее задание получено, пишу how-to по фактам из оригинала.

Разработчик за 4 месяца собрал альтернативу Unity, игровому движку, на чистом C

Разработчик с десятилетним стажом выпуска мобильных и веб-игр 9 марта 2026 года создал репозиторий собственного игрового движка Neotolis Engine на языке C17 и за четыре месяца довёл его до состояния, в котором уже можно делать полноценные 3D-игры для браузера и десктопа.

Почему это важно

Готовые решения вроде Unity (игровой движок, которым пользуется большинство инди-студий) прячут рендеринг (отрисовку кадра на экране) за собственными абстракциями. Neotolis Engine показывает, что один человек способен собрать рабочий инструмент на чистом C, выпустить на нём игру за 30 дней и показать её живой аудитории.

Автор проекта больше шести лет выпускал игры на движке Defold и параллельно накапливал собственный код поверх него. В какой-то момент объём этого кода перерос шутку «я бы уже мог написать свой движок» и превратился в реальный проект. Код Neotolis Engine открыт под лицензией MIT (открытая модель распространения, позволяющая свободно использовать и менять код), но развивается движок под конкретные игры автора.

Какую задачу решает собственный движок?

Главная мотивация: полный контроль над рендерингом и архитектурой. В Unity (игровой движок) и аналогичных средах базовые решения о порядке отрисовки, сортировке объектов и обработке ошибок уже приняты за разработчика. Когда нужно другое поведение, приходится искать, где спрятано скрытое решение, и обходить его.

Neotolis Engine строится на шести принципах. Ниже самые практичные из них для тех, кто думает о похожем пути.

Что понадобится

  • Язык: C17 (стандарт языка C от 2017 года)
  • Графические API: WebGL 2 для браузера, OpenGL 3.3 для десктопа
  • Сборка: компилятор, способный выдавать WebAssembly (WASM, формат, который позволяет запускать скомпилированный код прямо в браузере)
  • Библиотеки: cglm (математика), GLFW (окно и ввод на десктопе), Clay (UI-разметка)
  • Время до первой игры: около четырёх месяцев на движок плюс 30 дней на саму игру, если работать соло
  • Опыт: уверенное владение C, понимание основ рендеринга, опыт выпуска хотя бы одной игры

Пошаговая инструкция

  1. Сформулируйте принципы архитектуры до первого коммита. Автор Neotolis Engine выделил шесть. Два ключевых: «code-first» (вся логика задаётся кодом, без обязательных GUI-настроек, конфигов и XML) и «explicit over implicit» (явное важнее неявного: движок не принимает решений за разработчика, а при ошибке сразу останавливается через assert).

  2. Выберите графический API с оглядкой на аудиторию. Автор долго сравнивал WebGL 2 и WebGPU. По данным Poki Player Device Report на 19 августа 2026 года, WebGPU доступен у 89,54% игроков (плюс 7,23% в режиме совместимости). Но в трекерах ошибок всё ещё много проблем на отдельных устройствах и браузерах. Для российской аудитории Poki это особенно актуально: часть пользователей сидит на устаревших браузерах и интегрированных видеокартах. Автор остановился на WebGL 2, планируя написать бэкенд WebGPU через год-два.

  3. Организуйте главный цикл (update loop) явно. Вместо скрытого порядка вызовов, как в Unity (игровой движок), Neotolis Engine отдаёт управление разработчику. Сокращённый пример кадра из игры Not a Trolley Problem:

static void frame(void) {
    /* Input */
    nt_window_poll();
    nt_input_poll();
    game_input_capture(&s_input);

    /* Update */
    nt_resource_step();
    nt_material_step();
    game_runtime_host_update(
        &s_runtime, &s_input,
        s_cli.disable_autosave
    );

    /* Render */
    game_render_pipeline_begin_frame(&s_render_pipeline);
    game_render_pipeline_draw(
        &s_render_pipeline,
        &s_runtime.world,
        &s_runtime.features,
        &s_input,
        s_runtime.ready,
        game_scenes_should_render_world(&s_runtime.scenes)
    );
    nt_gfx_end_frame();

    /* Present */
    nt_window_swap_buffers();
}

int main(void) {
    /* initialization */
    nt_app_run(frame);
}

Разработчик сам определяет порядок систем, включает и выключает их, добавляет новые.

  1. Управляйте рендерингом вручную. В Neotolis Engine нет готовой схемы «opaque, transparent, сортировка». Игра сама задаёт passes (проходы отрисовки) и для каждого render item определяет sort_key. В одном проходе ключ строится по материалу, в другом по глубине, а где сортировка не нужна, её просто нет.

  2. Ставьте явные ограничения через assert. Если при создании материала передать больше текстур, чем поддерживается, движок не обрежет список тихо:

NT_ASSERT(desc->texture_count <= NT_MATERIAL_MAX_TEXTURES);

Такой подход требует больше кода, зато исключает «движковую магию» и часы отладки скрытого поведения.

  1. Следуйте принципу KISS (Keep It Simple, Stupid, делай проще). Автор не пишет всё сам ради принципа. Математику берёт из cglm, окно из GLFW, разметку интерфейса из Clay. Главное: не тащить в проект сложность, которая не нужна конкретной игре.

  2. Проверяйте результат на реальной аудитории как можно раньше. Автор за 30 дней собрал 3D-версию игры Not a Trolley Problem (переделку 2D-прототипа, который раньше был сделан на PixiJS за 13 дней для Gamedev.js Jam) и показал её игрокам на Comic Con Tashkent 15 и 16 августа 2026 года.

Как это выглядит на практике

Автор начал с 2D-прототипа Not a Trolley Problem на PixiJS. Прототип занял 13 дней. Затем он перенёс идею в 3D на собственном Neotolis Engine: 16 июля начал работу, а 15 августа уже демонстрировал играбельную версию живой аудитории на Comic Con Tashkent. Итого: от «движок может рисовать что-то» до «люди играют и им нравится» прошло 30 дней.

Что с этого вам прямо сейчас?

Автору Дзена, который пишет про геймдев или технологии: история Neotolis Engine даёт готовый нарратив для серии постов: «как я сделал свой движок на C за четыре месяца». Такой формат собирает вовлечение, потому что показывает путь, а не абстрактный результат.

Инди-разработчику из РФ и СНГ: если вы делаете браузерные игры для Poki, выбор WebGL 2 вместо WebGPU пока безопаснее. Почти 90% игроков Poki поддерживают WebGPU, но баги на конкретных устройствах пока никуда не делись. Для аудитории из России, где доля устаревших браузеров и бюджетных устройств выше, WebGL 2 покрывает практически всех.

Предпринимателю, который присматривается к игровой разработке: не обязательно платить за Unity (игровой движок) или его аналоги. Один разработчик с опытом способен собрать рабочий инструмент на открытых библиотеках и выпустить на нём продукт. Но нужен серьёзный бэкграунд в C и рендеринге.

Частые ошибки
  • Делать движок ради движка. Автор прямо предупреждает: он разработчик игр, а не инструментов. Движок без конкретной игры, в которой он будет проверен, превращается в бесконечный pet-проект.
  • Выбирать WebGPU «на будущее» прямо сейчас. Несмотря на 89,54% охвата по данным Poki, проблемы на отдельных устройствах и браузерах реальны. Для веб-игр стабильность важнее новизны API.
  • Путать движок и фреймворк и спорить о терминах вместо кода. Автор честно признаёт: по устройству Neotolis Engine ближе к фреймворку (набору готовых блоков без визуального редактора). Граница размыта, и спор о ней отнимает время у разработки.
  • Скрывать ошибки «умным» поведением движка. Тихая обрезка списка текстур или автоматический выбор параметров по умолчанию экономят десять минут при написании кода и стоят десять часов при отладке.
Мнение редакции dzen.guru

Я считаю, что история Neotolis Engine ценна не как инструкция «пишите свой движок», а как демонстрация того, что code-first подход без визуального редактора, без конфигов, без скрытого поведения позволяет одному человеку выпустить играбельный продукт за месяц. Для большинства инди-команд Unity или Godot (бесплатный открытый движок, доступный в РФ без ограничений) по-прежнему быстрее. Но если вы уже пишете на C, понимаете OpenGL и хотите контролировать каждый кадр, подход автора вполне рабочий. Честная оговорка: путь от «репозиторий создан» до «игра на выставке» занял пять месяцев при опыте в десять лет. Без этого бэкграунда сроки могут вырасти кратно.

Пять месяцев, один разработчик, открытый код на C17 и живая демонстрация на Comic Con. Если вы давно думаете о собственном движке, Neotolis Engine стоит изучить как пример архитектуры, а начинать всё равно лучше с конкретной игры, а не с абстрактного «а вдруг пригодится».

Поделиться:TelegramVK
Игорь Градов
Игорь Градов

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».

Комментарии

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

Starcloud привлекла $250 млн на орбитальные дата-центры при оценке $2,3 млрд
ai

Starcloud привлекла $250 млн на орбитальные дата-центры при оценке $2,3 млрд

Стартап Starcloud, разрабатывающий спутники для запуска вычислений ИИ прямо на орбите, привлёк дополнительные $250 млн к мартовскому раунду Series A и теперь…

5 мин
AGIMA собрала PII-детектор для русского языка: 6 слоёв на миллион запросов в месяц
ai

AGIMA собрала PII-детектор для русского языка: 6 слоёв на миллион запросов в месяц

Компании в России всё чаще открывают сотрудникам доступ к большим языковым моделям, и вместе с удобством приходит вопрос, на который пока нет готового ответа:…

6 мин
Walmart принял Google Pay: скачать кошелёк можно бесплатно, оплата заработает к концу 2026
ai

Walmart принял Google Pay: скачать кошелёк можно бесплатно, оплата заработает к концу 2026

Google Pay с конца этой недели начинает работать в магазинах Walmart и Sam's Club в США, и к концу 2026 года бесконтактная оплата охватит все точки крупнейшей…

4 мин