По умолчанию среда выполнения Unity шейдерпрограмма, работающая на графическом процессоре. Подробнее
См. в Словарь поведение при загрузке:
- Когда Unity загружает сцену или загружает содержимое с помощью загрузки ресурсов во время выполнения, он загружает все необходимые объекты шейдеров в память процессора.
- В первый раз, когда Unity необходимо отобразить геометрию с использованием варианта шейдера, он передает данные для этого варианта графическому драйверу. Графический драйвер создает представление этого варианта на графическом процессоре и выполняет любую дополнительную работу, требуемую платформой.
Преимущество такого поведения заключается в том, что для вариантов шейдеров не требуется предварительное использование памяти графического процессора или время загрузки. Недостатком является то, что при первом использовании варианта могут быть видимые зависания, потому что графический драйвер должен создать шейдерную программу на графическом процессоре и выполнить любую дополнительную работу.
Варианты шейдера предварительного прогрева
Чтобы избежать видимых зависаний в периоды высокой производительности, Unity может попросить графический драйвер создать графическое представление вариантов шейдера до того, как они потребуются в первую очередь. Это называется предварительным прогревом.
Предупреждение. Ознакомьтесь с примечаниями о поддержке графического API, прежде чем выбирать способ выполнения предварительного прогрева. В современных графических API, таких как DX12, Vulkan и Metal, полностью поддерживается только экспериментальный API ShaderWarmup, поскольку он позволяет указать вершину. формат. Использование других методов может привести к напрасной работе и памяти графического процессора без устранения зависаний.
Предварительный прогрев можно выполнить следующими способами:
- Предварительно подогрейте данный объект шейдера или набор вариантов шейдера с помощью экспериментального API ShaderWarmup. Информацию о поддержке графического API см. в примечании 1.
- Подготовьте коллекции вариантов шейдеров при запуске приложения, добавив их в раздел Предварительно загруженные шейдеры окна "Параметры графики". Информацию о поддержке графического API см. в примечании 2.
- Подготовьте коллекцию вариантов шейдера с помощью API ShaderVariantCollection.WarmUp. Информацию о поддержке графического API см. в примечании 2.
- Предварительно подогрейте все варианты всех объектов Shader, находящихся в настоящее время в памяти, с помощью API Shader.WarmupAllShaders. Информацию о поддержке графического API см. в примечании 2.
Примечания:
- Полностью поддерживается всеми графическими API.
- Полная поддержка DX11 и OpenGL. Частично поддерживается на DX12, Vulkan и Metal; графическому драйверу все еще может потребоваться выполнить работу, если макет вершины и/или настройка цели рендеринга отличаются от данных, используемых для ее предварительного прогрева.
Маркеры профайлера для загрузки шейдеров
Окно профилировщикокно, помогающее оптимизировать игру. Он показывает, сколько времени вы тратите на различные области вашей игры. Например, он может сообщать о проценте времени, затраченном на рендеринг, анимацию или игровую логику. Дополнительная информация
См. маркер Словарь для Unity, создающего представление шейдера вариант данных для отправки в GPU: Shader.Parse
. Маркер профилировщикаРазмещается в коде для описания события CPU или GPU, которое затем отображается в окне Unity Profiler. Добавляется в код Unity по умолчанию, или вы можете использовать ProfilerMarker API для добавления собственных маркеров. Подробнее
См. Словарь для загрузки шейдерной программы в GPU и ожидания GPU для выполнения любой необходимой работы — это CreateGPUProgram
.
Информацию об использовании Unity Profiler см. в разделе Профилирование приложения.