Портфолио¶
Vizex VR Labs 2019–2024¶
Это были самые захватывающие годы моей карьеры в Vizex, где у меня появилась возможность запустить новое направление — виртуальные лаборатории для школ. Всё началось как экспериментальный Tech Demo-проект — виртуальная лаборатория по электродинамике. С тех пор эта область программирования покорила меня, и я переписывал различные модели симуляции электричества больше четырёх раз — и в рабочих, и в личных проектах.
Мы использовали эти симуляции в рабочих проектах — по электродинамике, электромагнетизму, робототехнике и логическим схемам. Я также применял их в собственных геймджемах и пет‑проектах.
Считаю, что этот путь достоин подробного рассказа, ведь всё началось с нуля.
Электродинамика — Магнетизм — Электростатика: старт VR‑лабораторий¶
Эта серия проектов стала началом направления VR Labs. Компания решила выйти в новую область — виртуальные физические лаборатории для старших классов. На техническое демо нам дали три месяца, и это был невероятный вызов по нескольким причинам.
| Как начиналось (2019) | Как идёт (2022) |
|---|---|
![]() |
![]() |
Для реализации мы выбрали WebGL, так как требовалась интеграция в онлайн‑платформу электронных школ. До этого все наши проекты были мобильными и десктопными, и переход на WebGL стал новым испытанием. Дополнительным требованием было обеспечить работу лабораторий в 4K‑разрешении на устройствах с интегрированной видеокартой и процессором Intel Core i3 7‑го поколения.
Переход на WebGL потребовал кардинально переосмыслить подходы к разработке. На ближайшие пять лет нашим девизом стало: «Оптимизация, оптимизация и ещё раз оптимизация». Мы боролись за каждую миллисекунду CPU/GPU и в итоге добились стабильных 30 кадров в секунду в 4K на целевом железе. После такой оптимизации проблемы производительности на iPad и ноутбуках фактически исчезли — мы легко держали 60+ FPS.
Эти годы были полны вызовов. У нас уже было много ассетов, но многие оказались несовместимы с WebGL из‑за многопоточности. Кроме того, отладка в WebGL была значительно сложнее: нельзя было подключиться стандартным дебаггером, а некоторые баги проявлялись только там. Например, у старой системы ввода были проблемы с тач‑событиями, и нам пришлось писать собственные обёртки.
Решение задач электродинамики и электростатики добавляло сложности. Одним из самых существенных вызовов было внедрение электростатических расчётов. Поначалу мне не удавалось решить уравнения так, чтобы они совпадали с измерениями и реальными опытами. Разные «мелочи» постоянно становились камнем преткновения и требовали кропотливой работы и тестирования.
Результатом стала лаборатория, которую полюбили преподаватели (сейчас у Vizex 2,8 млн пользователей). Компания получила несколько заказов, и мы сформировали несколько продуктовых команд. За годы мы создали более 20 лабораторий, и почти в 10 из них я участвовал как техлид, а иногда и как тимлид. Мы небольшая компания, и роли на проектах часто смещались в зависимости от компетенций.
Этот проект стал фундаментом последующих успехов компании и развития направления VR Labs. Мы преодолели множество технических сложностей и добились высокой производительности и качества, что принесло нам признание и новые заказы. Опыт, полученный при разработке этих лабораторий, бесценен и до сих пор вдохновляет на новые вершины.
Механика — Архимед и связанные проекты¶
Этот блок включал серию лабораторных экспериментов по механике, гидростатике, блокам и полиспастам, силам трения и законам Архимеда. В качестве ядра мы использовали PhysX, вокруг которого построили несколько дополнительных систем, расширяющих его возможности. Ниже — несколько интересных задач!
Гидростатика¶
Мы разработали собственный солвер для поршней на основе системы импульсов, передаваемых между коллайдерами. Изначально я планировал базироваться на расчётах сил, но оказалось, что PhysX — статeless‑система: она отдаёт только результирующие скорости, не предоставляя доступ к силам, действующим на объекты. Изюминкой стало вычисление поршней с учётом давления столба жидкости разной высоты.
Блоки и канаты¶
Ещё одна интересная тема — блоки и канаты. В первой версии приложения мы смогли посчитать лишь упрощённую систему, где силы строго распределялись вертикально для подвешенных объектов. Однако после того, как я наткнулся на отличную статью, нам удалось существенно улучшить реализацию и обеспечить более сложные и реалистичные симуляции.
Закон Архимеда/Выталкивающая сила¶
На первый взгляд расчёт кажущейся простым: определить объём погружённого тела, найти его центр масс и приложить силу Архимеда. Однако сочетание материалов — деревянный брусок в аквариуме с ртутью — внесло серьёзные сложности. Огромная разница в плотностях приводила к нестабильности — систему «разрывало» по всей сцене. Пришлось применять разные трюки и хаки, чтобы справиться с такой диспропорцией сил и сохранить устойчивость.
Сообщающиеся сосуды¶
Одна из увлекательных задач в нашей работе по гидростатике — разработка солвера для сообщающихся сосудов. Сначала мы делали систему с однородной жидкостью, чтобы уровни корректно выравнивались в соединённых ёмкостях. На базе этого мы взялись за более сложный сценарий — сосуды с жидкостями разной плотности. Требовались аккуратные вычисления перепадов давлений и моделирование динамики жидкости, чтобы корректно рассчитать состояние равновесия. Особый вызов — численная устойчивость и реалистичность поведения, особенно когда жидкости слабо смешиваются и возникает сложное распределение давлений и градиентов.
Проекты Silaeder — Чертёж и моделирование¶
Эта серия лабораторий посвящена 2D‑чертежам и 3D‑моделированию для школ и является отличной практикой по алгоритмам и структурам данных.
2D‑чертёж: векторный редактор, который ощущается как растровый. Используются AABB‑деревья для поиска пересечений, KD‑деревья для снап‑поиска, а также продвинутые алгоритмы пересечения дуг, сплайнов Катмулла—Рома и отрезков. Для отрисовки векторной графики применяются SDF‑функции.
3D‑моделирование: «детский» 3D‑редактор, направленный на развитие базового пространственного мышления и навыков моделирования.
Ключевые алгоритмические задачи:
- Реализация кривых Безье
- Кинематические операции: вращение, экструзия, следование по контуру
- Сложные булевы операции, поддержанные собственным алгоритмом и half‑edge структурой для мешей с группами сглаживания
Дополнительно: работа с графами, 3D AABB‑деревья для поиска пересечений, рейкаст по 3D‑сплайнам и пространственные сетки с динамическим шагом и толщиной линий, независимой от расстояния.
Дополнительные проекты¶
На ряде проектов я подключался как консультант и кризис‑инженер.
Окружающий мир: проект для начальной школы по естествознанию, физике и экологии. Команда изначально сильно промахнулась с оценкой, что привело к лавине контента — диалоги, 3D‑модели, ветвления логики, мини‑игры. Я пришёл как кризис‑инженер, чтобы реорганизовать задачи и выделить ядро функциональности, благодаря чему проект сдали в срок. В итоге получилась уютная стилизованная low‑poly обучающая игра для детей.
![]() |
![]() |
|---|---|
Молекулярная физика, неорганическая химия и оптика: на старте я помогал как программист логики взаимодействия. Там впечатляющие математические модели, но основная часть моей работы была про шейдеры, частицы и фрагменты базовой логики взаимодействий.
![]() |
![]() |
|---|---|
![]() |
Логические схемы — Роботы — Робо‑соревнования: в этом проекте я помогал портировать свою библиотеку симуляции электрических схем и часто выступал кризис‑инженером, когда команда не успевала с логикой для схем и коннекторов. Я также много консультировал по PhysX и разным подсистемам Unity (URP, Input System, Shader Graph).
Vizex Info 2016–2019¶
В первые три года работы в Vizex я наблюдал рост компании и участвовал в его формировании. В 2017‑м Vizex занималась аналитикой и визуализацией больших данных для банков и крупного бизнеса, создавая ситуационные центры и цифровые двойники для топ‑менеджмента компаний: Société Générale, Сбербанк, Газпромбанк, «Почта России», ГИС ЖКХ. Каждый проект был уникален и требовал новых подходов и решений.
Ситуационные центры¶
Одним из ключевых направлений была разработка ситуационных центров, предоставляющих руководителям доступ к критически важным данным в реальном времени для принятия стратегических решений. Примеры таких центров — ЕМИАС и ГИС ЖКХ.
ЕМИАС (Единая медицинская информационно‑аналитическая система)¶
Один из проектов, над которым я работал, — ЕМИАС: комплексное решение для управления медицинскими услугами, включающее запись к врачу, информацию о доступности учреждений и о наличии врачей в реальном времени. ЕМИАС также выступал ситуационным центром для управления здравоохранением.
Моя задача — создать 3D‑цифровой двойник Москвы с медицинскими учреждениями на основе векторных карт. Это включало валидацию кеша и версионирование, оптимизацию хранения данных и обеспечение высокой скорости. Приложение должно было одинаково хорошо работать на ПК, iPad, Linux, Windows и Android.
Приложение обрабатывало гигабайты данных в реальном времени. Мы тесно работали с командами аналитики и бэкенда, чтобы подключать интерактивные информеры к витринам данных. Мы разработали собственный картографический сервис на Unity, который мог отображать любые геопривязанные индикаторы. Кроме того, мы создали продукт iDVP — инструмент, позволяющий пользователям создавать свои информеры и подключать их к витринам данных.
![]() |
![]() |
|---|---|
![]() |
![]() |
![]() |
Проекты цифровых двойников¶
Мы реализовали несколько крупных проектов, связанных с картографическими сервисами для отображения различных видов информации в B2B и сфере больших данных. Один из самых впечатляющих — ГИС ЖКХ. Целью было создать цифровой двойник коммунальной системы. Эта инновационная платформа обеспечивает мониторинг и управление коммунальными службами в реальном времени и работает кроссплатформенно на разных устройствах.
Ключевые задачи и достижения¶
- GIS‑задачи: создание 3D‑цифровых двойников на основе векторных карт.
- Кроссплатформенность: единая производительность на ПК, iPad, Linux, Windows и Android.
- Оптимизация данных: валидация кеша, оптимизация тайлов данных и высокая скорость работы.
- Обработка Big Data: обработка гигабайтов данных в реальном времени и тесная работа с аналитическими командами.
- Интерактивная визуализация: создание интерактивных информеров и подключение их к витринам данных через продукт iDVP.
- In‑house разработка: собственная разработка картографического сервиса и продукта iDVP.
Эти проекты серьёзно прокачали мои навыки. Позже мы переключились на разработку виртуальных лабораторий, что открыло новые возможности для их применения.
![]() |
![]() |
|---|---|
![]() |
Toonidee, 2016¶
В 2016 году я работал в Toonidee — уютной студии на территории «Амедиа». Это было настоящее творческое пространство, где мы делали телепередачи о компьютерных играх для канала «2×2». Но самая интересная часть работы — разработка AR‑игр для дошкольников.
Интерактивные AR‑раскраски¶
Один из основных проектов — интерактивные AR‑раскраски. Представьте: ребёнок раскрашивает картинку на бумаге, наводит на неё камеру планшета — и видит, как его рисунок оживает на экране в виде мультика или мини‑игры. Видеть восторг детей было бесценно.
Вызовы и решения¶
Конечно, были неожиданные сложности. Дети раскрашивали «не по плану»: использовали маркеры вместо карандашей, вылезали за контуры, добавляли свои элементы. Чтобы справиться с этим, мы разработали систему трекеров, помогавшую распознавать и реконструировать изображение по сохранившимся частям.
Команда и достижения¶
Наша маленькая, но сплочённая команда состояла из продюсера, двух разработчиков и трёх художников. Меньше чем за год мы выпустили три полноценных журнала: «Суперспасатель», «Суперспасатель 2» и «Бумажки». Это был очень насыщенный и продуктивный период, и я горжусь результатом.
![]() |
![]() |
|---|---|
![]() |
Моя роль в проекте¶
Как разработчик, я отвечал за Unity. Мои задачи включали:
- Разработку основной логики проекта
- Создание системы загрузки ассетов и их версионирования
- Написание шейдеров
- Проектирование алгоритмов распознавания цветов на раскрасках
- Реализацию логики разнообразных мини‑игр — «три в ряд», поиск одинаковых объектов, лабиринты и др.
Unity была нашей основной платформой, и я использовал её возможности для создания интерактива и стабильной работы приложения. Этот проект не только углубил мои знания Unity, но и дал уникальный опыт разработки детских AR‑приложений.
![]() |
![]() |
|---|---|
![]() |























