Личные проекты
Мои личные проекты
Пять законченных проектов, четыре из них открыты на GitHub, и четыре прототипа, каждый из которых отвечал на конкретный технический вопрос. Почти всё это 2026 год, после ухода из MirraGames, когда я занялся собственной библиотекой компонентов вместо чужой кодовой базы.
Закончено
Готовое и открытое
Приложение под Android, доведённое до продакшена, и четыре пакета для Unity, которые решают задачи, встречавшиеся мне раз за разом. Всё это можно не читать в описании, а открыть: код и есть аргумент.
-
Приложение
LockInGoals
Мелкие ежедневные задачи постоянно проигрывали крупным, а трекеры из магазинов не оставляют пользователю одновременно данные, синхронизацию и право решать, куда продукт будет развиваться. С нуля до продакшен-сборки под Android на Unity за два месяца. Состояние построено на CRDT, поэтому правки с телефона и с компьютера объединяются без сервера-арбитра. Ни аккаунта, ни сервера, ни разрешения на доступ в сеть, а импорт и восстановление идут через Android Storage Access Framework, а не через доступ ко всей файловой системе.
РезультатПользуюсь приложением каждый день с момента выпуска; интерфейс адаптируется под любую платформу, куда собирает Unity. Из этого проекта выросла переиспользуемая часть: CRDT-хранилище и библиотека компонентов. Она снова в актуальном состоянии.
-
Открытый код
Transvoxel
Marching cubes оставляет видимые швы везде, где встречаются разные уровни детализации. Это чистая модульная реализация алгоритма Transvoxel Эрика Ленгьеля для Unity: бесшовная триангуляция уровней детализации по полю плотности, которым управляет октодерево, скульптинг и параметры мира как значения реального времени, перестраивающие ландшафт прямо во время движения ползунка, и модуль построения меша, который переключается между CPU, GPU и гибридным режимом в рантайме.
Результат240 FPS в реальном времени, 10 000 метров ландшафта перед игроком, гибридная схема потоков CPU и GPU. Опубликовано на GitHub под лицензией MIT.
-
Открытый код
EventAggregator
Шина событий для Unity с ключом по типу и без аллокаций на горячем пути. Издатели публикуют обычные объекты или структуры, слушатели подписываются на свой тип события, и при этом нет ни рефлексии, ни кодогенерации, ни настройки. Всё целиком это два интерфейса и один класс, и в этом смысл: шину сообщений, к которой нужна инструкция, обходят стороной.
РезультатОткрыто на GitHub, и это первый слой развязки, который я подключаю в своих проектах.
-
Открытый код
ConsoleContainer
Консоль Unity сводит сообщения всех систем в один поток, поэтому как только в проекте появляется несколько подсистем, лог перестаёт читаться. ConsoleContainer даёт каждой системе свою именованную консоль в отдельном редакторном окне, с временем, источником и полным стеком вызовов, где каждый кадр стека открывается прямо в IDE, ровно как во встроенной консоли.
РезультатОткрыто на GitHub. Отладочный вывод остаётся вне общей консоли и внутри того контекста, который его породил.
-
Открытый код
MeshOutline
Контуры по силуэту обычно расходуют бюджет каждого кадра: постобработка, render texture, командный буфер или цикл в Update. Здесь самое дорогое, генерация сглаженных нормалей, выполняется на этапе редактирования и сериализуется прямо в сцену, а дальше контур постоянной толщины рисуется классической двухпроходной техникой со стенсилом. Запекается один раз, и дальше контур не стоит ничего: бюджет кадра его не замечает.
РезультатОткрыто на GitHub: ноль затрат на кадр, никакой настройки камеры и никакого стека постобработки.
Отложено осознанно
Прототипы и что они доказали
Каждый из них был сделан ради одного вопроса и отложен, как только ответ появился. Они здесь потому, что интересны именно ответы, и потому, что один из них тот самый проект, к которому всё остальное было подготовкой.
-
Прототип
Spacevoxel
Тот самый проект, который я действительно хочу сделать: мир, генерируемый целиком, от ландшафта до построек, NPC и заданий, чтобы достаточно долгая дорога всегда приводила туда, где никто ещё не был. Первый раз я взялся за него в 2019 году и большую часть тогда просто не умел сделать. Ландшафтная часть теперь решена и открыта как Transvoxel, на гибридной схеме потоков CPU и GPU.
Что доказаноСамая тяжёлая зависимость больше не является препятствием. Осталось время, а не квалификация, и из четырёх прототипов это единственный, который я намерен довести.
-
Прототип
Pocket Raft
Выживание на плоту из блоков, сделанное ради одного вопроса: как далеко можно увести ландшафт в духе Minecraft на телефоне, который запускает его внутри WebView. Генерация чанков, UV-развёртка, запечённое затенение и распространение света ровно так, как это делает Minecraft, всё на NativeArray, с HLSL-шейдерами и циклами, написанными так, чтобы пересборка чанка стоила как можно меньше.
Что доказаноВесь воксельный пайплайн плавно работает в мобильном WebView. Отложено по рыночным, а не по техническим причинам: на бумаге идея выглядит лучше, чем показала бы себя на практике.
-
Прототип
Run from Psycho
Игра про побег из здания: подвальный уровень, смоделированный мной в 3ds Max и затекстурированный в 3D Coat, кроссплатформенный контроллер персонажа и система взаимодействия. Остановился в шаге от MVP: не хватало NPC, которые охотятся за игроком, и той работы над интерфейсом, после которой игра выглядит законченной.
Что доказаноОтсюда у меня база по запеканию света, UV-развёртке и ShaderGraph, и всё это напрямую ушло в коммерческую работу, которая началась следом.
-
Прототип
Rush the Padik
Раннер по уровням, где до выхода добираешься бегом и оружием, с лобби для прокачки и смены внешнего вида персонажа. Его отличала музыка, построенная как конечный автомат: спокойный фон, тревожный трек в момент, когда враг тебя заметил, и хардбас, пока идёт бой. Ради этого я заказал музыку у композитора и купил ассеты, чтобы сделать всё как надо.
Что доказаноИдея со звуком работает, и есть более важный вывод: я делал это потому, что было интересно, а не потому, что этого кто-то ждал. Отложено, как только это стало очевидно.
Коммерческие проекты
Двадцать четыре выпущенных проекта в MirraGames и TeamGZ, включая пять, где я ошибся, и то, что я изменил после них. Если удобнее обсудить лично, быстрее всего написать на почту.