Квазижидкость из 100 тысяч частиц на gpu

Проекты в стадии разработки.

Re: Квазижидкость из 100 тысяч частиц на gpu

Сообщение Diab10 15 окт 2016, 15:16

Zolden писал(а):
Diab10 писал(а):Офигеть :D
Как такое вообще на ГПУ можно сделать, не представляю :-o
Сорцы не будете открывать? Если нет, то мб дадите какие-нибудь полезные ссылки почитать? :)


С туториалами по Compute Shader слабенько, я нашёл только вот этот:

http://kylehalladay.com/blog/tutorial/2 ... Nifty.html

Или вот ещё видосик есть:

https://www.youtube.com/watch?v=qDk-WIOYUSY

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

А что касается симуляции множества взаимодействующих частиц, то это вещь довольно простая: создаёшь массив, для каждой частицы координаты, скорость и ещё какие угодно параметры, и на каждом шаге делаешь расчёт взаимодействий, на его основе меняешь скорости, и в соответствии с текущей скоростью изменяешь координаты. Только оптимизации нужно много, чтоб сложность O(N * log(N)) была, а не O(N^2).

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

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


Спасибо, было бы здорово)
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: Квазижидкость из 100 тысяч частиц на gpu

Сообщение sledo 22 окт 2016, 16:57

Я как то задался похожей идеей, но только по имитации деформации веществ. Так вот мощности современных домашних ПК оказались маловаты для нормальной реализации подобного, даже в очень общих чертах. Но тут надо разработать сам метод.
Вы я видел описывали процесс как прохождение по всему массиву частиц, для расчета нового положения каждой частицы? Это очень долго. В данном случае нужно идти от прилагаемой силы. У вас некое тело которое находится в состоянии покоя, т.е. в теле все частицы уравновешивают силы друг друга. Нет нужды эмитировать эти силы. Что бы нарушить баланс сил, надо приложить дополнительную силу в какой то точке тела, причем поскольку вы создали это тело, то вы в курсе какое количество приложенных сил нарушит баланс сил в теле, что бы это стало видно. Это и есть отправная точка. Т.е. есть некий порог прилагаемых сил, после прохождения которого нужно будет просчитывать новые положения частиц. Соответственно нет нужны каждый раз проходить по всему массиву, а нужно лишь проходиться только по тем частицам, на которые была приложена сила. Предположим сила была приложена только к одной частице, которая на поверхности. Ее может окружать только какое то ограниченное количество частиц, которые будут с ней взаимодействовать. Тут поможет трехмерная матрица для оптимизации, типа массива массивов, что бы не нужно было просчитывать окружающие частицы, а сразу брать готовые результаты. Дальше окружающие частицы будут взаимодействовать с окружающими их частицами и т.д. Т.е. количество расчетов будет идти в квадратической зависимости от места приложения сил, т.е. нагрузка на процессор будет возрастать тем больше, чем больше было приложено сил к телу (причем вы полностью можете ее прогнозировать). Однако в отличии от первого подхода, где всегда проверяется вся масса частиц, тут надо будет проверять лишь какую то малую часть от них, а порог сил будет отсеивать те частицы у которых сила уже стала слишком малой, т.е. можно говорить что приложенная сила рассеялась в теле и полностью перешла, допустим в тепловую энергию, которая в свою очередь перешла в инфракрасное излучение и рассеялась в пространстве. Поскольку силы никуда не пропадают, а вселенную с имитировать нет возможности, то рассеянной энергией можно пренебречь. Точно так же, если в вашем случае это Земля, то вам никогда не придется просчитывать всю массу частиц Земли, если только вы не решите устроить Армагедец, или сделать океян (а там еще есть и осмотическое давление, что конечно красиво, но нафиг надо).
Тем не менее, мои тесты показали что более 3 000 000 операций (хотя это не точная цифра, но что то около того, уже подзабыл. В общем у меня примерно около 200 000 - 300 000 частиц находилось в теле) за кадр сделать не получится на средних машинах, что крайне мало для имитации реальной деформации тел, но вот у вас, может что то и получится. Возможно, если засовывать матрицу частиц в какую то более быструю среду, нежели оперативная память, то можно увеличить скорость, но я этим не занимался, поскольку в таком случае надо выходить за рамки Unity.

В общем, я думаю вы недостаточно освоили теорию молекулярной физики. Надо это исправлять.
sledo
Старожил
 
Сообщения: 831
Зарегистрирован: 05 янв 2014, 15:44

Re: Квазижидкость из 100 тысяч частиц на gpu

Сообщение Zolden 22 окт 2016, 17:17

кул стори, бро!
Аватара пользователя
Zolden
UNITрон
 
Сообщения: 156
Зарегистрирован: 29 мар 2014, 19:05
Откуда: Москва

Re: Квазижидкость из 100 тысяч частиц на gpu

Сообщение Cr0c 22 окт 2016, 18:54

sledo писал(а):Соответственно нет нужны каждый раз проходить по всему массиву, а нужно лишь проходиться только по тем частицам, на которые была приложена сила

Гравитация, бессердечная ты...
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: Квазижидкость из 100 тысяч частиц на gpu

Сообщение waruiyume 22 окт 2016, 19:05

В игре будут режимы хотсит и сетевая игра, или только сингл?
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Квазижидкость из 100 тысяч частиц на gpu

