<< к оглавлению...

Потёртые края с помощью деформированной карты вершин (Vertex Map)

Остроугольные края поверхностей часто протираются, царапаются или повреждаются какими-нибудь другими способами. При этом, вид предмета становится изношенным, краска отслаивается, метал начинает протираться. Вот пример окрашенного предмета, обратите внимание как облупилась краска по краям, обнажая под собой металлическую поверхность:

pic1

Это довольно существенная деталь, которая делает ваши текстуры более реальными. Вкратце, это делается так: вы создаёте материал краски, потом материал метала, а затем вручную рисуете смешивающую их маску, в результате чего становится виден метал по краям вашего объекта. А что если у вас в сцене более 5000 объектов? Рисование масок вручную довольно медленный и утомительный процесс, метод хорош для трёх-четырёх объектов, но не для нескольких тысяч.
Итак, в этом уроке обсуждается процедурный метод создания подобных масок, используя карты вершин (vertex maps).

Назначаем карту Vertex Map.

Итак, в 3dsmax, вы можете выбрать любую вершину и назначить этой вершине цвет (у большинства основных 3d-приложений есть подобные функции). Полученные цвета всех (задействованных при этом) вершин называются картой вершин (vertex map). Это, на самом деле, может быть очень полезно, так как при этом вы можете нарисовать карту прямо в видовом окне 3ds max. Единственная проблема в следующем: поскольку для каждой вершины можно использовать только 1 цвет, вам нужно достаточно большое количество вершин, чтобы отобразить мелкие детали. Начнём с двух кубов:

pic2

Обратите внимание на геометрию, которую я использую. У первого куба 10 сегментов в каждом направлении. У второго куба есть дополнительные грани почти у самых его краёв, а также к нему применён модификатор Meshsmooth. Более подробная информация о добавлении дополнительных граней при использовании модификатора Meshsmooth в этом уроке: Закруглённые грани, фаски, галтели. Для того, чтобы разрисовать потёртые участки вручную, используя цвета вершин (vertex colors), нам понадобится в 4 или 5 раз более плотная сетка геометрии по сравнению той, что мы сейчас видим, что на самом деле, весьма не практично. Так что вместо этого, методика, которую мы будем использовать следующая: нарисовать карту вершин с низким разрешением, а затем добавить мелкие детали деформируя её (Vertex-карту) картой Noise.

Теперь мы может вручную выбрать цвета вершин, но опять же, для огромного количества объектов, ручное назначение цветов будет медленным, так давайте автоматизируем процесс. Перейдите на страницу Soulburn Scripts и загрузите последний доступный набор скриптов. В нём есть скрипт под названием cornerEdgeToVertexMap. Он делает следующее: выделяет все угловые грани, а затем конвертирует их в карту Vertex Map. После выполнения скрипта с настройками по-умолчанию, вот такой у нас получается результат :

pic3

Обратите внимание как цвета вершин смешиваются друг с другом. У первого куба края чёрные, более близкие к центру вершины – белые, таким образом получается плавный градационный переход от чёрного к белому. То же самое со вторым кубом, за исключением того, что из-за модификатора Meshsmooth цвета вершин смешиваются ещё сильнее.

Деформация карты Vertex Map

Итак, теперь у нас есть углы запечённые (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.

pic4

Вот мы добавляем Noise...

pic5

А вот просчитанный результат :

pic6

Почти получается, но шум получается слишком расплывчатым и края “очерчиваются” не так как мы изначально планировали. Для того, чтобы это сделать, нам нужно “ужать” и Noise-карту и Vertex-карту. Поместите Vertex-карту в Output-карту и затем, настройте кривую в разделе Output, Color Map примерно так :

pic7

Затем переходим к Output-кривой карты Noise, и делаем Color Map примерно вот такой :

pic8

Теперь – Render!.. намного лучше:

pic9

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

Создание Blend-материала

Теперь давайте используем эту маску, чтобы смешать эти два материала.
Создайте Blend-материал, пусть первый материал будет "краской", а другой – "металлом" (к примеру в прилагаемом файле, я сделал очень простые материалы, замените их чем-нибудь более интересным из своей собственной библиотеки материалов).
В слот Mask Blend-материала, поместите вашу текстуру Warp Texture.
Вот результаты рендера:

pic10a

pic10

Вот max-файл для вышеприведённого изображения (max8).

Более сложная геометрия

Вот похожий шейдер на участке более сложной геометрии: механически-подобная поверхность со множеством панелей. Вот исходный материал:

pic11

вот карта vertex map после работы скрипта, деформированная Noise-картой:

pic12

А вот конечный результат после деформации карты vertex map, используемой для смешивания более светлого и металла и его варианта потемней:

pic13

Недостатки данной техники

Поскольку эта техника полностью основывается на геометрии объекта, единственный её недостаток в том, что если вам нужно отредактировать геометрию, это сильно повлияет на сам шейдер. Так что, если вы предполагается редактирование большого количества объектов после того, как данная уже была применена техника, учитывайте то, что вам придётся переделать карты 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/
<< к оглавлению...