Как сделать uv развертку сложной фигуры. Создание развертки для текстурирования с помощью Unwrap UVW

Объекты 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).

Каждый дизайнер знакомый с пакетом 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 откроется обычное окно визуализации, в котором будет находиться наша развертка. Жмем на иконку дискеты и сохраняем изображение развертки в любом удобном формате.

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

В данной статье рассматривается вопрос создания 3D модели с оптимизированной uv разверткой (с созданием вспомогательных швов на uv развертке 3D модели, а также без них, в частности, без деления uv развертки на острова) с целью снижения количества используемых текстур в игровых движках, уменьшения размеров текстур и uv развертки 3D моделей на примере 3D редактора Blender и игрового движка Unity 3D.

Размер, количество и качество текстур, а также размер uv развертки и количество островов на ней для 3D моделей, используемых в игровых движках, остаются актуальными всегда из-за оказываемой нагрузки на видеокарту и процессор. Однако чем выше разрешение текстуры и чем больше размер островов uv развертки, занимающих площадь текстуры при одном и том же её размере, тем качественнее будет выглядеть в игре текстура, “натянутая“ на 3D модель. Следовательно, необходимо оптимизировать uv развертку за счет повторного использования имеющейся текстуры, например, путем наложения одинаковых или схожих элементов uv развертки (uv островов) 3D модели друг на друга и/или на одни и те же области текстуры. Таким способом можно либо уменьшить общую площадь, занимаемую uv разверткой, а размеры каждого uv острова увеличить с целью повышения качества рендера игровых объектов, либо уменьшить размер текстуры, например, с 2048×2028 пикселей до 1024×1024, сделав ставку на производительность. Освободившиеся ресурсы можно использовать, например, для добавления ресурсоемких эффектов, фильтров и т.д., например, для пост-процессинга.

На рисунке показаны созданные традиционным способом 3D модель ангара и uv развертка для него (слева), справа — 3D модель ангара и его uv развертка, созданные описанным в данной статье способом.

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

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

В данном варианте 3D модели ангара дверей не предусмотрено, как и ранее — с целью облегчения понимания описываемого в статье материала, однако заготовка под дверной проем оставлена, так что проделать проем под дверь в ангаре вы с легкостью сможете, если удалите всего лишь одну вершину ангара, как только ангар будет готов. Либо вы можете сделать это на данном этапе, удалив указанную на рисунке вершину. Я продолжу использовать ангар без проема, и к концу статьи вы поймете, почему.


На рисунке показаны 3D модели ангаров: слева показана отзеркалированная, но без применения модификатора, четвертая часть ангара с удаленной вершиной (на развертке вершина также удалилась), что привело к образованию дверное проема (даже двух – по обоим торцам ангара из-за зеркалирования по оси y); по центру рисунка показана 3D модель целикового ангара с выделенной вершиной меша, удаление которой приводит к образованию дверного проема; справа — показан ангар снаружи и изнутри с дверным проемом и массивной распашной дверью.

Не забывайте сохранять файл со своей 3D моделью, желательно в файл под другим именем (например, добавляя цифру в конце имени файла и увеличивая её на единицу при каждом последующем сохранении через Ctrl+Shift+S, тем более что, находясь в меню сохранения, можно нажать клавишу плюс/»+» на дополнительной цифровой клавиатуре, чтобы Blender проделал этот фокус за вас). Так вы получите более гибкую систему резервных копий файлов своей модели и/или сцены, чтобы иметь про запас 3D модель не нескольких стадиях ее создания, если захотите «вернуться в прошлое» и изменить свою 3D модель. Всегда лучше вернуться на десяток шагов назад, чем начинать создавать 3D-модель заново. Вопросы бекапов, откатов до одной из сохранённых версий (включая автоматически сохранённые Blender’ом), копирование моделей с переносом их на отдельные слои и восстановление частей модели из предыдущих версий будет рассмотрено в отдельной статье///, как только она будет дописана.

Не секрет, что во многих случаях лучше сразу создавать оптимизированную 3D модель, чем оптимизировать её после окончания процесса моделирования, особенно это касается низкополигональных (low poly) 3D моделей. Рассмотрим пример такого оптимизированного создания 3D модели на примере sci-fi ангара. Создадим четвертую часть ангара. Почему только четвертую часть, а не ангар целиком? А потому что позднее мы отразим (отзеркалируем) ее по двум осям, так чтобы получился целиковый ангар (но об этом чуть неиже). Вы можете сами создать данный кусок 3D модели ангара или «четвертинку» модели любого другого строения, либо использовать созданный мной в Blender’е кусок модели.

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


