Войти
ПрограммированиеФорумГрафика

Эффекты GLSL

Страницы: 1 2 Следующая »
#0
8:53, 19 дек. 2017

Что бы не плодить кучу топиков, все вопросы по теме буду задавать здесь.
Поскольку до гуру GLSL мне далеко, хочу узнать, есть ли более простой способ задать негатив, нежели мой велосипед?

vec4 Negative(vec4 Color) { return vec4(1.0 - Color.r, 1.0 - Color.g, 1.0 - Color.b, Color.a); }
Или тут уже нечего оптимизировать?


#1
9:40, 19 дек. 2017

return vec4(vec3(1.0)-color.rgb,color.a)

#2
11:16, 19 дек. 2017

А в чём вообще смысл многопроходного рендеринга эффектов? Чем он отличается от рендеринга всех нужных эффектов в нужной последовательности за один проход?

#3
11:28, 19 дек. 2017

Daniil Petrov

Разные причины - и затыкание кешей/текстурных юнитов а так же ограничение их количества,  и проблема курицы-яйца (типа как на момент этапа N у нас отсутствует требуемая карта , которая рендерится на этапе M). Ну и overdraw, конечно же. Вообще весь смысл deferred-техник - это работать с гарантированно нарисованным.

#4
11:38, 19 дек. 2017

nonamezerox
> Вообще весь смысл deferred-техник - это работать с гарантированно нарисованным.
Т.е. каждый следующий эффект в одном проходе работает с исходной картинкой, да?

#5
11:48, 19 дек. 2017

Daniil Petrov

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

#6
11:52, 19 дек. 2017

Daniil Petrov

Если говорить про deferred - подход, то его смысл в том, что в результате первого, сравнительно несложного прохода (тупо рендеринг геометрии с разными текстурами, каждая текстура в свой кадровый буфер) мы получаем всю необходимую информацию для каждого видимого пикселя на экране (вроде нормалей, позиции этого пикселя в мировых координатах, карты SSAO и прочего) и мы выполняем расчет освещения/только для видимых камерой частей объектов. Иначе мы бы расчитывали впустую для каждого пикселя, даже того, который будет позже сожран z-буфером.

#7
11:53, 19 дек. 2017

nonamezerox
> мы выполняем расчет освещения/только для видимых камерой объектов

При форварде с depth-prepass тоже самое

#8
12:00, 19 дек. 2017

0xc0de
> При форварде с depth-prepass тоже самое

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

#9
12:01, 19 дек. 2017

Ну первый рендеринг у меня уже в текстуре из-за offscreen MSAA и эффекты накладываются уже при выводе текстуры в буфер кадра :) хотя мысль понятна, спасибо за просвещение!

#10
13:13, 19 дек. 2017

nonamezerox
> в случае с деферред -мы можем обойтись известными хаками, рендеря различные
> графические примитивы, совпадающие по форме с объемами источников света
Ну и бред!

#11
13:57, 19 дек. 2017

DODge
> Ну и бред!

Light Volumes - это бред? Или ты про них не в курсе?

#12
15:28, 19 дек. 2017

nonamezerox
> Light Volumes - это бред
Именно! Тормозно и никому не нужно. Проще квадом по G-Buffer'у пройтись и осветить сцену. А! Видимо уже Вы не в курсе? Для начала посмотрите Deferred Shading в Render Monkey. Там наглядно и дико просто это реализовано.

#13
15:41, 19 дек. 2017

DODge
> Проще квадом по G-Buffer'у пройтись и осветить сцену

Как раз квадом (если речь о fullscreen quad) не проще, если речь о дофига источников света (количество источников * количество пикселей gbuffer). 

Если речь о bounding quad на каждый источник - то тут тоже очень спорно, для больших  поинтов и спотов оверхед по фрагментам дает о себе знать, хоть растеризатору и легче.

Для преодоления же оверхеда Light volumes/bounding quad, связанного с перекрытиями,  тут уже нужно на tile-based техники переходить.

#14
17:25, 19 дек. 2017

В общем-то это я и имею ввиду:

DODge
> Для начала посмотрите Deferred Shading в Render Monkey. Там наглядно и дико
> просто это реализовано.

и заканчивать этим

nonamezerox
> тут уже нужно на tile-based техники переходить.

Страницы: 1 2 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.