Хороша ли установка маски отбраковки камеры на ничего, когда пользовательский интерфейс закрывает экран?

У меня довольно большая и полная сцена, и поэтому я получаю много вызовов отрисовки.

Иногда я показываю видео в игре, которое занимает весь экран. Когда я тестировал свою игру с помощью инструмента профилировщика Unity, я заметил, что камера по-прежнему отображает все (хотя отсечение окклюзии включено и рассчитывается), и это приводит к задержке видео.

У меня вопрос, как отключить камеру?

Когда я отключаю компонент камеры или GameObject камеры, я получаю предупреждение ⚠ в игровом представлении с надписью No camera is rendering to this display. Что, я думаю, нехорошо (поправьте меня, если я ошибаюсь).

Поэтому мне было интересно, не заставит ли Unity остановить рендеринг сцены при отмене маски отбраковки на камере (установив для нее значение Nothing). Или он все еще работает в фоновом режиме? (Как и с элементами пользовательского интерфейса, которые все еще отображаются, даже если они полностью прозрачны).

заранее спасибо


person SagiZiv    schedule 27.06.2019    source источник


Ответы (1)


У меня довольно большая и полная сцена, и поэтому я получаю много вызовов отрисовки.

Я рекомендую активировать «Instancing» для ваших материалов, это может значительно уменьшить число вызовов отрисовки.

Когда открывается всплывающее окно пользовательского интерфейса, это может помочь удалить слой «По умолчанию» (или любой другой слой, которым является большинство ваших средств визуализации) с активных камер. Вы можете легко сделать это с помощью масок слоя. Или вы можете просто установить для Camera.main.farClippingPlane значение 1 или любое меньшее число.

person Mika    schedule 28.06.2019
comment
Спасибо, у вас есть ссылка, которая объясняет создание экземпляров, потому что я никогда не использовал ее. И я бы обязательно попробовал установить маску слоя при отображении видео. - person SagiZiv; 28.06.2019
comment
docs.unity3d.com/Manual/GPUInstancing.html Просто коснитесь материала. ты используешь. Вы можете определить две LayerMask в своем классе, например, public LayerMask UIOpen; public LayerMask UIClosed, а затем переключаться между ними. LayerMask отображается в инспекторе, поэтому вы можете просто нажимать на слои для каждой маски. - person Mika; 28.06.2019
comment
Я не проверял это, но установка Camera.main.clearFlags = CameraClearFlags.Nothing; должен оставить вас с последним кадром, который вы визуализировали. Если у вас есть прозрачные элементы пользовательского интерфейса, это может быть классным эффектом. Я не уверен, что это работает должным образом. - person Mika; 28.06.2019
comment
Вау, спасибо за отличный ответ. Это именно то, что я искал. Включение создания экземпляров действительно немного уменьшило количество вызовов отрисовки, и решение LayerMask отлично работает. Еще не пробовал решение очистки флагов, но как только смогу - person SagiZiv; 28.06.2019