Создание 3D модели с оптимизированной uv разверткой. Из Blender в Unity 3D

В данной статье рассматривается вопрос создания 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 развертка, созданные описанным в данной статье способом.
На рисунке показаны созданные традиционным способом 3D модель ангара и uv развертка для него (слева), справа — 3D модель ангара и его uv развертка, созданные описанным в данной статье способом.

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

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

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

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

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

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

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

На рисунке показана четвёртая часть 3D модели ангара с разных ракурсов с отмеченными рёбрами в качестве швов.
На рисунке показана четвёртая часть 3D модели ангара с разных ракурсов с отмеченными рёбрами в качестве швов.

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

На рисунке показано меню типа отображаемого редактора (Edit Type), пункт редактирования развертки и изображения (UV/Image Editor) которого позволяет вместо одного из окон 3D вида отобразить uv плоскость и uv развертку модели.
На рисунке показано меню типа отображаемого редактора (Edit Type), пункт редактирования развертки и изображения (UV/Image Editor) которого позволяет вместо одного из окон 3D вида отобразить uv плоскость и uv развертку модели.

Чтобы создать развертку 3D модели, выберите все вершины/ребра меша (нажав в одном из окон 3D вида клавишу ‘A’) и нажмите клавишу ‘U’, чтобы открыть меню uv преобразования (UV Mapping), в котором выберите пункт “Unwrap”.  Более подробно о том, как отмечать швы и создавать развертку (а также про выравниваниеuv развертки), вы можете прочитать в одной из предыдущих статей, например, в статье про создание водопада и анимированной воды посредством смещения текстуры и/или посмотреть в видео про создание водопада.

На рисунке показана получившаяся uv развертка четвертинки ангара.
На рисунке показана получившаяся 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 развертка четвертой части ангара до (слева) и после (справа) выравнивания вершин на uv плоскости.

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

На рисунке показана uv развертка с зафиксированными вершинами и меню развертки с выбранным пунктом Pin, отвечающим за фиксирование выбранных вершин uv развертки.
На рисунке показана uv развертка с зафиксированными вершинами и меню развертки с выбранным пунктом Pin, отвечающим за фиксирование выбранных вершин uv развертки.

Как было сказано выше, закрепление (прикалывание, запинивание от англ. Pin) вершин развертки не позволит ей изменить свою форму, положение и ориентацию в пространстве при повторном создании uv развертки 3D модели, если, конечно, это понадобится. Если не закрепить uv развертку и «развернуть» 3D модель ещё раз, то uv развертка будет создана заново, а острова развёртки будут заново размещены в uv пространстве. Это не критично, если вы еще не компоновки острова uv развёртки и не выравнивали ее вершины, а также если еще не текстурировали свою 3D модель и не запекали карты нормалей, затененностей и т.д. К чему обычно приводит использование развернутой заново uv развёртки с незакрепленными вершинами, вы можете посмотреть в статье про ошибки в отображении 3D моделей в Unity 3D.

На рисунке показана 3D модель, импортированная в Unity3D: uv развертка которой была развернута заново (слева), справа – с правильной uv разверткой, вершины которой не перемещались после создания диффузной карты (еще называемой Albedo или просто текстурой).
На рисунке показана 3D модель, импортированная в Unity3D: uv развертка которой была развернута заново (слева), справа – с правильной uv разверткой, вершины которой не перемещались после создания диффузной карты (еще называемой Albedo или просто текстурой).

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

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

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

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

На рисунке показано меню модификатора зеркалирования/Mirror.
На рисунке показано меню модификатора зеркалирования/Mirror.

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

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

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

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

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

На рисунке показана 3D модель с неправильно ориентированной 3D моделью: направление локальных осей 3D модели не совпадает с направлением глобальных осей. Переключиться между отображением локальных/глобальных осей можно при помощи кнопки Global или Local (в зависимости от режима, в котором вы сейчас находитесь), расположенной под каждым окном 3D вида и действующей, соответственно, каждая для своего окна.
На рисунке показана 3D модель с неправильно ориентированной 3D моделью: направление локальных осей 3D модели не совпадает с направлением глобальных осей. Переключиться между отображением локальных/глобальных осей можно при помощи кнопки Global или Local (в зависимости от режима, в котором вы сейчас находитесь), расположенной под каждым окном 3D вида и действующей, соответственно, каждая для своего окна.

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

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

