Оптимизация для Android и iOS устройств

Раздел, посвящённый самому важному - скорости.

Оптимизация для Android и iOS устройств

Сообщение PaXLiCh 14 апр 2012, 19:20

Проблема такая:
Рисую спрайтами простую сцену из 5-10 статичных и 10-15 динамических объектов. В каждом объекте по 4 спрайта (простой меш из 2 треугольников). На каждом спрайте анимированный материал с текстурой 64*256. Все спрайты анимированы с разной скоростью. Текстуры с альфаканалом импортируются с мипмапами. Шейдер Mobile transparent vertex color из стандартных ассетов для мобильников. Rendering path = VertexLit, Fixed Timestep = 0.02. Света нет, теней нет, тумана нет. Камера ортографическая с размером 3 и глубиной 10. Весь код на шарпе.
В редакторе фпс 800-1000, Draw Calls = 60, всё плавненько красивенько идеальненько, на андроиде с hvga экраном и ARMv6 едва доходит до 30.

Помогите поднять фпс на мобилках.

(после обновления с 3.4.0 на 3.5.0 фпс на андроиде проседает сильнее на 4-8 кадров, всё стало дёрганым)
всем привет, кто помнит blitz.pp.ru
PaXLiCh
UNец
 
Сообщения: 19
Зарегистрирован: 12 авг 2011, 12:22

Re: Оптимизация для Android и iOS устройств

Сообщение Battle Angel Alita 14 апр 2012, 19:38

5*10*4*64*256 = 3276800 пикселей
По моему у тебя большой owerdraw.

Какое устройство? Скрин?
Мозг рака
Изображение
Аватара пользователя
Battle Angel Alita
UNIверсал
 
Сообщения: 476
Зарегистрирован: 25 ноя 2009, 14:52

Re: Оптимизация для Android и iOS устройств

Сообщение PaXLiCh 14 апр 2012, 19:54

экран HVGA 320 x 480
видео Adreno200
проц MSM7227 600Мгц (разогнан до 800)
оператива 512 (~350 свободно)

на самом деле ситуация немного проще. спрайтов в объекте обычно только 2, один из них - простая текстура 256x256x32 (клонирована), на другом анимация 1024x128x32.
owerdraw около 1000000


3276800 забавно, что получилось такое хорошее число, его бы поделить на 100 и была бы частота часового кварцевого резонатора
всем привет, кто помнит blitz.pp.ru
PaXLiCh
UNец
 
Сообщения: 19
Зарегистрирован: 12 авг 2011, 12:22

Re: Оптимизация для Android и iOS устройств

Сообщение Battle Angel Alita 14 апр 2012, 20:28

У текстур случаем мип-мапинг не выключен?
Надо снижать овердро.
Мозг рака
Изображение
Аватара пользователя
Battle Angel Alita
UNIверсал
 
Сообщения: 476
Зарегистрирован: 25 ноя 2009, 14:52

Re: Оптимизация для Android и iOS устройств

Сообщение PaXLiCh 14 апр 2012, 21:01

мипмап включен.
уменьшение разрешения текстур - практически не помогает.
всем привет, кто помнит blitz.pp.ru
PaXLiCh
UNец
 
Сообщения: 19
Зарегистрирован: 12 авг 2011, 12:22

Re: Оптимизация для Android и iOS устройств

Сообщение Battle Angel Alita 14 апр 2012, 21:38

Замени все шэйдеры на мобайл/анлит, если поможет то дело в альфе.
Что делать с альфой? Думаю у тебя альфа-канал используется для того, чтобы контур спрайта был гладкий. Так воот, вместо плашек используй плоскую модель сделанную чуть меньше контура спрайта + контур с полупрозрачность для сглаживания.
Мозг рака
Изображение
Аватара пользователя
Battle Angel Alita
UNIверсал
 
Сообщения: 476
Зарегистрирован: 25 ноя 2009, 14:52

Re: Оптимизация для Android и iOS устройств

Сообщение PaXLiCh 15 апр 2012, 06:21

мобайл/анлит ? это какой? не нахожу названия похожего.
пробовал убирать альфу в шейдере - никак вообще не повлияло на фпс. да и прозрачность у меня много где используется, заменить её нечем.

не могу разобраться как влияет на работу параметр Fixed Timestep.

Нашёл главного виновника: забыл сказать про звук, музычка, играющая на фоне и переодический звук. так вот с этой музыкой фпс падает в 2 раза в новой версии юнити. а периодический звук окончательно его добивает. Load type был compressed in memory. Поменял на Decompress on load и скорость стала почти нормальной, но звук стал рваным. Никто ещё, однако, не касался оптимизации звука )
всем привет, кто помнит blitz.pp.ru
PaXLiCh
UNец
 
