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