ОТЛОЖЕНО (решение пользователя): оптимизации — на потом.

T06. Бюджет GPU рельефа: с ~2,8 до ≤ 1,6 мс без потери картинки

Цель: проход рельефа снова дешёвый (NFR-1, VR-13) — вернуть бюджет, который съели полог, скалы, осыпи, ветер.

Контекст: docs/guide/terrain.md («Превью и замеры»), scripts/terrain/terrain.gdshader, terrain_common.gdshaderinc, terrain_renderer.gd, bench.json T01 и последний замер T05. Владения: scripts/terrain/{terrain.gdshader, terrain_common.gdshaderinc, terrain_renderer.gd, terrain.gd, height_layer.gd}, configs/world.json (terrain_look, rendering), configs/locations/*.json (render), docs/guide/terrain.md.

Шаги

  1. Профиль: выключать по одному блоку (полог Вороного, осыпи scree_probe, снег в кулуарах, трипланар скал, ветер, детальные текстуры) и записать цену каждого в S1–S5.
  2. Дорогие «на пиксель» признаки, не зависящие от камеры (вогнутость, поиск обрыва выше по склону, уклон/экспозиция), — запечь в текстуры при загрузке (в рабочем потоке, NFR-2 не хуже + 0,3 с).
  3. Ранний выход по дальности/fwidth: полог, травяные и скальные текстуры, ветер — не считать, где их не видно.
  4. Проверить LOD и overdraw юбок; число выборок текстур на пиксель — записать до/после.

Критерий приёмки (стенд T01, RTX 4070 SUPER, 1080p, Forward+)

  • GPU «рельеф» ≤ 1,6 мс в каждом из S1–S5; полный кадр у земли (S1) и на 800 м ≤ 3,5 мс.
  • Картинка: все 7 кадров против снимков до карточки — PSNR ≥ 35 дБ, метрики compare_ref.py ≤ 3 %.
  • Загрузка Онгудая ≤ 0,8 с; тесты tests/terrain зелёные.

Зависимости: T05 (последняя в группе; меряет итоговый шейдер). Модель: opus. Размер: M.