[enhancement] Отдельный RT-пресет из этапа 10 HD-плана: тени и отражения, затем GI #125

Open
opened 2026-11-05 21:29:06 +00:00 by chexit · 0 comments
Owner

🤖 Filed by Codex, AI-агент Владимира (chexit).

Запрос владельца: вынести последний этап первоначального HD-плана в самостоятельную задачу. Исследован AirDef 61aaa0bf359026711ba811a7f7e9877ce253ead2, engine 278f356aa604fa21c2d15d0081823bbe0f891df2, wgpu30.0.1, 5–6 ноября 2026. Работа пока проектная: RT-кадр и GPU-бенчмарк на RTX3060/M5 не выполнялись.

Исходный пункт найден

Этап10 введён 65dd84646a1ebbc6859dc33fb6c83ffe9fa617e3, Claude Opus5.5, сохранён в текущем HD-RENDERER:263: отдельный RT preset, wgpu ray-query, BLAS по секциям, сначала тени/отражения, затем GI; HD остаётся.

Это основание для отдельного необязательного гибридного RT-режима, а не обещание полного path tracing или замена стабильного HD. RT не является способом исправить нынешние CPU-микрофризы; сначала общий performance audit и общие scene/motion/material контракты.

Реальная техническая возможность и первый проверяемый результат

В engine gfx.rs:1007–1031 RT features/experimental opt-in не запрашиваются, интеграции BLAS/TLAS/ray_query в клиенте нет. Инфраструктура HD полезна, но сама по себе не означает готовый RT.

Важно не перепутать документацию и реализацию: страница Features wgpu30.0.1 перечисляет Vulkan-only для EXPERIMENTAL_RAY_QUERY, но опубликованный wgpu-hal30.0.1 содержит выставление ray-query capability и реализации acceleration structures также для Metal/DX12. Проверено чтением первичного пакета зависимости (без переноса чужого renderer code):

  • Metal adapter: feature выставляется по supports_raytracing (строка1326 пакета).
  • DX12 adapter: RaytracingTier>=1.1, подходящий shader model и capabilities (строки611–619).
  • Vulkan adapter: negotiation acceleration structures/buffer address/ray queries.

Поэтому нельзя заранее объявлять «через wgpu возможен только Vulkan» или обещать каждую платформу по названию GPU. Начать с маленького native probe на точном pin: OS/adapter/backend/driver, actual features, создание AS и успешный ray-query кадр. Проверить RTX3060 на Vulkan/DX12 и M5 на Metal по фактическим caps. Unsupported путь сохраняет HD и объясняет причину. Experimental opt-in сделать осознанным, не обязательным для обычного запуска; зафиксировать ограничения/ошибки выбранной версии wgpu.

Архитектура

  1. Сцена RT с версиями. BLAS на неизменяемую геометрию секций. Изменение блоков/взрыв/ремеш/выгрузка инвалидируют только соответствующие версии; устаревший job не возвращает удалённую секцию. CPU preparation и GPU AS builds — разные этапы, с bounded queues и бюджетом, без синхронной пересборки мира на каждом кадре.
  2. Движущиеся модели. Геометрия ассета/части машины переиспользует BLAS, а TLAS содержит instances и transforms. Поворот/движение не должны требовать повторного CPU-bake всех треугольников. Окклюдеры/отражаемые объекты вне текущего frustum также могут быть нужны лучам: RT-сцену не строить только из списка видимых raster draws.
  3. Первый эффект — тени/отражения. Primary visibility остаётся raster. Начать с ray-query видимости/теней согласованного набора источников; затем отражения с fallback. Материалы, тонкие/неполные блоки, alpha-tested листва, стекло/вода, emissive факелы и динамические модели трактуются явно. Воксельный occupancy боевой коллизии не заменяет окончательную render-геометрию. Объёмный дым — самостоятельное представление.
  4. Денойзинг и история. Нужны настоящие object motion vectors, depth/normal/material/instance validation и rejection disocclusion. Текущая camera-only TAA для этого недостаточна. Общий motion/history контракт связан с #124. Собственный/общий denoiser не равен NVIDIA Ray Reconstruction; RT не должен зависеть от наличия NVIDIA GPU.
  5. GI отдельным последующим шагом. До накопления энергии определить linear-radiance контракт: hd/mod.rs:38 сейчас прямо описывает gamma/display-space Rec709 внутри HDR float targets. Нельзя считать этот сигнал физической линейной радиансой только потому, что формат Rgba16Float. Ограниченное число отражений/GI добавлять после корректности базовых эффектов, с отдельным профилем стоимости.
  6. Профилирование и стабильность. AS preparation/build/update, traversal, denoiser, CPU/GPU total, VRAM и очередь dirty sections — отдельные метрики. Взрывы и массовое движение не создают неограниченные rebuild spikes. AS resources живут до завершения GPU использования; без принудительного CPU/GPU ожидания каждый кадр.

Live/replay/export

Render-RT не меняет авторитетную геометрию боевой симуляции и RNG. Live и историческая геометрия имеют разные versions/snapshots; seek/смена камеры/мира/разрешения сбрасывают только свою историю и не загрязняют другие views. Синхронизировать reset с material/resource reload. Для MP4 — фиксированное render time и явный warm-up после cut; FG не вмешивается в детерминированный экспорт незаметно. Ошибка/отмена/переключение HD↔RT не оставляют GPU/history leaks.

Приёмка

  • Настоящий AS/query probe на каждой заявленной платформе; отказ на unsupported adapter проверен отдельно. Hardware branding не заменяет тест.
  • Парные HD/RT кадры одной сцены: день/ночь, металл/вода/листва, взрыв стены, движущиеся и вращающиеся модели, offscreen reflections, дым/огонь. Корректность material/occlusion важнее одного эффектного скриншота.
  • Idle, обычный и два перекрывающихся максимальных налёта при фиксированном разрешении/seed: p50/p95/p99 CPU/GPU frame time, VRAM/AS memory, rebuild queues, shader/pipeline first-use hitches. Конкретный целевой бюджет согласовать по измерениям, не обещать60FPS заранее.
  • Одинаковые inputs/seed дают одинаковые combat outcomes и порядок simulation events с RT on/off. Replay seek, world unload, resource reload и failed export не смешивают данные.
  • В документации отдельно отмечено, что реально работает: тени, отражения, GI и поддержанные backend-ы. Off/on/HD сохранены; полный path tracing не считается неявной частью этой задачи.

Первичные API-материалы

wgpu ExperimentalFeatures, BLAS/TLAS, Vulkan ray query, Vulkan acceleration structures, Apple supportsRaytracing, Apple GPU capabilities. Сверять документацию с закреплённым backend и реальным probe: experimental API и поддержка меняются.

Связано: #124 (motion/upscaling), #88/#89 (scene/lifecycle), #105 (live/history), #123 (динамические normals), отдельный глобальный performance audit. Реализация в engine fork; AirDef хранит exact gitlink и настройки, а не копию RT-рендерера в WASM.

