Unity 6.3
0 онлайн 85 гостей 3 в системе
Вход

Введение в RSUV

Использовать пользовательское значение шейдера рендерера (RSUV) при управлении большим количеством объектов (например, Mesh Renderers), которые требуют визуальной настройки для каждого экземпляра. RSUV позволяет указать данные для каждого рендера, чтобы применить настройки шейдера при совместном использовании одного материала несколькими рендерами. Scriptable Render Pipeline (SRP) проектов, этот подход является наиболее эффективным.

Совместимость конвейера отображения

Если ваш проект использует встроенный Render Pipeline, вы можете использовать блоки свойств материала (MPBs). Однако этот метод не рекомендуется, если ваш проект использует SRP, так как он имеет низкую производительность во время выполнения и может работать не так, как ожидалось.

В проектах, использующих SRPs, таких как Universal Render Pipeline (URP) или High Definition Render Pipeline (HDRP), которые позволяют использовать пакетный процессор SRP, у вас есть два основных варианта:

  • Дублирование материалов: Создание выделенного материала для каждого настраиваемого рендерера. Однако этот процесс дублирует весь материал, и во многих случаях требуемая настройка для каждого объекта ограничивается лишь небольшим набором параметров.

  • Пользовательское значение для шейдера рендерера (RSUV): Укажите данные для каждого рендерера, чтобы применить настройки шейдера к одному материалу, используемому несколькими рендерами.

Примечание: RSUV доступен только в Скриптовых Конвейерах Рендринга (SRPs). Он не поддерживается во Встроенном Render Pipeline.

Функциональность RSUV

RSUV — это пользовательское 32-битное целое число, которое вы можете назначить каждому рендереру для предоставления определенных данных для шейдера. Вы можете установить это значение с помощью следующего APIs:

Вы можете получить доступ к значению в коде шейдера HLSL через свойство unity_RendererUserValue. Эта функциональность не мешает пакетной обработке.

При таком подходе все настраиваемые рендери продолжают использовать один и тот же материал, что приводит к заметному улучшению производительности в большинстве сценариев.

Случаи использования

Тип данных, которые вы можете передавать через RSUV, гибкий и зависит от требований вашего сценария визуальной настройки. Например:

Пример требования Рекомендуемый метод
Различные диффузные цвета на объект Кодировка цвета RGBA32 непосредственно в цвет RSUV и его декодирование в коде шейдера.
Различные текстуры логотипов для каждого персонажа Например, при наличии 16 логотипов выделите 4 бита RSUV для кодирования индекса UV в едином атласе текстур, содержащем все логотипы. Вы можете использовать оставшиеся 28 битов для кодирования дополнительных вариаций, таких как корректировка цвета.
Большие объемы пользовательских данных на рендерер Используйте RSUV в качестве индекса в более крупной структуре данных, хранящейся в глобальном GraphicsBuffer.

Примечание: RSUV Например, один шейдер может интерпретировать изображение, полученное с помощью RSUV как цвет, в то время как другой может рассматривать его как индекс во вспомогательных данных.

Результаты работы

Функция RSUV не вводит дополнительных CPU затрат. Использование RSUV для настройки значений для каждого рендерера всегда немного быстрее, чем дублирование материала и значительно быстрее, чем использование Блока свойств материала (MPB).

Прирост производительности максимален при использовании GPU Resident Drawer (GRD), поскольку RSUV не требует дублировать материал, а значит, не ломает инстансинг вызовов отрисовки в GRD.

Дополнительные ресурсы