Объекты Blender используют трехмерные координаты XYZ для позиционирования в пределах сцены, но у них еще есть особая сетка координат, которая предназначена для работы с текстурами.

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

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

Для управления разверткой программа предлагает использовать специальный редактор UV/Image Editor . Кроме того, уже имеется заготовка расположения окон, оптимально подходящая для работы с текстурами (рис. 4.83). Выбрать ее можно из менюScreen Layout на заголовке программы (пунктUV Editing ).

Как видите, в этом режиме имеется всего два окна: UV Editor и3D View . Такая конфигурация окон действительно самая удобная, но вы можете создать личную под свою задачу.

Рис. 4.83. Раскладка окон UV Editing

Работа с UV-координатами возможна только в режиме редактирования объекта. Причем можно изменять развертку как для всего объекта целиком, так и для выделенной части структуры.

Имеется основное меню UV Mapping для управления разверткой, вызываемое клавишей в окне3D View . Оно содержит 10 пунктов.

 Unwrap (Развертка). Наиболее быстрый способ создания развертки. При этом полученная сетка будет оптимально покрывать всю текстуру.

 Cube Projection (Кубическая проекция). Оптимально подходит для моделей кубической формы. Это могут быть модели: шкафа, телевизора, стола.

 Cylinder Projection (Цилиндровая проекция). Подходит для моделей цилиндрической формы: карандаши, стаканы.

 Sphere Projection (Сферическая проекция). Подходит для моделей сферической формы (рис. 4.84).

 Project from View (Экранная проекция). Полезный режим, когда развертка создается по принципу: "как есть при просмотре". Вы можете развернуть модель или сцену в нужном ракурсе, а программа выполнит своего рода снимок экрана.

Рис. 4.84. Пример раскладки сферы с помощьюSphere Projection

 Project form View (Bounds) (Экранная проекция с заполнением). То же самое, что и выше рассмотренная опция, но в этом случае развертка будет занимать всю текстуру.

 Reset (Сбос). Сброс координат.

 Smart UV Project (Умная развертка). Инструмент для разбиения развертки на несколько независимых зон.

 Lightmap Pack (Развертка для карт освещенности). Создание специальной развертки для использования с картамиLightmap (освещение).

 Follow Active Quads (Следовать за активными квадратами). Работает с выделенными гранями и старается выполнить развертку, пока цепочка полигонов не заканчивается. Работает не всегда оптимально.

Результат работы развертки объекта будет отображаться в окне UV Editor . Не беда, если она не подходит форме рабочей модели. Всегда можно выбрать в менюUV Mapping пунктReset и начать все сначала.

Теперь самое время загрузить текстуру и совместить развертку с картинкой. Для управления текстурами на заголовке окна UV Editor имеется стандартная область для выбора или создания новой текстуры (рис. 4.85).

Рис. 4.85. Управление текстурами

Попробуем поиграть с UV Editor на практике. Включите раскладку оконUV Editing . Выделите имеющийся куб и перейдите в режим редактирования. Нажмите клавишу и выберите пункт менюCube Projection .

Теперь создадим для работы новую текстуру. Нажмите кнопку New в заголовке окнаUV Editor . Появится окно с настройками текстуры (рис. 4.86):

 Name (Имя);

 Width (Ширина) - указывается в пикселах;

 Height (Высота);

 Color (Цвет) - область выбора цвета для заливки;

 опция Alpha (Альфа-канал) - если включено, то текстура будет содержать дополнительный канал прозрачности;

 UV Test Grid (Тестовая решетка) - генерируемая текстура;

 32 bit Float (Глубина 32 бит) - глубина цвета.

Рис. 4.86. Настройки новой текстуры

Выберите пункт UV Test Grid и нажмите кнопкуOK . Под имеющейся разверткой куба должна появиться текстура. Для удобства просмотра включите в окне3D View

режим Texture в менюViewport Shading (рис. 4.87).

Рис. 4.87. Развертка с текстурой и сам куб

UV Editor позволяет управлять размещением как всей сетки целиком, так и отдельных ее элементов. Здесь действуют стандартные возможности окна3D View по выделению, перемещению и масштабированию элементов.

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

Иногда бывает нужно определить расположение конкретного элемента структуры Mesh -объекта на текстуре. В этом случае достаточно выделить нужный элемент в окне3D View .UV Editor после этого покажет только те вершины сетки, которые относятся к данному элементу.

