Войти
OpenGL communityФорумУроки по OpenGL

Урок 7 - Экранные эффекты (комментарии) (2 стр)

Страницы: 1 2 3 Следующая »
#15
14:49, 9 мая 2011

Pixar
> Как быть при изменениях размеров окна? Нужно каждый раз пересоздавать текстуры? Это правильный подход?

Да.


#16
21:26, 9 мая 2011

>Там модели в текстовом виде в .h файлах, в новом уроке который готовлю уже нормальная загрузка моделей в рантайме, поэтому такой проблемы нету.
Торы и сферы можно генерировать. Зачем хранить целую модель?

#17
22:14, 9 мая 2011

gammaker
"Зачем хранить целую модель?"

Возможно, для того, чтобы показать новичкам как загружать модели из файлов.

#18
22:18, 9 мая 2011

gammaker
> Торы и сферы можно генерировать.
Можно

> Зачем хранить целую модель?
Мне так проще.

.Scotina
> Возможно, для того, чтобы показать новичкам как загружать модели из файлов.
Сложно назвать это загрузкой из файла, там просто .h файл инклудится, т.е. модель зашита в бинарнике, оттого он долго линкуется и его размер пухнет, но это было временное решение.

#19
23:05, 9 мая 2011

KpeHDeJIb
"Сложно назвать это загрузкой из файла..."

Я про "в новом уроке который готовлю уже нормальная загрузка моделей в рантайме".

#20
2:08, 21 мая 2011

Реализовал bloom. Только мне не нравится полученное качество. Нужна ваша помощь, чтобы узнать в чём дело.

Обычное изображение без блума выглядит так:
(цвета зайца (источника света): диффуз (0.8f, 0.6744f, 0.0f), спекулар (0.6f, 0.6f, 0.06f), амбиент (0.2f, 0.1686f, 0))
Default | Урок 7 - Экранные эффекты (комментарии)

BrightPass делается такой:

texel.r = texel.r > 0.97 ? 1.0 : 0.0;
texel.g = texel.g > 0.97 ? 1.0 : 0.0;
texel.b = texel.b > 0.97 ? 1.0 : 0.0;

BrightPass | Урок 7 - Экранные эффекты (комментарии)

После этого, по стандарту, даунсэмплинг (3 раза), размытие (ping pong) и такое вот смешивание:

vec3 t0 = texture(Pass0, TexCoord).rgb;
vec3 t1 = texture(Pass1, TexCoord).rgb;
vec3 t2 = texture(Pass2, TexCoord).rgb;
vec3 t3 = texture(Pass3, TexCoord).rgb;
vec3 t4 = texture(Scene, TexCoord).rgb;

color = vec4(t0 + t1 + t2 + t3 + t4, 1.0);

Результат:
Bloom | Урок 7 - Экранные эффекты (комментарии)

Думаю, понятно, что мне здесь не нравится: красные пятна и совсем не светящиеся блики.
Что надо сделать, чтобы блум выглядел более менее прилично? Подправить цвета, изменить алгоритм, изменить модель?
И ещё мне хотелось бы узнать объяснение для совершения даунсемплинга. Я увидел, что он добавляет свечения, но не понятно, как именно.
После того, как разберусь с bloom'ом, хочу добавить HDR =)

#21
10:40, 21 мая 2011

Я не понимал никогда этот блум.
Самое правильное ИМХО, это когда спекуляр рендерится в отдельную текстуру, а потом эта текстура даунсемплится и размывается.
Тогда получится нормально - блики на зайце будут подсвечены.

#22
1:41, 22 мая 2011

Ого, так уже гораздо лучше, правда пришлось увеличить яркость спекулара до 1.0, а то блур добивал всю интенсивность и становилось не так красиво.
Ещё меня порадовало то, что я удивительно легко разобрался с MRT. Думал тут будут большие проблемы - а нет. Правда хреново то, что glClear очищает все colorbuffer'ы. Из-за этого пришлось делать отдельный проход и чистить specular текстуру от фона.

Вот блум заяц:
BloomBunny | Урок 7 - Экранные эффекты (комментарии)

Здесь он не так смачно выглядит - самый прикол, когда его крутишь и он переливается. Блин, неужели он будет ещё круче, когда я добью HDR =)

#23
9:18, 22 мая 2011

Pixar
> Правда хреново то, что glClear очищает все colorbuffer'ы. Из-за этого пришлось
> делать отдельный проход и чистить specular текстуру от фона.

