Blender 2.63 + Gimp = bump mapping

Я тут некоторое время боролся со своей убунтой и пытаюсь научиться моделировать… да и текстурировать заодно… Поэтому времени писать в блоге было очень мало.

Но в процессе изучения моделирования нашёл парочку таких вещей, как bump mapping и normal mapping. Если вкратце, то эти два метода позволяют создать на поверхности меша иллюзию поверхности, без создания лишних треугольников. Этот метод хорош для создания небольшого рельефа. Например, создание рельефной поверхности планет в космосе.

Кстати говоря, примеры mapping можно встретить в игре Doom3. Например, в этой статье описывается normal mapping и его создание в 3ds max.

Вот пара скриншотов маппинга поверхности:

_BUMPMAP

И второй пример. Обращаю внимание, что геометрию меша mapping не меняет. Вся эта поверхность является иллюзией, но иллюзией достаточно хорошей — она реагирует на поворот и на освещённость.

F6_bump_lowresobject

Итак, надеюсь, я смог Вас заинтересовать этой технологией. Давайте-же теперь наконец перейдём к созданию чего-нибудь такого у себя.

Переходим к делу

Для начала создадим обычный куб, нажмём на цифровой клавиатуре цифру 1, чтоб выровнять его лицом к нам и немножко приподнимем камеру, чтоб видеть верхнюю его поверхность.

Безымянный

Сразу хочу обратить внимание, что я предоставляю скриншоты на русском языке. Во-первых, это сделано для новичков, тех, которые только начали изучать Блендер. А во вторых, я довольно часто меняю язык интерфейса с русского на английский и обратно. Благо, в Блендере это делается в «два тычка». Для тех, кто всё-таки не знает, где это делается, приведу скриншот:

Безымянный (1)

Итак, мы разобрались с языком. Давайте вернёмся к нашему кубу. Давайте сделаем его гладким — на левой панели нажмём на кнопку «Гладко» в свитке «Затенение». После этого нажмём на букву S на клавиатуре (это масшатбирует выделенный объект), и увеличим наш кубик так, чтоб он вмещался в камеру.

Безымянный (2)

Теперь нам нужно ужать его сверху и снизу. Что-бы переместить какую-либо грань у нашего кубика, нужно перейти в режим редактирования. Делается это клавишей Tab на клавиатуре.

При этом у нас будут выделены все вершины (об этом свидетельствует их окрас в жёлтом цвете). Кроме того, режим редактирования отображается внизу на панельке 3д-вида.

Безымянный (3)

Нам нужно убрать выделение со всех вершин куба. Сделать это можно, нажав анлийскую клавишу А на клавиатуре. Теперь нам нужно выделить верхнюю грань куба. Для этого мы можем воспользоваться либо клавишей B, курсор после этого принимает форму перекрестия, и мы должны обвести (зажав левую клавишу мышки ЛКМ) вокруг нужной нам точки. Либо, нажав клавишу C, мы просто щёлкаем на нужных нам вершинах, и после того как всё выделится нажимаем клавишу Esc.

Безымянный (4)

Теперь нам нужно опустить эту поверхность куба вниз, почти к нулю. Для этого нажимаем клавишу 1 на цифровой части клавиатуры, и тянем за синюю стрелку вниз к красной горизонтальной линии.

Безымянный (5)

Таким-же образом подтягиваем нижнюю плоскость куба

Безымянный (6)

Ну, и возвращаем камеру немного вверх и вбок, чтоб видеть поверхность нашего куба.

Безымянный (7)

Пришла пора создать текстуру для нашего куба. Но для этого, сначала, нужно разрезать наш куб для создания UV-развёртки. Для этого в режиме редактирования вершин нажимаем клавишу А на клавиатуре до тех пор, пока не выделятся все вершины, и на левой панели выбираем кнопку «Пометить шов» в свитке «UV-развёртка». Таким образом каждый полигон будет отображён отдельно на нашей «выкройке» (обращаю внимание, что для многополигональных моделей шов нужно делать осмысленно, чтоб не пришлось составлять «мозайку» в фотошопе, но в нашем случае подойдёт и обычная мозайка).

Кроме того, нужно потянуть за уголок нашего главного окна вида, чтоб разделить его на две части, и для правой части выбрать вид «Редактор UV/Изображений», чтоб видеть результат нашей выкройки.

После этого можно создать непосредственно саму выкройку. Нажав в левой панели кнопку «Развёртка» и выбрать вариант «Развернуть».

И последнее действие на этом этапе — нужно создать изображение, куда наша развёртка развенётся. Для этого в правой части изображения внизу нажимаем клавишу «Новый», и указываем ширину и высоту текстуры как 1024х1024

Безымянный (8)

Следующий этап — сохранить нашу выкройку. На правой части нажимаем на кнопку «UV» и выбираем верхний пункт меню «Экспортировать UV-развёртку». В появившемся окне сохранения выбираем нужную нам папку, и такие параметры экспорта слева на панели: формат png, и ранее указанные нами размеры, 1024х1024. И, конечно, не забываем указать имя файла.

Безымянный (9)

