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

SSGI реализация

Страницы: 1 2 3 4 Следующая »
#0
16:59, 27 июля 2020

Пытаюсь реализовать Screen space global illumination как я его понял. Делал по аналогии с рефлективными картами теней (Reflective shadow maps). Нигде инфы про SSGI я не нашел.

Короче имею начальный семпл, его позицию и нормаль. Дальше беру с экрана несколько других семплов, получаю их позицию и нормаль. Далее считаю форм фактор для каждого из них вместе с начальным. Этот форм фактор умножаю на цвет семпла. Плюсую его к общему собранному непрямому освещению. Ничего толкового я не получил - какоето мыло. Что не так с моей реализацией, кто подскажет правильный алгоритм SSGI. Видимо я не правильно понял.

Вот код

const float SSGI_INTENSITY = 1.5;
const float SSGI_RADIUS = 400.0;
const float SSGI_SAMPLES = 32.0;
vec2 ssgiTexelSize = vec2(1.0/800.0, 1.0/600.0);
vec3 ssgiColor = vec3(0.0);
for (int i = 0; i < SSGI_SAMPLES; ++i) {
  vec2 ssgiRay = v_uv + (ssgiTexelSize * kernel[i].xy * SSGI_RADIUS);
  vec3 ssgiRayFlux = texture2D(tex, ssgiRay).rgb;
  vec3 ssgiRayPos = texture2D(texPos, ssgiRay).rgb;
  vec3 ssgiRayNormal = texture2D(texNormal, ssgiRay).rgb;
  float formFactor = (max(0.0, dot(ssgiRayNormal, normalize(pixel_pos - ssgiRayPos))) * 
     max(0.0, dot(pixel_normal, normalize(ssgiRayPos - pixel_pos)))) / 
    length(pixel_pos - ssgiRayPos);
  ssgiColor += ssgiRayFlux * formFactor;
}

Скриншот
SSGI | SSGI реализация


#1
(Правка: 17:07) 17:03, 27 июля 2020

BANEBYTE
SSAO домучал? помнится, там у тебя проблемы были с позициями и нормалями в G-буфере. (интересно, как выглядит теперь)
По поводу GI, на скрине вообще не видно собственно самого GI, может стоит вывести для наглядности только его?

#2
17:05, 27 июля 2020

Ruslan
Да. Таки доделал. Получилось неплохо

#3
17:16, 27 июля 2020

Вот непрямое освещение
opengl 2020-07-27 17-15-12-55 | SSGI реализация

#4
17:45, 27 июля 2020

На глаз видно только сильный недостаток семплов, либо уменьшать радиус стоит, либо увеличивать их число (либо юзать мипмапы).

#5
(Правка: 17:55) 17:54, 27 июля 2020

Теперь добился такого результата. Изменил код в 64 семпла (16 поворотов, и в 4 проходов по лучу). Как оптимизировать кто знает? Ибо жрет дай бог, а мало семплов - качество сразу стремительно падает
SSGI | SSGI реализация

#6
(Правка: 18:02) 17:59, 27 июля 2020

BANEBYTE
не похоже на gi, скорее на кривой reflect\
добавь яркости скрину, сам увидишь.

#7
18:02, 27 июля 2020

Немного добавить объемных лучей и будет норм

#8
18:02, 27 июля 2020

чет сосвем не то, стена должна осветить оранджевый цилиндр. Ты же вторичку по ламберту считаешь?

#9
18:10, 27 июля 2020

MAMOHT-92
так она и осветила, на скрине ж видно. Стена зеленого цвета, в итоге и столб зеленым стал слегка

#10
(Правка: 18:16) 18:16, 27 июля 2020

BANEBYTE
впечатление, что у тебя в результате какая-то зависимость от положения\ориентации камеры, чего быть не должно, или G-буфер не правильный или работаешь не в той системе координат.

#11
18:27, 27 июля 2020

BANEBYTE
> Нигде инфы про SSGI я не нашел.
http://www.klayge.org/material/4_1/SSGI/SSDO.pdf

#12
18:30, 27 июля 2020

Расшарил подпапку в своем Yandex disk, там немного сложил pdf по global illumination и ambient lighting
https://yadi.sk/d/p7QVLDYOxvrCig

#13
18:32, 27 июля 2020

MAMOHT-92
интересно, спасибо

#14
18:42, 27 июля 2020

BANEBYTE
> Получилось неплохо
гиде?

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