Больше информации по резюме будет доступно после регистрации
ЗарегистрироватьсяБыл более двух недель назад
Мужчина, 33 года, родился 9 февраля 1993
Астана, готов к переезду, не готов к командировкам
UE4 Team Leader
Специализации:
- Программист, разработчик
Тип занятости: полная занятость, частичная занятость, проектная работа/разовое задание
Опыт работы 12 лет 10 месяцев
Февраль 2024 — по настоящее время
2 года 4 месяца
LNJ Studio
Информационные технологии, системная интеграция, интернет... Показать еще
CTO & Lead Developer
The Abyss Break - Кооперативный horror шутер.
Ведущий проектный и технический специалист.
Май 2020 — Февраль 2024
3 года 10 месяцев
MedVR
Санкт-Петербург, www.medvr.pro/
Информационные технологии, системная интеграция, интернет... Показать еще
Team Lead / UE Developer
Разработка VR симуляторов для медицины
Санкт-Петербург
Разработчик игр (Старший) - UnrealEngine Lead Developer
Май 2020 — Февраль 2024 (3 года и 10 месяцев)
Проект: XR-Body — симулятор пальпации живота с технологией XR.
Со старта вел проект один в паре с техническим художником. В проекте реализованы два бизнес-модуля: Пропедевтика и Острый живот. Модули решают задачи по обучению и тестированию абитуриентов.
Проект состоит из двух приложений:
Основное приложение для Oculus Quest 2 (Android) — выступает в качестве сервера.
Приложение зрителя/администратора под Windows — также передаёт данные с датчиков давления, подключённых по USB.
Оба приложения — это один и тот же проект Unreal Engine, собранный с разными параметрами. Сборка и доставка автоматизированы через Jenkins.
В случае с Oculus новая версия загружается в Meta Store, в случае с приложением администратора — в Amazon S3.
Клиентам проект поставляется в собранном виде: с компьютером администратора, VR-очками и манекеном с датчиками давления.
Примеры решённых задач в проекте:
Калибровка положения в VR-пространстве: игрок кладёт два пальца на пупок и ближайший сосок манекена, после чего игра корректно позиционирует его положение и поворот в пространстве, чтобы реальный манекен и виртуальный пациент совпадали.
Hand Tracking: отслеживание рук с пальцами и их визуализация. Помимо простой отрисовки нужно было реализовать систему, которая не позволяла рукам проваливаться сквозь живот — без использования коллизий и физики (для обеспечения максимальной производительности).
Пальпация живота: игрок может «прогибать» живот руками. Учитываются данные как с датчиков давления, так и из Hand Tracking.
Вся логика деформации написана с использованием RenderTarget и работает на GPU. Использован самописный алгоритм сглаживания, чтобы добиться максимального сходства между деформацией на реальном манекене и в виртуальной сцене.
Игровые данные: почти все данные тянутся из Google Таблиц, что позволяет редактировать систему тестирования, оценки, список пациентов, диагнозы и т. п. без запуска стороннего ПО — это могут делать сами врачи.
3D-интерфейс:
Сложная сцена с множеством WidgetComponent (3D-виджеты) на Android (Oculus) сильно просаживала FPS.
Кроме того, Unreal не генерирует mipmap’ы для RenderTarget-текстур под Android, из-за чего текст становился пиксельным и нечитаемым при приближении/отдалении.
Пришлось писать собственную систему 3D-виджетов, полностью без использования RenderTarget.
Попытки использовать TextRenderComponent были неудачны — он сильно снижал производительность, поэтому был разработан собственный компонент для визуализации 3D-текста.
Кастомный компонент использует InstancedStaticMesh, размещает плейны, подгоняет размеры, отступы, кернинги, и передаёт через CustomData в материал координаты, размеры букв и номер страницы в атласе.
В результате, любой текст на сцене (включая длинные описания и параграфы) требовал всего 2 draw call'а и не нуждался в расчёте векторных данных.
Локализация:
Бизнес хотел хранить локализацию аналогично остальным данным — в Google Таблицах.
Использовать стандартную систему локализации от Epic было невозможно, пришлось разрабатывать собственную.
Проект поддерживает 6 языков, включая иероглифические. Текст отображается через буквенные атласы (алфавит на текстуре), но в китайском слишком много символов, и нельзя было запихнуть их все в один атлас.
Реализована система, которая находит все уникальные символы, использующиеся в проекте на каждом языке — и только их сохраняет в атлас.
Прочее:
Реализовано множество кейсов: можно скрывать живот, смотреть на органы, видеть конкретные патологии, использовать пациентов разных полов, возрастов и внешности.
Пациенты могут кричать или вздыхать при нажатии на живот. В разных сценариях учитываются параметры давления — медленно, резко, медленно с резким отпусканием и т. п.
Проект: VR-Clinic — VR-симулятор с Full Body IK и отслеживанием пальцев (Leap Motion)
Проект под SteamVR использующий HTC Vive Pro 2 как шлем и дополнительные трекеры с ремешками, которые крепятся на руки, ноги и пояс.
Симулятор амбулаторного приёма для студентов медицинских вузов. В процессе симуляции доступно множество интерактивных взаимодействий, включая:
Ведение диалога с пациентом
Использование средств индивидуальной защиты
Работа с инструментами для физикального обследования
И множество других действий
В проекте реализован сетевой мультиплеер, позволяющий администратору подключаться с другого компьютера, запускать сессии, наблюдать за действиями студента и управлять сценарием.
Моё участие в проекте:
Пришёл в проект на стадии позднего прототипа, в котором уже были частично реализованы:
Full Body IK
Базовые механики взаимодействия с пациентом (диалоги, обследования и т. п.)
По ходу разработки значительная часть системы была переработана — либо под изменившиеся бизнес-требования, либо по причине нецелесообразности масштабирования прототипных решений.
Выполненные задачи:
Утилита редактора
Инструмент внутри движка для автоматического обновления данных (диалоги, обследования, клинические кейсы и т. д.). Данные берутся из Google Spreadsheets путём парсинга TSV-таблиц.
Интеграция Oculus Lipsync
Исправлена некорректная генерация frame sequence для русского языка. Система полностью автоматизирована: анимации диалогов генерируются на основе озвучек (английской и русской), ручных анимаций не используется вовсе.
Плагин Fake Fast Mirror
Оптимизированная система зеркал для VR и мобильных проектов. Зеркальные отражения реализуются через дубликаты StaticMesh и SkeletalMesh, развёрнутые и синхронизированные по позициям, анимациям и физике. Все отражения рендерятся в одном проходе. Количество зеркал не ограничено (без переотражений).
Это решение позволило повысить FPS в комнатах с зеркалами с ~60 до стабильных 90+ кадров, одновременно повысив чёткость отражения.
VR-трекинг-реплей
Утилита для записи положения и ориентации всех трекеров и VR-шлема, с возможностью последующего воспроизведения в игре. Используется для быстрой отладки и итерации Full Body IK.
Система прилипания рук с анимациями
Если игрок подносит руку к специальной зоне (например, спина пациента), она принимает заданную позу и «прилипает» к телу. В случае, например, мытья рук — включается анимация, но с допустимой свободой движения внутри заданного радиуса.
Оптимизация производительности под VR
Достигнута стабильная частота 90+ FPS. Выполнялся анализ и снижение draw call'ов, настройка движка (знание сотен параметров UE4/5), использование UE Profiler и RenderDoc для поиска узких мест.
Пример: решение проблемы сглаживания интерфейса UWidgetComponent при активном MSAA, на которую не было найдено рабочих решений в официальных источниках.
CI (Continuous Integration) через GitHub Actions
Настроена автоматическая сборка проекта при мердже в ветку testing, после чего билд загружается в AWS S3. Тестировщики получают ссылку для скачивания.
CD пока не реализован, но есть понимание, как внедрить его без Steam, PlayMarket и других распространённых платформ доставки.
Лаунчер и администрирование
Написал лаунчер на Flutter и микросервис на Dart, необходимый для управления виртуальной клиникой у конечных клиентов.
Система интерактивных объектов
Медицинские инструменты (градусник, тонометр, фонендоскоп и т. п.) и надеваемые предметы (СИЗ: комбинезон, перчатки, бахилы и др.).
Поддержка множества настроек для корректной работы и взаимодействия.
Прочая игровая логика
Участвовал в реализации множества механик и сценариев, требующих нестандартных решений под ограничения VR.
Май 2017 — Май 2020
3 года 1 месяц
CyberCraft Games
Астана
Информационные технологии, системная интеграция, интернет... Показать еще
Тимлид
Ведущий программист. Тим лидер.
Октябрь 2014 — Май 2017
2 года 8 месяцев
Vebam
Казахстан
Информационные технологии, системная интеграция, интернет... Показать еще
Developer
Web services
Август 2013 — Октябрь 2014
1 год 3 месяца
Trio company
Казахстан, www.trio.kz
Информационные технологии, системная интеграция, интернет... Показать еще
Frontend-developer
Frontend Team leader
Навыки
Уровни владения навыками
Обо мне
Team Lead:
Управление командой, постановка задач, использование принципов Agile. Написание документации и требований для команды, понимание принципов построения игрового баланса, построение формул для расчета характеристик и прочих показателей.
Администрирование и использование продуктов Atlassian: Jira, Confluence, Bamboo, Bitbucket.
Являюсь автором онлайн тулзы для автоматизации написания клиент-серверного кода С++ в рамках UnrealEngine - https://json2ue.com/
Разработка:
Владение GameFramework UE4
Создание(Разработка) игровых механик таких как: Инвентарь, предметы, система заданий, диалоговая система, окно персонажа, прокачка персонажа, крафтинг, классы персонажей и многих других систем свойственных для ролевых игр.
Владение WBP(Unreal User Interfaces)
Опыт работы с клиент-серверной архитектурой: репликацией, RPC функциями. Понимание зачем и в каких случаях использовать репликацию параметров, а когда использовать удаленные вызовы процедур.
Подключал и использовал библиотеку google protobuff для обмена мета данными с бекендом(не Unreal Server). ( Подключение сторонних С++ библиотек к движку не всегда является тривиальной задачей )
Настройка сборки игры и систем автоматизации Gitlab CI\CD.
Навыки работы с Docker.
Настройка ABP(Anim Blueprint) для персонажей, логика блендинга и добавочных анимаций(моргание глаз, реакция на урон, реакция на отдачу от выстрела и прочее.)
Дополнительно:
Владение и понимание работы системы частиц (Cascade), материалов, ИИ(BehaviorTree), скелетной анимацией, комплексной анимации по костям, виджетов, игрового мультиплеера.
Понимаю принципы работы клиент-серверных приложений. Имею большой опыт использвования протокола JSON, а также небольшой практический опыт применения google protobuf.
Имею опыт решения различных проблем в мультиплеерных играх в рамках UnrealEngine 4 при средней задержке и с потерями пакетов.
Базовые DevOps задачи, настройка виртуальных машин и linux администрирование.
Работал с ComputerVision в рамках слабых мощностей мобильных устройств.
Имею продвинутые навыки работы с Web технологиями, приемущественно TypeScript, Angular.
Могу в дизайн UI/UX. Владею Photoshop на среднем уровне.
P.S
Могу выполнять разнокалиберные задачи, которые в идеале должны делать разные люди, но они есть далеко не всегда.
Обладаю пониманием процессов работы Art части команды (Artist-ов, Animator-ов, Художников), Понимаю их workflow, цели использования программ, могу указывать на проблемы в их работе и способы их исправления.
Среднее специальное образование
2013
Среднее специальное образование
Астанинский Политехнический Колледж (АПК)
Программирование и Информационные технологии, Техник Программист
Знание языков
Гражданство, время в пути до работы
Гражданство: Казахстан
Разрешение на работу: Казахстан
Желательное время в пути до работы: Не имеет значения