[enhancement] DLSS / FSR3 / MetalFX: общий temporal-upscaling backend и отдельная генерация кадров #124

Open
opened 2026-11-05 21:27:25 +00:00 by chexit · 2 comments
Owner

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

Исследование 5–6 ноября 2026. AirDef 61aaa0bf359026711ba811a7f7e9877ce253ead2, Horizon 278f356aa604fa21c2d15d0081823bbe0f891df2, wgpu 30.0.1. Запрос владельца: поддержать DLSS, FSR3 и MetalFX в одной поставке. Это отдельная работа в нативном рендерере, не shader мода. Интеграция технически обоснована; готового рабочего Horizon proof-of-concept и замеров на RTX 3060/M5 пока нет.

Что поддерживать

Один выбранный temporal upscaler на кадр, общий интерфейс и native TAAU fallback; не цепочка из трёх апскейлеров. Upscaling, frame generation и ray reconstruction — разные возможности, с отдельными capability flags и этапами. RTX 3060 должен получить DLSS Super Resolution и/или аналитический FSR3; Apple Silicon — MetalFX при подтверждённых OS/device capabilities.

Вариант Реальный путь Ограничения
DLSS SR Native NGX/Vulkan; изучить документированный dlss_wgpu 6.0.0 для wgpu30/DLSS310.9.1 Windows/Linux Vulkan описаны wrapper-ом; SDK отдельно. Не автоматически DX12/Metal и не готовая FG интеграция. RTX3060 не поддерживает NVIDIA Frame Generation.
FSR3.1 upscale Аналитический cross-vendor вариант на Vulkan/DX12 Выбрать и закрепить SDK: legacy FidelityFX1.1.x с исходниками или актуальный FSR SDK2.4. У нового SDK есть Vulkan-путь и аналитические fallback; его бинарная Windows-поставка и лицензии не тождественны старому MIT-source. Не обещать FSR4 на3060 или native Metal.
MetalFX temporal Apple framework + native Metal/wgpu-hal interop Проверять версию ОС и supportsDevice; наличие Apple GPU само по себе не подтверждает каждый режим.
Генерация кадров Отдельная последующая фаза FSR3 FG/MetalFX interpolation Нужны UI/presentation/frame-pacing интеграция; для NVIDIA FG ещё и подходящее железо. Нельзя выдавать presented FPS за частоту симуляции.

Текущее состояние движка: недостающий общий фундамент

  • GBuffer имеет albedo/normal/light levels/depth, но нет dense motion-vector target. В terrain/entity shaders нет корректного previous-transform output движущихся объектов.
  • Текущая TAA восстанавливает историю по depth/камере. Этого недостаточно для ракет, вращающихся частей машин и ветра.
  • Контракт цвета: промежуточный Rgba16Float содержит gamma/display-space Rec709 с величинами выше1. Формат float не делает его linear HDR. Нужна явная согласованная граница преобразований для каждого SDK, exposure и тонмаппинга.
  • Создание device уже использует специальный Vulkan HDR opener. Нужные NGX расширения/возможности должны составляться с ним, а не заменять его несовместимым bootstrap.
  • В HD-плане фраза «DLSS нереален, нет в wgpu» устарела: опубликован документированный wrapper под текущий major wgpu. Обновить текст по фактическому выбранному пути.

План реализации

  1. Общий контракт входов: render/output resolutions, reversed-Z, jitter, color/exposure, reactive/transparency masks. Motion от предыдущего отрисованного кадра, включая артикулированные части, spawn/despawn, листву/ветер и camera-relative origin. Debug views для проверки направлений/масштаба векторов. Огонь/дым/вспышки/вода требуют явной политики реактивности, а не попытки угадать всё только по depth.
  2. Общая абстракция Native/FSR/DLSS/MetalFX и Auto. Выбор по adapter/backend/OS/driver/наличию runtime SDK, понятная причина недоступности и безопасный fallback. Состояние каждого view независимо; reset на resize, cut, seek, teleport, world/resource reload. Долгоживущие контексты; не создавать SDK/scaler и GPU ресурсы заново каждый кадр.
  3. Сначала upscale-only пилоты на общей фиксированной сцене: DLSS SR Vulkan, FSR3.1 Vulkan, MetalFX temporal. Согласовать ownership, lifetime, barriers и queue ordering при работе через native handles. Документация wgpu as_hal_mut/transition_resources — контракт, а не разрешение нарушать state tracking. Код SDK не запускается в sandbox WASM.
  4. Затем отдельная FG-фаза: корректные HUD/курсор/рука, UI composition, swapchain/present, pacing и задержка ввода. Проверять выбранные комбинации, например DLSS SR+FSR FG, отдельным PoC. Не обещать их совместимость в Horizon заранее. FG не исправляет CPU/WASM stalls; AMD рекомендует достаточную исходную настоящую кадровую частоту для аналитического FSR3.
  5. Optional build features и поставка: version pin, platform artifacts, notices/redistribution для каждого SDK. Лицензия Rust wrapper не распространяется автоматически на NVIDIA runtime или новые AMD DLL. Пропущенная DLL/неподдерживаемое устройство не должны мешать запуску обычного HD.

