Компьютерная графика

Real-Time Ray Tracing: RTX

В 2018 году NVIDIA выпустила RTX 2080 и впервые показала Battlefield V с настоящими отражениями в лужах и зеркалах. До этого момента все игры за 30 лет рендеринга использовали хаки: screen-space reflections, shadow maps, baked global illumination. Каждый хак ломался в каких-то условиях, и художники тратили дни, маскируя артефакты. RTX перевернул индустрию: первые специализированные ядра для трассировки лучей сделали то, что считалось задачей для офлайн-рендеров Pixar. Cyberpunk 2077 в режиме RT Overdrive - это полный path tracer в реальном времени, технология, которая ещё пять лет назад была физически невозможна.

  • **Cyberpunk 2077 RT Overdrive:** полный path tracer на RTX 4090 + DLSS 3 frame generation - вершина текущей real-time графики
  • **Unreal Engine 5 Lumen:** гибридный GI решатель, использующий signed distance fields плюс RT-ядра для high-end GPU
  • **NVIDIA OmniGraph / Quake II RTX:** полная замена legacy rasterization pipeline на ray-traced первичную видимость

RT-ядра: аппаратное ускорение пересечений

До 2018 года трассировка лучей в реальном времени считалась фантастикой: одно пересечение луч-треугольник на CPU - сотни тактов, а нужны миллиарды пересечений в секунду на кадр в 1080p. NVIDIA Turing (RTX 2080, 2018) ввела RT-ядра - выделенные блоки, выполняющие два узких операнда полностью на железе: обход BVH (Bounding Volume Hierarchy) и тест пересечения луч-треугольник. Каждое RT-ядро обрабатывает один луч за такт, тогда как обычные SM-ядра выполняют шейдеры hit/miss. Это даёт примерно 10-кратный прирост против эмуляции на CUDA. AMD ответил RDNA2 Ray Accelerators (2020), Intel Arc Alchemist - RTU (2022).

API-уровень: DirectX 12 Raytracing (DXR, 2018), Vulkan Ray Tracing (KHR_ray_tracing, 2020), Metal MPSRayIntersector (2018). Все определяют пять типов шейдеров: ray-generation (запускает луч), intersection (custom геометрия), any-hit (anti-aliasing/прозрачность), closest-hit (затенение), miss (фон). Программист пишет шейдеры, GPU делает BVH-traversal на RT-ядрах. NVIDIA RTX 4090 имеет 128 RT-ядер третьего поколения с обработкой ~10 миллиардов луч-треугольник пересечений в секунду.

Что именно аппаратно ускоряют RT-ядра NVIDIA в отличие от обычных CUDA-ядер?

Denoising: 1 луч на пиксель плюс нейросеть

RTX-ядра ускорили обход BVH, но число лучей всё равно ограничено бюджетом 16 миллисекунд на кадр. На 1080p при 1 луче на пиксель - всего 2 миллиона лучей, тогда как офлайн path tracer берёт тысячи лучей на пиксель. Результат - сильный шум: 1 spp (sample per pixel) при простой реализации выглядит как искажение. Denoising превращает зашумлённое изображение в чистое: пространственный фильтр (бил-латерал, A-trous), временной фильтр (TAA reprojection), нейросетевой денойзер (NVIDIA OptiX, Intel Open Image Denoise). NVIDIA Ray Reconstruction (DLSS 3.5, 2024) полностью заменил обычный денойзер моделью, обученной на офлайн-рендере.

Архитектура реального RT-pipeline: G-buffer (нормали, albedo, depth) + zashumлённый radiance buffer → denoiser → tonemapping → upscaler (DLSS/FSR/XeSS). SVGF (Spatiotemporal Variance-Guided Filter, Schied 2017) - лучший на сегодня классический денойзер: использует accumulated radiance из предыдущих кадров через motion vectors. NVIDIA NRC (Neural Radiance Cache) идёт дальше - небольшая MLP-сеть обучается прямо во время рендеринга, кэшируя radiance в узлах сцены. Quake II RTX, Cyberpunk 2077, Alan Wake 2 - все полагаются на сочетание denoising и upscaling, чтобы достичь playable framerate.

Почему даже RTX-кадр невозможен без денойзера?

Гибридный рендер: rasterization + RT

Полный path tracer всё ещё требует на порядок больше лучей, чем доступно в real-time. Решение - гибридный рендер: rasterization (быстрый) даёт первичную видимость и G-buffer, а RT (точный) берёт на себя только те эффекты, где rasterization физически невозможен или фейкав. Отражения - RT (вместо screen-space reflections, которые ломаются на краях экрана). Мягкие тени - RT (вместо shadow maps с peter-panning). Глобальное освещение - RT (вместо запечённых lightmaps). Frostbite, Unreal Engine 5 Lumen, Cyberpunk RT Overdrive - все построены вокруг этого паттерна.

