How to Improve Shader Performance by Resolving LDC Divergence (video)
Пример как пользоваться NSigth для профилирования кадра и шейдеров.
Показывают как замена constant (uniform) буфера на structured (storage) дает ускорение в 1.6 раз.
#nv #gpu_opt
Пример как пользоваться 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х вызовов
В целом выглядит интересно, сложно предсказать какие артефакты выдаст нейронка, но входных данных не так много, можно перебором все валидировать.
#nv
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
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