Это общий ответ для большинства движков 3D Physincs, вы можете использовать одно или оба из этих решений:
1-) Твердый объект должен иметь возможность устанавливать неактивное состояние, тогда двигатель не будет выполнять никаких физических вычислений для него до его первого столкновения с любым другим объектом.
2-) Использование прокси-объектов: видимые объекты не обязательно должны совпадать с физическими объектами. Вы можете использовать прокси-объект, немного уменьшенный внутри визуального объекта, чтобы заполнить пространство между столкновениями.
То, что пустое пространство между сталкивающимися объектами не является ошибкой, необходимо для производительности при выполнении вычислений обнаружения столкновений. Движок должен позволять вам изменять это значение, если вы установите слишком маленькое значение, могут возникнуть проблемы с производительностью и даже неправильное поведение, например, объекты пересекают друг друга.
Этот ответ основан на опыте использования того же движка Havok в 3ds Max.