По такому же принципу происходит создание развертки для выделенных полигонов объекта. Попробуйте выделить две смежные грани и выбрать пункт Unwrap в менюUV Mapping . С этого мгновения эта сетка становится отдельным элементом развертки куба. Вы можете свободно манипулировать ее, как заблагорассудится. Такой элемент еще называется "островком". Чтобы увидеть полностью всю сетку, достаточно выделить весь объект.

UV Editor имеет свой собственный набор кнопок, переключающий режим выделения, наподобие такого же, как в окне3D View (рис. 4.89).

Если рассматривать их слева направо, то первая кнопка отвечает за вершины, вторая за ребра, а третья выделяет грани. Особенно полезна последняя четвертая кноп-

Рис. 4.88. Результат изменения масштаба развертки

Рис. 4.89. Кнопки управления выделением

ка. Ее назначение - в выделении островков. С этим набором переключателей можно не бояться заблудиться в дебрях развертки.

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

Seam (Шов) - инструмент, позволяющий с легкостью "разрезать" модель на куски, пригодные для создания развертки. Естественно, никакого реального разделения объекта не происходит, просто таким образом указываются границы, по которым Blender сможет выполнить развертку.

Работа эта выполняется в окне 3D View . Принцип действия заключается в следующем:

1. Выбор области. Выделять лучше всего ребра, т. к. именно по ним будет проходить шов. Выделение должно представлять собой замкнутую область. Удобно использовать инструментEdge Loop , который старается выделить замкнутые ребра (используйте мышь совместно с нажатой клавишей ).

2. Создание шва. Для этого используйте меню:Mesh | Edges | Mark Seem . Отмеченные ребра окрасятся в красный цвет (рис. 4.90).

UV-развёртка представляет собой самый гибкий метод представления двумерных текстур на объекте трехмерного формата. Такой технический процесс поможет правильно разместить 3Д модель на плоскости, создать UV-развертку. Это помогает сделать модели максимально реалистичными и подробными. Такими же преимуществами не могут похвастать никакие процедурные текстуры.

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

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

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

Картинка выше наглядно показывает отличия между отображением текстур в трехмерном варианте и с помощью развертки. При этом на развертке у объекта есть не только данные о координатах X,Y,Z , но и U,V .

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

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

В предыдущем уроке мы ознакомились с базовыми методами проецирования текстур: параметрическим проецированием и внедрением текстур в виде проецируемых изображений (As Projection ) или по трафарету (As Stencil ). Данные методы удобны при проецировании простых моделей, однако их может оказаться недостаточно при текстурировании более сложных моделей (такие объекты обычно требуют совместного использования нескольких типов проецирования и (или) коррекции наложения текстурных координат), а для текстурирования моделей, раскрашиваемых вручную, они и вовсе не подойдут. В подобных случаях приходится создавать развертку модели в редакторе проекционных координат UV Texture Editor . С одной стороны, подобная развертка позволяет более тонко настроить параметры проецирования, благодаря чему искажения текстуры оказываются минимальными. С другой стороны, по такой развертке можно нарисовать любую, даже самую замысловатую текстуру, а затем разместить ее на поверхности объекта с учетом развертки. Рассмотрению простых приемов создания и раскраски UV-развертки и посвящен данный урок.

Теоретические аспекты

Развертка - это плоская карта объекта, на которой присутствуют все его элементы, но расположены они не в пространстве, а на плоской поверхности (рис. 1). То есть если воспринимать модель как реальное скульптурное изображение, а развертку нарисовать на обычном листе бумаги, то, разрезав развертку на отдельные фрагменты, мы сможем наклеить полученные кусочки бумаги на скульптуру, как бы одев ее в бумажный наряд. А потому суть проецирования материалов через UV-развертку состоит в том, чтобы имитировать разрезание внешней оболочка модели на отдельные фрагменты, разложить их на проекционной сетке (так называемом UV-пространстве), превратить полученную развертку в растровое изображение, разрисовать последнее и вновь наложить на поверхность модели.

