Перейти к содержимому
Вся база знаний

3D на сайте, в AR и в играх

Почему 3D-модель тормозит на телефоне и как это исправить

Коротко

Модель тормозит, когда она слишком тяжела для телефона хотя бы по одному из трёх параметров: размер файла (долго грузится), память видеокарты (текстуры и геометрия не помещаются) и число вызовов отрисовки, draw calls (слишком много отдельных деталей и материалов). Лечится облегчением геометрии, уменьшением и сжатием текстур — формат KTX2 остаётся сжатым и в памяти видеокарты, — сжатием геометрии Meshopt или Draco и объединением материалов.

Кому полезно: Разработчикам, Заказчикам

На рабочем компьютере модель крутится плавно, а у покупателя на телефоне грузится минуту и дёргается. Причина почти всегда в одном из трёх мест.

Три причины

  1. Тяжёлый файл — долго скачивается по мобильному интернету.
  2. Не хватает памяти видеокарты — модель не помещается в память телефона, браузер тормозит или перезагружает страницу.
  3. Слишком много вызовов отрисовки — видеокарта получает сотни мелких заданий вместо нескольких крупных.

Текстуры: файл и память — разные вещи

на дискев памяти видеокартыJPEG / PNGKTX2длина полосок — для сравнения, не в масштабе
JPEG и PNG компактны на диске, но видеокарта распаковывает их целиком. KTX2 остаётся сжатым и в памяти.

JPEG и PNG компактны на диске, но видеокарта распаковывает их целиком. Текстура 4096×4096 занимает в памяти около 64 МБ, сколько бы ни весил файл. Формат KTX2 остаётся сжатым и в памяти видеокарты — поэтому для веба и AR текстуры переводят в него.

4096204810241024 → × 1 памяти2048 → × 44096 → × 16вдвое больше сторона —вчетверо больше памяти
Вдвое больше сторона — вчетверо больше памяти.

Каждое удвоение стороны текстуры — вчетверо больше памяти. Переход с 4096 на 2048 экономит три четверти. На экране телефона разницу между ними для большинства деталей не видно.

Геометрия

Плотная сетка — больше вершин, тяжелее файл и больше работы видеокарте. Невидимые детали убирают, сетку упрощают там, где это незаметно, а саму геометрию сжимают — Meshopt или Draco.

Draw calls

12 материалов12 заданий3 материала3 заданиявидеокартавидеокарта
Каждая деталь со своим материалом — отдельное задание видеокарте.

Каждая отдельная деталь со своим материалом — отдельное задание видеокарте, вызов отрисовки (draw call). Сотни таких заданий тормозят даже мощный телефон. Детали объединяют, материалы сводят к нескольким.

Как проверить

  • Открыть модель на среднем телефоне, а не на флагмане.
  • Посмотреть вес файла и время загрузки на мобильном интернете.
  • Открыть модель в техническом просмотрщике вроде gltf.report: он показывает число треугольников, размер текстур и материалов.

Для сцен с множеством объектов есть ещё один приём — уровни детализации; о нём статья LOD.

Как это выглядит на практике

  • Hilbert: AR работает с телефона, и дом нужно держать в памяти вместе с камерой и трекингом. Модели переведены на Meshopt и KTX2 — в памяти движка они занимают в три-четыре раза меньше исходных GLB.
  • RP Grand: материалы сведены к трём — кузов, салон, стекло — ради минимума draw calls; полная сборка машины — около девяти тысяч треугольников.
  • Getic: сжатие текстур под движок и облегчённая версия геометрии для мобильного трафика.

Частые ошибки

  • Смотреть только на размер файла и не думать о памяти.
  • Текстуры 4096 на каждую мелкую деталь.
  • Сотни отдельных материалов.
  • Проверять только на рабочем компьютере.

Чек-лист

  1. Вес файла.
  2. Размер текстур и формат KTX2.
  3. Геометрия: невидимое убрано, сжатие Meshopt или Draco.
  4. Материалов — несколько, а не сотни.
  5. Проверка на среднем телефоне.

Пример из практики

Есть продукция, которую нужно визуализировать?

Средний бюджет проекта — от 30 000 ₽.

Небольшие отдельные задачи оцениваются индивидуально.