Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
Рейтинг 4.54/26: Рейтинг темы: голосов - 26, средняя оценка - 4.54
1 / 1 / 1
Регистрация: 04.12.2009
Сообщений: 18

Оптимизация шейдера (GLSL ES)

30.09.2012, 00:36. Показов 5234. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые форумчане, помогите оптимизировать шейдер:
на компе(в RenderMonkey) всё нормально, выдаёт ~150fps, на трубе(HTC Wildfire S) - чуть меньше 10.
уменьшать ShineIntensity(Число сэмлов) пробовал - бесполезно.Что 10 сэмплов что 100 разница в 5-6 fps.

Собственно сам шейдер:
glSlang
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
uniform sampler2D framebuffer;
varying vec2 vTexCoord;
float density;
float decay = 0.97;
float exposure = 0.01;
float weight = 2.0;
uniform int ShineIntensity;
 
void main()
{   
    
    density = float(ShineIntensity)/100.0;
    if (density < 0.3)
    {
       density = 0.2;
       exposure = 0.02;
    }
    vec4 source = texture2D(framebuffer,vTexCoord);
    vec2 deltaTextCoord = (vTexCoord - 0.5);
    vec2 textCoo = vTexCoord.xy;
    deltaTextCoord *= 1.0 /  float(ShineIntensity) * density;
    float illuminationDecay = 1.0;
    vec4 blurried;
    
    for(int i=0; i < ShineIntensity ; i++)
    {
             textCoo -= deltaTextCoord;
             vec4 sample = texture2D(framebuffer, textCoo ); 
             sample *= illuminationDecay * weight; 
             gl_FragColor += sample;           
             illuminationDecay *= decay;
    }
    gl_FragColor *= exposure;
    gl_FragColor += source;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.09.2012, 00:36
Ответы с готовыми решениями:

Подкиньте код шейдера на GLSL для Qml-я, чтоб во круг мышки какие - нибуть искорки сыпались )
В общем виду я мышку, а во круг неё искры или звёздочки сыпятся... Нет ничего годового? Нужно для QML ShaderEffect

Типы оптимизация: черная оптимизация, серая оптимизация и белая оптимизация
Много много лет назад, на заре становления профессии &quot;оптимизатора&quot; в какой то умной книжке был создан миф. Это миф о цветовой индефикации...

Аналог шейдера
Запускал такой шейдер, на планшете. Программа работала, шейдер компилировался и выполнялся. А вот вчера, подключил старенький телефон...

15
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
30.09.2012, 00:46
Цитата Сообщение от Fintroll Посмотреть сообщение
vec4 sample = texture2D(framebuffer, textCoo );
Вынеси выборку из цикла, самый тяжеляк же.

Добавлено через 6 минут
А, чёт я не вчитался. Давая для начала объясни, чего оно должно делать.
0
1 / 1 / 1
Регистрация: 04.12.2009
Сообщений: 18
30.09.2012, 00:49  [ТС]
Цитата Сообщение от NoMasters Посмотреть сообщение
Вынеси выборку из цикла, самый тяжеляк же.
а как тогда блюрить если не в цикле?
Заранее расчитать координаты и забить в массив? а потом применять их как без цикла?
Если есть другие способы заблюрить картинку - внимательно вас выслушаю.

Это шейдер God Rays. После зум блюра(цикл),накладывается исходник.
0
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
30.09.2012, 00:53
Вообще странно, что уменьшение числа итераций не даёт нормального прироста, может быть узкая часть где-то ещё?
0
1 / 1 / 1
Регистрация: 04.12.2009
Сообщений: 18
30.09.2012, 01:01  [ТС]
Цитата Сообщение от NoMasters Посмотреть сообщение
Вообще странно, что уменьшение числа итераций не даёт нормального прироста, может быть узкая часть где-то ещё?
и я очень хотел бы узнать где.
Можть точность флоатов уменьшить(есть ли вообще в ES-ке вещественные числа с половинной точностью, тобишь 2-хбайтовые)? Или сделать блюр по альфа-каналу, а потом какнить смешать с оригиналом?
0
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
30.09.2012, 11:02
Прежде чем что-то оптимизировать, нужно запустить профайлер и воспользоваться им.
Например nVidia PerfHUD.
0
 Аватар для snake32
3599 / 1731 / 236
Регистрация: 26.02.2009
Сообщений: 8,800
Записей в блоге: 5
01.10.2012, 19:37
В ренерманки есть пример Motion Blur - без циклов!
0
1 / 1 / 1
Регистрация: 04.12.2009
Сообщений: 18
02.10.2012, 15:40  [ТС]
Цитата Сообщение от snake32 Посмотреть сообщение
В ренерманки есть пример Motion Blur - без циклов!
Motion blur делается мальца по-другому, нежели Zoom Blur. 8)
0
 Аватар для snake32
3599 / 1731 / 236
Регистрация: 26.02.2009
Сообщений: 8,800
Записей в блоге: 5
02.10.2012, 15:53
Я конечно не спец по шейдерам, но:
Может тормоза из-за gl_FragColor? То есть мы читаем значение и пишем в переменную предназначенную только для записи. Я бы для начала завёл vec4 temp вместо gl_FragColor а в конце gl_FragColor = temp;

Добавлено через 2 минуты
Кстати для чего объявлена blurried? И какое стартовое значение gl_FragColor?
0
1 / 1 / 1
Регистрация: 04.12.2009
Сообщений: 18
02.10.2012, 16:10  [ТС]
Цитата Сообщение от snake32 Посмотреть сообщение
Я конечно не спец по шейдерам, но:
Может тормоза из-за gl_FragColor? То есть мы читаем значение и пишем в переменную предназначенную только для записи. Я бы для начала завёл vec4 temp вместо gl_FragColor а в конце gl_FragColor = temp;

Добавлено через 2 минуты
Кстати для чего объявлена blurried? И какое стартовое значение gl_FragColor?
blurried как-раз таки и была объявлена как временная переменная. После выяснения её бесполезности опытным путём, от её использования было решено отказаться.
0
0 / 0 / 0
Регистрация: 18.02.2015
Сообщений: 6
18.02.2015, 21:56
Сорри за некропостинг, но во всех GL учебниках русским по белому написано: "Никаких циклов и условий в шейдерах. Только линейная логика ибо нелинейность = дичайшие тормоза". Автор умудрился показать, как нельзя писать шейдеры нарушив оба простых правила и чему-то даже удивился.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
19.02.2015, 12:47
Необоснованная глупость. Сейчас не начало 2000-х, современные компиляторы, в том числе и те, которые компилируют GLSL шейдеры наверняка умеют "разворацивать" циклы.
Более того, количество итераций может быть не постоянным и различаться от вызова к вызову, например через uniform-переменную. Как тогда быть в этом случае?
В этих книгах не написано что вообще не надо шейдерами пользоваться и использовать вершинное освещение и т.п.?
0
0 / 0 / 0
Регистрация: 18.02.2015
Сообщений: 6
19.02.2015, 13:21
Цитата Сообщение от castaway Посмотреть сообщение
Необоснованная глупость. Сейчас не начало 2000-х, современные компиляторы, в том числе и те, которые компилируют GLSL шейдеры наверняка умеют "разворацивать" циклы.
Более того, количество итераций может быть не постоянным и различаться от вызова к вызову, например через uniform-переменную. Как тогда быть в этом случае?
В этих книгах не написано что вообще не надо шейдерами пользоваться и использовать вершинное освещение и т.п.?
Очевидно вы уважаемый, тут обоснованно самый умный, а вот (пример один из многих) тот же человек ведущий ветку по GLSL на 4pda.ru, как и я пишет очевидные глупости. А учитывая возраст ОС Android ваше высказывание о начале 2000-х и вовсе "занавес".



http://4pda.ru/forum/index.php... ry20580217
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
19.02.2015, 13:46
forenheith, где в твоём сообщении упоминание про Android?
Цитата Сообщение от forenheith Посмотреть сообщение
во всех GL учебниках
Т.е. ты весь OpenGL "подмял" под свои слова, не только ES. С этим я и не согласен, что, собственно и объяснил.
0
 Аватар для snake32
3599 / 1731 / 236
Регистрация: 26.02.2009
Сообщений: 8,800
Записей в блоге: 5
19.02.2015, 14:10
Как я понял gl_FragColor должен восприниматься только как для записи и ни как иначе.
Об этом пишут во многих форумах.(opengl.org, gamedev.ru)
Хотя на тех же форумах пишут что для nVidia фокус с чтением проходит нормально. Однако, в стандарте вроде такого быть не должно(я быстро не нашёл офиц. подтвержения). Вообще nVidia сильно отклоняется от стандарта(и не только в этом случае), что значительно затрудняет разработку кроссплатформенного шейдера коим является GLSL.
Возможно, это тоже является ключом к падению производительности.

О циклах. Безусловно существуют алгоритмы где сложно обойтись без циклов. И конечно любой цикл значительно замедляет выполнение шейдера. Я как-то экперементировал с OpenCL(архитекута та же что и GLSL) и замедление было чуть ли не по геометрической прогрессии в зависимости от кол-ва итераций цикла. Причём на nVidia при кол-ве интераций где-то в районе 1000(в зависимости от GPU) происходило падение драйвера. На AMD падения не было, но скорость выполнения была не удовлетворительной для моей задачи.
СтОит отметить, что не глубокие циклы(несколько десятков) исполнялись достаточно быстро и на всех GPU. Всё тестилось на нескольких GPU(GTX760, GT640LE, HD7970, а также CPU i7 3612QM, FX8120, да, это вам не CUDA).
Учитывая что ТС пытается запускать циклы на мобилках, где GPU, мягко говоря, слабый, то, скорее всего, даже не глубокие циклы на мобилках вызывают ощутимое падение производительности.

Всё вышесказанное ИМХО
0
0 / 0 / 0
Регистрация: 18.02.2015
Сообщений: 6
19.02.2015, 14:36
Цитата Сообщение от castaway Посмотреть сообщение
forenheith, где в твоём сообщении упоминание про Android?Т.е. ты весь OpenGL "подмял" под свои слова, не только ES. С этим я и не согласен, что, собственно и объяснил.
Контекстом тут является сообщение Т. С., а это GLSL.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.02.2015, 14:36

Задумка шейдера
Здравствуйте Хотелось бы сделать шейдер, GLSL реализация необязательна, достаточно software. На нижней картинке один источник света...

Непонятен код шейдера
Здравствуйте. Объясните, пожалуйста, строки из вершинного шейдера : ...

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

Объяснить код шейдера
ВОТ КОД ШЕЙДЕРА: #ifdef GL_ES precision mediump float; #endif #extension GL_OES_standard_derivatives : enable uniform...

Организация работы шейдера
К примеру, если используется normal mapping, то в геометрическом шейдере происходят всякие вычисления, если же нет, то он по-умолчанию....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru