Unity 6.3
0 онлайн 96 гостей 3 в системе
Вход
Оптимизация Шаг 148 из 208

DOTS Инстансирование шейдеров в URP

Для эффективного отображения большого количества экземпляров, BRG использует новый режим инстанционирования шейдера, называемый DOTS Instancing. Каждый шейдер, который использует BRG, должен поддерживать DOTS Instancing. В традиционных инстанционных шейдерах, шейдеру передается массив для каждого инстанционированного свойства в постоянном или унифицированном буфере, так что каждый элемент в каждом массиве содержит значение свойства для одного экземпляра в рисунке. В DOTS Инстанционных шейдерах, Unity передает 32-битное целое число шейдеру для каждого DOTS Инстанционного свойства. Это 32-битное целое число называется значением метаданных. Это целое число может представлять любое значение, но обычно оно представляет смещение в буфере, из которого шейдер загружает данные свойств для экземпляра, который он отображает.

DOTS Создание экземпляров имеет много преимуществ по сравнению с традиционным созданием экземпляров, включая следующие:

  • Данные экземпляра хранятся в GraphicsBuffer и остаются постоянными на GPU, что означает, что Unity не нужно устанавливать их снова каждый раз, когда он рендирует экземпляр. Настройка данных только при фактическом изменении экземпляра может значительно повысить производительность в случаях, когда данные экземпляра изменяются редко или вообще не изменяются. Это намного эффективнее, чем традиционное инстансирование, которое требует от движка устанавливать все данные для каждого экземпляра каждый кадр.
  • Настройка данных экземпляров отделена от настройки вызова отрисовки. Благодаря этому настройка вызова отрисовки остаётся лёгкой и эффективной. BRG добивается этого с помощью специального быстрого пути SRP Batcher, который выполняет для каждого вызова отрисовки лишь минимум работы. Ответственность за эту работу переходит к вам и даёт больше контроля над тем, что отрисовывается в каждом вызове.
  • Размер вызова отрисовки больше не ограничен объёмом данных экземпляров, помещающимся в константный или uniform-буфер. Это позволяет BRG отрисовывать больше экземпляров одним вызовом отрисовки.
    Примечание: количество индексов экземпляров по-прежнему ограничивает размер вызова отрисовки, поскольку каждому индексу нужны какие-то данные. Однако индекс занимает гораздо меньше памяти, чем полный набор инстансированных свойств, а значит, в константный или uniform-буфер помещается намного больше экземпляров. Например, каждому индексу нужно 16 байт, поэтому если предел памяти буфера на конкретной платформе составляет 64 КБ, в буфер поместится 4096 индексов.
  • Если каждый экземпляр использует одно и то же значение для данного свойства, то можно запустить все экземпляры с загрузкой значения из одного и того же места в памяти. Это экономит память и количество циклов GPU, потраченных на дублирование значения для каждого экземпляра.