🤖 Filed by Codex, AI-агент Владимира (chexit). Запрос владельца: вынести последний этап первоначального HD-плана в самостоятельную задачу. Исследован AirDef `61aaa0bf359026711ba811a7f7e9877ce253ead2`, engine `278f356aa604fa21c2d15d0081823bbe0f891df2`, wgpu30.0.1, 5–6 ноября 2026. Работа пока проектная: RT-кадр и GPU-бенчмарк на RTX3060/M5 не выполнялись. ### Исходный пункт найден Этап10 введён [65dd84646a1ebbc6859dc33fb6c83ffe9fa617e3, Claude Opus5.5](https://gitea.maoniao.team/chexit/airdef/src/commit/65dd84646a1ebbc6859dc33fb6c83ffe9fa617e3/docs/HD-RENDERER.md), сохранён в [текущем HD-RENDERER:263](https://gitea.maoniao.team/chexit/airdef/src/commit/61aaa0bf359026711ba811a7f7e9877ce253ead2/docs/HD-RENDERER.md#L263): отдельный RT preset, wgpu ray-query, BLAS по секциям, сначала тени/отражения, затем GI; HD остаётся. Это основание для **отдельного необязательного гибридного RT-режима**, а не обещание полного path tracing или замена стабильного HD. RT не является способом исправить нынешние CPU-микрофризы; сначала общий performance audit и общие scene/motion/material контракты. ### Реальная техническая возможность и первый проверяемый результат В engine gfx.rs:1007–1031 RT features/experimental opt-in не запрашиваются, интеграции BLAS/TLAS/ray_query в клиенте нет. Инфраструктура HD полезна, но сама по себе не означает готовый RT. Важно не перепутать документацию и реализацию: страница Features wgpu30.0.1 перечисляет Vulkan-only для EXPERIMENTAL_RAY_QUERY, но опубликованный **wgpu-hal30.0.1** содержит выставление ray-query capability и реализации acceleration structures также для Metal/DX12. Проверено чтением первичного пакета зависимости (без переноса чужого renderer code): - [Metal adapter](https://docs.rs/crate/wgpu-hal/30.0.1/source/src/metal/adapter.rs): feature выставляется по supports_raytracing (строка1326 пакета). - [DX12 adapter](https://docs.rs/crate/wgpu-hal/30.0.1/source/src/dx12/adapter.rs): RaytracingTier>=1.1, подходящий shader model и capabilities (строки611–619). - [Vulkan adapter](https://docs.rs/crate/wgpu-hal/30.0.1/source/src/vulkan/adapter.rs): negotiation acceleration structures/buffer address/ray queries. Поэтому нельзя заранее объявлять «через wgpu возможен только Vulkan» или обещать каждую платформу по названию GPU. Начать с маленького native probe на точном pin: OS/adapter/backend/driver, actual features, создание AS и успешный ray-query кадр. Проверить RTX3060 на Vulkan/DX12 и M5 на Metal по фактическим caps. Unsupported путь сохраняет HD и объясняет причину. Experimental opt-in сделать осознанным, не обязательным для обычного запуска; зафиксировать ограничения/ошибки выбранной версии wgpu. ### Архитектура 1. **Сцена RT с версиями.** BLAS на неизменяемую геометрию секций. Изменение блоков/взрыв/ремеш/выгрузка инвалидируют только соответствующие версии; устаревший job не возвращает удалённую секцию. CPU preparation и GPU AS builds — разные этапы, с bounded queues и бюджетом, без синхронной пересборки мира на каждом кадре. 2. **Движущиеся модели.** Геометрия ассета/части машины переиспользует BLAS, а TLAS содержит instances и transforms. Поворот/движение не должны требовать повторного CPU-bake всех треугольников. Окклюдеры/отражаемые объекты вне текущего frustum также могут быть нужны лучам: RT-сцену не строить только из списка видимых raster draws. 3. **Первый эффект — тени/отражения.** Primary visibility остаётся raster. Начать с ray-query видимости/теней согласованного набора источников; затем отражения с fallback. Материалы, тонкие/неполные блоки, alpha-tested листва, стекло/вода, emissive факелы и динамические модели трактуются явно. Воксельный occupancy боевой коллизии не заменяет окончательную render-геометрию. Объёмный дым — самостоятельное представление. 4. **Денойзинг и история.** Нужны настоящие object motion vectors, depth/normal/material/instance validation и rejection disocclusion. Текущая camera-only TAA для этого недостаточна. Общий motion/history контракт связан с #124. Собственный/общий denoiser не равен NVIDIA Ray Reconstruction; RT не должен зависеть от наличия NVIDIA GPU. 5. **GI отдельным последующим шагом.** До накопления энергии определить linear-radiance контракт: [hd/mod.rs:38](https://gitea.maoniao.team/chexit/horizon-airdef/src/commit/278f356aa604fa21c2d15d0081823bbe0f891df2/crates/horizon-client/src/gfx/hd/mod.rs#L38) сейчас прямо описывает gamma/display-space Rec709 внутри HDR float targets. Нельзя считать этот сигнал физической линейной радиансой только потому, что формат Rgba16Float. Ограниченное число отражений/GI добавлять после корректности базовых эффектов, с отдельным профилем стоимости. 6. **Профилирование и стабильность.** AS preparation/build/update, traversal, denoiser, CPU/GPU total, VRAM и очередь dirty sections — отдельные метрики. Взрывы и массовое движение не создают неограниченные rebuild spikes. AS resources живут до завершения GPU использования; без принудительного CPU/GPU ожидания каждый кадр. ### Live/replay/export Render-RT не меняет авторитетную геометрию боевой симуляции и RNG. Live и историческая геометрия имеют разные versions/snapshots; seek/смена камеры/мира/разрешения сбрасывают только свою историю и не загрязняют другие views. Синхронизировать reset с material/resource reload. Для MP4 — фиксированное render time и явный warm-up после cut; FG не вмешивается в детерминированный экспорт незаметно. Ошибка/отмена/переключение HD↔RT не оставляют GPU/history leaks. ### Приёмка - Настоящий AS/query probe на каждой заявленной платформе; отказ на unsupported adapter проверен отдельно. Hardware branding не заменяет тест. - Парные HD/RT кадры одной сцены: день/ночь, металл/вода/листва, взрыв стены, движущиеся и вращающиеся модели, offscreen reflections, дым/огонь. Корректность material/occlusion важнее одного эффектного скриншота. - Idle, обычный и два перекрывающихся максимальных налёта при фиксированном разрешении/seed: p50/p95/p99 CPU/GPU frame time, VRAM/AS memory, rebuild queues, shader/pipeline first-use hitches. Конкретный целевой бюджет согласовать по измерениям, не обещать60FPS заранее. - Одинаковые inputs/seed дают одинаковые combat outcomes и порядок simulation events с RT on/off. Replay seek, world unload, resource reload и failed export не смешивают данные. - В документации отдельно отмечено, что реально работает: тени, отражения, GI и поддержанные backend-ы. Off/on/HD сохранены; полный path tracing не считается неявной частью этой задачи. ### Первичные API-материалы [wgpu ExperimentalFeatures](https://docs.rs/wgpu/30.0.1/wgpu/struct.ExperimentalFeatures.html), [BLAS/TLAS](https://docs.rs/wgpu/30.0.1/wgpu/struct.Blas.html), [Vulkan ray query](https://docs.vulkan.org/refpages/latest/refpages/source/VK_KHR_ray_query.html), [Vulkan acceleration structures](https://docs.vulkan.org/refpages/latest/refpages/source/VK_KHR_acceleration_structure.html), [Apple supportsRaytracing](https://developer.apple.com/documentation/metal/mtldevice/supportsraytracing), [Apple GPU capabilities](https://developer.apple.com/metal/capabilities/). Сверять документацию с закреплённым backend и реальным probe: experimental API и поддержка меняются. Связано: #124 (motion/upscaling), #88/#89 (scene/lifecycle), #105 (live/history), #123 (динамические normals), отдельный глобальный performance audit. Реализация в engine fork; AirDef хранит exact gitlink и настройки, а не копию RT-рендерера в WASM.
chexit added the area:architecturearea:renderingtype:enhancementpriority:P2 labels 2026-11-05 21:29:06 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chexit/airdef#125