Оптимизация графики в Unity 2021.3.1f1 для Android: кейс Samsung Galaxy A52, Shader Graph

В мобильной разработке игр, оптимизация — это не просто желательное, а критически важное условие. Особенно, когда речь идет о Unity и устройствах Android, таких как Samsung Galaxy A52. Этот смартфон, несмотря на свою популярность и неплохие характеристики, все же имеет ограничения. Поэтому оптимизация графики является ключевым моментом для обеспечения плавного игрового процесса. В данной статье мы рассмотрим, как достичь максимальной производительности на Galaxy A52, используя Unity 2021.3.1f1, а также затронем тему Shader Graph. Мы будем опираться на проверенные практики и статистические данные, чтобы дать вам четкие рекомендации для самостоятельной работы.

Начнем с того, что Unity по умолчанию устанавливает ограничение в 30 FPS на Android. Это может привести к заметным рывкам и неплавному движению, особенно в 2D играх. На Samsung Galaxy A52, с его AMOLED-дисплеем, эти проблемы особенно заметны. Устройство имеет 90-герцовый экран, и наша цель — обеспечить частоту кадров, близкую к этой отметке. По данным Samsung Developers Forum, устройства Galaxy A-серии, включая A52, поддерживают Adaptive Performance, который мы также рассмотрим позже.

Shader Graph — мощный инструмент для создания шейдеров в Unity, но его использование на мобильных устройствах требует осторожности. Мы покажем, как использовать его эффективно, минимизируя нагрузку на GPU. Подробно разберем, как создать простые и быстрые шейдеры для Android, избегая сложных вычислений, которые могут замедлить рендеринг. Также затронем аспекты оптимизации текстур и моделирования, чтобы снизить нагрузку на аппаратную часть. Кроме того, в данной статье вы найдете практические советы по управлению draw calls, fillrate и прочим параметрам, влияющим на производительность.

Актуальность оптимизации для мобильных устройств и выбор Samsung Galaxy A52

Оптимизация – это не только про плавность, но и про энергоэффективность. Плохо оптимизированные игры могут быстро разряжать аккумуляторы, что снижает пользовательский опыт. С Galaxy A52, и его батареей 4500 мАч, это особенно актуально. Оптимизация включает в себя уменьшение draw calls, использование low-poly моделей, сжатие текстур и эффективную работу шейдеров. В случае с использованием Shader Graph для создания графики необходимо учитывать ограничения мобильных GPU. Правильная работа с материалами и эффектами позволяет добиться максимальной производительности. Наличие Adaptive Performance у Samsung устройств дает дополнительные возможности для динамической настройки производительности, что мы тоже рассмотрим.

Настройка проекта Unity 2021.3.1f1 для Android

Начинаем с правильной настройки проекта Unity 2021.3.1f1 для Android. Это фундамент.

Настройки графики: API рендеринга, разрешение, качество текстур

Первый шаг в оптимизации графики – выбор правильного API рендеринга. Для Android устройств, включая Samsung Galaxy A52, оптимальным выбором будет Vulkan. Он обеспечивает лучшую производительность по сравнению с OpenGL ES. В настройках проекта Unity, в разделе Player Settings, нужно выбрать Vulkan как Graphics API. Разрешение экрана также играет важную роль. На Galaxy A52 можно использовать родное разрешение 2400×1080, но для большей производительности можно уменьшить его. Для 2D игр можно выставить разрешение 1920×1080, не теряя заметно в качестве. Влияние разрешений: снижение в 2 раза – прирост FPS от 15 до 30%.

Качество текстур напрямую влияет на производительность. Для мобильных устройств лучше всего использовать сжатые форматы текстур, такие как ETC2 или ASTC. ETC2 является стандартным форматом для Android и поддерживается большинством устройств, включая Galaxy A52. ASTC может обеспечивать лучшее качество при меньшем размере, но требует поддержки со стороны устройства. В Unity можно настроить формат сжатия для каждой текстуры отдельно в инспекторе. Также, использование mipmaps – обязательно, это уменьшает нагрузку на GPU при рендеринге удаленных объектов. Изменение качества текстур с высокого на среднее может дать прирост производительности до 10-15%, при минимальных потерях в качестве.

