ThisIsZolden

На Пикабу
Дата рождения: 27 ноября
в топе авторов на 52 месте
21К рейтинг 739 подписчиков 3 подписки 20 постов 11 в горячем
Награды:
5 лет на Пикабу
1149

Делаю физический 2Д-движок для игры

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

Какие физические сущности есть в движке? Во-первых, материя, в которую слипаются частицы. Из них можно делать персонажей и мир. Вычислять их дорого, но всё работает на GPU, так что запас размера мира есть.

Частицы - это абстрактные точки, которые надо отрисовать. Для отрисовки я использую метод marching squares.

Сначала для частиц строится distance field, принцип которого понятен по этому видосу. Затем в окрестностях точек треугольники меша становятся видимыми, и вся материя рендерится в один draw call.

Кроме материи, в игре есть твёрдые тела, который симулируются отдельно у них уже есть момент инерции, произвольная масса. Есть также и пружины, с помощью которых тела можно присоединять друг к другу.

Из примитивов можно строить более сложные фищические объекты. Пара колёс + прямоугольник - получитлась машинка. Чтобы игрок мог управлять сущностями в игре, в GPU передаётся инпут, а для тел устанавливается, как они реагируют на него.

Естественно, для игры с разружаемой средой, нужно оружие. Вся игра работает на GPU, и единственный буффер, который копируется в каждом кажру на сторону CPU - точки взрывов, чтобы создавать VFX и воспроизводить звук.

Прежде чем делать игру, я хотел добавить в движок сущности, которые точно пригодятся. Одна из них - верёвка. Её жёсткостью и загибом можно управлять.

Чтобы сделать управляемых персонажей и врагов в игре, я добавил в движок "мягкие тела". Это те же физические частицы, но соединённые пружинами. Внутри них можгут быть физические кости, чтобы делать анимации.

Рендерятся они так: формируется меш из физических треугольников, слагающих мягкое тело. Всё происходит в GPU, поэтому работает быстро.

Здесь рука - мягкое тело с костями, управляемое игроком. Она взаимодействует с головой, которая сделана из несвязанных частиц, то есть обычной материи.

Из дополниельных фич - присоединение объектов друг к другу. Тут Патрик откладывает икру. Хотели бы поесть икры Патрика?

Кроме самой игры, в игре будет редактор-песочница, чтобы игроки могли создавать физические сцены. В движке можно делать занятные симуляции, довольно красивые.

Какой в итоге будет геймплей? У меня есть список из 60 вариантов геймплея под физику. Но я склоняюсь к одному, с копанием земли, добычей ресурсов, постройкой базы и элементами аркадного платформера.

Если желаете вишлистить игру, она тут:

https://store.steampowered.com/app/3343970/Simulario/

Показать полностью 9
3086

Годы изучения математики, физики и информатики принесли результат

Эта симуляция работает в реальном времени. Я пока не планирую переносить её в VR, поскольку человечество всё никак не может создать нормальные haptic gloves, чтобы ощущать виртуальные объекты тактильно. Может какой-то инженер посмотрит на эти сиськи, возьмётся за свой паяльник и воскликнет: Довольно! Пришло время! Я не выйду из стен этой лаборатории, пока не создам haptic gloves!

Эта симуляция сделана в Юнити, все вычисления - в компьют шейдере, написаны на HLSL.

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

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

https://store.steampowered.com/app/3343970/Simulario/

Показать полностью
2481

Как я сделал физический 3Д-движок

Я обожаю физику в играх, и мне интересно разрабатывать физические движки.

Недавно мне захотелось сделать игру, в которой персонажи будут сделаны в виде физической симуляции мягкого тела. И чтобы всё управление персонажем происходило через физический интерфейс движка.

Мне хотелось, чтобы движение игровых сущностей было физически достоверным, чтобы игрок мог предсказывать последствия своих действий на основе опыта жизни в реальном физическом мире.