Приёмка

  • RTX3060/Windows: проверить реальный выбранный backend и каждый доступный SR-путь; M5/macOS: MetalFX runtime query и реальный вывод. Linux отдельно, не объявлять поддержку только по наличию Vulkan API.
  • Парные кадры/видео на одной записи: быстрые маленькие ракеты, провода/листва, плотный дым, вспышки, вода, disocclusion, moving models и смена камеры; HDR и SDR. Истории monitor/main/replay не смешиваются.
  • CPU/GPU frame time p50/p95/p99, VRAM, latency и исходный rendered FPS отдельно от generated/presented FPS. Настройки/разрешение/цели/20Гц и seed зафиксированы.
  • Native/no-FG режим MP4 по умолчанию с фиксированными часами; FG не добавляет simulation ticks и не меняет recorded исходы. Export-quality режим проверяется явно.
  • Unsupported device/SDK, resize, смена режима, world unload и отмена export не оставляют history/resource leaks. Существующие Native/HD продолжают работать.

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

Связано: #88/#89 (scene/history lifecycle), #102 (capabilities/build), отдельные RT и глобальная оптимизация. Апскейлер может сокращать GPU pixel cost; это не доказательство устранения просадок/микрофризов пользователя.

🤖 Filed by Codex, AI-агент Владимира (chexit). Исследование 5–6 ноября 2026. AirDef `61aaa0bf359026711ba811a7f7e9877ce253ead2`, Horizon `278f356aa604fa21c2d15d0081823bbe0f891df2`, wgpu 30.0.1. Запрос владельца: поддержать DLSS, FSR3 и MetalFX в одной поставке. Это отдельная работа в **нативном рендерере**, не shader мода. Интеграция технически обоснована; готового рабочего Horizon proof-of-concept и замеров на RTX 3060/M5 пока нет. ### Что поддерживать Один выбранный temporal upscaler на кадр, общий интерфейс и native TAAU fallback; не цепочка из трёх апскейлеров. Upscaling, frame generation и ray reconstruction — разные возможности, с отдельными capability flags и этапами. RTX 3060 должен получить DLSS Super Resolution и/или аналитический FSR3; Apple Silicon — MetalFX при подтверждённых OS/device capabilities. | Вариант | Реальный путь | Ограничения | |---|---|---| | DLSS SR | Native NGX/Vulkan; изучить документированный dlss_wgpu 6.0.0 для wgpu30/DLSS310.9.1 | Windows/Linux Vulkan описаны wrapper-ом; SDK отдельно. Не автоматически DX12/Metal и не готовая FG интеграция. RTX3060 не поддерживает NVIDIA Frame Generation. | | FSR3.1 upscale | Аналитический cross-vendor вариант на Vulkan/DX12 | Выбрать и закрепить SDK: legacy FidelityFX1.1.x с исходниками или актуальный FSR SDK2.4. У нового SDK есть Vulkan-путь и аналитические fallback; его бинарная Windows-поставка и лицензии не тождественны старому MIT-source. Не обещать FSR4 на3060 или native Metal. | | MetalFX temporal | Apple framework + native Metal/wgpu-hal interop | Проверять версию ОС и supportsDevice; наличие Apple GPU само по себе не подтверждает каждый режим. | | Генерация кадров | Отдельная последующая фаза FSR3 FG/MetalFX interpolation | Нужны UI/presentation/frame-pacing интеграция; для NVIDIA FG ещё и подходящее железо. Нельзя выдавать presented FPS за частоту симуляции. | ### Текущее состояние движка: недостающий общий фундамент - [GBuffer](https://gitea.maoniao.team/chexit/horizon-airdef/src/commit/278f356aa604fa21c2d15d0081823bbe0f891df2/crates/horizon-client/src/gfx/hd/gbuffer.rs#L24) имеет albedo/normal/light levels/depth, но **нет dense motion-vector target**. В terrain/entity shaders нет корректного previous-transform output движущихся объектов. - [Текущая TAA](https://gitea.maoniao.team/chexit/horizon-airdef/src/commit/278f356aa604fa21c2d15d0081823bbe0f891df2/crates/horizon-client/src/gfx/hd/taa.wgsl#L64) восстанавливает историю по depth/камере. Этого недостаточно для ракет, вращающихся частей машин и ветра. - [Контракт цвета](https://gitea.maoniao.team/chexit/horizon-airdef/src/commit/278f356aa604fa21c2d15d0081823bbe0f891df2/crates/horizon-client/src/gfx/hd/mod.rs#L38): промежуточный Rgba16Float содержит gamma/display-space Rec709 с величинами выше1. Формат float не делает его linear HDR. Нужна явная согласованная граница преобразований для каждого SDK, exposure и тонмаппинга. - [Создание device](https://gitea.maoniao.team/chexit/horizon-airdef/src/commit/278f356aa604fa21c2d15d0081823bbe0f891df2/crates/horizon-client/src/gfx.rs#L1034) уже использует специальный Vulkan HDR opener. Нужные NGX расширения/возможности должны составляться с ним, а не заменять его несовместимым bootstrap. - В [HD-плане](https://gitea.maoniao.team/chexit/airdef/src/commit/61aaa0bf359026711ba811a7f7e9877ce253ead2/docs/HD-RENDERER.md) фраза «DLSS нереален, нет в wgpu» устарела: опубликован документированный wrapper под текущий major wgpu. Обновить текст по фактическому выбранному пути. ### План реализации 1. Общий контракт входов: render/output resolutions, reversed-Z, jitter, color/exposure, reactive/transparency masks. Motion от **предыдущего отрисованного кадра**, включая артикулированные части, spawn/despawn, листву/ветер и camera-relative origin. Debug views для проверки направлений/масштаба векторов. Огонь/дым/вспышки/вода требуют явной политики реактивности, а не попытки угадать всё только по depth. 2. Общая абстракция Native/FSR/DLSS/MetalFX и Auto. Выбор по adapter/backend/OS/driver/наличию runtime SDK, понятная причина недоступности и безопасный fallback. Состояние каждого view независимо; reset на resize, cut, seek, teleport, world/resource reload. Долгоживущие контексты; не создавать SDK/scaler и GPU ресурсы заново каждый кадр. 3. Сначала upscale-only пилоты на общей фиксированной сцене: DLSS SR Vulkan, FSR3.1 Vulkan, MetalFX temporal. Согласовать ownership, lifetime, barriers и queue ordering при работе через native handles. Документация wgpu as_hal_mut/transition_resources — контракт, а не разрешение нарушать state tracking. Код SDK не запускается в sandbox WASM. 4. Затем отдельная FG-фаза: корректные HUD/курсор/рука, UI composition, swapchain/present, pacing и задержка ввода. Проверять выбранные комбинации, например DLSS SR+FSR FG, отдельным PoC. Не обещать их совместимость в Horizon заранее. FG не исправляет CPU/WASM stalls; AMD рекомендует достаточную исходную настоящую кадровую частоту для аналитического FSR3. 5. Optional build features и поставка: version pin, platform artifacts, notices/redistribution для каждого SDK. Лицензия Rust wrapper не распространяется автоматически на NVIDIA runtime или новые AMD DLL. Пропущенная DLL/неподдерживаемое устройство не должны мешать запуску обычного HD. ### Приёмка - RTX3060/Windows: проверить реальный выбранный backend и каждый доступный SR-путь; M5/macOS: MetalFX runtime query и реальный вывод. Linux отдельно, не объявлять поддержку только по наличию Vulkan API. - Парные кадры/видео на одной записи: быстрые маленькие ракеты, провода/листва, плотный дым, вспышки, вода, disocclusion, moving models и смена камеры; HDR и SDR. Истории monitor/main/replay не смешиваются. - CPU/GPU frame time p50/p95/p99, VRAM, latency и исходный rendered FPS отдельно от generated/presented FPS. Настройки/разрешение/цели/20Гц и seed зафиксированы. - Native/no-FG режим MP4 по умолчанию с фиксированными часами; FG не добавляет simulation ticks и не меняет recorded исходы. Export-quality режим проверяется явно. - Unsupported device/SDK, resize, смена режима, world unload и отмена export не оставляют history/resource leaks. Существующие Native/HD продолжают работать. ### Первичные материалы - [dlss_wgpu6: таблица версий, Vulkan, Windows/Linux runtime, условия SDK](https://docs.rs/crate/dlss_wgpu/6.0.0) - [NVIDIA: совместимость поколений GPU](https://www.nvidia.com/en-us/geforce/technologies/dlss/) - [NGX programming guide](https://raw.githubusercontent.com/NVIDIA/DLSS/main/doc/DLSS_Programming_Guide_Release.pdf), [SR inputs](https://github.com/NVIDIA-RTX/Streamline/blob/main/docs/ProgrammingGuideDLSS.md), [NVIDIA license](https://github.com/NVIDIA/DLSS/blob/main/LICENSE.txt) - [AMD FSR SDK2.4: версии, API, поддерживаемые OS/GPU и fallback](https://gpuopen.com/amd-fsr-sdk/), [FSR3](https://gpuopen.com/fidelityfx-super-resolution-3/), [input contract](https://gpuopen.com/manuals/fidelityfx_sdk/techniques/super-resolution-upscaler/), [лицензия нового SDK](https://gpuopen.com/manuals/fsr_sdk/license/) - [Apple MetalFX](https://developer.apple.com/documentation/MetalFX), [WWDC25: temporal/frame interpolation и UI](https://developer.apple.com/videos/play/wwdc2025/211/), [GPU capabilities](https://developer.apple.com/metal/capabilities/) - [wgpu native interop](https://docs.rs/wgpu/30.0.1/wgpu/struct.CommandEncoder.html) Связано: #88/#89 (scene/history lifecycle), #102 (capabilities/build), отдельные RT и глобальная оптимизация. Апскейлер может сокращать GPU pixel cost; это не доказательство устранения просадок/микрофризов пользователя.
chexit added the area:architecturearea:renderingtype:enhancementpriority:P2 labels 2026-11-05 21:27:25 +00:00
Author
Owner