На рисунке показано действие инструмента применения текущего поворота и масштаба 3D объекта в Blender в качестве параметров по умолчанию. Слева на рисунке показана 3D модель ангара до сброса значений поворота и масштаба, справа – после.
На рисунке показано действие инструмента применения текущего поворота и масштаба 3D объекта в Blender в качестве параметров по умолчанию. Слева на рисунке показана 3D модель ангара до сброса значений поворота и масштаба, справа – после.

 

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

На рисунке показан разрыв (2) и наслоение (1) в 3D модели при неверном выставлении Origin и использовании модификатора Отражения/Зерказа/Зеркалирования/Mirror. Красным отмечен Origin модели ангара, относительно которого производится зеркалирование части ангара. Желтым показана “крайняя точка”, относительно которой необходимо производить зеркалирование, следовательно, в координаты этой точки необходимо переместить Origin 3D модели либо переместить все вершины модели так, чтобы ангар был полностью симметричен относительно этой точки. Фиолетовая стрелка символизирует перенос Origin’а в требуемые координаты.
На рисунке показан разрыв (2) и наслоение (1) в 3D модели при неверном выставлении Origin и использовании модификатора Отражения/Зерказа/Зеркалирования/Mirror. Красным отмечен Origin модели ангара, относительно которого производится зеркалирование части ангара. Желтым показана “крайняя точка”, относительно которой необходимо производить зеркалирование, следовательно, в координаты этой точки необходимо переместить Origin 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 для выставления в нее 3D курсора с последующей установкой в него Origin’а.
На рисунке показан процесс добавления вспомогательной точки A1 для выставления в нее 3D курсора с последующей установкой в него Origin’а.

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

На рисунке показан процесс переноса Origin объекта в позицию 3D курсора и удаления вспомогательной вершины A1.
На рисунке показан процесс переноса Origin объекта в позицию 3D курсора и удаления вспомогательной вершины A1.

Если у вас все еще включен модификатор 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 модели или ее части.

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

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

Давайте на время забудем про созданную копию ангара и вернемся к его оригиналу, с которого она была снята.
После создания копии ангара примените модификатор зеркалирования на оригинальной модели, для чего, находясь в режиме объекта, нажмите кнопку «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 модели ангара без импорта остальных объектов на сцене, таких как камера, свет, созданная копия ангара и т.д.
На рисунке показан процесс экспорта выбранной 3D модели ангара без импорта остальных объектов на сцене, таких как камера, свет, созданная копия ангара и т.д.

Чтобы экспортировать вашу 3D модель, выберите ее в режиме объекта Правой Кнопкой Мыши и в главном меню откройте вкладку “File”, в меню которой выберите “Export” и затем FBX (.fbx). Теперь в настройках слева оставьте нажатой кнопку “Mesh” (выделено зеленым), а “Empty”, “Camera”, “Lamp”, “Armature” и “Other” отожмите, чтобы экспортировать лишь меш. Затем отметьте флагом опцию “Selected Objects” (отмечено фиолетовым), чтобы экспортировать лишь выбранную ранее на сцене 3D модель ангара. После определения имени файлу (красная рамка на рисунке), в которую будет экспортирована ваша модель, выберите кнопку “Export FBX” (обведено синим) в правом верхнем углу окна экспорта Blender. Хочу здесь отметить, что, хотя процедура подготовки 3D модели для экспорта в каждый из движков схожа, но имеет свои небольшие отличия. Например, как правильно экспортировать 3D модель в Unity3D описано в уже не раз упомянутой выше статье про правильный экспорт 3D моделей из Blender’а в игровой движок Unity 3D.
Чтобы импортировать в Unity экспортированную 3D модель из Blender’а, просто перетащите её из папки Windows в папку ассетов или одну из ее подпапок в редакторе Unity. Вы также можете Скачать модель ангара (1145 downloads) в формате fbx.

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

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

На рисунке показана затекстурированная 3D модель ангара. Зелеными стрелками показаны два варианта назначения текстуры: верхняя стрелка с созданием нового материала, нижняя стрелка – назначение текстуры уже созданному материалу.
На рисунке показана затекстурированная 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 персонажи.

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

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

На рисунке показана 3D модель персонажа, созданного в генераторе персонажей от Autodesk и импортированного в Blender, после чего левая часть 3D модели была удалена и отзеркалирована.
На рисунке показана 3D модель персонажа, созданного в генераторе персонажей от Autodesk и импортированного в Blender, после чего левая часть 3D модели была удалена и отзеркалирована.

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

 

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

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

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

