-
Notifications
You must be signed in to change notification settings - Fork 0
GPU Renderer RU
🌐 English · Русский
← Рендеринг и освещение · Самотесты →
В 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); с тенями вкл отличаться может только тонкая полоса на границе тени.
GPU повторяет двухуровневое BVH CPU: локальные вершины меша, грани и уплощённое бесстековое BVH строятся один раз и грузятся один раз; ядро переводит каждый луч в локальное пространство объекта и обходит его дерево, затем поворачивает результат обратно в мировое пространство (сферы остаются аналитическими). Каждый кадр передаётся лишь небольшой набор пер-кадровых данных (трансформы объектов, сферы, источники света).
F3 переключает BVH и на GPU (демо производительности): с BVH вкл ядро обходит дерево; с BVH выкл оно перебирает все треугольники. Поскольку BVH лишь отсекает, какие треугольники тестируются — но не результат ближайшего попадания — вывод идентичен в обоих состояниях (различается лишь FPS). gputest проверяет GPU == CPU в обоих состояниях и что кадр GPU с BVH-вкл побитово равен кадру GPU с BVH-выкл.
Весь код GPU / ILGPU живёт в отдельном проекте Nova3DVisualiser.Gpu, поэтому библиотека движка остаётся без зависимостей. Движок подаёт GPU снимок сцены только из значений, без типов ILGPU. См. Структура проекта.