Что такое UV‑развёртка — и почему она важна в 3D‑моделировании
Объясняем терминологию и базовые принципы навыка, важного для любого моделлера.
Иллюстрация: Оля Ежак для Skillbox Media
Одним из важнейших навыков в 3D-моделировании считается умение правильно перенести объект в UV-пространство. Иными словами — сделать UV-развёртку, от которой зависит итоговое качество текстур. Начинающим моделлерам важно понять принципы этого преобразования и взять на заметку несколько рекомендаций.
Общее определение
UV-развёртка — проецирование изображения на грани 3D-модели. От её расположения, вращения, масштабирования и формы зависит итоговый вид текстуры. Чтобы понять принцип развёртки, достаточно представить сборку моделей из бумаги, но в обратном порядке — объект разрезают и разворачивают на плоские детали.
Что означает UV
В 2D-играх все ассеты представлены в виде спрайтов — плоских изображений. И действие в таких играх происходит в одной плоскости по осям X и Y. В проектах с 3D-графикой появляется дополнительная ось Z, благодаря которой мы можем видеть трёхмерные объекты и их меши. Поверхность объектов зависит от спроецированного на них изображения — текстурной карты или просто текстуры. Сама по себе текстура тоже плоская, как и спрайт, но её координаты соответствуют не точкам в пространстве, а расположению на гранях модели. Во избежание путаницы между 2D-координатами текстуры и 3D-сценой, обозначения осей X и Y на текстурной карте заменили на оси U (по горизонтали) и V (по вертикали).
Читайте также:
UV-развёртка и текстурирование
Подход к UV-развёртке зависит от вида текстурирования объектов.
При тайловом текстурировании на всё UV-пространство применяют одну непрерывную текстуру — тайл. Этот способ подходит для текстурирования больших построек (стен, зданий, мостов), ландшафта и прочих элементов окружения. Тайлы обеспечивают хорошую детализацию объекта на близком расстоянии за счёт удобной настройки плотности текселей.
Плотность текселей можно проверить, применив на объект специальную текстуру, которая настраивается следующим образом:
- Autodesk Maya: в настройках редактора UV-текстур (UV Toolkit);
- 3ds Max: с помощью скрипт Texel Density Tool;
- Blender: через аддон Texel Density Checker или подключение Цветной решётки (Color Grid) через шейдеры.
Примечание
У этого подхода есть и обратная сторона: с большого расстояния повторяющийся узор тайлов становится слишком заметным. Но в программах для 3D-моделирования и игровых движках существуют различные инструменты, которые помогают устранить этот недостаток за счёт процедурного смешивания текстур.
В отличие от тайлов текстуры для уникальных моделей (персонажей, транспорта, пропсов и так далее) не выходят за рамки пространства UV-координат, поэтому создание оригинальной развёртки требует соблюдения определённых стандартов.
Для чего нужны швы в UV-развёртке
Швы «разрезают» меш на части: на сегментах модели выделяют рёбра и отмечают границы предполагаемых срезов.
После разметки швов и дальнейшего проецирования в UV-пространстве появляется «выкройка», состоящая из деталей, которые в рамках 3D-моделирования называют островами или шеллами. Изображение на этих участках будет спроецировано на соответствующие части меша. Чем сложнее геометрия, тем тщательней нужно продумывать разбивку модели на отдельные сегменты с помощью швов.
На месте шва текстура прерывается. Это особенно заметно, когда на всю модель применяют одно изображение.
При оригинальном текстурировании на поверхности модели изображение также может прерываться. В основном это происходит из-за неправильного запекания во время переноса свойств 3D-геометрии в формат текстурных карт.
В реалистичной графике художники стараются свести к минимуму подобные искажения, иначе объект будет выглядеть неестественно.
Как отмечать швы на модели
Навык правильной разметки приходит с опытом. Во многом помогает анализ структуры модели и последующее деление её на логические части. На практике принято отмечать срезы на рёбрах с острыми и прямыми углами, которые создают жёсткий переход между гранями. Также швы стараются отмечать на рёбрах меша, которые будут вне зоны видимости зрителя.
Понять принцип «разрезания» моделей поможет наблюдение за окружающим миром. Если присмотреться к предметам в реальной жизни, выяснится, что они тоже состоят из многих частей. Фактура поверхностей часто прерывается в определённых местах: ножки стола прикручены к столешнице, одежда сшита из нескольких кусков ткани, а внешний корпус автомобиля часто состоит из разных материалов, например металла и пластика. Этими же принципами можно руководствоваться при разметке швов на аналогичных трёхмерных моделях.
Можно ли использовать автоматическую UV-развёртку
Генерация развёртки есть во всех программах для 3D-моделирования. Такой способ вполне подойдёт для создания объекта окружения с примитивными формами и тайловым текстурированием.
Правда, алгоритмы подобных инструментов пока не справляются со сложной геометрией: если воспользоваться их помощью, UV-пространство заполнится множеством шеллов, вырубленных в хаотичном порядке. Иногда они и вовсе накладываются друг на друга слоями. Из-за такой развёртки на поверхности меша могут образоваться видимые дефекты и растяжки из-за лишних швов и деформированных сегментов. К тому же большое количество мелких островов образует лишние пустоты на UV-карте, которых в 3D-моделировании стараются избегать.
На что следует обратить внимание при создании UV-развёртки
- Определитесь с разрешением текстур, исходя из значимости модели в будущем проекте. Условному подсвечнику вряд ли потребуются текстуры в 4K. Развёртку более важных моделей — например, действующих персонажей — лучше разбивать на несколько отдельных UV-пространств. Разделение по логическим сегментам и материалам упростит дальнейшую работу художнику. К тому же такой подход поможет нормализовать плотность текселей на оригинальных развёртках и избежать размытия отдельных деталей.
- Старайтесь максимально заполнить UV-пространство. Если остаётся много пустых участков — увеличьте размер островов, а затем ещё раз перепакуйте развёртку. Если свободного пространства всё ещё много — повторите операции. Заполнение очень важно для дальнейшей оптимизации, особенно в контексте игр — в них обработка данных происходит в реальном времени. Представим, что для модели используется текстура с 4K разрешением и в процентном соотношении UV-шеллы занимают всего 55–60% от общего пространства. Выходит, что остальные 40–45% области будут нагружать память видеокарты впустую.
Самый приемлемый вариант — оптимизировать развёртку в сторонних программах. Например, в RizomUV — усовершенствованной версии некогда популярной Unfold3D. Подобный софт поможет быстро откорректировать размер отдельных островов или изменить их форму при необходимости — например, выпрямить шеллы с арочной структурой. Оптимальное значение покрытия варьируется в пределах 70–80%. В зависимости от специфики геометрии процент может быть ниже.
Примечание
Максимальное заполнение UV-пространства уходит на второй план, если речь идёт об объектах, рендеринг которых происходит не в реальном времени. Например, подход к UV-развёртке в производстве анимации и фильмов отличается от производства игр: в погоне за детализацией и высокой плотностью текселей развёртку моделей разбивают на множество сегментов с максимально возможным размером шеллов. Но в любом случае правильная упаковка и распределение шеллов в UV-пространстве — негласное правило хорошего тона в 3D-моделировании и показатель профессионализма художника.
- Избегайте растяжек в развёртке и следите за равномерным значением плотности текселей на каждом острове. В противном случае возможны деформированные или растянутые текстуры на отдельных гранях мешей. Отследить подобные недочёты помогает упомянутая выше текстура для проверки текселей или шахматная чёрно-белая текстура, которую можно подключить во всех программах для 3D-моделирования. При правильной развёртке все клетки будут одного размера без растяжек. В противном случае стоит обратить внимание на структуру островов: возможно, в каких-то частях не хватает швов.
Полезные ссылки с информацией по подключению шахматной текстуры (Checker) в основных программах:
- в Autodesk Maya;
- в 3ds Max;
- в Blender — «UV-решётка» (UV-Grid) через шейдеры по аналогии с подключением «Цветной решётки» (Color Grid), упомянутой выше.
Примечание
Иногда размер островов намеренно уменьшают, тем самым понижая плотность текселей на определённом участке меша. Такой приём используют, когда у модели есть элементы, не требующие высокой детализации, так как зритель их попросту не увидит.
- Следите за тем, чтобы шеллы не перекрывали друг друга в UV-пространстве. В противном случае на модели появятся артефакты.
Примечание
Если в объекте есть меши с одинаковой структурой — например, ножки от стола, — можно применить так называемый оверлап, то есть наложение одинаковых элементов друг на друга. Такой метод не подходит для запекания текстур.
- Между UV-шеллами должны быть промежутки. Во время рендеринга сцены в игровом движке разрешение текстур уменьшается в зависимости от производительности или уровня детализации. Этот процесс называется MIP-мэппинг. Если шеллы расположены в UV-пространстве вплотную друг к другу — на низкой детализации на стыке участков образуются очень заметные швы.
Чтобы такого не произошло, при размещении оставляют место для паддинга. Под этим термином подразумевается отступ от границы UV-острова (не путать с общим расстоянием между UV-островами), который продлевает текстурное пространство на определённое количество пикселей. Ширина паддинга зависит от разрешения карты:
- 256 — 2 пикселя;
- 512 — 4 пикселя;
- 1024 — 8 пикселей;
- 2048 — 16 пикселей;
- 4096 — 32 пикселя.
Примечание
Большинство программ автоматически проводит эти расчёты, исходя из заданных размеров текстуры. Но бывают и исключения: например, в Blender нужно ввести значение вручную. В настоящий момент для текстурирования игровых ассетов используют паддинг c размытыми границами текстурного пространства шеллов.
Вот какой совет по поводу UV-развёртки дал Кирилл Резниченко, CEO Rainstyle Games:
«Начинающие пользователи могут столкнуться с тем, что инструменты для UV-развёртки в таких известных программах, как 3ds Max и Maya, будут достаточно сложны для понимания. Это не значит, что они плохие, просто создание развёртки в них займёт больше времени. Поэтому не зацикливайтесь на использовании одного софта. За 15 лет работы с 3D я выработал для себя определённый алгоритм в работе с UV. Лично мне удобнее делать модель в Maya, импортировать её в RizomUV, обозначить швы, а уже непосредственно упаковку закончить в Houdini, подключив нод UV Layout. Этот инструмент эффективно распределяет острова на развёртке. Лично мне он нравится больше, чем другие аналогичные решения. При этом весь функционал Houdini знать необязательно.
Подходов к развёртке может быть много. Даже автоматическое преобразование вполне подойдёт для создания объектов дальнего плана. Всё зависит от конкретных задач и потребностей в экономии ресурсов, которая ввиду технологического скачка видеокарт сейчас нужна далеко не всем. Отмечу, что в некоторых проектах вопрос оптимизации может оставаться актуальным, и моделлерам придётся следовать чёткому регламенту заказчика, в том числе и в отношении UV-развёртки».
Итог
О UV-развёртке стоит задуматься уже на этапе создания модели. И хотя этот процесс больше схож с конструированием, нежели с творчеством, он считается одним из главных показателей навыков 3D-моделирования. Именно поэтому потенциальные работодатели часто обращают внимание на приложенную UV-развёртку к объектам в портфолио моделлера. Чем качественнее выполнено преобразование — тем лучше в итоге будут выглядеть текстуры после процесса запекания.
Читайте также: