Батч 2. Мир не переезжает в Rapier целиком: геометрия карты остаётся брашевой, Rapier обслуживает только динамические тела. Четыре дефекта найдены измерением на gm_construct, а не догадкой — каждый следующий был невидим, пока не закрыт предыдущий: 1. Рельеф раздувался в 15 277 коллайдеров (сетка LAND_CELL дублировала каждый треугольник в каждую ячейку). Заменено одним объединённым trimesh с дедупликацией вершин: 11 776 треугольников -> 6 148 вершин, 1 коллайдер. Точнее и на порядки дешевле. 2. Уровень gm_construct построен брашами, а не displacement'ами: без них все пропы падали насквозь. add_brushes восстанавливает вершины перебором троек плоскостей (Крамер). Замер: 2121 построен, 5 пропущено. 3. Broad-phase Rapier наполняется только на step(): после вставки статики луч её не видел. Лечится явным broad_phase.set_aabb(). 4. setup_physics начинался с PhysicsWorld::new() и стирал построенные браши. Тест поймал баг, который замер бы не увидел: add_brushes создавал коллайдеры, но не увеличивал счётчик, и лог врал (static = 1 при 2121 браше). Проверка двумя независимыми системами коллизий: и Rapier, и брашевая Collision находят пол под пропами на z = -96. После 400 кадров все 4 prop_physics осели: speed = 0.0, sleeping = true. Ограничения зафиксированы в docs/PARITY.md: коллайдер пропа — AABB модели, а не vcollide; физика только у prop_physics*; FPS просел до 10-21 и требует отдельного замера. Тестов 55 в engine (было 42), 23 набора по воркспейсу, clippy чист.
15 lines
294 B
TOML
15 lines
294 B
TOML
[package]
|
|
name = "engine"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
rust-version.workspace = true
|
|
|
|
[dependencies]
|
|
fs.workspace = true
|
|
formats.workspace = true
|
|
math.workspace = true
|
|
rapier3d.workspace = true
|
|
|
|
bytemuck.workspace = true
|
|
thiserror.workspace = true
|
|
tracing.workspace = true
|