Технически это выглядит следующим образом. Вначале поверхность объекта мысленно разбивается на фрагменты - во фрагменты объединяют находящиеся рядом грани, к которым будет применен один и тот же тип проецирования, а также одинаковый вариант раскраски. После этого для каждого из фрагментов создают развертку и все элементы развертки размещают на отведенном для этой цели поле редактора проекционных координат UV Texture Editor . Затем делается снимок развертки (UV Snapshot ), представляющий собой обычное растровое изображение. Данный снимок загружается в графическом редакторе, например в Adobe Photoshop, где по развертке (ее удобнее всего использовать в качестве верхнего слоя изображения) создается многослойная текстура (то есть развертка непосредственно разрисовывается), которая сохраняется в графическом файле уже в виде однослойного изображения. На последнем этапе необходимо вновь активировать Maya, создать новый материал, подключить у него на канале Color подготовленную текстуру и назначить данный материал модели, в результате чего текстура окажется наложенной на модель в точном соответствии с разверткой.

При проецировании материалов через UV-развертку следует иметь в виду следующие моменты:

  • в силу длительности и большой трудоемкости операций выделения граней и назначения группам граней вариантов проецирования обычно текструрируют несглаженные модели, сглаживают модели уже после наложения текстуры;
  • процесс выделения граней можно существенно ускорить, если выделять грани не обычным образом, а с применением выделяющей кисти, активируемой командой Edit =>Paint Selection Tool (Редактировать=>Выделяющая кисть). У данной кисти следует отрегулировать размер, после чего можно приступать к выделению, которое будет заключаться в рисовании (то есть проведении) данной кистью по выделяемым граням. При случайном выделении ненужной грани операцию можно тут же отменить;
  • обычно приходится выделять много граней, и совсем необязательно, что делать это придется однократно, поскольку далеко не всегда можно точно сказать, какой из вариантов проецирования обеспечит лучшие результаты. Чтобы избежать повторного выделения граней (что на порядок удлиняет процесс работы), в ряде случаев разумнее отдельные наборы граней запоминать в виде выделенных областей, применяя команду Create =>Sets =>Quick Select Sets (Создать=>Наборы=>Наборы быстрого выделения). После этого выделенную область можно в любой момент активировать, воспользовавшись командой Edit =>Quick Select Sets (Редактировать=>Наборы быстрого выделения).

В редакторе UV Texture Editor отображаются развертка с проекционными координатами и текстура. Если текстура не видна, то необходимо щелкнуть по кнопке Show Texture Image (Показать изображение текстуры) либо применить команду Image =>Display Image (Изображение=>Отображение изображения). Если текстура повторяется (а этого не требуется), то следует ограничить границы интервалов U и V , щелкнув на квадратике справа от команды Image =>Image Range (Изображение=>Интервал изображения) и выставив параметры Minimum U и Minimum V равными 0, а параметры Maximum U и Maximum V - 1.

UV-развертку можно использовать при текстурировании полигональных моделей и поверхностей с иерархическим разбиением (Subdivision Surfaces ). Команды, ответственные за работу с UV-координатами полигональной модели, находятся в меню Polygons редактора проекционных координат, а за управление UV-координатами подразбиваемых поверхностей отвечает меню Subdivs .

В окне редактора UV Texture Editor выделенные проекционные координаты можно перемещать, поворачивать и масштабировать. Для этого требуется перейти в режим работы с UV-координатами, применив команду UV из контекстного меню редактора, а затем воспользоваться инструментами Move Tool , Rotate Tool и Scale Tool . Кроме того, в отношении проекционных координат допустимо еще множество самых разных операций, доступных из меню редактора UV Texture Editor . Наиболее важные среди них следующие:

  • Normalize UV s (Нормализовать UVs) - размещает развертку внутри UV-пространства;
  • Flip UVs (Зеркально отразить UVs) - применяется для зеркального отображения проекционных координат;
  • Rotate UVs (Повернуть UVs) - позволяет повернуть выделенные UVs-координаты на строго заданный угол;
  • Map UV Border (Вычерчивание UV-границы) и Straighten UV Border (Выпрямление UV-границы) - предназначены для распутывания границ развертки вдоль выделенных UV-координат, что актуально, например, в случае, если граница образует петлю. Обе операции используются при подготовке к операции Relax UVs , которая работает лучше, если граница распутана. Операция Map UV Border позволяет расположить границу выделенного фрагмента UV-координат вдоль границ квадрата в диапазоне от 0 до +1 или окружности, вписанной в тот же квадрат. Операция Straighten UV Border подобных ограничений не имеет, и полученная после ее применения граница может иметь произвольную форму;
  • Relax UVs (Смягчить UVs) - позволяет распутать внутренние UV-координаты без нарушений границы развертки и, как правило, используется после применения операции Map UV Border либо Straighten UV Border ;
  • Layout UVs (Скомпоновать UVs) - обеспечивает расположение UV-координат так, чтобы они не перекрывали друг друга;
  • Align UVs (Выровнять UVs) - выравнивает проекционные координаты друг относительно друга;
  • Cut UVs (Разрезать UVs) - позволяет разрезать развертку на части вдоль выбранных ребер;
  • Sew UVs (Сшить UVs) - обеспечивает сшивание фрагментов развертки вдоль выбранных ребер;
  • Move and Sew UVs (Переместить и сшить UVs) - позволяет сшить фрагменты развертки вдоль выбранных ребер с перемещением фрагментов друг к другу (меньший фрагмент перемещается к большему);
  • Merge UVs (Слить UVs) - позволяет слить выделенные координаты вместе (таким образом объединяются только координаты, разделяющие одну и ту же вершину); данная операция заменяет обычное сшивание, однако лучше подходит для слияния полигонов с однотипной геометрией, в то время как Sew UVs предпочтительно выбирать при сшивании разнотипных полигонов;
  • Delete UVs (Удалить UVs) - используется для удаления ненужных проекционных координат;
  • UV Snapshot (Снимок UV) - позволяет сохранить расположение UV-координат в графическом файле, который затем может применяться в качестве шаблона для рисования текстуры в Paint Effects или в любом графическом редакторе.

