UV-развёртка и квадремеш в Blender — руководство по конвейеру игровых ассетов
Создайте собственную UV-развёртку в Blender
Изучите UV-развёртку и квадремеш в Blender для игровых ассетов — швы, проекция, плотность текселей и проход ремеша, который сохраняет топологию чистой. Включает реальные модели «до и после», которые можно вращать.
UV-развёртка в Blender — это шаг сопоставления координат, а не этап текстурирования. Вы разворачиваете трёхмерную поверхность в двумерную плоскость, чтобы к ней мог обратиться каждый полигон без искажений. Ось U идёт горизонтально по UV-сетке, ось V — вертикально. Когда вы разворачиваете куб, Blender делает разрезы по рёбрам и раскладывает шесть граней плоско внутри квадрата 0–1. Этот квадрат — единственное место, где может жить текстура. Всё за его пределами не используется или повторяется настройками тайлинга.
Это руководство охватывает процесс UV-развёртки в Blender для игровых ассетов, а затем проход квадремеша, который должен произойти до неё. Порядок важен: скульптинг, ремеш, развёртка, запекание. Если развернуть плотный скульпт, а затем выполнить ремеш, UV-островки перестанут соответствовать итоговой топологии, и развёртку придётся делать заново. То же правило действует, когда вы переносите модель в конструктор трёхмерных игр Neta Studio: чистые квады и согласованная плотность текселей переживают перенос, неаккуратные треугольники и неравномерные островки — нет.
Кратко: четыре вещи, которые определяют ваши UV
Если вы не прочитаете ничего другого, прочитайте эти четыре пункта. Они охватывают решения, которые чаще всего приводят к переделкам игровых ассетов.
- Развёртка — это карта координат, а не текстураUV-слой хранит пару U и V для каждого цикла сетки. Он не содержит пикселей. Вы можете развернуть модель и всё ещё не знать, как она будет выглядеть, пока материал не прочитает эту карту.
- Smart UV Project покрывает большинство игровых ассетовДля технических пропсов, оружия и архитектуры Smart UV Project с порогом угла 66 градусов создаёт пригодные островки почти без ручной работы со швами. Используйте его до того, как браться за ручную разметку.
- Несогласованная плотность текселей читается как размытиеЕсли у одного островка плотность текселей вдвое меньше, чем у другого, островок с низкой плотностью выглядит мягким, даже когда оба используют одну и ту же текстуру 2K. Держите островки в пределах примерно десяти процентов друг от друга, иначе разница заметна.
- Сначала ремеш, потом развёртка, а не наоборотРемеш перестраивает топологию. Любые UV, созданные до него, становятся недействительными, потому что циклов сетки больше не существует. Всегда завершайте скульптинг и ремеш, прежде чем отметить хоть один шов.
Что на самом деле делает UV-развёртка
Представьте коробку из бумаги. Разрежьте её по определённым рёбрам, разверните и положите плоско на стол. Этот плоский лист и есть UV-раскладка. Разрезанные рёбра — это швы. У каждой вершины трёхмерной коробки теперь есть координата на плоском листе: U для горизонтального положения, V для вертикального. Квадрат 0–1 — это пространство текстуры. Когда материал берёт образец изображения, он читает UV-координату каждого фрагмента и извлекает цвет в этом месте.
Развёртка — это не текстурирование. У меша могут быть идеальные UV и отсутствовать материал, или наоборот — материал с испорченными UV. Шаг развёртки лишь определяет, куда на изображении смотрит каждый полигон. Если его пропустить, Blender применит проекцию по умолчанию, которая растягивается на изогнутых поверхностях и перекрывается на зеркальной геометрии. В результате модель кажется текстурированной, пока вы не посмотрите внимательнее.
Одна фраза, которая уберегает от проблем: если вы не можете описать, где грань находится в квадрате 0–1, значит, развёртка не завершена. UV-редактор показывает вам этот квадрат. Трёхмерный вьюпорт — нет.
Горячая клавиша развёртки, которой пользуются все
В режиме редактирования выделите грани, нажмите U и выберите «Развернуть». Это стандартный путь. Blender запускает выбранный алгоритм развёртки на выделенных гранях и записывает результат в активный UV-слой. Если ничего не выделено, он работает со всем видимым, что редко бывает нужным на сложном меше.
Вариант, которым на практике пользуется большинство, — это Smart UV Project. То же меню U, другой пункт. Smart UV Project не требует сначала отмечать швы. Он проецирует меш с нескольких углов, распознаёт резкие углы и автоматически упаковывает получившиеся островки. Для игрового пропса с плоскими панелями и жёсткими рёбрами это быстрее и предсказуемее, чем ручная расстановка швов.
Таблица горячих клавиш ниже перечисляет клавиши, которые вы будете использовать чаще всего в UV-редакторе и трёхмерном вьюпорте. Освойте их, и вам не придётся каждый раз искать нужный пункт в меню для нового ассета.
| Действие | Горячая клавиша | Контекст |
|---|---|---|
| Меню развёртки | U | Режим редактирования, трёхмерный вьюпорт |
| Отметить шов | Ctrl+E, «Отметить шов» | Режим редактирования, выбор рёбер |
| Снять шов | Ctrl+E, «Снять шов» | Режим редактирования, выбор рёбер |
| Выбрать связанное | L | Режим редактирования, наведите курсор на островок |
| Переключение UV-редактора | Shift+F10 или вкладка рабочей области | Любой режим |
| Упаковать островки | Ctrl+P в UV-редакторе | UV-редактор, выбор островков |
Smart UV Project, Angle Based и Conformal: сравнение
В Blender есть три основных алгоритма развёртки плюс несколько специализированных. Таблица ниже перечисляет, что делает каждый, где он выигрывает, какой порог угла важен и когда его стоит избегать. Для технических игровых ассетов Smart UV Project с ограничением 66 градусов — рекомендация по умолчанию. Он справляется с острыми углами, которые задают панели и фаски, без ручной работы со швами, и создаёт островки, которые эффективно упаковываются.
Angle Based и Conformal — более старые алгоритмы, которые работают после того, как вы отметили швы. Angle Based сохраняет углы между рёбрами, что уменьшает растяжение на органических формах. Conformal сохраняет конформные углы и склонен давать больше искажений на изогнутых поверхностях, но меньше перекрытий на плоских. Если вы разворачиваете голову персонажа, Angle Based с вручную отмеченными швами обычно лучший выбор. Если вы разворачиваете ящик или винтовку, Smart UV Project быстрее.
Порог угла в Smart UV Project управляет тем, насколько агрессивно Blender разбивает меш на островки. Более низкий порог даёт больше островков и следует более резкой детализации. Более высокий порог даёт меньше островков и может соединять через рёбра, которые вы хотели разделить. При 66 градусах большинство технической геометрии разделяется по фаскам и линиям панелей, где вы и так отметили бы швы.
| Алгоритм | Лучше всего для | Порог угла | Когда не использовать |
|---|---|---|---|
| Smart UV Project | Технические пропсы, оружие, архитектура, быстрые болванки | 66 градусов (по умолчанию 66°) | Органические скульпты с плавной кривизной и малым числом жёстких рёбер |
| Angle Based | Органические персонажи, существа, лица, руки | Не применимо — использует отмеченные швы | Сетки с множеством острых углов; даёт больше перекрытий |
| Conformal | Плоские панели, механические детали, плоские грани с малым искажением | Не применимо — использует отмеченные швы | Изогнутые органические поверхности; больше растяжения на сферах |
| Lightmap Pack | Карты запечённого освещения или окружающего затенения | Не применимо — упаковывает по граням | Цветовые карты текстур; перекрывается, если каждая грань не уникальна |
Швы: где делать разрезы
Шов — это ребро, по которому меш разрезается, чтобы его можно было развернуть. Швы не видны в финальном рендере, пока текстура совпадает по линии разреза или разрез лежит на скрытой грани. То, где вы их размещаете, определяет, сколько искажений придётся разрешить алгоритму развёртки.
Четыре правила покрывают большинство случаев. Во-первых, прячьте швы на гранях, которые камера никогда не видит: нижние стороны, внутренние поверхности, затылок, внутренность шлема. Во-вторых, режьте по жёстким рёбрам, где поверхность уже разрывается. Линия фаски — естественный шов, потому что две грани не имеют общей гладкой нормали. В-третьих, режьте на границах материалов. Если у пропса есть металлическая часть и резиновая рукоятка, каждому материалу нужен свой островок, чтобы плотность текселей могла отличаться при необходимости. В-четвёртых, используйте как можно меньше швов. Каждый шов добавляет границу и повышает шанс видимого несовпадения, когда текстура не тайлится идеально.
Три наглядных разреза. На винтовке: шов вдоль верха ствола, вниз по затыльнику приклада и под магазином. На голове персонажа: шов вниз по затылку, под челюстью и за ушами. На ящике: шов вдоль одного вертикального ребра, вокруг верхней кромки и вокруг нижней кромки. Эти разрезы позволяют мешу развернуться в несколько крупных островков вместо десятков фрагментов.
Плотность текселей и почему ваши текстуры выглядят размытыми
Плотность текселей — это число пикселей текстуры, приходящихся на заданную площадь трёхмерной поверхности. Вы вычисляете её, деля разрешение текстуры на размер островка в UV-единицах. Если текстура в 2048 пикселей распределена по островку размером два метра, плотность составляет 1024 пикселя на метр на этом островке. Если другой островок — полметра, но всё ещё использует ту же текстуру в 2048 пикселей, его плотность — 4096 пикселей на метр. Первый островок выглядит размытым рядом со вторым, хотя оба используют одно и то же изображение.
Практическое правило: держите островки в пределах примерно десяти процентов друг от друга по плотности текселей. Blender не обеспечивает это автоматически. Smart UV Project упаковывает островки ради экономии места, а не согласованности плотности. Вы проверяете это в UV-редакторе, включив оверлей Stretch или сравнивая размеры островков в квадрате 0–1 с площадью поверхности, которую они представляют. Разница в плотности в 50 процентов заметна на текстуре 2K. Разница в 10 процентов — нет.
Если разным частям нужна разная плотность, это нормально. Ключевое оружие и фоновый пропс вдалеке могут использовать разную плотность, потому что находятся на разном расстоянии от камеры. Но внутри одного ассета согласованность важнее абсолютного разрешения. Единообразные 512 пикселей на метр выглядят лучше, чем смесь 256 и 1024.
Проверьте UV перед экспортом
Три проверки ловят почти любую проблему с UV до того, как она дойдёт до экспортёра. Выполняйте их в UV-редакторе с видимым трёхмерным вьюпортом, чтобы одновременно видеть и карту, и поверхность.
Во-первых, растянутые грани. В UV-редакторе включите оверлей Stretch или используйте параметр Display > Stretch. Грани, растянутые относительно их трёхмерной формы, показываются красным или синим. Если вы видите большие красные области на изогнутой поверхности, развёртка плохо сохранила площадь. Поверните островок, добавьте шов или переключитесь на Angle Based для этого участка. Во-вторых, перекрывающиеся островки. Перекрытия означают, что две грани занимают одно и то же место в квадрате 0–1, и одна скроет другую. Выделите всё в UV-редакторе и поищите островки, лежащие друг на друге. Blender вас об этом не предупредит. В-третьих, островки за пределами диапазона. Островки, вытолкнутые за пределы квадрата 0–1, не берут ничего из текстуры, если материал не использует тайлинг. В UV-редакторе включите UV > Constrain to Image Bounds или проверьте углы вручную. Всё за пределами 0–1 — проблема для текстуры один-к-одному.
Самый быстрый способ выявить все три проблемы — выделить весь меш в UV-редакторе и применить «Упаковать островки» (Ctrl+P) с небольшим отступом. Это не исправит растяжение или перекрытия, но сделает островки за пределами диапазона очевидными, потому что они вернутся внутрь квадрата. Если после упаковки ваши UV внезапно выглядят правильно, значит, они были за пределами диапазона. Если они всё ещё перекрываются, у вас настоящее перекрытие, которое нужно устранить.
Квадремеш для топологии, готовой для игры
У скульпта есть треугольники, плотные участки и неравномерный поток рёбер. У игрового меша есть квады, однородная плотность и чистые рёберные петли, которые деформируются при анимации. Квадремеш превращает первое во второе. У Blender есть встроенный ремешер под названием QuadriFlow, доступный в режиме скульптинга в разделе Remesh. Он бесплатный и создаёт сетки из квадов на большинстве скульптов. Платная альтернатива — отдельный ремешер, например Exoside Quad Remesher, который справляется со сложными формами с меньшим числом артефактов и даёт прямой контроль над целевым числом граней и симметрией. Для технических моделей часто не нужен ни один, ни другой: моделируйте с чистой топологией с самого начала.
Порядок рабочего процесса — скульптинг, ремеш, развёртка, запекание. Скульптинг первым, чтобы получить форму. Ремеш вторым, чтобы получить топологию, готовую для игры. Развёртка третьей, чтобы швы и островки следовали финальному потоку рёбер. Запекание четвёртым, чтобы перенести детализацию с высокополигонального скульпта на низкополигональный меш после ремеша. Если поменять местами ремеш и развёртку, ремеш перестроит циклы сетки, и ваши UV-координаты будут отброшены. Blender может сохранить имя UV-слоя, но координаты больше не соответствуют новым граням. Развёртку придётся делать заново.
Тот же порядок действует, когда вы экспортируете в игровой движок или переносите ассет в Neta Studio. Ассет после ремеша с чистыми квадами разворачивается предсказуемо. Триангулированный скульпт без прохода ремеша разворачивается в сотни маленьких островков, которые дорого упаковывать и трудно текстурировать согласованно.
01
Вылепите высокополигональную форму в Blender или импортируйте её из программы для скульптинга.
02
Запустите QuadriFlow (режим скульптинга > Remesh > QuadriFlow) или ваш платный ремешер. Задайте целевое число граней, которое потянет игровой движок.
03
Проверьте результат ремеша на артефакты: защемления, потерянную детализацию или неравномерный размер квадов. Исправьте их, прежде чем идти дальше.
04
Отметьте швы и разверните меш после ремеша. Держите островки в пределах примерно десяти процентов по плотности текселей.
05
Запеките детализацию с высокополигональной модели на низкополигональную с помощью Cycles или отдельного инструмента запекания.
06
Экспортируйте в .glb и убедитесь, что UV сохранились, повторно импортировав файл в Blender.
Автоматический риггинг после ремеша
Риггинг не меняет ваши UV. Он меняет группы вершин меша и модификатор арматуры, но UV-слой остаётся на месте. Вы можете риггить до или после развёртки. Практическая причина риггить после ремеша и до финального текстурирования — вы хотите проверить деформацию на топологии, готовой для игры, а не на скульпте.
Три пути. Первый — встроенный риг Blender: добавьте арматуру, привяжите меш с помощью Automatic Weights и позвольте Blender вычислить влияние костей. Это бесплатно и работает для простых гуманоидных или механических ригов. Он с трудом справляется со сложными костюмами или необычными пропорциями. Второй — внешний авто-риггер, например Mixamo или отдельный инструмент: вы загружаете или импортируете меш, и он возвращает готовый скелет. Это быстро для стандартных гуманоидов, но даёт меньше контроля над размещением костей и весами. Третий — AI-риггер, например в Agent Sprite Forge от Neta Studio: он генерирует скелет из меша и берёт на себя веса. Это разумный выбор, когда вы хотите получить ригнутого персонажа в браузере, не покидая инструмент, и вам не нужно вручную настраивать каждую кость.
Правило решения простое. Если персонаж — стандартный гуманоид и он нужен вам уже сегодня, используйте авто-риггер. Если персонаж необычен или вам нужна точная деформация, используйте встроенный риг Blender и рисуйте веса вручную. Если вы строите внутри браузерного конструктора трёхмерных миров и хотите, чтобы персонаж сразу ходил, используйте AI-риггер и примите, что веса вы уточните позже.
Экспорт в .glb без потери UV
Три настройки экспорта тихо отбрасывают работу над UV. Первая — опция экспорта UV. В экспортёре glTF в Blender, в разделе Data > Mesh, есть флажок для UV. Если он выключен, .glb не содержит UV-координат, и каждый материал берёт образец не оттуда. Включите его. Вторая — активная UV-карта. Если у меша несколько UV-слоёв и активный — не тот, который вы разворачивали, экспортёр по умолчанию берёт активный. Назначьте правильный слой активным перед экспортом. Третья — экспорт материалов. Если вы экспортируете без материалов, .glb не содержит ссылок на текстуры, но UV на месте. Проблема обратная: если вы экспортируете с материалами и материал использует текстуру, которая не упакована, .glb ссылается на отсутствующий файл. Используйте File > External Data > Pack Resources перед экспортом.
Настройки, которые сохраняют ваши UV: формат glTF Binary (.glb), Include UVs включено, Include Normals включено, Include Materials включено и сжатие выключено, если вы не используете Draco и не убедились, что оно сохраняет UV-слой. Сжатие Draco может изменить точность, поэтому протестируйте небольшой ассет, прежде чем сжимать целую библиотеку. Для сжатия финального .glb без потери UV используйте инструмент, который работает с бинарным контейнером, а не перекодирует данные меша.
После экспорта повторно импортируйте .glb в свежую сцену Blender и проверьте UV-редактор. Если островки на месте и текстура совпадает, экспорт чистый. Если островки отсутствуют, опция UV была выключена. Если островки на месте, но смещены, активный UV-слой был неверным.
Частые ошибки и их исправление
Это восемь симптомов, связанных с UV, которые встречаются чаще всего, с причиной и исправлением в терминах UV. Ни один из них не является проблемой анимации, даже когда выглядит как она.
| Симптом | Причина | Исправление |
|---|---|---|
| Текстура растянута на изогнутой грани | Развёртка не сохранила площадь; островок слишком мал для кривизны | Добавьте шов вдоль кривой или переключитесь на Angle Based для этого островка |
| Текстура размыта на одной части модели | Плотность текселей на этом островке ниже, чем на остальных | Масштабируйте островок в UV-редакторе, пока плотность не совпадёт с точностью до десяти процентов |
| Две грани показывают одну и ту же деталь текстуры | Перекрывающиеся островки занимают одно и то же место в диапазоне 0–1 | Выберите перекрывающиеся островки в UV-редакторе, раздвиньте их и упакуйте заново |
| Текстура полностью отсутствует на одной грани | UV-координата лежит за пределами квадрата 0–1 | Включите Constrain to Image Bounds или вручную переместите островок внутрь |
| Шов виден как линия поперёк поверхности | Текстура не совпадает по линии разреза | Перенесите шов на скрытую грань или сделайте текстуру бесшовной на границе |
| Smart UV Project создаёт сотни крошечных островков | Порог угла слишком низок для этой геометрии | Поднимите ограничение угла до 66 градусов и упакуйте заново |
| Ремеш удалил UV | Ремеш был выполнен после развёртки | Разверните заново после ремеша; всегда делайте ремеш до развёртки |
| У экспортированного .glb нет текстуры | Экспорт UV был отключён или активный UV-слой был неверным | Включите UV в экспортёре и назначьте правильный слой активным |
Войдите в мир, которому он принадлежит
Спрайт — это персонаж, которому негде стоять. Последний шаг — тот, которого не предлагает больше никто: возьмите только что собранный лист и поместите его в мир, по которому можно пройтись, — маленький остров, планету, дождливый уголок улицы. Каждый мир на этом сайте был создан по одному письменному описанию и опубликован как страница, в которую можно играть.
Назад в конструктор 3D-игр
Все 31 готовых 3D-миров, игр и сцен собраны на одной странице, и в каждый можно играть.