Далее: в настройках Quality Settings можно уменьшить качество теней и отменить антиалиасинг. Также стоит ограничить максимальное количество кадров в секунду (например, до 60 fps), если нет цели поддерживать переменную частоту обновления экрана.

Настройка сборки: уменьшение размера билда, stripping level

Размер билда напрямую влияет на время загрузки игры и использование памяти. Для Android, включая Samsung Galaxy A52, важно уменьшить размер APK. В настройках сборки Unity, в разделе Player Settings, можно настроить Stripping Level. Различные уровни Stripping level позволяют уменьшить размер, удаляя неиспользуемые классы и методы. Агрессивный stripping level (например, “Strip All”) может уменьшить размер билда до 20-30%, но может привести к ошибкам, если удалены нужные компоненты. Рекомендуется начинать с “Medium” и постепенно увеличивать уровень, проверяя работоспособность билда.

Для уменьшения размера билда, также нужно оптимизировать используемые ресурсы. Например, можно убрать из проекта неиспользуемые библиотеки и плагины. В настройках сборки, в разделе “Asset Compression”, стоит использовать сжатие ассетов. Для аудио можно использовать форматы Ogg Vorbis или MP3 с низким битрейтом, если качество звука не критично. Также стоит использовать Asset Bundles для загрузки ассетов по запросу, что уменьшит размер первоначального APK. Использование Addressables является более современной заменой Asset Bundles, и позволяет более гибко управлять ассетами.

Также, важно убрать debug-символы и debug-код из финальной сборки. В разделе Publishing Settings нужно убрать галку “Development Build”. Для Galaxy A52 и других Android устройств важно нацеливаться на ARMv7 и ARM64 архитектуры, использовать APK Splits, чтобы уменьшить размер установочного пакета для разных архитектур. В итоге, оптимизация сборки может сократить размер APK на 30-50%.

Профилирование производительности в Unity

Оценка и анализ производительности — ключевой этап оптимизации в Unity. Используем профайлер.

Использование Unity Profiler для анализа CPU и GPU

Unity Profiler – мощный инструмент для анализа производительности игры, и его использование обязательно на этапе оптимизации под Android, включая Samsung Galaxy A52. Профайлер позволяет увидеть, какие процессы нагружают CPU и GPU. Для запуска профилирования на устройстве, нужно подключить Galaxy A52 к компьютеру через USB и выбрать его в качестве цели сборки в Unity. Затем, в меню Window -> Analysis -> Profiler, можно запустить профилирование.

В Profiler, обратите внимание на секции CPU Usage и GPU Usage. В секции CPU, нужно анализировать время, которое тратится на выполнение скриптов, физику, анимацию и UI. Например, если большая часть времени тратится на скрипты, нужно оптимизировать код и избегать лишних вызовов. В секции GPU, нужно анализировать время рендеринга, которое тратится на отрисовку объектов. Обратите внимание на количество draw calls, время отрисовки отдельных элементов, и количество трианглов. Большое количество draw calls может существенно снизить производительность.

Кроме того, в Unity Profiler есть секция Memory, где можно отслеживать использование памяти. Избегайте утечек памяти и старайтесь загружать и выгружать ресурсы по мере необходимости. Samsung Galaxy A52 имеет 4, 6 или 8 Гб оперативной памяти, поэтому нужно внимательно следить за её использованием. По результатам профилирования, необходимо определить проблемные места и сфокусироваться на их оптимизации. Статистически, 10-15% сокращение времени CPU/GPU позволяет получить заметный прирост в FPS.

Анализ Draw Calls и способы их уменьшения

Draw calls – это количество вызовов отрисовки объектов на GPU. Каждый вызов требует времени, и слишком большое их количество может замедлить работу приложения, особенно на мобильных устройствах, таких как Samsung Galaxy A52. В Unity Profiler можно увидеть количество draw calls в секции GPU. В 2D играх количество draw calls может достигать нескольких сотен, что может сильно сказаться на FPS. Основная цель – минимизировать количество вызовов draw calls. Для этого, существует несколько основных способов.