Чтобы отметить ребра 3D модели в качестве швов, выберите Правой Кнопкой Мыши модель ангара и нажмите клавишу ‘Tab’, чтобы перейти в режим редактирования меша. Находясь в режиме редактирования меша измените режим выбора элементов меша на режим редактирования ребер, для чего нажмите сочетание клавиш Ctrl+Tab и в открывшемся меню режима выбора меша (Mesh Select Mode) выберите “Edge”.
Не выходя из режима редактирования меша, выберите ребра, как на картинке выше, по которым будут созданы швы на uv развертки. Выбор ребра осуществляется при помощи Правой Кнопки Мыши, а добавить к выбранному ребру еще одно поможет клавиша ‘Shift’. Здесь стоит отметить, что горячие клавиши в Blender работают только для того окна, в котором в настоящий момент находится курсор мыши. После того как выберете все ребра, необходимые для создания по ним швов, нажмите сочетание клавиш Ctrl+E, чтобы открыть меню “Edges”. В данном меню выберите пункт «Mark Seam», чтобы пометить выбранные ребра как швы. В одном из окон 3D вида откройте окно Редактора изображений/uv развертки.



В окне редактора развертки отображается только развертка выбранных в 3D окне полигонов, если не выбран режим синхронного редактирования uv развертки (Keep UV and edit mode mesh selection in sync), иконка которого отмечена синим прямоугольником на рисунке выше.

Если у вас получилась не такая ровная развертка, как на рисунке, не переживайте, я выровнял ее. Если вы считаете, что руками выравнивать разваертку слишком долго, то вы всегда можете воспользоваться add-on’ом для Blendera UV Tool или UV Squares , или вы найдете что-то свое на этом замечательном сайте.

Чтобы воспользоваться функционалом ручного выравнивания uv развертки, для начала, необходимо установить 2D курсор в качестве пивота/центра для вращения и масштабирования (Rotation/Scaling Pivot). Иконка меню Pivot, в котором расположена вкладка 2D Cursor за упомянутую функцию, отмечена на рисунке выше синим прямоугольником. Теперь вы можете выбрать одну из вершин uv развертки Правой Кнопкой Мыши и нажать сочетание клавиш Shift+S (поместив курсор мыши поверх окна редактирования развертки, поскольку горячие клавиши действуют для того окна, в котором находится курсор мыши, т.е. активном окне), после чего в меню шага (Snap) выбрать вкладку “Cursor to Selected”, чтобы установить 2D курсор в выбранную вершину uv развертки. Теперь выберите вершины на uv развертке, которые хотите переместить на один уровень с 2D курсором и нажмите клавишу ‘S’, после чего нажмите клавишу ‘Y’ (для выравнивания по оси y) или клавишу X (для выравнивания по оси x) и затем клавишу 0 (ноль), после чего подтвердите перемещение вершин, нажав клавишу ‘Enter’. Используя данную технику, вы можете придать развертке приемлемый вид без наслоения частей развертки (uv островов) друг на друга. Более простой способ выравнивания выбранных вершин uv развертки доступен через меню Сваривания/Выравнивания вершин развертки (Weld/Align), которое открывается по нажатию клавиши ‘W’. В данном меню выберите пункт выравнивания по оси Y (Align Y) или по оси X (Align X), чтобы выровнять выбранные вершины по оси y или x (y – вертикальная ось в uv пространстве, а x — горизонтальная). Кстати, u и u в названии uv развертки, не больше, чем обозначения осей x и y для исключения путаницы с осями, u соответствует координате x, а u – координате y. Более подробно о uv пространстве вы можете почитать в статье .

Посмотреть процесс выравнивания uv развертки вы можете все в том же видео по созданию и анимированию водопада в Blender и Unity3D .


Чтобы форма и позиция uv развертки не изменилась при повторном ее создании (преднамеренном или непреднамеренном), закрепите вершины uv развертки, для чего выберите в окне редактирования изображения/uv все вершины развёртки, поместив курсор мыши поверх развёртки и нажмите клавишу ‘A’, после чего нажмите клавишу ‘P’. Не забывайте о том, что, как было сказано выше, горячие клавиши действуют для того окна, в котором в настоящее время находится курсор мыши. Вместо использования горячей клавиши вы можете выбрать пункт горизонтального меню “UVs” под окном редактирования развертки, в котором выбрать подпункт Pin.