А покажи ка как ты сделал, что-то я не понял зачем этот проход "для чистки фона". Там ведь по идее как:
1. Создаем FBO
2. Оттачим к нему депс и 2 колор текстуры (нормальный рендер и под спекуляр)
3. Биндим наш FBO
4. Рендерим шейдером в котором выводим в два out с location=0 и location=1
5. Делаем проход по спекуляру, размываем там, увеличиваем яркость
6. Биндим дефолтный FBO
7. Рендерим полноэкранный квад с текстурой рендера сцены и обработанной текстурой спекуляра.

ЗЫ. Но честно сказать я вообще не вижу смысла проделывать такое со спекуляром, разве что сгладить его, потому что просто увеличить размер спекуляра это поиграться с параметром shininess (степень блеска).

#24
11:52, 22 мая 2011

KpeHDeJIb
> 1. Создаем FBO
> 2. Оттачим к нему депс и 2 колор текстуры (нормальный рендер и под спекуляр)
> 3. Биндим наш FBO
> 4. Рендерим шейдером в котором выводим в два out с location=0 и location=1
Всё то же самое.

Дальше, как я сперва думал, мне bright  pass не нужен - ведь у меня и так яркий specular. Но потом оказалось, что без bright pass'а проходит фон, и он размазывается. Получается такая картинка:
Background | Урок 7 - Экранные эффекты (комментарии)

В принципе, тоже красиво, но я не хотел блумить фон )). А получилось так из-за того, что фон очистился в обоих текстурах и голубенький цвет перешёл в спекуляр текстуру:
Specular | Урок 7 - Экранные эффекты (комментарии)

Это то, что попадает в specular текстуру сразу после рендера сцены.

ЗЫ: попробовал просто увеличить коэффициент спекулара в 2 раза и получилось не очень красиво; вроде блики увеличились, но смотрится не так реалистично, и не создаётся впечатления переливания, когда крутишь зайца

#25
12:42, 22 мая 2011

Да не, ты сделай specular текстуру одноканальной и рендерь туда только спеуляр который больше 0 и его размазывай, что в итоге получится?

Правка: Хотя нет, просто чистит текстуру черным цветом и блурь потом, specular отдельно обрабатывать не надо, пиши любой, дальше накладывай аддитивно или мултиплекативно на итоговое изображение.

#26
14:00, 22 мая 2011

KpeHDeJIb
> Правка: Хотя нет, просто чистит текстуру черным цветом и блурь потом, specular
> отдельно обрабатывать не надо, пиши любой, дальше накладывай аддитивно или
> мултиплекативно на итоговое изображение.
Фон у меня чистится таким цветом: glClearColor(0.3, 0.5, 0.9, 0). А любой цвет из шейдера выходит таким: vec4(r, g, b, 1.0). Так я определяю, какой цвет фоновый, а какой - спекуляр. Если sample спекуляр текстуры имеет значение "альфа" равное нулю, значит это фон, и я вывожу вместо него чёрный цвет, иначе сэмпл идёт дальше таким, каким он был.

В принципе, это можно делать во время даунсэмплинга, но я выделил на это отдельный шейдер, и у меня получился отдельный проход, который только и делает, что заменяет голубой фон, на чёрный, то есть "просто чистит текстуру черным цветом". А дальше я уже писал - блур уменьшенных текстур и их аддитивное смешивание с диффузной текстурой. Результат в посте #24.

#27
14:09, 22 мая 2011

Pixar
> Фон у меня чистится таким цветом: glClearColor(0.3, 0.5, 0.9, 0).
Вот и непонятно зачем он у тебя таким цветом чистится.

#28
15:08, 22 мая 2011

KpeHDeJIb
> Вот и непонятно зачем он у тебя таким цветом чистится.
Если его чистить чёрным цветом, то как потом добавить такой фон?

KpeHDeJIb
> Цвет заднего фона он по идее вообще не нужен, если ты об этом. Т.е. грубо
> говоря его не должно быть видно на релаьной сцене, его используют обычно только
> с одной целью - посмотреть где дырки в сцене :)
Ну, вот. А у меня фон - это часть сцены.
В общем, проблем сейчас нет, а когда, наконец, сделаю ещё несколько эффектов, покажу, что получилось.

#29
15:19, 22 мая 2011

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

Страницы: 1 2 3 Следующая »
OpenGL communityФорумУроки по OpenGL

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