Search
Write a publication
Pull to refresh
139
0

Пользователь

Send message
Ага, я так и назвал игру, «Jelly in the sky». Хотя, физику подкрутил, стало всё потвёрже, но в иоге тубет несколько материалов с разными свойствами.
Спасибо всем в этой ветке, я с вами непременно свяжусь, когда возникнет надобность потестировать игру.
Для научных расчётов такая штука наверняка лучше подходит, если Nvidia её сделала как модификацию популярного железа, и снизила за этот счёт цену.
Да, я загрузил основной код для частиц в ассет стор юнити:
https://www.assetstore.unity3d.com/en/#!/content/76233

Он пока платный, но после выхода игры сделаю беспланым.

А игра, скорее всего, будет включать не только геймплейную составляющую, но и редактор мира, чтоб рисовать домики и взрывать их — как раз для тех, кто хочет «погонять».
У меня это примерно так сейчас и сделано. Я использую силу леннарда-джонса, которая комбинирует притяжение и отталкивание. Так что частицы слипаются в тела, если сталкиваются, и ведут себя как тело, потому что связи между ними работают как пружины. При этом, тела разрушаемы, потому что составляющая притяжения не велика по силе.

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

плюс на один шаг симуляции взаимодействий частиц делать несколько шагов симуляции передачи импульса между частицами по связям

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

А моя оценка количествf частиц на GTX 1080 касалась не общего случая, а моей реализации. Специфика такова: чтобы кристалл удерживал форму, нужно повысить (в сравнении с моделированием жидкости) силы взаимодействия частиц, но встаёт проблема: погрешность дискретизации умножается на величину сил Поэтому, я сильно уменьшил шаг дискретизации. И за один Update() прогоняю 10 циклов симуляции с довольно маленьким шагом, чтоб сохранить быструю работу в реальном времени.

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

А «технично, но не очень красиво» — наверное, самая распространённая ситуация в инди-геймдеве, когда программист делает клёвые штуки, которые не впечатляют на вид. На форуме unity3d.com сейчас можно довольно легко привлечь энтузиастов-дизайнеров, если показать что-то техничное.
Подразумевалось, что это расплавленная взрывом материя. Хотя, и правда, многовато.
Основной метод — использовать защищённую запись. В HLSL используются Interlocked операторы, а в процессорной многопоточности есть разные методы, в подробности которых я не вдавался и не могу ничего подсказать, но этому посвящено много статей, легко гуглится.

Насчёт Powder Toy — не знаю. Судя по динамике работы, эта однопоточная программа, но я могу ошибаться.
Да, вдозновился вормсами и scorched earth. А на видео многое скрыто. Например, тот факт, что за каждый фрейм запускается 10 циклов симуляции, чтоб шаг был в 10 раз меньше. С меньшей точностью у меня и 500 тысяч частиц летало. Это было зрелищно, но не подходило для игры. А тут точность большая, но это не бросается в глаза.

Игру уже выложил в гринлайт:
http://steamcommunity.com/sharedfiles/filedetails/?id=845215183
Спасибо, погуглю.

А более продвинутые методы могут сработать, я пока не пробовал. Если вместо величины поля в текущей точке использовать усреднённое значение по текущей и следующей (по вектору скорости), то можно уменьшить ошибку.
«Желейность» я могу пофиксить, вот сегодня записал гифку, получше стало?

http://i.imgur.com/qcGOQgW.gif
Это всё не так уж и сложно, если делать с помощью compute shader на юнити. Так что если давно думал сделать, есть смысл попробовать.
Определить наличие близких частиц — это значит уже сделать полноценный шаг. А определять наличие дальних частиц при отсутствии ближних стоит дорого в вычислительном смысле.
Пока не проверял, но должно работать. На amd ведь работает directx и opengl?
Выглядит здорово. Частиц для жидкости — минимум, но благодаря хорошей математике взаимодействия, они довольно реалистично изображают жидкость. Ну и с графикой правильно сделали: множество частиц покрывается сплошной динамической текстурой. Я думал тоже нечто подобное сделать, но пока не копал в этом направлении.
Если на полный рабочий день, то 2-3 месяца примерно, точней сложно сказать.
А какая у вас видеокарта? Мне как раз может понадобиться несколько человек с разными видюшками, чтоб отправить им сырую версию и посмотреть, какой fps у них покажет.

А что до желейных войн, то я игру пока так и назвал, «Jelly in the sky». Но сегодня я чуть физику исправил, и теперь твёрдое выглядит чуть более твёрдым. Вот, можно посмотреть:

http://i.imgur.com/qcGOQgW.gif
Да, так можно было бы, но это бы подразумевало кроме вычислений типа частица-частица, проводить вычисления типа двумерное тело-частица. А это уже более сложная математика. Совмещать подходы счастицами и с телами — не слишком правильно, потому что лучше всего параллельный обсчёт работает, когда все потоки выполняются за примерно равное время. А расчёт тел сложней, и его все будут ждать, Общая производительность упадёт.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity