Один разработчик поделился результатами месяца работы над кастомным рендерером травы. Задача была в том, чтобы отрисовывать траву на огромных ландшафтах при стабильных 60 FPS.
Как устроена система:
— Terrain Provider: читает данные из стандартного покрасчика террейна Unity и конвертирует их в матрицы трансформации для BatchRendererGroup.
— Chunk Streaming: огромные массивы данных разбиваются на чанки и грузятся через Addressables. Если грузить всё разом, память быстро переполняется.
— CPU Culling через Burst: куллинг (вместе с тенями) занимает всего 1,5 мс вместо 8 мс на простых методах.
Шейдер смешивает разные карты шума (для порывов ветра и турбулентности) с волновой синусоидой, чтобы трава гнулась большими волнами — как в Horizon Zero Dawn или технодемке Time Ghost.
Главная проблема, с которой столкнулся автор — гигантский овердроу (перерисовка одних и тех же пикселей). Пришлось сильно упрощать геометрию лодов. А предрасчёт матриц для больших карт весил до 800 МБ, поэтому стриминг через Addressables оказался обязательным.
В общем, почитайте оригинальный пост, интересное. Публиковать это автор не хочет, просто делится опытом. Писал для своей игры.
@make_game
Post #1836
1.87K