Створення ефекту потертих крів, використовуючи деформовану карту вершин

Гострокутні краї поверхонь часто протираються, дряпаються або ушкоджуються якими-небудь іншими способами. При цьому вид предмета стає зношеним, фарба відшаровується, метал починає протиратися. Ось приклад пофарбованого предмета, зверніть увагу, як облупилася фарба по краях, оголюючи під собою металеву поверхню:

ефекту

Це досить важлива деталь, яка робить ваші текстури більш реальними. Коротко, це робиться так: ви створюєте матеріал фарби, потім матеріал металу, а потім вручну малюєте маску, що змішує їх, в результаті чого стає видно метал по краях вашого об'єкта. А що якщо у вас у сцені понад 5000 об'єктів? Малювання масок вручну досить повільний і стомлюючий процес, метод хороший для трьох-чотирьох об'єктів, але не для кількох тисяч. Отже, у цьому уроці обговорюється процедурний метод створення подібних масок, використовуючи карти вершин (vertex maps).

Призначаємо картку Vertex Map.

Отже, в 3dsmax ви можете вибрати будь-яку вершину і призначити цій вершині колір (у більшості основних 3d-додатків є подібні функції). Отримані кольори всіх (задіяних у своїй) вершин називаються картою вершин (vertex map). Це, насправді, може бути дуже корисним, тому що при цьому ви можете намалювати карту прямо у видовому вікні 3ds max. Єдина проблема в наступному: оскільки для кожної вершини можна використовувати лише 1 колір, вам потрібно досить багато вершин, щоб відобразити дрібні деталі. Почнемо з двох кубів:

потертих

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

Тепер ми можемо вручну вибрати кольори вершин, але знову ж таки, для величезної кількості об'єктів, ручне призначення квітів буде повільним, так давайте автоматизуємо процес. Перейдіть на сторінку Soulburn Scripts та завантажте останній доступний набір скриптів. У ньому є скрипт під назвою cornerEdgeToVertexMap. Він робить наступне: виділяє всі кутові грані, а потім конвертує їх у картку Vertex Map. Після виконання скрипта з налаштуваннями за замовчуванням, ось такий у нас виходить результат:

ефекту

Зверніть увагу, як кольори вершин змішуються один з одним. У першого куба краї чорні, ближчі до центру вершини – білі, таким чином виходить плавний градаційний перехід від чорного до білого. Те саме з другим кубом, за винятком того, що через модифікатор 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.

потертих

Ось ми додаємо Noise.

крів

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

крів

Майже виходить, але шум виходить занадто розпливчастим і краї "окреслюються" не так, як ми спочатку планували. Для того, щоб це зробити, нам потрібно "стиснути" і Noise-карту і Vertex-карту. Помістіть Vertex-карту в Output-карту і потім налаштуйте криву в розділі Output, Color Map приблизно так:

крів

Потім переходимо до Output-кривої карти Noise, і робимо Color Map приблизно ось такий:

створення

Тепер – Render. набагато краще:

створення

Також враховуйте, що тільки для цього уроку я налаштовував значення Noise і Output карт для кожного куба, щоб отримати візуальний ефект, що злегка відрізняється. Але на практиці ви, швидше за все, захочете використовувати один матеріал призначений всім об'єктам, оскільки налаштування карт для кожного об'єкта буде забирати занадто багато часу.

Створення Blend-матеріалу

Тепер давайте використовуємо цю маску, щоб змішати ці два матеріали. Створіть Blend-матеріал, нехай перший матеріал буде "фарбою", а інший - "металом" (наприклад у файлі, що додається, я зробив дуже прості матеріали, замініть їх чимось більш цікавим зі своєї власної бібліотеки матеріалів). У слот MaskBlend-матеріалу, помістіть текстуру Warp Texture. Ось результати рендеру:

потертих

створення

Ось max-файл для наведеного вище зображення (max8).

Більш складна геометрія

Ось схожий шейдер на ділянці складнішої геометрії: механічно-подібна поверхня з безліччю панелей. Ось вихідний матеріал:

створення

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

ефекту

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

створення

Недоліки цієї техніки

Оскільки ця техніка повністю ґрунтується на геометрії об'єкта, єдиний її недолік у тому, що якщо вам потрібно відредагувати геометрію, це дуже вплине на сам шейдер. Отже, якщо ви передбачаєте редагування великої кількості об'єктів після того, як ця вже була застосована техніка, враховуйте те, що вам доведеться переробити карти vertex map, або знову редагувати геометрію об'єктів, щоб отримати ідеальний вигляд шейдера.

Також через баг у карті Vertex Color, у вас не вийде використовувати дану техніку для створення bump-карт, вона підходить тільки для Diffuse або Displacement-карт. Якщо вам потрібен такий Bump, раджу подивитися функцію Render To Texture щоб з її допомогою замінити малюнок карти vertex map у своєму матеріалі.

Що ще можна спробувати

Щоб отримати потрібний вам ефект, поекспериментуйте з налаштуваннями Noise карт, ступенем деформації, і "стисненням". Також, ви можете вільно використовувати цю техніку на "менш важливих" частинах вашої моделі, або на моделях далекого плану, а для більших і важливіших частин промалювати вручну. Головний об'єкт у кадрі заслуговує на те,щоб для нього виконали трохи "ручної роботи", а ця техніка підходить для друго- та третьо-ступеневих елементів сцен, і переважно означає просто менше роботи (з текстурами такого роду).