На рисунке заметно, как “поплыла” текстура на персонаже, причем так, что текстура языка оказалась на пятке 3D модели персонажа. Чтобы такого не произошло, используется “фиксация” вершин развертки в uv пространстве/на uv плоскости.

Но, вернемся к четвертинке ангара. Вы, наверное, заметили, что ребра 3D-модели, расположенные на осях симметрии 3D модели (на осевых линиях, относительно которых далее будет производиться зеркалирование), не были отмечены в качестве швов uv развертки. Это было сделано для того, чтобы показать преимущества и недостатки создания симметричной 3D-модели без дополнительных швов.


На рисунке показаны выделенные желтым ребра модели ангара, которые не были отмечены в качестве швов. Оси симметрии, о которых упоминалось чуть выше, в данном случае совпадают с осями x (красная линия на рисунке) и y (зеленая линия). Центр симметрии объекта по двум осям (x и y) располагается в координатах Origin 3D модели (жирная желтая точка на углу модели, обведена синим кружком). Окно Свойств/Properties обведено фиолетовым. Вкладка Добавить модификатор/Add Modifier обведена ярко желтой линией. Модификатор «Mirror» выделен аквамариновым цветом в списке модификаторов в Blender.

Давайте теперь отразим часть нашей модели по оси икс и игрек, чтобы превратить ее в полноценный ангар. Модификатор Отражение/Mirror, который вы можете найти в панели Свойств/Properties во вкладке «Modifiers» (обведена зеленой рамкой на рисунке выше), если нажмете на кнопку Добавить модификатор позволяет создавать зеркальные копии выбранного объекта относительно центра (Origin) этого объекта (не путать с опорной точкой для вращения и масштабирования/Pivot point for rotating/scaling).
Поскольку я создавал модель, точно зная, что буду с ней делать дальше, то я заранее «плясал» от Origin, выставленного в крайнюю точку модели (кстати, не случайно совпадающей с началом координат, но об этом чуть ниже), относительно которой (точки) я буду зеркалировать имеющуюся в моем распоряжении часть 3D модели, не опасаясь наложения частей модели друг на друга. Установите флажки напротив опций отражения по оси X и оси Y (на рисунке ниже отмечены зеленым цветом ).


