Личные проекты

Личные проекты

Мои личные проекты

Пять законченных проектов, четыре из них открыты на GitHub, и четыре прототипа, каждый из которых отвечал на конкретный технический вопрос. Почти всё это 2026 год, после ухода из MirraGames, когда я занялся собственной библиотекой компонентов вместо чужой кодовой базы.

Закончено

Готовое и открытое

Приложение под Android, доведённое до продакшена, и четыре пакета для Unity, которые решают задачи, встречавшиеся мне раз за разом. Всё это можно не читать в описании, а открыть: код и есть аргумент.

  • Экран трекера LockInGoals с дневными целями и календарём месяца

    Приложение

    LockInGoals

    Роль
    Единственный разработчик
    Период
    2026, два месяца до продакшена
    Статус
    Внутреннее тестирование в Google Play на моём аккаунте, не опубликовано

    Мелкие ежедневные задачи постоянно проигрывали крупным, а трекеры из магазинов не оставляют пользователю одновременно данные, синхронизацию и право решать, куда продукт будет развиваться. С нуля до продакшен-сборки под Android на Unity за два месяца. Состояние построено на CRDT, поэтому правки с телефона и с компьютера объединяются без сервера-арбитра. Ни аккаунта, ни сервера, ни разрешения на доступ в сеть, а импорт и восстановление идут через Android Storage Access Framework, а не через доступ ко всей файловой системе.

    Результат

    Пользуюсь приложением каждый день с момента выпуска; интерфейс адаптируется под любую платформу, куда собирает Unity. Из этого проекта выросла переиспользуемая часть: CRDT-хранилище и библиотека компонентов. Она снова в актуальном состоянии.

  • Демо Transvoxel в Unity с панелью статистики и параметров мира

    Открытый код

    Transvoxel

    Роль
    Единственный разработчик
    Лицензия
    MIT
    Режимы вычислений
    CPU, GPU и гибридный

    Marching cubes оставляет видимые швы везде, где встречаются разные уровни детализации. Это чистая модульная реализация алгоритма Transvoxel Эрика Ленгьеля для Unity: бесшовная триангуляция уровней детализации по полю плотности, которым управляет октодерево, скульптинг и параметры мира как значения реального времени, перестраивающие ландшафт прямо во время движения ползунка, и модуль построения меша, который переключается между CPU, GPU и гибридным режимом в рантайме.

    Результат

    240 FPS в реальном времени, 10 000 метров ландшафта перед игроком, гибридная схема потоков CPU и GPU. Опубликовано на GitHub под лицензией MIT.

  • Исходник EventAggregator в редакторе, видны два интерфейса

    Открытый код

    EventAggregator

    Роль
    Единственный разработчик
    Объём
    Два интерфейса и один класс
    Зависимости
    Нет

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

    Результат

    Открыто на GitHub, и это первый слой развязки, который я подключаю в своих проектах.

  • Окно ConsoleContainer с отдельными консолями по системам

    Открытый код

    ConsoleContainer

    Роль
    Единственный разработчик
    Объём
    Редакторное окно Unity
    Задача
    Логи по системам

    Консоль Unity сводит сообщения всех систем в один поток, поэтому как только в проекте появляется несколько подсистем, лог перестаёт читаться. ConsoleContainer даёт каждой системе свою именованную консоль в отдельном редакторном окне, с временем, источником и полным стеком вызовов, где каждый кадр стека открывается прямо в IDE, ровно как во встроенной консоли.

    Результат

    Открыто на GitHub. Отладочный вывод остаётся вне общей консоли и внутри того контекста, который его породил.

  • Меш с контуром постоянной толщины по силуэту

    Открытый код

    MeshOutline

    Роль
    Единственный разработчик
    Движок
    Unity 6
    Стоимость в рантайме
    Нулевая

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

    Результат

    Открыто на GitHub: ноль затрат на кадр, никакой настройки камеры и никакого стека постобработки.

Отложено осознанно

Прототипы и что они доказали

Каждый из них был сделан ради одного вопроса и отложен, как только ответ появился. Они здесь потому, что интересны именно ответы, и потому, что один из них тот самый проект, к которому всё остальное было подготовкой.

  • Процедурно сгенерированный низкополигональный каньон в Unity

    Прототип

    Spacevoxel

    Роль
    Единственный разработчик
    Статус
    Прототип, всё ещё цель
    Первая попытка
    2019

    Тот самый проект, который я действительно хочу сделать: мир, генерируемый целиком, от ландшафта до построек, NPC и заданий, чтобы достаточно долгая дорога всегда приводила туда, где никто ещё не был. Первый раз я взялся за него в 2019 году и большую часть тогда просто не умел сделать. Ландшафтная часть теперь решена и открыта как Transvoxel, на гибридной схеме потоков CPU и GPU.

    Что доказано

    Самая тяжёлая зависимость больше не является препятствием. Осталось время, а не квалификация, и из четырёх прототипов это единственный, который я намерен довести.

  • Pocket Raft, плот из блоков в открытом море

    Прототип

    Pocket Raft

    Роль
    Единственный разработчик
    Статус
    Прототип, отложен
    Цель
    Мобильный браузер в WebView

    Выживание на плоту из блоков, сделанное ради одного вопроса: как далеко можно увести ландшафт в духе Minecraft на телефоне, который запускает его внутри WebView. Генерация чанков, UV-развёртка, запечённое затенение и распространение света ровно так, как это делает Minecraft, всё на NativeArray, с HLSL-шейдерами и циклами, написанными так, чтобы пересборка чанка стоила как можно меньше.

    Что доказано

    Весь воксельный пайплайн плавно работает в мобильном WebView. Отложено по рыночным, а не по техническим причинам: на бумаге идея выглядит лучше, чем показала бы себя на практике.

  • Run from Psycho, тёмный подвальный уровень с вентиляцией и коридорами

    Прототип

    Run from Psycho

    Роль
    Единственный разработчик
    Статус
    Прототип, отложен
    Период
    3-4 месяца, во время учёбы

    Игра про побег из здания: подвальный уровень, смоделированный мной в 3ds Max и затекстурированный в 3D Coat, кроссплатформенный контроллер персонажа и система взаимодействия. Остановился в шаге от MVP: не хватало NPC, которые охотятся за игроком, и той работы над интерфейсом, после которой игра выглядит законченной.

    Что доказано

    Отсюда у меня база по запеканию света, UV-развёртке и ShaderGraph, и всё это напрямую ушло в коммерческую работу, которая началась следом.

  • Rush the Padik, стилизованный раннер с ближним боем и перестрелками

    Прототип

    Rush the Padik

    Роль
    Единственный разработчик
    Статус
    Прототип, отложен
    Идея
    Музыка как состояние боя

    Раннер по уровням, где до выхода добираешься бегом и оружием, с лобби для прокачки и смены внешнего вида персонажа. Его отличала музыка, построенная как конечный автомат: спокойный фон, тревожный трек в момент, когда враг тебя заметил, и хардбас, пока идёт бой. Ради этого я заказал музыку у композитора и купил ассеты, чтобы сделать всё как надо.

    Что доказано

    Идея со звуком работает, и есть более важный вывод: я делал это потому, что было интересно, а не потому, что этого кто-то ждал. Отложено, как только это стало очевидно.

Коммерческие проекты

Двадцать четыре выпущенных проекта в MirraGames и TeamGZ, включая пять, где я ошибся, и то, что я изменил после них. Если удобнее обсудить лично, быстрее всего написать на почту.