Войти
ФлеймФорумИгры

Jelly in the sky

Страницы: 1 2 3 Следующая »
#0
0:26, 13 дек. 2017

автор:
https://pikabu.ru/profile/ThisIsZolden
https://steamcommunity.com/profiles/76561198359569208
https://habrahabr.ru/users/thisiszolden/

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

Основная особенность игры в том, что она представляет собой физическую симуляцию, которая выполняется на графическом процессоре. Основной код игры - это огромный compute shader, 6 тысяч строк на HLSL. Десятки тысяч взаимодействующих частиц обрабатываются параллельно, и выходит довольно быстро. Всё в игре сделано из этих частиц. Вот видосик с геймплеем:

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

Хочется просуммировать опыт разработки такого рода игры. Какие достоинства и недостатки у вычислений на видеокарте.

Достоинства:

1. Производительности GPU в 10-100 раз выше, чем у процессора, когда дело касается параллельных вычислений. Это очен много, так что на видеокарте можно делать принципиально другие игры, чем на процессоре. Моя игра просто не работала бы на CPU (то есть, была бы слишком медленной).

Недостатки:

1. Мало туториалов. Я потратил довольно много времени, чтобы всё изучить. И ещё больше - чтобы решить возникавшие проблемы.

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

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

4. Не у всех есть достаточно современные видеокарты, поддерживающие шейдеры и обладающие достаточной производительностью. Это ограничивало круг игроков, способных поиграть в мою игру.

5. Графические API на разных платформах немного отличаются друг от друга. В простых случаях они совместимы со стандартом directX, но у меня - не простой случай. У Metal одно небольшое ограничение, на андроиде - другое, на Vulkan - третье. В итоге, моя игра работает только на Windows.

6. Не удалось сделать вычисления детерминированными, так что пришлось обойтись без мультиплеера.

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

https://pikabu.ru/story/dodelal_igru_rabotayushchuyu_na_videokarte_5552510


#1
0:27, 13 дек. 2017

#2
1:47, 13 дек. 2017

Джек Аллигатор
круто. иногда кажется, что конструкции, которые должны упасть, почему-то не падают. такое бывает при shock propagation-подобных эвристиках.

как избавляешься от осцилляций в областях с большим давлением?

#3
3:35, 13 дек. 2017

Джек Аллигатор
Ого, жаль без мультиплеера

#4
6:02, 13 дек. 2017

Suslik
> как избавляешься
игра не моя. удивлен что не представлена на геймдеве, потому создал тред.
надо бы автора заманить на геймдев.ру

#5
6:02, 13 дек. 2017

Джек Аллигатор
Любопытная штучка, буду изучать на досуге)

#6
6:10, 13 дек. 2017

Прикольно выглядит.

#7
6:19, 13 дек. 2017

https://habrahabr.ru/post/320142/
https://habrahabr.ru/post/328284/

#8
7:55, 13 дек. 2017

Ток на пикабу прочитал,  захожу сюда - и тут она))))

#9
10:14, 13 дек. 2017

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

#10
10:23, 13 дек. 2017

Сделана на Юнити кстати. Похоже, сторонники "свой движок нужен для нестандартных игр" опять в пролете.

#11
11:16, 13 дек. 2017

kipar
> Сделана на Юнити кстати
compute shader, 6 тысяч строк на HLSL, хоть на Пунити хоть на Фугунити)))
> В итоге, моя игра работает только на Windows.
оо нет Юнити не может в другие платформы))))

#12
12:00, 13 дек. 2017
Татарин
> compute shader, 6 тысяч строк на HLSL, хоть на Пунити хоть на Фугунити)))
угу, на чем угодно кроме webgl (ведь там нет ни hlsl ни compute shader). Но он выбрал таки юнити, а не самописный движок, т.е. юнити никак не мешает делать игры на целиком рукописном шейдере.
#13
12:00, 13 дек. 2017

Попробовал игру, сделана интересно, однако игра хардкорная.
По-моему близкий аналог этого в плане пиксельной разрушаемости есть cortex command.

#14
12:19, 13 дек. 2017

kipar
> угу, на чем угодно кроме webgl (ведь там нет ни hlsl ни compute shader). Но он
> выбрал таки юнити, а не самописный движок, т.е. юнити никак не мешает делать
> игры на целиком рукописном шейдере.
это не отменяет того факта что он написал собственный игровой движок на compute shaders - самописный. Здесь ценность Юнити нулевая, а еще будут говорить что вот Юнити может расчитывать огромное количество частиц с физикой в реальном времени, а люди в это поверят.

Страницы: 1 2 3 Следующая »
ФлеймФорумИгры