Делаю физический 2Д-движок для игры
В этом видео - симуляции, которыми можно управлять с помощью геймпада. Это я прототипирую, чтобы почувствовать, какой геймплей как ощущается игроком - что увлекает, где физика интересно себя проявляет.
Какие физические сущности есть в движке? Во-первых, материя, в которую слипаются частицы. Из них можно делать персонажей и мир. Вычислять их дорого, но всё работает на GPU, так что запас размера мира есть.
Частицы - это абстрактные точки, которые надо отрисовать. Для отрисовки я использую метод marching squares.
Сначала для частиц строится distance field, принцип которого понятен по этому видосу. Затем в окрестностях точек треугольники меша становятся видимыми, и вся материя рендерится в один draw call.
Кроме материи, в игре есть твёрдые тела, который симулируются отдельно у них уже есть момент инерции, произвольная масса. Есть также и пружины, с помощью которых тела можно присоединять друг к другу.
Из примитивов можно строить более сложные фищические объекты. Пара колёс + прямоугольник - получитлась машинка. Чтобы игрок мог управлять сущностями в игре, в GPU передаётся инпут, а для тел устанавливается, как они реагируют на него.
Естественно, для игры с разружаемой средой, нужно оружие. Вся игра работает на GPU, и единственный буффер, который копируется в каждом кажру на сторону CPU - точки взрывов, чтобы создавать VFX и воспроизводить звук.
Прежде чем делать игру, я хотел добавить в движок сущности, которые точно пригодятся. Одна из них - верёвка. Её жёсткостью и загибом можно управлять.
Чтобы сделать управляемых персонажей и врагов в игре, я добавил в движок "мягкие тела". Это те же физические частицы, но соединённые пружинами. Внутри них можгут быть физические кости, чтобы делать анимации.
Рендерятся они так: формируется меш из физических треугольников, слагающих мягкое тело. Всё происходит в GPU, поэтому работает быстро.
Здесь рука - мягкое тело с костями, управляемое игроком. Она взаимодействует с головой, которая сделана из несвязанных частиц, то есть обычной материи.
Из дополниельных фич - присоединение объектов друг к другу. Тут Патрик откладывает икру. Хотели бы поесть икры Патрика?
Кроме самой игры, в игре будет редактор-песочница, чтобы игроки могли создавать физические сцены. В движке можно делать занятные симуляции, довольно красивые.
Какой в итоге будет геймплей? У меня есть список из 60 вариантов геймплея под физику. Но я склоняюсь к одному, с копанием земли, добычей ресурсов, постройкой базы и элементами аркадного платформера.
Если желаете вишлистить игру, она тут:
Лига Разработчиков Видеоигр
8.5K постов23.1K подписчиков
Правила сообщества
ОБЩИЕ ПРАВИЛА:
- Уважайте чужой труд и используйте конструктивную критику
- Не занимайтесь саморекламой, пишите качественные и интересные посты
- Никакой политики
СТОИТ ПУБЛИКОВАТЬ:
- Посты о Вашей игре с историей её разработки и описанием полученного опыта
- Обучающие материалы, туториалы
- Интервью с опытными разработчиками
- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры
- Посты, единственная цель которых - набор команды для разработки игры
- Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
- Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
- Cсылка размещается в формате: "Страница игры в Steam: URL"