🤖 Agent: Kimi Code, с read-only исследованием DLSS от DeepSeek V4.1 Flash Fast.

Начата реализация в kimi-work: AirDef 9664783, engine c962cd472 (kimi-work-124).

Сделано: G-buffer получил dense Rg16Float motion target; формат — current→previous в пикселях render-разрешения, обе проекции с jitter. Terrain/entities записывают camera/static motion; TAA и TAAU используют explicit vectors только при совпадении opaque depth, остальное сохраняет прежний fallback. Исправлен выбор nearest-depth sample для TAAU.

Проверено: 23 HD-теста + Globals layout, WGSL parse и HLSL translation; полный клиент собран. Metal A/B при TAAU 0.67 на одном Polygon: статика mean 0.83/255, пиксели >20 — 0.44%; изменения по краям/воде попадают в motion-маску. Это не заявка на ускорение: motion target и дополнительные reads сами стоят GPU времени.

DLSS ещё не реализован. Разведка подтвердила совместимость dlss_wgpu 6.0.0 с wgpu30/DLSS 310.9.1, но нужен отдельный NGX SDK, Vulkan device bootstrap и Windows fixes wrapper-а. NGX ожидает MV в пикселях — этот контракт уже заложен. Текущий HD color остаётся gamma/display-space, поэтому нужна отдельная linear-HDR граница; наличие Rgba16Float само по себе не доказывает совместимость.

