Проблема с нагревом приложения GearVR

Я создаю свое первое VR-приложение для Gear VR. Это мультимедийное приложение, которое я создаю для просмотра 360-градусных видео.

Я использую Unity 3D для создания приложения, и я реализовал все функции своего приложения, но столкнулся с одной серьезной проблемой.

Проблема: телефон нагревается после использования в течение 10-12 минут: я использую Samsung s6 для тестирования, из-за чего я не могу смотреть длительные видео в своем приложении. Я очень хорошо знаю, что при переполнении стека мы обсуждаем в основном методы кодирования, а не такие проблемы, но мой вопрос заключается в том, нужно ли мне следовать каким-либо методам кодирования, чтобы избежать этой проблемы.

Я уже протестировал его, включив режим разработчика на устройстве и установив сервисы Gear VR для проверки уровня загрузки ЦП, но мой результат будет таким же, когда я протестирую его для других приложений, доступных в магазине (другие приложения играют дольше, чем я).

Может ли кто-нибудь указать мне правильное направление, чтобы я мог избавиться от этой проблемы? Ниже приведены несколько деталей:

Hardware used: Gear VR (white version) + S6.
Software used: Unity3d with third party movie player
Feature: User is made to download/stream the video from URL video size varies from (100MB - 1GB).
Issue: Device gets heated within 5-6 minutes.
Solution tried: Lower down quality settings, Deactivating Anti aliasing, Writing scripts to lower down render scale & render viewport of the camera.

person Gaurav    schedule 17.08.2017    source источник
comment
Я не уверен, что вы найдете решение для этого. Ни здесь, ни где-либо. Любое приложение, которое много требует от устройства, например упомянутая вами виртуальная реальность, заставит телефон нагреваться. Вы можете прочитать о некоторых причинах здесь, но мне кажется, что решения нет: indiatoday.intoday.in/technology/story/   -  person Ignacio Alorre    schedule 17.08.2017
comment
Причина, по которой я беспокоюсь об этом, заключается в том, что другое приложение, доступное в магазине, работает довольно хорошо по сравнению с моим приложением. Например, их приложение работает не менее 25 минут, тогда как мое работает 5-6 минут, а у моего меньше рендеринга по сравнению с ними.   -  person Gaurav    schedule 17.08.2017


Ответы (2)


Основываясь на вашем комментарии, если вы подозреваете, что ваш телефон нагревается быстрее, когда вы запускаете свое приложение, чем когда вы запускаете другое приложение из магазина, вы можете быть правы, и проблема может быть в вашем коде.

Теперь одна из причин, по которой мобильный телефон нагревается, когда вы играете в игры, связана с более высокой нагрузкой на процессор и графический чип.

Так что вы можете попробовать определить, какие задачи в вашем VR-приложении требуют больше всего вычислений, чтобы вы могли изменить их, улучшить или напрямую удалить. Здесь я перечислю некоторые приемы повышения производительности приложений виртуальной реальности в Unity 5, которые могут вас заинтересовать.

Прежде всего, некоторые показатели производительности, которые вы должны попробовать:

  • 50 вызовов отрисовки на глаз. Unity 5 более точно называет их вызовами setpass.
  • Менее 50-100 тысяч вершин и 50-100 тысяч полигонов в вашей сцене.

1 – Статическая пакетная обработка

Вероятно, в вашей сцене есть тонна статической геометрии, такой как стены, стулья, источники света и сетки, которые никогда не двигаются. Отметьте их как статические в редакторе. Обязательно пометьте их как статическую карту освещения, чтобы получить запеченные текстуры карты освещения. Вместо вызова отрисовки для каждого отдельного объекта объекты, помеченные как статические, могут быть объединены в одну объединенную сетку. У статической пакетной обработки есть одно важное требование: все объекты должны использовать один и тот же материал. Если у вас есть статические стены с деревянным материалом и статические стулья со стальным материалом, стены будут объединены в один вызов отрисовки с одной комбинированной сеткой, а стулья — в отдельный вызов отрисовки с собственной отдельной сеткой.

2- Атласизация текстур

Как отмечалось ранее, каждый материал подвергается вызову отрисовки. Вы можете предположить, что для деревянной двери и стального стула могут потребоваться отдельные материалы, поскольку они используют разные текстуры. Однако, если они могут использовать один и тот же шейдер, вы можете использовать атласы текстур для создания одного материала, который могут использовать оба объекта. Атлас текстур — это просто более крупная текстура, включающая в себя все более мелкие текстуры. Вместо десятков материалов, загружающих десятки текстур, вы можете использовать один материал, загружающий только одну текстуру. Каждый объект может быть нанесен на карту для использования текстуры с разными координатами в атласе. Вы можете сделать это вручную в своем художественном конвейере, но я нашел Pro Draw Call Optimizer Хуана Себастьяна весьма полезным. Он автоматически генерирует атласы текстур и заменяет новые объекты, не вмешиваясь в ваши активы.

3 – Динамическая пакетная обработка

Перемещение нестатических объектов может быть динамически объединено в один вызов отрисовки. Я заметил, что это сильно загружает ЦП и вычисляется для каждого кадра, но это хорошая оптимизация. Это работает только с объектами с менее чем 900 вершинами, которые используют один и тот же материал. Используйте атласирование текстур, чтобы создать единый материал для ваших динамических объектов, и вы получите дешевую динамическую пакетную обработку!

4 уровня детализации

LOD Groups — дешевый способ улучшить производительность. Используйте активы с несколькими уровнями детализации и визуализируйте геометрию с более низкой детализацией для объектов, находящихся дальше от камеры. Unity может автоматически исчезать между каждым уровнем детализации по мере приближения камеры.

