RizomUV

RizomUV — выносливый инструмент UV-развёртки: умная авто-развёртка, упаковка островков и контроль texel density превращают мучительный этап в рутину.

Уровень: начальный 17 разделов ⏱ 2–3 часа

1. Зачем нужны UV

UV-координаты — это способ «натянуть» 2D-текстуру на 3D-модель. Каждая вершина получает пару (U, V) на плоскости текстуры. Правильная развёртка значит: без растяжения, без наложенных кусков, с одинаковой плотностью пикселей по всей модели.

Плохая развёртка ломает текстуры: рисунок «плывёт», швы видно, нормали и AO запекаются с артефактами.

2. Что такое RizomUV

RizomUV — standalone-приложение (есть и плагины) для развёртки с выдаче скоростью и «безбилетными» алгоритмами упаковки. Поддерживаются форматы OBJ, FBX, Alembic, а также сохранение UV обратно в тот же файл, чтобы продолжить в Maya/Blender.

Версии: RizomUV VS (для CAD/инженерных моделей) и RizomUV RS (Real Space, для игр).

3. Интерфейс

Пространства: W — переключение 3D/2D режима окна.

4. Импорт модели

File → Load (OBJ/FBX). При импорте отметь:

Работай в реальной шкале (Scale 1.0, сцена в сантиметрах), тогда плотность текстур будет верной.

5. Разрезы (Seams) и авторазвёртка

Сетку нужно разрезать по «невидимым» швам:

  1. Выдели Edge Loop (инструмент выделения на рёбрах, двойной клик по контуру).
  2. Ctrl+ЛКМ — добавить в выделение, Seams: «Create seams» (иконка ножниц) на границу.
  3. Нажми Unwrap (кнопка «Unwrap» / Ctrl+W): Rizom развернёт куски по швам.
Геометрия сглаженных деталей (ручки, шлемы) требует швов по «защитным» ребрам: под мышкой рюкзака, за ухом — там, где человек не заметит стык текстуры.

6. Островки: двигай и масштабируй

Островок (Island) — связный кусок развёртки. Настройка островков:

7. Packing (упаковка)

После развёртки — упаковка в квадрат 0–1: меню Pack. Параметры:

Палитра «Padding» задаёт отступы в абсолютных пикселях текстуры — при 4096 нужны бОльшие значения, чем при 1024.

8. Texel Density — ключ к единой чёткости

Texel density — количество пикселей на единицу длины модели (например, 10 px/cm). Островки с разной плотностью дают разное разрешение текстур на одном объекте.

Задай плотность исходя из ближайшего обзора: персонажу — 10-20 px/cm, пропу кузова — 2-5 px/cm. Не мульчируй плотность по всей сцене единообразно.

9. Проверка развёртки

Визуальная проверка «шахматной клеткой» (Checkers) показывает растяжение: квадраты должны быть квадратами по всей сетке.

Инструмент UV Overlaps подсветит наложенные островки (для непрозрачных объектов быть не должно).

10. Экспорт и продолжение работы

File → Export (FBX/OBJ) — Rizom бережёт UV текущих и хранит всё в исходных файлах:

Для игр: не оставляй островков вне квадрата, проверь Occlusion для UV островков (упорядочение по X/Y).

Перед экспортом в Unity/Unreal задай отступы (Padding) хотя бы 4px в 1024 — иначе артефакты на швах при mipmap-фильтрации.

11. UV в игровых движках

После экспорта из RizomUV развёртка попадает в движок — Unity или Unreal Engine — и от неё зависит качество текстур в реальном времени. Движки предъявляют к UV строгие требования.

// Unity: импорт модели с UV
[MenuItem("Tools/Check UV Overlap")]
static void CheckUVOverlap() {
    Renderer r = Selection.activeGameObject.GetComponent<Renderer>();
    Mesh m = r.GetComponent<MeshFilter>().sharedMesh;
    Vector2[] uv = m.uv;
    Debug.Log($"UV точек: {uv.Length}");
}
В RizomUV включайте проверку UV Overlaps перед экспортом: наложенные островки ведут к «мигающим» текстурам в игре.
Для тайловой (tileable) текстуры в движках используйте 32-битные UV с координатами больше 1.0, а обычным ассетам хватает 16-битных.

12. UDIM и несколько тайлов

Сложные скульпты и крупные объекты часто не помещаются в один тайл текстуры. UDIM — это система из нескольких текстурных тайлов: островки нумеруются 1001, 1002, 1011 и так далее, а каждая цифра — отдельный PNG.

