Страница 2 из 2

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

СообщениеДобавлено: 26 ноя 2010, 20:36
Paul Siberdt
И пользуйте не альфу, а модуляцию... тогда тормозов практически не останется.

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

СообщениеДобавлено: 29 ноя 2010, 14:49
OlegGel
Мда...спасибо, советчики... Пришлось самому разбираться с синтаксисом шейдеров юнити. Написал шейдер
Процедура такая - используем его на материале проектора, для текстуры используем рисунок в 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]
                        }
       
                }
        }
}
 

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

СообщениеДобавлено: 29 ноя 2010, 20:48
gnoblin
Для айпада более нормально 60 ).

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

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

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

СообщениеДобавлено: 29 ноя 2010, 21:49
Zaicheg
OlegGel писал(а):так что если нормировать к 60, то мой шейдер позволяет держать производительность 52 фпс

Я думаю, что так нельзя нормировать. Лучше поправьте в AppController.mm целевой fps и посмотрите по факту.

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

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

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


кста, забыл узнать, о какой детализации идет речь? У спрайта всего 4 вершины как не детализируй.

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

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

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

СообщениеДобавлено: 01 дек 2010, 13:43
gnoblin
попробовать поставить очередь отрисовки Overlay (см. в справке в разделе ShaderLab)

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

СообщениеДобавлено: 02 дек 2010, 19:56
OlegGel
не помогло, в окончательной редакции решил проблему так:

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

Народ, дифьюз для айпада - зло.

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

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

я предположил что можно плоскость делать не их 4х вершин ... а из x*y. тогда вершинное освещение даст более менее внятный результат. как показывает практика филлрейт это более узкое горлышко нежели скорость передачи вершин на конвеер. осмелюсь предположить что филл рейт на мобильных девайсах (яблоки тудаже) страдает узкостью более чем на ПС, отсюда очень вероятно выгоднее прогнать более детализированный плейн на весь экран с тривиальным материалом нежели толстый шейдер который скушает филлрейт и просадит ФПС. (всё это имхо не подкреплённое тестами на яблоках)

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

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

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

СообщениеДобавлено: 03 дек 2010, 16:39
gnoblin
EZ GUI это тоже меш,

про филрейт на iOS правда :)