CG & C++ blog
57 subscribers
13 photos
2 files
129 links
Краткий обзор публикаций, презентаций, докладов по графике и C++
Download Telegram
How to Improve Shader Performance by Resolving LDC Divergence (video)
Пример как пользоваться NSigth для профилирования кадра и шейдеров.
Показывают как замена constant (uniform) буфера на structured (storage) дает ускорение в 1.6 раз.
#nv #gpu_opt
Обзор NVIDIA RTX Kit

RTX Texture Filtering
Основано на публикации: Filtering After Shading With Stochastic Texture Filtering
При линейной фильтрации карт нормалей возникает проблема - резкие перепады сглаживаются и освещение становится более плоским. Решается все выборкой нужных текселей, освещением и затем только фильтрацией, но тут в разы увеличиваются вычисления.
Для оптимизации каждый кадр читается только один тексель со случайным смещением. Если соседние пиксели в варпе читают ту же текстуру, то результат усредняется между ними. (код)
Затем результат фильтруется через темпоральные техники: TAA или DLSS.

Neural Shading
В примере весь расчет BRDF заменили нейронным шейдером.
Сам шейдер состоит из 4х вызовов rtxns::LinearOp(), где внутри вызывается coopVecMatMulAdd().
В целом выглядит интересно, сложно предсказать какие артефакты выдаст нейронка, но входных данных не так много, можно перебором все валидировать.
#nv
продолжение:

Neural Texture Compression
Позволяет сжимать набор текстур до 16 каналов в сумме, что хорошо подходит для PBR текстур.

Предлагается 2 варианта использования:
* Загружать максимально сжатую текстуру в VRAM, затем распаковывать в BC формат, тем самым экономится место на диске и траффик PCIe.
* Хранить в максимально сжатом формате и распаковывать один тексель при чтении. Так уменьшается нагрузка на VRAM, но требуются тяжелые вычисления, зато в комбинации с RTX Texture Filtering распаковывается меньше текселей и производительность приходит в норму.

Проблемы:
* Детали из одного канала текстуры могут протекать в другие каналы.
* Хуже справляется с HDR форматами.
* Поддерживается только один альфа-канал, для него применяются специальные правила чтобы лучше сохранить значения 0 и 1.
* Альфа канал может использоваться отдельно для depth pre-pass, тогда распаковывать текстуру слишком затратно и лучше использовать другой формат.

RTX Mega Geometry
Новые расширения для ускоряющих структур.
В NV отказались от отдельного хэндла для AS, теперь везде DeviceAddress, то есть ссылка на GPU-память.
Добавили только Indirect команды, это полезно, но на начальном этапе отлаживать стало слишком сложно, остается ждать обновление VK_NV_ray_tracing_validation, так как обычные слои валидации не проверяют содержимое DeviceAddress.

VK_NV_partitioned_tlas
Теперь TLAS нарезается на тайлы и каждый тайл обновляется отдельно.
Ранее я планировал реализовать такое же через AABB и второй TLAS внутри, но с таким расширением явно будет быстрее работать.

VK_NV_cluster_acceleration_structure
Ранее BLAS хранил треугольники для одной модели, теперь добавили CLAS для хранения мешлетов (до 256 треугольников), это нужно для унификации с меш шейдерами.
CLAS нужны для переключения уровней детализации, как в Nanite, а для статики обычный BLAS работает быстрее.
#nv