Следуйте этим рекомендациям, чтобы оптимизировать использование материалов и шейдеров в игре для Android.
Материалы и шейдеры являются основными строительными блоками современного 3D-искусства. 3D-игры, которые хорошо работают на большом количестве устройств, начинаются с 3D-графики, разработанной с учетом максимального использования преимуществ графических процессоров. В этом руководстве описаны оптимизации и лучшие практики использования материалов и шейдеров на мобильных устройствах, которые помогут повысить производительность вашей игры и минимизировать энергопотребление.
Части этой статьи основаны на работах, предоставленных Arm Limited и защищенных авторскими правами.
Шейдеры для игрового движка, удобные для мобильных устройств
Игровые движки различаются тем, как они связывают материалы и шейдеры. Движок Unity может создавать несколько шейдеров, но каждому материалу может быть назначен только один шейдер. Unreal Engine 4 может применять к материалу разные шейдеры на основе целевой платформы.
Определение шейдеров и материалов см . в разделе «Рекомендации по материалам и шейдерам для художников» .
Если вы используете игровой движок, например Unity или Unreal Engine 4, используйте встроенные шейдеры, предназначенные для мобильного оборудования. Эти шейдеры содержат упрощенные реализации функций для повышения производительности на мобильных устройствах. Если возможно, отключите функции, которые вы не используете, при настройке материалов. Этими функциями могут быть такие вещи, как цветовая тонировка или подробные карты. Отключение неиспользуемых функций позволяет движку исключать их из окончательной программы шейдера, что приводит к повышению производительности.
Единство
Unity включает в себя несколько механизмов рендеринга. Для современных мобильных игр лучший вариант — Universal Render Pipeline (URP) . URP включает стандартный набор шейдеров, сложность которых автоматически масштабируется в зависимости от целевой платформы. Устаревший модуль рендеринга Unity включает коллекцию шейдеров, предназначенных для мобильных платформ. Эти шейдеры сгруппированы в категории «Мобильные» .
Нереальный Движок 4
Движок Unreal выберет мобильный шейдер на основе выбранной целевой платформы. Визуальный вывод мобильных шейдеров может отличаться от шейдеров Shader Model 5 по умолчанию. Вы можете изменить уровень предварительного рендеринга в редакторе Unreal, чтобы имитировать результат рендеринга мобильных шейдеров. Несмотря на некоторые различия, Unreal использует один и тот же процесс для материалов на всех платформах, поэтому мобильные шейдеры обычно имеют такие же визуальные эффекты и поведение, что и шейдеры по умолчанию.
Свернуть семплеры текстур
Игры, ориентированные на мобильные устройства, должны использовать в своих материалах как можно меньше текстур. Каждая добавленная текстура требует дополнительной выборки текстур, что потребляет пропускную способность памяти и увеличивает энергопотребление. Unreal Engine 4 рекомендует использовать максимум пять текстур материалов при работе на мобильных устройствах. Даже пять сэмплеров текстур могут быть непомерно дорогими для широкого использования на многих устройствах. Стратегии минимизации количества сэмплеров текстур включают в себя:
- Используйте упаковку текстур для объединения одноканальных текстур. Дополнительную информацию об этой технике можно найти в руководстве по текстурам .
- Замените данные таких параметров, как шероховатость или металличность, числовой константой, а не считывайте их из текстуры.
- Используйте неосвещенные шейдеры или простую модель освещения, чтобы можно было опустить текстуры, необходимые для поддержки расчетов освещения в более сложных моделях освещения.
По возможности отключите освещение
Освещенные и неосвещенные — это общее разделение между шейдерами и материалами. Освещение в реальном времени требует дополнительных вычислений в шейдере. В зависимости от типа реализуемой системы освещения могут потребоваться текстуры материалов, которые используют больше места в памяти и пропускную способность. Для мобильных игр, особенно тех, которые ориентированы на менее мощное оборудование, для достижения оптимальной производительности важно свести к минимуму использование освещения в реальном времени. Вам следует подумать о том, чтобы разработать свое художественное направление на основе проектов, которые хорошо работают без освещения в реальном времени, например стилизованных или мультяшных рисунков.
Минимизируйте использование прозрачности
По возможности используйте непрозрачные материалы. Рендеринг объекта с прозрачностью всегда обходится дороже, чем эквивалентный непрозрачный объект. Конструкция мобильного графического оборудования делает рендеринг прозрачности сравнительно более дорогим, чем на графическом оборудовании компьютера или игровой консоли. Рисование большого количества прозрачных объектов в игре, особенно если они отображаются друг над другом, отрицательно повлияет на производительность.
Рисование одного и того же пикселя несколько раз — это проблема, известная как перерисовка. Следует избегать перерисовки нескольких слоев прозрачности. Во многих играх есть диагностические инструменты для визуализации перерисовки, которые помогают обнаружить и устранить ее. Используйте эти инструменты, чтобы улучшить производительность вашей игры и выявить проблемные области, которые снижают частоту кадров.
Используйте соответствующий альфа-метод
Наиболее распространенными методами реализации прозрачности являются альфа-смешение и альфа-тестирование.
Альфа-тестирование сделает материал объекта либо 100% непрозрачным, либо 100% прозрачным. Вы можете настроить пороговое значение альфа для этого ограничения. В Unity этот тип прозрачности называется Cutout . В Unreal Engine 4 это называется режимом наложения по маске .
Альфа-смешение позволяет материалу объекта иметь определенный диапазон прозрачности и может сделать объект частично прозрачным. Unity называет этот тип прозрачности «Прозрачным» . В Unreal Engine 4 это называется режимом полупрозрачного наложения.
Альфа-смешение обычно приводит к более качественному внешнему виду, чем альфа-тестирование. Однако для некоторых типов сеток, таких как листва, альфа-смешение может выглядеть странно, когда сетка просматривается в движении. Это вызвано восприятием листьев и ветвей, отображаемых в неправильном порядке. Альфа-тестирование сводит этот эффект к минимуму за счет увеличения сглаживания и резких краев листьев и ветвей.
Альфа-смешение и альфа-тестирование могут занять разное время для рендеринга одной и той же сетки. Для сеток, где любой из режимов дает приемлемый визуальный результат, вам следует провести тестирование, чтобы увидеть, работает ли один метод лучше, чем другой.
Сложность шейдера профиля
Функции рендеринга, такие как сэмплеры текстур, освещение и прозрачность, усложняют шейдер и снижают производительность рендеринга. Вы можете использовать инструменты, встроенные в игровые движки, а также внешние графические инструменты, чтобы оценить сложность шейдера.
Unreal Engine 4 включает режим просмотра Shader Complexity , который предоставляет оценку стоимости объектов в вашей сцене.
Вы также можете использовать функцию статистики материалов Unreal, чтобы профилировать стоимость материалов по мере их создания.
Вычисление в вершинном шейдере
Вычисления шейдера рендеринга обычно делятся на вершинный шейдер и фрагментный (также известный как пиксельный) шейдер. Количество визуализируемых фрагментов обычно превышает количество вершин. Если в вершинном шейдере можно выполнить дорогостоящие вычисления, они будут выполняться реже, чем если бы это происходило во фрагментном шейдере.
Однако если эти данные используются фрагментным шейдером, они должны быть переданы из вершинного шейдера. Если объем передаваемых данных слишком велик, выполнение вычислений во фрагментном шейдере может иметь более высокую производительность. Вы можете использовать инструменты профилирования, чтобы оценить использование плитки и определить оптимальное расположение шейдера для набора вычислений. В Unreal Engine 4 есть функция Customized UVs , которая может помочь в этом профилировании.
Избегайте дорогостоящих математических операций
Математические операции используются в программах шейдеров для управления поведением и внешним видом выходных данных шейдера. Общие операции включают базовую арифметику, степень, пол, логарифм и т. д. Математические операции не равны по своей вычислительной стоимости. Шейдер, наполненный дорогостоящими операциями, будет работать медленнее, особенно на старых устройствах. Примеры относительно недорогих операций включают в себя:
- Добавление
- Вычитание
- Умножение
К более дорогостоящим операциям относятся:
- Разделение
- Трансцендентальные (грех, cos, сила, бревно, загар)
Производительность профиля часто
Узкие места в производительности не всегда могут быть очевидны. Не предполагайте, где находятся ваши проблемные области, и используйте инструменты профилирования для оценки производительности рендеринга. Обязательно проводите тесты до и после любой оптимизации, чтобы точно оценить ее влияние.
,Следуйте этим рекомендациям, чтобы оптимизировать использование материалов и шейдеров в игре для Android.
Материалы и шейдеры являются основными строительными блоками современного 3D-искусства. 3D-игры, которые хорошо работают на большом количестве устройств, начинаются с 3D-графики, разработанной с учетом максимального использования преимуществ графических процессоров. В этом руководстве описаны оптимизации и лучшие практики использования материалов и шейдеров на мобильных устройствах, которые помогут повысить производительность вашей игры и минимизировать энергопотребление.
Части этой статьи основаны на работах, предоставленных Arm Limited и защищенных авторскими правами.
Шейдеры для игрового движка, удобные для мобильных устройств
Игровые движки различаются тем, как они связывают материалы и шейдеры. Движок Unity может создавать несколько шейдеров, но каждому материалу может быть назначен только один шейдер. Unreal Engine 4 может применять к материалу разные шейдеры на основе целевой платформы.
Определение шейдеров и материалов см . в разделе «Рекомендации по материалам и шейдерам для художников» .
Если вы используете игровой движок, например Unity или Unreal Engine 4, используйте встроенные шейдеры, предназначенные для мобильного оборудования. Эти шейдеры содержат упрощенные реализации функций для повышения производительности на мобильных устройствах. Если возможно, отключите функции, которые вы не используете, при настройке материалов. Этими функциями могут быть такие вещи, как цветовая тонировка или подробные карты. Отключение неиспользуемых функций позволяет движку исключать их из окончательной программы шейдера, что приводит к повышению производительности.
Единство
Unity включает в себя несколько механизмов рендеринга. Для современных мобильных игр лучший вариант — Universal Render Pipeline (URP) . URP включает стандартный набор шейдеров, сложность которых автоматически масштабируется в зависимости от целевой платформы. Устаревший модуль рендеринга Unity включает коллекцию шейдеров, предназначенных для мобильных платформ. Эти шейдеры сгруппированы в категории «Мобильные» .
Нереальный Движок 4
Движок Unreal выберет мобильный шейдер на основе выбранной целевой платформы. Визуальный вывод мобильных шейдеров может отличаться от шейдеров Shader Model 5 по умолчанию. Вы можете изменить уровень предварительного рендеринга в редакторе Unreal, чтобы имитировать результат рендеринга мобильных шейдеров. Несмотря на некоторые различия, Unreal использует один и тот же процесс для материалов на всех платформах, поэтому мобильные шейдеры обычно имеют такие же визуальные эффекты и поведение, что и шейдеры по умолчанию.
Свернуть семплеры текстур
Игры, ориентированные на мобильные устройства, должны использовать в своих материалах как можно меньше текстур. Каждая добавленная текстура требует дополнительной выборки текстур, что потребляет пропускную способность памяти и увеличивает энергопотребление. Unreal Engine 4 рекомендует использовать максимум пять текстур материалов при работе на мобильных устройствах. Даже пять сэмплеров текстур могут быть непомерно дорогими для широкого использования на многих устройствах. Стратегии минимизации количества сэмплеров текстур включают в себя:
- Используйте упаковку текстур для объединения одноканальных текстур. Дополнительную информацию об этой технике можно найти в руководстве по текстурам .
- Замените данные таких параметров, как шероховатость или металлик, числовой константой, а не считывайте их из текстуры.
- Используйте неосвещенные шейдеры или простую модель освещения, чтобы можно было опустить текстуры, необходимые для поддержки расчетов освещения в более сложных моделях освещения.
По возможности отключите освещение
Освещенные и неосвещенные — это общее разделение между шейдерами и материалами. Освещение в реальном времени требует дополнительных вычислений в шейдере. В зависимости от типа реализуемой системы освещения могут потребоваться текстуры материалов, которые используют больше места в памяти и пропускную способность. Для мобильных игр, особенно тех, которые ориентированы на менее мощное оборудование, для достижения оптимальной производительности важно свести к минимуму использование освещения в реальном времени. Вам следует подумать о том, чтобы разработать свое художественное направление на основе проектов, которые хорошо работают без освещения в реальном времени, например стилизованных или мультяшных рисунков.
Минимизируйте использование прозрачности
По возможности используйте непрозрачные материалы. Рендеринг объекта с прозрачностью всегда обходится дороже, чем эквивалентный непрозрачный объект. Конструкция мобильного графического оборудования делает рендеринг прозрачности сравнительно более дорогим, чем на графическом оборудовании компьютера или игровой консоли. Рисование большого количества прозрачных объектов в игре, особенно если они отображаются друг над другом, отрицательно повлияет на производительность.
Рисование одного и того же пикселя несколько раз — это проблема, известная как перерисовка. Следует избегать перерисовки нескольких слоев прозрачности. Во многих играх есть диагностические инструменты для визуализации перерисовки, которые помогают обнаружить и устранить ее. Используйте эти инструменты, чтобы улучшить производительность вашей игры и выявить проблемные области, которые снижают частоту кадров.
Используйте соответствующий альфа-метод
Наиболее распространенными методами реализации прозрачности являются альфа-смешение и альфа-тестирование.
Альфа-тестирование сделает материал объекта либо 100% непрозрачным, либо 100% прозрачным. Вы можете настроить пороговое значение альфа для этого ограничения. В Unity этот тип прозрачности называется Cutout . В Unreal Engine 4 это называется режимом наложения по маске .
Альфа-смешение позволяет материалу объекта иметь определенный диапазон прозрачности и может сделать объект частично прозрачным. Unity называет этот тип прозрачности «Прозрачным» . В Unreal Engine 4 это называется режимом полупрозрачного наложения.
Альфа-смешение обычно приводит к более качественному внешнему виду, чем альфа-тестирование. Однако для некоторых типов сеток, таких как листва, альфа-смешение может выглядеть странно, когда сетка просматривается в движении. Это вызвано восприятием листьев и ветвей, отображаемых в неправильном порядке. Альфа-тестирование сводит этот эффект к минимуму за счет увеличения сглаживания и резких краев листьев и ветвей.
Альфа-смешение и альфа-тестирование могут занять разное время для рендеринга одной и той же сетки. Для сеток, где любой из режимов дает приемлемый визуальный результат, вам следует провести тестирование, чтобы увидеть, работает ли один метод лучше, чем другой.
Сложность шейдера профиля
Функции рендеринга, такие как сэмплеры текстур, освещение и прозрачность, усложняют шейдер и снижают производительность рендеринга. Вы можете использовать инструменты, встроенные в игровые движки, а также внешние графические инструменты, чтобы оценить сложность шейдера.
Unreal Engine 4 включает режим просмотра Shader Complexity , который предоставляет оценку стоимости объектов в вашей сцене.
Вы также можете использовать функцию статистики материалов Unreal, чтобы профилировать стоимость материалов по мере их создания.
Вычисление в вершинном шейдере
Вычисления шейдера рендеринга обычно делятся на вершинный шейдер и фрагментный (также известный как пиксельный) шейдер. Количество визуализируемых фрагментов обычно превышает количество вершин. Если в вершинном шейдере можно выполнить дорогостоящие вычисления, они будут выполняться реже, чем если бы это происходило во фрагментном шейдере.
Однако если эти данные используются фрагментным шейдером, они должны быть переданы из вершинного шейдера. Если объем передаваемых данных слишком велик, выполнение вычислений во фрагментном шейдере может иметь более высокую производительность. Вы можете использовать инструменты профилирования, чтобы оценить использование плитки и определить оптимальное расположение шейдера для набора вычислений. В Unreal Engine 4 есть функция Customized UVs , которая может помочь в этом профилировании.
Избегайте дорогостоящих математических операций
Математические операции используются в программах шейдеров для управления поведением и внешним видом выходных данных шейдера. Общие операции включают базовую арифметику, степень, пол, логарифм и т. д. Математические операции не равны по своей вычислительной стоимости. Шейдер, наполненный дорогостоящими операциями, будет работать медленнее, особенно на старых устройствах. Примеры относительно недорогих операций включают в себя:
- Добавление
- Вычитание
- Умножение
К более дорогостоящим операциям относятся:
- Разделение
- Трансцендентальные (грех, потому что, сила, бревно, загар)
Производительность профиля часто
Узкие места в производительности не всегда могут быть очевидны. Не предполагайте, где находятся ваши проблемные области, и используйте инструменты профилирования для оценки производительности рендеринга. Обязательно проводите тесты до и после любой оптимизации, чтобы точно оценить ее влияние.
,Следуйте этим рекомендациям, чтобы оптимизировать использование материалов и шейдеров в игре для Android.
Материалы и шейдеры являются основными строительными блоками современного 3D-искусства. 3D-игры, которые хорошо работают на большом количестве устройств, начинаются с 3D-графики, разработанной с учетом максимального использования преимуществ графических процессоров. В этом руководстве описаны оптимизации и лучшие практики использования материалов и шейдеров на мобильных устройствах, которые помогут повысить производительность вашей игры и минимизировать энергопотребление.
Части этой статьи основаны на работах, предоставленных Arm Limited и защищенных авторскими правами.
Шейдеры для игрового движка, удобные для мобильных устройств
Игровые движки различаются тем, как они связывают материалы и шейдеры. Движок Unity может создавать несколько шейдеров, но каждому материалу может быть назначен только один шейдер. Unreal Engine 4 может применять к материалу разные шейдеры на основе целевой платформы.
Определение шейдеров и материалов см . в разделе «Рекомендации по материалам и шейдерам для художников» .
Если вы используете игровой движок, например Unity или Unreal Engine 4, используйте встроенные шейдеры, предназначенные для мобильного оборудования. Эти шейдеры содержат упрощенные реализации функций для повышения производительности на мобильных устройствах. Если возможно, отключите функции, которые вы не используете, при настройке материалов. Этими функциями могут быть такие вещи, как цветовая тонировка или подробные карты. Отключение неиспользуемых функций позволяет движку исключать их из окончательной программы шейдера, что приводит к повышению производительности.
Единство
Unity включает в себя несколько механизмов рендеринга. Для современных мобильных игр лучший вариант — Universal Render Pipeline (URP) . URP включает стандартный набор шейдеров, сложность которых автоматически масштабируется в зависимости от целевой платформы. Устаревший модуль рендеринга Unity включает коллекцию шейдеров, предназначенных для мобильных платформ. Эти шейдеры сгруппированы в категории «Мобильные» .
Нереальный Движок 4
Движок Unreal выберет мобильный шейдер на основе выбранной целевой платформы. Визуальный вывод мобильных шейдеров может отличаться от шейдеров Shader Model 5 по умолчанию. Вы можете изменить уровень предварительного рендеринга в редакторе Unreal, чтобы имитировать результат рендеринга мобильных шейдеров. Несмотря на некоторые различия, Unreal использует один и тот же процесс для материалов на всех платформах, поэтому мобильные шейдеры обычно имеют такие же визуальные эффекты и поведение, что и шейдеры по умолчанию.
Свернуть семплеры текстур
Игры, ориентированные на мобильные устройства, должны использовать в своих материалах как можно меньше текстур. Каждая добавленная текстура требует дополнительной выборки текстур, что потребляет пропускную способность памяти и увеличивает энергопотребление. Unreal Engine 4 рекомендует использовать максимум пять текстур материалов при работе на мобильных устройствах. Даже пять сэмплеров текстур могут быть непомерно дорогими для широкого использования на многих устройствах. Стратегии минимизации количества сэмплеров текстур включают в себя:
- Используйте упаковку текстур для объединения одноканальных текстур. Дополнительную информацию об этой технике можно найти в руководстве по текстурам .
- Замените данные таких параметров, как шероховатость или металлик, числовой константой, а не считывайте их из текстуры.
- Используйте неосвещенные шейдеры или простую модель освещения, чтобы можно было опустить текстуры, необходимые для поддержки расчетов освещения в более сложных моделях освещения.
По возможности отключите освещение
Освещенные и неосвещенные — это общее разделение между шейдерами и материалами. Освещение в реальном времени требует дополнительных вычислений в шейдере. В зависимости от типа реализуемой системы освещения могут потребоваться текстуры материалов, которые используют больше места в памяти и пропускную способность. Для мобильных игр, особенно тех, которые ориентированы на менее мощное оборудование, для достижения оптимальной производительности важно свести к минимуму использование освещения в реальном времени. Вам следует подумать о том, чтобы разработать свое художественное направление на основе проектов, которые хорошо работают без освещения в реальном времени, например стилизованных или мультяшных рисунков.
Минимизируйте использование прозрачности
По возможности используйте непрозрачные материалы. Рендеринг объекта с прозрачностью всегда обходится дороже, чем эквивалентный непрозрачный объект. Конструкция мобильного графического оборудования делает рендеринг прозрачности сравнительно более дорогим, чем на графическом оборудовании компьютера или игровой консоли. Рисование большого количества прозрачных объектов в игре, особенно если они отображаются друг на друге, отрицательно повлияет на производительность.
Рисование одного и того же пикселя несколько раз — это проблема, известная как перерисовка. Следует избегать перерисовки нескольких слоев прозрачности. Во многих играх есть диагностические инструменты для визуализации перерисовки, которые помогают обнаружить и устранить ее. Используйте эти инструменты, чтобы улучшить производительность вашей игры и выявить проблемные области, которые снижают частоту кадров.
Используйте соответствующий альфа-метод
Наиболее распространенными методами реализации прозрачности являются альфа-смешение и альфа-тестирование.
Альфа-тестирование сделает материал объекта либо 100% непрозрачным, либо 100% прозрачным. Вы можете настроить пороговое значение альфа для этого ограничения. В Unity этот тип прозрачности называется Cutout . В Unreal Engine 4 это называется режимом наложения по маске .
Альфа-смешение позволяет материалу объекта иметь определенный диапазон прозрачности и может сделать объект частично прозрачным. Unity называет этот тип прозрачности «Прозрачным» . В Unreal Engine 4 это называется режимом полупрозрачного наложения.
Альфа-смешение обычно приводит к более качественному внешнему виду, чем альфа-тестирование. Однако для некоторых типов сеток, таких как листва, альфа-смешение может выглядеть странно, когда сетка просматривается в движении. Это вызвано восприятием листьев и ветвей, отображаемых в неправильном порядке. Альфа-тестирование сводит этот эффект к минимуму за счет увеличения сглаживания и резких краев листьев и ветвей.
Альфа-смешение и альфа-тестирование могут занять разное время для рендеринга одной и той же сетки. Для сеток, где любой из режимов дает приемлемый визуальный результат, вам следует провести тестирование, чтобы увидеть, работает ли один метод лучше, чем другой.
Сложность шейдера профиля
Функции рендеринга, такие как сэмплеры текстур, освещение и прозрачность, усложняют шейдер и снижают производительность рендеринга. Вы можете использовать инструменты, встроенные в игровые движки, а также внешние графические инструменты, чтобы оценить сложность шейдера.
Unreal Engine 4 включает режим просмотра Shader Complexity , который предоставляет оценку стоимости объектов в вашей сцене.
Вы также можете использовать функцию статистики материалов Unreal, чтобы профилировать стоимость материалов по мере их создания.
Вычисление в вершинном шейдере
Вычисления шейдера рендеринга обычно делятся между вершинным шейдером и фрагментным (также известным как пиксельный) шейдер. Количество визуализируемых фрагментов обычно превышает количество вершин. Если дорогостоящее вычисление может быть выполнено в вершинном шейдере, оно будет выполняться реже, чем если бы оно происходило во фрагментном шейдере.
Однако если эти данные используются фрагментным шейдером, они должны быть переданы из вершинного шейдера. Если объем передаваемых данных слишком велик, выполнение вычислений во фрагментном шейдере может иметь более высокую производительность. Вы можете использовать инструменты профилирования, чтобы оценить использование плитки и определить оптимальное расположение шейдера для набора вычислений. В Unreal Engine 4 есть функция Customized UVs , которая может помочь в этом профилировании.
Избегайте дорогостоящих математических операций
Математические операции используются в программах шейдеров для управления поведением и внешним видом выходных данных шейдера. Общие операции включают базовую арифметику, степень, пол, логарифм и т. д. Математические операции не равны по своей вычислительной стоимости. Шейдер, наполненный дорогостоящими операциями, будет работать медленнее, особенно на старых устройствах. Примеры относительно недорогих операций включают в себя:
- Добавление
- Вычитание
- Умножение
К более дорогостоящим операциям относятся:
- Разделение
- Трансцендентальные (грех, cos, сила, бревно, загар)
Производительность профиля часто
Узкие места в производительности не всегда могут быть очевидны. Не предполагайте, где находятся ваши проблемные области, и используйте инструменты профилирования для оценки производительности рендеринга. Обязательно проводите тесты до и после любой оптимизации, чтобы точно оценить ее влияние.