3д в играх давно стало обычным явлением на мобильных устройствах, но все еще накладывает ряд своих правил…
1.Топология♦“Меньше полигонов - лучше!” Можно прочитать в любом примере по оптимизации, и так оно и есть, за исключением пары ситуаций.
♦Для оптимально сокращения количества “треугольников” нужно определить насколько они важны и создать LOD группы: чем ближе к камере тем больше можно позволить детализации, соответственно на дальних расстояниях можно сводить модель в сторону силуэта… Размеры экрана помогают визуально сгладить подобный подход, и на расстоянии лоуполи модель не отличить от хайполи, а порог количества объектов, при нормальном ФПС, увеличиться многократно.
♦Невидимые из камеры полигоны можно сразу исключить из модели. Это не повлияет на отображение но сэкономит полигоны, возможно, текстурное пространство, а также немного снизит вес модели. “Внутренние” полигоны и дублированные вершины тем более нужно убирать.
♦Нужно всегда следить за нормалями! Вывернутые нормали будут прозрачными в Unity, а шейдер на 2-сторонние текстуры тяжелый для подобных косяков, что значит нужно позаботиться об этом до импорта.
♦Небольшие модели из “запчастей” лучше объединить в один меш - это не особо влияет на производительность, но на время работы и количество возможных косяков с этой моделью в Unity.
♦Большие модели (на 2+ “экрана”) наоборот лучше разбить на несколько частей. Уменьшает время расчета отсечения невидимых вершин.
♦Особое внимание нужно уделить альфе в моделях. Для ПК версии игры можно использовать альфу для уменьшения полигонов, но мобильные устройства показали обратный эффект и несколько лишних полигонов дают лучшую производительность чем альфа текстура. Но только если можно обойтись несколькими полигонами(Волосы или траву лучше все таки сделать текстурой)
♦Также стоит соблюдать размерность моделей. Т.к масштабирование в Unity снижает ФПС из-за увеличения времени расчета финального изображения.
2.Текстуры♦Текстуры весят много, сжимаются не всегда хорошо, грузятся медленно. Вывод: меньше текстуры лучше… но все не так!
♦Одна текстура 2048х2048рх(больше может вызвать сбои на многих устройствах), напрягает систему в разы меньше 32 текстур 64х64рх. Ведь система постоянно загружает\выгружает эти текстуры в зависимости от надобности. Поэтому, при возможности, развертки моделей которые отображаются “рядом” лучше объединять в атласы. Но нужно учитывать, что любая модель использующая атлас загрузит его в полном объеме, а значит лучше делить их на группы использования “в одном месте”.
♦При возможности, “запекать” свет, блики и нормали сразу в итоговую текстуру. Шейдеры для мобильных очень требовательны и лучше. без необходимости, не нагружать их. + свет, необходимый для отображения этих вещей, так же грузит систему…
3.Анимации♦С анимациями все просто:
-есть возможность проредить “ключи”?Делай!
-у разных моделей одни анимации? Не дублируй!