Открываем получившийся рисунок в фотошопе (я использую вместо фотошопа прогрммку Gimp, но слово «фотошоп» уже настолько приевшееся в нашем обществе, что для простоты восприятия я не уточняю, что работаю в гимпе Преимущество гимпа только одно — он бесплатен. По функциональности он меня более чем устраивает… даже более, некоторые вещи я уже просто не могу делать в фотошопе, Гимп привычнее =) Но, конечно-же, есть и такие функции, которые отсутсвуют в Гимпе, например эффекты слоя… но, говорят, что для этого в гимпе уже есть плагины, я ещё не занимался этим вопросом, т.к. меня вполне устраивает ручная реализация теней и освещённостей).

Сразу-же создаём два слоя: Слой «Фон» заливаем цветом #808080 (этот цвет является некой половиной между белым #FF и чёрным #00 цветом. Это и в самом деле так… если перевести цифру #FF в десятеричную систему, мы получим число 255… разделим его пополам — получим число 127,5, округлив доведём до числа 128, и переведя обратно в шестнадцатиричную систему, получим наше число #80). Этот цвет будет отвечать за нулевой уровень рельефа. Если мы зальём просто белым или чёрным — мы сможем отображать только возвышения или только выемки. Использовани-же «среднего» цвета позволит нам рисовать поверхность и выше и ниже текущего нуля.

Второй созданный нами слой «Текст» пока что оставляем пустым. При этом слой с нашей сеткой меша всегда должен быть сверху.

Безымянный (10)

Пришла пора написать текст. Обращаю внимание, что bump-mapping работает только с оттенками серого цвета. По его интенсивности он определяет угол, под которым должен отражаться цвет. Существует так-же и normal-mapping. Там каждые два байта цвета воспринимаются как координаты вектора, и потому там изображение уже может быть многоцветным.

Т.к. мы сейчас рассматриваем bump mapping, то нам нужно написать несколько слов разными оттенками серого цвета. Это должны быть такие цета:

  • #000000
  • #101010
  • #202020
  • #303030
  • #404040
  • #505050
  • #606060
  • #707070
  • #808080
  • #909090
  • #A0A0A0
  • #B0B0B0
  • #C0C0C0
  • #D0D0D0
  • #E0E0E0
  • #F0F0F0

Безымянный (11)

Как видим, мы отобразили всю палитру серого цвета с шагом в 15 единиц. Для тех, кому лень набирать и раскрашивать этот текст я дам готовый прозрачный шаблон:

urok1

Сохраните его к себе на компьютер и вставьте как новый слой в наше изображение с сеткой.

Далее, нам нужно оставить видимыми только слой с фоновым серым цветом, и слой с набранным нам текстом. После этого мы сохраняем наш файл под тем-же именем, под которым сохраняли нашу uv-развёртку (должен отметить, что в новом гимпе сохранение в другие форматы, в том числе и png делается через новый пункт «экспорт». Вначале я не понял, зачем это было сделано, но затем, имея возможность сохранять весь шаблон в формате гимпа одним кликом я сохранил возможность сохранения этого-же изображения в нужный мне формат так-же одним кликом, я был необычайно рад).

Безымянный (12)

Возвращаемся в блендер. Для работы с нашим изображением как с бампом нам нужно, чтоб на меш был назначен материал, на который мы назначим нашу текстуру. У стандартного куба уже есть материал. Он нас вполне устроит, оставляем его без изменений.

Безымянный (13)

А вот текстура попила мне кровушки. Я уж не знаю, чем не подходит та текстура, которая уже есть на кубе, но в ней нельзя настраивать бамп… и чтоб понять это мне потребовалось несколько дней мозголомания. Создадим новую текстуру. Для этого щёлкнем по пустому месту под надписью «Тех» в списке текстур, и нажмём кнопку «Новый».

Безымянный (14)

Далее настраиваем такие параметры:

  • Тип: Изображение или фильм
  • Свиток Изображение: нажимаем кнопку «Открыть» и выбираем наш файл, сохранённый в гимпе
  • Свиток Разметка изображения, параметр Расширение ставим равным значению «Клип»
    Безымянный (15)
  • В свитке Отображение меняем параметр Координаты на «UV» и в списке карт выбираем нашу карту «UVMap»
  • В свитке Влияние убираем птичку возле значения «Цвет» в разделе цвета и ставим птичку возле значения «Нормал» в разделе Форма

Собственно говоря… на этом мы и закончим. Теперь полученное изображение в оттенках серого будет восприниматься как карта высот, что нам и нужно было.

Безымянный1

Немного поработав над камерой, и добавив ещё один источник света, я получил такой рендер:

Безымянный1 (1)

Теоретически, взяв любую текстуру и переведя её в режим отображения оттенками серого, можно формировать поверхность любой сложности. Оставлю Вам экспериментировать над разными способами получения текстуры.

Надеюсь, материал в уроке был изложен достаточно доступно. Если что не понятно — добро пожаловать в комментарии, либо обсудить это на форуме Unity3D.ru, куда я выложу ссылку на мой урок.

Кстати, инструкцию по наложению bamp в Unity3D можно почитать тут.