Подгонка развертки под готовую текстуру

Для начала рассмотрим пример текстурирования игральной кости, на разных гранях которой должно быть от одной до шести точек. Сформируйте обычный полигональный куб (рис. 2). Поскольку мысленно разрезать куб по ребрам для получения его развертки не составляет труда, то несложно представить, как будет выглядеть необходимая текстура. Поэтому сразу откройте любой графический редактор, создайте в нем новое изображение размером 600x800, включите сетку и установите направляющие, разбив изображение на три квадрата по вертикали и на четыре - по горизонтали. Нарисуйте в определенных квадратах круги так, как показано на рис. 3. Сохраните полученное изображение в виде файла в формате JPG (рис. 4). Переключитесь в Maya и для отображения текстур в окне перспективы включите режим аппаратного текстурирования, воспользовавшись командой Shading =>Hardware Texturing (Затенение=>Аппаратное текстурирование). Откройте редактор Hypershade , создайте новый Blinn-материал, обычным образом (то есть в режиме As Normal ) подключите на канале Color нарисованную текстуру и назначьте данный материал кубу. Результат окажется совсем не таким, как хотелось бы, поскольку текстура на каждой из граней будет отображена в полном своем объеме, а не по квадратам (рис. 5).

Попробуем исправить ситуацию. При выделенном в окне проекции Perspective кубе откройте редактор проекционных координат, применив команду Window =>UV Texture Editor . поскольку куб является примитивом, то UV-координаты для него генерируются автоматически и потому развертка текстуры уже имеется, но ее положение по отношению к текстуре далеко от желаемого (рис. 6). Имейте в виду, что увидеть развертку в представленном на рис. 6 виде, скорее всего, вы сможете только после уменьшения масштаба ее отображения, что выполняется с помощью мыши точно так же, как и в окне проекции. К тому же обратите внимание, что размер развертки гораздо больше размера текстуры. Поэтому необходимо подогнать развертку по текстуре - в данном случае потребуется операция масштабирования. В окне UV Texture Editor щелкните правой кнопкой мыши и выберите команду UV (это позволит работать на уровне UV-координат), выделите все вершины куба и, воспользовавшись инструментом Scale Tool , уменьшите развертку так, чтобы текстура была наложенам требуемым образом (рис. 7 и 8).

Рис. 6. Развертка в окне UVTextureEditor

Создание развертки

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

Рассмотрим пример текстурирования обычного полена, в роли которого будет выступать полигональный цилиндр. Текстура на боковой поверхности объекта и торцах должна быть различной, а потому без построения развертки не обойтись. Создайте цилиндр, выделив его, откройте редактор проекционных координат, где будет отображена автоматически назначенная цилиндру как примитиву UV-развертка (рис. 9). Однако, руководствуясь ей, нужный по замыслу вариант текстурирования не реализовать, поэтому переключитесь в режим работы с текстурными координатами (команда UV из контекстного меню UV Texture Editor ), выделите все координаты развертки и удалите их при помощи команды Polygons =>Delete UVs (Полигоны=>Удалить UVs).

Перейдите в режим работы с гранями, нажав клавишу F11. Активируйте выделяющую кисть (команда Edit =>Paint Selection Tool ) и выделите ею все грани боковой поверхности цилиндра (рис. 10). Назначьте данным граням цилиндрическое проецирование, применив команду Edit Polygon s =>Texture =>Cylindrical Mapping (рис. 11). Переместите созданный фрагмент развертки на свободное пространство (рис. 12) - если этого не сделать, то следующий фрагмент развертки будет наложен на только что созданный, после чего разобраться с ними будет проблематично. Из граней верхней поверхности цилиндра создайте новое выделение и назначьте данным граням планарное проецирование, воспользовавшись командой Edit Polygons =>Texture =>Planar Mapping (рис. 13). Переместите полученный фрагмент развертки на свободное пространство. Аналогичным образом создайте фрагмент развертки для нижней поверхности. В режиме работы с UV-координатами (команда UV из контекстного меню) выделите все три фрагмента развертки, уменьшите их масштаб и переместите внутрь UV-пространства (рис. 14). Создайте снимок развертки, открыв из меню Polygons команду UV Snapshot (Снимок проекционных координат) и в появившемся диалоговом окне указав имя файла (поле File Name ), размер (поля Size X и Size Y ) и формат изображения (список Image Format ). Имейте в виду, что изображение должно иметь размер не менее чем 512х512, а лучше - 1024х1024.

Рис. 10. Выделение граней боковой поверхности цилиндра инструментом PaintSelectionTool

Откройте полученный графический файл в любом графическом редакторе (мы выбрали Paint Shop Pro) - рис. 15. Создайте дубликат слоя с разверткой, а затем установите под него слой с фоновым изображением, а также слои со спилами и текстурой коры (рис. 16). Сделайте слой с копией развертки невидимым (рис. 17) и сохраните изображение в графическом файле с объединением слоев (рис. 18). Откройте созданное изображение текстуры (уже однослойной) в графическом редакторе, переведите изображение в режим Grayscale и увеличьте контрастность изображения (рис. 19), сохраните изображение под другим именем.

Переключитесь в Maya, создайте новый Lambert-материал и установите для него на канале Color в качестве текстуры первое созданное изображение. Подключите вторую (черно-белую) текстуру на канале Bump и подберите подходящее значение параметра Bump Depth (мы остановились на значении 0,2). Проведите рендеринг, и вы увидите примерно такое же полено, как представлено на рис. 20.

А теперь несколько усложним задачу: текстурируем объект, полученный из полигонального цилиндра путем экструдирования граней (рис. 21). Попробуем назначить ему такую текстуру, чтобы данный объект стал напоминать набор выстроенных в ряд детских кубиков с буквами алфавита. Сложность в том, что при формировании развертки придется не только учитывать то, какие грани следует объединять вместе, но и добиться минимальных искажений текстуры, поскольку буквы должны иметь одинаковый размер на всех кубиках и не быть растянутыми. Поэтому создайте новый материал, подключите у него на канале Color шахматную текстуру и назначьте данный материал объекту (рис. 22) - изначально ничего хорошего не выйдет, поскольку сгенерированные первоначально для куба UV-координаты совершенно не соответствуют модели.

В режиме работы с UV-координатами выделите все координаты и удалите их командой Polygons =>Delete UVs . Выделите грани одной из боковых поверхностей объекта и назначьте им автоматическое проецирование (Edit Polygons =>Texture => Automatic Mapping ) - рис. 23. Переместите фрагмент на свободное пространство. Выделите грани другой боковой поверхности, также назначьте им автоматическое проецирование и вынесите фрагмент развертки за пределы UV -пространства. Аналогичные операции произведите для двух других боковых поверхностей, а потом и для двух оставшихся отдельных граней (рис. 24). Перейдите в режим работы с UV-координатами, выделите все текстурные координаты боковых поверхностей и масштабируйте их так, чтобы размер квадратов шахматной текстуры на всех поверхностях стал одинаковым (рис. 25). По окончании все фрагменты развертки равномерно масштабируйте и разместите внутри UV-пространства (рис. 26). Создайте снимок развертки, применив команду Polygons =>UV Snapshot .

Откройте полученный графический файл в графическом редакторе. Создайте дубликат слоя с разверткой, а затем установите под него слой с фоновым изображением и слой с цветными квадратами, на каждом из которых находится по букве (рис. 27). Сохраните данную текстуру как однослойное изображение. Переключитесь в Maya и замените шахматную текстуру на только что созданную - это приведет к получению имитации набора из пяти кубиков (рис. 28).

Карта теней вероятно, самая трудная часть в создания визуального представления объекта. Мы используем их, чтобы получить запеченные свет и тень.
Они должны быть однозначно развернуты, так что каждая часть модели имеет свое собственное место в UV пространстве, чтобы в итоге получать корректную информацию о свете и тени.
Важно помнить, что разрешение карты теней крошечное по сравнению с размером UV пространства.
Важно также понимать, что чем больше уровень должен быть оптимизирован тем ниже дизайнер уровней должен использовать разрешение на лайтмапах, иногда доходя до 8 на 8 или 16 на 16 в случае с более мелкими объектами.
Эта тенденция требует, чтобы мы оставили много дополнительного пространства вокруг каждой секции из развертки объекта так, чтобы области, которые являются темными,
не воздействовали на светлые и не уничтожали иллюзию визуальной корректности теней в игре.

Есть 3 основных способа создания такой развертки:

BOX UNWRAP

Часто это самый надежный метод создания развертки объекта, поскольку большинство моделей окружающей среды близки по форме к блокам, которые объединены в некую структуру.
Непрерывный меш (меш в которой нет отстоящих от основной частей) часто бывает очень полезным решением при построении развертки,
это решение поможет обеспечить более эффективное распределение сетки геометрии в UV пространстве.
Это так же будет хорошо работать даже при низком разрешении карты теней, поскольку тогда она образует единый градиент от темного к светлому.
В отличии от фрагментированной развертки где результат покажется более неоднозначным и может потребоваться повысить разрешение карты теней для парирования эффекта резких переходов.
Мы должны стараться избегать этого там где мы можем. К сожалению иногда нет возможности использовать пониженное разрешение или единую развертку геометрии.

PLANAR UNWRAP

Этот способ особенно полезен для плоских конструкций, таких как стены с несколькими фасками или выдавливаниями. Это также очень полезно для больших частей фасадов зданий, таких как, например, многоквартирные дома.
Planar будет разворачивать значительно лучше если использовать неразрывную геометрию, потому что здесь вопрос будет стоять лишь в “расслаблении” сетки развертки.
Иногда так же хорошее правило заключается в том, чтобы убедиться, что на подобной развертке больше места по горизонтали, чем по вертикали, так как отбрасывание теней, как правило, происходит со стороны при слегка повышенном угле,
а не прямо вниз. Так, большее горизонтальное пространство даёт более широкие возможности для построения более резкой тени, из-за тенденции выбора дизайнерами освещения под углом,
чтобы создать более интересные тени, чем при освещении сверху вниз.

CYLINDRICAL UNWRAP

Большинство других форм можно представить как вариации цилиндрической формы, если конечно они не близки к параллелепипедам или плоскостям.
Цилиндрическую развертку хорошо использовать для многих конструкций которые имеют переднюю и боковые части, но не имеют задней, иначе мы бы использовали метод BOX UNWRAP .

Примеры

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


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


Здесь мы видим что необходимо использовать максимально возможное пространство, так как карта теней в любом случае покроет всю развертку.
По этому между соотношением сторон объекта 1 к 1 и 1 к 7 вы увидите сещественную разницу. Так же вы видите что здесь отделены некоторые части развертки и отодвинуты от основной сетки.
Это сделано потому как эти части всегда останутся в тени. Они не должны воздействовать на остальную карту теней.


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


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


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


У некоторых проектов не выходит следовать этим простым правилам, как на скриншоте ниже.


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


Иногда развернуть объект легко, достаточно разбить его на несколько обоснованных частей. А затем просто “расслабить” развертку. Отличный пример объект ниже.


Такая конструкция является по существу цилиндром с плоским основанием поэтому здесь используются эти два основных метода развертки объекта.
Planar разворачивает части геометрии вниз по оси Z, а затем применяется модификатор “расслабления” и немного регулируется положение вершин чтобы убедиться, что ничего не получает слишком мало покрытия.
В середине схожий с основанием случай, здесь центральная часть разделена и использован Planar вместо Cylindrical для того что бы обеспечить большую зону покрытия.
Как всегда, мы больше озабочены охватом, чем чем соотношением сторон 1 на 1. Большим преимуществом будет располагать швы в их реальных местах, это позволит выглядеть теням более естественно.
Если на вашем объекте есть глубокие вырезы, крайне резкие стыки геометрии то это отличное место что бы здесь проложить шов, если конечно он требуется.

Lightmap Coordinates Index

По умолчанию, первый набор UV (индекс 0) статик меша будет использоваться при создании карты теней для статического освещения.
Это означает, что один и тот же набор координат, который используется для нанесения материалов на меш, так же будет использован для статического освещения.
Этот метод довольно часто не является идеальным. Одной из причин этого является то, что UV, используемые для генерации карты теней должны быть уникальными,
а это означает, что каждая грань сетки не должна перекрывать любую другую поверхность в UV пространстве. Причина этого достаточно очевидна: если фейсы перекрывают друг друга на UV развертке,
часть карты теней, соответствующая этому пространству будет применяться к обеим граням. Это приведет к неправильному освещению, появлению теней там где их в принципе быть не должно.
Статик меши имеют свойство LightmapCoordinateIndex , которое позволяет использовать заданную UV развертку под карту теней. Установите это свойство, чтобы указать на набор UV, который правильно настроен для освещения.

UV чарты и отступы

Группы обособленных треугольников с сопредельными UVs называются UV чарты (charts).

Разделять развертку на чарты и располагать их отдельно следует если вы хотите исключить воздействие теней одного чарта на другой. Так же делая отступ следует помнить о простом правиле:
Размер отступа должен быть больше чем 4х4 текселя, так как DXT сжатие работает с блоками именно такого размера.

  1. Потраченный впустую отступ
  2. Необходимый отступ

Это означает, что для карты теней разрешением 32, отступы между частями UV развертки должны быть 12,5% от всего UV-пространства.
Однако, имейте в виду, что использование слишком больших отступов между частями UV развертки приведет к трате памяти, отведенной на карту теней, впустую на более высоких разрешениях.
Чем ближе ближе вы сможете расположить UV чарты, тем лучше. Это позволит уменьшить количество растраченной впустую памяти.


Это далеко не идеальная развертка.

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


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


Это даст единую развертку, на которой почти нет швов и которая гораздо более эффективна.

Конечным результатом является меш, который освещается должным образом без каких — либо артефактов.


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


Каждый дизайнер знакомый с пакетом 3ds Max может без труда нанести материалы на простые объемные фигуры (шар, куб, цилиндр и т.д.), а также использовать текстурные карты, чтобы имитировать некоторые свойства материалов.

Правильно сопоставить точки объекта точкам текстурных карт помогает модификатор UVW Map. Он помогает избежать текстурных растяжений и правильно наложить карты на объект.

Что такое развертка?

Сложнее дело обстоит с объектами, форма которых гораздо сложнее кубика или шара. Для таких объектов необходимо подготовить так называемую развертку.

Развёртка поверхности - фигура, получающаяся в плоскости при таком совмещении точек данной поверхности с этой плоскостью, при котором длины линий остаются неизменными.

Например, для зверя, его «разверткой» и текстурой будет являться собственная шкурка. Каждую точку шкурки мы можем сопоставить зверю. То есть, если бы мы могли завернуть зверя в шкуру, то шкура идеально подошла объекту-зверю.

Но если у нашего зверя качественная текстура и правильная развертка уже присутствуют от природы, то у наших искусственно созданных объектов изначально нет ни развертки, ни тем более текстуры. Нам необходимо создать развертку самим, а она в свою очередь поможет нам правильно «завернуть» наш объект в текстуру.

Более понятен и близок к нашему разговору процесс создания паперкрафт-игрушек. Здесь сначала создается развертка, расчерченная на бумаге, а потом уже из нее сворачивается объект.

Модель

Теперь, когда мы немного разобрались что такое развертка, можно следовать дальше.

Нам необходим объект сложнее примитива, который мы хотим затекстурировать. Я создал для нашего упражнения вот такую модель. Это единый объект, единая сетка.

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

Если сейчас мы применим к нашему домику материал с картой Checker (шахматная клетка) в диффузном канале, то увидим все несовершенство штатной развертки.

Модель домика

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

Развертка

Взглянем на саму развертку. Для этого применим к нашему объекту модификатор Unwrap UVW . Далее в свитке Parameters (Параметры) нажмем кнопку Edit (Редактирование развертки).

