# Глава 10. Низкополигональная гоночная машина — Материалы и текстуры

В этой главе мы добавим материалы и текстуры к нашей модели. Затем мы используем UV-развёртку для запекания этих текстур в изображение. Таким образом, их можно будет использовать во внешних приложениях. Наконец, мы создадим материалы для движка рендера Cycles, используя наше изображение. В этой главе будут рассмотрены следующие темы:

Рабочий процесс текстурирования

Добавление материалов

Развёртка и запекание

Добавление деталей в редакторе изображений

Проверка карты текстур

## Рабочий процесс текстурирования

Во-первых, мы создадим несколько процедурных текстур в Блендере. Это будет основа для текстур (а не конечный продукт).

После этого мы создадим и настроим UV-карту для нашего грузовика.

Затем мы запечём текстуры в изображение, используя нашу UV-карту. Мы еще не занимались запеканием, но это довольно просто. Если вы уже знакомы с этим понятием, то отлично! Если нет, не волнуйтесь, мы обсудим его по ходу работы.

После того, как у нас появится изображение, представляющее карту текстур, мы сможем доработать его во внешнем редакторе изображений и добавить деталей.

Наконец, мы используем эту карту изображений при создании материалов грузовика для рендера Cycles. Этот последний шаг не критичен, так как модель грузовика предназначена для других приложений (не для Блендера). Но это хороший способ проверить, что всё выстраивается и работает так, как ожидалось.

Итак, давайте начнем.

## Добавление материалов

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

Основным материалом, конечно же, будет краска корпуса грузовика. Мы будем использовать материалы встроенного рендера Блендера для создания стилизованной схемы окраски. Сначала переключитесь на встроенный движок рендера (Blender Render):

С момента появления рендера Cycles в Блендере 2.5, Встроенный движок рендера стал реже использоваться для чего бы то ни было. Однако в нём есть несколько интересных функций. Например, материалы и система текстурирования позволяют создавать сложные и уникальные шаблоны. Мы воспользуемся этим для создания уникальной окраски нашего грузовика.

Прежде чем мы продолжим работу с грузовиком, было бы неплохо создать простой объект и поиграть с некоторыми текстурами. В нашем случае я буду использовать базовую плоскость и добавлю новый материал. Затем, я попробую несколько различных текстур, чтобы посмотреть, как они выглядят. Это, например, текстура Искаженный шум (Distorted Noise):

Вы можете заметить, что существует множество настроек для регулирования, но мы оставим их в покое. Под самим шаблоном вы увидите параметры для Отображения (Mapping) и Влияния (Influence).

Мы установим координаты отображения в Сгенерировать (Generated). Это означает, что Блендер будет применять текстуру, основываясь на размерах объекта в сцене.

| Замечание Текстуры, которые используют математически вычисляемые узоры, а не карты изображений, обычно называются процедурными текстурами.

После установки наших координат отображения мы отметим опцию Цвет (Color) в разделе Влияние. Это означает, что текстура будет влиять на цвет нашего материала. Вы можете установить цвет по своему желанию. Я для себя выбрал зелёный цвет.

Вот как выглядит эта текстура с базовым материалом синего цвета:

Вы можете попробовать различные процедурные текстуры и различные варианты для каждой из них. Экспериментируя, можно получить довольно интересные результаты:

Например, мы можем использовать текстуру Мрамор (Marble) и выбрать Вороной — треск (Voronoi Crackle) в качестве Основы шума (Noise Basis):

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

В зависимости от соотношений размеров вашего объекта может потребоваться настроить Размер (Size) вашей текстуры по различным осям. По умолчанию Блендер создаст текстуру с Размером 1 для каждой оси. Например, если длина вашего объекта больше ширины, или ширина больше высоты, вам нужно будет отрегулировать Размер текстуры, для соответствия этим пропорциям:

Затем мы используем подобный метод для создания текстуры у более тёмных механических частей. Помните, что это основы текстур. Другими словами, вам не нужно доводить их до идеала, вы сможете доработать их позже в редакторе изображений по вашему выбору:

Простой шаблон Облака (Cloud), видимо, хорошо подходит для этой цели. Как вы можете видеть на дне грузовика, он выглядит не очень реалистично. Тем не менее, он лучше, чем плоский цвет, и он бесшовный — без зазоров или кромок:

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

Мы повторим это для различных материалов. Для задних фонарей мы можем использовать шаблон Магия (Magic), чтобы добавить немного детализации:

Одна вещь, которую я сделаю в данный момент — удалю дубликаты объектов. Например, каждая половина грузовика имеет три комплекта фар овальной формы. Поскольку все они будут выглядеть одинаково, мы можем просто затекстурировать одну фару, а позже сделать дубликаты. Как вы увидите через минуту, такой подход более эффективен:

## Развёртка и запекание

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

Если вы ещё не знакомы с идеей UV-развёртки, она на самом деле очень проста. Наша модель существует в трёхмерном пространстве, но она будет использовать текстуру двумерного изображения (в конечном итоге). Нам нужно сообщить Блендеру, как применить это 2D-изображение к нашему 3D-объекту. Когда мы говорим о разворачивании, можно думать об этом, как о бумажной модели. Нам нужно разрезать и развернуть модель так, чтобы она стала плоской:

| Замечание UV-развёртка — это неразрушающий процесс. Вы вообще не изменяете и не портите свою 3D-модель. Традиционные координаты (X, Y и Z) по-прежнему определяют местоположение ваших вершин в трехмерном пространстве. Второй набор координат (U и V) будет определять, как эти вершины отображаются на двумерное изображение. Вот почему она называется UV-карт ой.

Маленькое лингвистическое замечание. В английском языке глагол «отображать» (to map) и существительное «карта» (map) — фактически являются одним и тем же словом — прим .пер.

Простейшим способом развернуть любую модель будет выбрать всё, а затем нажать U. Когда появится меню UV Разметка (UV Mapping), выберите Умное UV-проецирование (Smart UV Project). Вы можете оставить параметры по умолчанию и нажать OK:

В окне вашего Редактора UV/Изображений (UV/Image Editor) вы можете увидеть развернутую UV-карту. Технически она будет работать для нашего проекта. Если вы хотите, вы можете просто сохранить всё так, как есть. Однако существует несколько причин, почему она не идеальна.

Прежде всего, существует ряд больших промежутков (пустых пространств). Поскольку мы добиваемся эффективности в текстурировании, мы хотим использовать как можно больше нашего пространства:

(Gap – промежуток)

Вторая причина её несовершенства заключается в том, что она не интуитивна. Другими словами, вы не можете посмотреть на UV-карту и сразу же найти панель капота или заднюю дверь. Если вы собираетесь позже рисовать наклейки, очень полезно иметь возможность взглянуть на вашу UV-карту и понять, что именно представляют собой различные части. Мы исправим это, вручную развернув модель.

Но для начала, однако, мы воспользуемся этой UV-картой и попрактикуем запекание наших текстур.

Давайте создадим новое изображение в Редакторе изображений. Я назову его Truck_Texture_Map.png (но вы, конечно же, можете назвать его как угодно). Я создам его с разрешением в 2048×2048 пикселей:

| Замечание Изображение размером 2048x2048 обычно называется текстурой 2K. Для многих применений, квадратная текстура с длиной стороны, являющейся степенью 2 (например, 512, 1024, 2048, 4096, и так далее), как правило, более эффективна для использования CPU/GPU. Естественно, что чем больше размер изображения, тем лучшее разрешение вы получите для своей модели. Однако большее изображение также будет занимать больше памяти и увеличит время рендера. Если вы не знаете, какой размер текстуры использовать, лучше всего начать с создания большей текстуры. Вы всегда сможете перемасштабировать её впоследствии, если ваше программное обеспечение начнёт тормозить из-за этой текстуры.

Создав новое изображение, вы можете сохранить его в любом выбранном вами месте. Затем перейдите на вкладку «Визуализация» (Render) и прокрутите вниз до параметров Запекания (Bake):

Здесь есть много опций, но мы пока оставим их для простоты. Выберите «Текстуры» (Textures) в выпадающем меню Режим запекания (Bake mode). Затем нажмите кнопку Запечь (Bake).

В вашем Редакторе UV/Изображений (UV/Image Editor) вы теперь увидите, что Блендер запёк процедурные текстуры в изображение.