Во-первых, атласы текстур. Собирайте несколько текстур в один большой атлас, вместо использования отдельных текстур. Это сократит количество переключений текстур, и в свою очередь уменьшит draw calls. Во-вторых, батчинг объектов. Unity автоматически объединяет в батчи объекты с одинаковыми материалами. Убедитесь, что ваши спрайты и модели используют один и тот же материал, по возможности. Использование Sprite Packer для 2D игр также поможет автоматизировать создание атласов. В-третьих, используйте GPU Instancing, это особенно полезно для отрисовки большого количества одинаковых объектов, таких как трава или частицы.

Также стоит уделить внимание тому, чтобы не было перекрывающихся спрайтов с прозрачностью, так как они не батчатся. Минимизируйте количество перекрытий в UI элементах. По статистике, сокращение количества draw calls на 20-30% может дать прирост FPS от 10 до 25%, в зависимости от других параметров. Регулярный анализ с помощью Unity Profiler поможет выявить проблемные места и применить правильные методы оптимизации.

Анализ Fillrate и его оптимизация

Fillrate — это скорость, с которой GPU может отрисовать пиксели на экране. Проблемы с fillrate могут возникнуть, когда игра пытается отрисовать слишком много пикселей, особенно на мобильных устройствах, таких как Samsung Galaxy A52. Оптимизация fillrate заключается в уменьшении количества отрисовываемых пикселей. Проверить ограничения по fillrate просто: если игра работает быстрее при уменьшении разрешения экрана – значит у вас проблема с fillrate. Использование Unity Profiler не покажет прямое значение fillrate, но можно проанализировать время, затраченное на рендеринг GPU и сделать соответствующие выводы.

Для оптимизации fillrate, старайтесь избегать перекрытия прозрачных объектов. Чем больше слоев прозрачности, тем больше пикселей нужно отрисовать. Упростите сложные шейдеры, особенно те, которые используют сложные эффекты, вроде размытия или искажения. Использование Shader Graph может быть полезным для создания простых шейдеров, не требующих большого количества вычислений. Также стоит избегать overdraw, когда объекты отрисовываются друг на друге несколько раз. Если есть возможность, то лучше использовать opaque материалы, чем transparent.

Также, старайтесь минимизировать количество пиксельных эффектов и отменить антиалиасинг. Использование текстур меньшего разрешения также снизит нагрузку на fillrate. Miplevels также помогают снизить нагрузку на GPU. Влияние fillrate может быть разным, но часто именно этот параметр влияет на производительность графики в играх. При оптимизации этого параметра, можно получить прирост в FPS от 5 до 20%. Регулярно профилируйте ваше приложение для выявления узких мест.

Оптимизация шейдеров в Unity для Android

Оптимизация шейдеров – критически важна для Android, особенно на Samsung Galaxy A52.

Использование Shader Graph для создания простых и эффективных шейдеров

Shader Graph – удобный инструмент в Unity для создания шейдеров без написания кода. Однако, при разработке под Android, особенно для Samsung Galaxy A52, важно создавать простые и эффективные шейдеры, минимизируя вычислительные затраты. Основное правило: избегать сложных математических операций и сложных эффектов, которые могут нагружать GPU. Используйте Unlit или Mobile шейдеры, которые специально оптимизированы для мобильных устройств. Они обеспечивают более высокую производительность, по сравнению со стандартными Lit шейдерами.

В Shader Graph, старайтесь использовать простые блоки и избегайте лишних вычислений. Например, вместо сложных процедурных текстур, используйте готовые текстурные атласы. Вместо сложных математических функций, используйте более простые аналоги. Используйте маскирование для создания эффектов, вместо сложных вычислений. Оптимизируйте шейдеры для работы с фиксированным освещением. В случае 2D игр, часто достаточно простого Unlit шейдера, что сильно повысит производительность. Используйте Shader variants для создания шейдеров, которые работают по разному, в зависимости от освещения.

При использовании Shader Graph, обязательно протестируйте шейдеры на реальном устройстве Samsung Galaxy A52 и отслеживайте производительность с помощью Unity Profiler. По статистике, использование простых мобильных шейдеров дает прирост производительности от 10 до 30%, по сравнению со стандартными шейдерами. Создание эффективных шейдеров – важная часть оптимизации графики для Android, и Shader Graph помогает в этом, если использовать его правильно.

