gmod-rs/crates/client
Niko Marmeladkov 1cb836d4c9 engine: физика на Rapier3D — пропы падают, сталкиваются и засыпают
Батч 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 чист.
2026-10-13 12:36:51 +03:00
..
src engine: физика на Rapier3D — пропы падают, сталкиваются и засыпают 2026-10-13 12:36:51 +03:00
Cargo.toml lua: рантайм LuaJIT с GMod-подобным API и автозагрузкой клиентских аддонов 2026-10-12 04:29:09 +03:00