Исходный размер 558x866

Портфолио для поступления в магистратуру

PROTECT STATUS: not protected

Портфолио гейм-дизайнера, программиста и тех-артиста, Матюхина Никиты.

Компетенции и опыт

Я на постоянной основе занимаюсь игровой разработкой в течение 5 лет. Окончил бакалавриат НИУ ВШЭ по специальности «Гейм-дизайн и виртуальная реальность». Более полугода работаю в игровой студии гейм-дизайнером и программистом на UE5.

Я обладаю глубоким знанием функционала Unreal Engine 5, программирования на C++ и Blueprints. Специализируюсь на написании высокоуровневой игровой логики, геймплейных систем, а также инструментов разработки и плагинов.Интересуюсь тех-артом и шейдингом. Обладаю большим опытом работы как с MaterialGraph, так и с HLSL.Знаю языки программирования C++, Python, C#, знаком с азами C и Assembler.Разрабатывал проекты на UE5, Unity и Godot.Также владею пакетом программ Adobe, моделированием в Blender и саунд-дизайном в Audacity.

Мотивация к поступлению

Я поступаю на «Системный гейм-дизайн» чтобы продолжить работу над своим дипломным проектом, Carbon Instinct и совместно с командой довести его до релиза. Хочу как расширить свои знания и навыки системного гейм-дизайна, так и продолжить развиваться как программист на C++ для UE5 и тех-артист: глубже освоить рендер-пайплайн, писать инструменты для левел-дизайна и environment art’а.

Мои работы

Carbon Instinct

Carbon Instinct — меха-мувмент-шутер от третьего лица. Разрабатывался командой из двух разработчиков в течение 3 месяцев на втором курсе обучения. Работа над игрой была возобновлена на 4 курсе в качестве дипломного проекта и велась еще 9 месяцев.Проект занял второе место в категории «Гейм-дизайн» на конкурсе HSE CREATIVE OPEN '24-25

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

Девлог

Loading...

Персонаж

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

Я реализовал систему прокачки персонажа, позволяющую устанавливать на робота модули разных категорий, предоставляющие боевые умения и опции мувмента.В игре реализовано 5 видов оружия 2 различных категорий и 3 способности перемещения.Весь набор умений персонажа является модульным и комбинируемым, логика каждого умения отделена от корневой логики персонажа и бесшовно встраивается в нее с возможностью замены модулей «на лету».Система не имеет строгих ограничений на количество или функционал модулей, позволяя быстро прототипировать и тестировать новые способности персонажа и их комбинации.

Противники

Разрабатывая искусственный интеллект врагов я создал 6 видов рядовых противников, обладающих уникальными механиками перемещения: 1 стационарный, 2 летающих, 1 перемещающийся в плоскости, 1 катающийся по стенам и потолкам и 1 перепрыгивающий между ними.Я также реализовал гигантского босса-червя, по которому у игрока есть возможность перемещаться. В рамках работы над ним я создал пасфайндинговый алгоритм для генерации сплайнов, избегающих столкновения окружением, а также логику по которой из сегментов формируется сам червь, его перемещение, анимация и атаки.У некоторых противников есть паттерны совместного поведения, атаки, синхронизированные между собой.

Игровая логика

В рамках работы над структурой проекта и игрового процесса я реализовал квестовую систему с поддержкой вложения. Квесты делятся на задачи, те могут дробиться на подзадачи, и так далее без ограничений глубины. За каждую задачу отвечает объект, содержащий блок логики, отвественный за ее выполнение.Такая система позволяет быстро итерировать над структурой и содержанием квестов, добавлять новые виды игровых задач, и без изменений в коде комбинировать и повторно использовать уже реализованные.

Я также создал систему сохранений, которая отслеживает состояние игрового мира для работы с системой WorldPartition.Так как уровни в Carbon Instinct построены по принципу Open Zone — большие, многоуровневые пространства со свободным перемещением, в проекте используется система World Partition, выгружающая из памяти удаленные и невидимые игроку объекты.Созданная мной система сохраняет данные о любых объектах, состояние которых изменяется во время игры: положение и здоровье врагов, собранные ресурсы и улучшения, интерактивные объекты и цели квестов. При попадании объекта в зону досягаемости World Partition его состояние восстанавливается на основе сохраненных данных.

