Полигонаж и оптимизация 3D-ассетов
Первое, что нужно понять про полигонаж: сам по себе он давно не главный ограничитель. Современная видеокарта переваривает миллионы треугольников; кадр чаще убивают вызовы отрисовки, количество материалов и объём текстур в видеопамяти. Полигонаж важен, но это одна метрика из четырёх, и смотреть на неё в отрыве бессмысленно.
Тем не менее ориентиры нужны — хотя бы чтобы отличить game-ready модель от меша, экспортированного из рендера.
Ориентировочные бюджеты
Цифры ниже — практические ориентиры, а не нормативы. Реальный бюджет зависит от того, сколько объектов одновременно в кадре и какой у вас целевой fps.
| Платформа | Главный персонаж | Обычный проп | Треугольников в кадре |
|---|---|---|---|
| Мобильные (средний Android/iOS) | 5 000 – 15 000 | 200 – 1 500 | 100 000 – 300 000 |
| ПК и консоли текущего поколения | 30 000 – 100 000 | 1 000 – 10 000 | миллионы |
| VR | 10 000 – 30 000 | 500 – 3 000 | жёстко ограничен: кадр рендерится дважды при 72–90 fps |
Что из этого следует практически:
- Пак «реалистичных пропсов» по 50 000 треугольников на бочку в мобильный проект не поедет, даже если по цене он выглядит выгодно.
- Персонаж на 200 000 треугольников — это не «очень качественная модель», а модель, не подготовленная для игры. Такие делают под рендер и запекание.
- В VR запас нужно закладывать втрое: то, что даёт 60 fps на мониторе, в шлеме превратится в тошноту.
Почему draw calls важнее треугольников
Один меш на 20 000 треугольников с одним материалом рисуется быстрее, чем двадцать мешей по 1 000 треугольников с двадцатью разными материалами. Каждый материал — это отдельный вызов отрисовки, а вызовы стоят процессорного времени.
Отсюда практическое правило при выборе ассета: смотрите не только на полигонаж, но и на количество материалов. Пак, где сорок пропсов используют один общий атлас, на порядок полезнее пака, где у каждой бочки собственный набор из четырёх текстур.
Проверить это в проекте просто:
- Unity — окно Stats в Game View (
Batches,SetPass calls), дальше Frame Debugger. - Unreal — консольные команды
stat rhiиstat scenerendering. - Godot 4 — вкладка Monitors в профайлере, счётчики
Draw CallsиVertices.
LOD: как это работает и что должно быть в паке
LOD (Level of Detail) — набор упрощённых версий модели, между которыми движок переключается по размеру объекта на экране. Стандартная схема:
- LOD0 — исходная модель, вблизи.
- LOD1 — примерно 50% треугольников.
- LOD2 — 25%.
- LOD3 — 10% или меньше, часто уже силуэт.
Переключение задаётся долей экрана, которую объект занимает: в Unity это LODGroup с процентами Screen Relative Transition Height, в Unreal — настройки LOD в Static Mesh Editor, в Godot 4 упрощённые уровни для мешей генерируются автоматически при импорте.
Что важно при покупке: уточните, есть ли LOD в комплекте. Автоматическая генерация выручает для простых пропсов, но на персонажах и растительности даёт кашу — там LOD должен делать художник. Если в описании пака про LOD не сказано ни слова, скорее всего, их нет. В карточках 3D-моделей в нашем каталоге наличие LOD и полигонаж мы выносим в характеристики — специально чтобы не приходилось гадать по скриншотам.
Отдельно про растительность: трава и листва — почти всегда самое дорогое, что есть в сцене, из-за прозрачности (alpha test). Даже низкополигональный куст с alpha-маской обходится дороже, чем цельный камень втрое большего полигонажа.
Атласы текстур
Текстуры почти всегда занимают больше видеопамяти, чем геометрия. Одна карта 4096×4096 в несжатом виде — это десятки мегабайт, и таких карт в паке может быть по четыре на объект.
Что действительно помогает:
- Общий атлас на группу объектов. Один материал на весь набор пропсов вместо материала на каждый — минус десятки draw calls.
- Упаковка по каналам. Occlusion, Roughness и Metallic не нуждаются в цвете, их складывают в R, G и B одной текстуры (ORM/RMA). Вместо трёх файлов — один.
- Адекватное разрешение. 4K-карта на бочку, которая на экране занимает 60 пикселей, — чистая трата памяти. Для мобильных проектов 1024 обычно достаточно, 2048 — потолок.
- Сжатие под платформу. ASTC на мобильных, BC7/DXT на ПК. Несжатые PNG в билде — распространённая ошибка при импорте купленных паков.
Практический вывод: «8K PBR textures» в описании ассета — это не преимущество, а предупреждение. Скорее всего, пак делали под архвиз-рендер, и в игровой проект его придётся ужимать вручную.
Что делает Nanite в UE5
Nanite — система виртуализированной геометрии в Unreal Engine 5. Меш разбивается на кластеры треугольников, и движок подгружает ровно ту детализацию, которая видна на экране в текущем разрешении. Дерево на 500 000 треугольников вдалеке рисуется как несколько сотен — без ручных LOD и без ручного переключения.
Что это меняет на практике:
- Для непрозрачной статичной геометрии LOD больше делать не нужно. Скалы, здания, каменные пропсы, кинематографичные меши — включили Nanite и забыли.
- Полигонаж исходной модели перестаёт быть решающим критерием при выборе такого ассета.
Чего Nanite не делает:
- Не уменьшает объём текстур. Память под карты остаётся вашей заботой, тут работают Virtual Textures и разумное разрешение.
- Плохо дружит с прозрачностью. Материалы с alpha-blend вне его логики, masked-материалы стоят дороже обычных.
- Имеет фиксированные накладные расходы. На простой сцене с малым числом треугольников Nanite может оказаться медленнее классического рендера — включать его «на всякий случай» не нужно.
- Скелетную анимацию и растительность освоил позже и постепенно — поддержка скелетных мешей и Nanite Foliage появлялись как экспериментальные фичи в поздних версиях UE5. Перед тем как строить пайплайн на них, проверьте статус в документации вашей версии движка.
И главное: Nanite — это Unreal. Ассет, купленный «под Nanite», в Unity или Godot остаётся обычным высокополигональным мешем, которому нужны честные LOD. Разбивка каталога по движкам — на странице движков.
Чеклист перед покупкой 3D-ассета
- Указан ли полигонаж — и треугольниками, а не «полигонами» (квады считаются вдвое).
- Есть ли LOD и сколько уровней.
- Сколько материалов на пак и есть ли общий атлас.
- Разрешение текстур и формат карт (есть ли ORM-упаковка).
- Есть ли скриншот сетки (wireframe). Его отсутствие у 3D-пака — плохой знак.
- Триангулирована ли модель, нет ли n-гонов — иначе движок сделает это сам, иногда некрасиво.
- Развёртка UV: перекрывающиеся острова не позволят запечь лайтмапу.
- Для персонажей — есть ли скелет, к какой схеме привязан (Humanoid в Unity требует совместимого рига).
Если пак берётся под Unity, дальше пригодится гайд по импорту и настройке материалов. Что разрешает лицензия на модификацию модели — в разборе лицензий. А как оплатить покупку из России, чтобы лицензия осталась на вашем аккаунте, — здесь.
Готовы выбрать ассет?
Перейти в каталог