MultLabs

MultLabs 

Аддоны, модификаторы и полезные штуки для Blender

18subscribers

56posts

Showcase

8
goals1
0 of 100 paid subscribers
У самурая нет цели, только путь!

Оптимизированный скаттер травы (и не только травы)

Вот недавно для мульта я делал скаттер травы. Ну что же может быть проще, создаем на поверхности точки и инстансим траву на этих точках:
Что может быть проще?
Вопрос тут в том, а сколько объектов потянет ваша система, ведь травы должно быть много. Моя пустая сцена с 40 тысячами травинок уже начинает проседать:
Неужели 40 тысяч объектов по 40 полигонов (1.2млн поликов) это уже лимит? Да конечно, можно вывести на предпросмтр меньше инстансов, а все выводить только на рендере, но на самом деле есть способ все оптимизировать.
Тут проблема не в количестве полигонов, а в количестве объектов, как таковом. Дело в том, что каждый объект отрисовывается отдельным запросом в видеокарту, который называют Draw call. Мостик между видеокартой и процессором - это бутылочное горлышко, которое будет тормозить всю систему. В движках, таких как Unity вы можете узнать количество запросов, тогда как в Blender такой функционал отсутствует.
Итак, что-же нам делать, чтобы уменьшить количество запросов? Есть такая штука как Realize Instances, она сконвертирует наши отдельные инстансы в один большой меш. При этом, если мы ничего не меняем в меше от фрейма к фрейму, выглядит все хорошо:
Но вот сам процесс realize instance очень тяжелый:
Что даст нам очень маленький FPS если в модификаторе что-то меняется:
Поэтому, чтобы сделать скоростной скаттер, я совместил оба подхода, чтобы у нас было и маленькое количество релизнутой геометрии и не много инстансов. Сначала мы делаем блоки травы, конвертируем ее в меш а потом распределяем ее по поверхности.
И вуаля, даже с 10x большим количеством травы, (12млн поликов) ничего не проседает:
Начинает проседать уже на 120 млн:
Я для себя сделал кучу настроек скаттера, добавил анимацию легкого ветерка. С помощью тест функций можно посмотреть распределение блоков по поверхности и как выглядят сами блоки. Плюс самих блоков можно сделать несколько, что добавит рандомности:
Так выглядят ноды:
Этот скаттер с кучей настроек выложу подписчикам с уровнем исходники
Subscription levels3

Исходники

$3.6 per month
Доступ к файликам

Бонусы

$7.2 per month
Доступ к файликам и бонусы

Супер-подписка

$21.4 per month
Подписка для блендер-гуру
Go up