Одной из полезных опций в меню зеркалирования является возможность фиксировать вершины модели на осях симметрии, не давая зеркалируемым вершинам пересекать оси симметрии. Отметьте флажком опцию Clipping (отмечена красным ), отвечающую за данный функционал, и попробуйте переместить вершины 3D модели по направлению к оси симметрии или от нее и вы поймёте в чем заключается особенность данной опции.
Помимо Clipping’а в меню зеркалирования можно увидеть опцию Merge (синяя рамка на рисунке ), сливающую расположенные на краях модели вершины зеркального отображения меша и оригинала, создавая единый меш после применения модификатора (что-то вроде инструмента Remove doubles, описанного в статье . Поставьте галочку напротив данного пункта, в противном случае ваша модель будет представлена разрозненными мешами (в данном случае модель ангара будет представлена четырьмя кусками, которые можно будет выделить по отдельности в режиме редактирования меша), что может привести к артефактам на поверхности модели, например, в виде ошибок в расчете затенения в месте стыков ребер 3D модели в игровых движках, и вам придется совершать дополнительную работу по удалению продублированных вершин, прибегнув, например, все к тому же инструменту Remove doubles. Расстояние, на котором вершины считаются совпадающими, определяется значением, выставляемом во вкладке Merge Limit.

Более подробно про эти и другие артефакты, связанные с геометрией 3D моделей, нормалями, материалами, текстурами и шейдерами в игровых движках и 3D редакторах на примере Unity3D и Blender, вы можете прочитать в статьях:

Еще одна опция в меню зеркалирования объектов относится к текстуре и развертке — Textures с параметрами U и V – отвечающая за зеркалирование развертки относительно центра uv плоскости/uv пространства. На представленном выше рисунке слева внизу показана uv развертка ангара после применения модификатора зеркалирования со снятыми флажками напротив параметров U и V, а справа внизу – с проставленными флажками. В рамках данной статьи нам не нужно подобное зеркалирование uv развертки, так что данные флажки проставлять не нужно.

Вернемся к модели ангара. Если у вас получилось не то, на что вы рассчитывали (и ваша модель отличается от показанного на рисунке выше), а что-то наподобие того, что показано на рисунке ниже, то есть зеркалирование части 3D-модели произошло не по тем осям, что вы указали, то попробуйте выставить другие оси для отражения, поскольку отражение работает относительно локальных осей 3D-модели.


Подобное может произойти в том случае, если вы начали моделировать объект, а потом решили развернуть его в режиме объекта, предварительно выбрав его. Такое может произойти если вы повернете объект в режиме меша (т.е. перейдете в режим редактирования меша, выберете все вершины/ребра/плоскости меша через клавишу ‘A’ и повернете его), после чего повернете свою модель, но уже в режиме объекта.

Хотя направление локальных осей и может быть исправлено перед экспортом модели или в его процессе, лучше не прибегать к подобному решению, поскольку, если забыть про необходимость дополнительной подготовки 3D модели перед экспортом (о чем описано в статье ), такой подход вызовет неправильную ориентацию модели после ее импорта в игровые движки, например, Unity3D или Unreal Engine, как описано в статье . Также для того чтобы исключить путаницу с осями в процессе моделирования и экспорта, лучше совершить дополнительные манипуляции сейчас, чем потом. Чтобы выставить локальные оси модели согласно глобальным, выберите модель Правой Кнопкой Мыши и нажмите сочетание клавиш Ctr+A. Эта комбинация клавиш открывает меню «Apply», в котором необходимо выбрать пункт «Rotation & Scale», чтобы использовать существующий масштаб и ориентацию модели в пространстве в качестве параметров для масштаба и ориентации 3D модели по умолчанию, т.е. угол поворота вокруг всех трёх осей установить равным нулю (тем самым совместив направление локальных осей с направлением глобальных, а масштаб 3D модели — равным единице по трём осям.


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


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

Для того чтобы точно выставить Origin объекта в позицию описанную выше, выберите Правой Кнопкой Мыши вершину «B» и переместите в неё 3D курсор (Shift+S и затем выберите «Cursor to selected» в выпадающем меню «Snap») . Теперь выберите вершину A, нажмите клавишу ‘E’, чтобы выдавить ее (получившуюся эструдированную/выдавленную вершину назовем вершиной A1), и затем нажмите клавишу ‘ESC’, чтобы оставить вершину A1 неперемещенной (т.е. оставить ей координаты вершины A из которой она была выдавлена). Теперь, чтобы переместить вершину A1 на линию, проходящую через вершину B (т.е. в позицию 3D курсора, выставленного чуть ранее в позицию вершины B, но только по осям зед и икс), не снимая выделения с вершины A1, нажмите клавишу ‘S’, затем клавишу ‘Z’ и клавишу ‘X’ в нашем случае, после чего нажмите ‘0’ (ноль). Теперь вершина A1 имеет координаты крайней точки вашей 3D модели, т.е. координаты пересечении линий, которым принадлежат точки A и B. Таким образом точка A1 теперь имеет координаты будущей точки симметрии модели ангара, причем сразу по трем осям: X, Y и Z.


Чтобы зеркалирование выполнялось относительно этой точки (вершины A1), необходимо в ее координаты переместить Origin 3D модели. Чтобы это сделать, переместите 3D курсор в координаты вершины A1, как было описано выше (выделите вершину A1, нажмите комбинацию клавиш Shift+S и выберите “Cursot to Selected”). Теперь выйдите из режима редактирования вершин в режим объекта (клавиша ‘Tab’). Выберите ангар Правой Кнопкой Мыши и под одним из окон 3D вида выберите вкладку Object, которая открывает меню объекта. В этом меню выберите вкладку Transform, а в ней Origin to 3D Cursor, чтобы установить Origin в координаты 3D курсора.


Если у вас все еще включен модификатор Mirror/Зеркалирование, то в режиме объекта вы увидите верно отзеркалированную 3D модель относительно новых координат Origin’а. Если модификатор Mirror не включен, то включите его и выставьте его параметры, как было показано выше.
Когда мы выставляли Origin, мы создали вспомогательную точку A1 и, соответственно, ребро AA1, которые нам больше не нужны. Выберите в режиме редактирования объекта вершину A1и удалите ее, нажав клавишу ‘X’ или ‘Delete’ (не на цифровой клавиатуре) в открывшемся меню удаления “Delete” выберите «Vertices»).

Посмотрите на uv развертку в окне редактора развертки и изображения (UV/Image Editor). Развёртка не изменилась, поскольку новые отзеркалированные вершины ангара появятся только после применения модификатора отражения. Забежав вперед, скажу, что uv развертки всех четырех частей наложатся друг на друга после применения модификатора, т.е. результирующая uv развертка сложится по осевым линиям u и v (по сути x и y для uv пространства/плоскости заменены на u и v для того, чтобы избежать путаницы), как если бы вы свернули лист бумаги в четыре раза, превратив, например, лист формата А4 в лист формата A6. Вот такая особенность зеркалирования существует в Blender’е.

Выберите все вершины на uv развертке (клавиша ‘A’) и закрепите их, нажав клавишу ‘P’, чтобы они не расползлись после повторного создания uv развертки модели или её части, если такое потребуется. В результате данной операции «запиненные» (закрепленные) вершины развёртки будут выделены красным.
Не забывайте, что горячие клавиши в Blender’е работают только для области, в которой находится курсор мыши, т.е. если вы хотите сделать какие-либо действия с uv разверткой, то курсор мыши должен находится в пределах окна Редактора UV/Изображения. Если же вы хотите использовать горячие клавиши для каких-либо операций с 3D моделью (переместить ее, перейти в режим редактирования вершин, сделать или обновить uv развертку и т.д.), то курсор мыши должен находиться в окне 3D вида).

Давайте перед применением модификатора зеркалирования создадим копию ангара. Выберите в режиме объекта Правой Кнопкой Мыши модель ангара и нажмите сочетание клавиш Shift+D. Теперь нажмите и удерживайте клавишу ‘Ctrl’ и переместите мышь влево или вправо, чтобы переместить созданную копию ангара в соответствующее направление, после чего подтвердите новую позицию копии ангара щелчком Левой Кнопки Мыши или нажатием клавиши ‘Enter’.
Стоит отметить, что зажатая клавиша Ctrl во время перемещения объекта (клавиша ‘G’) позволяет перемещать его с заданным шагом сетки, а однократное нажатие клавиши ‘X’, ‘Y’или ‘Z’, ограничит перемещение объекта по одной из соответствующих осей. Нажатие ещё одной клавиши, символизирующей другую ось, добавит соответствующую ось к уже выбранной (или выбранным). Добавление третьей оси для перемещения вернет вас к режиму перемещения объекта по умолчанию, т.е. по трем осям (икс, игрек и зэд).

Помимо добавления осей, по которым может производиться перемещение объекта или его составных частей, в Blender’е существует возможность исключать оси из списка активных. Удерживая клавишу Shift и нажав одну из клавиш, символизирующих ось (X,Y или Z) позволит вам исключить соответствующую нажатой клавиши ось из списка осей, доступных для перемещения по ним вашего 3D модели или ее части.


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

Давайте на время забудем про созданную копию ангара и вернемся к его оригиналу, с которого она была снята.
После создания копии ангара примените модификатор зеркалирования на оригинальной модели, для чего, находясь в режиме объекта, нажмите кнопку «Apply» во вкладке модификатора зеркалирования. Если в верхней части Blender’а и/или в позиции мыши появилась надпись “Modifiers cannot be applied in edit mode”, выйдите из режима редактирования вершин/ребер/поверхностей (клавиша ‘Tab’) и примените модификатор зеркалирования еще раз. Все дело в том, что применение модификаторов к 3D модели возможно лишь в режиме объекта, но не в режиме редактирования меша.

На самом деле, перед экспортом модели необязательно применять модификатор зеркалирования, а можно поставить флажок напротив опции “Apply Modifiers” в меню экспорта (в Бета версии Blender 2.76 данная опция недоступна, поскольку применение модификаторов выполняется автоматически).


Как можно заметить на рисунке, после применения модификатора зеркалирования у 3D модели остались ребра, расположенные вдоль и поперек осей симметрии, если их удалить (на самом деле, растворив, использовав Dissolve Edges в меню удаления), то количество треугольников можно было бы снизить с 252 до 200 штук, но тогда бы потерялся бы весь смысл того, что мы здесь делали за исключением использования модификатора зеркалирования, поскольку uv развертку пришлось бы обновлять, что превратило бы ее в ту, что была показана для 3D модели, созданной обычным способом. Видите, в каком плачевном состоянии uv развертка (справа внизу) после растворения ребер? Есть возможность снизить количество треугольников, о которых пекутся многие производители игр, особенно для мобильных платформ, и о нем мы расскажем дальше в этой статье.

