Почему шейдер Diffuse так сильно тормозит на iPad

Шейдеры и все-все-все.

Re: Почему шейдер Diffuse так сильно тормозит на iPad

Сообщение Paul Siberdt 26 ноя 2010, 20:36

И пользуйте не альфу, а модуляцию... тогда тормозов практически не останется.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Почему шейдер Diffuse так сильно тормозит на iPad

Сообщение OlegGel 29 ноя 2010, 14:49

Мда...спасибо, советчики... Пришлось самому разбираться с синтаксисом шейдеров юнити. Написал шейдер
Процедура такая - используем его на материале проектора, для текстуры используем рисунок в RGB без альфа канала - белый цвет будет смешиваться и освещать спрайт бэкраунда, чем темнее тем непрозрачней будет результат, черный - это черный. Можно делать фонарики какие угодно, форма и цвет - всё что придумаем. С этим шейдером тормозный дифьюз шейдер на спрайте вобще не нужен, освещение также не надо. Можно использовать по выбору Vertex Colored или VertexLit. Производительность с 6 поднялась до 26 - что нормально для айпада.
Кому интересно вот код, простой как 5 копеек

Синтаксис:
Используется glsl
Shader "New Light"
{  
        Properties
        {  
                _Color ("Main Color", Color) = (1,1,1,1)        
                _ShadowTex ("Cookie", 2D) = "" { TexGen ObjectLinear }
        }
 
        Subshader
        {
                Pass
                {    
                        ZWrite off
                        Fog { Color (0, 0, 0) }
                        Color [_Color]
                        ColorMask RGB
                        Blend DstColor Zero
                        Offset -1, -1
                        SetTexture [_ShadowTex]
                        {
                                combine texture
                                Matrix [_Projector]
                        }
       
                }
        }
}
 
OlegGel
UNIт
 
Сообщения: 56
Зарегистрирован: 09 ноя 2010, 00:31

Re: Почему шейдер Diffuse так сильно тормозит на iPad

Сообщение gnoblin 29 ноя 2010, 20:48

Для айпада более нормально 60 ).
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Почему шейдер Diffuse так сильно тормозит на iPad

Сообщение OlegGel 29 ноя 2010, 21:20

А, да уточнение, под FPS я имею ввиду то число, которое показывает скрипт с вики(может просто он неправильно работает?)
http://www.unifycommunity.com/wiki/inde ... sPerSecond
Этот скрипт у меня в пустой сцене на айпаде показывает 30 фпс, в этих единицах и считаю. На 26 я тормозов вобще не вижу, так что если нормировать к 60, то мой шейдер позволяет держать производительность 52 фпс - очень неплохо.
OlegGel
UNIт
 
Сообщения: 56
Зарегистрирован: 09 ноя 2010, 00:31

Re: Почему шейдер Diffuse так сильно тормозит на iPad

Сообщение Zaicheg 29 ноя 2010, 21:49

OlegGel писал(а):так что если нормировать к 60, то мой шейдер позволяет держать производительность 52 фпс

Я думаю, что так нельзя нормировать. Лучше поправьте в AppController.mm целевой fps и посмотрите по факту.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Почему шейдер Diffuse так сильно тормозит на iPad

Сообщение OlegGel 01 дек 2010, 12:34

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

если сделать плоскость детализацией Х и У вершин, где Х и У равны разрешению экрана .. то у вас получится по 1 вертексу на пиксель что даст факстически попиксельное освещение. (при условии что бэкграунд на фул скрин и не скролится)


кста, забыл узнать, о какой детализации идет речь? У спрайта всего 4 вершины как не детализируй.
OlegGel
UNIт
 
Сообщения: 56
Зарегистрирован: 09 ноя 2010, 00:31

Re: Почему шейдер Diffuse так сильно тормозит на iPad

Сообщение OlegGel 01 дек 2010, 12:38

Кста, как указать чтобы данный шейдер применялся после всех остальных в последнюю очередь?
Дело в том что шейдер, который я привел, не может работать с прозрачностью, и на прозрачные спрайты никакого эффекта не производит, но если применитьего в последнюю очередь к когда уже вс] остальное отработало, то возможно заработает.
OlegGel
UNIт
 
Сообщения: 56
Зарегистрирован: 09 ноя 2010, 00:31

Re: Почему шейдер Diffuse так сильно тормозит на iPad

Сообщение gnoblin 01 дек 2010, 13:43

попробовать поставить очередь отрисовки Overlay (см. в справке в разделе ShaderLab)
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Почему шейдер Diffuse так сильно тормозит на iPad

Сообщение OlegGel 02 дек 2010, 19:56

не помогло, в окончательной редакции решил проблему так:

использую проектор со своим шейдером, он корректно работает с объектами без альфа канал, адекватно их затеняет и освещает. На объектах с прозрачностью использовал Transparent/Diffuse шейдер, они выглядят черными при освещении моим проектором, но добавив к проектору компонент SpotLight и подстроив размеры светого пятна под размер пятна проектора я получаю освещение всех объектов с максимальной производительностью на айпаде.

Народ, дифьюз для айпада - зло.
OlegGel
UNIт
 
Сообщения: 56
Зарегистрирован: 09 ноя 2010, 00:31

Re: Почему шейдер Diffuse так сильно тормозит на iPad

Сообщение Guyver 03 дек 2010, 08:38

спрайт-неспрайт ...
спрайт в 3д это в 99% случаев плоскость из 4х вершин и 2х треугольников .. в ортографической проекции с наложением текстуры ... у вершин 2 координаты гуляют, 3ья высталенна в 0 или если есть сортировки по глубине спрайтов то глубина спрайта.

я предположил что можно плоскость делать не их 4х вершин ... а из x*y. тогда вершинное освещение даст более менее внятный результат. как показывает практика филлрейт это более узкое горлышко нежели скорость передачи вершин на конвеер. осмелюсь предположить что филл рейт на мобильных девайсах (яблоки тудаже) страдает узкостью более чем на ПС, отсюда очень вероятно выгоднее прогнать более детализированный плейн на весь экран с тривиальным материалом нежели толстый шейдер который скушает филлрейт и просадит ФПС. (всё это имхо не подкреплённое тестами на яблоках)
Xcombat: 3D шутер на летающих тарелках!
Аватара пользователя
Guyver
UNIверсал
 
Сообщения: 392
Зарегистрирован: 21 июл 2010, 08:04
Откуда: Челябинск

Re: Почему шейдер Diffuse так сильно тормозит на iPad

Сообщение OlegGel 03 дек 2010, 13:18

у меня в тех задании четко указано использовать EZ SM и не эмулировать спрайты ни плоскостями ни гуи текстурами, вариант удержания почти 60 фпс на айпаде я уже написал, в силу того что использую текстурное смешивание я не ограничен вершинами объектов, возможна любая форма, более не актуально.
OlegGel
UNIт
 
Сообщения: 56
Зарегистрирован: 09 ноя 2010, 00:31

Re: Почему шейдер Diffuse так сильно тормозит на iPad

Сообщение gnoblin 03 дек 2010, 16:39

EZ GUI это тоже меш,

про филрейт на iOS правда :)
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Пред.

Вернуться в Shader Lab

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

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