Найти в Дзене

Как создать деформации сетки в Unity — решение в 30 строках кода

https://80.lv/articles/neat-way-to-create-simple-mesh-deformations-in-unity Разработчик Tomaso продемонстрировал простой способ создания деформаций сетки в Unity — объекты оставляют видимые вмятины с помощью смещения вершин при ударе и плавного снижения влияния. Деформация рассчитывается вне основного потока и применяется после завершения вычислений, что обеспечивает по словам автора высокую скорость и масштабируемость даже для больших сцен и множества жёстких тел и столкновений. Код можно найти на GitHub, там же есть другие интересные инструменты, например, для физики верёвок и тканей. А теперь по факту. Решение неплохое, а репозиторий в целом любопытный, там помимо Light реализаций, есть реализация с компьют шейдерами. Симпатично, но есть несколько нюансов. И первое что бросается в Light версии: Vector3[] baseVerts = (Vector3[]) deformedVertices.Clone(); Легкая реализация, отдельный поток ускоряет, но при каждой деформации мы в память выделяем массив вертексов 🙂 План надежный ка

Как создать деформации сетки в Unity — решение в 30 строках кода

https://80.lv/articles/neat-way-to-create-simple-mesh-deformations-in-unity

Разработчик Tomaso продемонстрировал простой способ создания деформаций сетки в Unity — объекты оставляют видимые вмятины с помощью смещения вершин при ударе и плавного снижения влияния. Деформация рассчитывается вне основного потока и применяется после завершения вычислений, что обеспечивает по словам автора высокую скорость и масштабируемость даже для больших сцен и множества жёстких тел и столкновений. Код можно найти на GitHub, там же есть другие интересные инструменты, например, для физики верёвок и тканей.

А теперь по факту. Решение неплохое, а репозиторий в целом любопытный, там помимо Light реализаций, есть реализация с компьют шейдерами. Симпатично, но есть несколько нюансов. И первое что бросается в Light версии:

Vector3[] baseVerts = (Vector3[]) deformedVertices.Clone();

Легкая реализация, отдельный поток ускоряет, но при каждой деформации мы в память выделяем массив вертексов 🙂 План надежный как швейцарские часы 🙂 Мне кажется тогда уж если морочиться с этой задачей лучше использовать либо unsafe, либо Span и джобы)

Ладно, допустим. Почему я когда-то бросил эту задачу и о чём не говорится в этой задаче? Ретопология. Тут же смещением вертексов эффект делается, а что если ваша геометрия это квад? Там нужно автоматически в точке применения силы перестраивать сетку. И вот это на самом деле дорого. Когда я делал порт Triangle.Net 4 года назад, я решал именно задачу деформаций. И прикол в том, что в реалтайме укрупнять сетку для деформаций довольно дорого. Поэтому все эти симуляции чуть чуть упускают контекст что геометрия у вас должна быть специфичной.

Не, если что репозиторий крутой и стоит поковырять, и автор молодец, достаточно хороший подход. Можно полезное почерпнуть, а в компьюте можно было бы усложить уравнение из идей метода конечных элементов и получить достаточно достоверную деформацию. Но что касается производительности, просто обратите внимание на память. И если разбираться будет лень, попросите нейросеть переписать блок с клонированием на zero-allocation вид. Думаю она справится. А в реальном применении вам ещё понадобится либо замучать кнопку subdivision в моделлерском софте, либо иметь под рукой алгоритм динамической ретопологии сетки.

#новости