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

Screen space shadows blur для нескольких источников света (Трабл решён. Пост №12)

Страницы: 1 2 Следующая »
#0
19:35, 6 сен. 2008

Вот такая проблема. Делаю тени по статье http://www.gamedev.net/reference/articles/article2193.asp

Для одного источника понятно, а для нескольких как накладывать тени? Точнее, как смешивать размытые тени и посчитанное освещение? Ведь в шедоу буфере уже не понятно какая тень от какого источника.

Т.е. по идее нам надо Light1*Shadow1+Light2*Shadow2+...+LightN*ShadowN

А по той технике получается что Light1*(Shadow1*Shadow2*...*ShadowN) + Light2*(Shadow1*Shadow2*...*ShadowN) +... + LightN*(Shadow1*Shadow2*...*ShadowN)

Короче нифига неправильно затенняется :(

Неужели эта техника подходит только для одного источника?


#1
21:59, 6 сен. 2008


Люди, Хелп!

#2
22:14, 6 сен. 2008

Откуда у тебя Shadow1 и Shadow2 ? у тебя же шадовмап один. Тупо рисуй в шадовмапу тени от других источников,только очищай её 1 раз.

#3
23:34, 6 сен. 2008

Burz666
>Откуда у тебя Shadow1 и Shadow2 ? у тебя же шадовмап один. Тупо рисуй в
>шадовмапу тени от других источников,только очищай её 1 раз.

Shadow1 и Shadow2 - это я подразумеваю тени от одной лампочки и второй. Я не спрашиваю как отрисовать все тени в одну текстуру, это понятно. Как потом при проходе освещения ПРАВИЛЬНО её использовать?

т.е. по методу:

1 - отрисовка всех теней в буффер
2 - разблюриваем буфер теней
3 - освещаем лампочками объекты и накладываем проекционно буфер теней на объекты (ВОТ! Как это правильно сделать для нескольких источников?)

Ещё раз. Как в примере -

   float fShadowTerm = tex2Dproj( BlurVSampler, IN.vScreenCoord );
   // Grab the spot term
   float fSpotTerm = tex2Dproj( SpotSampler, IN.vProjCoord );
   // Compute the final color
   return (ambient * vColor) +
          (diffuse * vColor * g_vLightColor * fShadowTerm * fSpotTerm) +
          (specular * vColor * g_vLightColor.a * fShadowTerm * fSpotTerm);

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

#4
23:37, 6 сен. 2008

Не вижу проблемы. скинь аську мне в личку.

#5
23:42, 6 сен. 2008

Burz666
>Не вижу проблемы. скинь аську мне в личку.

скинул. Стукни мне в асю плиз

#6
0:17, 7 сен. 2008

Burz666

?

--------------------------------------

Вообщем ещё раз, проблема звучит так - "Как правильно накладывать размытый шадоу буффер в проходе попиксельного освещения, если лампочка у нас не одна?"

Что надо делать? Умножать? Но ведь тогда если мы освещаем  тёмный угол второй лампочкой, получается что освещение 1.0 умножается на 0.0 - тень и угол не освещается!

#7
0:51, 7 сен. 2008

Раздельно для каждой лампочки.

#8
1:42, 7 сен. 2008

paladinrus
>Раздельно для каждой лампочки.

Ну это понятно. Впринципе можно в 4 канала отрендить каждую из теней. Но тогда не так жирно получается :( Если лампочек будет больше чем 4 придётся в несколько заходов рендить... эх почему мир так не совершенен. А этот товарисч из статьи и не обмолвился от таких проблемах:

Another advantage is that one can generate soft shadows for multiple lights with a small memory overhead. When dealing with multiple lights, all you need is one shadow map per light, whereas the screen and blur buffers can be common to all the lights!

Я то по простоте душевной думал что можно будет всё сблендить както и всё будет тип-топ. Ладна, придётся переколдовывать рендер.

#9
2:24, 7 сен. 2008

2XIRMAC
можно в один канал отрендерить и сблюрить все тени от лайтов, типа (0 без тени \ 1 в тени)?

ПС. статью не читал, но осуждаю :)

#10
2:40, 7 сен. 2008

Tomat
>2XIRMAC
>можно в один канал отрендерить и сблюрить все тени от лайтов, типа (0 без тени
>\ 1 в тени)?

Походу отрендить и сблюрить тени можно, но вот потом правильно осветить всё это дело не получтся. :)

А всё пото му что -

>Т.е. по идее нам надо Light1*Shadow1+Light2*Shadow2+...+LightN*ShadowN
>А по той технике получается что Light1*(Shadow1*Shadow2*...*ShadowN) + Light2*(Shadow1*Shadow2*...*ShadowN) +... + LightN*(Shadow1*Shadow2*...*ShadowN)

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


Ну или ты про что спрашивал?

#11
2:45, 7 сен. 2008


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

Потом отпишу в тему о результатах.

#12
23:53, 9 сен. 2008

Всё! Вроде проблема решена. Пришлось делать с MRT. Однако теперь все тени блюрим за один раз, а не только четыре штуки )
Может потом подробней распишу в своём блоге (http://www.gamedev.ru/community/robo_game_blog/)

Вот что получилось в итоге:

http://www.anegmetex.com/blog/TestEngine_SoftShadows_01.jpg
http://www.anegmetex.com/blog/TestEngine_SoftShadows_02.jpg
http://www.anegmetex.com/blog/TestEngine_SoftShadows_03.jpg
http://www.anegmetex.com/blog/TestEngine_SoftShadows_04.jpg
http://www.anegmetex.com/blog/TestEngine_SoftShadows_05.jpg
http://www.anegmetex.com/blog/TestEngine_SoftShadows_06.jpg
http://www.anegmetex.com/blog/TestEngine_SoftShadows_07.jpg
http://www.anegmetex.com/blog/TestEngine_SoftShadows_08.jpg
http://www.anegmetex.com/blog/TestEngine_SoftShadows_09.jpg
http://www.anegmetex.com/blog/TestEngine_SoftShadows_10.jpg
http://www.anegmetex.com/blog/TestEngine_SoftShadows_11.jpg

Там два источника. Один направленный + тени + бамп. Второй пока простой точечный, без бампа и тени (его позиция на скринах отображается вторыми осями координат)

Жду камментов как выглядит результат 8)

З.Ы. Да, там ещё leak detection не совсем оттюнингован, надо ещё будет поработать над этим

#13
1:24, 10 сен. 2008

XIRMAC
вполне симпотишно

#14
2:02, 10 сен. 2008

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

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

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