Вот такая проблема. Делаю тени по статье 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)
Короче нифига неправильно затенняется :(
Неужели эта техника подходит только для одного источника?
Люди, Хелп!
Откуда у тебя Shadow1 и Shadow2 ? у тебя же шадовмап один. Тупо рисуй в шадовмапу тени от других источников,только очищай её 1 раз.
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);
для одной лампочки всё правильно, но если аддитивным блендом так смешивать несколько лампочек то получается не правильно.
Не вижу проблемы. скинь аську мне в личку.
Burz666
>Не вижу проблемы. скинь аську мне в личку.
скинул. Стукни мне в асю плиз
Burz666
?
--------------------------------------
Вообщем ещё раз, проблема звучит так - "Как правильно накладывать размытый шадоу буффер в проходе попиксельного освещения, если лампочка у нас не одна?"
Что надо делать? Умножать? Но ведь тогда если мы освещаем тёмный угол второй лампочкой, получается что освещение 1.0 умножается на 0.0 - тень и угол не освещается!
Раздельно для каждой лампочки.
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!
Я то по простоте душевной думал что можно будет всё сблендить както и всё будет тип-топ. Ладна, придётся переколдовывать рендер.
2XIRMAC
можно в один канал отрендерить и сблюрить все тени от лайтов, типа (0 без тени \ 1 в тени)?
ПС. статью не читал, но осуждаю :)
Tomat
>2XIRMAC
>можно в один канал отрендерить и сблюрить все тени от лайтов, типа (0 без тени
>\ 1 в тени)?
Походу отрендить и сблюрить тени можно, но вот потом правильно осветить всё это дело не получтся. :)
А всё пото му что -
>Т.е. по идее нам надо Light1*Shadow1+Light2*Shadow2+...+LightN*ShadowN
>А по той технике получается что Light1*(Shadow1*Shadow2*...*ShadowN) + Light2*(Shadow1*Shadow2*...*ShadowN) +... + LightN*(Shadow1*Shadow2*...*ShadowN)
Т.е. грубо говоря, для каждой лампочки свет должен умножатся на значение своей тени и складываться со значением тени других лампочек.
Ну или ты про что спрашивал?
Завтра предприму отчаяную попытку блюра теней уже правильно освещённых лампочками, с раздельным рендером бампа в другой канал. Ну и последующем собиранием всё вместе. Очень надеюсь что артефактов будет не много.
Потом отпишу в тему о результатах.
Всё! Вроде проблема решена. Пришлось делать с 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 не совсем оттюнингован, надо ещё будет поработать над этим
XIRMAC
вполне симпотишно
XIRMAC
Выглядит очень неестественно.
Будто в фотошопе кто-то подрисовал, а размер кисточки один и тот же использовал для всех теней.
Тема в архиве.