Unity 6.3
0 онлайн 118 гостей 3 в системе
Вход
Материалы и шейдеры Шаг 357 из 442

Загрузка шейдера

Unity загружает скомпилированные шейдеры из вашего созданного приложения следующим образом:

  1. Когда Unity загружает сцену или ресурс времени выполнения, она загружает все компилированные варианты шейдеров для сцены или ресурса в CPU память.
  2. По умолчанию, Unity разгружает все варианты шейдеров в другую область памяти CPU. Вы можете контролировать, сколько памяти используют шейдеры на разных платформах.
  3. В первый раз, когда Unity требуется отобразить геометрию с помощью варианта шейдера, Unity передает вариант шейдера и его данные графике API и графическому драйверу.
  4. Графический драйвер создает специфическую для GPU версию варианта шейдера и загружает ее в GPU.

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

Unity кэширует каждый вариант шейдера, специфичный для GPU, чтобы избежать очередной задержки, когда Unity снова потребуется вариант шейдера.

Unity полностью удаляет вариант шейдера из памяти CPU и GPU, когда больше нет объектов, которые ссылаются на вариант шейдера.

Какие шейдеры загружаются Unity

Unity загружает только скомпилированные шейдеры, которые совместимы с графикой платформы API, аппаратным обеспечением и графическим уровнем.

Если Unity не может найти нужный ему вариант шейдера, потому что вы или Unity удалили вариант шейдера из вашего созданного приложения, Unity пытается выбрать аналогичный вариант шейдера. Если Unity не может найти аналогичный вариант шейдера, он использует ошибочный шейдер цвета пурпурный.

Вы можете включить строгий вариант шейдера, соответствующий, чтобы остановить Unity от попыток выбрать аналогичный вариант шейдера.

Как Unity выбирает субшадер

Если вариант шейдера содержит несколько субшайдеров, Unity пытается выбрать и использовать один субшайдер, который совместим со всеми следующими:

Unity ищет первый совместимый subshader среди следующих элементов в следующем порядке:

  1. Субшаедер в том порядке, в котором они появляются в шейдере.
  2. Субшадеры в любых резервных объектах шейдера в том порядке, в котором они появляются в объектах шейдера.

Если Unity не может найти совместимый субшейдер, он использует бумажный ошибочный шейдер.

Вы можете определить, какие субшайдеры совместимы с каким оборудованием, используя теги ShaderLab. См. ShaderLab: назначение тегов SubShader.

Проверить, когда Unity загружает шейдеры

Чтобы проверить, когда шейдер загружается из серийных данных, поищите следующие маркеры профилирования в Profiler:

  • Shader.ParseThreaded
  • Shader.ParseMainThread

Чтобы проверить, когда шейдер выгружает варианты шейдера, поищите маркер профиля Shader.MainThreadCleanup.

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