5 – Скорость заполнения, перерисовка и отбраковка

Это касается темы, с которой я не слишком хорошо знаком, но на которую стоит обратить внимание: уменьшение перерисовки, когда самые дальние объекты сначала отрисовываются в пиксель, перерисовывая пиксель с каждым ближайшим объектом, который впоследствии находится сверху. Это не было большой проблемой на вашем обычном дисплее ПК с разрешением 1080p, но это серьезная проблема с VR и мобильными устройствами с дисплеями сверхвысокого разрешения. Большое количество перерисовки в сочетании с большим количеством пикселей убивает вашу скорость заполнения. Фильтрация текстуры — один из ключевых ограничивающих показателей графических процессоров. Некоторые решения поставляются «из коробки» с отбраковкой окклюзии и усеченной пирамиды. Отбор усеченной пирамиды не визуализирует объекты, находящиеся за пределами усеченной пирамиды камеры. Нет смысла рендерить объекты, которых вы не видите! Отбор окклюзии позволяет избавиться от объектов, перекрытых другими объектами перед ним. Комнаты за дверью, например, могут быть полностью исключены. По умолчанию отбраковка окклюзии работает со всей вашей сценой, но правильный дизайн уровней позволит вам отсеять целые уровни вашей игры.

Группы LOD также могут отбрасывать объекты, которые находятся слишком далеко от сцены, что еще больше помогает минимизировать скорость заполнения.

Шестиуровневый дизайн

Если в вашей игре игрок путешествует из комнаты в комнату, наивным решением будет вся игра на одном уровне. Недостатком, однако, является потребление памяти. Каждый объект и материал в каждой комнате загружается в память, даже если они не видны. Поместите каждую комнату на отдельный уровень и асинхронно загрузите их разумно в коде.

7 – Асинхронная загрузка

Прежде чем игрок подойдет к двери в следующую комнату, загрузите следующий уровень. Не загружайте это синхронно с помощью Application.LoadLevel(), так как это приведет к зависанию игры при загрузке. Поскольку отслеживание головы на мгновение прекращается, это вызовет тошноту и станет ужасным опытом для игрока.

Вместо этого используйте Application.LoadLevelAsync(). Пример этого можно найти в образце Oculus Mobile SDK BlockSplosion в разделе StartupSample.cs.

8 – Запеченное освещение

Отключите тени в реальном времени! Объекты, получившие динамическое затенение, не будут объединены в пакеты, и вы понесете серьезный штраф за вызов отрисовки.

На ПК вы можете обойтись одним направленным источником света в реальном времени для получения приятных динамических теней. Большинство современных ПК могут обеспечить великолепное попиксельное затенение. Однако на мобильных устройствах вы хотите придерживаться запеченного освещения и никаких теней в реальном времени. Запеките свое освещение с жесткими и мягкими тенями в очень высоком разрешении.

9- Тени

Специально для повышения производительности мобильных устройств вернитесь к старым приемам создания теней на трехмерных объектах. Полуреалистичные тени можно смоделировать с помощью простого 2D-квадрата под вашим объектом с размытой текстурой тени.

10 – Световые датчики

Когда вы используете запеченное освещение, ваши динамические объекты выглядят неуместно, в то время как статические объекты выглядят великолепно. Вы можете использовать световые зонды для дешевой имитации динамического освещения ваших динамических объектов.

Зонды света — это запеченные кубические карты, которые хранят информацию о прямом, непрямом и даже испускаемом свете в различных точках вашей сцены. Когда динамический объект движется, он интерполирует выборки ближайших датчиков света, чтобы приблизить освещение в этом конкретном месте. Это дешевый способ имитации реалистичного освещения динамических объектов без использования дорогостоящих источников света в реальном времени.

11- Избегайте прозрачных и многокомпонентных объектов

Такие объекты, как стеклянные прозрачные окна, в которых используются прозрачные шейдеры, очень дороги. Существует обычная практика добавления реализма стенам с помощью прозрачного материала с текстурой пыли или ржавчины вместе с отдельным базовым диффузным материалом. Это многокомпонентное альфа-смешивание дорого; каждый материал добавляет вызов отрисовки! Обратите внимание, однако, что несколько текстур не являются проблемой; использование нескольких отдельных материалов дорого. Используйте один материал и шейдер, который может смешивать несколько текстур с альфа-смешением вместо нескольких отдельных материалов.

12 – визуализаторы сетки со скинами

Визуализаторы сетки со скинами обычно используются для персонажей с анимированными ригами, обеспечивая реалистичную деформацию сетки с использованием физики (тела тряпичной куклы) или пользовательской анимации (ходьба, прыжок и т. д.).

Печальные новости: рендереры мешей со скинами не группируются. Каждый персонаж в вашей сцене может создать несколько вызовов отрисовки для каждого глаза. Я пока не знаю, как это решить.

Источник: https://blog.bigscreenvr.com/12-performance-tricks-for-optimizing-vr-apps-in-unity-5-9849bb6aefa7

person Ignacio Alorre    schedule 17.08.2017
comment
Попробую и дам вам знать, если возникнут вопросы. - person Gaurav; 17.08.2017

Прежде чем вы попробуете какие-либо из приведенных выше предложений, сначала определите, привязано ли ваше приложение к ЦП или ГП. Это можно увидеть в профилировщике Unity3D.

Если процессор, вы можете проверить вызовы отрисовки, динамическую пакетную обработку и т. д.

Если GPU, проверьте шейдеры, скорость заполнения текстур и т. д.

Сделайте это заранее, чтобы оптимизировать ресурсы и время разработки в тех областях, которые приносят наибольшую отдачу.

person BoHuang    schedule 13.12.2017