Пайплайн качества: от референса до экспорта без «магии и костылей»
Хорошая 3D-модель начинается раньше моделинга — с реперных референсов и договорённостей о масштабе, сетке именования и целевых платформах. Мы фиксируем единицы измерения (сантиметры или метры) и реальный размер в сцене, чтобы ассеты без скейла ложились в движок «один к одному» и не ломали физику. Референсы — не «красивые картинки», а чертежи, фотографии под ключевые углы, заметки о материалах (металл, диэлектрик, полупрозрачный), типовые дефекты, следы износа. Моделинг ведём от крупных форм к средним и мелким, удерживая целевой полигонаж под платформу (мобайл/VR/PC). Топология — квад-ориентированная с контролируемыми трианглами в малодеформируемых зонах, циклы поддерживают фаски и рёбра, полюса выведены из высококонтрастных участков. Удерживаем одинаковую плотность сетки на соседних деталях, чтобы швы и кривизна не «прыгали» при bake нормалей. UV-развёртка — без перекрытий на канале 0, с сохранённой ориентацией «вверх» где возможно, равномерной плотностью texel density и паддингом под целевую компрессию; острова режем по реальным швам и внутренним граням, чтобы маски износа вели себя естественно. Канал 1 резервируем под lightmap/SH, где швы не пересекаются и паддинг ≥4–16 пикселей в зависимости от резолюции; если движок позволяет, отрисовываем авто-lightmap, но вручную проверяем тени на сложных формах. Материалы — строго PBR-металл/диэлектрик: альбедо без bake света, roughness отвечает за микрошероховатость, metallic — бинарно для металлов, нормали — в MikkTSpace для совпадения тангент-базиса с Unreal/Unity. При бэйке используем cage и одинаковые лучевые настройки для консистентности; high-poly создаём процедурно/скульптом с учётом радиуса фасок, чтобы крошечные детали не ушли в компрессию. Маски AO и curvature — вспомогательные: не красим ими свет, а используем для генерации износа в Substance/Designer. В текстурах держим «реальную» шкалу — крупность царапин и шероховатость соответствуют масштабу объекта, повторяемость тайлов скрываем шумом и ручной дорисовкой. Проверяем ассет в нейтральном HDRI и в вашей целевой гамма-кривой (sRGB/ACES), чтобы не ловить сюрпризы при интеграции. Экспортируем FBX/glTF с осями под движок (Z-up/Y-up), замораживаем трансформации, привязываем pivot в точки логики (двери, колесо, ручка), добавляем «умные» empties/locators для анимаций и snap-точек. Итог — модель, которая выглядит правдоподобно при любом освещении, не требует «подкраски» шейдером и встаёт в сцену без пересборки пайплайна.
Оптимизация под реальное время — это не сокращение качества, а управление бюджетами. Начинаем с целей: количество draw calls, треугольников в кадре, лимиты памяти на текстуры, размер бандла и время загрузки. Объединяем мелкие элементы в атласы, чтобы уменьшить переключения материалов; делим крупные ассеты на логические части для стриминга и LOD-ов. LOD-ы проектируем руками или через decimate с контролем силуэта, карт нормалей и сохранением UV швов; дистанции переключения подбираем по скорости камеры и типу сцены, а не «по привычке». Для прозрачных материалов избегаем «полупрозрачных всё» — включаем альфа-тест где это возможно, разбиваем сложные пластины на opaque+cutout+additive слои, чтобы не утонуть в сортировке. Lightmap’ы подготавливаем осознанно: там, где динамический свет дорог, кладём статический и смешиваем; где нужны контактные тени — добавляем небольшие decal-ы AO вместо глобального «грязнения» альбедо. Нормали держим в MikkTSpace, иначе сопоставление с bake поедет, а «стежки» появятся на границах. Текстурные форматы — по платформам: BC7/BC5/BC1 на ПК/консолях, ASTC для мобильных (выбираем блок 6×6/8×8 под баланс качества/веса), ETC2 — как компромисс для широкой поддержки; нормали отдельно в BC5/ETC2 RG, чтобы не убивать детализацию. Маски упаковываем в каналы (R — metallic, G — roughness, B — AO, A — эмиссия/opacity), но не жертвуем читабельностью где это мешает пайплайну. Для уровней детализации в шейдере используем dither-fade вместо резкого щелчка, а для дальних планов — impostor/flipbook на плоских билбордах, когда это оправдано. Важно помнить о навигации и коллизиях: физические меши упрощаем до примитивов, чтобы просчёт не «съедал» CPU, но не допускаем «проходов сквозь стены». В AR/VR особое внимание уделяем стабильности 72–120 FPS и минимизации shimmering: добавляем мягкий bias на нормалях, сглаживаем резкие контуры, проверяем гамму и мультисэмплинг. Пост-процесс — не спасательный круг: ассет должен выглядеть честно без «толстой» кинематографической обработки; bloom, vignette и grain — декоративны и не обязаны скрывать шум. Итог оптимизации — не «бедная» сцена, а сцена, где каждый полигон и килобайт работают на читаемость, производительность и стабильный UX.
Производство на масштабе — это дисциплина версий, лицензий и проверки качества. Храним исходники в Git LFS/Perforce: отдельные папки для .blend/.max/.spp/.sbs, экспортов и превью; именование — по шаблону <категория>_<набор>_<вариант>_
Пакеты ассетов
Архитектурные наборы
Фасады, интерьер, пропсы и материалы с консистентной шкалой и texel density. Готовы к lightmap.
Игровые пропсы
Gameready наборы с LOD, коллизиями и мастер-материалом. Экспорт под Unreal/Unity.
Скан-материалы
Фотограмметрия, PBR-карты, KTX2/ASTC пресеты и тайлинговые версии для больших площадей.
AR/VR лёгкие
Супер-лёгкие ассеты для мобильных и гарнитур: impostor, упакованные маски и строгие бюджеты.
FAQ
В каких форматах доступны модели?
FBX и glTF/GLB. По запросу — исходники Blender/Substance и пакеты для UE/Unity.
Какой шейдинг и нормали?
PBR металл/рутнесс, нормали в MikkTSpace, текстуры упакованы по каналам, есть lightmap-канал.
Можно ли использовать коммерчески?
Да, если иное не указано в лицензии набора. Указываем права, ограничения и происхождение исходников.