Как сделать развертку в блендере
Как сделать развертку в блендере
Blender по русски
Под UV-map подразумевают т.н. карту вершин объекта созданного мэш-сеткой, на которую переносится двухмерное растровое изображение.
Создание UV-развертки
Выделение граней реза для uv-развертки
Жмём Ctrl-E и выбираем появившемся списке пункт «Пометить шов«.
Пометка шва реза для uv-развертки
При необходимости, можем менять геометрию сетки выбирая ПКМ отдельные узлы и перемещая их.
Создаем изображение текстуры нашего объекта выбрав пункт меню «Изображение > Создать изображение«. Настраиваем параметры по необходимости или оставляем по умолчанию, жмем клавишу «ДА«. Размер изображения в пикселях рекомендуется выбирать кратным числу 2 с целью оптимизации работы с памятью (пример: 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048). Другие размеры допустимы, но могут оказаться не рациональными, конечный выбор можно произвести исходя из производительности в каждом конкретном случае, предворительно проведя ряд эксперементов.
Создание изображения текстуры uv-развертки
Режим создания текстуры для uv-развертки
ВАЖНО! После создания изображения текстуры, его необходимо сохранить во внешний файл. Выбираем пункт меню «Изображение > Сохранить изображение как«.
Настраиваем UV-map для стандартного движка рендера в Blender
Перейдя в стандартный набор окон по умолчанию («Default«). Выбирает закладку «Текстура» в окне «Свойства» (предварительно создав материал в закладке «Материал«). Создаем новую текстуру. Выбираем тип текстуры «Изображение или фильм«. В пункте «Изображение» выбираем файл сохраненной текстуры нажав кнопку «Открыть«.
Выбираем тип текстуры для uv-развертки
Чтобы привязать сетку координат к текстуре, выбираем в пункте «Отображение» в значениях «Координаты» > «UV«.
Привязка текстуры к uv-координатам
Настраиваем UV-map для рендера в Cycles
Если мы хотим рендерить сцену в Cycles, нам придётся задавать координаты в окне «Редактор узлов» при помощи узлов (нодов). Для этого мы можем выбрать из набора окон «Compositing«. Затем в окне «Редактор узлов» активировать пункт «Использовать узлы«.
Привязка текстуры к uv-координатам при помощи узлов для рендера Cycles
Выставляем узлы добавляя их при помощи горячей клавиши Shift-A или при помощи пункта меню «Добавить«.
Нам потребуются следующие узлы: «Текстура» > «Изображение-текстура» и «Ввод» > «Текстурные координаты«. В узле «Изображение-текстура» кнопкой «Открыть» выбираем необходимую текстуру из файлов. Из узла «Текстурные координаты» соединяем UV с Вектор в узле «Изображение-текстура«. После чего можем рендерить сцену.
Набор уздов для привязки к uv-координатам для рендера в Cycles
Выравниваем UV-map
Если нас не устраевает результат полученной автоматически UV-развертки, есть возможность быстро выравнить узлы, при условии, что форма сетки представляет из себя правильный прямоугольник. Для этого выбираем рёбра одного из полигонов и выравниваем их угол строго 0 или 90 градусов. Удобно воспозоваться горячими клавишами S > X > 0 и S > Y > 0.
Выделяем выровненный полигон, нажимаем клавишу «Пробел» и вводим команду «Follow Active Quads«.
UV ToolsпѓЃ
Blender offers several ways of mapping UVs. The simpler projection methods use formulas that map 3D space onto 2D space, by interpolating the position of points toward a point/axis/plane through a surface. The more advanced methods can be used with more complex models, and have more specific uses.
UnwrapпѓЃ
3D Viewport and UV Editor
The Unwrap operator is the only UV unwrapping operator that takes into account seams.
Result of unwrapping Suzanne. пѓЃ
This tool unwraps the faces of the object to provide the “best fit” scenario based on how the faces are connected and will fit within the image, and takes into account any seams within the selected faces. If possible, each selected face gets its own different area of the image and is not overlapping any other faces UVs. If all faces of an object are selected, then each face is mapped to a part of the image.
OptionsпѓЃ
Blender has two ways of calculating the unwrapping. They can be selected in the tool setting in the tool panel in the 3D Viewport.
This method gives a good 2D representation of a mesh.
Uses LSCM (Least Squares Conformal Mapping). This usually gives a less accurate UV mapping than Angle Based, but works better for simpler objects.
Activating Fill Holes will prevent overlapping from occurring and better represent any holes in the UV regions.
Map UVs taking image aspect into account.
Use Subdivision Surface Modifier
Map UVs taking vertex position after Subdivision Surface Modifier into account.
Space between UV islands.
A face’s UV image texture only has to use part of the image, not the whole image. Also, portions of the same image can be shared by multiple faces. A face can be mapped to less and less of the total image.
Smart UV ProjectпѓЃ
UV ‣ Smart UV Project
Smart UV Project, cuts the mesh based on an angle threshold (angular changes in your mesh). This gives you fine control over how automatic seams are be created. It is good method for simple and complex geometric forms, such as mechanical objects or architecture.
This algorithm examines the shape of your object, the faces selected and their relation to one another, and creates a UV map based on this information and settings that you supply.
In the example below, the Smart Mapper mapped all of the faces of a cube to a neat arrangement of three sides on top, three sides on the bottom, for all six sides of the cube to fit squarely, just like the faces of the cube.
Smart UV project on a cube. пѓЃ
For more complex mechanical objects, this tool can quickly and easily create a regular and straightforward UV layout for you.
OptionsпѓЃ
The Adjust Last Operation panel allows fine control over how the mesh is unwrapped:
This controls how faces are grouped: a higher limit will lead to many small groups but less distortion, while a lower limit will create fewer groups at the expense of more distortion.
This controls how closely the UV islands are packed together. A higher number will add more space between islands.
Weight projection’s vector by faces with larger areas.
Lightmap PackпѓЃ
UV ‣ Lightmap Pack
Lightmap Pack takes each of a mesh’s faces, or selected faces, and packs them into the UV bounds. Lightmaps are used primarily in realtime rendering, where lighting information is baked onto texture maps, when it is needed to use as much UV space as possible. It can also work on several meshes at once. It has several options that appear in the Toolbar:
You can set the tool to map just Selected Faces or All Faces if working with a single mesh.
The Selected Mesh Object option works on multiple meshes. To use this, in Object Mode select several mesh objects, then go into Edit Mode and activate the tool.
OptionsпѓЃ
This is useful if mapping more than one mesh. It attempts to fit all of the objects’ faces in the UV bounds without overlapping.
Assigns new images for every mesh, but only one if Shared Tex Space is enabled.
Set the size of the new image.
Pre-packing before the more complex Box packing.
This controls how closely the UV islands are packed together. A higher number will add more space between islands.
Follow Active QuadsпѓЃ
UV ‣ Follow Active Quads
The Follow Active Quads tool takes the selected faces and lays them out by following continuous face loops, even if the mesh face is irregularly-shaped. Note that it does not respect the image size, so you may have to scale them all down a bit to fit the image area.
OptionsпѓЃ
Space all UVs evenly.
Average space UVs edge length of each loop.
Please note that it is the shape of the active quad in UV space that is being followed, not its shape in 3D space. To get a clean 90-degree unwrap make sure the active quad is a rectangle in UV space before using “Follow active quad”.
Cube ProjectionпѓЃ
UV ‣ Cube Projection
OptionsпѓЃ
Set the size of the cube to be projected onto.
CommonпѓЃ
The following settings are common for the Cube, Cylinder, and Sphere mappings:
Map UVs will take the images aspect ratio into consideration. If an image has already been mapped to the Texture Space that is non-square, the projection will take this into account and distort the mapping to appear correct.
Any UVs that lie outside the (0 to 1) range will be clipped to that range by being moved to the UV space border it is closest to.
If the UV map is larger than the (0 to 1) range, the entire map will be scaled to fit inside.
Cylinder ProjectionпѓЃ
UV ‣ Cylinder Projection
Normally, to unwrap a cylinder (tube) as if you slit it lengthwise and folded it flat, Blender wants the view to be vertical, with the tube standing “up”. Different views will project the tube onto the UV map differently, skewing the image if used. However, you can set the axis on which the calculation is done manually.
OptionsпѓЃ
Use when viewing from the top (at a pole) by using an axis that is straight down from the view.
Use if view is looking at the equator, by using a vertical axis.
Uses the object’s transform to calculate the axis.
Select which axis is up.
Polar 0 is on the X axis.
Polar 0 is on the Y axis.
The radius of the cylinder to use.
Sphere ProjectionпѓЃ
UV ‣ Sphere Projection
Spherical mappings is similar to cylinder but the difference is that a cylindrical mapping projects the UVs on a plane toward the cylinder shape, while a spherical map takes into account the sphere’s curvature, and each latitude line becomes evenly spaced. Sphere Projection is useful for spherical shapes, like eyes, planets, etc.
Recall the opening cartographer’s approaching to mapping the world? Well, you can achieve the same here when unwrapping a sphere from different points of view. Normally, to unwrap a sphere, view the sphere with the poles at the top and bottom. After unwrapping, Blender will give you an equirectangular projection; the point at the equator facing you will be in the middle of the image. A polar view will give a very different but common projection map. Using an equirectangular projection map of the earth as the UV image will give a good planet mapping onto the sphere.
Using an equirectangular image with a Sphere Projection. пѓЃ
OptionsпѓЃ
Use when viewing from the top (at a pole) by using an axis that is straight down from the view.
Use if view is looking at the equator, by using a vertical axis.
Uses the object’s transform to calculate the axis.
Как сделать UV-развертку в Blender 2.8+
UV-развертка необходима для того, что-бы мы могли наложить текстуру на 3D-объект. А если точнее, с помощью развертки мы указываем как именно 2D текстура должна накладываться на 3D объект.
Я буду показывать на примере Blender 2.8. На примере кубика, так как его геометрия самая простая, да и он есть на сцене с самого начала. Если выбрать куб и перейти на вкладку UV-Editing, то вы увидите вот такую картину.
Нажатием на TAB перейдем в режим редактирования и выберем все вершины нажатием A. Слева мы увидим уже готовую развертку для куба.
Но, что делать если геометрия не стандартная? Для этого нужно подумать как разместить швы.
Хм, наверное звучит не совсем понятно, но думаю я смогу показать все на примере. Давайте изуродуем развертку этого куба как по нашему мнению «будет лучше»(нет)😁.
Я выделил верхние несколько граней. Делается это ЛКМ в режиме выделения граней, который в свою очередь выбирается вверху слева или на цифрах на клавиатуре, нажатием 2.
Далее нужно пометить их как швы. Жмем ПКМ и в меню выбираем Mark seam (Пометить шов). Далее снова выбираем все кнопкой A и сверху в меню выбираем пункт UV. В выпавшем меню жмем Unwrap. Слева отобразиться новая развертка.
Не плохо, но это не то что было. Можно конечно и так пользоваться, но мы ведь хотели «как было«. Давайте сотрем все метки швов.
Как ни чего не поменялось? Все должно было сработать!
Ладно ладно, шучу, нужно указать стандартные швы в ручную😊.
У меня получилось что-то такое.
Попробуйте сделать это сами, а что-бы помочь понять «как?«. Представьте, что этот куб нужно собрать из картона или бумаги. Слева эта самая бумага и показывается. А швы это разрезы по собранному кубу.
Для упрощения задачи в меню UV есть пункт Live unwrap. Он будет отображать изменения сразу на текстуре. Однако не забывайте, что развертка на текстуре отображается только когда выбрано что-то, например все.
Рисование по объекту
Ну вот вы и разобрались как делать развертку. Возможно даже уже нажали на пункт верхнего меню Texture paint. И при попытке что-то нарисовать у вас вылезла ошибка «нет текстуры». Все правильно. Мы ведь не сохранили текстуру и не назначили ее объекту.
На вкладке Texture paint в верхнем меню выбираем New и в новом окне настраиваем параметры и название будущей текстуры.
И сохраняем текстуру куда угодно, лучше в папку с вашим проектом.
После этого необходимо наложить текстуру на объект. В правом меню выбираем пункт «Настройки материалов» и уже в материале меняем просто цвет на текстуру.
Куб почернел, так как текстура пустая. Теперь можно красить куб удобным способом. Например можно делать это прямо в Blender.
Вы уже находитесь там где нужно. Попробуйте порисовать на кубе, просто левой кнопкой мыши. Слева, на текстуре, сразу будет виден результат.
Текстуру нужно сохранять после изменения, как мы уже сохраняли.
Так же, естественно, можно редактировать текстуру в любом графическом редакторе, например, GIMP, PhotoShop и т.д.
Ну вот, думаю к этому моменту вы уже понимаете как сделать UV-развертку в Blendr 2.8+. Спасибо за внимание и легкого моделирования!
craftonline
craftonline
Originally published at Craft-Online. You can comment here or there.
Что такое UV карта? Если Вы когда нибудь клеили модели бумажных самолетиков или корабликов – то вы знаете что такое UV карта!
Это контур детали на плоскости, который можно вырезать, согнуть в нужных местах и сложить/склеить из него модель.
UV нужны для того чтобы их можно было раскрасить и склеить не просто модель – а раскрашенную модель.
Загружаю модель в Blender. Выделяю верхнюю часть модели и переходу в режим редактирования (TAB).
Слева открываю окно с UV/Image Editor
Выбираю Image –> New image –> Create
В окне с моделью нажимаю U –> Unwrap All – получаю:
Blender попытался развернуть модель на плоскость… Как будто катком проехал. Не просто сделать из объемной модели плоскую раскладку. Чтобы этого добиться нужно в некоторых местах модель разрезать а потом уже разворачивать
Выделяю вершины по которым хочу наметить первый разрез:
Разрез выделился красным.
Обратите внимание на маленькую желтую точку в правом нижнем углу UV Image Editor. Это наша отрезанная голова!
Как понять где что находится на UV карте? Достаточно нажать кнопку “Keep UV and edit mode mesh selection in sync”
Теперь, выделив точку на модели, – эта точка подсветится и на UV карте. И наоборот.
Еще одна полезная фича – усреднение размеров частей полученной UV карты (Average Island Scale):
Island (острова) это независимые части UV модели, полученные после разрезания. В результате голова заметно укрупнилась.
Сделаю еще 2 шва на голове:
Снова делаю развертку. Можно вручную изменить масштаб и перенести части UV на развертке как нам удобно. Для этого отключаю “Keep UV and edit mode mesh selection in sync” и использую те же методы работы как и с мешем.
Думаю, понятно почему у меня получились такие спилы вместо ювишек. Исправляю ситуацию.
Чтобы не рисовать на второй руке вручную шов – удаляю половину модели и использую модификатор Mirrow, как уже делал раньше.
Развертка без примененного модификатора Mirrow. Вижу только половину модели:
Применяю модификатор Mirrow.
В результате получаю вот такую развертку
Полезные функции при окончательном формировании развертки:
Ctrl +A = Average Islands Scale (Усреднение размеров островов)
Ctrl + P = Pack Islands (Уместить все острова в пределах развертки)
Еще можно выделить одну точку на острове и нажать L – выделится остров целиком.
В результате я перераспределил острова следующим образом:
Делаем Export UV Layout.
Не забываем сохранить изменения в блендерском файле и делаем экспорт топчика в OBJ.
UV Развёртка: ААА-Пайплайн 4/7. Самый полный гайд
Это четвёртая из семи статей из цикла про этапы пайплайна.
Вступай в группу в ВКонтакте и группу в Фейсбуке, чтобы не пропустить следующий выпуск!
Прошлая статья была про сетку.
Сегодня статья посвящена третьему этапу пайплайна — UV развёртке.А следующие статьи будут про запечку, текстуры и подачу.
Сейчас мы разберём:
— Что такое развёртка, как её сделать
— Как развёртка влияет на поведение текстур
— Самые частые ошибки на UV и к чему они приводят
— Целый ряд советов по правильной работе и оптимизации развёртки
Ты узнаешь про то, что такое тайловое пространство, как с ним работать, как правильно разворачивать сложные формы. Увидишь, как в дальнейшем развёртка поможет в текстурировании модели. Узнаешь про особенности развёртки моделей как части ААА-пайплайна (т.е. разработки моделей именно для топовых компьютерных игр).
3D модель, по определению, сделана из объемных форм. На любой объект в редакторе можно положить материал, выбрать его цвет и настроить блик. Но положить текстуры на 3D объекты нельзя до тех пор, пока ты не сделаешь развёртку. Программа просто не знает как накладывать плоскую текстуру на геометрию.
Отсюда возникает отдельный этап пайплайна — UV развёртка.
Развёртка переносит объёмные формы на плоскость для того, чтобы на них можно было положить текстуры.
В оригами ты делаешь из плоского листа бумаги объемный объект.Развёртка делает то же самое, но наоборот — из объемного делает плоское.
Развёртка для видеоигр всегда делается из лоуполи модели, про которую мы писали в прошлой статье.
Кстати, в мультфильмах и иногда в кино мапят хайполи с технологией pTex, которая позволяет текстурить модель без развертки, но это отдельная история. Если ты разрабатываешь модель для компьютерной игры, то разворачивается всегда лоуполи.
Давай разбираться, что это и как это работает!
В любом 3D редакторе есть инструментарий для работы с UV.
Базового функционала той же Maya хватит, чтобы сделать развёртку даже для очень сложной модели. Но для удобства и редких фишек (например, отрисовка паддинга) иногда используют отдельные программы, созданные исключительно для работы с UV. Лично мне нравится работать в UV Layout. Есть ещё популярная программа Rizom UV.
Хотя я всё чаще стал мапить просто в Maya. За последние пару версий она обновилась и стала крутой.
У примитивов в редакторах есть развертка по умолчанию, но для мапинга сложных форм нужно воспользоваться функцией авторазвёртки.
Как ты видишь на картинке, у куба есть 8 точек и 6 квадратных полигонов. Теперь посмотри на развёртку, и увидишь, что на развёртке тоже 6 квадратов.
Но количество точек на UV больше, чем на самой модели — на развёртке их целых 14. Чтобы понять, откуда они появились, выдели на кубе одну точку, и увидишь, что на развёртке выделится сразу несколько точек.
На самом деле, на пересечении полигонов происходит следующее:у каждого вертекса, помимо положения в пространстве и нормали (смотри прошлую статью), есть ещё один параметр — положение этого вертекса на UV.
В общем, если на самой модели ты видишь одну точку, то на UV при её выделении может появиться сразу несколько точек и каждая из них будет принадлежать полигону, который с ней связан.
Главное сейчас, чтобы ты понял — каждый полигон имеет своё место на UV как плоский объект, чтобы программа знала как класть текстуру на геометрию.
Итак, ты понял, что развёртка нужна тебе, чтобы текстурить модель. И каждый полигон твоей модели должен присутствовать на развёртке.
Очень скоро ты узнаешь, как положение объекта на UV влияет на поведение текстур. Так что идём дальше!
Давай для примера возьмём кузов от нашего грузовичка.Наложим на него текстуру дерева.
Первым делом, давай сделаем авторазвёртку:
Давай выделим на модели одну из дощечек и перенесём на UV вправо:
[ Свойство 1 ] Изменяешь положение объекта на UV — изменяешь положение текстуры.
Кстати, все объекты на UV называются UV шеллы (UV shell).
[ Свойство 2 ] Так вот, поворачивая шеллы, ты поворачиваешь текстуру на геометрии:
Измени размер UV шелла, и посмотри как изменились текстуры на объекте:
[ Свойство 3 ] Изменяя размер на UV, ты меняешь размер текстуры на модели.
Если гифок оказалось недостаточно для понимания, в этой статье мы добавили несколько наших видеоуроков про UV.
Это было краткое интро про то, что такое UV. Прежде чем мы пойдём дальше, к техническим нюансам, давай разберёмся, как текстурится модель, если у неё правильная развёртка.
Открой Substance Painter или любую другу программу, которая создана для работы с текстурами. И загрузи в неё свою модель с развёрткой.
Если всё нормально, то красить будет одно удовольствие:
Но иногда встречаются странные вещи:
Что происходит? С кистью творится что-то очень странное!
Ответ лежит в UV. Для примера мы специально немного его попортили, чтобы ты увидел, как косяки на UV напрямую влияют на твои текстуры. А плохие текстуры испортят любую хорошую модель.
Тому, откуда берутся глюки на UV и как избежать их появления, будут посвящены все последующие разделы этой статьи.Будет и теория, и рекомендации для правильной работы.
Без теории не обойтись.Когда ты разворачиваешь объекты на UV, есть 2 пути:
1) Сделать уникальный мапинг.
2) Сделать тайловый мапинг.
Прежде чем разбираться с каждым из них по отдельности, обрати внимание на следующее: на UV пространстве много квадратов. На самом деле, они бесконечны.
Но нас особенно интересует именно первый квадрат на UV, который находится от 0 до 1. Имменно на него накладывается текстура, а на всех остальных квадратах текстура просто повторяется (про UDIM-ы сегодня говорить мы не будем)
Если ты разворачиваешь модель на UV так, что все объекты находятся в первом квадрате и не выходят за его пределы, это называется уникальным мапингом.
Делая hard surface или персонажей для игры, тебе нужно делать именно уникальный мапинг. А для объектов окружения, ландшафтов и зданий часто используется тайловый мапинг, хотя там тоже не всё так просто.
Давай начнём с уникального мапинга.
Как ты помнишь, один материал имеет всего лишь одну единственную текстуру. И она полностью растягивается на первый квадрат UV.
Теперь представь, что мы хотим замапить наш грузовичок. У него есть текстура с деревом для кузова и текстура с крашеным металлом для кабины (хотя на самом деле их гораздо больше).
В принципе, мы можем не заморачиваться. И сделать 2 материала. Один под дерево, другой под крашеный металл. И уже мапить объекты на эти 2 материала.
Но есть нюанс. Каждый новый материал — это лишний вызов отрисовки (draw call), который нагружает игровой движок. А мы моделим грузовичок для игры. Нам крайне важно использовать минимальное количество ресурсов.
Поэтому, вместо того, чтобы плодить кучу лишних материалов, мы делаем всего один материал. Сначала мы разворачиваем все объекты на UV, потом кидаем в фотошоп или Substance Painter и красим эти элементы по отдельности.
Кстати, на важные объекты для больших современных игр ты можешь добавлять по 3-5 материалов.
На выходе мы получаем одну единственную квадратную текстуру, сделанную специально для нашей модели.
Это и называется уникальным мапингом. Это технология, которая заключается в следующем:
— Мы мапим все объекты на UV только в первый его квадрат. Ни один из шеллов не выходит за его пределы, и шеллы не пересекаются (кроме оверлапов, о которых поговорим сегодня чуть позже).
— Объекты покрашены по-разному (кузов деревянный, кабина из крашеного металла). Причём это не повторяющиеся, а уникальные текстуры.
— Но на выходе мы имеем одну единственную текстуру (не считая карты нормали, рафнеса и металнеса, но об этом в статье про текстуры) и один материал, тем самым экономим ресурсы игрового движка.
Как ты уже знаешь, квадраты на UV бесконечны. Это значит, что текстура, которую ты положил в первый квадрат будет повторяться бесконечное количество раз. Это бесконечное повторение текстур называется тайлом.
Тайловый мапинг очень часто используется для развёртки зданий, предметов окружения и ландшафтов.
Представь, что мы хотим сделать развёртку этого дома:
Сначала мы создаём материалы с бесшовными текстурами.Потом кладём их на геометрию с помощью авторазвёртки (box maping).
И так делаем для каждого из объектов. Для стены дома — один материал с кирпичной кладкой. Для прилавка — другой материал с текстурой дерева. И так далее.
Ещё один момент — при тайловом мапинге сами UV шеллы могут выходить за пределы первого квадрата UV. Это нормально.
Зачем это нужно? Представь, что у тебя есть бесшовная текстура с кирпичом. Если развёртка всех стен будет в первом квадрате, то кирпичи будут слишком крупными (как ты можешь увидеть на гифке). Так как текстура с первого квадрата бесконечно повторяется, а у текстуры нет швов — мы просто меняем размер шеллов на UV и подбираем подходящий для нас размер.
В автомапинге не так важно как выглядит UV развёртка. В отличие от уникального мапинга, нет смысла умещать все шеллы внутри первого квадрата и экономить пространство на UV. Главное, чтобы текстуры выглядели аккуратно и без потягов.
Надеюсь, что сейчас ты понял разницу между уникальным мапингом и тайловым.
Вот так выглядит наш дом после развёртки и текстур.
Говоря про тайловый мапинг, есть один важный момент насчёт текстур.
Если ты не хочешь, чтобы при повторении текстуры были швы — используй тайловые текстуры, то есть текстуры без швов.
Ты далеко не первый, кому они нужны, поэтому есть целый ряд библиотек с тайловыми текстурами. Вот несколько полезных сайтов, где ты их найдёшь:
Но есть нюансы. У нас в сцене есть несколько разных фруктов.
Как ты знаешь, каждый из материалов — это отдельный вызов отрисовки в игровом движке. Чтобы сэкономить ресурсы и не создавать под каждый из фруктов отдельный материал, мы сделали следующее: мы нарисовали одну текстуру и замапили на неё все фрукты. На самом деле это не сцена для игры, а демонтрация технологий, в игре мы бы почти все не тайловые текстуры засунули в один атлас, сделали бы его плотнее и аккуратнее.
Атласы — это один из приёмов, которые часто используются в видео играх. Есть ещё тримы, но про них чуть позже будет в этой статье.
Раз речь зашла о текстурах, есть ещё один момент, который нужно знать.Лучше всего работать с квадратными текстурами.
Во всех программах на данный момент все текстуры растягиваются и полностью занимают первый квадрат на UV. Поэтому если текстура прямоугольная, то она растянется до квадрата.
Иногда для экономии видеопамяти используют прямоугольную текстуру (например 1024х512 или даже 2048х256. Да, так тоже бывает!) Такая текстура все-равно растягивается до квадрата, и для неё очень важно правильно растянуть развертку.
Кстати, насчет разрешения текстур: из-за особенностей цифровых вычислений, разрешение текстур всегда стараются делать кратными степени двойки. То есть сторона текстуры может быть 32 пикселя в ширину. Или 64, 128, 256, 512, 1024, 2048 или, даже, 4096 пикселей. Как я писал выше, текстура может быть прямоугольной, например 512х256, или 512х128, но, как правило, их делают квадратными.
Текстуры кратные степени двойки заполняют целые ячейки видеопамяти. Если вместо текстуры 1024х1024 засунуть в движок текстуру размером 1000х1000 — она не заполнит всю ячейку видеопамяти, её обработка потребует чуть больше ресурсов от видеокарты, и из-за такой мелочи игра чуть-чуть потеряет в производительности. Эти потери очень несущественны и почти не заметны, но рендер видео игр — это всегда борьба за оптимизацию, и поэтому все разработчики игр ни секунды не сомневаются, что текстура в 1024х1024 лучше текстуры в 1000х1000.
Совет: старайся использовать квадратные текстуры. Если все-таки нужны прямоугольные — помни правило, о разрешении кратном степени двойки.
Про текстуры пока что всё, давай вернёмся к UV, ведь про текстуры у нас будет отдельная, не менее огромная статья 🙂
Сейчас мы разберём несколько приёмов, которые всегда используются при работе с UV. Они помогут сэкономить пространство и упростить процесс текстурирования.
Трюки при работе с UV:
Если на твоей модели есть одинаковые элементы, например, болты на обшивке, то на UV их можно размапить на один и тот же UV shell. Просто посмотри видео, там всё рассказано:
Симметричные объекты также можно оверлапить.Про это ты можешь узнать больше в этом уроке:
Дальше нас ждут тайлы, тримы и атласы.Они часто используются для объектов окружения, зданий и ландшафтов. Но, например, тайлы иногда бывают очень полезны и для hard surface моделей, и персонажей. Давай узнаем что это такое.
Как ты помнишь, текстура из первого квадрата UV повторяется бесконечно на все другие квадраты, и это называется тайлом.
Тримы используют это бесконечное повторение, чтобы более эффективно использовать ресурсы игрового движка.
Тримы — это те же тайлы, но повторяются они не во все стороны, а только по одной оси.
Трим дерева на лестнице. С атласом тримов мы можем размапить лестницу любого размера, и на ней никогда не будет швов.
Есть история, как крутой моделлер покрасил целый игровой уровень, используя всего 2 атласа. Как он это сделал, мы рассказали в этом уроке.
Итак, ты уже много узнал про UV, но это далеко не всё.
Важно не только уметь разворачивать объекты, но и проверять UV на косяки. А по ходу работы их будет много. Давай разберёмся, как это сделать?
Помнишь нашу гифку, где при покраске модели творились странные вещи. Давай ещё раз на них посмотрим:
Такое происходит, когда у тебя есть ошибки на UV, например, текстуры могут растянутся, это называется «потягами на UV». Помимо потягов есть ещё несколько ошибок, которые мы разберём в этой статье чуть позже.
Хорошая новость — во всех программах есть «чекер». Это текстура с шахматной доской, которую используют для проверки развертки.Он выглядит вот так:
Если квадраты на чекере искажены, то при текстурировании возникнут проблемы.
Идеальная развертка — когда все квадраты чекера ровные.
Запомни, когда ты сделал развёртку, обязательно проверяй чекер.Если нашёл ошибки — исправляй!
Кстати, в программах есть функция, которая поможет тебе быстро исправить ошибки на UV.
Unfold есть во всех программах.
Если ты увидел, что чекер неровный — жми волшебную кнопку.Программа всё исправит.
Но ей тоже нельзя доверять на 100%. Сложные формы анфолд не сможет исправить, и придется резать UV.
Как ты уже понял, взять свою лоуполи, сделать авторазвёртку, а потом нажать Unfold — это далеко не всё. Тебе нужно выбрать способ мапинга твоей модели, правильно развернуть все элементы, сделать оверлапы, если они необходимы, уместить все шеллы внутри первого квадрата (и ещё много всего другого).
Работы много, и плохая развертка может попортить жизнь на текстурировании, поэтому UV — очень важный этап пайплайна.
Сейчас ты понял основы работы с UV.Давай подведём небольшой итог, что конкретно ты должен сделать на этом этапе пайплайна, чтобы с текстурами не было проблем.
Прежде чем ты получишь целый ряд советов по правильной работе с UV, давай разберём самые частые ошибки новичков.
Если видишь нечто подобное — исправляй через Unfold.Если он не поможет — исправляй руками.
Кстати, у нас есть классный урок на эту тему:
Здесь мы много писать не будем — и так всё ясно.
Чтобы ты понял, почему квадраты чекера могут быть разного размера, тебе нужно знать, что такое тексель.
Тексель — это количество пикселей на метр (или сантиметр, или дюйм — в зависимости от проекта).
Тексель показывает, насколько детальной будет текстура.В шутерах тексель высокий, так как игроки могут сильно приближаться к объектам. В играх от 3 лица тексель немного ниже, а в стратегиях тексель еще ниже.
Очень важно, чтобы объекты переднего плана имели одинаковый тексель. А объекты среднего и дальнего плана зачастую имеют более низкий тексель, так как им не нужна такая высокая детализация.
Если рядом находятся объекты с разным текселем, то один будет выглядеть очень детализированным, а второй — мыльным. Поэтому на проектах следят за текселем, чтобы картинка была гармоничной.
Как тексель связан с UV?
Когда ты правильно сделал развёртку, квадраты чекера будут одного размера.Если ты сделаешь один из шеллов меньше, то квадраты чекера увеличатся, а тексель уменьшится.
Теперь важный момент.
Если ты моделишь грузовичок, то хорошая практика — на днище грузовичка сделать тексель меньше, потому что игроки вряд ли его увидят в игре. Тем самым ты сэкономишь место на юви для чего-нибудь более важного.
Запомни — изменять тексель нужно осознанно.
Когда ты меняешь тексель, ты должен точно понимать, зачем ты это делаешь.
Подробнее про тексель мы рассказали в этом уроке:
Текстуры дороже геометрии, поэтому текстурное пространство очень ценно.Мы стараемся заполнять его как можно плотнее, чтобы максимально эффективно использовать данные нам ресурсы.
Никогда не пересекай UV шеллы. Это приведёт к артефактам на текстурах.
Исключения из этого правила — оверлапы.
В них ты осознанно накладываешь шеллы друг на друга. Зачем это нужно, мы уже писали в этой статье.
Когда объекты не идеально лежат друг на друге, могут появиться швы или некрасивые артефакты на текстурах.
Всегда проверяй оверлапы, которые делаешь.
С частыми ошибками разобрались.Пришло время понять, как правильно работать с UV.
У меня есть целый ряд рекомендаций на этот счёт. Прежде чем ты их прочитаешь, посмотри, в каком порядке я обычно делаю развёртку:
Этот порядок действий не универсален. У каждого моделлера свой подход, но суть примерно та же. Если ты не мастер UV, то лучше сохрани этот небольшой чеклист для самопроверки.
Большие стенки нужно обрезать, иначе могут появиться потяги на UV.Ты сразу увидишь — в таких местах чекер будет неровным.
Давай разберём этот момент на примере нашей модели.Если мы просто сделаем авторазвёртку этой детали, то мы увидим потяги:
Что делать? В UV редакторе есть функция Cut. Просто сделай разрезы на больших деталях:
На торцах остались артефакты, отрезай их в отдельные шеллы:
В результате мы избавились от потягов, сделав всего 3 разреза (кстати, очень важно делать как можно меньше разрезов на юви — так на текстуре будет меньше швов):
Вывод: разрезай на UV сложные формы.
Когда делаешь UV, твоя задача на старте — сделать чекер везде ровным и получить квадратики чекера одинакового размера.
Если ты увеличиваешь или уменьшаешь размер шелла на UV, то размер квадратов чекера тоже меняется.
Давай разберёмся, когда и зачем нужно изменять размер шеллов?
Когда разрешение текстур можно уменьшить?
На деталях, которые не видно игрокам. Пример — днище автомобиля. Игроки его не видят, поэтому ты можешь сэкономить ресурсы и изменить размер объектов на UV. И чекер в таких местах будет меньше, чем у всей модели.
Это делается для того, чтобы сэкономить бесценное юви пространство.
Когда разрешение текстур можно увеличить?
Обычно его увеличивают в самых важных и заметных частях модели, а так же для надписей/символов. Это не нужно делать на каждой модели. Но если моделишь что-то очень важное, например, дробовик с которым бегают игроки, то разрешение текстур на его верхней части можно увеличить. Тогда чекер будет меньше, а текстуры в этом месте будут более детальными.
Минутка теории (не считая 20 минут уже прочитанного текста). В игровых движках текстуры теряют разрешение на расстоянии. Чем дальше объект от камеры, тем ниже разрешение текстур. Это называется в трёхмерке MIP Map.
Давай разберёмся как это связано с UV.
Нельзя мапить объекты на UV вплотную друг к другу.
Чтобы при MIP мапах, т.е. удалении объектов от камеры, соседние объекты не брали информацию друг от друга. Это особенность игровых движков, которую нужно знать.
Всегда нужно оставлять небольшой отступ между UV шеллами. Этот отступ называют паддингом (padding).
Если этого не сделать, то на местах стыков объекты при MIP мапах появятся некрасивые швы.
Поэтому всегда добавляй отступы между объектами на UV.
Если хочешь узнать больше, вот урок на эту тему:
Это нужно, если ты запекаешь нормал. В 90% случаев, если ты работаешь по пайплайну, то ты будешь запекать Normal Map. Про запечку (baking) как раз будет в следующей статье. Так что эта рекомендация тебе пригодится.
Если ты внимательно читал прошлую статью про сетку, то ты уже знаешь, что такое hard edge и soft edge.
С хардами тоже есть моменты, при работе с UV. Когда печешь нормал, на месте харда должен быть обязательный разрез на развертке (или вместо харда стоит сделать софт), а иначе нормал запечется со швом.Обязательно посмотри это видео, если хочешь понять, как правильно работать с хардами:
Всегда нужно отрезать острые углы и углы под 90 градусов. Они не запекутся на следующем этапе, и на модели опять появятся некрасивые швы.
Более подробно про шейдинг хардов мы разобрали в этом уроке:
А вот что будет, если ты неправильно работаешь с хардами:
В этих двух видео (которые были выше) мы рассказали как это работает, так что идём дальше.
Авторазвёртка добавляет кучу лишних шеллов, лучше размапить в прямую линию.
Если линия неровная, она занимает много места на UV, поэтому лучше размапить её как прямую — ведь прямоугольники очень легко паковать.
1) На следующем этапе мы будем запекать детализацию с хайполи на лоуполи.
2) Потом сделаем текстуры для нашей модели
3) А в конце нас ждёт подача модели, чтобы сделать сочный скрин для твоего портфолио.
Даты писать не будем — мы в них не попадаем (работы много, курсы, все дела, не успеваем статейки писать)
И обязательно вступай в группу в ВКонтакте и группу в Фейсбуке, чтобы не пропустить следующий выпуск!
А ещё мы есть в Инстаграме и Ютубе.
Кодзима имеет больше влияния, чем мы.
Если кому-то статья полезна — я доволен и все не зря (по заветам Кодзимы строим связи). К тому же у нас инфа в целом рассчитана на узкую аудиторию.
Я конечно далеко не профессионал, но этот совет звучит как «по возможности, делайте вашу текстуру в два раза больше, чтобы она была квадратной»
Для движка же все равно, квадратная текстура или нет, он ремаппит все с 0 до 1, главное чтобы была кратность степени двойки для GPU?
Substance Painter тоже растягивает прямоугольные текстуры до квадрата, но при запекании текстуры получается хорошая не растянутая прямоугольная текстура, в которой нет ничего лишнего.
FromSoftware постоянно используют прямоугольные текстуры в своих играх, например (хотя велика вероятность что у них пайплайн особо не менялся с девяностых-двухтысячных и так больше никто не делает, не проверял другие AAA игры в RenderDoc)
Так объяснить можете, чем вам прямоугольник с n^2 сторонами должен быть квадратом, кроме того, что у вас так учат? В свое время увлекался движкописанием и никто никогда не говорил про квадраты. Есть правило для укладывания текстурок в память. Есть ранние АПИ, которые не поддерживали n^2 текстуры.
Я серьезно думал на курс записаться, но сейчас засомневался, потому что не хочу, чтобы мне так отвечали на возникшие вопросы.
Юви пространство всегда квадратное.
И прямоугольная текстура все-равно растягивается до квадрата. Поэтому с квадратными текстурами проще работать — тогда ты знаешь чего ожидать от аккуратного мапинга с квадратным чекером. Если ты используешь текстуру не квадратную — тебе надо так размапить твою геометрию, чтобы растягивание мапинга на ней по одной из осей совпадала с растягиваем твоей прямоугольной текстуры до квадрата. Например, если текстура у тебя N x 2N — тогда тебе надо размапить объект полностью по горизонтали, и в половину квадрата по вертикали, а затем отскейлить развертку в два раза по вертикали.
Картинка со стрелочкой должна была идти вместе со скриншотом из статьи, где я пишу про текстуры размером кратной степени двойки, но на дтф нельзя 2 картинки ставить в один комментарий, а из-за комментов к тому скриншоту они оказались в разных частях комментов. Эта картинка — только иллюстрация тезиса из статьи.
Удалить ее теперь нельзя
Отредачить тоже
Возникает недопонимание
Я сожалею, что сделал два сообщения с двумя скриншотами, больше такой ошибки никогда не совершу.
Не очень понял зачем стрелочка указывает на прямоугольность текстуры.
Учитывая длину локонов Филианоры, такую текстуру не смогли бы уместить в 2048×2048, например, без склеек островов. Если следовать совету «лучше все текстуры делать квадратными», то размер текстуры в таком случае был бы 4096×4096
Прямоугольные текстуры можно делать! Просто обычно делают текстуры квадртатными, потому что так намного удобнее работать. Скриншот выше должен был быть в одном посте со скрином из статьи, что прямоугольные текстуры (если ты все-таки их делаешь) должны быть кратными степени двойки. И именно так и сделали дядьки из FromSoftware — текстура размером 512х4019
это 2 в 9 степени и 2 в 12 степени. То-есть они правильно сделали прямоугольную текстуру.
Очень запутанно вышло, признаюсь, потому что все текстуры должны быть кратными степени двойки. Я полагаю что кроме персональных предпочтений нет никаких других влияющих факторов при работе и отрисовке прямоугольных и квадратных текстур?
Длинные шеллы действительно лучше не резать? Еще иногда делают растянутые текстуры для длинных тримов, а так да — просто делай как тебе удобнее.
Надо было просто написать что видеокарта и многие движки при работе с текстурой не кратной степени 2 просто ее не отобразят. Это не «правильно» это обязательно. Правильно например писать с большой буквы предложения. Но можно это не делать.
Никогда не встречал такой проблемы, правда я узнал про текстуры кратные степени двойки раньше, чем стал работать с движками.
Ну движок варгейминга не отобразит текстуру в стиле 1025 на 512. Будет черное вместо мапы. А так можно хоть 256 на 2048 делать атласы, никто ничего не спросит.
В овервотче 2048*1024, емнип.
Прямо перед этим советом мы рассказали правила использования прямоугольных текстур. И FromSoftware этим правилам следует
Почти в каждой игре есть прямоугольные текстуры
Иногда так делают для удобства мапинга, и 90% всех текстур все-равно квадратные. Так же часто несколько прямоугольных текстур склеивают вместе, чтобы получился один квадратный атлас.
Введение
Редактор UV используется для сопоставления 2D-ассетов, таких как изображения/текстуры, с 3D-объектами и редактирования того, что называется UV.
Редактор UV с картой UV и текстурой тестовой сетки.
Самый гибкий способ наложения 2D-текстуры на 3D-объект — это процесс, называемый UV-маппинг. В этом процессе вы берёте свою трёхмерную (X, Y и Z) сетку и разворачиваете её в плоское двухмерное (X и Y… или, скорее, как мы скоро увидим, «U и V») изображение. Таким образом, цвета на изображении сопоставляются с вашей сеткой и отображаются как цвет граней сетки. Используйте UV-текстурирование, чтобы придать своим объектам реалистичность, которую не могут обеспечить процедурные материалы и текстуры, и лучшую детализацию, чем может обеспечить Vertex Painting.
Объяснение UV
Лучшая аналогия понимания UV-карты — это разрезание картонной коробки. Коробка — это трёхмерный (3D) объект, такой же, как куб, который вы добавляете в свою сцену.
Если вы возьмёте ножницы и разрежете шов или сгиб коробки, вы сможете положить её на стол. Когда вы смотрите на коробку на столе, мы могли бы сказать, что U — это направление влево-вправо, а V — это направление вверх-вниз. Таким образом, это изображение двухмерное (2D). Мы используем U и V для обозначения этих «координат текстурного пространства» вместо обычных X и Y, которые всегда используются (вместе с Z) для обозначения трёхмерного пространства (3D).
Когда коробка снова собирается, определённая UV-позиция на бумаге переносится в точку (X, Y, Z) на коробке. Это то, что компьютер делает с 2D-изображением, оборачивая его вокруг 3D-объекта.
Во время процесса UV-развёртки вы указываете Blender, как именно сопоставить грани вашего объекта (в данном случае коробки) с плоским изображением в UV-редакторе. У вас есть полная свобода в том, как это сделать. (В продолжение нашего предыдущего примера представьте, что сначала вы положили коробку на стол, а теперь разрезаете её на более мелкие части, каким-то образом растягиваете и/или сжимаете эти части, а затем каким-то образом размещаете их на фотографии, которая также лежит на столе на этой столешнице.)
Пример
3D-пространство (XYZ) по сравнению с UV-пространством.
На этом изображении вы можете легко увидеть, что форма и размер выделенных граней в 3D-пространстве отличаются в UV-пространстве. Эта разница вызвана «растягиванием» (технически называемым отображением) 3D-части (XYZ) на 2D-плоскость (т.е. UV-карту).
Если у 3D-объекта есть UV-карта, то в дополнение к 3D-координатам X, Y и Z каждая точка на объекте будет иметь соответствующие координаты U и V.
На более сложных моделях (например, на сфере выше) возникает проблема, когда грани нельзя обрезать, а вместо этого они растягиваются, чтобы сделать их плоскими. Это помогает упростить UV-карты, но иногда добавляет искажения к финальной наложенной текстуре.
Преимущества UV
Хотя процедурные текстуры полезны — они никогда не повторяются и всегда «подходят» к 3D-объектам — их недостаточно для более сложных или естественных объектов. Например, кожа на голове человека никогда не будет выглядеть правильно при процедурной генерации. Морщины на голове человека или царапины на машине не возникают в случайных местах, а зависят от формы модели и её использования. Нарисованные вручную изображения или изображения, снятые из реального мира, дают больше контроля и реализма. Для таких деталей, как обложки книг, гобелены, коврики, пятна и детализированный реквизит, художники могут контролировать каждый пиксель на поверхности с помощью UV-текстуры.
UV-карта описывает, какая часть текстуры должна быть прикреплена к каждому полигону в модели. Каждой вершине полигона присваиваются 2D-координаты, которые определяют, какая часть изображения будет отображена. Эти 2D-координаты называются UV (сравните это с координатами XYZ в 3D). Операция создания этих UV-карт также называется «разворачиванием», так как это как если бы сетка была развёрнута на 2D-плоскость.
Для большинства простых 3D-моделей Blender имеет автоматический набор алгоритмов развёртывания, которые вы можете легко применить. Для более сложных 3D-моделей обычного кубического, цилиндрического или сферического отображения обычно недостаточно. Для ровной и точной проекции используйте seams (швы) для направления UV-карты. Это можно использовать для применения текстур к произвольным и сложным формам, таким как головы людей или животных. Часто эти текстуры представляют собой нарисованные изображения, созданные в таких приложениях, как Gimp, Krita или в вашем любимом приложении для рисования.
Интерфейс
Главная панель редактора
Заголовок содержит несколько меню и опций для работы с UV.
Selection Mode (режим выделения)
Sticky Selection Mode
Option to automatically expand selection. See Sticky Selection Mode for more details.
Active UV Loop Layer
Выбор, какую UV-карту использовать.
Display Channels (отображение каналов)
Выберите, какие цветовые каналы будут отображаться.
Color and Alpha (цвет и альфа)
Заменяет прозрачные пиксели фоном в шахматном порядке, обозначая альфа-канал.
Отображение цветного изображения без альфа-канала.
Отображает альфа-канал в градациях серого. Белые области непрозрачны, черные области имеют альфа 0.
Z-Buffer (буфер глубины)
Одноцветный канал визуализируется как изображение в градациях серого.
Параметры инструмента
Аналогично работе с опорными точками в окне 3D-вьюпорта.
Элементы управления для привязки точек UV, аналогично привязке в окне 3D-вьюпорта.
© Copyright : This page is licensed under a CC-BY-SA 4.0 Int. License. Обновлено: 07/27/2022.
UV Развёртка: ААА-Пайплайн 4/7. Самый полный гайд
Это четвёртая из семи статей из цикла про этапы пайплайна.
Вступай в группу в ВКонтакте и группу в Фейсбуке, чтобы не пропустить следующий выпуск!
Прошлая статья была про сетку.
Сегодня статья посвящена третьему этапу пайплайна — UV развёртке.А следующие статьи будут про запечку, текстуры и подачу.
Сейчас мы разберём:
— Что такое развёртка, как её сделать
— Как развёртка влияет на поведение текстур
— Самые частые ошибки на UV и к чему они приводят
— Целый ряд советов по правильной работе и оптимизации развёртки
Ты узнаешь про то, что такое тайловое пространство, как с ним работать, как правильно разворачивать сложные формы. Увидишь, как в дальнейшем развёртка поможет в текстурировании модели. Узнаешь про особенности развёртки моделей как части ААА-пайплайна (т.е. разработки моделей именно для топовых компьютерных игр).
Что такое развёртка?
3D модель, по определению, сделана из объемных форм. На любой объект в редакторе можно положить материал, выбрать его цвет и настроить блик. Но положить текстуры на 3D объекты нельзя до тех пор, пока ты не сделаешь развёртку. Программа просто не знает как накладывать плоскую текстуру на геометрию.
Отсюда возникает отдельный этап пайплайна — UV развёртка.
Развёртка переносит объёмные формы на плоскость для того, чтобы на них можно было положить текстуры.
В оригами ты делаешь из плоского листа бумаги объемный объект.Развёртка делает то же самое, но наоборот — из объемного делает плоское.
Развёртка для видеоигр всегда делается из лоуполи модели, про которую мы писали в прошлой статье.
Кстати, в мультфильмах и иногда в кино мапят хайполи с технологией pTex, которая позволяет текстурить модель без развертки, но это отдельная история. Если ты разрабатываешь модель для компьютерной игры, то разворачивается всегда лоуполи.
Давай разбираться, что это и как это работает!
С чего начинается работа с развёрткой?
В любом 3D редакторе есть инструментарий для работы с UV.
Базового функционала той же Maya хватит, чтобы сделать развёртку даже для очень сложной модели. Но для удобства и редких фишек (например, отрисовка паддинга) иногда используют отдельные программы, созданные исключительно для работы с UV. Лично мне нравится работать в UV Layout. Есть ещё популярная программа Rizom UV.
Хотя я всё чаще стал мапить просто в Maya. За последние пару версий она обновилась и стала крутой.
У примитивов в редакторах есть развертка по умолчанию, но для мапинга сложных форм нужно воспользоваться функцией авторазвёртки.
Давай разбираться, из чего состоит развёртка
Как ты видишь на картинке, у куба есть 8 точек и 6 квадратных полигонов. Теперь посмотри на развёртку, и увидишь, что на развёртке тоже 6 квадратов.
Смотри, на кубе 8 точек, а на развёртке целых 14.
Но количество точек на UV больше, чем на самой модели — на развёртке их целых 14. Чтобы понять, откуда они появились, выдели на кубе одну точку, и увидишь, что на развёртке выделится сразу несколько точек.
Одна точка на модели может иметь несколько точек на UV.
На самом деле, на пересечении полигонов происходит следующее:у каждого вертекса, помимо положения в пространстве и нормали (смотри прошлую статью), есть ещё один параметр — положение этого вертекса на UV.
В общем, если на самой модели ты видишь одну точку, то на UV при её выделении может появиться сразу несколько точек и каждая из них будет принадлежать полигону, который с ней связан.
Главное сейчас, чтобы ты понял — каждый полигон имеет своё место на UV как плоский объект, чтобы программа знала как класть текстуру на геометрию.
Итак, ты понял, что развёртка нужна тебе, чтобы текстурить модель. И каждый полигон твоей модели должен присутствовать на развёртке.
Очень скоро ты узнаешь, как положение объекта на UV влияет на поведение текстур. Так что идём дальше!
Как UV влияет на поведение текстур
Давай для примера возьмём кузов от нашего грузовичка.Наложим на него текстуру дерева.
Первым делом, давай сделаем авторазвёртку:
Наша простенькая моделька для примера c авторазвёрткой
Давай выделим на модели одну из дощечек и перенесём на UV вправо:
Двигаем объекты по UV
[ Свойство 1 ] Изменяешь положение объекта на UV — изменяешь положение текстуры.
Кстати, все объекты на UV называются UV шеллы (UV shell).
[ Свойство 2 ] Так вот, поворачивая шеллы, ты поворачиваешь текстуру на геометрии:
Измени размер UV шелла, и посмотри как изменились текстуры на объекте:
[ Свойство 3 ] Изменяя размер на UV, ты меняешь размер текстуры на модели.
Если гифок оказалось недостаточно для понимания, в этой статье мы добавили несколько наших видеоуроков про UV.
Это было краткое интро про то, что такое UV. Прежде чем мы пойдём дальше, к техническим нюансам, давай разберёмся, как текстурится модель, если у неё правильная развёртка.
Как красятся модели, имеющие развёртку
Открой Substance Painter или любую другу программу, которая создана для работы с текстурами. И загрузи в неё свою модель с развёрткой.
Если всё нормально, то красить будет одно удовольствие:
Но иногда встречаются странные вещи:
Что происходит? С кистью творится что-то очень странное!
Ответ лежит в UV. Для примера мы специально немного его попортили, чтобы ты увидел, как косяки на UV напрямую влияют на твои текстуры. А плохие текстуры испортят любую хорошую модель.
Тому, откуда берутся глюки на UV и как избежать их появления, будут посвящены все последующие разделы этой статьи.Будет и теория, и рекомендации для правильной работы.
Два вида мапинга
Без теории не обойтись.Когда ты разворачиваешь объекты на UV, есть 2 пути:
1) Сделать уникальный мапинг.
2) Сделать тайловый мапинг.
Прежде чем разбираться с каждым из них по отдельности, обрати внимание на следующее: на UV пространстве много квадратов. На самом деле, они бесконечны.
Бесконечное тайловое пространство. Квадраты никогда не закончатся, каждый из них повторяет текстуру из первого квадрата, а уместить развёртку нужно в квадрат 0-1.
Но нас особенно интересует именно первый квадрат на UV, который находится от 0 до 1. Имменно на него накладывается текстура, а на всех остальных квадратах текстура просто повторяется (про UDIM-ы сегодня говорить мы не будем)
Если ты разворачиваешь модель на UV так, что все объекты находятся в первом квадрате и не выходят за его пределы, это называется уникальным мапингом.
Делая hard surface или персонажей для игры, тебе нужно делать именно уникальный мапинг. А для объектов окружения, ландшафтов и зданий часто используется тайловый мапинг, хотя там тоже не всё так просто.
Давай начнём с уникального мапинга.
1 Уникальный мапинг
Как ты помнишь, один материал имеет всего лишь одну единственную текстуру. И она полностью растягивается на первый квадрат UV.
Теперь представь, что мы хотим замапить наш грузовичок. У него есть текстура с деревом для кузова и текстура с крашеным металлом для кабины (хотя на самом деле их гораздо больше).
В принципе, мы можем не заморачиваться. И сделать 2 материала. Один под дерево, другой под крашеный металл. И уже мапить объекты на эти 2 материала.
Но есть нюанс. Каждый новый материал — это лишний вызов отрисовки (draw call), который нагружает игровой движок. А мы моделим грузовичок для игры. Нам крайне важно использовать минимальное количество ресурсов.
Поэтому, вместо того, чтобы плодить кучу лишних материалов, мы делаем всего один материал. Сначала мы разворачиваем все объекты на UV, потом кидаем в фотошоп или Substance Painter и красим эти элементы по отдельности.
Кстати, на важные объекты для больших современных игр ты можешь добавлять по 3-5 материалов.
На выходе мы получаем одну единственную квадратную текстуру, сделанную специально для нашей модели.
Это и называется уникальным мапингом. Это технология, которая заключается в следующем:
— Мы мапим все объекты на UV только в первый его квадрат. Ни один из шеллов не выходит за его пределы, и шеллы не пересекаются (кроме оверлапов, о которых поговорим сегодня чуть позже).
— Объекты покрашены по-разному (кузов деревянный, кабина из крашеного металла). Причём это не повторяющиеся, а уникальные текстуры.
— Но на выходе мы имеем одну единственную текстуру (не считая карты нормали, рафнеса и металнеса, но об этом в статье про текстуры) и один материал, тем самым экономим ресурсы игрового движка.
2 Тайловый мапинг
Как ты уже знаешь, квадраты на UV бесконечны. Это значит, что текстура, которую ты положил в первый квадрат будет повторяться бесконечное количество раз. Это бесконечное повторение текстур называется тайлом.
Тайловый мапинг очень часто используется для развёртки зданий, предметов окружения и ландшафтов.
Представь, что мы хотим сделать развёртку этого дома:
Сначала мы создаём материалы с бесшовными текстурами.Потом кладём их на геометрию с помощью авторазвёртки (box maping).
И так делаем для каждого из объектов. Для стены дома — один материал с кирпичной кладкой. Для прилавка — другой материал с текстурой дерева. И так далее.
Ещё один момент — при тайловом мапинге сами UV шеллы могут выходить за пределы первого квадрата UV. Это нормально.
Зачем это нужно? Представь, что у тебя есть бесшовная текстура с кирпичом. Если развёртка всех стен будет в первом квадрате, то кирпичи будут слишком крупными (как ты можешь увидеть на гифке). Так как текстура с первого квадрата бесконечно повторяется, а у текстуры нет швов — мы просто меняем размер шеллов на UV и подбираем подходящий для нас размер.
В автомапинге не так важно как выглядит UV развёртка. В отличие от уникального мапинга, нет смысла умещать все шеллы внутри первого квадрата и экономить пространство на UV. Главное, чтобы текстуры выглядели аккуратно и без потягов.
Надеюсь, что сейчас ты понял разницу между уникальным мапингом и тайловым.
Вот так выглядит наш дом после развёртки и текстур.
Говоря про тайловый мапинг, есть один важный момент насчёт текстур.
Если ты не хочешь, чтобы при повторении текстуры были швы — используй тайловые текстуры, то есть текстуры без швов
Ты далеко не первый, кому они нужны, поэтому есть целый ряд библиотек с тайловыми текстурами. Вот несколько полезных сайтов, где ты их найдёшь:
Тайловая текстура, т.е. текстура, которая повторяется без швов.
Но есть нюансы. У нас в сцене есть несколько разных фруктов.
Кусок сцены с фруктами.
Как ты знаешь, каждый из материалов — это отдельный вызов отрисовки в игровом движке. Чтобы сэкономить ресурсы и не создавать под каждый из фруктов отдельный материал, мы сделали следующее: мы нарисовали одну текстуру и замапили на неё все фрукты. На самом деле это не сцена для игры, а демонтрация технологий, в игре мы бы почти все не тайловые текстуры засунули в один атлас, сделали бы его плотнее и аккуратнее.
Одна текстура — и сразу несколько покрашенных объектов. Это простейший атлас.
Атласы — это один из приёмов, которые часто используются в видео играх. Есть ещё тримы, но про них чуть позже будет в этой статье.
Раз речь зашла о текстурах, есть ещё один момент, который нужно знать.Лучше всего работать с квадратными текстурами.
Во всех программах на данный момент все текстуры растягиваются и полностью занимают первый квадрат на UV. Поэтому если текстура прямоугольная, то она растянется до квадрата.
Видишь, текстура некрасиво растянулась на UV. Всё потому что прямоугольные текстуры растягиваются до квадрата.
Иногда для экономии видеопамяти используют прямоугольную текстуру (например 1024х512 или даже 2048х256. Да, так тоже бывает!) Такая текстура все-равно растягивается до квадрата, и для неё очень важно правильно растянуть развертку.
Кстати, насчет разрешения текстур: из-за особенностей цифровых вычислений, разрешение текстур всегда стараются делать кратными степени двойки. То есть сторона текстуры может быть 32 пикселя в ширину. Или 64, 128, 256, 512, 1024, 2048 или, даже, 4096 пикселей. Как я писал выше, текстура может быть прямоугольной, например 512х256, или 512х128, но, как правило, их делают квадратными.
Текстуры кратные степени двойки заполняют целые ячейки видеопамяти. Если вместо текстуры 1024х1024 засунуть в движок текстуру размером 1000х1000 — она не заполнит всю ячейку видеопамяти, её обработка потребует чуть больше ресурсов от видеокарты, и из-за такой мелочи игра чуть-чуть потеряет в производительности. Эти потери очень несущественны и почти не заметны, но рендер видео игр — это всегда борьба за оптимизацию, и поэтому все разработчики игр ни секунды не сомневаются, что текстура в 1024х1024 лучше текстуры в 1000х1000.
Совет: старайся использовать квадратные текстуры, а прямоугольные лучше, по возможности, сделать квадратными.
Про текстуры пока что всё, давай вернёмся к UV, ведь про текстуры у нас будет отдельная, не менее огромная статья 🙂
Как правильно работать с UV
Сейчас мы разберём несколько приёмов, которые всегда используются при работе с UV. Они помогут сэкономить пространство и упростить процесс текстурирования.
Оверлапы сэкономят пространство на UV
Если на твоей модели есть одинаковые элементы, например, болты на обшивке, то на UV их можно размапить на один и тот же UV shell. Просто посмотри видео, там всё рассказано:
Симметричные объекты также можно оверлапить.Про это ты можешь узнать больше в этом уроке:
Дальше нас ждут тайлы, тримы и атласы.Они часто используются для объектов окружения, зданий и ландшафтов. Но, например, тайлы иногда бывают очень полезны и для hard surface моделей, и персонажей. Давай узнаем что это такое.
Тайлы, тримы и атласы
Как ты помнишь, текстура из первого квадрата UV повторяется бесконечно на все другие квадраты, и это называется тайлом.
Тримы используют это бесконечное повторение, чтобы более эффективно использовать ресурсы игрового движка.
Тримы — это те же тайлы, но повторяются они не во все стороны, а только по одной оси.
Трим дерева на лестнице. С атласом тримов мы можем размапить лестницу любого размера, и на ней никогда не будет швов.
Есть история, как крутой моделлер покрасил целый игровой уровень, используя всего 2 атласа. Как он это сделал, мы рассказали в этом уроке.
Итак, ты уже много узнал про UV, но это далеко не всё.
Важно не только уметь разворачивать объекты, но и проверять UV на косяки. А по ходу работы их будет много. Давай разберёмся, как это сделать?
Как проверить развёртку на ошибки
Помнишь нашу гифку, где при покраске модели творились странные вещи. Давай ещё раз на них посмотрим:
Такое происходит, когда у тебя есть ошибки на UV, например, текстуры могут растянутся, это называется «потягами на UV». Помимо потягов есть ещё несколько ошибок, которые мы разберём в этой статье чуть позже.
Хорошая новость — во всех программах есть «чекер». Это текстура с шахматной доской, которую используют для проверки развертки.Он выглядит вот так:
Так выглядит чекер. Здесь он везде без потягов и одного размера, значит ошибок на UV нет.
Если квадраты на чекере искажены, то при текстурировании возникнут проблемы.
Идеальная развертка — когда все квадраты чекера ровные.
Запомни, когда ты сделал развёртку, обязательно проверяй чекер.Если нашёл ошибки — исправляй!
Кстати, в программах есть функция, которая поможет тебе быстро исправить ошибки на UV.
Функция Unfold поможет исправить ошибки
Unfold есть во всех программах.
Если ты увидел, что чекер неровный — жми волшебную кнопку.Программа всё исправит.
Но ей тоже нельзя доверять на 100%. Сложные формы анфолд не сможет исправить, и придется резать UV.
Как ты уже понял, взять свою лоуполи, сделать авторазвёртку, а потом нажать Unfold — это далеко не всё. Тебе нужно выбрать способ мапинга твоей модели, правильно развернуть все элементы, сделать оверлапы, если они необходимы, уместить все шеллы внутри первого квадрата (и ещё много всего другого).
Работы много, и плохая развертка может попортить жизнь на текстурировании, поэтому UV — очень важный этап пайплайна.
Твоя задача на этом этапе
Сейчас ты понял основы работы с UV.Давай подведём небольшой итог, что конкретно ты должен сделать на этом этапе пайплайна, чтобы с текстурами не было проблем.
Прежде чем ты получишь целый ряд советов по правильной работе с UV, давай разберём самые частые ошибки новичков.
Частые ошибки на UV с примерами
Потяги на UV — чекер не квадратный
Если видишь нечто подобное — исправляй через Unfold.Если он не поможет — исправляй руками.
Кстати, у нас есть классный урок на эту тему:
Здесь мы много писать не будем — и так всё ясно.
2 Квадраты чекера разного размера
Чтобы ты понял, почему квадраты чекера могут быть разного размера, тебе нужно знать, что такое тексель.
Тексель — это количество пикселей на метр (или сантиметр, или дюйм — в зависимости от проекта).
Тексель показывает, насколько детальной будет текстура.В шутерах тексель высокий, так как игроки могут сильно приближаться к объектам. В играх от 3 лица тексель немного ниже, а в стратегиях тексель еще ниже.
Очень важно, чтобы объекты переднего плана имели одинаковый тексель. А объекты среднего и дальнего плана зачастую имеют более низкий тексель, так как им не нужна такая высокая детализация.
Примерные цифры. Для каждого проекта тексель отличается и высчитывается тех. директором
Если рядом находятся объекты с разным текселем, то один будет выглядеть очень детализированным, а второй — мыльным. Поэтому на проектах следят за текселем, чтобы картинка была гармоничной.
Как тексель связан с UV?
Когда ты правильно сделал развёртку, квадраты чекера будут одного размера.Если ты сделаешь один из шеллов меньше, то квадраты чекера увеличатся, а тексель уменьшится.
Меняем тексель на UV шеллах
Теперь важный момент.
Если ты моделишь грузовичок, то хорошая практика — на днище грузовичка сделать тексель меньше, потому что игроки вряд ли его увидят в игре. Тем самым ты сэкономишь место на юви для чего-нибудь более важного.
Запомни — изменять тексель нужно осознанно.
Когда ты меняешь тексель, ты должен точно понимать, зачем ты это делаешь.
Подробнее про тексель мы рассказали в этом уроке:
3 Слишком много свободного места на UV пространстве
Здесь слишком много свободного пространства на UV. Нужно увеличить размер всех шеллов и перепаковать их, чтобы они полностью заняли первый квадрат. Тогда будет выше тексель и текстура будет более детализированной
Текстуры дороже геометрии, поэтому текстурное пространство очень ценно.Мы стараемся заполнять его как можно плотнее, чтобы максимально эффективно использовать данные нам ресурсы.
4 Объекты на UV пересекаются
Никогда не пересекай UV шеллы. Это приведёт к артефактам на текстурах.
Исключения из этого правила — оверлапы.
В них ты осознанно накладываешь шеллы друг на друга. Зачем это нужно, мы уже писали в этой статье.
5 Кривые оверлапы
Когда объекты не идеально лежат друг на друге, могут появиться швы или некрасивые артефакты на текстурах.
Всегда проверяй оверлапы, которые делаешь.
С частыми ошибками разобрались.Пришло время понять, как правильно работать с UV.
Этот порядок действий не универсален. У каждого моделлера свой подход, но суть примерно та же. Если ты не мастер UV, то лучше сохрани этот небольшой чеклист для самопроверки.
Советы по правильной работе с UV
1 Обрезай сложные формы
Большие стенки нужно обрезать, иначе могут появиться потяги на UV.Ты сразу увидишь — в таких местах чекер будет неровным.
Давай разберём этот момент на примере нашей модели.Если мы просто сделаем авторазвёртку этой детали, то мы увидим потяги:
Что делать? В UV редакторе есть функция Cut. Просто сделай разрезы на больших деталях:
На торцах остались артефакты, отрезай их в отдельные шеллы:
В результате мы избавились от потягов, сделав всего 3 разреза (кстати, очень важно делать как можно меньше разрезов на юви — так на текстуре будет меньше швов):
Вывод: разрезай на UV сложные формы.
2 Когда размер квадратов можно увеличить или уменьшить
Когда делаешь UV, твоя задача на старте — сделать чекер везде ровным и получить квадратики чекера одинакового размера.
Если ты увеличиваешь или уменьшаешь размер шелла на UV, то размер квадратов чекера тоже меняется.
Давай разберёмся, когда и зачем нужно изменять размер шеллов?
Когда разрешение текстур можно уменьшить?
На деталях, которые не видно игрокам. Пример — днище автомобиля. Игроки его не видят, поэтому ты можешь сэкономить ресурсы и изменить размер объектов на UV. И чекер в таких местах будет меньше, чем у всей модели.
Это делается для того, чтобы сэкономить бесценное юви пространство.
Когда разрешение текстур можно увеличить?
Обычно его увеличивают в самых важных и заметных частях модели, а так же для надписей/символов. Это не нужно делать на каждой модели. Но если моделишь что-то очень важное, например, дробовик с которым бегают игроки, то разрешение текстур на его верхней части можно увеличить. Тогда чекер будет меньше, а текстуры в этом месте будут более детальными.
3 Добавляй отступы на местах швов
Минутка теории (не считая 20 минут уже прочитанного текста). В игровых движках текстуры теряют разрешение на расстоянии. Чем дальше объект от камеры, тем ниже разрешение текстур. Это называется в трёхмерке MIP Map.
Пример того, как текстуры теряют разрешение на расстоянии.
Давай разберёмся как это связано с UV.
Нельзя мапить объекты на UV вплотную друг к другу.
Чтобы при MIP мапах, т.е. удалении объектов от камеры, соседние объекты не брали информацию друг от друга. Это особенность игровых движков, которую нужно знать.
Всегда нужно оставлять небольшой отступ между UV шеллами. Этот отступ называют паддингом (padding).
Если этого не сделать, то на местах стыков объекты при MIP мапах появятся некрасивые швы.
Поэтому всегда добавляй отступы между объектами на UV.
Если хочешь узнать больше, вот урок на эту тему:
8 Отрезай все острые углы и углы под 90 градусов
Это нужно, если ты запекаешь нормал. В 90% случаев, если ты работаешь по пайплайну, то ты будешь запекать Normal Map. Про запечку (backing) как раз будет в следующей статье. Так что эта рекомендация тебе пригодится.
Если ты внимательно читал прошлую статью про сетку, то ты уже знаешь, что такое hard edge и soft edge.
С хардами тоже есть моменты, при работе с UV. Когда печешь нормал, на месте харда должен быть обязательный разрез на развертке (или вместо харда стоит сделать софт), а иначе нормал запечется со швом.Обязательно посмотри это видео, если хочешь понять, как правильно работать с хардами:
Всегда нужно отрезать острые углы и углы под 90 градусов. Они не запекутся на следующем этапе, и на модели опять появятся некрасивые швы.
Более подробно про шейдинг хардов мы разобрали в этом уроке:
А вот что будет, если ты неправильно работаешь с хардами:
Видишь швы на бочке? Их быть не должно.
В этих двух видео (которые были выше) мы рассказали как это работает, так что идём дальше.
9 Как разворачивать цилиндры
Авторазвёртка добавляет кучу лишних шеллов, лучше размапить в прямую линию.
Стенку цилиндра мы мапим в прямую линию. Обрати внимание, на юви много тонких прямоугольных шеллов — их очень удобно паковать вместе.
10 Неровную линию нужно мапить как прямую на UV
Если линия неровная, она занимает много места на UV, поэтому лучше размапить её как прямую — ведь прямоугольники очень легко паковать.
Небольшие неровные линии отлично мапятся в прямые. Так их легче паковать.
Мы сделали UV, что дальше?
1) На следующем этапе мы будем запекать детализацию с хайполи на лоуполи.
2) Потом сделаем текстуры для нашей модели
3) А в конце нас ждёт подача модели, чтобы сделать сочный скрин для твоего портфолио.
Даты писать не будем — мы в них не попадаем (работы много, курсы, все дела, не успеваем статейки писать)
И обязательно вступай в группу в ВКонтакте и группу в Фейсбуке, чтобы не пропустить следующий выпуск!
(UV) Развёртка стилизованного персонажа
Привет! Мы продолжаем цикл статей по пайплайну разработки стилизованных персонажей. Сегодня ты узнаешь что такое этап развёртки, и как его сделать на примере нашей модели.
Развёртка (UV) — третий этап ААА-пайплайна. На прошлом этапе мы сделали ретопологию, на позапрошлом — скульпт, а сейчас будем разворачивать нашу модель на плоскость для дальнейшего текстурирования.
План статьи
Подписывайся на нас, чтобы не пропустить следующий выпуск!
Мы в VK, Facebook, Instagram и Youtube.
В этой статье будет больше про кнопки и особенности стилизованных персонажей, так как
про теорию UV мы уже писали в этой статье.
Что такое развёртка, зачем она нужна
3D модель, по определению, сделана из объемных форм.
На любой объект в редакторе можно положить материал, выбрать его цвет и настроить блик.
Но положить текстуры на 3D объекты нельзя до тех пор, пока ты не сделаешь развёртку. Программа просто не знает как накладывать плоскую текстуру на геометрию.
Отсюда возникает отдельный этап пайплайна — UV развёртка.
Развёртка переносит объёмные формы на плоскость для того, чтобы на них можно было положить текстуры.
Развёртка всегда создаётся из лоуполи модели, которую мы сделали на прошлом этапе — ретопологии.
Так выглядит готовая развёртка нашего стилизованного персонажа. Сейчас ты узнаешь, как её сделать.
Инструменты для работы
Нам удобнее работать в Maya, но принцип работы универсален для всех аналогичных программ. Везде есть автомапинг, разрезы и чекер.
Нам понадобится вкладка UV Editor и UV Toolkit.
UV Editor и UV Toolkit в Maya понадобятся для работы с развёрткой
Делаем авторазвёртку
Для начала нам нужно сделать авторазвёртку, чтобы наши полигоны появились на рабочем поле, проще всего это сделать при помощи автоматической развёртки с опцией Camera-Based.
Если тебе не знакомы термины, которые мы используем, обязательно прочитай другую нашу статью про UV, там они ВСЕ расписаны максимально доступным языком.
Делаем Camera-Based развёртку
После этой функции получился такой результат:
Пока что это совсем не похоже на развёртку, ведь модель всё ещё не разложена на плоскость. Для этого нужно добавить швы (разрезы на UV).
Мы сделаем все этапы развёртки на примере шлема нашего персонажа, а в конце статьи разберём особенности развёртки других элементов.
Добавляем разрезы на UV
Есть 3 правила, где нужно делать разрезы (швы).
1. Разрезы делаются по возможности в незаметных местах модели.
2. Везде, где есть Hard Edge — добавляй разрез.
3. На стыке между двумя разными материалами — делай разрез.
Давай разберём эти моменты:
#1 Швы в незаметных местах
В принципе, ты можешь разрезать модель в любом месте.
Но уже на следующем этапе пайплайне (запечке) начнутся проблемы.
На местах разрезов на UV могут появится некрасивые полоски на карте нормалей, а так же, в игровых движках, при компрессии текстур.
Модель будет шейдить некрасиво в этих местах, поэтому хорошие трёхмерщики всегда стараются разрезать модель в самых незаметных местах.
Вот пример, где не надо делать швы:
Не делай швы посередине модели, в самых заметных местах. На этом скриншоте плохой пример.
Не забывай, мы моделим персонажа для компьютерной игры, поэтому по возможности прячь швы в местах, которые игрок не увидит:
Есть проблема: форма рога основана на цилиндре.
Так или иначе нам нужно добавить хотя бы один разрез, чтобы его разложить на плоскость.
Поэтому этот разрез мы сделали именно снизу, вот здесь:
Почему? Потому что в игре по большей части игрок будет видеть персонажа или спереди, или сзади.
И в этом месте разрез на роге почти не видно:
Именно поэтому мы сказали, что шов вот в этом месте — плохая практика:
Повторимся ещё раз — не делай швы в самых заметных местах
#2 Швы в местах, где есть Hard Edge
Везде, где есть хард — добавляй шов.
Так ты будет меньше проблем при запечке.
Добавляем швы на Hard Edge
#3 Швы на стыке двух разных материалов
В нашем примере, на рогах есть тряпка. В процессе текстурирования мы хотим её покрасить другим материалом.
Разделяем разные материалы швом
Для этого на стыке разных материалов всегда создавай разрез.
В таком случае, в программе для текстурирования можно будет легко сделать отдельную текстуру для этой тряпки.
Раскладываем модель на основе созданных швов
Итак, авторазвёртку мы сделали, швы создали. Пришло время разложить нашу модель на плоскость.
Функция Unfold разделит нашу модель на несколько отдельных UV шеллов
в местах, где мы расставили швы.
Что делает функция Unfold
Далее полученные UV шеллы нужно поставить на расстоянии друг от друга:
Перемещаем UV шеллы в сторону
Пока что рано думать о том, как уместить всё в первый квадрат и многих других вещах. Сейчас нужно добавить чекер и проверить развёртку на потяги — возможно придётся добавить дополнительные разрезы, чтобы их полечить.
Добавляем чекер
Чекер — это текстура с шахмотной доской, которая поможет тебе проверить развёртку на ошибки.
Если всё хорошо, то квадраты чекера будут ровного размера.
А если ты видишь, что квадраты вытянуты или изогнуты — при текстурировании то же самое произойдёт с твоей текстурой. Она начнёт некрасиво тянуться. Отсюда и появился термин «потяги».
Сейчас мы добавим чекер, увидим есть ли потяги, а затем будем их исправлять.
В большинстве случаев проблема с потягами решается за счёт добавления дополнительных швов на развёртке.
Добавляем чекер, меняем размер его квадратов, чтобы было видно потяги
Но у нас появилась новая проблема — квадраты чекера разного размера.
Это значит, что разрешение текстур на финальной модели тоже будет меняться. Там где квадраты чекера маленькие — будет очень высокое качество текстур, а где квадраты большие — низкое.
Кстати, про связь между разрешением текстур и развёрткой, тексель и чекер мы писали здесь.
Квадраты чекера разного размера, это нужно исправить
Делать квадраты разного размера — хорошая практика, но делать это нужно осознанно и пока что нужно просто их выровнять.
Как сделать квадраты чекера одного размера?
#1. Автоматический способ
Maya может сделать разрешение текстур равномерным для всей модели, соответственно, квадраты чекера будут одинаковыми.
Нажимаем клавишу Shift и жмём на кнопку Layout,
Всплывёт окошко с настройками, выбираем Preserve 3D Ratios,
Нажимаем Apply.
Автоматически выравниваем размер чекера
Квадраты стали одного размера
#2. Альтернативный способ
Мы можем выбрать любой из элементов нашего шлема, воспользоваться функцией Texel Density, и тогда все остальные элементы модели будут иметь чекер такого же размера, как у выбранного объекта.
Для этого:
1. Выбираем элемент с нужным размером квадратов чекера, нажимаем UV Toolkit → Tools → Texel Density → Get.
2. Выбираем все остальные элементы модели, нажимаем в том же месте кнопку Set.
Функция Texel Density → Get, затем Texel Density → Set
Итак, квадраты теперь одного размера, но в некоторых местах они искажены, значит на развёртке есть потяги.
Пример потягов на UV
Как исправить потяги?
Первым делом, нужно слегка повернуть UV шеллы, чтобы выровнять чекер:
Затем добавляем дополнительные швы, а после этого только у этого элемента жмём Unfold. Одного прохода было недостаточно, поэтому мы добавили разрезы в трёх разных местах шлема:
Теперь после создания дополнительных швов все квадраты ровные, значит потягов больше нет! Можно идти дальше.
Развёртка теперь без потягов
Переходим к следующему шагу: нужно оптимизировать наши UV шеллы.
Оптимизируем UV шеллы
Сейчас нам нужно сделать ряд действий, которые необходимы того, чтобы при запечке и текстурировании не было проблем.
#1. Мапим длинные шеллы в прямую линию
На рогах у нас есть тряпка. Она примерно прямоугольной формы, но программа автоматически развернула её вот так:
Если на ткани будут складки или фактура — текстура исказится и криво ляжет на нашу модель.
Хорошая практика в подобных случаях — мапить подобные шеллы в прямоугольники.
Для этого выбираем крайний вертекс в UV редакторе, зажимаем клавишу B, выбираем соседние элементы и опускаем вниз:
Мапим выбранный шел в прямоугольник
Затем нам нужно выпрямить эти шеллы.Выбираем их и включаем функцию UV Toolkit → Unfold → Straighten UVs:
В этом примере мы выделили не весь шел, а его часть, потому что функция Straighten UVs не любит треугольники — они сильно искажаются.
Функция Straighten UVs искажает треугольные шелы.
Треугольники так мапить нельзя, поэтому мы выпрямляем этот шел по частям, не трогая треугольник.
Проверяем этот кусок на потяги, видим, что квадраты чекера после этой процедуры стали неровными:
Чтобы это исправить, немного смещаем эджи на UV:
Так мапятся все аналогичные элементы нашей модели:
Этот шел ждёт та же участь — будем его выпрямлять
#2. Шеллы не должны пересекаться
Вот такого быть не должно:
Шеллы не должны пересекаться
Если шеллы пересекаются — появятся артефакты на текстурах.
#3. Шеллы должны быть на расстоянии друг от друга
Нельзя мапить объекты на UV вплотную друг к другу. Они должны быть на небольшом расстоянии друг от друга — это называется паддингом.
Подробнее здесь.
Добавляем расстояние между UV шеллами (паддинг)
Ещё один пример паддинга
#4. Кладём шеллы в первый квадрат UV
Есть 2 вида мапинга: тайловый и уникальный.
Очень подробно мы про оба вида мапинга и особенность первого квадрата мы писали здесь.
Тайловый мапинг используется в основном для зданий и предметов окружения, а для стилизованных персонажей нужно делать уникальный мапинг.
Особенность игровых движков заключается в том, что текстура ложится только на первый квадрат UV и не выходит за его пределы. А остальные квадраты бесконечно повторяют её.
Это значит, что все UV шеллы нашего персонажа мы должны положить внутрь первого квадрата UV.
Как это сделать?
Выбираем все шеллы,
Нажимаем UV Toolkit → Arrange and Layout → Layout.
Лично я, как и многие трёхмерщики, не очень люблю автоматические функции.Да, программа положила все шеллы внутрь первого квадрата, но в нём слишком много пустого пространства:
Пустое пространство на UV — это плохо
Чем больше места занимают шеллы внутри первого квадрата, тем выше будет разрешение текстур у финальной модели.
Есть ещё одна автоматическая функция, которая исправляет грехи предыдущей. Находится она в Layout UVs Options. Нажми на скриншот, чтобы увеличить и посмотреть выбранные нами настройки:
Но и эта функция тоже не даёт идеального результата, плюс довольно долго грузится:
Результат — между шеллами меньше пустого пространства
Да, сейчас между шеллами почти нет неиспользованного пространства, зато оно есть сверху. Именно по этой причине, пока что есть только один инструмент, позволяющий идеально разложить шеллы внутри первого квадрата — твой мозг. С каждым разом получаться будет всё лучше и лучше.
Не забывай, что сейчас ты видишь только развёртку шлема, а нужно сделать развёртку всего стилизованного персонажа. Поэтому уместить в первый квадрат нужно не только шлем, а также все другие элементы.
Делается это по аналогичному принципу:
Чек-лист по развёртке
Развёртка других элементов стилизованного персонажа
#1. Все ремешки и тряпки мапим в прямую линию
По такому же принципу, как мы уже показали сегодня.
#2. Все шеллы лежат внутри первого квадрата UV
Потому что мы делаем уникальный, а не тайловый мапинг.
#3. Повторяющиеся элементы сделали оверлапами
Так как эти элементы идентичны, мы мапим их вместе и тем самым экономим место на UV.
Подробнее про оверлапы узнаешь в этом видео:
#4. Финальная проверка развёртки
Если включить функцию UV Distortion, то наша развёртка синим цветом покажет самые сжатые полигоны, а красным — все растянутые:
В данном случае, нас всё устраивает.
А если развёртка горит как светофор — нужно переделывать.
#5. Все швы спрятаны
#6. Другие полезные функции
Есть ещё несколько полезных функций для работы с развёрткой, которые не пригодились нам для данной модели.
Сшивание
В случае, если мы сделали лишний разрез, мы можем обратно сшить выбранные шеллы — выбираем их и нажимаем Sew.
Optimize
Эта функция автоматически оптимизирует выбранные точки на UV.
Flip
Позволяет отразить UV шелл:
Что делать после развёртки?
После развёртки, следующий этап пайплайна — запечка.
На этом этапе мы будем переносить детализацию с хайполи на лоуполи.
Жди продолжения!
Подписывайся на нас, если ты ещё не с нами!
Мы в ВК, Facebook, Instagram и Youtube.
А если ты хочешь пройти весь пайплайн разработки стилизованного персонажа и получить индивидуальные фидбеки — ещё не поздно записаться на наш курс, который уже скоро стартует. Читай подробности в этой статье.
UV Развёртка: ААА-Пайплайн 4/7. Самый полный гайд.
Это четвертая статья из цикла про ААА-пайплайн. Вот ссылки на все пять, выбирай ту, которая тебе нужна:
Эта статья поможет новичкам научиться делать развертку так, чтобы на этапе запечки не возникало неожиданных проблем. Ты узнаешь, что такое UV маппинг (развертка), зачем он нужен и из каких этапов состоит. Внимательное изучение статьи займет около 20 минут. Если возникнут вопросы — пиши в чат-бот (кнопка справа внизу). Там на связи живой менеджер 🙂 Он поможет разобраться. Ну что, давай начнем!
Что такое развертка
В редакторе на модель можно наложить материал, выбрать его цвет и настроить блик. Но положить текстуры на 3D-объекты нельзя. Программа просто не знает как накладывать плоскую текстуру на геометрию. Для этого нам нужна 2D-развертка объемной модели.
Развертка похожа на инверсное оригами. В оригами ты делаешь из плоского листа бумаги 3D-объект, а в развертке наоборот — из объемного делаешь плоское.
В любом 3D-редакторе есть инструментарий для работы с UV. Например, функционала Maya хватит, чтобы сделать развёртку даже самой сложной модели. Но для удобства и редких фишек (таких как отрисовка паддинга) иногда используют программы для работы только с UV. Самые популярные — UV Layout и Rizom UV
Для маппинга сложных форм мы пользуемся функцией авторазвертки.
Из чего состоит развертка
Внизу на картинке у куба 8 точек и 6 квадратных полигонов. На развертке тоже 6 квадратов, но точек больше 8, как на 3D-модели.
Изменили размер UV шелла, изменилась и текстура на объекте
Проблемы из-за неправильной развертки
Во втором видео мы подпортили UV развертку, чтобы была видна разница между правильной и неправильной разверткой. Плохие текстуры портят даже идеально собранные модели. Если увидишь такие же проблемы, когда будешь текстурить — что-то не так в UV развертке. Давай разберемся откуда берутся такие глюки с текстурой и как их исправить.
Есть 2 вида развертки на UV:
1) Сделать уникальный маппинг;
2) Сделать тайловый маппинг.
В UV пространстве бесконечное количество квадратов, которые повторяют текстуру первого квадрата. То есть, всю развертку нужно уместить в один квадрат.
Это и есть уникальный маппинг. Его используют в твердотельном моделировании (Hard Surface) или для создания персонажей. А для объектов окружения, ландшафтов и зданий в основном используют тайловый мапинг.
Один материал имеет только одну текстуру. Эта текстура растягивается на первый квадрат UV. В этом случае, чтобы замапить грузовик нам нужна текстура с деревом и с крашенным металлом.
Мы замапили все объекты на UV только в первый квадрат. На выходе получилась одна единственная текстура и один материал, а мы тем самым сэкономили ресурсы игрового движка. Маппинг техники и персонажей имеет некоторые отличия. Если хочешь больше узнать о том, как делать развертку именно для 3D-персонажей присмотрись к курсу STYL.
Как мы уже говорили — квадраты на UV бесконечны. Текстура, которую мы положим в первый квадрат может повторяться бесконечное количество раз. Такое повторение текстур называется — тайл.
Тайловый маппинг используется для развёртки зданий, предметов окружения и ландшафтов.
Если мы хотим сделать развертку этого дома — сначала нужно создать материалы с бесшовными текстурами, а потом наложить геометрию с помощью авторазвертки (box mapping).
В отличие от уникального маппинга, в тайловом UV шеллы могут выходить за пределы квадратов. Зачем это нужно? Представь что нам нужно затекстурить кирпичную стену. Если развёртка стен будет в первом квадрате — кирпичи будут слишком крупными. Потому, мы выбираем тайловый подход, чтобы можно было контролировать текстуры так, как нам нужно.
Вот так выглядит наш дом после развертки и текстур.
Получаем в одной текстуре сразу несколько покрашенных объектов — это называется атлас. Атласы часто используют в играх, чтобы экономить затраты движка на прорисовку текстур.
Из-за особенностей цифровых вычислений, разрешение текстур всегда стараются делать кратными степени двойки. Сторона текстуры может быть 32 пикселя в ширину или 64, 128, 256, 512, 1024, 2048 и даже 4096 пикселей.
Текстуры кратные степени двойки заполняют целые ячейки видеопамяти. Если вместо текстуры 1024х1024 засунуть в движок текстуру размером 1000х1000 — она не заполнит всю ячейку видеопамяти и ее обработка потребует больше ресурсов от видеокарты. Из-за такой мелочи игра потеряет в производительности. Больше о текстурировании 3D-моделей ты можешь узнать на курсе Процедурный трип.
Теперь, когда разобрались как взаимодействуют текстуры с разверткой, давай дальше разбираться с UV.
Как правильно работать с UV
Есть 4 приема для работы с UV, которые сэкономят пространство и упростят процесс текстурирования:
Пример как работать с оверлапами
Как оверлапить симметричные объекты
Дальше нас ждут тайлы, тримы и атласы. Чаще всего их используют для объектов окружения, зданий и ландшафтов. Но, например, тайлы бывают полезны и для hard surface моделей, и персонажей. Давай узнаем, что это такое.
Как тайлы, тримы и атласы экономят пространство?
Тримы — это те же тайлы (квадраты на маппинге), но повторяются они не во все стороны, а только по одной оси. С атласом тримов мы можем размаппить лестницу любого размера и на ней никогда не будет швов.
На текстурах лестницы нет швов
Пример как работают атласы и тайлы
Как проверить развертку на ошибки
Когда делаешь развертку, могут появиться косяки, как с нашим грузовиком. Но во всех программах есть «чекер». Это текстура с шахматной доской, которую используют для проверки развертки. Он выглядит вот так:
Квадраты без потягов и одного размера, значит ошибок на UV нет
Как работает функция Unfold
Но сложные модели нужно будет маппить самому. Взять лоуполи, сделать авторазвертку, а потом нажать Unfold — это далеко не все. Тебе нужно выбрать способ маппинга модели, правильно развернуть элементы, сделать оверлапы, уместить шеллы внутри первого квадрата и еще много всего.
Чек лист по UV маппингу:
Что делать, если появились проблемы с разверткой
1. Потяги на UV — чекер не квадратный
Если видишь нечто подобное — исправляй через Unfold. Если он не поможет — исправляй руками.
2. Квадраты чекера разного размера
Чтобы понять почему квадраты меняют размер, нужно знать, что такое тексель.
Тексель — это количество пикселей на метр, сантиметр, или дюйм. Он показывает, насколько детальной будет текстура. В шутерах тексель высокий, потому что игроки сильно приближаются к объектам. В играх от 3 лица тексель ниже, а в стратегиях минимальный. Чтобы не перегружать движок важно, чтобы объекты переднего плана имели высокий тексель, а среднего и дальнего плана — низкий.
Как изменится тексель, если менять размер шеллов
Это может стать бедой для модели, а может быть и лайфхаком. Если моделишь грузовик, хорошая практика — на днище сделать тексель меньше, потому что игроки вряд ли его увидят в игре. А ты сэкономишь место на UV для чего-нибудь более важного.
3. Слишком много свободного места на UV пространстве
Нужно увеличить размер шеллов и перепаковать, чтобы они полностью заняли первый квадрат. Тогда тексель будет выше, а текстура детализированнее.
4. Объекты на UV пересекаются
UV шеллы пересекаются
Если шеллы пересекутся — на модели появятся артефакты. Исключение из этого правила — оверлапы. В них мы осознанно накладываем шеллы друг на друга.
Если объекты не идеально лежат друг на друге, появляются швы на текстурах
Порядок работы с UV
Давай подытожим, в каком порядке нужно делать развертку:
Советы по правильной работе с UV
1. Обрезай сложные формы
Большие стенки нужно обрезать, иначе могут появиться потяги на UV. В таких местах чекер неровный. Разберём этот момент на примере нашей модели. Если сделать авторазвёртку этой детали — увидим потяги:
Вопросы по UV-развёртке в Blender
Есть вот такая геометрия:
Нужно положить на неё одну текстуру так, чтобы внутренние изгибы дырки затекстурировались
бесшовно одной текстурой.
Помечаю как швы вот эти рёбра (помечены жёлтым выделением):
В итоге, при построении развёртки выходят неточности, и текстура слева и внизу от отверстия ложится криво:
Даже если поправить в развёртке вертексы, так чтоб было всё ровно, всё равно текстура в этих местах ложится криво.. UV-развёртка при этом выглядит так:
Вопрос: почему при первом варианте выбора швов не получается правильного наложения текстуры?
Можно конечно делать по второму варианту, но если всё-таки не хочется руками двигать полигоны на UV-разметке, а хочется чтоб автоматически ставились как надо, как быть?
Чекбокс Fill Hole сними при анврапинге.
marggob
А это в какой версии Blender? Я работаю в 2.79b, там нет таких опций при анврапинге.
DEN 3D скрин с кнопками из 2.80+ версии.
попробуй просто проекцию из вида.
refroqus
Попробовал. В принципе, получилось. И в данном случае наложение выглядит неплохо:
Но сразу появилось несколько вопросов:
1.) В данном способе наложения выходит так, что на внутренних стенках отверстия текстура накладывается так, что при уходе вдаль дублируется один и тот же тексель текстуры. А если, например, у меня стенки отверстия будут глубже и мне нужно, чтобы там была текстура кирпичной кладки например, тогда данный способ уже не подойдёт. Проблема видна вот тут на картинке, например:
2.) Если мне нужно развернуть не только одну стену, а сразу все 4 стены комнаты, как тогда быть? Таким методом можно поочерёдно развернуть только каждую стену, т.к. у каждой будет своё направление для камеры. Случай как вот тут:
Также есть ещё второй вопрос. Чтобы не плодить темы, решил постить в этой.
Есть вот такая изогнутая геометрия по периметру комнаты:
Нужно на неё равномерно без швов положить вот такую текстуру, на всю длину:
Если выбрать все полигоны и нажать Unwrap, получается такая развёртка:
Текстура при такой развёртке ложится криво, она как бы развёрнута на угол:
Исходя из своих соображений, я выравнял все полигоны на UV-развёртке, чтобы они лежали ровно, в одну строку, чтобы наложение текстуры шло последовательно и ровно. Также я отмасштабировал всю развёртку, чтобы занимала всю площадь текстуры. Вышла такая развёртка:
Текстура стала накладываться вот так:
Уже лучше, но всё-таки есть искажения на отдельных блоках.
1.) Как для этого случая сделать идеальное наложение текстуры?
2.) Почему блендер на развёртке как-то странно выгибает геометрию полукругом?
3.) Обратил внимание, что иногда на развёртке могут быть две вершины, при этом видно, что они расположены на расстоянии друг от друга по оси X, но при этом координата X в свойствах у них одинаковая.. Как это понимать? Или бывает, что у вершины, которая левее, в свойствах координата X оказывается больше, чем у той, что правее.. Как понимать такие противоречия?
Благодарю за внимание и ответы.
1.) Как для этого случая сделать идеальное наложение текстуры?
тайловый мапинг. для каждого повторяющегося по картинке полигона использовать одну и ту же.
2.) Почему блендер на развёртке как-то странно выгибает геометрию полукругом?
3.) Обратил внимание, что иногда на развёртке могут быть две вершины, при этом видно, что они расположены на расстоянии друг от друга по оси X, но при этом координата X в свойствах у них одинаковая.. Как это понимать? Или бывает, что у вершины, которая левее, в свойствах координата X оказывается больше, чем у той, что правее.. Как понимать такие противоречия?
вероятнее всего проглядел и не закольцевал seam правильно, или у тебя там на самом деле возможно дублированный полигон, сделанный случайно (так бывает), лечится удалением лишних вершин (там же где merge, можно задать опцию минимального расстояния, когда блендер удаляет лишние или парные вершины)
есть еще классный метод, но требующий терпения ). это если использовать анврап на модели, потом по чекеру сделанному из анврапа
(или смарт ув, хотя там искажения возможны именно потому что блендер будет пытаться заполнить пространсво рациональнее, настройки вря дли помогут)
refroqus
> тайловый мапинг. для каждого повторяющегося по картинке полигона использовать
> одну и ту же.
В моём случае нужно одну текстуру длинную равномерно растянуть по всем полигонам.
refroqus
> вероятнее всего проглядел и не закольцевал seam правильно, или у тебя там на
> самом деле возможно дублированный полигон, сделанный случайно (так бывает),
> лечится удалением лишних вершин (там же где merge, можно задать опцию
> минимального расстояния, когда блендер удаляет лишние или парные вершины)
Дублей вершин точно нет.. Вот например, если развернуть несколько полигонов, а потом после этого развернуть несколько соседних, то на развёртке эти группы полигонов будут в разных местах, и при этом у них будут как бы общие верщины.. Т.е. я выделяю одну вершину, а редактор выделяет автоматом вторую и показывает, что у них одинаковые координаты x/y.. Но что самое интересное, он хоть и показывает, что координаты одинаковые, а реально, текстура нефига не стыкуется в этих местах.. Вот этот факт вообще просто взрывает мой мозг.. Не могу понять логики.. Ниже скрин:
Вот как это понимать? Получается, координаты в свойствах UV Vertex одни, а визуально на сетке мы видим, что вершины в разных местах..
deled (delgine) к примеру деформирует квадратную текстуру в трапецию, (fit) если полигон трапециевидный, соответсвенно сжав тексели на меньшей стороне)
refroqus
> deled (delgine) к примеру деформирует квадратную текстуру в трапецию, (fit)
> если полигон трапециевидный, соответсвенно сжав тексели на меньшей стороне)
Т.е. в итоге получается уже несколько текстур для разных полигонов?
прикольно, но памяти много все эти текстуры будут жрать)
Посмотрел ещё несколько уроков по разворачиванию в 3DS Max, там на тот случай, когда после авто-развёртки полигоны как-то хитро завернулись, используют какой-то «Relax» и что-то ещё (встроенный функционал), который позволяет автоматически разогнуть развёртку, сделав её ровной.. В Blender наверно такого нет и поэтому только вручную делать..)
Источники информации:
- http://docs.blender.org/manual/en/latest/modeling/meshes/editing/uv.html
- http://you-hands.ru/2019/12/01/kak-sdelat-uv-razvertku-v-blender-2-8/
- http://craftonline.livejournal.com/21052.html
- http://dtf.ru/gamedev/83063-uv-razvertka-aaa-payplayn-4-7-samyy-polnyy-gayd
- http://docs.blender.org/manual/ru/dev/editors/uv/introduction.html
- http://render.ru/ru/XYZ/post/16838
- http://render.ru/ru/XYZ/post/17063
- http://www.school-xyz.com/uv-razvyortka-aaa-pajplajn-47-samyj-polnyj-gajd
- http://gamedev.ru/art/forum/?id=253171