Дихроичное стекло в Corona Renderer
@marchik3dСалют!
Сегодня в текстовом формате, наконец-то, поговорим о дихроичном стекле и том, как имитировать его в наших фотореалистичных визуализациях без излишней головной боли (ну разве что чуть-чуть).
Рано или поздно практически все визуализаторы сталкиваются с необходимостью создания подобных материалов, такое стекло достаточно часто используют при оформлении современных офисов, из него же делают витражи, декор и инсталляции для интерьеров.
В процессе своего небольшого "исследования" я перепробовал всевозможные варианты создания такого шейдера, пытаясь реализовать различные сценарии с референсов. В этой статье я не буду освещать все мои попытки, остановлюсь лишь на том, что действительно сработало для меня (пусть оно вам и может показаться не очень логичным) и на том, что я сам в дальнейшем буду использовать при решении аналогичных задач.
Кусочек теории
Чтобы воссоздать — надо понять.
Для начала давайте разберёмся с самим понятием дихроизма.
Дихроизм —различное поглощение анизотропным веществом света в зависимости от его поляризации (анизотропия поглощения). Поскольку поглощение зависит также и от длины волны, дихроичные вещества оказываются различно окрашенными при наблюдениях по разным направлениям, отсюда и назввание (от греч. δίχροος – двухцветный)
Простым языком — вещество меняет цвет, реагируя на условия освещения/положение наблюдателя.
Технически это либо стекло с многослойным напылением оксидов металлов, где каждый слой имеет свой точно рассчитанный IOR и толщину, либо стекло покрытое специальной полу-зеркальной плёнкой, которая и даёт необходимый эффект.
Конкретный тип для нас значения не имеет, так как мы не сможем полностью физкорректно воссоздать (в виде, пригодном для продакшена) ни один из них. Corona Renderer просто не располагает нужными шейдерами для имитации нюансов тонкоплёночной оптики.
А раз мы не можем использовать достоверную модель, мы будем имитировать очевидные свойства, всё равно наши зрители воспринимать результат будут эмпирически.
При таком подходе очень важно иметь под рукой как можно больше референсов того, что нам требуется воссоздать, поэтому получив в работу объект с такими элементами обязательно запросите референсы по конкретному типу покрытия (наименование плёнки, сайт производителя и т.д.).
Анализ референсов
Анализируя референсы выше, можем отметить что основных наблюдаемых свойств, которые характерны для большинства примеров всего 4:
1) Объекты в отражении стекла имеют цветной оттенок.
2) Объекты за стеклом имеют оттенок, отличный от первого.
3) При интенсивном освещении "тень" от стекла окрашена в третий оттенок.
4) При изменении угла наблюдения стекло проявляет иридисцентные свойства, то есть стекло меняет цвет/переливается.
Имитируя поочерёдно каждое из этих свойств мы и сможем добиться желаемого результата.
В процессе изучения вопроса я воссоздавал различные образцы дихроичных плёнок и некоторые из них задаются буквально одним параметром, другие имеют очень специфичные свойства, которые не увязываются в простые закономерности, создание такого шейдера каждый раз будет творческим и не быстрым процессом, который включает в себя активное фейкование, подгонку под ракурс/условия освещения и отсутствие сна.
Инструментарий
Выделю основные инструменты, которые могут стать нам подспорьем.
Материал CoronaLegacyMtl — в отличии от CoronaPhysicalMtl он позволяет свободнее фейковать, задавая различные параметры для составляющих Reflection и Refraction независимо.
Галочка Thin в разделе Refraction материала CoronaLegacyMtl — убирает преломления как таковые, делая из нашего стекла плёнку, в некоторых случаях очень сильно помогает результату.
Материал RaySwitchMtl — в отдельных случаях поможет нам добиться нужного оттенка для "тени" нашего стекла.
Карта Falloff — позволит нам задать зависимость цвета от угла обзора (+ она имеет очень занятный баг, который мы сможем использовать нам на пользу)
Карта Gradient Ramp — позволит контролировать цвет отдельных областей нашего стекла, так же её можно использовать, чтобы "заремапить" другую карту, например Noise или Falloff.
Шейдер Sigertexmaps ThinFilm от Siger Studio — он собственно и создан для имитации тонкоплёночной оптики, но по итогу, я не использовал его ни в одном из вариантов, хотя в ряде случаев может пригодиться.
Галочка Enable в разделе Caustics Solver во вкладке Performance в настройках рендера — в отдельных случаях позволит очень точно имитировать референс, добавляя каустику отражений от нашего стекла на окружающие объекты.
Фотошоп или любой другой инструмент пост-обработки — позволит локально подкорректировать оттенок, в некоторых особо специфических случаях он будет просто необходим, особенно учитывая тот факт, что большинство из референсов которые вы найдёте будут знатно обработаны фотографом.
Пример 1
Итак, приступим.
Для начала воссоздадим приблизительно сцену с аналогичными условиями освещения и ракурсом, данный момент очень важен, так как внешний вид стекла будет напрямую зависеть от этих двух параметров.
Ну а теперь сама магия:
И вуаля! Мы получаем очень похожий на референсное изображение эффект.
Такое поведение шейдера является своего рода багом (ну а в нашем случае — очень полезной фичей).
Насколько мне хватает моего понимания, CoronaLegacyMtl состоит из 5 слоёв, с приоритетом в порядке убывания: Reflection, Refraction, Translucency, Volumetric, Diffuse, каждый из которых перекрывает друг друга + в материале реализован принцип Energy conservation, то бишь сохранения энергии.
Простыми словами, на объект с применённым материалом попадает 100% света и все они до последнего процента распределятся между нашими пятью слоями (в зависимости от их настройки), света на выходе не станет больше и он не растворится бесследно в варпе.
Слой с отражениями имеет наивысший приоритет, поэтому когда мы отключаем френель (затухание отражений), то на слой Refraction ничего не остаётся, объект выглядит как непрозрачное зеркало.
Но стоит нам добавить карту CoronaColor, и отражаться станут не все 100% света, а только та часть спектра, которую мы зададим, соответственно всё остальное уйдёт в следующий по списку активный слой, то есть Refraction.
Таким образом, мы воссоздали 3 из 4-х необходимых нам свойств (1,2 и 4), которые наблюдаются на референсе. Остаётся только изменить оттенок для "тени" стекла.
Сделать это можно используя CoronaRaySwitchMtl, с помощью которого мы подменим материал, который будет участвовать в формировании GI, а значит и отвечать за наши тени.
Можем заметить что на референсе наша тень имеет градиент цветов от фиолетового к синему, а верх бокса на переднем плане окрашен в розовый цвет, мы сможем реализовать это, заменив наш CoronaColor на GradientRamp, не забыв про правильные текстурные координаты у нашей модели стекла.
На данном этапе мы реализовали все 4 свойства, которые видим на референсе, дело за финальной доработкой.
На итоговый результат могут так же оказать влияние параметры слоя Diffuse и слоя Translucency, так как по схеме, которую я объяснял выше, из общих 100% света, которые попали на материал, мы отсекли часть на "подкрашенные" отражения, часть на "подкрашенный" слой refraction, а остаток света от refraction просачивается на diffuse, а при активации транслюенции ещё и на неё:
На данном этапе в сравнении с референсом наше стекло выглядит следующим образом:
Если нашей задачей стоит именно повторить внешний вид референса то открываем фотошопы и дорабатываем рендер.
Абсолютно аналогичным способом, заменяя цвета получаем и жёлто-фиолетовую вариацию нашей плёнки:
Пример 2
Рассмотрим ещё один пример, в котором коснёмся иридисцентного (радужного) эффекта и наличия нескольких стёкол в кадре, находящихся под разными углами.
Для начала создаю тёмно-серый плейн пола, а на фон загружу рандомную экстерьерную HDRI карту с polyhaven.com и переключу её в режим проекции Dome для наглядности, привязав положение к dummy-объекту
Таким образом мы создали карту, которая меняет цвет вдоль всего видимого спектра в зависимости от угла объекта по отношению к камере.
А теперь я расскажу про "полезный баг" со встроенной картой Falloff, про который упоминал в начале, и который я обнаружил в процессе экспериментов.
Как вы могли заметить, при вращении камеры цвет тени от стекла не меняется, хотя очевидно, что угол между Z-осью камеры и объектом меняется вместе с цветом отражений и преломлений.
То есть, текущее поведение нашего материала вполне себе физкорректно, его свойства зависят от положения источника света по отношению к объекту, а не только наблюдателя, хотя с точки зрения именно шейдера, такое поведение не должно прослеживаться.
Причину такого "выгодного" бага я так и не выяснил, не проверял так же поведение карты в других движках, так что если вы работаете с другими рендер- движками, где поддерживается стандартная, или есть свои проприетарные фалоффы, буду рад результатам экспериментов в комментариях под уроком.
Итак, вернём нашую родную "сломанную" карту Falloff и продолжим.
Почти зеркальная поверхность стекла даст быструю и чёткую каустику отражений, которая будет очень здорово смотреться и взаимодействовать с тенями от других стёкол, более всего это применимо именно к экстерьерным сценам или в случаях наличия ярких направленных источников света.
При желании, вместо нашего градиента можно использовать ThinFilm шейдер от Siger Studio, но я не вижу в нём особенных преимуществ, если у нас нет строго заданных толщин для плёнки, подбирать нужные оттенки всё равно придётся на глаз.
Эпилог
Используя такой подход в создании шейдера как базу, мы можем доработать сам "стекольный бутерброд" до более реалистичного состояния, добавив слой обычного архитектурного стекла с толщиной, получив честный refraction, торцы с фасками, несовершенства в канале glossiness/roughness, неровности в бампе и так далее.
Ниже представлены несколько визуализаций, которые я выполнил, используя описанные выше принципы. В качестве референсов использованы фотографии Timothy Kaye.
В ряде случаев, с помощью пост-обработки я локально корректировал цветовые оттенки для более точного соответствия референсам, но в подавляющем большинстве задач, я уверен, можно обойтись и без неё.
В качестве бонуса могу посоветовать обращать особенное внимание на отражения в вашем стекле, и соответственно, на наполнение сцены, которое будет за них отвечать. Именно отражения, образуя цветовой контраст с преломлениями, отличают дихроичное стекло от просто цветного.
Представленный метод не позиционируется, как истина в последней инстанции, это скорее результаты моих экспериментов, которыми я рад поделиться с вами, так же с большим удовольствием прочитаю ваши соображения и комментарии под этот статьёй.
Закончу банальным — не бойтесь экспериментировать и прощупывать границы движка, и однажды из вашего баловства родится шедевр. Не забудьте подписаться на мой канал в телеграме, впереди будет ещё больше полезных фишек. Надеюсь сегодня вы узнали что-то новое.
Файл сцены из 1 примера (max 2019+) + pdf