Проблема с оптимизацией игры. Выдает 5 - 10 фпс. Unity3D
|
|
killing002 | Дата: Воскресенье, 10 Февраля 2019, 20:47 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| Всей хай..
Делаю 3д игру под мобилки. Не закончив проект до конца, задумался об оптимизации. Решил воспользоваться удаленным профилированием. Сбилдил игру под андроид, запустил. Игра тормозила жутко. 5- 10 фпс. Смотрю на профайлер, а именно на CPU Usage. Проблема в PlayerLoop --> PostLateUpdate.FinishFrameRendering --> Gfx.WaitForPresent. Он занимал 90% .. Я так понял, что проблема в рендеринге. Решил проверить. Скрыл в сцене все источники света, всю геометрию скрыл, скрыл скрипт пост-эффектов на камере. Сбилдил ее, экран телефона был полностью черный. Смотрю на профайлер, добавилось 20 - 25 фпс, и Gfx.WaitForPresent снизился до 50 - 60%. С чем это может быть связано?
123
|
|
| |
drcrack | Дата: Воскресенье, 10 Февраля 2019, 22:10 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| точно не vsync?
|
|
| |
killing002 | Дата: Воскресенье, 10 Февраля 2019, 22:17 | Сообщение # 3 |
почетный гость
Сейчас нет на сайте
| Да,я слышал, что проблема возможна из-за Vsync. Поэтому первое, что я сделал, это выключил Vsync. Так, что , к сожалению, проблема не в этом.
123
|
|
| |
drcrack | Дата: Воскресенье, 10 Февраля 2019, 22:20 | Сообщение # 4 |
старожил
Сейчас нет на сайте
| возможно ты его выключил в одном профиле, а на мобиле реально используется другой
вот тут список проверь
|
|
| |
killing002 | Дата: Воскресенье, 10 Февраля 2019, 22:51 | Сообщение # 5 |
почетный гость
Сейчас нет на сайте
| И правда, использовался другой профиль. Я все настроил, сбилдил вновь. И - отлично, эта проблема исчезла. Но ей на смену пришла другая. WaitForTargetFPS. Занимает 70 - 80%.. В гугле советовали отключать vsync, ....
123
|
|
| |
drcrack | Дата: Воскресенье, 10 Февраля 2019, 23:23 | Сообщение # 6 |
старожил
Сейчас нет на сайте
| https://docs.unity3d.com/ScriptR....te.html On mobile platforms the default frame rate is less than the maximum achievable frame rate due to need to conserve battery power. Typically on mobile platforms the default frame rate is 30 frames per second.
Сообщение отредактировал drcrack - Воскресенье, 10 Февраля 2019, 23:24 |
|
| |
killing002 | Дата: Воскресенье, 10 Февраля 2019, 23:48 | Сообщение # 7 |
почетный гость
Сейчас нет на сайте
| Из этой статьи я понял, что достигнуть более чем 30 фпс , не получится. Но спешу огорчить. Это тоже не помогло. В гугле сидел часов 5. Эту проблему не могут решить уже 4 года. Кто-нибудь способен это сделать?
123
Сообщение отредактировал killing002 - Понедельник, 11 Февраля 2019, 05:28 |
|
| |
drcrack | Дата: Понедельник, 11 Февраля 2019, 05:28 | Сообщение # 8 |
старожил
Сейчас нет на сайте
| Почему? В любом скрипте где-нибудь в Start сделай
Код Application.targetFrameRate = 60;
|
|
| |
killing002 | Дата: Понедельник, 11 Февраля 2019, 06:23 | Сообщение # 9 |
почетный гость
Сейчас нет на сайте
| Благодарю вас, за ваш энтузиазм. Вашу статью перепрочел раз 20. Перепробовал все. А именно: программно выключал vsync ( QualitySettings.vSyncCount = 0), и прописывал следом: (Application.targetFrameRate = 60). В эдиторе что то происходит но не на телефоне. Спустя часов 10, я нашел некую связь между уровнями quality , если поставить на Very Low, то WaitForPresent сразу исчезает. Но это только в редакторе, опять же при профилирование на андроид - без изменений.
123
|
|
| |
drcrack | Дата: Понедельник, 11 Февраля 2019, 06:36 | Сообщение # 10 |
старожил
Сейчас нет на сайте
| это может быть фишка твоего телефона например на самсунгах есть https://play.google.com/store....n&hl=en попробуй другой телефон если не получится на своем разблокировать фпс
|
|
| |
killing002 | Дата: Понедельник, 11 Февраля 2019, 18:33 | Сообщение # 11 |
почетный гость
Сейчас нет на сайте
| Хм.. Я после ваших слов, об смене телефона, я стал задумываться - а правильно ли я использую удаленное профилирование(если вообще это можно так назвать). Я опишу, как я тестирую билд. Подключение к pc происходит через usb. Собираю билд, предварительно поставив галочку Development Build. Игра билдится автоматически загружается на телефон и автоматически запускается. Как только запустилось приложение, я захожу в профайлер в юнити. И в верхнем меню профайлера, вместо Editor выставляю AndroidPlayer. Поле чего запускается профайлинг. Как я понимаю, это профайлинг приложения, используя ресурсы телефона, а не pc. Может, я что то не так делаю?
123
|
|
| |
drcrack | Дата: Понедельник, 11 Февраля 2019, 19:34 | Сообщение # 12 |
старожил
Сейчас нет на сайте
| Без понятия, я однажды сделал игру где кубик ездит по террейну, этим 30-минутным проектом мой опыт разработки мобильных игр и ограничивается Попробуй сделать релизный билд и просто поставить счетчик фпс, без профайлера Ну и все-таки найди другой телефон и протести на нем
|
|
| |
BrightSpot | Дата: Понедельник, 11 Февраля 2019, 20:06 | Сообщение # 13 |
заслуженный участник
Сейчас нет на сайте
| Профайлер обычно дает нагрузку сам по себе... соответственно если все выкл... то в % будет "хорошая" цыфра... 50+(на бюджетке) фпс выжать не сложно если руку набить: - Свет запеченный + 1 директ(mixed mode) для тени юнитов(если их не много, иначе замена чем то менее нагрузочным по типу плашек с пятном тени) - Настройки графики режем попиксельный свет до 1, сглаживание реалтайм отражения, в тенях: каскады, дистанцию +(желательно лов рез и онли хард), остальные режем по максимуму... - про постобработку нужно забыть... - шейдеры онли мобайл версии(и их модификации, если есть опыт написания) - по моделям лоу(мид)поли(на среднем тел. в камере должно быть <100к трисов) с НОРМАЛЬНЫМИ материаллами(2 шт на модель максимум).(в идеале 2-3 тектур атласа(2к) на всю сцену) + материаллы с нормалями и прочими наворотами юзаеть только по строгой необходимости(лучше в текстуре отрисовать по максимуму)... - анимация: чем меньше костей тем лучше(но особо можно не заморачиваться). - физика(только если есть опыт мега оптимизации) - объекты(пулы избавят от микрофризов) - стандарт.Террейн = смерть фпс... - по коду(только через профайлер) - UI(в идеале без UI но по его оптимизации можно отдельную статью писать) - так же нужно не забывать про компресию тектур, содержание типизированого скейла(для более кач-ного батчинга), окуратнее с партиклами и т.д и т.п=) А так добро пожаловать в 3д под мобилу
Более мощный компьютер глючит быстрее и точнее.
|
|
| |
killing002 | Дата: Вторник, 12 Февраля 2019, 11:10 | Сообщение # 14 |
почетный гость
Сейчас нет на сайте
| Спасибо всем, а именно мсье BrightSpot, все урезал, и фпс твердо 70 - 90.
123
|
|
| |
BrightSpot | Дата: Вторник, 12 Февраля 2019, 11:19 | Сообщение # 15 |
заслуженный участник
Сейчас нет на сайте
| Цитата killing002 ( ) 70 - 90. или телефон у тебя странный или профайлер бажит... не слышал что дроиды могут выше 60 выдавать=))
Более мощный компьютер глючит быстрее и точнее.
|
|
| |
killing002 | Дата: Вторник, 12 Февраля 2019, 18:54 | Сообщение # 16 |
почетный гость
Сейчас нет на сайте
| Блин.. , хороший вопрос. Я тоже читал, что мобилки ограничены разрешением экрана. И более 60 фпс достигнуть невозможно. Но по крайней мере пики в профайлере не достигали линии в 60 фпс. И поэтому я сделал такой вывод.
123
|
|
| |
ArtemS | Дата: Пятница, 15 Февраля 2019, 15:44 | Сообщение # 17 |
почетный гость
Сейчас нет на сайте
| Цитата BrightSpot ( ) - по моделям лоу(мид)поли(на среднем тел. в камере должно быть <100к трисов) с НОРМАЛЬНЫМИ материаллами(2 шт на модель максимум).(в идеале 2-3 тектур атласа(2к) на всю сцену) + материаллы с нормалями и прочими наворотами юзаеть только по строгой необходимости(лучше в текстуре отрисовать по максимуму)...
слышал, что на сцене не больше 15к трисов должно быть со всех объектов, врут ?Добавлено (15 Февраля 2019, 15:45) --------------------------------------------- и что развертка не больше 512*512
хуяк, хуяк и в продакшн
|
|
| |
drcrack | Дата: Пятница, 15 Февраля 2019, 16:33 | Сообщение # 18 |
старожил
Сейчас нет на сайте
| Цитата слышал, что на сцене не больше 15к трисов должно быть со всех объектов, врут ? Добавлено (15 Февраля 2019, 15:45) --------------------------------------------- и что развертка не больше 512*512 эти цифры не имеют никакого смысла 15к небольших непрозрачных трисов обычной геометрии и 15к полноэкранных полупрозрачных трисов дадут разницу в фпс 1000000% 4 материала с текстурами 512х512 будут медленней чем 1 материал с атласом 1024х1024 ну так и зачем все в кучу мешать? оптимизировать нужно конкретные этапы рендеринга по одному а не суммарное количество полигонов считать
Сообщение отредактировал drcrack - Пятница, 15 Февраля 2019, 16:34 |
|
| |
BrightSpot | Дата: Пятница, 15 Февраля 2019, 16:46 | Сообщение # 19 |
заслуженный участник
Сейчас нет на сайте
| Цитата drcrack ( ) 15к небольших непрозрачных трисов обычной геометрии и 15к полноэкранных полупрозрачных трисов дадут разницу в фпс 1000000% но тут больше не от прозрачности зависит, а от шейдеров, которые используются... просто разница в полупрозрачности и обычном дифузе огромная... но если юзать шейдер полупрозрачности на непрозрачных объектах тоже просадит фпс тупо из-за лишних телодвижениях в шейдере... привязываться к цифрам тоже нет особого смысла... от телефона к телефону разница значительная... выше я написал пример моментов для оптимизации для бюджетного телефона: !> 1гб оперативы простенький процак и т.п... На флагманах совсем другие ограничения... Единственное, что для всех систем пока общее - это слабость к пиксельным шейдерам...
Более мощный компьютер глючит быстрее и точнее.
|
|
| |
drcrack | Дата: Пятница, 15 Февраля 2019, 17:24 | Сообщение # 20 |
старожил
Сейчас нет на сайте
| Цитата но тут больше не от прозрачности зависит, а от шейдеров, которые используются... "полупрозрачный трис" означает "трис с полупрозрачным шейдером", очевидно же каким еще образом он может быть полупрозрачным?)
Цитата тоже просадит фпс тупо из-за лишних телодвижениях в шейдере... но все же лучший способ убить в ноль фпс на мобиле это overdraw и проще всего этого достичь с использованием полупрозрачных шейдеров ну типо дым от костра на пол экрана и другие системы частиц
|
|
| |