RizomUV
RizomUV — выносливый инструмент UV-развёртки: умная авто-развёртка, упаковка островков и контроль texel density превращают мучительный этап в рутину.
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. Интерфейс
- Viewport — вид модели в 3D (справа) и UV-плоскость (слева).
- Top toolbar — инструменты выделения, развёртки, Scale/Place.
- Palette (справа) — параметры упаковки и фильтра выделения.
Пространства: W — переключение 3D/2D режима окна.
4. Импорт модели
File → Load (OBJ/FBX). При импорте отметь:
- «Import UV sets» — сохранить существующие UV (иначе они поедут).
- Нормали: для запекания в Painter лучше нормали «smoothing». Отрицательные координаты UV не страшны — Rizom укладывает сам.
Работай в реальной шкале (Scale 1.0, сцена в сантиметрах), тогда плотность текстур будет верной.
5. Разрезы (Seams) и авторазвёртка
Сетку нужно разрезать по «невидимым» швам:
- Выдели Edge Loop (инструмент выделения на рёбрах, двойной клик по контуру).
- Ctrl+ЛКМ — добавить в выделение,
Seams: «Create seams» (иконка ножниц) на границу. - Нажми Unwrap (кнопка «Unwrap» / Ctrl+W): Rizom развернёт куски по швам.
6. Островки: двигай и масштабируй
Островок (Island) — связный кусок развёртки. Настройка островков:
- Select Island — щелчок выделяет весь островок.
- Поворот —
R, масштаб —T, перемещение —W. - Клавиши
Y/X— поворот на 90°.
7. Packing (упаковка)
После развёртки — упаковка в квадрат 0–1: меню Pack. Параметры:
- Edge Padding — отступ между островками (в пикселях к 2048: 2-8px).
- Texel Density — целевая плотность для всех островков.
- Rotation — разрешить повороты (уменьшает потери места).
8. Texel Density — ключ к единой чёткости
Texel density — количество пикселей на единицу длины модели (например, 10 px/cm). Островки с разной плотностью дают разное разрешение текстур на одном объекте.
- Меню Texel → задай желаемую плотность.
- Scale Islands — привести все островки к общей плотности.
9. Проверка развёртки
Визуальная проверка «шахматной клеткой» (Checkers) показывает растяжение: квадраты должны быть квадратами по всей сетке.
- Включи отображение текстуры с Checker в Viewport Settings.
- Красным подсвечиваются перевёрнутые (inverted) треугольники — их разворачивают заново/удаляют.
Инструмент UV Overlaps подсветит наложенные островки (для непрозрачных объектов быть не должно).
10. Экспорт и продолжение работы
File → Export (FBX/OBJ) — Rizom бережёт UV текущих и хранит всё в исходных файлах:
- Импорт в Blender/Maya тем же FBX — UV уже на месте.
- Перевалка в Substance 3D Painter — загрузка по FBX с UV.
Для игр: не оставляй островков вне квадрата, проверь Occlusion для UV островков (упорядочение по X/Y).
11. UV в игровых движках
После экспорта из RizomUV развёртка попадает в движок — Unity или Unreal Engine — и от неё зависит качество текстур в реальном времени. Движки предъявляют к UV строгие требования.
- островки должны лежать в квадрате 0–1 (или в пределах выбранного тайла);
- нужны отступы (padding) 2–8 px в 1024–2048, чтобы mipmap-фильтрация не «проливала» соседние островки;
- перевёрнутые (inverted) треугольники в Unreal/Unity пекутся с артефактами AO и нормалей.
// 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}");
}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- Rizom UV умеет раскладывать островки по тайлам UDIM автоматически;
- каждый тайл — полноценная текстура того же разрешения;
- в Substance Painter 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 — укладка одинаковых островков один на один с точным совпадением координат. Так детали одного типа (болты, патроны, оконные стёкла) используют общий участок текстуры: память экономится, а плотность пикселей сохраняется.
- укладываются только зеркально-одинаковые или идентичные детали — иначе появятся разрывы текстуры;
- перед штабелированием сравните количество граней и топологию островков;
- после укладки включите UV Overlaps: совпавшие островки — это ожидаемое перекрытие, а случайное — ошибка развёртки.
1. Выдели исходный островок (Select Island)
2. Ctrl+D — продублировать с точным совпадением UV
3. Stack Islands: выровнять выделенные островки по границам
4. Проверка: UV Overlaps → Expected (намеренный стек)15. Подготовка UV под запекание
Перед запеканием карт (AO, normal, curvature, ID) в Substance Painter или Marmoset UV должны быть «чистыми»: без перевёрнутых треугольников, с отступами и одинаковой плотностью.
- Отступы (Padding): минимум 4 px на 1024 — иначе соседние островки «просвечивают» в AO;
- Ориентация: нормали должны смотреть в одну сторону — проверьте UV Check и разверните инвертированные треугольники;
- Texel density: задайте единую плотность для всей модели, чтобы карты оказались одинаково чёткими;
- скройте швы в незаметных местах, чтобы normal-карта не выдавала стыки.
Texel → Set Texel Density (например, 20 px/cm)
UV Check → Flip (найти перевёрнутые)
Padding → 4 px (1024) / 8 px (2048)16. Перенос UV между сетками
При ретопологии UV старой модели можно перенести на новую сетку — RizomUV проектирует координаты со старой геометрии на новую. Это спасает часы ручной развёртки.
- Transfer UVs копирует островки с исходной модели на целевую по совпадению вершин и граней;
- для полностью другой топологии сработает проекция по нормалям: каждая вершина новой сетки получает UV ближайшей точки старой;
- после переноса проверьте плотность: увеличенная детализация на краях даёт растяжение.
1. Загрузи обе модели в сцену
2. Выбери целевую сетку
3. Mesh → Transfer UVs from source
4. Выбери источник и режим проекции
5. Проверь островки и отступы после переноса17. Частые ошибки и чек-лист перед экспортом
Девять из десяти проблем с текстурами в движке — это не «кривой движок», а развёртка, которую не проверили до экспорта. Ниже — ошибки, которые стоят дороже всего, и готовый чек-лист.
| Ошибка | Симптом | Проверка |
|---|---|---|
| перевёрнутые треугольники | тёмные артефакты AO и normal | UV Check → Flip |
| островки вне квадрата | текстура «тянется» за границей | Viewport → Show borders |
| нет отступов | дырявые швы при mipmap | Padding ≥ 4 px |
| разная texel density | неравная чёткость деталей | Texel Density compare |
| случайные перекрытия | «плавающие» пятна в игре | UV Overlaps |
// финальный чек-лист перед File → Export
☐ Flip-ошибок нет ☐ островки в квадрате 0–1
☐ Padding выставлен ☐ texel density единая
☐ перекрытия ожидаемые ☐ швы скрыты в деталях
☐ UV-set сохранён в файле ☐ формат: FBX/OBJ с UV18. Trim Sheet: архитектурные киты
Для повторяющейся геометрии (здания, дороги, трубы) не нужно тратить UV на уникальные карты каждому объекту. Trim sheet — общий лист текстур, где по строкам лежат повторяемые фрагменты: углы, бордюры, панели, металл с потертостями.
01 ░░░░░░░ стекло грязное
02 ░░░░░░░ панели фасада
03 ░░░░░░░ бордюр/цоколь
04 ░░░░░░░ металл листовойВсе объекты укладываются в одни и те же «киты», поэтому общая площадь UV ничтожна — на сцене из тысячи зданий текстурная память почти не растёт. В RizomUV развёртка сводится к выравниванию островка по ячейке seta: задаёте размер ряда и прижимаете островки к сетке.
| Плюс | Минус |
|---|---|
| минимальная память на большие сцены | объекты делят материал |
| быстрая повторная укладка | безличные текстуры |
19. Планарная и камерная проекция
Классическая распаковка по рёбрам не всегда оптимальна. Planar map проецирует объект на плоскость по выбранной оси — идеально для табличек, логотипов, фасадов и плоских деталей hard-surface.
Планарная проекция по оси Z:
- выделяем грани объекта
- Planar Map → Axis Z
- островок ложится «сверху», без швов по бокамCamera map проецирует по позиции камеры — удобно для листовых развёрток и скетчей: нарисованный эскиз автоматически ложится на геометрию так, как виден с камеры. После проекции не забудьте выровнять и запаковать островки, иначе пиксели исказятся на гранях, отвёрнутых от оси.
- Planar — плоскости, знаки, грани по осям;
- Camera — перенос нарисованного эскиза в UV;
- Combine — проекции с разных осей на один объект (мягкая укладка игрушечных «кубиков»).
20. Горячие клавиши и ускорение работы
Качество развёртки решает не только пакинг, но и скорость. RizomUV позволяет настроить почти всё: Edit → Preferences → Hotkeys поддерживает переназначение и сохранение схем в файл.
| Действие | Клавиша по умолчанию |
|---|---|
| показать изоляцию объекта | O |
| плавное/жёсткое перемещение островка | Ctrl+ЛКМ / Shift+ЛКМ |
| cut по рёбрам | C |
| stable unfold | U |
Хорошая практика — собрать личный набор: «Cut по селектированным рёбрам», «Straighten», «Pack» — одной комбинацией без переключения режимов. Экспортируйте схему клавиш в папку проекта, чтобы она попадала в репозиторий вместе с ассетами.
Сохранить схему: Edit → Preferences → Hotkeys → Save
Загрузить на другой машине: Load → файл .rfmap21. UV для мобильных игр: память и пакинг
На мобильных устройствах каждый пиксель текстуры стоит драгоценной памяти. UV-развёртка здесь — вопрос бюджета: чем меньше суммарная площадь островков, тем меньше занимаемый видеопамятью размер атласа.
- не раздувайте атлас ради мелких деталей — бюджет памяти важнее идеальной детализации;
- используйте 16-битные координаты UV (half float), чтобы экономить память вершин;
- пакуйте в степи POW2 (512/1024/2048) — атлас обязан быть степенью двойки для сжатия и фильтрации;
- у дальних LOD снижайте плотность: низкополигональные дубликаты не требуют той же texel density.
Pack options →
Allow rotation: on (поворот островка экономит до 30% площади)
Spacing: 2 px (зазор под фильтрацию)
Sort by: дистанция до камерыЧто дальше
UV-развёртка идёт в связке: из ZBrush/Blender модель, через RizomUV в Substance 3D Painter, финальный рендер — в Marmoset Toolbag.