Найти в Дзене

✏️Заметка: Батчинг - не всегда хорошо

Батчинг - это способность движка объединять объекты с одним и тем же материалом, находящихся примерно в одном месте на экране, с лимитом на количество вершин, объединять в один меш, дабы отрисовать в один дроукол (вызов отрисовки). Бывает статический батчинг (объектов, помеченных static в редакторе), есть динамический. И всё это в сумме звучит очень привлекательно, ведь меньше дроуколов - выше фэпээсы. Но есть нюанс, а именно - динамический батчинг. При статическом батчинге, меш выстраивается единожды при старте сцены, поэтому тут всё хорошо. А вот при динамическом - каждый кадр, при чем на CPU. Отсюда вырастает узкое горлышко системы: если материал будет один (например палитра для лоуполи визуала), а объектов сотни/тысячи с динамическим батчингом, то есть ненулевая, а вполне ощутимая вероятность, что CPU целевого устройства подустанет и будет дропать FPS. Особенно на слабеньких девайсах. Говорят юнити это старается нивелировать жестким ограничением количества вершин (~300), но узко

✏️Заметка: Батчинг - не всегда хорошо

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

Бывает статический батчинг (объектов, помеченных static в редакторе), есть динамический. И всё это в сумме звучит очень привлекательно, ведь меньше дроуколов - выше фэпээсы. Но есть нюанс, а именно - динамический батчинг.

При статическом батчинге, меш выстраивается единожды при старте сцены, поэтому тут всё хорошо. А вот при динамическом - каждый кадр, при чем на CPU. Отсюда вырастает узкое горлышко системы: если материал будет один (например палитра для лоуполи визуала), а объектов сотни/тысячи с динамическим батчингом, то есть ненулевая, а вполне ощутимая вероятность, что CPU целевого устройства подустанет и будет дропать FPS. Особенно на слабеньких девайсах.

Говорят юнити это старается нивелировать жестким ограничением количества вершин (~300), но узкое место остается узким местом все равно.

Решение этому есть, и оно даже в Unity уже существует (давненько). Использование GPU Instancing на материале, а динамический батчинг можно отключить в таких случаях. GPU Instancing - технология, при которой на отрисовку передается один меш, с параметрами сколько отрисовать, где, с какими поворотами и все такое. То есть этапа склейки меша нет в принципе.

#полезное