На рисунке показана гремучая смесь: меню режима выбора меша/режим редактирования ребер меша (слева вверху); установка 2D курсора в выбранную левую нижнюю вершину uv развертки (слева внизу); меню маркировки ребер в качестве швов (по центру вверху); выбор 2D курсора в качестве Pivot’а для масштаба и поворота (по центру внизу); и окно схемы сцены/Outliner, для упрощения навигации по сцене, в котором вы также можете переименовать элементы сцены, если дважды щелкните на их названии (справа вверху).
На рисунке показана гремучая смесь: меню режима выбора меша/режим редактирования ребер меша (слева вверху); установка 2D курсора в выбранную левую нижнюю вершину uv развертки (слева внизу); меню маркировки ребер в качестве швов (по центру вверху); выбор 2D курсора в качестве Pivot’а для масштаба и поворота (по центру внизу); и окно схемы сцены/Outliner, для упрощения навигации по сцене, в котором вы также можете переименовать элементы сцены, если дважды щелкните на их названии (справа вверху).

 

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

На рисунке показан процесс создания альтернативной развертки для 3D модели ангара, включающий зеркалирование uv развертки.
На рисунке показан процесс создания альтернативной развертки для 3D модели ангара, включающий зеркалирование 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 развертка ангара.
На рисунке показана новая альтернативная uv развертка ангара.

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

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

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

 

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

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

На рисунке выше острова uv развертки разнесены для наглядности. Изначально они наложены друг на друга, так что вы сразу можете переместить их с шагом при помощи клавиши ‘G’ и ‘Ctrl’, чтобы совмещение островов было максимально точным. Если же вам не хочется вручную совмещать острова развертки или вы уже переместили их без Ctrl’а, то вам поможет add-on для Blender’а UV Align\Distribute все на том же уже упомянутом сайте http://blenderaddonlist.blogspot.ru/. Кстати, очень советую присмотреть к add-on’ам UV/Image Tools и Simple Box UVW Map Modifier.

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

На рисунке показана 3D модель, швы которой были ”удалены”. Как видно на рисунке uv развертка сильно исказилась, причем произошло наслоение одних частей развертки на другие.
На рисунке показана 3D модель, швы которой были ”удалены”. Как видно на рисунке uv развертка сильно исказилась, причем произошло наслоение одних частей развертки на другие.

 

 

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

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

На рисунке показан ангар, превращенный в 3D модель контейнера простым добавлением третьей оси к выбранным двум.
На рисунке показан ангар, превращенный в 3D модель контейнера простым добавлением третьей оси к выбранным двум.

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

На рисунке показан ангар, ангар-контейнер и контейнер с выставленным Origin в его нижнюю часть так, чтобы контейнер стоял на полу, а также повернутые контейнеры, origin’ы которых находятся в разных точках 3D модели контейнера. Четыре разнесенные части контейнера демонстрируют возможность создавать несколько копий одного объекта без его копирования, а также – возможность создания модульных строений и уровней.
На рисунке показан ангар, ангар-контейнер и контейнер с выставленным Origin в его нижнюю часть так, чтобы контейнер стоял на полу, а также повернутые контейнеры, origin’ы которых находятся в разных точках 3D модели контейнера. Четыре разнесенные части контейнера демонстрируют возможность создавать несколько копий одного объекта без его копирования, а также – возможность создания модульных строений и уровней.

Конечно, можно вручную в 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 моделях и артефакты на картах нормалей более подробно описана зависимость количества вершин 3D модели от количества швов uv развертки и режима сглаживания 3D модели. Однако такой подход приводит к повторяемости текстуры на сложенных друг на друга участках развертки, что, как описано в статье, решаемо.
Описанный в статье способ оптимизации 3D модели  можно использовать не только для более качественной визуализации 3D модели в игровых движках, таких как NeoAxis 3D Engine, Unreal Engine 4, Amazon lumberyard, CryEngine,  Unigine, Delta Engine, Unity3D и др., но и для уменьшения пространства, занимаемого островами на площади, отведенной под uv развертку (что позволяет уменьшать размеры атласов текстур), что крайне важно для мобильных игр и приложений. Во сколько раз была сложена развёртка 3D модели, во столько раз больше места останется для расположения в uv пространстве других элементов той же или другой модели. Использование атласов и одной текстуры для нескольких 3D моделей рассмотрено в только что упомянутой статье.

Автор Максим Голдобин (aka MANMANA)

goldmaxval@gmail.com

Добавить комментарий