Появится окно редактора развертки Edit UVWs (Редактирование координат UVW).

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

Для начала давайте приведем наши кусочки развертки в порядок. Для этого в области Selection Modes (Режимы выделения) на панели под окном редактора развертки выберите режим Face Sub-object Mode (Выделение полигонов).

В появившемся окне Flatten mapping жмем ОК, оставляя параметры по умолчанию. Эта команда позволяет нам раскидать элементы развертки и избавиться от наложений.

Теперь мы видим, что куски не пересекаются друг с другом, многие части модели домика уже узнаются, а квадраты карты Checker почти не искажены. Зелеными показаны внешние ребра элементов, белыми – внутренние.

В перспективном виде мы также можем наблюдать зеленые ребра. Они тоже показывают внешние края наших кусков развертки – они образуют на модели швы. На перспективном виде удобно контролировать расположение кусков. Выделение элементов в редакторе мгновенно отображается и в перспективном виде.

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

Управление в видовом окне редактора схоже с управлением в рабочем видовом окне вьюпорта:

  • Колесо мыши – масштабирование.
  • Средняя кнопка – панорама.

Под главным меню редактора располагаются инструменты для управления кусками развертки - элементами (а также их подобъектами).

Первые три инструмента Move , Rotate и Scale отвечают за перемещение, вращение и масштабирование соответственно. Их функции ничем не отличаются от аналогичных инструментов на основной панели инструментов 3ds Max.

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

Последняя кнопка отвечает за различные режимы отражения элементов.

Работа с кусками (элементами)

Удобнее всего объединять элементы в единые куски следующим образом.

Выделяем крайние (зеленые) ребра одного элемента (режим Edge Sub-object Mode ) – они подсвечиваются красным. Далее находим взглядом в окне редактора элемент с подсвеченными синими ребрами. Эти ребра (красные и синие) являются общими для двух элементов.

Соединяем элементы командой Tools (инструменты) > Stitch Selected (Сшить выделенные). Эту команду также можно вызвать из контекстного меню (правая кнопка мыши).

Итак, два элемента сшиты.

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

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

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

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

  • Сшивайте группами по родственным текстурам (каменная кладка к каменной кладке, дерево к дереву и т.д.)
  • Сшивайте так, чтобы внешние ребра кусков (швы) оказывались в незаметных местах. Именно там возможны несостыковки текстуры.
  • Размещайте куски так, чтобы было удобно текстурировать (то есть не к верху ногами, не боком, не отзеркаленными…).

В процессе сшивания разрозненных кусков вы, наверняка, обнаружите, что некоторые куски соединены не так, как бы вам хотелось. Можно довольно просто исправить эту ситуацию. Выделите фрагмент, который вы хотите отделить (удобнее всего сделать это в режиме выделения Face Sub-object Mode (Выделение полигонов)). Затем отделите фрагмент командой Tools (инструменты) > Detach Edge Verts (Отделить крайние вершины). Также эту команду можно вызвать с помощью контекстного меню (правая клавиша мыши) в редакторе.

Потратив некоторое количество времени на анализ и кропотливое сшивание кусков, вы получите примерно следующее (конечно, с поправкой на вашу модель). Сейчас наши куски разбросаны по рабочему полю. Нам необходимо их все сосредоточить в поле нашей будущей текстуры – синий прямоугольник.

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

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

Развертка готова! Экспортируйте развертку в удобный для вас растровый формат.

Команда меню Tools (инструменты) > Render UVW Template… (Визуализировать UVW-шаблон). Вы увидите небольшое окно Render UVs с параметрами визуализации развертки.

Width , Height – размеры вашей будущей текстуры. Из-за особенностей игровых движков и памяти видеокарт принято сохранять текстуры в форме квадратного изображения со сторонами размерами 2^n (256х256, 512х512,1024х1024 и т.д.) Хотя наш домик и не готовился к вставке в игровой механизм, будем придерживаться правил хорошего тона.

Остальные параметры в данный момент нам не столь важны (цвет швов и ребер и т.д.)

После нажатия кнопки Render UV Template откроется обычное окно визуализации, в котором будет находиться наша развертка. Жмем на иконку дискеты и сохраняем изображение развертки в любом удобном формате.

Теперь вам осталось самое интересное – нарисовать текстуру поверх изображения развертки.