Оптимизация 3D-моделей для AR (LOD, текстуры, полигонаж)

3D-художник сдал модель кресла — 1.2 миллиона полигонов, текстуры 8192×8192 PNG. В Cinema 4D рендер выглядит отлично. В AR на iPhone — 18 FPS и перегрев за 3 минуты. Мы сталкиваемся с такими кейсами постоянно. Наш опыт показывает: проблема не в приложении и не в ARKit — модель не подготовлена для мо

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Оптимизация 3D-моделей для AR (LOD, текстуры, полигонаж)
Средний
~2-3 дня

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    894
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    597

3D-художник сдал модель кресла — 1.2 миллиона полигонов, текстуры 8192×8192 PNG. В Cinema 4D рендер выглядит отлично. В AR на iPhone — 18 FPS и перегрев за 3 минуты. Мы сталкиваемся с такими кейсами постоянно. Наш опыт показывает: проблема не в приложении и не в ARKit — модель не подготовлена для мобильного GPU. Такая ситуация ведёт к срыву демонстрации клиенту и потере времени. Каждый второй проект по AR-визуализации сталкивается с этим.

Оптимизация 3D-моделей для AR — задача, которая требует понимания архитектуры мобильных GPU. Мы решаем её комплексно: снижаем полигонаж, сжимаем текстуры, настраиваем LOD. Результат — стабильные 60 FPS на устройствах. Это позволяет показывать AR-контент без лагов и перегрева. Клиенты экономят на каждом проекте благодаря снижению времени загрузки и расходов на хранение.

Почему полигонаж важен для AR?

На экране телефона расстояние до AR-объекта — 0.5–3 метра. На этом расстоянии детализация выше 100–150K полигонов визуально неотличима от 50K. Правило практики:

Размер объекта Рекомендуемый полигонаж Расстояние просмотра
Небольшой (чашка, телефон) 5 000–15 000 0.3–1 м
Средний (кресло, лампа) 15 000–50 000 0.5–2 м
Крупный (диван, шкаф) 30 000–80 000 1–3 м
Очень крупный (автомобиль) 50 000–120 000 2–10 м

Decimation в Blender: Modifier → Decimate → Collapse с Ratio = 0.05–0.1 для сложных моделей даёт нужный результат без ручной ретопологии. Quadric Edge Collapse Decimation лучше сохраняет форму краёв чем Unsubdivide.

После decimation — обязательная проверка в AR на целевом устройстве, а не только в превью редактора. Силуэт объекта важнее внутренних деталей — декодируем по-другому.

Как проверить модель на готовность - Соберите модель в Xcode или Android Studio. - Запустите на устройстве с iOS 15+ или Android 11+. - Убедитесь, что FPS не падает ниже 50 в течение 10 минут. - Проверьте нагрев: корпус не должен быть горячим на ощупь.

Как выбрать формат текстур?

Самое большое влияние на производительность — текстуры, а не полигонаж. ASTC (Adaptive Scalable Texture Compression) — правильный формат для мобильного AR. Поддерживается всеми ARM Mali и Qualcomm Adreno GPU с середины предыдущего десятилетия. ASTC 6×6 даёт примерно 2.37 bpp против 32 bpp у PNG — в 13 раз меньше памяти GPU при минимальных потерях качества. Подробнее о сжатии текстур читайте на Wikipedia.

ETC2 — универсальный fallback для старых устройств (GLES 3.0+). Хуже ASTC по качеству сжатия, но поддерживается шире.

Никогда не используйте PNG/JPEG в текстурах AR-сцены. PNG декодируется в полный RGBA8888 — для текстуры 2048×2048 это 16 MB GPU-памяти. ASTC 2048×2048 — около 2 MB.

Генерация ASTC через astcenc (командная строка):

astcenc -cl input.png output.astc 6x6 -medium 

В Xcode Asset Catalog: добавляем текстуру, устанавливаем Compression = Lossy → автоматически ASTC на iOS. На Android — компиляция через Android Studio или в CI через texturetool.

Размер текстур. Правило: размер текстуры пропорционален видимой площади объекта на экране. Для объекта занимающего 20% экрана — текстура 512×512 даёт неотличимый от 2048×2048 результат. Mipmap обязателен: SceneKit и ARCore автоматически используют уровень mipmap соответствующий размеру отображения.

Реализация LOD для AR

В отличие от игровых движков, ARKit SceneKit не имеет встроенного LOD-менеджера. Реализуем через SCNLevelOfDetail. Вот пример кода:

let highPolyGeometry = loadGeometry("chair_high.usdz") // 50K полигонов let medPolyGeometry = loadGeometry("chair_med.usdz") // 15K полигонов let lowPolyGeometry = loadGeometry("chair_low.usdz") // 5K полигонов let lod1 = SCNLevelOfDetail(geometry: medPolyGeometry, screenSpaceRadius: 100) let lod2 = SCNLevelOfDetail(geometry: lowPolyGeometry, screenSpaceRadius: 30) node.geometry?.levelsOfDetail = [lod1, lod2] 

screenSpaceRadius — радиус bounding sphere в экранных пикселях. При значении 100 — модель занимает около 200×200 пикселей. Числа подбираются под конкретный объект эмпирически. Подробнее — в SCNLevelOfDetail.

На Android ARCore с Filament LOD реализуется через MaterialInstance swap или через RenderableManager.Builder.boundingBox() для culling.

USDZ / glTF: правильный формат для AR

USDZ (iOS, macOS) — контейнер на основе OpenUSD от Pixar. Содержит геометрию, материалы, анимации, физику. Поддерживает AR Quick Look без кода. Reality Converter (macOS-приложение от Apple) конвертирует из FBX/OBJ/glTF в USDZ с одновременной оптимизацией текстур.

glTF 2.0 (Android/Cross-platform) — открытый стандарт, нативно поддерживается Filament и Sceneform. glb — бинарный вариант, предпочтителен для AR (один файл вместо нескольких). Оптимизация через gltf-pipeline:

gltf-pipeline -i model.gltf -o model_opt.glb \ --draco.compressMeshes --draco.quantizePositionBits 14 

Draco compression (Google) уменьшает размер геометрии в 5–10 раз за счёт сжатия с потерями. Качество регулируется quantizeBits — 14 бит достаточно для большинства AR-объектов.

Выбор формата зависит от платформы: USDZ — нативная поддержка AR Quick Look, малый размер, но только iOS. glTF + Draco — кроссплатформенность, сильное сжатие, но нужен загрузчик. Для кросс-платформенных проектов чаще выбирают glTF, для iOS-экосистемы — USDZ.

Как мы это делаем: стек и процесс

Мы используем Blender для decimation, astcenc для сжатия, Xcode и Android Studio для тестирования. Процесс разбит на этапы:

  1. Анализ исходных моделей: выявляем избыточный полигонаж, размер текстур, отсутствие LOD.
  2. Decimation до целевого полигонажа (среднее снижение в 10 раз).
  3. Сжатие текстур в ASTC/ETC2 с генерацией mipmap.
  4. Создание LOD-уровней (до 3 уровней).
  5. Экспорт в USDZ или glTF с Draco-сжатием.
  6. Тестирование на реальных устройствах (iPhone и Android).

Более 5 лет опыта в AR-разработке и более 200 успешных проектов подтверждают: такой подход гарантирует результат. Пример из практики: крупный мебельный бренд хотел показать каталог в AR. Исходные модели весили по 200 МБ. Мы снизили полигонаж до 30K, сжали текстуры в ASTC, добавили LOD. Финальные модели — 15 МБ, AR-сцена работала на 60 FPS даже на iPhone X. Экономия на хранении и передаче — около 30 000 ₽ в месяц для каталога из 50 моделей.

Источник: отчёт проекта для мебельного бренда.

Чек-лист для самостоятельной проверки

  • Полигонаж < 100K для средних объектов.
  • Текстуры сжаты в ASTC или ETC2.
  • Размер текстур ≤ 1024×1024 для объектов не первого плана.
  • Настроены LOD (минимум 2 уровня).
  • Формат — USDZ (iOS) или glTF (Android).

Что входит в работу

В рамках услуги мы предоставляем:

  • Анализ исходных моделей и отчёт по оптимизации.
  • Decimation, сжатие текстур, создание LOD-уровней.
  • Экспорт в USDZ/glTF с Draco-сжатием.
  • Тестирование на целевых устройствах (iOS/Android).
  • Документацию по пайплайну и рекомендации для дальнейшего использования.
  • Обучение вашей команды работе с оптимизированными моделями.

Сроки и стоимость

Оптимизация одной модели занимает от 0.5 до 1 дня. Для каталога из 20–50 моделей — 1–2 недели с настройкой автоматизированного пайплайна. Стоимость рассчитывается индивидуально в зависимости от сложности и объёма. Свяжитесь с нами для оценки вашего проекта — мы подготовим коммерческое предложение. Закажите консультацию, и мы бесплатно проанализируем ваши модели.