Оптимизация шейдеров: Mobile/Unlit, использование масок

Для Android устройств, таких как Samsung Galaxy A52, при оптимизации шейдеров нужно использовать специализированные Mobile и Unlit шейдеры. Mobile шейдеры оптимизированы для мобильных GPU, и они включают в себя более простые модели освещения, которые не требуют больших вычислительных затрат. Unlit шейдеры не используют освещение вообще, что является оптимальным выбором для 2D игр или эффектов, которые не зависят от освещения. Использование Mobile или Unlit шейдеров дает заметный прирост производительности по сравнению с более сложными Lit шейдерами, особенно если освещение не является важной частью графики.

Маскирование – эффективный способ создания визуальных эффектов, таких как затенение или выделение, без сложных вычислений. В Shader Graph можно использовать маски, основанные на текстурах или простых градиентах. Вместо сложных эффектов, которые требуют вычислений для каждого пикселя, маскирование позволяет применять эффекты только в определенных областях. Это уменьшает нагрузку на GPU, и ускоряет рендеринг. Используйте Texture Mask для создания масок на основе текстур, или Gradient Mask для создания масок на основе градиентов.

При создании шейдеров, используйте Shader variants для того, чтобы шейдер мог принимать несколько вариантов, в зависимости от условий. Например, один вариант шейдера для персонажа, а другой для заднего плана. По статистике, использование Unlit шейдеров и маскирования может дать прирост производительности от 15 до 35% в зависимости от сложности шейдера. Оптимизация шейдеров – обязательный шаг для плавного рендеринга на Android.

Оптимизация шейдеров: сокращение количества текстурных сэмплов

На Samsung Galaxy A52 и других мобильных устройствах, текстурные сэмплы — одна из самых ресурсоёмких операций. Каждый раз, когда шейдер обращается к текстуре для получения цвета, это требует времени. Поэтому, оптимизация шейдеров включает в себя сокращение количества текстурных сэмплов. Использование текстурных атласов позволяет сократить количество необходимых текстурных сэмплов, так как все данные находятся в одном месте. Снижение количества текстурных сэмплов не только повышает производительность, но и уменьшает потребление памяти.

В Shader Graph старайтесь использовать текстуры меньшего размера. Вместо нескольких текстур, можно использовать одну текстуру с цветовой палитрой, и получать нужный цвет по маске. Используйте UV координаты для доступа к нужной части текстуры. По возможности, используйте сгенерированные данные, такие как градиенты, вместо текстур. Если вам нужна текстура только для маскирования, используйте одноканальную (Grayscale) текстуру, а не полноценную RGB-текстуру. В Unlit шейдерах, можно обойтись вообще без текстур, используя заданный цвет.

Также стоит использовать Mipmaps для удаленных объектов, что позволяет снизить нагрузку на текстурные сэмплы. Старайтесь использовать текстуры с одинаковыми параметрами сжатия, чтобы их можно было забатчить. Сокращение количества текстурных сэмплов на 20-40% может дать прирост в FPS на 5-20%, в зависимости от сложности шейдеров и проекта в целом. Регулярно анализируйте шейдеры с помощью Unity Profiler, чтобы отслеживать влияние текстурных сэмплов на производительность.

Оптимизация текстур в Unity для Android

Оптимизация текстур крайне важна для Android, особенно на Samsung Galaxy A52.

Форматы текстур: ETC2, ASTC и их влияние на производительность

Выбор формата текстур – важный шаг в оптимизации графики для Android, особенно на Samsung Galaxy A52. Основные форматы, которые нужно рассмотреть, это ETC2 и ASTC. ETC2 (Ericsson Texture Compression 2) — это стандартный формат для Android, который поддерживается большинством устройств. Он обеспечивает хорошее сжатие и приемлемое качество. ETC2 — это хороший выбор для большинства игр, так как он является наиболее совместимым. Однако, ETC2 может не давать наилучшего качества сжатия в некоторых случаях.

