Pull to refresh
7
0

Android Engineer

Send message
Почему будет 8000 материалов?
Graphics.DrawMeshInstanced — рисует сетку с одним материалом много раз. На этапе регистрации отрисовки мы передаем позиции, поворот и кадр для каждого обьекта. А дальше уже видеокарта рисует эти обьекты. В вершинной функции выставляем персонажа в нужную позу и точку пространства.

За счет того что мы используем DrawMeshInstanced а не по отдельности выставляем позу для каждого обьекта и получаем экономию. B основе этого подхода лежит техники рисования растительности (деревьев, травы).

И на скришотах вы можете посмотреть что для стандартного подхода получаем 3651 батч а для GPU instance — 11

Есть такая библиотека которая не генрит много мусора как стандартная LINQ, и оптимизирована для работы с UNITY:
smooth.foundations
Но в вашем случае лучше использовать IndexOf дабы не добавлять зависимости
StructiredBuffer поддерживается только ComputeShader-ом. Я не совсем понимаю как это должно работать на ComputeShader. Возможно вы могли бы предоставить пример.
Спасибо
Задача была рисовать 100 — 1000 однотипных анимированных объектов.
ComputeShader нужен для произведения расчетов без отрисовки результата на экран.
Все верно. Попробую переформулировать, во избежании. GPU работает медленнее приблизительно в 3 раза
SadOcean спасибо.

— Эта техника будет хорошо работать если у нас одна моделька с одним материалом. На сторону шейдера мы передаем массивы позиций, поворотов и ключ к кадру. Поскольку все анимации сохранены в одной текстуре последовательно, нам ничто не мешает для разных объектов отсылать разные ключи. Следовательно часть объектов может быть в одной анимации, а часть в другой. И производительность не должна пострадать.
— Состояние анимации, а также позиция и поворот каждый кадр рассчитывается на стороне процессора.
— Я думаю эта техника будет полезна в RTS когда нам нужно рисовать большое количество юнитов.

Information

Rating
Does not participate
Location
Киевская обл., Украина
Date of birth
Registered
Activity