Эта страница содержит несколько простых рекомендаций по оптимизации рендерингапроцесса вывода графики на экран (или текстуры рендеринга). . По умолчанию основная камера в Unity отображает изображение на экране. Подробнее
Узнайте в Словарь производительность вашего приложения.
Прежде чем начать: найдите и поймите проблему
Прежде чем вносить какие-либо изменения, необходимо профилировать приложение, чтобы определить причину проблемы. Если вы попытаетесь решить проблему с производительностью до того, как поймете ее причину, вы можете напрасно потратить время или усугубить проблему. Кроме того, проблемы производительности, связанные с рендерингом, могут возникать на ЦП или ГП. Стратегии решения этих проблем совершенно разные, поэтому важно понять, в чем заключается ваша проблема, прежде чем предпринимать какие-либо действия.
Следующая статья на сайте Unity Learn представляет собой подробное введение в производительность графики и содержит информацию о выявлении и устранении проблем: Устранение проблем с производительностью: оптимизация рендеринга графики в играх Unity. Если вы еще не знакомы с этой темой, прочитайте статью, прежде чем следовать каким-либо советам на этой странице.
Снижение затрат ЦП на рендеринг
Обычно наибольший вклад во время рендеринга ЦП вносит стоимость отправки команд рендеринга в ГП. Команды рендеринга включают вызовы отрисовки (команды для рисования геометрии) и команды для изменения настроек графического процессора перед рисованием геометрии. В этом случае рассмотрите следующие варианты:
- Вы можете уменьшить количество объектов, отображаемых Unity.
- Рассмотрите возможность уменьшения общего количества объектов в сценеСцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь: например, используйте скайбоксОсобый тип материала, используемый для представления неба. Обычно шестигранник. Подробнее
См. в Словарь, чтобы создать эффект отдаленной геометрии. - Выполняйте более строгий отбор, чтобы Unity рисовала меньше объектов. Рассмотрите возможность использования отсечения окклюзиифункции, которая отключает визуализацию объектов, когда они в данный момент не видны. камерой, потому что они закрыты (закрыты) другими объектами. Подробнее
См. в Словарь, чтобы запретить Unity рисовать объекты, скрыт за другими объектами, уменьшая дальнюю плоскость отсечения КамерыКомпонент, создающий изображение конкретная точка зрения в вашей сцене. Вывод либо рисуется на экране, либо фиксируется в виде текстуры. Подробнее
Смотрите в Словарь, чтобы более удаленные объекты выпадали за пределы усеченного конуса, или, для более детальный подход, когда объекты помещаются в отдельные слои и настраиваются расстояния отбраковки для каждого слоя с помощью Camera. LayerCullDistances.
- Рассмотрите возможность уменьшения общего количества объектов в сценеСцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
- Вы можете уменьшить количество визуализаций каждого объекта в Unity.
- Используйте карты освещения, чтобы «запечь» (предварительно вычислить) освещение и тени там, где это необходимо. Это увеличивает время сборки, использование памяти во время выполнения и пространство для хранения, но может повысить производительность во время выполнения.
- Если ваше приложение использует упреждающий рендерингпуть рендеринга, при котором каждый объект отображается за один или несколько проходов, в зависимости от освещения, влияющего на объект. Сами источники света также обрабатываются Forward Rendering по-разному, в зависимости от их настроек и интенсивности. Подробнее
См. в Словарь, уменьшите количество попиксельных источников света в реальном времени, воздействовать на объекты. Дополнительную информацию см. в разделе Прямой путь отрисовки. - Тени в реальном времени могут требовать больших ресурсов, поэтому используйте их экономно и эффективно. Дополнительную информацию см. в разделе Устранение неполадок с тенью: производительность тени.
- Если ваше приложение использует Reflection Probesкомпонент рендеринга, который захватывает сферическое изображение своего окружения во всех направлениях, как камера. Захваченное изображение затем сохраняется как кубическая карта, которую можно использовать для объектов с отражающими материалами. Подробнее
См. в Словарь, убедитесь, что вы оптимизируете их использование. Дополнительные сведения см. в разделе производительность Reflection Probe.
- Вы можете уменьшить объем работы, которую Unity должна выполнять для подготовки и отправки команд рендеринга, обычно отправляя их на графический процессор более эффективными «пакетами». Этого можно добиться несколькими способами: дополнительную информацию см. в разделе Оптимизация вызовов отрисовки.
Многие из этих подходов также сокращают нагрузку на GPU; например, уменьшение общего количества объектов, отображаемых Unity в кадре, приведет к снижению нагрузки как на ЦП, так и на ГП.
Снижение затрат GPU на рендеринг
Есть три основные причины, по которым графический процессор может не завершить свою работу вовремя для рендеринга кадра.
Если приложение ограничено скоростью заполнения, графический процессор пытается отрисовать больше пикселейнаименьшую единицу компьютерного изображения. . Размер пикселя зависит от разрешения вашего экрана. Пиксельное освещение рассчитывается для каждого пикселя экрана. Подробнее
См. Словарь на кадр, чем он может обработать. В этом случае рассмотрите следующие варианты:
- Определите и уменьшите перерасход в своем приложении. Наиболее распространенными причинами перерисовки являются перекрывающиеся прозрачные элементы, такие как UI(пользовательский интерфейс) Позволяет пользователю взаимодействовать с вашим приложением. Подробнее
См. в Словарь, частицы и спрайтыДвухмерные графические объекты. Если вы привыкли работать в 3D, спрайты — это, по сути, просто стандартные текстуры, но есть специальные приемы комбинирования текстур спрайтов и управления ими для повышения эффективности и удобства во время разработки. Подробнее
См. в Словарь. В редакторе Unity используйте режим рисования с перерисовкой, чтобы определить области, в которых возникает проблема. - Снижение затрат на выполнение фрагментных шейдеров. Для получения информации о шейдерепрограмме, работающей на графическом процессоре. Подробнее
Посмотрите в Словарь производительность, посмотрите Производительность шейдеров. - Если вы используете встроенные шейдеры Unity, выберите их из категорий Mobile или Unlit. Они также работают на немобильных платформах, но представляют собой упрощенные и приближенные версии более сложных шейдеров.
-
Динамическое разрешениеНастройка камеры, позволяющая динамически масштабировать отдельные цели рендеринга, чтобы уменьшить нагрузка на GPU. Подробнее
See in Словарь – это функция Unity, позволяющая динамически масштабировать отдельные цели рендеринга. .
Если приложение ограничено пропускной способностью памяти, графический процессор пытается прочитать и записать в выделенную память больше данных, чем он может обработать за кадр. Обычно это означает, что текстур слишком много или текстуры слишком велики. В этом случае рассмотрите следующие варианты:
- Включите мип-карты для текстур, расстояние от которых до камеры изменяется во время выполнения (например, для большинства текстур, используемых в 3D-сцене). Это увеличивает использование памяти и места для хранения этих текстур, но может повысить производительность графического процессора во время выполнения.
- Используйте подходящие форматы сжатия, чтобы уменьшить размер текстур в памяти. Это может привести к более быстрому времени загрузки, меньшему объему памяти и повышению производительности рендеринга с помощью графического процессора. Сжатые текстуры используют только часть пропускной способности памяти, необходимой для несжатых текстур.
Если приложение ограничено обработкой вершин, это означает, что GPU пытается обработать больше вершин, чем может обработать за кадр. В этом случае рассмотрите следующие варианты:
- Снижение затрат на выполнение вершинных шейдеровпрограммы, которая запускается для каждой вершины 3D-модели во время рендеринга модели. . Подробнее
См. в Словарь. Сведения о производительности шейдеров см. на странице Производительность шейдеров. - Оптимизируйте свою геометрию: не используйте больше треугольников, чем необходимо, и старайтесь, чтобы количество швов UV-отображения и жестких краев (двойных вершин) было как можно меньше. Дополнительную информацию см. в разделе Создание моделей для оптимальной производительности.
- Используйте Уровень детализацииУровень детализации (LOD) — это оптимизация, которая уменьшает количество треугольников, которые Unity должна отображать для GameObject, когда его расстояние от камеры увеличивается. Подробнее
См. в системе Словарь.
Уменьшение частоты рендеринга
Иногда вашему приложению может быть полезно уменьшить частоту кадров рендеринга. Это не снижает затраты ЦП или ГП на рендеринг одного кадра, но снижает частоту, с которой Unity делает это, не влияя на частоту других операций (таких как выполнение скрипта).
Вы можете уменьшить частоту кадров рендеринга для частей вашего приложения или для всего приложения. Уменьшение частоты кадров рендеринга для предотвращения ненужного энергопотребления, продления срока службы батареи и предотвращения повышения температуры устройства до уровня, при котором частота процессора может быть снижена. Это особенно полезно на портативных устройствах.
Если профилирование показывает, что рендеринг потребляет значительную часть ресурсов вашего приложения, подумайте, какие части вашего приложения могут выиграть от этого. Общие варианты использования включают меню или экраны паузы, пошаговые игры, в которых игра ожидает ввода, и приложения, в которых контент в основном статичен, например автомобильный пользовательский интерфейс.
Чтобы предотвратить задержку ввода, вы можете временно увеличить частоту кадров рендеринга на время ввода, чтобы по-прежнему ощущалась отзывчивость.
Чтобы настроить частоту кадров рендеринга, используйте API OnDemandRendering. API особенно хорошо работает с пакетом Adaptive Performance.р>
Примечание. Приложения виртуальной реальности не поддерживают рендеринг по требованию. Отсутствие рендеринга каждого кадра приводит к рассинхронизации изображения с движением головы и может увеличить риск укачивания.