Skip to content

GPU Renderer RU

Yahasi edited this page Jul 6, 2026 · 1 revision

🌐 English · Русский

← Рендеринг и освещение · Самотесты →

GPU-рендерер

В Nova есть опциональный GPU-рейтрейсер на ILGPU. Он считает все первичные, теневые и осветительные лучи на видеокарте при полном паритете фич с CPU-рендерером.

Требования и выбор

  • Предпочтителен NVIDIA GPU (CUDA); рендерер также работает на любом OpenCL-устройстве. Если ни того, ни другого нет, используется управляемый CPU-акселератор ILGPU, поэтому он всё равно работает headless (именно так gputest выполняется на CI).
  • Выбирается для каждого мира в диалоге Создать мир: Renderer: CPU / GPU (NVIDIA) (хранится как graphics.renderer в JSON — "cpu" по умолчанию, "gpu").
  • Если мир запросил GPU, но пригодной видеокарты нет, происходит прозрачный откат на CPU.

Паритет фич

GPU-путь совпадает с CPU-рендерером фича-в-фичу:

  • Front-to-back прозрачность (depth peeling).
  • Все виды света — point / directional / spot / area.
  • Веера лучей прожектора и формы конуса circle / square / triangle.
  • Мягкие тени area и альфа-корректные тени (прозрачные окклюдеры ослабляют; непрозрачные блокируют полностью).
  • PNG-текстуры — GPU сэмплирует идентичный тексель побитово (nearest / bilinear / mipmapped синхронны с CPU). См. Текстуры.

Самотест gputest рендерит фиксированные сцены на обоих путях и сравнивает попиксельно: с тенями выкл каждая фича детерминирована и должна совпадать точно (Δ≈0); с тенями вкл отличаться может только тонкая полоса на границе тени.

Ускорение и переключатель BVH (F3)

GPU повторяет двухуровневое BVH CPU: локальные вершины меша, грани и уплощённое бесстековое BVH строятся один раз и грузятся один раз; ядро переводит каждый луч в локальное пространство объекта и обходит его дерево, затем поворачивает результат обратно в мировое пространство (сферы остаются аналитическими). Каждый кадр передаётся лишь небольшой набор пер-кадровых данных (трансформы объектов, сферы, источники света).

F3 переключает BVH и на GPU (демо производительности): с BVH вкл ядро обходит дерево; с BVH выкл оно перебирает все треугольники. Поскольку BVH лишь отсекает, какие треугольники тестируются — но не результат ближайшего попадания — вывод идентичен в обоих состояниях (различается лишь FPS). gputest проверяет GPU == CPU в обоих состояниях и что кадр GPU с BVH-вкл побитово равен кадру GPU с BVH-выкл.

Заметка об архитектуре

Весь код GPU / ILGPU живёт в отдельном проекте Nova3DVisualiser.Gpu, поэтому библиотека движка остаётся без зависимостей. Движок подаёт GPU снимок сцены только из значений, без типов ILGPU. См. Структура проекта.

Clone this wiki locally