Следующие этапы: previous object/articulated transforms и wind, общий backend/reset + linear-HDR, затем feature-gated DLSS SR PoC на RTX/Vulkan. FG отдельно; RTX 3060 не получает NVIDIA FG. Issue остаётся открытым.

🤖 Agent: Kimi Code, с read-only исследованием DLSS от DeepSeek V4.1 Flash Fast. Начата реализация в `kimi-work`: AirDef `9664783`, engine `c962cd472` (`kimi-work-124`). **Сделано:** G-buffer получил dense `Rg16Float` motion target; формат — current→previous в пикселях render-разрешения, обе проекции с jitter. Terrain/entities записывают camera/static motion; TAA и TAAU используют explicit vectors только при совпадении opaque depth, остальное сохраняет прежний fallback. Исправлен выбор nearest-depth sample для TAAU. **Проверено:** 23 HD-теста + Globals layout, WGSL parse и HLSL translation; полный клиент собран. Metal A/B при TAAU 0.67 на одном Polygon: статика mean 0.83/255, пиксели >20 — 0.44%; изменения по краям/воде попадают в motion-маску. Это не заявка на ускорение: motion target и дополнительные reads сами стоят GPU времени. **DLSS ещё не реализован.** Разведка подтвердила совместимость `dlss_wgpu 6.0.0` с wgpu30/DLSS 310.9.1, но нужен отдельный NGX SDK, Vulkan device bootstrap и Windows fixes wrapper-а. NGX ожидает MV в пикселях — этот контракт уже заложен. Текущий HD color остаётся gamma/display-space, поэтому нужна отдельная linear-HDR граница; наличие Rgba16Float само по себе не доказывает совместимость. Следующие этапы: previous object/articulated transforms и wind, общий backend/reset + linear-HDR, затем feature-gated DLSS SR PoC на RTX/Vulkan. FG отдельно; RTX 3060 не получает NVIDIA FG. Issue остаётся открытым.
Author
Owner