Сообщение Cr0c 22 окт 2016, 19:59

waruiyume писал(а):В игре будут режимы хотсит и сетевая игра, или только сингл?

Syberex писал(а):Охренеть, желейный танк в пшенной каше :-o

Сетевое противостояние ожившей каши и желейных танков. Это потрясающе!!!
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: Квазижидкость из 100 тысяч частиц на gpu

Сообщение Zolden 22 окт 2016, 20:39

waruiyume писал(а):В игре будут режимы хотсит и сетевая игра, или только сингл?

Хотсит до восьми игроков - непременно, ради него всё и затевалось. Хотя по мере работы над игрой, ловлю себя на желании сделать аркадный синглплеер.
Аватара пользователя
Zolden
UNITрон
 
Сообщения: 156
Зарегистрирован: 29 мар 2014, 19:05
Откуда: Москва

Re: Квазижидкость из 100 тысяч частиц на gpu

Сообщение sledo 25 окт 2016, 21:12

Cr0c писал(а):
sledo писал(а):Соответственно нет нужны каждый раз проходить по всему массиву, а нужно лишь проходиться только по тем частицам, на которые была приложена сила

Гравитация, бессердечная ты...

Вы в отношении меня заняли системную опозицию?)) Это довольно глупо)
Гравитацию тоже надо просчитывать не для всей массы земли которая находится в состоянии покоя, а только для той части, к которой была приложена сила. Т.е. мы всегда должны вертеться вокруг какого то небольшого количества частиц, от общей массы частиц. Если у автора вышло оперировать 30 000 частицами, то именно это максимальное количество частиц должно быть в движении в каждый момент времени, а самых частиц может быть столько, на сколько хватит оперативной памяти. Т.е. остальное использовать просто для динамического антуража, что уже будет выглядеть весьма достойно. Причем в случае с землей, молекулярные связи относительно сильные до тех пор, пока эта земля не разрыхлится. В общем, тут чистой воды молекулярная физика и немного химии. Надо их понимать.

Zolden писал(а):кул стори, бро!

Всегда пожалуйста. Я тот еще историк)
sledo
Старожил
 
Сообщения: 831
Зарегистрирован: 05 янв 2014, 15:44

Re: Квазижидкость из 100 тысяч частиц на gpu

Сообщение Cr0c 25 окт 2016, 23:17

sledo писал(а):только для той части, к которой была приложена сила

А ещё к той части, которая находится над областью приложения силы. Это не оппозиция - это указание неточности.
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: Квазижидкость из 100 тысяч частиц на gpu

Сообщение Zolden 30 ноя 2016, 01:16

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

Вот видосик:

Аватара пользователя
Zolden
UNITрон
 
Сообщения: 156
Зарегистрирован: 29 мар 2014, 19:05
Откуда: Москва

Re: Квазижидкость из 100 тысяч частиц на gpu

Сообщение Paul Siberdt 30 ноя 2016, 01:22

Под телефоны это дело реализуемо? Если да - вам пора уже релизить какую-нить простенькую пукалку и освобождать кладовку под мешки с деньгами. :)
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Квазижидкость из 100 тысяч частиц на gpu

Сообщение Zolden 30 ноя 2016, 02:24

Paul Siberdt писал(а):Под телефоны это дело реализуемо?

Я посмотрел параметры видеокарты Adreno 530, которую ставят в новейшие смартфоны, и на ней уже работают 256 параллельных процессоров. Это дофига для телефона, и даже неплохо для ноутбуков, такая сможет потянуть примерно вдвое меньше частиц, чем на видео. То есть, самые крутые телефоны это потянут, а остальные нет. Даже на писюках не на всех стоят карточки, поддерживающие Shader model 5.0. А если всё это считать только на CPU, то надо снижать число частиц раз в 20, это будет совсем не то. Так что я хоть и не прочь выпустить для мобил что-то похожее, но они пока не тянут. Так что ориентируюсь на PC, жду прогресса в железе смартфонов.
Аватара пользователя
Zolden
UNITрон
 
Сообщения: 156
Зарегистрирован: 29 мар 2014, 19:05
Откуда: Москва

Re: Квазижидкость из 100 тысяч частиц на gpu

Сообщение DbIMok 30 ноя 2016, 04:13

С мешками лучше поторопиться )
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Квазижидкость из 100 тысяч частиц на gpu

Сообщение Diab10 30 ноя 2016, 10:42

Офигенно, особенно когда какаха прилетела на танк :D
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: Квазижидкость из 100 тысяч частиц на gpu

Сообщение Zolden 01 дек 2016, 14:40

DbIMok писал(а):С мешками лучше поторопиться )

С мешками? Какие ещё мешки? Это сленг какой-то?
А глядя на приведённый тобой видос, я могу заметить, что частицы не взаимодействуют друг с другом, что понижает сложность вычислений с O(N * log(N)) до O(N). А ещё, что визуализация не пользуется защищённой записью, это тоже выигрыш в скорости, но из-за этого то одни, то другие куски изображения выходят на передний план, потому что меняется очерёдность выполнения потоков. Это реализуется кодом раз в десять более простым, чем у меня. И частиц можно больше одновременно считать.
Аватара пользователя
Zolden
UNITрон
 
Сообщения: 156
Зарегистрирован: 29 мар 2014, 19:05
Откуда: Москва

Пред.След.

Вернуться в Кузня

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3