Это полезно по многим причинам и необходимо, если вы планируете экспортировать модели в другой формат. Процедурная текстура, например, которую мы использовали для окраски, была основана на математическом шаблоне (в данном случае варианте Мрамор (Marble)). Однако этот конкретный узор (и сгенерированные координаты, в соответствии с которыми он накладывается) работает только в Блендере. Другая программа не поймёт, что такое текстура Мрамор или как ее применять.

Запекая эту текстуру, мы преобразуем узор и данные материала в универсальный формат — двумерное изображение. Эту текстуру теперь можно открыть в (почти) любой другой 3D или игровой программе:

Тем не менее, у нас есть небольшая проблема с нашим запеканием. Поскольку мы использовали на модели модификатор «Отражение», Блендер попытался запечь обе стороны грузовика в одно и то же место на 2D-текстуре. Однако рисунок покраски не симметричен (он отличается между разными сторонами). Невозможно запечь обе половины грузовика в одном и том же двумерном пространстве.

Таким образом, вы увидите ряд наложений и проблем на изображении, так как Блендер попытался объединить обе стороны:

Конечно, одним из способов исправить это было бы отключить модификатор «Отражение» на нашем грузовике:

Это сработает в том смысле, что у вас не появится странных артефактов во время запекания:

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

Например, вы можете использовать разные наклейки на разных сторонах грузовика. Даже если вам нужны одни и те же надписи (например, номер или логотип спонсора), они получатся зеркальными отображениями друг друга (так что текст будет правильным только с одной стороны). Для многих приложений, вам понадобится разворачивать обе стороны грузовика отдельно. Вот этим мы и займёмся.

Во-первых, я собираюсь разделить модель на разные объекты. Мы снова будем использовать клавишу Р, как и раньше. Однако на этот раз мы выберем опцию По материалу (By Material). Блендер автоматически разделит грузовик на разные объекты, в зависимости от материала, назначенного каждой части. Например, все окрашенные поверхности корпуса теперь будут одним объектом, а все окна будут другим.

Для тех частей, у которых мы не хотим видеть зеркальное отражение (например, основной корпус), примените модификатор «Отражение»:

Теперь мы двинемся дальше и развернём эти UV-карты.

На виде сбоку я выберу у кабины все грани, которые прямо обращены на нас, и снова нажму клавишу U. На этот раз, однако, я выберу пункт Проецировать из вида (Project From View). Выбранные грани теперь будут развёрнуты точно так же, как вы их видите.

| Замечание Опция Проецировать из вида (Project From View) редко будет идеально работать, так как не каждая грань направлена прямо на вас, когда вы разворачиваете модель. Таким образом, в UV-карте будут небольшие искажения. Для объектов, подобных нашему грузовику (который имеет довольно большие плоские части), эффект пренебрежимо мал.

Повторите этот процесс для остальных частей корпуса и перемещайте полученные UV-острова так, чтобы они заполнили пространство разумным образом:

Эта UV-карта по-прежнему оставляет много неиспользуемого текстурного пространства, но интуитивно она гораздо понятнее, чем результат работы опции Умное UV-проецирование (Smart UV Project), которую мы использовали изначально. Вы можете взглянуть на эти UV-острова и сразу идентифицировать различные панели кузова. Это будет очень полезно позже при рисовании текстур.

Одним из недостатков такого способа является то, что у вас будут разные разрешения ваших UV-островов. Другими словами, две части модели, которые должны быть одинакового размера (например, двери грузовика), могут иметь UV-карты разного размера. Это означает, что в конечном итоге одна из дверей будет иметь разрешение текстуры, которое отличается от другого, а мы хотели бы избежать этого:

(Larger – больше, Smaller – меньше)

Один из способов исправить это — добавить новое изображение в наш Редактор UV/Изображений (UV/Image Editor). В поле Генерируемый тип (Generated Type) мы выберем пункт UV-решётка (UV Grid):

Теперь вы можете переключить Режим затенения в зоне просмотра на Текстуру (Texture) и взглянуть на UV-решётку. Цель UV-решётки — помочь вам проверить ваши UV-карты (убедиться, что они не растянуты, и что у них подходящий масштаб):

