LINUX.ORG.RU

Динамическая деформация геометрии


0

3

Как можно реализовать в «Bullet physic engine» динамическую деформацию геометрии в реальном времени? Интересуют методы, но если есть примеры, то еще лучше. Имею ввиду деформацию кузова автомобиля, как в известном ролике http://youtu.be/KppTmsNFneg, но там soft-body, а soft-body у меня так и не получилось сделать металлом, который бы не возвращался к исходной форме после деформации.

Читал, что есть некий метод, на основе каких-то «простых» стержней, но подробностей метода найти не удалось. Смог найти методы, подходящие только для научных/индустриальных тестов, в играх же не применимы, так как требуют больших вычислений. Нужно что-то простое, такие методы есть, только я понятия не имею, как они называются. В играх с подобными эффектами конечно же не говорят, каким методом они делали динамические деформации.

P.S Нужны методы именно динамической деформации, а не подмена геометрии, анимация.



Последнее исправление: raycast (всего исправлений: 3)

судя по ролику (!Ъ!), там используются заранее подготовленные анимации классических аварий.

а просчёт самой физики такой: используется несколько сегментов (скажем, 6, если нам нужно только в плоскости параллельной шасси), которые (если их нарисовать схематично) будут представлять некую аппроксимацию кузова автомобиля кубами размера, скажем, ~1/10 от оригинального. все они сочленены с ближайшими соседями ограничителями, которые не меняют ориентации, а меняют лишь расстояние от двух кубов, причём только под нагрузкой и в сторону сужения.

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

это про сами аварии. не трудно додумать и остальную динамику.

jeuta ★★★★
()
Ответ на: комментарий от jeuta

Нет, в ролике именно soft-body, а не заранее подготовленные анимации, хорошо видно на 34 секунде (http://www.youtube.com/watch?v=KppTmsNFneg&feature=player_detailpage#t=34s), у капота изгиб точно от стены остался, были бы анимации, следа от угла стены не было бы, или был, но не точно там где должен быть. В «Rigs of Rods» аналогично сделано.

raycast
() автор топика

Может быть какая-нибудь разновидность Skinned Mesh. Добавить внутри модели несколько опорных точек и привязать к ним вершины. При столкновении сдвигать опорные точки, и получать неровности.

Onni
()

Создать динамический буфер вершин в OpenGL, в реальном времени при помощи CUDA пересчитывать положение нужных вершин в соответствии с деформацией, «автоматически» на картинке это будет отражаться. В примерах CUDA есть такое (для пульсирующей синусоиды, а еще — «морские волны»).

P.S. Пересчитывать все точки необязательно: можно выбрать десяток-другой базовых точек, а промежуточные просто интерполировать. Сплайнами, например.

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 1)

А насколько сложный объект предполагается деформировать, и будет ли нарушаться его топология (скажем будут ли появляться дыры в бортах, отлетать какие то куски и т.д.)?

Динамическая деформация геометрии

Вы мне парсер сломали... От евклидовой к ляпуновской что ли?

AIv ★★★★★
()
Ответ на: комментарий от Onni

Может быть какая-нибудь разновидность Skinned Mesh. Добавить внутри модели несколько опорных...


Проблема не в деформации меша, меш-то я найду способ как придать ему форму в соответствии физической модели; можно да, b-сплайном например.

Создать динамический буфер вершин в OpenGL, в реальном времени при помощи CUDA...


Аналогично предыдущему, как меш деформировать мне более-менее ясно. Мне не ясно как создать именно физ-модель деформируемую, все что есть у Bullet, это сочленения с разными степенями свободы и стандартные тела. Нужно написать новый вид сочленения, который меняет положение тела только под нагрузкой превышающий некий предел и имеет сопротивление/упругость, но не старается возвратить тело в старую позицию, то есть, сопротивление начинает действовать только в момент столкновения одного из скрепляемых тел. < Это как я себе представляю, наверняка есть что-то лучше/умнее.

А насколько сложный объект предполагается деформировать, и будет ли нарушаться его топология (скажем будут ли появляться дыры в бортах, отлетать какие то куски и т.д.)?


Имеете ввиду меш? Если меш, то примерно до 10 тысяч полигонов на машину (она и будет деформироваться). Нет, дыр не будет, будут отдельные куски, которые могут отлетать, но к деформации это не имеет отношения. Деформируемым будет только меш кузова автомобиля.

Если же вы говорили о физ-модели, то физ-модель естественно будет упрощенной.

Вы мне парсер сломали... От евклидовой к ляпуновской что ли?


Пот геометрией имел ввиду меш.

raycast
() автор топика
Ответ на: комментарий от Eddy_Em

Сопромат выучить?

Ну да, например так :)

raycast
() автор топика
Ответ на: комментарий от raycast

Ну так если считать что связи между узлами сделаны из идеально-пластичного материала то все само получится. У каждого сочленения есть два параметра - деформация х и длина в ненагруженном состоянии l. Пока нагрузка меньше F_cr работает закон Гука, т.е. меняется x, при превышении F_cr сила обрезается сверху по F_cr и меняется l. Как меняется l - отдельный вопрос, если есть скорости-ускорения то скажем что то типа вязкого трения можно ввести, иначе все 33 удовольствия с неявной схемой и решением СЛАУ. Длина связи под нагрузкой x+l.

Насколько это будет приятно реализовывать/быстро считаться отдельный вопрос. Я бы задавал кузов в виде параметризованной функции которая может морщиться (задавал для узлов сценарий складывания).

Пот геометрией имел ввиду меш.

Тогда уже что то вроде «Моделирование деформации конструкций в играх». Или хотя бы геометрии чего деформация в заголовке то надо сказать;-)

PS Только с топологией Вы зря... возможны ситуации, когда складка одной стенки продавливается через другую стенку, и отслеживать такие события тот еще геморрой.

AIv ★★★★★
()
Последнее исправление: AIv (всего исправлений: 1)
Ответ на: комментарий от AIv

Я бы задавал кузов в виде параметризованной функции которая может морщиться (задавал для узлов сценарий складывания).

Что-то вроде "FFD" (В самом низу), только посложнее?

raycast
() автор топика
Ответ на: комментарий от raycast

Забавный вариант... я не специалист в этой области, но выглядит довольно здраво (если я правильно понял при беглом просмотре). В общем если я неправильно понял - я понял так, задаем координаты точек кузова в некоторой системе координат, тогда деформацию кузова рассматриваем как «деформацию» системы координат. Это наверное самое дешевое и простое решение (мне проще в голову не приходит).

AIv ★★★★★
()
Ответ на: комментарий от AIv

тогда деформацию кузова рассматриваем как «деформацию» системы координат.

Верно, вообще FFD сейчас используется не столько в играх, сколько в 3D моделировании, как один из видов модификаторов. Деформация(вернее передвижение) точек приводит к дуго-образной деформации меша, одной из разновидностей сплайна. Гхм, я сам точно не знаю, пишу исходя из просмотра демо той програмки.

raycast
() автор топика
Ответ на: комментарий от AIv

Вот кстати подтверждение, моделеры тащатся от данного модификатора http://www.3dmir.ru/cgwiki/word/45.html

Только что бы получить деформацию кузова, точек необходимо как минимум в 6 раз больше чем в той демо, иначе получаем лишь болтание «сосиски» а не деформации :)

raycast
() автор топика
Ответ на: комментарий от raycast

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

AIv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.