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

screen space soft shadows (6 стр)

Страницы: 1 2 3 4 5 6
#75
23:43, 8 июня 2009

Bonus
А я тебе не помогу? :)
Только сегодня писал depth-based размытие :)))
Вот:

uniform sampler2D depth_texture;
uniform sampler2D color_texture;
uniform vec4 texel_clipplane;

float sample_linear_depth(vec2 texC)
{
 float fDepth = texture2D( depth_texture, texC ).x;

 return 0.5 * texel_clipplane.z * texel_clipplane.w / 
        ( texel_clipplane.w - fDepth * (texel_clipplane.w - texel_clipplane.z) );
}

const int blur_radius = 4;

void main (void) 
{
 float fDepth = sample_linear_depth(gl_TexCoord[0].st);

 float fMultiplier = (float(blur_radius) + 1.0);
 vec4 vColor = texture2D(color_texture, gl_TexCoord[0].st) * fMultiplier;

 for (int k = 1; k < blur_radius; k++)
  {
   float fStep = float(k);

   float fScale = (1.0 + float(blur_radius) - fStep ); 
   float fPrevDepth = sample_linear_depth(gl_TexCoord[0].st - texel_clipplane.xy * fStep);
   float fNextDepth = sample_linear_depth(gl_TexCoord[0].st + texel_clipplane.xy * fStep);

   float fPrevDiff = min(1.0, 1.0 / (1.0e-7 + abs(fPrevDepth - fDepth)));
   float fNextDiff = min(1.0, 1.0 / (1.0e-7 + abs(fNextDepth - fDepth)));

   vColor += texture2D(color_texture, gl_TexCoord[0].st + texel_clipplane.xy * fStep ) * fScale * fNextDiff;
   vColor += texture2D(color_texture, gl_TexCoord[0].st - texel_clipplane.xy * fStep ) * fScale * fPrevDiff;
   fMultiplier += fScale * (fPrevDiff + fNextDiff);
  };

 gl_FragColor = vec4( vColor.xyz / fMultiplier, 1.0 );
}
#76
0:23, 9 июня 2009

Как это можно размыть?
Изображение

#77
23:46, 9 июня 2009

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

P.S. Sergio666 спасибо за код, попробую прикрутить, как только разберусь с основной отрисовкой теней.

#78
1:33, 10 июня 2009

Тему не читал, но по первым скринам, проблемма в фильтрации текстуры, установи её не билиниар\анисотропик, а поинт.

#79
8:55, 10 июня 2009

MoKa
> Тему не читал, но по первым скринам, проблемма в фильтрации текстуры, установи
> её не билиниар\анисотропик, а поинт.

Да, спасибо. Для PCF это действительно помогло, это обсуждалось на первой странице. Сейчас уже говорим о screen space тенях, поэтому я переименовал тему.

Кто знает как бороться с этим багом?
Изображение

#80
9:08, 10 июня 2009

> Кто знает как бороться с этим багом?

>depth-based размытие

#81
9:23, 10 июня 2009

LowPolyMan
> > epth-based размытие
Это значит что помимо (коэффициента размытия=расстоянию пикселя до источника света) нужно еще учитывать и глубину пикселя относительно камеры?
В общем я пока не понимаю, какие параметры нужно учитывать при размытии...

#82
9:39, 10 июня 2009

ты моешь какойто маской, где у центрального пикселя самый большой вес, у остальных меньше.

и вот если Abs(centralPixelDeth - maskPixelDeph) > treshold, значит maskPixelDeph, не находится в одной плоскости текущим пикселом => значит его не нужно учитывать при зазмытии

в коде Sergio666

float fPrevDepth = sample_linear_depth(gl_TexCoord[0].st - texel_clipplane.xy * fStep);
float fNextDepth = sample_linear_depth(gl_TexCoord[0].st + texel_clipplane.xy * fStep);

добавить 

fNextDepth = abs(fNextDepth - fPrevDepth) > fTreshold ? fPrevDepth : fNextDepth;
#83
17:17, 10 июня 2009

Tomat
Спасибо, получилось...

Вобщем я поигрался с этими тенями и пришел к выводу, что все таки за один проход все тени размывать нельзя. На скрине из 77 поста видно что зеленый свет проникает сквозь кубик и ложится в зону красного источника, такого быть не должно. Метод не верен. А если размывать тени для каждого источника, то слишком тормозно...
Тогда лучше pcf или vsm. vsm по качеству дает такую же картинку, но при pssm для directional-источников убивает производительность. Наверно можно использовать гибридный подход:
spot и point источники - vsm или pcf
directional источники - screen space blur или pcf

#84
17:51, 10 июня 2009

Bonus,у меня для point источника юзается PCF по Poisson Disc + шум:
SoftShadow.jpg | screen space soft shadows

И не сказал бы что много кушает.

Прошло более 1 года
#85
1:49, 20 июля 2010

Bonus   была у меня подобная ерунда с освещением.
Как и у тетбя у меня на точки действовал источник света который недолжен эти точки "видить", а следовательно освещать
дело было в том что источник пёр по своей тени, потому что незнал о ней.
я добавил в шейдер такое условие - "если данный тексел затенён относительно данного источника, тогда значению цвета присвоить (0,0,0,0). Иначе расчитать свет" и получилось!!! тоесть грубо говоря дифуз текстура - вместе с хард тенями получилась. но на неё сверху отлично накладываются софт тени, это ещё исправляет баг который возникает если издали смотреть на тень - в скрин спэйсблуре она превращается в пятно, а также наличие хард тени под софт тенью чинит то о чём ты писал в 79 посте.
Вобщем вот что у меня было  (слева), и вот что получилось(справа)!
bonus | screen space soft shadows

и вот просто скрины рабочие такскзать...
coordBox | screen space soft shadows

PS: на том скрине где ты отверг метод у тебя тень только в том месте которое недоступно для обоих источников света.  а должны быть ещё две менее тёмные, которые доступны только для одного или второго. и самая яркая обл. тоже должна быть (та которая доступна для обоих) Метод непричом, тут у тебя строится неверно.

#86
9:37, 20 июля 2010

Igor'
> меня для point источника юзается PCF по Poisson Disc
какой kernelSize ?
сколько выборок для диска ?
шум по VPOS ?

#87
11:14, 20 июля 2010

Igor'
Бажное SSAO? :)

Bonus
Скрин-спейс размътие - плохая и глючная техника, если ее очень внимательно не приготовить, т.е. не блюрить с учетом глубинъ.

#88
11:23, 20 июля 2010

блин да вы дату последнего моего поста посмотрите. развели тут некрофилию)))
я отказался от этой техники, слишком она дорогая

#89
11:46, 20 июля 2010

Bonus
> слишком она дорогая
Как по мне она наоборот дешевая (если про тени от солнца, которъе по всему екрану) и соответно некачественная.

Страницы: 1 2 3 4 5 6
ПрограммированиеФорумГрафика

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