File → Load (модель с UV)
Texture Map Size: 4096
UDIM: 1001 | 1002 | 1011 | 1012
→ Export Textures: .../hero_1001.png, hero_1002.png
Не создавайте UDIM на объектах, которые в кадре занимают пару десятков пикселей: разрешение тратится впустую. UDIM оправдан у персонажей, автомобилей и крупной архитектуры.

13. Автоматизация и пресеты

RizomUV поддерживает пакетный режим и сохранение пресетов: однажды настроенный пайплайн разворачивает десятки моделей одинаково.

// Пример пакетного скрипта через RizomUV Python API
import RizomUV as rz

for file in ["part_a.obj", "part_b.obj", "part_c.obj"]:
    rz.file.load(file)
    rz.unwrap.unwrap(type=rz.UNWRAP_QUICK)
    rz.texture.uv_tile_mode = rz.UDIM_2X2
    rz.pack.pack()
    rz.file.save(file.replace(".obj", "_uv.obj"))
Что настраиваетсяГде сохраняется
пресеты упаковки и развёрткипалитра Pack / Unwrap
горячие клавишиPreferences → Hotkeys
тексель-плотностьTexel Density (Unity/Unreal пресеты)
скрипты автоматизацииReadme/папка с .py файлами
Модели с одинаковой рендером — например, детали оружия — разворачивайте единым пресетом, чтобы текстуры ложились согласованно во всей коллекции.

14. UV-штабелирование

Stacking — укладка одинаковых островков один на один с точным совпадением координат. Так детали одного типа (болты, патроны, оконные стёкла) используют общий участок текстуры: память экономится, а плотность пикселей сохраняется.

1. Выдели исходный островок (Select Island)
2. Ctrl+D — продублировать с точным совпадением UV
3. Stack Islands: выровнять выделенные островки по границам
4. Проверка: UV Overlaps → Expected (намеренный стек)
Для симметричных объектов (крылья самолёта, части корпуса) штабелирование часто выгоднее зеркалирования: текстура остаётся читаемой в обоих направлениях.
Штабелируют только одинаковую топологию. Островки с разным количеством полигонов при стэке разъезжаются, а на стыках появляются артефакты запекания.

15. Подготовка UV под запекание

Перед запеканием карт (AO, normal, curvature, ID) в Substance Painter или Marmoset UV должны быть «чистыми»: без перевёрнутых треугольников, с отступами и одинаковой плотностью.

Texel → Set Texel Density (например, 20 px/cm)
UV Check → Flip (найти перевёрнутые)
Padding → 4 px (1024) / 8 px (2048)
Высокополигональную модель запекайте с той же UV-раскладкой, что и низкополигональную: иначе карты сместятся относительно геометрии.
Для ID-карты достаточно 2–4px отступов, для AO — 4–8px: карты «дышат» в отступы, и чем выше разрешение текстуры, тем больше нужен padding.

16. Перенос UV между сетками

При ретопологии UV старой модели можно перенести на новую сетку — RizomUV проектирует координаты со старой геометрии на новую. Это спасает часы ручной развёртки.

1. Загрузи обе модели в сцену
2. Выбери целевую сетку
3. Mesh → Transfer UVs from source
4. Выбери источник и режим проекции
5. Проверь островки и отступы после переноса
Если после переноса островки «разъехались», повторите авторазвёртку Unwrap и подгоните отдельные островки вручную — перенос задаёт стартовую раскладку, а не финал.
Не переносите UV между моделями с разным масштабом: texel density переносится в единицах сцены, и плотность «поедет» при разнице в 2 раза и больше.

17. Частые ошибки и чек-лист перед экспортом

Девять из десяти проблем с текстурами в движке — это не «кривой движок», а развёртка, которую не проверили до экспорта. Ниже — ошибки, которые стоят дороже всего, и готовый чек-лист.

ОшибкаСимптомПроверка
перевёрнутые треугольникитёмные артефакты AO и normalUV Check → Flip
островки вне квадрататекстура «тянется» за границейViewport → Show borders
нет отступовдырявые швы при mipmapPadding ≥ 4 px
разная texel densityнеравная чёткость деталейTexel Density compare
случайные перекрытия«плавающие» пятна в игреUV Overlaps
// финальный чек-лист перед File → Export
☐ Flip-ошибок нет            ☐ островки в квадрате 0–1
☐ Padding выставлен          ☐ texel density единая
☐ перекрытия ожидаемые       ☐ швы скрыты в деталях
☐ UV-set сохранён в файле    ☐ формат: FBX/OBJ с UV
Экспорт в OBJ теряет настройки упаковки, но сохраняет координаты. Перед сдачей модели сверьте UV на «шахматке» в приёмном движке — и только после этого готовьте текстуры.
Полный цикл «скульпт → развёртка → текстуры → рендер» разобран в курсах ZBrush, Substance 3D Painter и Marmoset Toolbag.

