Сповіщення
Очистити все

Bump mapping


Ранг:
Майстер
Роль:
Гість
Записи:
752
Приєднався:
2 роки тому
 

Ця стаття про створення правильних карт bump та bump# за допомогою Adobe Photoshop та X-Ray SDK . З цими додатковими складовими текстурами багато хто стикався, багато хто шукав шляхи правильного їх створення. Насправді, щоб правильно створити бамп-карти, необхідно освоїти як технічну сторону питання (робити, так би мовити, "наукою"), так і практичну (різні методики роботи у фотошопі, обробка текстури, виправлення можливих косяків і т. д.). ). У цій статті найбільше уваги приділятиметься саме першому пункту, адже у будь-якій справі краще спочатку вивчити основи, а потім, у тому числі, самостійно навчаючись, отримати досвід у практиці, покращити свою майстерність.

Трохи про структуру та стилістику статті, щоб все було надалі більш зрозуміло
Багато ігрових текстур (у Сталкері - все) знаходяться у форматі RGB . Якщо хтось не знає, є поняття "канали". Їх вкладка в Photoshop знаходиться праворуч, "Шарів" . У RGB це:

  • R - red (червоний)
  • G - green (зелений)
  • B - blue (синій)

При їх "змішуванні" отримуємо нормальне забарвлення зображення. Загалом, вказівки по каналах у цій статті будуть надані у вигляді, як блок вищий. Іноді у RGB каналів більше (можете самі спробувати додавати у фотошопі). У грі використовується канал Альфа 1 (його ще просто "Альфой" кличуть). Він має, зрозуміло, свої особливі функції. Ось так будуть виглядати вказівки по каналах:

  • R - що має бути на червоному каналі
  • G - що на зеленому
  • B – що на синьому
  • Alpha – що на Альфі

Стаття поділено на три основні частини:
1. Теорія . Тут будуть описані самі карти bump і bump# , а також деякі інші робочі карти та елементи (не забудьте заглянути до підрозділу "Міні-словник термінів статті" ).
2. Робота у фотошопі . Опис дій у фотошопі, необхідні для підготовки елементів бампа.
3. SDK . Завершальна частина роботи з бампу. Тут збираються, реєструються, налаштовуються складові бампа, а згодом - створюються bump і bump#

Теорія

Для початку про структуру основних карт та основні поняття статті. Все нижче написане не обов'язково вірно на всі 100%.

Height Map (карта висот)

Карта висот - суто службова карта у Сталкері. Як окрема текстура не зустрічається, проте, якщо ви робите карту нормалей у фотошопі, то спочатку потрібно буде створити або "запекти" в спеціальних програмах карту висот. У карті висот все побудовано на білих (висоти), чорних (впадини), сірих (плюс-мінус рівні площині) відтінках. Загалом, в основному виходить, що основна частина зображення – сіра, у опуклих місцях воно світліше, а на місці западин – темніше.

Normal Map (карта нормалей)

Карту нормалей можна отримати такими способами:
- згенерувати з високополігональної моделі в 3D-редакторі, в роді 3ds Max , zBrush ...
- згенерувати з раніше створеної карти висот за допомогою одного з плагінів для Photoshop ( плагін NVIDIA , плагін PixPlant, плагін xNormal)
- згенерувати з раніше створеної карти висот у спец-прогах ( xNormal , PixPlant , CrazyBump )
Якщо розбирати по каналах схематично, то виглядає так:

R - вісь X - вказує нормалі вліво та вправо (горизонтальні)
G – вісь Y – вказує нормалі вгору та вниз (вертикальні)
B - вісь Z - вказує нормалі у глибину від поверхні

При включеному RGB на каналах виглядає як текстура в синіх, фіолетових, бузкових, навіть іноді рожевих кольорах. Normal Map дуже рекомендується створювати для бампа (тим більше, якщо вона з хай-полі моделі), а не використовувати скорочений варіант з картою висот (про це дізнаєтеся в розділі SDK нижче). Normal Map, власне, і надає текстурі різних об'ємних характеристик. Надалі, після збирання в SDK, карта стане частиною bump .

bump

Карта bump є звичайною картою нормалей у форматі A(BGR) (типово для формату стиснення DXT5_nm ). Розробники використовували такий порядок з дуже простої причини - DXT компресія набагато менше "псує" текстуру, так як альфа-канал не піддається компресії і залишається практично у вихідному вигляді. Тут треба пояснити: ще раз подивіться на канали карти нормалей. А тепер уявіть, що на порожнє зображення з каналами RGBA поставили ту саму карту нормалей, тільки перевернуту каналами. Тобто наповнення R з карти нормалей перейшло на канал Альфа (А) карти bump , G перейшло до B , B перейшло до G . Щодо каналу R у бампі, туди поставили Specular Map (карту відблисків). Про неї можете детальніше почитати у міні-словнику термінів.

Також варто нагадати, що у своєму повному вигляді карта bump створюється з карти нормалей + текстурою зі спекуляром на Альфі в SDK. Така-ось текстурна солянка. Думаю, ви знаєте, що вона в грі робить, але якщо ви зіткнулися з цими термінами вперше, то все досить просто: карта робить текстуру об'єкта більш красивою, об'ємною, з опуклостями та западинами, додає або забороняє відображення текстурою світла від сонця, лампи , ліхтарика і т. д. Ось, наприклад, новенькому листу металу було б непогано надати можливість відбивати відблиски, а цегляній текстурі задати западини між цеглинами. А ось дереву, припустимо, жодних відображень світла не треба, хоча висоти (впадини та опуклості) додати таки можна. Ще зауважу, що бампи не потрібні для текстур партиклів, текстур інтерфейсу та ряду специфічних зображень. До основної текстури прив'язується через файл текстури . Але з цього приводу не турбуйтеся, адже файл *.thm з'являється під час створення бампа/підключення бампа до текстури в SDK.

Канали:

1.png
Канали в карті bump
R - Specular map - карта інтенсивності відблиску
G - вісь Z - вказує нормалі у глибину від поверхні
B - вісь Y - вказує нормалі вгору та вниз (вертикальні)
Alpha - вісь X - вказує нормалі вліво та вправо (горизонтальні)

bump#

bump# дуже цікава карта, призначення якої для багатьох незрозуміло. Оскільки знайти якусь інформацію щодо правильної назви не вдалося, назвемо її просто " Normal error map ". Невідомо, чи використовуються подібні технології в інших іграх, але зустрічати її будь-де, крім сталкера, не доводилося. Ця карта "виправляє" помилки стиснення DXT у бампа і генерується тільки за допомогою SDK, тому будь-які незрозумілі дії деяких користувачів, на кшталт вставки замість неї звичайної або знебарвленої карти нормалей, а також описаного у статті Argus' a заливання сірим зі вставкою в альфа-канал карти висот, використовувати не можна. Виглядає як сіре зашумлене зображення. Ще раз варто нагадати, що bump# створюється автоматично при генеруванні bump в SDK .

Канали:

R - помилки осі X карти нормалей
G - помилки осі Y карти нормалей
B - помилки осі Z картки нормалей
Alpha – карта висот; використовується для паралаксу, якщо використання його було включено при налаштуванні текстури

Для порівняння:

2.jpg 3.jpg
bump# Без bump# , помітні артефакти

Міні-словник термінів

Тут буде опис деяких термінів, які зустрічаються в статті.

Diffuse texture aka дифузна текстура ака дифуз - основна вихідна текстура, для якої робляться додаткові карти.

Specular Map aka карта відблисків - карта, яка після роботи в SDK стане частиною бампа (на червоному каналі). Відповідає відображення текстурою світла. Виготовляється або з дифуза у Photoshop або паралельно з дифузом в 3D-редакторі. На карті чорним (і відтінками чорного) позначаються місця, які не відсвічуватимуть світло, а білим (і відтінками) – які відсвічуватимуть.

Робота у Photoshop

Тут також знадобиться Normal Map Filter від NVIDIA , якщо ви вже працювали з текстурами, він повинен бути у вас встановлений, тому що поставляється в комплекті з *.dds -плагіном або інший зручний плагін (озвучено вище, теоретично карти нормалей).

Всі файли зберігаються в tga 24 bits/pixel (якщо немає альфа-каналу) або 32 bits/pixel (якщо є альфа-канал). Перед збереженням слід перевести зображення з 16-бітного на 8-бітне .

Карта висот

На карті висот білим кольором позначені опуклості, чорним – западини. Якщо бамп робиться для текстур оточення, то можна почати роботу з оригінальної (дифузної) текстури, якщо ж бамп робиться для персонажа, то такий спосіб зазвичай неприйнятний, найчастіше через камуфляж, який ніяк не повинен позначатися на рельєфі тканини (хоча, в принципі , якщо є певний досвід роботи, прямі руки та старання, то подібних косяків можна уникнути).

По суті, створення карти висот – процес творчий, є лише кілька порад:

  • Над картою висот робота повинна проводитися строго в 16bits , причому від початку до фінального експорту в SDK
5.png
Переклад у 16-бітне зображення
  • Якісного результату не буде, якщо просто взяти та засунути дифузну текстуру в генератор, не робіть цього. Прийде ретельно попрацювати над картою висот.
  • Необов'язково намагатися показати на карті висот всі деталі та рельєф відразу, їх можна додати пізніше, коли буде згенеровано карту нормалей.
4.png
Приклад додавання деталей

 

  • Для карти висот, якщо робите її з дифуза, можна взяти один із каналів RGB дифузної текстури або взяти знебарвлену. При першому варіанті виберіть бажаний канал, виділяйте зображення, копіюйте, вставляйте його в новий документ. Нове зображення буде у режимі "Градація сірого" . Рекомендується перевести знову в RGB , тому що не всі плагіни та фільтри читають "Градацію" . При другому варіанті просто створіть дублікат зображення і натисніть Ctrl+Shift+U ( "Знебарвити" ).
  • На текстурі карти висот можна зробити шар поверх фонового, який потрібно скопіювати знебарвлену інвертовану вихідну текстуру. Звучить не дуже, але все це не складно. Беремо дифуз, натискаємо Ctrl+I (інвертуємо). Потім знебарвлюємо, як показано вище. Копіюємо на новий шар карти висот. Режим накладання виставляємо "Перекриття" ( "Overlay" ). Далі ще можна зробити шар прозорішим. Загалом, дивіться, щоб текстура була збалансованою щодо площин. Рівна частина має бути заповнена сірим відтінком.
  • Дуже знадобляться в цьому випадку інструменти "Освітлювач" та "Затемнювач" .
  • Поверх всього можна додати ще один шар, на якому використовуватимете інструменти в роді "Пензлі".

Metro 2033 (якщо комусь цікаво)

6.png
Приклад карти нормалей з Метро 2033

У метро замість карт нормалей, як зазвичай буває у більшості ігор, використовується карта висот - файли з постфіксом _bump . Вони є тільки в тому випадку, якщо ви розпаковували гру самостійно, більшість збирачів "Архівів моделей" їх до архіву не додає. "Склад" карти висот Метро 2033:

R – порожній канал
G - Specular map - карта інтенсивності відблиску
B – порожній канал
Alpha - карта висот

Карта нормалей

Створення відбувається так: беремо карту висот, відкриваємо фільтр, задаємо налаштування на розсуд. Далі отримуємо готову картку нормалей. Потрібно оглянути карту, щоб там не було дрібних непотрібних горбиків та інших недоліків. Швидше за все, все можна буде вирішити розмиттям у деяких місцях. Ще, як варіант, чудова методика розмиття, при якій зображення все одно залишається чіткішим:
1. Дублюємо фоновий шар.
2. Дублікату виставляємо режим "Перекриття" .
3. Застосовуємо один з фільтрів розмиття (наприклад, "Розмиття по гаусу" ).
4. Якщо треба, дублюємо цей шар ще кілька разів.

Specular Map

Цю карту створювати не складно: взяти знебарвлений дифуз та обробити темним відтінком ті регіони, які не відображатимуть світло, а світлим – які будуть. Чим інтенсивніший відтінок, тим сильніший ефект.

SDK

Карта нормалей

За наявності вже готової карти нормалей, виготовленої вами з іншої гри, zBrush або будь-якої іншої програми високополігонального 3D моделювання, залишається тільки додати її до SDK . Навіщо реєструвати в SDK? Для того, щоб потім поєднати Normal Map із заготівлею для бампа і отримати бамп. Параметри:

  • 0.4 :

Type: 2D Texture
Format: 32 bit (8:8:8:8)
MipMap Filter: Kaiser (тут вже за бажанням, рекомендується Kaiser)

7.png

 

  • 0.5/0.6, 0.7 :

Тип: Normal Map
MipMap Filter: Kaiser

8.png

 

Bump

З використанням окремої карти нормалей bump карта виготовляється дуже просто (заготівлю для бампа краще назвати текстура_bump.tga і помістити в editors/import ):

RGB – залити сірим кольором, RGB = 128,128,128
Alpha - Specular Map

Параметри додавання в SDK не залежать від версії:
Type: Bump Map , Special Normal Map вказуємо додану раніше карту нормалей.

9.png 10.png
У Photoshop Додавання до SDK

Якщо ж раптом виникло бажання обійтися без додаткової карти нормалей, то додавання в SDK і канали змінюються:

RGB – карта висот
Alpha - Specular Map

Це єдиний варіант, коли параметр Virtual height дійсно впливає на інтенсивність бампа.

11.png 12.png
У Photoshop Додавання до SDK

   
Цитата