gmod-rs/crates/render/src
Niko Marmeladkov 4da3289180 render/engine: отсечение задних граней с нормализацией намотки
A4 из docs/PARITY.md. Раньше cull_mode был None во всех пайплайнах, и
изнанка брашей рисовалась поверх настоящих поверхностей (на gm_construct
трава была видна сквозь бетонную плиту).

Намотку нельзя задать «как в карте»: в данных она непоследовательна.
Замер на gm_construct показал, что у обычных граней и у displacement'ов
противоположный порядок обхода, а нормаль плоскости у них трактуется
с разным знаком. Поэтому:

- face_normal: нормаль плоскости смотрит внутрь тела, лицевая сторона —
  обратная (side == 0 => -normal);
- face_winding: геометрическая нормаль каждой грани приводится к нормали
  грани, треугольник разворачивается при несовпадении;
- build_displacement: то же для рельефа, причём «наружу» — это нормаль
  БАЗОВОЙ плоскости (на склонах геометрическая нормаль наклонная).

После этого инвариант «геометрическая нормаль = нормаль освещения» держится
везде, и правильная фронт-грань одна: Ccw в NDC, то есть Cw в wgpu/Vulkan
(Source использует левую систему координат).

Проверено рендерами на gm_construct: рельеф виден сверху целиком, плита и
трава вместе, трава корректно перекрыта плитой. Диагностические флаги
SOURCE_RS_NO_CULL и SOURCE_RS_FRONT_FACE=ccw оставлены для сверки.
2026-10-12 17:12:40 +03:00
..
gfx.rs engine/render: M3 v0 — рендер мира BSP со скайбоксом 2026-10-12 00:06:26 +03:00
lib.rs render/client: HUD и 2D-текст (bitmap-шрифт 8x8), фикс capture-прохода 2026-10-12 04:12:34 +03:00
sky.wgsl engine/render: модели энтити (prop_static/prop_dynamic/prop_physics) и 3D-скайбокс 2026-10-12 02:42:12 +03:00
sky_mesh.wgsl render: вода (SURF_WARP), area-скайбокс с правильным порядком глубины, лайтмапы диспов по UV 2026-10-12 08:28:28 +03:00
text.rs render/client: HUD и 2D-текст (bitmap-шрифт 8x8), фикс capture-прохода 2026-10-12 04:12:34 +03:00
text.wgsl render/client: HUD и 2D-текст (bitmap-шрифт 8x8), фикс capture-прохода 2026-10-12 04:12:34 +03:00
texture.rs engine/render: M3 v0 — рендер мира BSP со скайбоксом 2026-10-12 00:06:26 +03:00
water.wgsl render: вода (SURF_WARP), area-скайбокс с правильным порядком глубины, лайтмапы диспов по UV 2026-10-12 08:28:28 +03:00
world.wgsl engine/render: M3 v0 — рендер мира BSP со скайбоксом 2026-10-12 00:06:26 +03:00
world_renderer.rs render/engine: отсечение задних граней с нормализацией намотки 2026-10-12 17:12:40 +03:00