image

Новости
Уроки и статьи
Загрузка
Обо мне
Ссылки

Switch to English
Одним из простых, но при это очень действенном методе оптимизации рендера является использование шейдеров типа mip_rayswitch. Подобных шейдеров существует несколько, например mip_rayswitch, mip_rayswitch_advanced, p_ray_type, ray_rype и ctrl.rays. Но суть не меняется, все они работают похожим образом.
В зависимости от типа луча переключаются между разными шейдерами. Например если нужно считать отражение, то рендерим синий шейдер, а если преломление или final gather, то красный. При этом в прямой видимости шейдер может быть другого цвета.
Делать разноцветные шейдера для отражения и преломления... конечно интересно, но зачем?
"В быту" это может пригодится для убавления колор блидинга (переносе цвета объекта), путем замены шейдера для лучей final gather на менее интенсивный цвет.
Это тоже все хорошо и работает, но в данной статье речь пойдет об использования подобных шейдеров немного для других целей, таких как оптимизация рендера.

Суть очень проста.
Например у нас есть салон автомобиля, где присутствуют материалы кожи, пластика, металла и тп. Почти везде используется окклюжен, размытое отражение и бамп. Результат нас устраивает, но видим, что такие шейдера работает не быстро. А надо бы еще и анимацию просчитать...

infniti gcoupe smooth shade

Для начала мы выбираем шейдер, которые занимает наибольшую площадь в сцене. И назначаем на эти объекты mip_rayswitch шейдер. К нему на основной слот подсоединяем наш сложный шейдер. Потом на слот 'final gather' и 'reflection' подсоединяем его копию, но уже без бампа, окклюжена и отражения (обычно просто lambert). В итоге получится, что в отражение, которое у нас сильно размытое, будет виден простой шейдер. Так же он будет виден и для FG. Так как отражение сильно размыто, в нем не будет видно отсутствие бампа, окклюжена и часто даже отражения. Но, если у вас все же видно отсуствие какого-нибудь эффекта, то можно его оставить, но с более низкими настройками качества, например для окклюжена можно поставить меньшее количество лучей.

ray_type graph before
Оригинальный граф сложного шейдера

ray_type graph
Граф после добавления mip_rayswitch

rayswitch AE
mip_rayswitch

Такой трюк можно проделать со всеми основными шейдерами.
В результате можно существенно сократить время рендера. А final gather при использовании подобного трюка часто еще и меньше "шумит". При этом картинка почти не меняется.

Например, время рендера следующей картинки в разрешение 1000x720 уменьшилось с 51m43s до 35m40s после использования mip_rayswitch на 6 основных материалах.
Как мы видим, время сократилось на 30%. Вторую картинку не показываю, поскольку она практически такая же.

infniti gcoupe result
Infiniti GCoupe

Конечный результат в анимации можно посмотреть на сайте www.infiniti-lab.ru
Проект реализован по заказу креативного агентства Red Keds для Infiniti.

Свои вопросы, предложения и пожелания прошу на puppet@rambler.ru
Удачи!
Ваш Puppet.