| Замечание Вы также можете использовать для этого опцию Area Stretch. (К сожалению, я не смог найти эту опцию. Возможно, автор имел ввиду опцию Минимизировать растяжения (Minimize Stretch), к отор ую можно найти в меню UV или выз вать с помощью комбинации клавиш Ctrl-V – прим. пер.)

Например, когда я смотрю на внутреннюю часть борта и на кузов грузовика, я вижу, что у меня проблема. UV-карта борта слишком большая по сравнению с кузовом, в результате чего квадраты на нём слишком малы:

(Big Square – Большой квадрат, Small Square – Маленький квадрат)

Используя этот метод, вы можете настроить размер островов вашей UV-карты. Вы также можете использовать опцию Усреднить масштаб островов (Average Island Scale), чтобы сделать это автоматически (нажмите Ctrl+A в UV-редакторе). Когда их размер будет правильным (или достаточно близким к нему), вы можете упорядочить их более логично. Убедитесь, что вы оставили место для остальной части грузовика внутри пространства вашего квадратного изображения:

(Space for Other Parts – Пространство для других частей)

Затем мы двинемся дальше и развернём раму и механические детали внизу грузовика. Сначала мы разворачиваем плоскую часть, которая составляет дно грузовика.

Далее, мы будем разворачивать выхлопную трубу. Вы можете сделать это, выбрав один из длинных рёберных циклов вдоль трубы и промаркировав шов. Шов предписывает Блендеру, где разрезать модель для её развёртки. Определив, какие рёбра будут швами, вы получаете намного больше контроля над процессом разворачивания. Чтобы отметить шов, просто нажмите Ctrl+E и выберите Пометить шов (Mark Seam):

Теперь, когда вы отметили ваш шов, вы можете сделать развёртку с помощью первого пункта Развернуть (Unwrap):

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

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

Тем не менее, вы можете захотеть сэкономить время, и не заботиться о 100% точности отображения. В этом случае существуют несколько небольших трюков, которые вы можете использовать:

| Замечание То, чему я собираюсь вас обу чить, не счита ет ся хорошей техникой. Это быстрый способ выполнить работу (и, следовательно, об этом стоит знать), но я советую вам пользоваться этим умеренно.

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

Естественно, развёртка части с использованием неправильного вида приведёт к отсутствию текстурного пространства для неё:

(Improperly Unwrapped from Top View – Ошибочно развёрнуто из вида сверху, No Texture Space – Нет пространства для текстуры)

Чтобы избежать этой проблемы, вы можете развернуть модель почти с нижней стороны. Если вы развернёте её, скажем, с 15 градусов от оси, вы должны получить адекватный результат:

(Projection Angle – Угол проецирования)

У вас всё ещё будут небольшие искажения:

| Замечание В своём случае я слегка повернул по оси Х. Это означает, что не появится текстурного пространства для самых передних или самых задних полигонов рамы грузовика. Чтобы исправить это, вы можете слегка отклон и ться по обеим осям X и Y.

(Projected from below (lightly off axis). This will result in a bit of distortion. - Сп роецир овано снизу (с лёгким отклонением от оси). Это приве ло к некоторому искажению.)

Давайте взглянем на оборотную сторону этого приёма. Как вы можете видеть, части, не являющиеся абсолютно плоскими (с точки зрения вида снизу), немного искажены. Вы должны решить, можете ли вы с этим жить или нет. Если нет, вам придётся развернуть каждую часть вручную.

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

(Distotion – Искажение)

Затем мы развернём шину:

| Замечание Я удалил все колёса/шины, кроме одного, чтобы все четыре колеса в конечном итоге использовали одно и то же текстурное пространство. Как только мы сделаем UV-разв ёртку для одн ой шин ы, мы с можем просто про дублировать эти полигоны, и они останутся назначен ными на одну и ту же часть изображения. Это полезно для экономии места.

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

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

Это далеко от идеала. Как вы можете видеть, тут много свободного места, и части развёрнуты не со 100%-ной эффективностью. UV-развёртка — это искусство, и можно было бы написать целую книгу по различным методам. Поскольку у нас для этого здесь нет места, мы коснулись лишь основ. Я, конечно, рекомендую вам серьёзнее углубиться в эту тему!

Теперь, когда мы создали нашу UV-карту, мы снова можем запечь наши текстуры. В прошлый раз мы использовали опцию Текстуры (Texture) для нашего режима Запекание (Bake). На этот раз, просто чтобы поэкспериментировать, мы будем использовать опцию Полная визуализация (Full Render).