Deferred rendering pipeline остаётся центральным: rasterization заполняет G-buffer (depth, normal, albedo, roughness, metallic), затем RT pass запускает один луч на пиксель для каждого эффекта (reflection, shadow, GI). На картриджах используется ReSTIR (Reservoir-based SpatioTemporal Importance Resampling, Bitterli 2020) - выбирает лучшие directions из large light pool с помощью importance resampling. Метод позволяет имитировать тысячи источников света с одним лучом на пиксель. Unreal Lumen использует упрощённую signed distance field для трассировки на consumer-железе без RT-ядер, плюс RT-ядра ускоряют точную версию для high-end GPU.

Почему ведущие игры используют гибридный рендер, а не полный path tracer?

BLAS и TLAS: двухуровневая структура ускорения

Чтобы RT-ядра выполняли пересечение лучей с миллионом треугольников в реальном времени, сцена должна быть представлена в виде BVH (Bounding Volume Hierarchy) - дерева ограничивающих объёмов. Современные API делают это двухуровневым: BLAS (Bottom-Level Acceleration Structure) - BVH над треугольниками одной геометрии (один меш персонажа, один меш машины). TLAS (Top-Level Acceleration Structure) - BVH над инстансами BLAS, каждый с матрицей трансформации. Тысяча копий одного меша требует ОДНОГО BLAS и тысячи TLAS-инстансов. Это критично для динамических сцен: BLAS дорогая (миллисекунды), TLAS дешёвая (микросекунды), пересчёт TLAS на каждый кадр даёт движение объектов без перестройки BLAS.

Для статической геометрии (стены, фон) BLAS строится один раз в loading screen. Для skinned mesh (персонажи с анимацией) применяется refit - быстрое обновление существующего BLAS без полной перестройки, теряет качество дерева но в 10 раз быстрее. Полная перестройка нужна когда топология меняется драматически (например, разрушения). NVIDIA RTXMU (Memory Utility) и AMD GPUOpen RAB (Ray Acceleration Building) дают оптимизированные builders. Бюджет на TLAS-перестройку: ~0.5 ms для 10K инстансов на RTX 4080.

RTX даёт настоящий path tracing в играх, как в офлайн-рендерах Blender Cycles

RTX в играх - это денойзенный 1 spp с гибридным рендером; полный path tracer всё ещё в 10-50 раз медленнее реального времени даже на RTX 4090

Офлайн path tracer тратит 4096-16384 spp на пиксель для сходимости. RTX в игре - 1-4 spp, спасает денойзер плюс temporal accumulation плюс DLSS upscaling. Cyberpunk RT Overdrive (full path tracer) на RTX 4090 без DLSS - 8-12 fps в 1080p. С DLSS 3 - 60+ fps, но это уже комбинация Monte Carlo, нейросетей и upscaling, а не чистый path tracer

Зачем разделять структуру ускорения на BLAS и TLAS, вместо одной большой BVH?

Ключевые идеи

  • **RT-ядра** аппаратно ускоряют две специализированные операции: обход BVH и тест пересечения луч-треугольник, освобождая SM-ядра для шейдеров.
  • **Денойзер - архитектурный элемент**, без него 1 spp выглядит как помехи; SVGF + DLSS Ray Reconstruction превращают шум в чистое изображение.
  • **Гибридный рендер** оставляет rasterization для первичной видимости, а RT задействует только там, где rasterization физически фейкав (отражения, тени, GI).
  • **BLAS + TLAS** дают переиспользование тяжёлой геометрии: тысяча инстансов меша - один BLAS, лёгкая TLAS пересчитывается каждый кадр.

Связанные темы

Real-time трассировка лучей объединяет идеи Monte Carlo, пространственных структур и GPU-параллелизма.

  • Path Tracing и Monte Carlo — RTX - это Monte Carlo path tracer с 1 spp плюс денойзер; теория из cg-12 - основа всего pipeline
  • Geometric Algorithms at Scale — BLAS/TLAS - это BVH построенный на GPU через Morton-коды; те же структуры, что в spatial indexing

Вопросы для размышления

  • RT-ядра дали 10x ускорение, но всё ещё нужен денойзер. Где упрётся следующее поколение - в ширину пропускания памяти, в нейросетевые денойзеры, или в новые алгоритмы выборки?
  • Гибридный рендер - временный компромисс или долгосрочная архитектура? Когда rasterization окончательно уступит place full path tracer'у?
  • DLSS 3.5 Ray Reconstruction заменяет классический денойзер нейросетью. Какие риски и преимущества такой замены для предсказуемости графики в играх?

Связанные уроки

  • cg-08 — GPU pipeline - основа для понимания аппаратного ray tracing
  • cg-14 — Deferred Rendering дополняет RTX в гибридном рендеринге
  • arch-15-gpu-architecture — RT-cores как специализированные ALU: hardware-acceleration той же идеи
  • cgeom-06 — BVH для RTX - это иерархия выпуклых оболочек
  • arch-04-cpu
Real-Time Ray Tracing: RTX

0

1

Войти