Ускоряем рендер многократно...

...имитацией эффекта Glossy Refraction на этапе пост-обработки.

Не знаю как у короны, но у Vray этот эффект нагибает любую рендер ферму, серьезно столкнулся с  такой проблемой я при рендере этой сцены:

Видно что шумит стекло, пришлось убавить сэмплинг и использовать всевозможные дефликеры, иначе ждать мне неделю, а так всего пара суток)) Апосля таких событий я сильно задумался о редшифте и иже с ним, но примерно в то же время попалась мне на глаза статья о том, как рендерится кадр в Doom (2016). Вот она .  Классная статья, классный движок, классные приёмы оптимизации. Но как мне это поможет в работе, я тогда еще не совместил в голове. И вот, буквально сегодня руки дошли до эксперимента, результаты его меня вполне устроили, но об этом позже.

Давайте начнем с вводных данных, а именно материал в 3д максе и необходимые опции. Стандартный VrayMaterial  у которого в слоте glossiness градиент в пределах 1-254 (это важно)

Эту картинку я использовал как референс. Вот что действительно важно - так это маски. Маски - наше всё при пост-обработке. Я использовал пасс VrayExtraTex, куда и вставил текстуру из glossiness, Важно отключить сглаживание именно этого пасса, чтобы уберечь себя от ненужных артефактов по краям. Еще тут есть Cryptomatte, он пригодится, чтобы после всех операций над пикселями окно в раму вернуть, еще и с антиалиасингом, да и вообще просто жить без него не могу теперь.

Теперь смело выключаем текстуру с glossiness и ускоряемся в 12 (двенадцать!) раз.

Все, дальше работа в Nuke (Fusion если хотите, если повторите в фотошопе, будет вообще круть) Вот такая "расческа" у меня вышла, конечно до изящества в Doom далеко, никакие экспрешны я не использовал, и вместо понижения разрешения как в Doom я использовал обычный Box Blur, бокс мне показался более подходящим и считается он пошустрей чем Гаусс, но это не точно.

Давайте пошагово разберем, что же тут к чему. Вот первый блок, тут все  просто: пятикратное повторение размытия начиная от значения радиуса 20, заканчивая 240. Тут все на глаз, оглядываясь на референс. Если первые  три блёра  идут последовательно друг за другом, то два последних с высокой степенью размытия, идут от исходной картинки, так хайлайты сильнее и мне визуально нравится больше, но я пробовал и все последовательно и все от исходника. Почему именно пять блёров? Это оказалось минимально достаточным количеством, чтобы  гладко их сшить, четыре уже видно стыки, шесть - избыток.

Следующая операция - получение индивидуальной маски на каждую степень размытия.

Тут я ничего лучше не придумал, кроме как воспользоваться топорным люма-кейером. Да можно изящнее, не спорю, зато наглядно и ползунки вручную покрутить можно. Каждый кейер режет свой диапазон из маски и выдает в альфа-канал свой кусочек.

Ну теперь-то осталось только это совместить. 

Каждый размытый проход накладывается поверх предыдущего через Copy, подмешивается по своей маске. Получается 6 степеней размытия от 0 до 240 с плавными переходами.

Давайте глянем, что будет, если  простой градиент заменить на более интересную текстуру.

Разумеется, результат не один-в-один. Такого и быть не могло. Но выигрыш в рендертайме колоссальный. И при этом стекло из Vray все равно шумит, хоть настройки я поставил выше своих средних (min shading rate=12, max subdivs=16, Noise threshold=0.01)

Да, кстати, Cryptomatte, зачем он тут. Дак вот, после всех размытий получается такой результат.

Мало того, что лесенка от маски, так еще и размыто все подряд. Для этого вычленяем маску по объекту и мерджим поверх основной картинки наш результат. Вуаля, эффект только на  стекле.

Вот и всё,  один раз настроив будет все работать на любой сцене, только значения маски подбирать по ситуации. 

Комментарии (14)

+2
Nickcolas
Великолепно! Такого подхода раньше не встречал, статью обязательно нужно изучить.
+1
murza_v
Спасибо за урок,идея с блюром неплохая,очень даже пригодится.
+2
Artnway
Отличный урок. Матовые стекла это постоянная боль для любого рендер движка. Будет экспериментировать)
+1
olegwer
За Нюк респект : )
Тоже использую этот фейковый метод, только намного проще, без градиентов.
0
Uraken
обьясните мне, что не так с выделением стекла по mtl id и блюром в фотошопе?
+2
olegwer
1. проблемы с антиалиазингом.
2. равномерный нереалистичный блюр
3. не применишь в анимации

Кстати, можно кинуть UV пасс (position pass) на все объекты в сцене, а потом в криптоматом цеплять нужные объекты и размывать их вообще как хочешь.
0
CeBeP_2012
Это все на ура работает только в ситуациях, когда все что за стеклом примерно на одном расстоянии от камеры.
0
ViTcore
При размытии 240, что объект на расстоянии 1м, что 100м, разницы не видно, ну и что мешает подмешать к этому делу depth канал и получится уже шустрый Zdefocus на минималках и без боке.
0
CeBeP_2012
А если мне надо не 240, а 120 например? Прирост скорости по твоему методу конечно будет ощутимым, но количество возни с этим (причем возни вручную) слишком большое как по мне.
0
ViTcore
Это вообще специфичное решение под специфичную задачу. Если площадь такой поверхности в кадре небольшая, размытие небольшое, шум не критичен, то и заморачиваться не стоит. А когда надо отрендерить в 4к 1000 кадров наподобие примера из второй картинки, то поработать ручками 3 минуты (а сейчас 3 секунды,т.к. у меня теперь готовая гизма с парой ползунков) гораздо выгоднее ожидания рендертайма на несколько суток или оплаты рендер-фермы.
0
CeBeP_2012
Не, ну если 1000 кадров в 4К то конечно. Видео кстати хорошее, только коротковато - в таких брекдаунах обычно все основные слои показывают, не только депт.
0
DoCentttt
А не проще использовать виреевский денойзер обычный? Он на выходе даст аналогичное качество.
+1
ViTcore
Не выдаст, чтобы сравнять по скорости (все равно не получится, я достиг 22 кратной разницы немного покрутив еще после написания урока) придется сильно даунсэмплить Vray и тогда никакой денойзер уже не спасет, сопутствующая потеря деталей, артефакты на анимации. И кстати, денойзер нехило так тормозит композ, по крайней мене на GTX 1060, всегда приходится делать прекомпоз денойзнутый.
0
skyland_studios
Эммм а если правки а если то да сё.. время человека всегда будет дороже чем вычислительные мощности.. данынй метод будет актуален может быть ещё пару лет. и то думаю большинство людей даже не испытают его ибо это гемморно. легче и дешевле арендовать рендерферму и заниматься другими делами) а уж через пару лет я более чем уверен грядёт будущее за рендером на видеокартах. куда проще нажать и подождать на хорошем оборудовании допустим, если это 20 камер и на каждой потом будут правки допустим. чем платить человеку который будет это всё потом сидеть и собирать. возможно конечно я это пишу так как никогда таковых проблем не возникало (всегда было проще подождать чем выдумывать подобные методы)) так что не воспринимайте ни в коем случае это как критику. просто решил вот высказаться)