Когда вы используете эту опцию, Блендер запечёт не только текстуры, но также и свет, тень и другие аспекты вашей модели:

Убедитесь, что вы добавили несколько источников света в свою сцену для теста (иначе изображение будет просто чёрным). Когда вы будете готовы, нажмите кнопку Запечь (Bake).

Вы можете заметить, что этот результат немного отличается от первого:

Другой вариант, который у вас есть в вашем Режим е запекания — это Ambient Occlusion. Звучит сложно, но на самом деле это не так. Представьте себе идеальную сферу, окружающую вашу модель и равномерно излучающую свет со всех сторон (кстати, эта идея называется Глобальное освещение). Несмотря на то, что у вас свет идёт отовсюду, некоторые части вашей модели будут блокировать этот свет, и он не будет достигать других частей. Там будут небольшие тени и засветы, где части объединяются вместе или мешают друг другу.

Чтобы лучше понять, просто протестируйте эту опцию:

Это изображение должно дать вам представление о том, что такое Ambient Occlusion. Объединив его с вашей Текстурной версией (или даже с версией Полная визуализация), вы можете быстро добавить немного детализации и сложности в конечное изображение текстуры.

## Добавление деталей в редакторе изображений

Я рекомендую сохранять различные запекания как отдельные изображения, а затем комбинировать их в двумерном редакторе изображений, который поддерживает слои (таком как GIMP, Photoshop и т. д.).

После того, как вы объедините их вместе по своему усмотрению, вы также можете вручную нарисовать блики, тени и наклейки на вашей карте текстур.

Например, я быстро нарисовал простой рисунок протектора на шине:

(Basic Thread Pattern – Базовый рисунок протектора)

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

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

(Real Foglight Photo – Реальная фотография противотуманной фары)

| Замечание С другими проектами в Блендере мы не стали бы этого делать. Двумерное изображение фары никогда не будет таким же хорошим, как правильно смоделированн ая линза с прозрачными материалами. Однако для игровой модели мы не можем позволить себе то количество геометри и, которое необходим о для ее моделирования; б ольшинство игровых движков в любом случае не да дут вам такого уровня реализма для стеклянных поверхностей.

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

Потратив немного времени и попрактиковавшись, вы сможете создать несколько хороших текстурных карт с помощью этих методов.

## Проверка карты текстур

После того, как мы закончим, мы можем проверить материалы и текстуры в Блендере. Мы будем использовать карту текстур, чтобы создать несколько Cycles-материалов и убедиться, что всё правильно подобрано.

Вы можете начать просто с добавления базового фона, камеры и настройки освещения:

Затем мы создадим наши материалы. Например, здесь представлен простой материал покраски машины, использующий изображение текстуры:

(Image-Based Paint Material – Материал покраски на основе изображения)

Для шины мы также можем использовать это изображение текстуры для карты Смещения (Displacement):

(Tire Material – Материал шины)

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

И вот версия грузовика, которая использует карты нормалей для добавления урона/детализации к модели (выражаю признательность за этот рендер в адрес James Clayton):

Не стесняйтесь экспериментировать с отдельными картами смещения/нормалей. Однако имейте в виду, что каждое изображение, которое вам понадобится загрузить, увеличит время рендера и добавит дополнительную нагрузку на CPU/GPU. Используйте отдельную карту, только если вы уверены, что ваша игра или другая 3D-программа сможет ее обработать.

С базовыми Cycles-материалами грузовик выглядит вот так:

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

Когда вы будете удовлетворены, убедитесь, что вы удалили ненужные объекты из своей сцены (светильники, фон, камеры и т. д.). Затем вы можете использовать меню Экспортировать (Export) для сохранения модели в выбранном вами формате:

## Итог

В этой главе мы создали базовые материалы для грузовика. Затем мы использовали встроенный движок рендера в Блендере для создания процедурных текстур. После развёртки модели мы запекли наши текстуры и использовали это изображение для создания и тестирования материалов в Cycles. Как и в предыдущем проекте, мы рассмотрели только основы этой темы. Тем не менее, они должны стать для вас хорошей базой, чтобы двигаться дальше.