Да, я загрузил основной код для частиц в ассет стор юнити:
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
А более продвинутые методы могут сработать, я пока не пробовал. Если вместо величины поля в текущей точке использовать усреднённое значение по текущей и следующей (по вектору скорости), то можно уменьшить ошибку.
Определить наличие близких частиц — это значит уже сделать полноценный шаг. А определять наличие дальних частиц при отсутствии ближних стоит дорого в вычислительном смысле.
Выглядит здорово. Частиц для жидкости — минимум, но благодаря хорошей математике взаимодействия, они довольно реалистично изображают жидкость. Ну и с графикой правильно сделали: множество частиц покрывается сплошной динамической текстурой. Я думал тоже нечто подобное сделать, но пока не копал в этом направлении.
А какая у вас видеокарта? Мне как раз может понадобиться несколько человек с разными видюшками, чтоб отправить им сырую версию и посмотреть, какой fps у них покажет.
А что до желейных войн, то я игру пока так и назвал, «Jelly in the sky». Но сегодня я чуть физику исправил, и теперь твёрдое выглядит чуть более твёрдым. Вот, можно посмотреть:
Да, так можно было бы, но это бы подразумевало кроме вычислений типа частица-частица, проводить вычисления типа двумерное тело-частица. А это уже более сложная математика. Совмещать подходы счастицами и с телами — не слишком правильно, потому что лучше всего параллельный обсчёт работает, когда все потоки выполняются за примерно равное время. А расчёт тел сложней, и его все будут ждать, Общая производительность упадёт.
https://www.assetstore.unity3d.com/en/#!/content/76233
Он пока платный, но после выхода игры сделаю беспланым.
А игра, скорее всего, будет включать не только геймплейную составляющую, но и редактор мира, чтоб рисовать домики и взрывать их — как раз для тех, кто хочет «погонять».
В ближайшее время я сделаю разные материалы, и одновременно будут существовать и более твёрдые, и более текучие среды. Сейчас это частично реализовано: температура влияет на склонность к образованию и разрыву связей, так что системы горячих частиц напоминают жидкость.
Вот сразу видно, что вы практикуете в этом направлении. Это решение у меня, действительно, реализовано. Хотя, я всё же уменьшил эту составляющую, потому что из-за неё энергия взрыва вместо того, чтоб разрушать землю, распространяется волной вглубь, а это не так зрелищно.
А моя оценка количествf частиц на GTX 1080 касалась не общего случая, а моей реализации. Специфика такова: чтобы кристалл удерживал форму, нужно повысить (в сравнении с моделированием жидкости) силы взаимодействия частиц, но встаёт проблема: погрешность дискретизации умножается на величину сил Поэтому, я сильно уменьшил шаг дискретизации. И за один Update() прогоняю 10 циклов симуляции с довольно маленьким шагом, чтоб сохранить быструю работу в реальном времени.
Не исключаю, что где-то я не дотянул с оптимизацией, но при прочих равных создаётся впечатление, что для моделирования жидких сред нужно в 5-10 раз меньше производительности на частицу, чем для твёрдых.
А «технично, но не очень красиво» — наверное, самая распространённая ситуация в инди-геймдеве, когда программист делает клёвые штуки, которые не впечатляют на вид. На форуме unity3d.com сейчас можно довольно легко привлечь энтузиастов-дизайнеров, если показать что-то техничное.
Насчёт Powder Toy — не знаю. Судя по динамике работы, эта однопоточная программа, но я могу ошибаться.
Игру уже выложил в гринлайт:
http://steamcommunity.com/sharedfiles/filedetails/?id=845215183
А более продвинутые методы могут сработать, я пока не пробовал. Если вместо величины поля в текущей точке использовать усреднённое значение по текущей и следующей (по вектору скорости), то можно уменьшить ошибку.
http://i.imgur.com/qcGOQgW.gif
А что до желейных войн, то я игру пока так и назвал, «Jelly in the sky». Но сегодня я чуть физику исправил, и теперь твёрдое выглядит чуть более твёрдым. Вот, можно посмотреть:
http://i.imgur.com/qcGOQgW.gif