#unity3d
#unity3d
Вопрос:
Я работаю с Unity 2019.4.11f1, «Универсальным конвейером рендеринга» с «Облегченным RP» (версия пакета 7.5.1). Я определил «Данные 2D-рендеринга» для работы с 2D-источниками света. В моей игре у меня четыре 2D-источника света:
- Две «точечные» 2 подсветки (каждая точечная подсветка имеет 3 целевых слоя сортировки)
- Два «глобальных» 2 подсветки. Один из них с 3 целевыми слоями сортировки (освещает всю мою игру, кроме персонажей), а другой с 1 слоем сортировки (освещает только моих персонажей).
Я разрабатываю 2D мобильную игру для детей и использую 2D огни для украшения. Одновременно включается только ОДИН «точечный» 2DLight. «Глобальный» индикатор, который освещает моих персонажей, всегда включен. «Глобальный» индикатор, который освещает всю мою игру (кроме персонажей), включается только тогда, когда точечный индикатор выключен.
В определенные моменты в моей игре я включаю / выключаю «точечные» и «глобальные» источники света с уже описанным выше ограничением.
Все работает отлично, пока я не использую тени на своих персонажах. Когда я использую тени, частота кадров снижается примерно до 10 кадров в секунду, в противном случае она составляет около 27.
Моя 2D-игра довольно проста. Мои персонажи — круглые спрайты (как монета), поэтому тени получаются до смешного простыми. Чтобы повысить производительность, я установил «Масштаб текстуры рендеринга» равным 0,4 (вместо значения по умолчанию 1) в данных объекта 2D-рендеринга. Хотя после этого производительность значительно улучшилась, она все еще низкая.
У каждого персонажа (более 10 на экране, перемещающегося) есть компонент «Shadow Caster 2D (экспериментальный)» и установлен флажок «Отбрасывать тени».
Что еще я могу сделать для повышения производительности? Я провел много исследований и не могу понять, что еще я могу сделать.
Ответ №1:
Вы можете
- Уменьшите размер ваших спрайтов (или сжатие)
- Создание статических игровых объектов, которые не имеют движения
- Проверьте детали графики вашего рендеринга
- Вы можете вручную закрыть свою игру (вы можете включать и отключать gameobject в сцене)
- Вы можете использовать функцию OnBecameVisible() .
Я использую их для оптимизации своей urp-игры.
Комментарии:
1. Большое спасибо за ваш совет. Я провел много оптимизаций, включая некоторые из тех, о которых вы уже упоминали. Узкое место — это когда активируются тени, потому что в противном случае моя игра работает со скоростью (около) 30 кадров в секунду (максимум, которого достигает мой мобильный). Я понимаю, что проблема заключается не в неэффективности моей игры, а в чем-то в пакете «Облегченного RP», который при активации теней ухудшает всю игру. Не могли бы вы более подробно описать пункты 3 и 4?
2. Вы можете настроить параметры рендеринга urp, это может обеспечить некоторый прирост кадров в секунду. . (Вы можете увидеть в редакторе> качество> средство визуализации (в данном случае 2d-средство визуализации)) (Извините за элемент списка, это элемент списка stackoverflow : ( )
3. Да, я знаю, но очень сложно понять, что нужно изменить.
4. Например, вы можете уменьшить разрешение теней. Также, если вы используете постобработку, вы можете захотеть изменить свои эффекты, потому что некоторые эффекты могут напрягать систему.
5. Да, я установил «Масштаб текстуры рендеринга» на 0,4, чтобы повысить производительность. Но игра продолжает замедляться с течением времени. Как будто тени вызвали утечки памяти. Я пока не использую постобработку.