Сообщения: 19
Зарегистрирован: 12 авг 2011, 12:22

Re: Оптимизация для Android и iOS устройств

Сообщение Belfegnar_ 15 апр 2012, 09:15

То есть миллион овердро эт нормально? Что изменилось после отключения альфы-то?
А вообще, хотелось бы какие-нибудь ссылочки, чтобы стать таким же умным. Типа в каких случаях что лучше использовать, чтобы выжать максимум из 2д приложений в unity3d. Скажем 2000 "спрайтов" на экране, каждый со своей анимацией, пусть с одним материалом на всех. Реально? Какие подводные камни?(с)
Оverdraw во что упирается? В проц, видеокарту, ее память или в озу? А альфа? Почему справка не рекомендует использовать альфа тест? Хотя казалось бы, отбросил прозрачное и радуйся.
А мип маппинг зачем, если расстояние до камеры не меняется?
Видел где-то тот же совет про плоскую модель вместо плашки с прозрачностью, но там автор просто написал, мол вот, лучше использовать (понятно, что пытаемся выиграть за счет уменьшения/отказа от альфы, но что таким образом пытаемся обойти, чью слабость? а разве увеличение полигонов, это хорошо?). А если анимация у нас в текстуре, то все, не вариант? Или шевелить вершинами и менять uv?
Чего-то где-то по разным углам гугла раскидали, да все как-то намеками, намеками.. В итоге и в голове так же все по разным углам у людей) Дайте удочку, пожалуйста, чтоб самому рыбу ловить, вместо советов, типа добавь тут, отрежь там. Вот автор что-то сделал по советам, а что понял-то?)))
п.с. прошу прощения, что так бесцеремонно влез с ногами в тему
Belfegnar_
UNIт
 
Сообщения: 112
Зарегистрирован: 22 ноя 2010, 14:08

Re: Оптимизация для Android и iOS устройств

Сообщение PaXLiCh 15 апр 2012, 10:57

милионов овердров, как оказывается, нормально, хотя на форумах и не замечал такого загона по ним. замена шейдеров с прозрачностью на самые простые тоже дала прирост фпс всего 2-4 кадра но испоганила картину капитально.
мипмапы нужны для того, чтобы я мог использовать текстуру одного размера, скажем 256x256, для разных экранов: и для iPad и для iPhone и для прочих iBidlo. Если их не использовать, то на hvga и wxvga спрайт будет выглядеть грубо, ступеньками и никакая альфа уже не поможет, а с ними будет выбран мип "оптимальный для отображения". Плоские модели использовать нельзя из-за специфичной анимации. Альфа тест годится если у тебя много всякой прозрачности, большие дырки, иначе это просто лишняя проверка.

тут где-то были ссылки на офф сайте с про оптимизацию, но там опять же всё невнятно, пересказывают очевидные вещи, а про конкретные проблемы - ни слова. долгое время выпытывал у гугла про эту оптимизацию, а народ только цитировал документацию.

а все дело оказалось вообще в звуке. переделал аудиосемплы, поменял настройки загрузки, увеличил размер буффера. теперь на самодельном шейдере и простом менеджере спрайтов удалось собрать хорошую сцену, на моём андроиде фпс 80-85 кадров.
ищу где бы ещё сэкономить.
всем привет, кто помнит blitz.pp.ru
PaXLiCh
UNец
 
Сообщения: 19
Зарегистрирован: 12 авг 2011, 12:22

Re: Оптимизация для Android и iOS устройств

Сообщение Battle Angel Alita 15 апр 2012, 12:44

Belfegnar_
>А вообще, хотелось бы какие-нибудь ссылочки, чтобы стать таким же умным.
Тут в презенташках очень хорошо всё рассказано.
http://blogs.unity3d.com/2012/03/23/sha ... ple-level/
http://blogs.unity3d.com/wp-content/upl ... te2011.pdf
http://blogs.unity3d.com/wp-content/upl ... ph2011.pdf

OpenGL Red Book
OpenGL Orange Book

Это база, правда немного устаревшая(дисплей-листы).

Ещё хорошо-бы разобраться в разных принципах рендеринга - Image Mapping Rendering (тегра и всё писишное), Tiled Rendering(мали, адрено), Tiled-Deferred Rendering(повер вр)

