Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Unity3D: как работает статический батчинг?

Unity3D: как работает статический батчинг?

AlerrПостоялецwww3 янв. 201815:17#0
Привет всем!
Казалось бы вопрос затертый до дыр, описание того как работает статический батчинг есть везде:
геометрия стат.обьектов, имеющих один материал, собирается в 1 меш и рендертся за 1 проход.
Но у меня возникло несколько вопросов, сомневаюсь в том, что понимаю полностью особенности статического батчинга, поэтому спрашиваю у более опытных.

Вопрос 1:
Если все обьекты собираются в 1 обьект, то есть в одну геометрию, то выходит, что culling камеры перестает работать? То, что находится за камерой тоже должно же рендериться так как обьект один. Возможно идет исключение некоторых полигонов благодаря Cull в шейдере. Верно мыслю? В этом случае отпадает необходимость в куллинге на CPU?
Пробовал статический обьект деактивировать/активировать: .SetActive(false/true). Он не рендерится/рендерится, не исключается ли он из статического батчинга?

Вопрос 2:
Если статическому обьекту менять sharedMaterial, то он исключается из статического батчинга? Или его геометрия "припекается" к другой геометрии с подобным материалом?

foxesПостоялецwww3 янв. 201817:34#1
Alerr
> Возможно идет исключение некоторых полигонов благодаря Cull в шейдере. Верно
> мыслю?
По факту смысл куллинга избавиться то лишнего Drawcall. Невидимые треугольники нагрузки не несут, а если и несут то настолько мизерную что выгоды не получишь.
Alerr
> Если статическому обьекту менять sharedMaterial, то он исключается из
> статического батчинга? Или его геометрия "припекается" к другой геометрии с
> подобным материалом?
Тут лучше пользоваться чем нибудь вроде DrawMesh. Там наглядно видно что материал с мешем ни как не связан.

Если вся геометрия представлена одним объектом, то и нагрузка рендеринга идет уже только от объема закрашенных/отрисовываемых пикселей. В основном потому что количество трианглов на один закрашиваемый пиксель меньше 1. В целом же, как и всегда, все будет зависеть от объема обрабатываемой информации. Поэтому все нужно исследовать опытным путем на конкретных данных.

Конкретно батчинг в юнити обещает что если у тебя много статичных объектов с одинаковым материалом, то все они сольются в один объект и таким образом он автоматически тебя избавить от DrawCall. То есть если им всем поменять материал на одинаковый, то это также должно работать. Если же ты меняешь материал у одного объекта, то перепекать такой объект будет накладно. Скорее всего он останется со старым материалом. Запекание происходит один раз для всей сцены на старте, иначе нет смысла.

Раньше эта тема работала отдельным скриптом, склеивала все дочерние объекты в один мешь и отключала их на старте.

Правка: 3 янв. 2018 18:09

/ Форум / Программирование игр / Графика

2001—2018 © GameDev.ru — Разработка игр