🤖 Agent: Kimi Code.

Продолжение: AirDef 217e3ac, engine ed751714e ветки kimi-work-124.

Добавлен feature-gated DLSS SR PoC, не просто motion foundation:

  • dlss_wgpu 6.0.0 optional для Windows/Linux; обычные сборки не требуют SDK;
  • NGX и VK_EXT_hdr_metadata собираются в одном Vulkan device callback;
  • один SDK на device и context на output size, существующие resize/history resets;
  • previous-frame mod-model transforms, depth и jitter подаются в evaluate;
  • submit строго world+display→linear → NGX evaluate → linear→display; native TAA/TAAU остаётся fallback;
  • HORIZON_DLSS=1 включает backend, default world scale 2/3; HORIZON_HD_SCALE переопределяет.

Проверено: Windows cargo check -p horizon-client --target x86_64-pc-windows-gnu --features dlss с NVIDIA DLSS SDK v310.9.1 прошёл; syn закреплён 3.0.5, advapi32 добавлен для NGX. 24 HD-теста + layout, mods/no-mods checks, обычная игра/HD на Metal. Движущаяся С-400 в HORIZON_HD_DEBUG_MOTION показала object motion.

Не проверено: полноценная MSVC линковка и NGX runtime/качество/FPS. MinGW link не подходит из-за MSVC CRT .lib; это не объявляется рабочей Windows-сборкой. Для запуска нужны SDK при сборке, DLSS_SDK, VULKAN_SDK, clang, --features dlss, а также runtime DLL/SO и NVIDIA notices. Ванильные сущности/ветер пока camera-only; reactive/transparency, FSR3/MetalFX и frame generation отдельно.

Issue остаётся открытым до MSVC-link и RTX/Vulkan приёмки.

🤖 Agent: Kimi Code. Продолжение: AirDef `217e3ac`, engine `ed751714e` ветки `kimi-work-124`. **Добавлен feature-gated DLSS SR PoC**, не просто motion foundation: - `dlss_wgpu 6.0.0` optional для Windows/Linux; обычные сборки не требуют SDK; - NGX и `VK_EXT_hdr_metadata` собираются в одном Vulkan device callback; - один SDK на device и context на output size, существующие resize/history resets; - previous-frame mod-model transforms, depth и jitter подаются в evaluate; - submit строго `world+display→linear → NGX evaluate → linear→display`; native TAA/TAAU остаётся fallback; - `HORIZON_DLSS=1` включает backend, default world scale 2/3; `HORIZON_HD_SCALE` переопределяет. **Проверено:** Windows `cargo check -p horizon-client --target x86_64-pc-windows-gnu --features dlss` с NVIDIA DLSS SDK v310.9.1 прошёл; `syn` закреплён 3.0.5, `advapi32` добавлен для NGX. 24 HD-теста + layout, mods/no-mods checks, обычная игра/HD на Metal. Движущаяся С-400 в `HORIZON_HD_DEBUG_MOTION` показала object motion. **Не проверено:** полноценная MSVC линковка и NGX runtime/качество/FPS. MinGW link не подходит из-за MSVC CRT `.lib`; это не объявляется рабочей Windows-сборкой. Для запуска нужны SDK при сборке, `DLSS_SDK`, `VULKAN_SDK`, clang, `--features dlss`, а также runtime DLL/SO и NVIDIA notices. Ванильные сущности/ветер пока camera-only; reactive/transparency, FSR3/MetalFX и frame generation отдельно. Issue остаётся открытым до MSVC-link и RTX/Vulkan приёмки.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chexit/airdef#124