Делаю в общем игру в которой объекты должны попиксельно уничтожаться.
Примерно так как в гифке из этого сообщения
Собсно делаю римейк той игры котору делал на конкурс в 2016 году, только лучше во всех отношениях.
Для детектинга столкновений между объектами заюзал bullet physics.
Соответственно когда столкновение детектится, я повреждаю пиксельную оболочку тела в месте удара.
Соответственно тест - тела движутся навстречу друг другу и сталкиваются (белым обрисована упрощённая конвексная оболочка корабля собсно для столкновений)
screenshot 1
Для оценки масштаба разрушений беру импульс столкновения
screenshot 2
Когда тела движутся навстречу друг другу со скоростью 800 пикселей в секунду, всё нормально - тела повреждаются и отлетают.
Когда повышаю до 1600 - тела всё ещё разлетаются при столкновениях, но не повреждаются.
А не повреждаются потому что bulletPhysics почемуто выдаёт нулевые импульсы при столкновениях. Тойсть переменная impulse из скрина выше нулевая для всех контакт поинтов.
Это кажется странным, потому что по факту тела столкнулись и разлетелись. Но импульс столкновения почемуто нулевой.
Возможно это важно - единицей измерения в bullet считаю пиксель, соотв-но размер тела в длину около 100 пикселей, а относительная скорость движения тел между собой 1600 пикселей.
Bullet physics работает с частотой 60 кадров в секунду, соответственно с такими скоростями тела за кадр проникнут друг в друга максимум на четверть длины тела (1600 * (1.0 \ 60)) = 25. Тойсть Continious Collision Detection по иее в таком случае не нужен.
Добавлено (19 Апреля 2020, 19:19)
---------------------------------------------
Делать пули и снаряды собираюсь отдельно и находить пересечения между корабликами и пулями рей трейсингом, тойсть для пуль проблема неактуальна
+ Допускаю введение искусственного ограничения максимальной скорости движения\вращения корабликов
Но хотелось бы понимать, в каких случаях возникают подобные глюки. Как зависит от размеров, от формы коллизии, от фреймтайма, ... А то ограничу скорость одним значением - настрою геймплей под него, а потом бац - проблема снова проявилась.
Объекты в игре гарантированно будут размера больше определённого. Тойсть если от тела остался маленький ошмёток - он заменится на частицы, и в физической симуляции участвовать не будет. Тойсть очень маленьких тел в игре не будет.Добавлено (19 Апреля 2020, 23:02)
---------------------------------------------
А нет, вру, похожу что буллет детектит коллизию, но ничерта не разлетается, объекты просто пролетают сквозь друг друга.
Это заметно если заставить буллет физикс симулировать с частотой кадров 15 а не 60 и соответственно в 4 раза уменьшить скорость объектов. Они тупо пролетают, коллизии при эжтом детектятся. С меньшими скоростями опять же всё хорошо.