Анизотропия
Здравствуйте, люди добрые. Сегодня я хочу вновь коснуться темы анизотропии, поговорить о том, что это за зверь такой, и откуда он берётся.
Давным-давно, я хотел смоделировать трехмерку новенькой на тот момент nVidia GeForce RTX 2080 Ti, и на моменте текстурирования встал вопрос: "Каким образом получить хитроумный блик но винте видеокарты?" Такой блик встречался мне в жизни и раньше, чтобы было понятно, о чем речь, прикрепляю ряд фотографий:
Прежде, чем бежим в 3d-софт пробовать повторить данное светопредставление, давайте разберемся, откуда этот блик берется.
Википедия предлагает такой вариант определения:
Анизотропи́я (от др.-греч. ἄνισος — неравный и τρόπος — направление) — различие свойств среды (например, физических: упругости, электропроводности, теплопроводности, показателя преломления, скорости звука или света и др.) в различных направлениях внутри этой среды; в противоположность изотропии.
Не самое понятное определение для человека, далекого от физики, оптики, электродинамики и квантов. В общем и целом, это явление может возникать в кристаллах (поляризация свет), может возникать при деформации поверхности (наш случай). Если внимательно посмотреть на поверхность, где наблюдается этот необычный блик, можно обнаружить кольцевые бороздки-царапки. Полированная поверхность не даст такого блика.
Чтобы понять истинную природу хода лучей, нужно несколько курсов отучиться в области физики и оптики, поэтому головы Вам забивать не буду лишней информацией. Главное, что стоит уяснить, это то, что блик берется от кольцевых царапин. В быту можно наблюдать на посуде, или cd-дисках. Только у дисков эти "канавки" в несколько микрометров, поэтому там еще дифракция вступает в игру и наряду с интерференцией дает такой же блик, но радужного цвета.
Думаю, стоит попробовать повторить что-то похожее в моей любимой Maya. На этот раз рендерить буду в арнольде(я уже писал с другого аккаунта подобную статью, только там использовался vray). Метод, который я сегодня предложу, стар как этот мир. Здесь есть пара подводных камней, о которых я чуть позже поговорю отдельно.
Создадим небольшой цилиндр, снимем фаски и осветим сцену hdri-картой. Рендер и вьюпорт дают понять, что даже при выкручивании metalness цилиндр похож на металлический, но не хватает вот этого блика и царапин. К слову, бликом здесь и нге пахнет... Цилиндр получился зеркальным, причем в нем отражения на рендере хуже чем во вьюпорте почему-то, лол. Кто знает, как это фиксится, чикните коммент, молю.
Дабы получить хотя бы что-то похожее на реальный блик, нам нужно "заювишить" цилиндр и поиграться в хайпершейде:
Прежде всего я раскроил цилиндрический брус, причем сделал 2 выкройки в UV Set Editor. Ах да, если вас бесит скайдом, то на картинке я показал, как от него избавиться. В его атрибутах надо вырубить видимость камеры и скрутить в ноль радиус во вкладке вьюпорт. Я не умею делать развертки от слова совсем, я постоянно забываю, куда надо нажимать (так как разворачивал я пару-тройку раз в жизни), поэтому сейчас методом "тыка" вроде мало-мальски пришел к желаемому результату:
Короче, щас в HYPERSHADE начинается настоящий цирк с градиентом. Наша задача сделать пару нод, которые радиальным градиентом будут указывать нашему блику, как ложиться на цилиндр. Нажимаем "Tab" в пустом поле графов гипершейда и пишем airampfloat, выбираем эту ноду. Создаем таким же образом aifloattorgba, даль ше соединяем как я и в настройках рампа ставим "тип" radial и в поле пишем "юви сет" anisotropy(та самая ювиха, которую я отдельно создал). На выходе должно получиться что-то типа этого:
Теперь если мы перенесем c помощью ПКМ рамп в атрибут вращения (rotation) основного материала и пересоберем ноды в гипершейде, то выйдет уже что-то отдаленно напоминающее этот злополучный блик:
Если внимательно посмотреть на блик боковой грани, то видно, что его колбасит в спираль. Строго говоря колбасит и анизотропный радиальный блик (это основной подводный камень), но об этом чуть позже. Идея в том, чтобы сделать маску на торцевые грани цилиндра и эту маску использвать только для радиальной анизотропии через ramp. Для этого, нам нужно сдублировать ramp (shift+d), тип изменить на circular. Кривую выстроить +- как у меня и переконектить все тоже как у меня:
Далее через aicomplement и connection editor собираем такую красоту. Выход aifloat кидаем на вход aicomplement, и ПКМ перетаскиваем aicomplement на атрибут anisotropy основного материала. В connection editor выход - OutColorR, вход - SpecularAnisotropy:
Дальше нам остается только OutColor нашего основного материала законектить к Surface Shader и играться с настройками Roughness, дабы получить что-то правдоподобное:
Спустя некоторое количество времени я смог сплести такой клубок нод в хайпершейде, который дает результат ниже. Основная загвоздка в 2 вещах:
1. Это наш анизротропный блик закручивает. Это можно пофиксить сменой ракурса.
2. Я не умею рендерить, поэтому пример мой слишком шумный и есть вырвиглазные моменты. Дай Бог здоровья тем, кто обуздал Арнольд в полной мере! Очень-очень бы хотелось с такими пообщаться... :)
В принципе, ничего сложного. Самое сложное - это отрендерить без шумов и накинуть на поверхность метала царапины и отпечатки, настроить адекватно сцену и свет. Если угадать с ракурсом, то блик похож на настоящий.
Теперь можно заниматься более сложными вещами, например, визуализацией посуды.
Я надеюсь, принцип Вам ясен. Если что-то не понятно, пишите в комменты и в личку, я очень быстро отвечаю. Очень бы хотел заручиться знакомством с cgi-специалистами, которые работают над реальными проектами и готовы поделиться жизненным опытом. Также рекомендую посмотреть этот видосик. Спасибо за внимание! Увидимся в следующих постах ;)