Проблемы При разработке мобильных игр многие сталкиваются с необходимостью уменьшить объем оперативной памяти или размер дистрибутива.
Чаще всего самыми тяжелыми ресурсами в проекте являются текстуры.
Несжатая текстура размером 1024x1024 занимает около 4 МБ.
И таких текстур в сцене обычно довольно много.
И если мы хотим, чтобы наши игровые сцены загружались быстрее и не занимали слишком много оперативной памяти, мы вынуждены сжимать текстуры.
В unity3d для мобильных устройств существует несколько типов сжатия.
Думаю, описанный здесь подход к улучшению качества результатов сжатия текстур будет справедлив для всех алгоритмов, но мы рассмотрим его на примере PVRTC. У него есть один большой плюс и один большой минус.
Размер текстур уменьшен в восемь раз, но появляются жуткие артефакты, особенно на прозрачных текстурах.
Данная тема призвана помочь в борьбе с последними.
Алгоритм
Суть алгоритма — постобработка текстур перед сжатием.Для этого нам понадобится графический редактор, умеющий работать со слоями.
Я использовал Adobe Photoshop. Рассмотрим алгоритм подробно: 1) Откройте текстуру в Фотошопе и создайте новый слой поверх существующего.
2) Заполните его средним оттенком серого.
3) Далее добавьте к этому слою шум с настройками как на рисунке:
4) Установите режим наложения «Мягкий свет» и прозрачность от 30 до 50 процентов, чтобы шум был не сильно заметен, но все же был виден.
5) Сохраните и импортируйте текстуру.
Если текстура полупрозрачная, то просто выделите пиксели исходного слоя, инвертируйте выделение и удалите пиксели из зашумленного слоя.
После импорта остаётся только указать сжатие RGBA Compressed PVRTC 4bit. Я настоятельно рекомендую установить флажок «Переопределить» на вкладках импортера iOS и Android и указать «Лучшее по качеству сжатия».
Если ваша текстура будет использоваться для графического интерфейса, снимите флажок «Создать MIP-карты».
Это избавит вас от эффекта размытия, если элемент пользовательского интерфейса расположен достаточно далеко от камеры.
Результаты
Как видите, все артефакты благополучно исчезли.
Обратите внимание на зеленый камень и шестерню вокруг таймера вверху.
Заключение
Прежде чем использовать этот простой метод, мне приходилось оставлять текстуры для GUI несжатыми, из-за чего приложение часто занимало много места в памяти.Но при таком подходе можно сжать практически все текстуры для интерфейсов.
За исключением очень мелких деталей, которые еще придется перенести в отдельные атласы и оставить в RGBA TrueColor. Но экономия памяти огромна.
Этот подход был успешно применен в совместном проекте Студия Unity Heyworks И iFree Инновации – ДраконОно .
Весь графический материал, представленный в статье, выполнен на основе текстур из этого проекта.
Теги: #unity3d #gamedev #разработка для мобильных устройств #разработка для iOS #разработка мобильных приложений #разработка игр
-
Дополненная Реальность + 3D На Silverlight
19 Oct, 24 -
Предварительная Версия Firefox 4 Beta 3
19 Oct, 24 -
Новая Волна Языков Программирования
19 Oct, 24