На этом этапе вы уже можете удалить вершину, которая отвечает за возможность создания дверного проема, что, кстати, снизит на 12 количество треугольников, из которых состоит 3D модель ангара.
Теперь пришло время назначить нашей модели материал, для чего выберите ее Правой Кнопкой Мыши и во вкладке Material/Материал (круг, разделенный на четыре части) в окне Свойств/Properties щелкните на кнопке “New”. Если материал не будет создан, то после импорта модели в Unity для нее будет материал по умолчанию.

Ну вот, ваша модель ангара готова и теперь вы можете экспортировать ее для последующего импорта в игровые движки, например, Unreal Engine 4 , Amazon lumberyard , CryEngine , Unigine , Delta Engine , Unity3D , NeoAxis 3D Engine и других.



На рисунке показан процесс импорта 3D модели в формате FBX в Unity3D, а также уже импортированный ангар и помещенный на сцену. Также на рисунке в меню Ассетов показана 3D модель ангара с перепутанными осями.

Импортируйте в Unity3D какую-нибудь текстуру, желательно бесшовную (более подробно про бесшовные текстуры описано в статье про замощение текстурой, атласы и переодевание персонажей ), например, текстуру бетона . Назначьте материалу модели текстуру в редакторе Unity3D.


На рисунке показана затекстурированная 3D модель ангара. Зелеными стрелками показаны два варианта назначения текстуры: верхняя стрелка с созданием нового материала, нижняя стрелка – назначение текстуры уже созданному материалу. На этом рисунке оси 3D модели уже исправить.

Посмотрите на крышу ангара, его боковые и торцевые стороны, а точнее на текстуру по одну и другую стороны осей симметрии нашей модели. Как вы можете заметить, текстура зеркально отобразилась относительно этих осей. Это является одновременно и плюсом, и минусом. Минус заключается как раз в нечитабельности надписей, нанесенных на 3D модели с подобной разверткой. А вот к плюсам можно отнести отсутствие повторяемости текстуры, как если бы текстура была бы затайлена на поверхности 3D модели.Более подробно о замощении текстуры/тайлинге текстуры можно прочитать в статье .
Отсутствие резких переходов на осях симметрии 3D модели (в отличие от описанных выше искажений текстуры на швах модели) обусловлено тем, что острова развертки симметрично отраженных частей нашей 3D модели в точности повторяют друг друга: координаты вершины uv островов совпадают. Если бы они были разнесены по uv плоскости, то проявились бы несоответствия на краях uv развёртки. Подобного результата добиться другим способом без создания швов по осевым линиям можно, разве что, совмещением uv островов вручную или если позаботиться написанием скрипта на python’е, создав соответствующий add-on. Ну и, конечно, если доводить текстуры на швах модели вручную, как было описано ранее.

Описанный выше способ создания симметричных моделей через предварительное создание uv развертки с последующим зеркалированием отлично подходит для небольших моделей, моделей, использующихся в мобильных играх, а также для LOD’ов (англ. Levels Of Detail - уровни детализации), имеющих много меньше треугольников, по сравнению с основной моделью здания или персонажа. 3D модели с низким уровнем детализации модели служат заменой основной хорошо проработанной 3D модели для отображения на больших расстояниях от камеры в игровых сценах с целью снижения нагрузки на GPU и/или CPU. В онлайн генераторе персонажей Character Generator от Autodesk LOD’ом можно назвать уровень детализации Crowd, генерируемый по желанию вместе с lowpoly моделью. С другой стороны, для AAA проекта, LOD’ами могут являться и Crowd, и Low, и, в некоторых случаях, даже Medium poly персонажи.


Посмотрите на рисунке ниже, сколько места освободилось на uv развертке, а значит, размеры островов развертки можно увеличить, что поднимет разрешение текстуры на каждой отдельной частью 3D модели персонажа или здания, следовательно, увеличит разрешение текстуры 3D модели вцелом.


Зеркалирования позволяет не только снизить занимаемое разверткой место на uv плоскости или увеличить качество текстуры модели, но и позволяет создавать, например, братьев, ведь не обязательно при скульптинге включать зеркальное отражение. Также такой подход может использоваться для создания двух различных карт нормалей, на одной из которых может быть продемонстрирован персонаж до попадания в “мясорубку” боя или лапы монстров, а на другой — после.

Альтернативная uv развертка 3D модели ангара в Blender. Избавляемся от бросающейся в глаза повторяемости текстуры.

Однако всем и всегда хочется сократить затраченное на моделирование и текстурирование 3D модели время не только для LOD’ов и примитивных моделей, но и для основной модели. Что же делать в этом случае? На помощь приходит смекалка, наблюдательность и жизненный/игровой опыт. Как мы все знаем из жизни, нельзя одновременно увидеть противоположные стороны объекта (конечно, без использования подручных средств, таких как зеркало или система зеркал, или, например, шейдеров, если говорить о компьютерных технологиях). Следовательно, если разделить uv развертку на две части, например, вдоль продольной или поперечной оси симметрии, то можно вторую часть uv развертки зеркально отразить относительно выбранной оси симметрии, так что не особо придирчивый игрок не заметит того, что текстура модели повторяется.

Выделите Правой Кнопкой Мыши ангар перейдите в режим редактирования меша (клавиша ‘Tab’). Если у вас выбран режим редактирования вершин меша, то для удобства смените его на режим редактирования ребер. Чтобы выбрать режим редактирования ребер меша, нажмите сочетание клавиш Alt+Tab и в открывшемся меню режима выделения выберите ‘Edge’.
Выделите осевые поперечные ребра при помощи Правой Кнопки Мыши в сочетании с клавишей Shift, разделяющее ангар на две части и пометьте их в качестве шва uv развертки (Shift+E > «Mark Seam»).
Ребра меша также можно выбирать и в режиме вершин: нажмите и удерживайте клавишу Alt и кликните Правой Кнопкой Мыши на одном из ребер, проходящих по поперечной оси симметрии, чтобы активировать инструмент loop select, позволяющий выделить сразу ребра, являющиеся продолжением друг друга (образующие или потенциально образующие петлю).


Поместите курсор поверх одной из вершин/ребер 3D модели в одном из окон 3D вида и нажмите клавишу ‘L’, чтобы выбрать часть модели, лежащей в пределах одного из uv островов. Такой режим выбора элементов 3D модели установлен по умолчанию для режима выбора связанных элементов (Select Linked, отмечено фиолетовым на рисунке ниже), но вы можете сменить его, если захотите выбрать подобным способом элементы одной модели; вершины/полигоны, имеющие одинаковый материал; принадлежащие одной развертке; ограниченные крутыми/острыми ребрами; или как в нашем случае, ограниченные швом, и, соответственно, принадлежащие одному острову uv развертки.


Теперь откройте меню развертки, выбрав соответствующую иконку под окном редактирования развертки (на рисунке выше обведен голубым прямоугольником), и выберите пункт Отражения/Mirror, в котором выберите ось, по которой хотите зеркально отразить выбранные вершины uv развертки (можете по желанию выбрать X или Y). Осталось лишь уменьшить масштаб uv развертки. Выберите все вершины, например, нажав клавишу ‘A’ или использовав для этого инструмент прямоугольного выделения (клавиша ‘B’) или инструмент выделения окружностью (клавиша ‘C’). Теперь нажмите клавишу ‘S’, чтобы активировать масштабирование и переместите мышь так, чтобы uv развертка уместилась в выделенном под нее uv пространстве, отмеченном сеткой (или черным фоном, если вы уже успели создать изображение в меню Image). Вы также можете задать коэффициент масштабирования с клавиатуры, если после клавиши ‘S’ введете с клавиатуры “2”, “3”, “4” и т.д. для увеличения масштаба uv развертки или если введете последовательно “0”, “.”, “5”, “0”, “.”, “1” и т.д. для уменьшения масштаба uv развертки. Задание параметров работает не только для масштабирования (причем не только uv развертки, но иобъектов на сцене), но и для других модификаторов!


Операцию зеркалирования uv развертки можно проводить не только вдоль шва. Если перед созданием шва вы выполните зеркалирование выбранных вершин развертки (только теперь их придется выбирать вручную, например, при помощи прямоугольного выделения в окне 3D вида, активируемого клавишей ‘B’), то получите тот же результат.

Также, если вас не устроили параметры масштабирования, вы можете сразу после завершения операции над объектом нажать клавишу ‘F6’, чтобы открыть меню установки параметров последнего действия и изменить их. Клавиша F6 работает не только для модификатора масштабирования, но и для перемещения, выдавливания, вращения и многих других операций, выполняемых в Blender’е.


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


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


Создаём контейнер из ангара.