Для удобства левелдизайна я также реализовал систему ивентов по принципу движка Unity. События в Actor’ах, обладающих соответствующим компонентом могут быть привязаны друг к другу драг-н-дропом в движке. Такой подход позволяет изолировать функционал игровых объектов и простраивать более сложные цепочки взаимосвязей.Например, один и тот же Actor, высвечиващий плашку туториала, может быть без написания дополнительной логики встроен в любую геймплейную секцию и вызываться как столкновением с коллизией, так и встречей с новым противником, выполнением квеста, получением ресурса, и так далее. Именно работа над обучением привела к идее создания подобной системы, но использоваться она может с любыми игровыми событиями.

UI

Работая над интерфейсом, я создал набор шаблонных UI-элементов, из которых после сформировал HUD, паузу, меню, туториал и прочие составляющие.Я сформировал библиотеку SDF-функций, благодаря которой большинство элементов интерфейса имеют в своей основе не текстуры, а параметризованные материалы, полностью построенные на вычислениях. Это способствует большей скорости итерации и создания новых объектов UI, а также обеспечивает четкость и корректный скейлинг изображения на любых разрешениях экрана.На основе тех же SDF-функций был создан мастер-материал прицела, который плавно трансформируется между разлинчыми формами при смене используемого оружия, реагирует на выстрелы, отдачу и движение. Для удобства реализации этих элементов фидбэка, виджет прицела обладает интерфейсом модификаторов, со встроенной интерполяции значений, обеспечивая гранулярные, детально контроллируемые изменения в прицеле в ответ на игровую логику.

SPRATSNACKER

Я также в течение года работал в инди-команде из 5 человек над проектом SPRATSNACKER.В данном проекте я занимался контроллером персонажа и искусственным интеллектом противников.

SPRATSNACKER — шутер от первого лица с акцентом на динамику и кинематграфичность. Кот-вигилант проникает в небоскреб злодейской корпорации Barktails и в одиночку расправляется с толпами вражеских псов.

Персонаж

Боевая система шпротоедкина строится на перемещении между укрытиями и использовании двух оружий — дробовика и пистолета, который персонаж достает при удержании ПКМ.Перемещаясь, Шпротоедкин способен прыгать, совершать подкаты, входить в тактический спринт и пинать врагов и другие объекты.

Проекту требовалась система для отслеживания состояния персонажа, позволяющая комбинировать действия, но избегающая конфликтов. Простая стейт-машина дает предсказуемость, но c ней персонаж не способен находиться в нескольких состояниях одновременно. Поэтому потребовался кастомный фреймворк, обрабатывающий инпут игрока.В основе системы — таблица правил, содержащая информацию о том, как различные действия и состояния персонажа комбинируются друг с другом: стан отменяет слайд, прицеливание не дает спринтить, но открывает возможность выстрелить из пистолета, а с пинком сосуществует — и так далее. Система регистрирует инпут игрока, формируя запросы на переход в те или иные состояния, а после обрабатывает эти запросы, сверяясь с правилами, разрешая, запрещая или откладывая переход в очередь.

Противники

Для создания разнообразных и кинематографичных энкаунтеров требовался вражеский ИИ, который бы генерировал интересные ситуации и отвечал на действия игрока.Я реализовал 3 класса противников, построенных на общем костяке: Тяжелый, Средний и Легкий.

Легкие — надоедливые, быстрые бойцы поддержки. Они прячутся в укрытиях, выбегая и стараясь поразить персонажа шокером, но умирают от одного пинка.Средние — вооруженный пистолетами-пулеметами костяк вражеских сил.Тяжелые — медлительные, смертоносные и живучие бойцы, вооруженные дробовиками. Их можно вывести из строя, стреляя на подавление.

Все враги исползуют систему EQS для поиска укрытий и оптимального положения для стрельбы, а также кооперации между собой.Враги ротируются, стараясь поддерживать стабильное давления на игрока. Чем больше противников атакует, тем выше шанс для кого-то из них убежать в укрытие для перезарядки или начать менять позицию. Разные классы врагов имеют в рамках этой оценки разный вес.Принимая решение, противники берут в рассчет положение игрока, его текущее оружие, здоровье, близость и действия союзников, направление взгляда и движение игрока, собственное здоровье и количество патронов.

Другие проекты

Участие в мероприятиях и фестивалях

Портфолио для поступления в магистратуру
Проект создан 28.07.2026