ASTC (Adaptive Scalable Texture Compression) – более современный формат, который обеспечивает более высокое качество сжатия при меньшем размере файла, чем ETC2. ASTC позволяет гибко настраивать степень сжатия и качество, что позволяет подобрать оптимальный баланс между качеством и производительностью. Однако, не все Android устройства поддерживают ASTC, поэтому нужно быть осторожным при его использовании. На Samsung Galaxy A52 поддерживается ASTC, но для более широкой совместимости лучше использовать ETC2 по умолчанию, и переходить на ASTC в случае необходимости.

В Unity, вы можете настроить формат сжатия для каждой текстуры отдельно. Для большинства текстур лучше выбрать ETC2, а для особо важных текстур, которые требуют лучшего качества, можно выбрать ASTC. Использование сжатых форматов текстур может уменьшить размер приложения на 10-30%, а также ускорить загрузку и уменьшить использование памяти. При выборе формата, всегда тестируйте ваше приложение на реальном устройстве.

Использование mipmaps и компрессии текстур

MIPMAPS — это предварительно сгенерированные версии текстуры разных размеров, которые Unity автоматически выбирает в зависимости от расстояния до камеры. Это позволяет уменьшить нагрузку на GPU при отрисовке удаленных объектов. Без mipmap, GPU будет отрисовывать полноразмерную текстуру даже если она очень маленькая на экране, что сильно нагружает систему. Для Android устройств, таких как Samsung Galaxy A52, использование mipmaps является обязательным, так как это помогает существенно повысить производительность. В настройках текстуры в Unity, нужно включить опцию “Generate Mip Maps”.

Компрессия текстур – это процесс уменьшения размера текстурных данных, с минимальными потерями качества. Это не только уменьшает размер приложения, но также и уменьшает потребление памяти и ускоряет загрузку. Unity поддерживает разные форматы компрессии, такие как ETC2 и ASTC (о которых мы уже говорили). При выборе формата компрессии, нужно руководствоваться требованиями качества и производительностью. Для большинства текстур хорошо подходит формат ETC2. Для особо важных текстур можно использовать ASTC.

Использование mipmap и компрессии, в совокупности, могут дать очень большой прирост производительности. Это также влияет на размер приложения, что важно для мобильных устройств. Статистика показывает, что использование mipmaps может дать прирост до 10-15% FPS, а также уменьшить размер приложения на 20-40%, в зависимости от количества и размера текстур. Всегда нужно проводить тесты и анализ, чтобы подобрать оптимальные настройки. При использовании компрессии, нужно убедиться что качество текстур остается приемлемым. вложения

Атласы текстур для уменьшения draw calls

Атласы текстур — это один из наиболее эффективных способов уменьшения draw calls. Вместо использования множества отдельных текстур, вы собираете их в один большой атлас. Это уменьшает количество переключений текстур при отрисовке объектов, и тем самым уменьшает нагрузку на GPU. Для Android устройств, таких как Samsung Galaxy A52, использование атласов текстур является критически важным для оптимизации производительности, особенно в 2D играх. Можно использовать Unity Sprite Packer для автоматического создания атласов.

Когда несколько спрайтов или моделей используют один атлас текстур, то их отрисовка может быть объединена в один draw call, если они используют один и тот же материал. Это дает существенный прирост производительности. При создании атласов, нужно внимательно следить за тем, чтобы все текстуры были одного формата сжатия, и имели одинаковые настройки. Используйте сжатие ETC2 или ASTC для атласов, в зависимости от требований проекта и поддержки устройства. Оптимальный размер атласа 2048×2048 или 4096×4096.

Также, можно использовать текстурные массивы, что является более современной заменой атласам текстур, и это дает больше возможностей для динамической работы с текстурами. Статистически, использование атласов может уменьшить количество draw calls на 30-50%, а прирост FPS может составить от 10 до 30%, в зависимости от проекта и его сложности. Всегда проверяйте производительность с помощью Unity Profiler, чтобы убедиться в эффективности оптимизации.

Оптимизация 3D моделей – важный этап для Android, и особенно на Samsung Galaxy A52.

Оптимизация моделей и геометрии

Оптимизация 3D моделей – важный этап для Android, и особенно на Samsung Galaxy A52.

VK
Pinterest
Telegram
WhatsApp
OK
Прокрутить наверх