18. Trim Sheet: архитектурные киты

Для повторяющейся геометрии (здания, дороги, трубы) не нужно тратить UV на уникальные карты каждому объекту. Trim sheet — общий лист текстур, где по строкам лежат повторяемые фрагменты: углы, бордюры, панели, металл с потертостями.

01 ░░░░░░░ стекло грязное
02 ░░░░░░░ панели фасада
03 ░░░░░░░ бордюр/цоколь
04 ░░░░░░░ металл листовой

Все объекты укладываются в одни и те же «киты», поэтому общая площадь UV ничтожна — на сцене из тысячи зданий текстурная память почти не растёт. В RizomUV развёртка сводится к выравниванию островка по ячейке seta: задаёте размер ряда и прижимаете островки к сетке.

ПлюсМинус
минимальная память на большие сценыобъекты делят материал
быстрая повторная укладкабезличные текстуры
Размечайте ряды trim sheet на степень TILING — паттерн можно тайлится по оси, а угол остаётся уголом.
Не укладывайте два разных по масштабу кита в одну ячейку: грязная панель и чистый логотип на соседних рядах при пакинге не должны накладываться.

19. Планарная и камерная проекция

Классическая распаковка по рёбрам не всегда оптимальна. Planar map проецирует объект на плоскость по выбранной оси — идеально для табличек, логотипов, фасадов и плоских деталей hard-surface.

Планарная проекция по оси Z:
- выделяем грани объекта
- Planar Map → Axis Z
- островок ложится «сверху», без швов по бокам

Camera map проецирует по позиции камеры — удобно для листовых развёрток и скетчей: нарисованный эскиз автоматически ложится на геометрию так, как виден с камеры. После проекции не забудьте выровнять и запаковать островки, иначе пиксели исказятся на гранях, отвёрнутых от оси.

Перед Planar отключите чувствительные рёбра релаксации: проекция «сверху» не любит швов, поставленных поперёк плоскости — они вытянут островок.

20. Горячие клавиши и ускорение работы

Качество развёртки решает не только пакинг, но и скорость. RizomUV позволяет настроить почти всё: Edit → Preferences → Hotkeys поддерживает переназначение и сохранение схем в файл.

ДействиеКлавиша по умолчанию
показать изоляцию объектаO
плавное/жёсткое перемещение островкаCtrl+ЛКМ / Shift+ЛКМ
cut по рёбрамC
stable unfoldU

Хорошая практика — собрать личный набор: «Cut по селектированным рёбрам», «Straighten», «Pack» — одной комбинацией без переключения режимов. Экспортируйте схему клавиш в папку проекта, чтобы она попадала в репозиторий вместе с ассетами.

Сохранить схему: Edit → Preferences → Hotkeys → Save
Загрузить на другой машине: Load → файл .rfmap
Начните с пяти команд, которые повторяете чаще всего, — так привыкание к новому инструменту пройдёт быстрее, чем заучивание всего списка.

21. UV для мобильных игр: память и пакинг

На мобильных устройствах каждый пиксель текстуры стоит драгоценной памяти. UV-развёртка здесь — вопрос бюджета: чем меньше суммарная площадь островков, тем меньше занимаемый видеопамятью размер атласа.

Pack options →
  Allow rotation: on (поворот островка экономит до 30% площади)
  Spacing: 2 px (зазор под фильтрацию)
  Sort by: дистанция до камеры
Ровный пакинг без зазоров режет края текстур: на мобильных фильтрация линейная, и соседние островки «светятся». Зазор 2–4 px — не роскошь, а необходимость.
Следите за тест-рендером чекеров из раздела 6: если на расстоянии пиксельная каша — снижайте плотность для дальних LOD, а не поднимайте текстуру.

Что дальше

UV-развёртка идёт в связке: из ZBrush/Blender модель, через RizomUV в Substance 3D Painter, финальный рендер — в Marmoset Toolbag.

← Вернуться к курсам