>Оverdraw во что упирается? В проц, видеокарту, ее память или в озу?
Или в производительность шэйдерных блоков - медленно считаем, или в пропускную способность памяти - посчитали, а записываем в память медленно.
Это называется pixelrate/fillrate, а overdraw это сколько раз мы перерисовали один и тот-же пиксель.

>А альфа?
Потому-что чтоб нарисовать полупрозрачную текстуру надо не только посчитать текущий пиксель, но и вытащить из фронт-буффера тот пиксель, что находится под ним, сблендить их и записать обратно.

>Почему справка не рекомендует использовать альфа тест?
Это для PowerVR. У них железо слишком умное - делает отсечение невидимых поверхностей по граням полигонов. Соответственно когда включён альфа-тест, то "грань" определяется этим альфа-тестом, и все те оптимизации перестают работать.

>А мип маппинг зачем, если расстояние до камеры не меняется?
Если как у ОП'а, текстура 256*256 отображается на экранчике в допустим квадрат 40*40 пикселей, то выборка из текстуры происходит через каждые ~6 пикселей и от этого текстурный кэш работает очень неэффективно.

>но что таким образом пытаемся обойти, чью слабость?
Маленькую пропускную способность памяти в основном.
>а разве увеличение полигонов, это хорошо?).
Это в принципе оправдано. Хоть одна вершина и считается в 3-4 раза медленней чем пиксель, но вершин обычно в 10-100 раз меньше чем пикселей.


PaXLiCh
>а все дело оказалось вообще в звуке.
Кто-ж мог знать :ymhug:
Мозг рака
Изображение
Аватара пользователя
Battle Angel Alita
UNIверсал
 
Сообщения: 476
Зарегистрирован: 25 ноя 2009, 14:52

Re: Оптимизация для Android и iOS устройств

Сообщение Syberex 16 апр 2012, 15:27

Battle Angel Alita спасибо за инфу ^:)^
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: Оптимизация для Android и iOS устройств

Сообщение Belfegnar_ 17 апр 2012, 07:24

Battle Angel Alita
Спасибо. Начинает проясняться.
Ещё хорошо-бы разобраться в разных принципах рендеринга - Image Mapping Rendering (тегра и всё писишное), Tiled Rendering(мали, адрено), Tiled-Deferred Rendering(повер вр)

хм.. то есть мало целиться в платформу, нужно целиться в конкретное устройство, или это погоня за излишней оптимизацией? Юнити как-то себя проявляет в этом вопросе, или оставляет все это на нашей совести во славу мультплатформенности/универсальности?
Скажем 2000 "спрайтов" на экране, каждый со своей анимацией, пусть с одним материалом на всех. Реально? Какие подводные камни?(с)

а?))
Belfegnar_
UNIт
 
Сообщения: 112
Зарегистрирован: 22 ноя 2010, 14:08

Re: Оптимизация для Android и iOS устройств

Сообщение Battle Angel Alita 17 апр 2012, 09:02

>или это погоня за излишней оптимизацией?
Главное - не юзать альфа тест, остальное - если пишешь эксклюзив.

>а?))
Какого размера спрайты, что за анимация, материал с альфой/без, реакция мира на спрайты?
Принципиально - да.
Мозг рака
Изображение
Аватара пользователя
Battle Angel Alita
UNIверсал
 
Сообщения: 476
Зарегистрирован: 25 ноя 2009, 14:52

Re: Оптимизация для Android и iOS устройств

Сообщение Syberex 17 апр 2012, 09:36

Что есть Альфа-тест? :-?
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: Оптимизация для Android и iOS устройств

Сообщение Belfegnar_ 17 апр 2012, 16:38

Syberex писал(а):Что есть Альфа-тест? :-?

Это проверка альфа значения пикселей специальной функцией. Пиксели, не прошедшие проверку, дальше не обрабатываются. Не позволяет правильно отображать полупрозрачные объекты.
Альфа-тестирование производится раньше альфа-блендинга, так что, при наличии больших полностью прозрачных областей текстуры, вариант (альфа-тест + альфа-бленд) будет быстрее альфа-бленда. Но эт на нормальных видеокартах :D
Какого размера спрайты, что за анимация, материал с альфой/без

60 на 70 пикселей (для разрешения 540х960), анимация заключается в изменении uv вершин, текстура - атлас из таких 60х70 изображений, процентов 80 текстуры - полностью прозрачные.
что имеется ввиду под реакцией мира на спрайты?
Belfegnar_
UNIт
 
Сообщения: 112
Зарегистрирован: 22 ноя 2010, 14:08

След.

Вернуться в Оптимизация

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3