Ищете .NET 3D Physics Engine, поддерживающий коллизии Mesh-Mesh

Я ищу физический движок, который может обрабатывать столкновения между произвольными треугольными сетками. Меня не особенно волнует производительность, симуляция не обязательно должна быть в реальном времени. Я хочу провести симуляцию примерно с 100-200 движущимися телами, в которых всего около 1 000 000 треугольников (сетки могут быть упрощены, если это окажется необходимым).

До сих пор я пробовал Jitter и BEPU. Я не смог заставить обнаружение столкновений работать надежно. Тела медленно погружаются друг в друга. Большинство других альтернатив (например, Henge3D, JigLibX) поддерживают только формы сетки для статических объектов или, когда они поддерживают динамические объекты столкновения сетки, они не допускают коллизий между объектами сетки.

Ответы (1)

(Разработчик BEPUphysics здесь)

DigitalRune или Matali могут делать то, что вы хотите. У меня нет прямого опыта работы с ними, но, насколько я знаю, они оба довольно полнофункциональны.

При этом BEPU и Jitter тоже должны работать. Если вы видите один и тот же сбой в обоих, вероятно, проблема заключается в предоставленной геометрии сетки или конфигурации моделирования, поскольку маловероятно, что оба движка имеют одинаковую ошибку.

С точки зрения BEPUphysics, согласно описанию, вероятными виновниками являются:

1) Несогласованная обмотка в треугольниках в сочетании с режимом одностороннего столкновения, в результате чего одни треугольники тянут, а другие толкают. Исправление: убедитесь, что все треугольники имеют одинаковую обмотку, а затем используйте режим одностороннего столкновения или Solid.

2) Двусторонние треугольники в сочетании с достаточно большим шагом движения по отношению ко времени, чтобы позволить треугольникам проникнуть в другую поверхность и застрять. Исправление: включите CCD (медленнее и не может гарантировать разделение во всех случаях) или переключитесь на Solid или последовательное одностороннее столкновение (предпочтительно).

3) Графика смещается от представления физики, вызывая кажущееся (но не фактическое) проникновение между объектами. Исправление: используйте ящик отладки, связанный с движком, чтобы проверить, правильно ли работает симуляция. Например, в BEPUphysicsDemos можно создать репрезентативный тест, чтобы использовать его ящик.

4) Проблемы с масштабированием симуляции. Если объекты очень большие или крошечные, встроенные пороги и коэффициенты настройки не будут идеальными. Исправление: используйте что-то вроде ConfigurationHelper.ApplyScale (в BEPUphysicsDemos), чтобы сообщить симуляции о желаемом масштабе.