Остроугольные края поверхностей часто протираются, царапаются или повреждаются какими-нибудь другими способами. При этом, вид предмета становится изношенным, краска отслаивается, метал начинает протираться. Вот пример окрашенного предмета, обратите внимание как облупилась краска по краям, обнажая под собой металлическую поверхность:
Это довольно существенная деталь, которая делает ваши текстуры более реальными. Вкратце, это делается так: вы создаёте материал краски, потом материал метала, а затем вручную рисуете смешивающую их маску, в результате чего становится виден метал по краям вашего объекта. А что если у вас в сцене более 5000 объектов? Рисование масок вручную довольно медленный и утомительный процесс, метод хорош для трёх-четырёх объектов, но не для нескольких тысяч.
Итак, в этом уроке обсуждается процедурный метод создания подобных масок, используя карты вершин (vertex maps).
Итак, в 3dsmax, вы можете выбрать любую вершину и назначить этой вершине цвет (у большинства основных 3d-приложений есть подобные функции). Полученные цвета всех (задействованных при этом) вершин называются картой вершин (vertex map). Это, на самом деле, может быть очень полезно, так как при этом вы можете нарисовать карту прямо в видовом окне 3ds max. Единственная проблема в следующем: поскольку для каждой вершины можно использовать только 1 цвет, вам нужно достаточно большое количество вершин, чтобы отобразить мелкие детали. Начнём с двух кубов:
Обратите внимание на геометрию, которую я использую. У первого куба 10 сегментов в каждом направлении. У второго куба есть дополнительные грани почти у самых его краёв, а также к нему применён модификатор Meshsmooth. Более подробная информация о добавлении дополнительных граней при использовании модификатора Meshsmooth в этом уроке: Закруглённые грани, фаски, галтели. Для того, чтобы разрисовать потёртые участки вручную, используя цвета вершин (vertex colors), нам понадобится в 4 или 5 раз более плотная сетка геометрии по сравнению той, что мы сейчас видим, что на самом деле, весьма не практично. Так что вместо этого, методика, которую мы будем использовать следующая: нарисовать карту вершин с низким разрешением, а затем добавить мелкие детали деформируя её (Vertex-карту) картой Noise.
Теперь мы может вручную выбрать цвета вершин, но опять же, для огромного количества объектов, ручное назначение цветов будет медленным, так давайте автоматизируем процесс. Перейдите на страницу Soulburn Scripts и загрузите последний доступный набор скриптов. В нём есть скрипт под названием cornerEdgeToVertexMap. Он делает следующее: выделяет все угловые грани, а затем конвертирует их в карту Vertex Map. После выполнения скрипта с настройками по-умолчанию, вот такой у нас получается результат :
Обратите внимание как цвета вершин смешиваются друг с другом. У первого куба края чёрные, более близкие к центру вершины – белые, таким образом получается плавный градационный переход от чёрного к белому. То же самое со вторым кубом, за исключением того, что из-за модификатора Meshsmooth цвета вершин смешиваются ещё сильнее.
Итак, теперь у нас есть углы запечённые (baked) в карту вершин (vertex map), но они совсем не выглядят изношенными, правда? Чтобы получился нужный нам вид, мы будем деформировать карту вершин с помощью плагина Warp Texture plugin (Обратите внимание: эта карта не поддерживается mentalray-ем, однако, если вы пользуетесь mentalray-ем, похожий плагин есть здесь). Warp Texture написал John Burnett, плагин делает следующее: берёт любую карту и деформирует её, используя другую карту. В данном случае, мы размещаем карту Vertex Map в Слоте №1 материала Warp Texture (который имеет доступ к цвету вершин, которые мы запекли в наш объект ранее), а в Слоте №2 у нас будет карта Noise. Также, хотя это не всегда необходимо, неплохо включить галочку "Clamp" во вкладке Output в Warp Texture для того, чтобы конечных результат был гарантированно между значениями 0 и 1.
Вот мы добавляем Noise...
А вот просчитанный результат :
Почти получается, но шум получается слишком расплывчатым и края “очерчиваются” не так как мы изначально планировали. Для того, чтобы это сделать, нам нужно “ужать” и Noise-карту и Vertex-карту. Поместите Vertex-карту в Output-карту и затем, настройте кривую в разделе Output, Color Map примерно так :
Затем переходим к Output-кривой карты Noise, и делаем Color Map примерно вот такой :
Теперь – Render!.. намного лучше:
Также учитывайте, что только для этого урока я настраивал значения Noise и Output карт для каждого куба, чтобы получить слегка отличающийся визуальный эффект. Но на практике вы скорей всего захотите использовать один материал назначенный всем объектам, поскольку настройка карт для каждого объекта будет отнимать слишком много времени.
Теперь давайте используем эту маску, чтобы смешать эти два материала.
Создайте Blend-материал, пусть первый материал будет "краской", а другой – "металлом" (к примеру в прилагаемом файле, я сделал очень простые материалы, замените их чем-нибудь более интересным из своей собственной библиотеки материалов).
В слот Mask Blend-материала, поместите вашу текстуру Warp Texture.
Вот результаты рендера:
Вот max-файл для вышеприведённого изображения (max8).
Вот похожий шейдер на участке более сложной геометрии: механически-подобная поверхность со множеством панелей. Вот исходный материал:
вот карта vertex map после работы скрипта, деформированная Noise-картой:
А вот конечный результат после деформации карты vertex map, используемой для смешивания более светлого и металла и его варианта потемней:
Поскольку эта техника полностью основывается на геометрии объекта, единственный её недостаток в том, что если вам нужно отредактировать геометрию, это сильно повлияет на сам шейдер. Так что, если вы предполагается редактирование большого количества объектов после того, как данная уже была применена техника, учитывайте то, что вам придётся переделать карты vertex map, или снова редактировать геометрию объектов, чтобы получить идеальный вид шейдера.
Также из-за бага в карте Vertex Color, у вас не получится использовать данную технику для создания bump-карт, она подходит только для Diffuse или Displacement-карт. Если же вам нужен такой Bump, советую посмотреть функцию Render To Texture чтобы с её помощью заменить рисунок карты vertex map в своём материале.
Чтобы получить нужный вам эффект поэкспериментируйте с настройками Noise карт, степенью деформации, и "сжатием". Также, вы можете свободно использовать эту технику на "менее важных" частях вашей модели, или на моделях дальнего плана, а для больших и более важных частей прорисовать вручную. Главный объект в кадре заслуживает того, чтобы для него выполнили немного "ручной работы", а эта техника подходит для второ- и третье-степенных элементов сцен, и преимущественно означает просто меньше работы (с текстурами такого рода).
оригинал статьи : http://www.neilblevins.com/cg_education/vertex_map_wear/vertex_map_wear.htm
перевод и адаптация: Александр Ергашов /© 2009-2012/
<< к оглавлению...