Если вы строго выполняли все то, что было написано в данной статье до этого, и сдерживали своё любопытство в том, что будет, если к уже выбранным двум осям, выбранным для зеркалирования модели, добавить третью ось z, то ваш час настал. Те, кто уже попробовал самостоятельно поставить флажок напротив оси z в настройках модификатора отражения/зеркалирования, я надеюсь, также смогут узнать что-нибудь полезное из этой завершающей части статьи.
Полагаю, что вы уже поняли, что для того, чтобы превратить ангар в контейнер, необходимо добавить в модификаторы зеркалирования ось z. Чтобы это сделать, выберите копию ангара, которую мы создали чуть выше, тот самый ангар, на котором был использован модификатор зеркалирования, но не был применен. Откройте панель модификаторов и добавьте ось z к уже отмеченным флажками осям x и y. Теперь отражение четвертушки ангара осуществляется относительно трёх осей, что превращает бывший ангар в контейнер.

Статье про экспорт 3D моделей из Blender’а в Unity3D . Расположение модели на сцене роли не играет, важно только расположение Origin’а относительно центра 3D модели. Origin определяет «точку отсчёта» для модели, т.е., например, в Unity 3D он определяет «нулевые координаты» 3D модели/ориентацию и является точкой, относительно которой производится вращение объекта (через скрипт), т.е. является аналогом pivot point в Blender’е. Сейчас Origin контейнера находится в его центре, так что если перенести контейнер в Unity (применив модификатор зеркалирования до или во время экспорта модели) и перенести его на сцену, выставив ему нулевые координаты в пространстве Unity, то половина контейнера окажется под полом, а половина — над ним, так что мы получим все тот же ангар.


Конечно, можно вручную в Unity3D выставить необходимое смещение по оси y и затем создать префаб объекта с уже установленными координатами (можно еще создать пустышку и сделать ее родителем для 3D модели контейнера, так чтобы потом вращать эту самую пустышку с целью повернуть контейнер вокруг нее, а не вокруг центра контейнера, можно создавать множество лишних костылей), чтобы ящик стоял на полу, а можно уже в Blender’е выставить Origin контейнера в центр его дна. Стоит отметить, что расположение Origin зависит от типа 3D модели и цели, с которой она была создана, а также от дизайнерской задумки. Также Origin играет немаловажную роль при использовании RigidBody в Unity3D, например, при установке центра масс относительно Origin Rigidbody.centerOfMass .
Прежде чем установить Origin в точку с новыми координатами в Blender’е, необходимо применить модификатор зеркалирования, поскольку, как мы заметили раньше в статье, зеркалирование частей модели происходит относительно этого самого Origin. Кстати, перемещение вершин в режиме редактирования меша с включенным Clipping’ом является отличным способом изменить размер своей модели без использования модификатора масштабирования (конечно). Без включенного clipping’а – отличным способом создать сразу четыре одинаковых 3D модели без создания копий модели.

Чтобы изменить взаимное расположение меша и Origin’а перейдите в режим редактирования объекта (‘Tab’), выберите все вершины/ребра/полигоны меша (‘A’) и переместите их (‘G’), используя клавишу ‘Ctrl’ для перемещения с шагом.

Еще одним способом установки Origin’а является использование 3D курсора. Посе применения модификатора зеркалирования выберите в режиме редактирования меша все нижние вершины контейнера (‘B’) и нажмите сочетание клавиш Shift+S, чтобы открыть меню шага “Snap”, и выберите в нём пункт «Cursor to Selected», чтобы установить 3D курсор в геометрический центр выбранных вершин (более подробно про выставление 3D курсора вы можете прочитать в упомянутой статье про экспорт объектов в Blender 3D). Теперь выйдите из режима редактирования меша (вернитесь в режим объекта) и в панели, расположенной под окном 3D вида, выберите вкладку объекта “Object”, после чего в выпадающем меню выберите «Transform», в котором, в свою очередь, выберите «Origin to 3D Cursor”, чтобы установить Origin контейнера в координаты 3D курсора.
Вместо заключения.

Используя подобную технику создания 3D моделей при одном и том же размере текстуры можно добиться более качественного отображения текстуры на 3D модели. Данный подход отличается отсутствием необходимости создания дополнительных швов развертки, увеличивающих количество вершин 3D модели при экспорте ее в игровые движки. В статье более подробно описана зависимость количества вершин 3D модели от количества швов uv развертки и режима сглаживания 3D модели. Однако такой подход приводит к повторяемости текстуры на сложенных друг на друга участках развертки, что, как описано в статье, решаемо.
Описанный в статье способ оптимизации 3D модели можно использовать не только для более качественной визуализации 3D модели в игровых движках, таких как NeoAxis 3D Engine 15 948

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).