Jelly in the sky. Разработка игры на основе физической симуляции - Часть 2

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


От создания нового проекта в Юнити до публикации бета-версии в Стиме прошло 10 месяцев. 90% времени ушло на создание, оптимизацию и вылизывание физической модели, остальное — на геймплей.


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


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


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

Jelly in the sky. Разработка игры на основе физической симуляции - Часть 2 Игры, Разработка, Jelly in the sky, Физика, Симуляция, Не мое, Гифка, Видео, Длиннопост

У частиц уже есть температура, и материя меняет свойства, оплавляясь от жара взрывов. Сама материя держит объём, частицы стремятся к образованию шестиугольной решётки. Небольшая доля вязкости (в дополнение к силе Леннарда-Джонса) обеспечивает лучшую стабильность материи.


Проблема со стабильностью вот в чём. Дискретность модели ограничивает величину силы взаимодействия между частицами, так как на большой скорости частицы могут за один шаг чрезмерно сблизиться, проигнорировав крутейшую (двенадцатой степени) кривую роста силы отталкивания. Это придаст им огромное ускорение, что сделает новое неестественное сближение ещё более вероятным. Закон сохранения энергии нарушается, материя взрывается. А вязкость позволяет ослабить этот эффект.


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

Jelly in the sky. Разработка игры на основе физической симуляции - Часть 2 Игры, Разработка, Jelly in the sky, Физика, Симуляция, Не мое, Гифка, Видео, Длиннопост

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


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


На этом этапе обнажилось несовершенство физической модели. Каменные колонны вели себя как желе:

Jelly in the sky. Разработка игры на основе физической симуляции - Часть 2 Игры, Разработка, Jelly in the sky, Физика, Симуляция, Не мое, Гифка, Видео, Длиннопост

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


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


Получилось уже довольно похоже на компьютерную игру в традиционном понимании:

Jelly in the sky. Разработка игры на основе физической симуляции - Часть 2 Игры, Разработка, Jelly in the sky, Физика, Симуляция, Не мое, Гифка, Видео, Длиннопост

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


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


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

Jelly in the sky. Разработка игры на основе физической симуляции - Часть 2 Игры, Разработка, Jelly in the sky, Физика, Симуляция, Не мое, Гифка, Видео, Длиннопост

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


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


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


Наконец, игра вышла в раннем доступе, вот трейлер:

(Музыка — из техно-оперы Виктора Аргонова «2032». Не очень подходит по смыслу, но волнующая).
Суммируя опыт разработки: эксперимент показал, что глубокое проникновение физики в геймплей технически реализуемо, но пока не слишком ясно, как это использовать с наибольшей пользой для геймплея. Нужно ещё разобраться, какие уникальные игровые фичи следуют из физического мира. Я сейчас работаю над кампанией для одного игрока, в которой пытаюсь задействовать необычные способы взаимодействия с миром, делаю эдакий гибрид «Леммингов» и платформера-стрелялки. В Леммингах надо было много копать, взрывать и строить, а в стрелялке — стрелять. Вот, посмотрим, какой гибрид у меня получится. Надеюсь, и игроки подскажут. В данный момент в опубликованной игре доступен только режим сражений, имитирующий игру Scorched Earth.



Материал взят отсюда: https://habrahabr.ru/post/328284/

Страница игры в Steam: http://store.steampowered.com/app/593530/Jelly_in_the_sky/

Лига Разработчиков Видеоигр

6.6K поста22.1K подписчиков

Добавить пост

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

Вы смотрите срез комментариев. Показать все
17
Автор поста оценил этот комментарий

Плюсую за труды! молодец!

А продолжение Сталкера сможешь??

раскрыть ветку (25)
3
Автор поста оценил этот комментарий

Тег "не моё". Спрашивай на хабре.

раскрыть ветку (24)
11
Автор поста оценил этот комментарий

Автор и на Пикабу обитает:

http://pikabu.ru/profile/ThisIsZolden

раскрыть ветку (23)
5
Автор поста оценил этот комментарий

ой, упс. Так автор есть и на пикабу. Чтото я не подумал его поискать, извини @ThisIsZolden. То есть я по сути пост украл. Как удалить пост? Не хочу мешать человеку.

раскрыть ветку (22)
6
Автор поста оценил этот комментарий

Всё в порядке, пусть висит!

раскрыть ветку (21)
3
DELETED
Автор поста оценил этот комментарий
Комментарий удален. Причина: данный аккаунт был удалён
раскрыть ветку (1)
Автор поста оценил этот комментарий

Да, наверное смог бы. Но я предпочитаю игры другого жанра.

Автор поста оценил этот комментарий
Кстати, а где эти тарелки в стим версии?
раскрыть ветку (1)
Автор поста оценил этот комментарий

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

Автор поста оценил этот комментарий

Автор,я купил игру,но пока особо не играл,так как тормозит.Сможешь в оптимизацию?

раскрыть ветку (16)
1
Автор поста оценил этот комментарий

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

раскрыть ветку (6)
Автор поста оценил этот комментарий

С этим я не согласен. Все данные проходят через процессор.

У меня Battlefield 4 пошла спокойно на высоких,а какая-то инди игра тормозит.

Оптимизация.Это бич современных игр.

раскрыть ветку (5)
1
Автор поста оценил этот комментарий

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

раскрыть ветку (4)
Автор поста оценил этот комментарий

Я понимаю.Но ЦП на то и ЦП,что через него идут все данные.Видеокарта оперирует этими данными и рендерит картинку.

Согласитесь - для небольшой инди-игры,требования у вас завышены.

раскрыть ветку (3)
1
Автор поста оценил этот комментарий

да емое. Как до тебя донести, что как раз-таки в этом случае через ЦП не проходит поток данных?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

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


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

1
Автор поста оценил этот комментарий

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

раскрыть ветку (8)
Автор поста оценил этот комментарий

Дело не в этом. Я играю в GTA 5 на минимуме из-за слабого процессора. Все данные идут через процессор.

Нужно оптимизировать этот поток. EA очень хорошо оптимизировала Battlefield 4.

Я не прошу такой-же оптимизации.Но прошу уменьшить прожорливость игры в плане процессора.

раскрыть ветку (7)
1
Автор поста оценил этот комментарий

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

раскрыть ветку (6)
Автор поста оценил этот комментарий

Intel Core i5-3337U;NVIDIA Geforce GT 630M;6gb DDR3

Ноут HP Pavilion серию лень смотреть.

раскрыть ветку (5)
1
Автор поста оценил этот комментарий

У вас слабая видеокарта.
Точных данных я не нашёл, вывод делаю на основе тестов разных игр на частоту кадров при разных настройках.

Суть в том, что Jelly in the sky использует видеокарту для расчёта физики частиц. От кол-ва частиц симулируемых движком игры зависит минимально необходимое число универсальных процессоров.
Если верить этому: http://accross.su/videocards/view/319 то на борту данной карточки всего 96 уп.

Сейчас автор заявляет о 512+ в качестве рекомендуемых и 384+ для минимально необходимых.

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

раскрыть ветку (2)
1
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку