Игорь Градов
Игорь Градов
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».

Комментарии

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

Экс-руководители Palantir запустили Dream с $17 млн от a16z: ИИ-модель мира метит в AutoCAD
ai

Экс-руководители Palantir запустили Dream с $17 млн от a16z: ИИ-модель мира метит в AutoCAD

Бывшие руководители Palantir вывели из тени стартап Dream с $17 млн от фонда Andreessen Horowitz: их ИИ обещает проектировать здания целиком, пока…

5 мин
Mistral AI открыла веса модели на триллион параметров: компании развернут киберзащиту у себя
ai

Mistral AI открыла веса модели на триллион параметров: компании развернут киберзащиту у себя

Французская компания Mistral AI выложила в открытый доступ веса своей модели Mistral Large 4 на триллион параметров, и на фоне роста киберугроз компании и…

5 мин
AI SDK для Vue и Nuxt: vue-llm запускает чат за 10 строк и модели прямо в браузере
ai

AI SDK для Vue и Nuxt: vue-llm запускает чат за 10 строк и модели прямо в браузере

Разработчик выпустил vue-llm, открытую библиотеку для чатов с нейросетями на Vue и Nuxt. Большинство готовых инструментов для таких интерфейсов написаны под…

5 мин