2016-11-30 10 views
1

Я работаю над приложением 360 видеопроигрывателя для платформы VR и с нетерпением жду его оптимизации для мобильных платформ. В это время у меня есть вопрос относительно статического дозирования.Как работает Static Batching в Unity3D

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

Я отмечу эту сферу как статическую для дозирования или оставить ее?

Если я отмечаю движущийся объект как статический, это повлияет на производительность?

+0

Я бы сказал, что статическое дозирование ничего не изменит в вашем случае, так как материал, вероятно, не будет использоваться совместно с другими объектами. Однако, если у вас было 1 куб, 1 сфера и 1 цилиндр были статическими, отображающими одно и то же видео (и из того, что они использовали один и тот же материал), мне бы очень хотелось, чтобы это улучшало характеристики (но я не совсем уверен в этом). .. – Kardux

ответ

2

Обычно каждая сетка в вашей сцене отображается одна за другой. Статическое дозирование будет пытаться объединить несколько сеток вместе, чтобы все они могли быть собраны вместе. Это потенциально может привести к значительному повышению эффективности привлечения вызовов.

Unity по-прежнему отслеживает отдельные GameObjects в каждой партии, что полезно в случае, если они могут быть отбракованы (что дополнительно улучшает производительность рендеринга) или в случае их удаления из пакета.

Есть некоторые условия.

Нельзя перемещать статическую геометрию. После того, как сетки были объединены вместе, перемещение любого GameObject внутри партии нарушило бы некоторые предположения о том, как эта сетка была создана. Вы можете попросить Unity перемещать статическую геометрию (и она будет пытаться!), Но это приведет к возникновению ошибок и замедлений.

Все объекты в статической партии должны иметь общий экземпляр материала. Текстурирование текстур прекрасное, и редактирование свойств материала прекрасное, до тех пор, пока вы сохраняете один экземпляр этого материала (обратите внимание, что вызов renderer.material клонирует материал, поэтому вместо этого вы можете редактировать renderer.sharedMaterial).

В большинстве случаев самый простой способ активировать статическое дозирование - это пометить объект GameObject как статический в редакторе уровня Unity. Это автоматически вызовет процесс статического дозирования во время сборки. Если вам нужна статическая дозировка в редакторе или если вы создаете статическую геометрию во время игры, вы можете использовать скрипт для использования классов StaticBatchingUtility для создания пакетов «на лету».

Если я отмечаю движущийся объект как статический, это повлияет на производительность?

Это повлияет на производительность и может вызвать ошибки. Не делай этого.

Я отмечу эту сферу как статическую для дозирования или оставить ее?

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

 Смежные вопросы

  • Нет связанных вопросов^_^