Вся физика вычисляется на видеокарте, что совершенно логично. Архитектура и АПИ GPU идеально подходят для многопоточной работы с массивами данных, и производительность на два порядка выше, чем у CPU. В Юнити можно писать компьют шейдеры, и весь код физики написан на HLSL.

Я начал с создания кристаллической решётки, узлы которой - свободно плавающие частицы, соединённые друг с другом пружинами. Хотелось посмотреть, как эта штука будет себя вести.

Получилось неплохо. Это можно было использовать как физический материал для создание игровых объектов.


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

Это могло пригодиться для создания разрушаемых частей игрового мира и для каких-то механик.

Если силу взаимодействия частиц сделать значительной, они слипаются в убедительное подобие разрушаемой физической материи.

В этом видосе я сделал чтобы как в Терминаторе у Т-1000 дырки появлялись.

Но если силу взаимодействия частиц сделать слишком большой, симуляция взрывается, так что пришлось применить ряд оптимизаций, чтобы материя хорошо выдерживала давление и экстремальные силы. В этом видосе мы видим, что при сжатии материя ведёт себя как паста с гидродинамическими свойствами, которая при этом достаточно прочна, чтобы слипаться в относительно твёрдое тело.

Но свободные частицы в контексте моей цели имеют два надостатка: они не прочно держатся. Материя разваливается, если посильней стукнуть. Кроме того, частицы выглядят как набор шариков, а мне нужен меш персонажа. Это и для производительности, и для эстетики лучше.

Тут конечно подошёл бы метод marching cubes, но у него есть некоторые недостатки. Например, информацию о текстуре пришлось бы проецировать на получающийся меш, вместо того, чтобы хранить uv-координаты для каждой вершины. Поэтому, я решил использовать физическое тело с пружинами.

Сформировал из него персонажа-змейку.

И затем стал искать способ генерировать меш вокруг физического тела. И удерживать его в окрестностях физического тела, как кожу.

Я экспериментировал с разными способами, но всё было недостаточно хорошо, например:


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

Оставалось автоматически заскинить меш физическими частицами тела, как если бы они были костями. Получилось мягкое тело, игровая сущность.

С этим уже можно было работать.

Я перенёс алгоритм анимации заскиненного меша в ГПУ (для скорости), и добавил на каждом кадре сглаживание поверности меша. Кроме того, реализовал простенькое управление персонажем.

И получился физически симулируемый персонаж, управляемое мягкое тело. То есть, главную цель эксперимента я достиг.


Естественно, я не избежал искушения для научных целей сделать и симуляцию женской груди. Этот видос сюда не буду выкладывать, а то из-за одного видоса весь пост делать 18+ не хочется. Выложу отдельно чуть позже.

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

Однако, оценив трудозатраты, я решил переключиться на 2Д-движок для выпуска игры, чтобы на нём решить ряд технических сложностей. Всё-таки хочется поскорей игру выпустить, а не тратить два года на разработку.

В следующем посте я расскажу про 2Д-движок, в котором я продвинулся гораздо дальше.

Показать полностью 8
3

Комфортное место

Комфортное место Сюрреализм, Цифровой рисунок, Упоротость
Показать полностью 1
31

Купил планшет и стал учиться рисовать

Это мой третий рисунок ever. Если не считать нонсенса уровня палка-палка-огуречек.

Купил планшет и стал учиться рисовать Рисунок на планшете, Сюрреализм

Что делать, если...

Что делать, если... Комиксы, Сюрреализм, Странный юмор
Показать полностью 1

Как быть, если сломался компьютер-рыба

Как быть, если сломался компьютер-рыба Комиксы, Сюрреализм, Абсурд, Странный юмор
Показать полностью 1

Что делать, если лицо на спине распоясалось

Что делать, если лицо на спине распоясалось Комиксы, Абсурд, Сюрреализм
Показать полностью 1
Отличная работа, все прочитано!