Vladimir Alyamkin, C++ Developer, Mail.Ru Group
Sometimes it could be tricky to create a well-optimized and nice-looking material for mobile devices. Best practices and optimization approaches of shader creation will be demonstrated at session on example of UE4 high-load mobile online game. #MailRuPractice
2. Мобилки vs. Десктоп
Разницы нет. Серьезно.
● Мало памяти
● Очень мало памяти
● Жизнь - боль
● Операции над UV стоят дорого
● Translucent материалы -
ахиллесова пята движка
● Количество сэмплов
ограничено (весьма)
● Что-то может пойти не так
(iOS 9.3.5)
Но есть ньюанс :)
3. Правила игры на мобилках
Память:
● Сокращение числа уникальных шейдеров
● Минимализация размера каждого шейдера
● Поканальная упаковка текстур
Производительность:
● Custom UVs
● Аккуратный тайлинг
● Контроль за числом текстурных выборок
4. Память (1): Уникальные шейдера
● Switch == полноценный шейдер (а не инстанс)
● Булевый свитч в инстансе == новый шейдер
Параметризируем только цифровыми величинами и
слотами текстур!
Пример: если Roughness/Metallic может быть задана как
текстурой, так и цифровым значением - используйте
множители и маленькую текстурку во втором случае
5. Память (2): Вариации шейдеров
Каждый “Usage” - добавляет до 4 Мб
памяти (и размера на диске)
● Автоматическое включение Usage
рекомендуется отключать
● Проверяйте размеры шейдеров путем
распаковки .ipa/.apk
● QualitySwitch - добавляют все
возможные вариации к размеру
шейдера
6. Память (3): Настройки движка
● Game Discards Unused Material
Quality Levels - НЕТ
● Отключаем ненужные шейдерные
возможности
● Конфигурация качества - очень
дорого в плане RAM (ОЧЕНЬ!)
7. Память (4): Поканальная упаковка
Примеры:
RME: Roughenss/Metallic/Emissive
RMM: Roughness/Metallic/Mask
В мастер-материале рекомендуется
использовать дефолтные “легкие” текстуры с
низким разрешением, назначая “настоящие” - в
инстансах материала
● По-умолчанию в материале до 5 текстур
● Всего 4 слота при динамических тенях!
8. Скорость (1): Custom UVs
● Любые рассчеты UV на пиксельном
шейдере - дорого!
● CustomUV - расчет UV в вертексном
шейдере, а не пиксельном
Ограничения:
● Максимум - до трёх каналов на
материал
● Качество бленда и сэмплирования
по UV зависит от сетки меша
● Необходимы только прямые связи
нод TexCoord и Param2D
9. Скорость (2): Тайлинг и сэмплирование
Пример: Ландшафты (сэмплирование
на горизонте с высоким тайлингом)
Решение: Динамический тайлинг
Проблема:Зависимость UV от сетки
Сэмплирование внутри Custom нод - опасно
(требуется различное поведение под каждую
платформу)
10. Визуал: Особенности
● Отражения берутся от ближайшей Reflection
пробы - по пивоту, а не пикселю
● PlanarReflections - светлая фантазия, а не
production-ready фича
● Mip Gen Settings - играет огромную роль на
восприятие объектов на расстоянии
11. Пара советов
● “Планируйте” материалы и инстансы
● Много материалов могут потребовать
различные VFX’ы - держите художников в
ежовых рукавицах
● Следите за Material Usage и Switch’ами
● Проверяйте размер шейдера после упаковки
● В общем случае - текстура лучше математики!
(генерация это круто, но не для мобил)
Не слушайте котика -
тестируйте на устройствах!