FROL
> Во, во, это lightcut и есть
ааа, вот оно что! ну дык это можно сделать : ) это не так то и сложно : ))
Aldaron
> к примеру, из известного, это рендерить несколько ShadowMap в одну текстуру
рендерить не получится. у меня же VSM. там нужно 2 компонента для глубины. ну, поидее, 2 лайта в текстуре но не 4!! 4 лайта можно в 1 текстуру залить потом - заблюрить все 4 VSM карты, найти коэффициент затенения и записать в один канал. и так 4 источника света. потом эту мапу кидать в шейдер.
Aldaron
> Думаю, у кого радиус( зона) покрытия больше
я думаю сделать так:
1. сделать источники света с ForceShadow (ну вдруг понадобятся такие которые ОБЯЗАТЕЛЬНО при любой ситуациии должны отбрасывать тень?
2. рассчитывать "вес" источника света на видимой территории (не просто радиус а сколько пространства освещает в фрустуме.
вообще я себе хреново представляю всю систему рендеринга теней и шейдинга сцены : (
Я напишу как у меня сейчас а вы исправьте "как надо", ок?
сразу скажу - не пугайтесь! сделано ОЧЕНЬ тупо!!! но я всегда делаю сначала лишь бы хоть как-то работало а потом делаю нормально : D
1. определяется список источников света, которые вносят вклад в освещение фрустума
2. Z-Pass:: (тупо) для первых попавшихся 4 рендерим карту глубины (с самим рендерингом всё в порядке)
3. идёт рендеринг сцены: для каждого объекта я получаю 8 источников света, которые на него влияют. определяю из них те, которые кастуют тени. сортирую так, что первыми в шейдер передаются источники света с тенями. В шейдер передаётся и флаг - имеет ли источник света теневую карту.
Пример: есть сцена.. много лайтов. Мы рисуем объект - получаем 8 ближайших лайтов (или меньше). Из них 3 кастуют тени. (S - источник света с тенью, W - без тени) получаю такой списко источников света: S,W,W,S,W,S,W,W
Я его сортирую так: S,S,S,W,W,W,W,W. Эти лайты заливаю в шейдер (все их параметры)
в шейдере(псевдокод):
for(int i = 0; i< lightsCount; i++) { if( lightAttributes[i].x == 1) //проверяем флаг - кастует ли источник света тень { //осторожно!! дальше идёт аще маразм!!! : )))) float lightDepth; if( i == 0) lightDepth = tex2D( sm0, tc); else if( i==1) lightDepth = tex2D( sm1, tc); else if( i==2) lightDepth = tex2D( sm2, tc); else lightDepth = tex2D( sm3, tc); // рассчёт сосвещения с тенью. } }
вообщем в шейдере отдельно 4 2D сэмплера для карт теней (для каждого источника света своя текстура). Пока поддерживаются шейдером только 2D тени!!
я знаю что это бред аццкий. Расскажите, кому не влом, пожалуйста, как именно весь процесс должен "правильно" выглядеть, чтобы и DPSM поддерживать и вообще правильно всё сделать. буду мегопризнателен!!
IronNick
>проверку на препятствия между ними делаешь?
Честно говоря не проверяю, но сейчас подумаю над этим
> если разные радиусы?
только если приближены к среднему значению
> цвет(в том числе и тени)?
Здесь считаю только Depth, цвет уже потом
> качество теней?
Среднее между всеми
> статик/динамик лайт?
Только для динамических, для статики там свои подходы
> проверка на этапе старта или риалтайм?
Старта и если изменяется положения источника, или добавляется новый
и всёже pay attention to псто #10, #15
покурил код и пейперы... всё вроде верно в parabaloid- мапах! (в шейдере) видимо я не те матрицы передаю.
ну проекционная нафиг не нужна, мировая нужна полюбому (в обычном виде) а вот видовая это что? я так понял, что от видовой нужна только позиция камеры и сделал (псевдокод) matrix M = Matrix.Invert(Matrix.Translation(LightPosition)); не,бред видимо я ошибся. как же правильно?
поставил FarCry1, посмотрел как у них сделано затенение (у мну Crysis: Warhead а на нём SandBox2 почемуто не пашыд)
после некоторых тестов был реально удивлён!! Аще аццки всё сделано : )) Динамическая тень только от 1 источника света! Длина тени сильно урезана а при удалении камеры от объекта тень вообще пропадает. Тень рисуется от ближайшего источника света при чём этот источник должен быть дна довольно маленьком расстоянии (порядка 1-1.5 метра) иначе тень считается от солнца! Больше всего меня поразило освещение! Я ессно выставил графику на максимум.. так вот. На объект максимум 5 лайтов (включая солнце). Тени от солнца почемуто нету на объекте (солнце тени не кастит) и жуткий эмбиент почемуто аццки подсвечивает объект изнутри о_О а когда 5 динамических источников света добавляю внутрь ангара (тестил всё в ангаре) то эмбиент от солнца резко пропадает.. ну .. ещё куда ни шло.. в игре то этого типа не будет видно - ан нет!! У них же источники света куллятся по фрустуму и когда игрок стоит посреди ангара и поворачивается так, что 1 источник света уходит из вида то резко врубается отсвещение от солнца!!! аще ацки выглядит! А я считал фаркрай довольно технологичной гамой : ) А там такой бред шо ну ппц аще о_О или это я сильно загоняюсь с "идеальным"" освещением? : )
как уже было где-то написанно, меньше знаешь - лучше играешь.
После изучения кучи технологий, спец ефффектов я спризрением начинаю смотреть на графику в играх и смотрю есть ли там паралакс и бамп, по какой технологии сделаны тени, DS или Forward, как сделана водичка и облака и проч хрень.
А ведь раньше играя в игры я не смотрел на артефакты графы или ее недостатки, а просто играл.
Ничего нет совершенного, везде хаки и уловки.
MAMONT-92
+777
такаяже фишка : ) она наверно у всех разработчиков. Только я хоть и смотрю на графику, всёравно для меня она не самая важная в игре : )
L
> Больше всего меня поразило освещение! Я ессно выставил графику на максимум..
> так вот. На объект максимум 5 лайтов (включая солнце).
как 5 ? 4 вместе с солнцем, там ешё так чудно включаешь фанарик - он вроде как spot - а кусок индора освещает не как spot
> А я считал фаркрай довольно технологичной гамой
Это ты ешё DOOM3 не смотрел :)
MAMONT-92
> как уже было где-то написанно, меньше знаешь - лучше играешь.
точно, тем более когда ты ещё сам и делаешь графику в игрушке
у меня в одном месте вектор L не совпадал c реальным в сцене - для крастоты было сделано :)
L
> или это я сильно загоняюсь с "идеальным"" освещением? : )
тебе же ясно сказали - кури DS
innuendo
> как 5 ? 4 вместе с солнцем
неа! на максимуме у меня в ангаре 4 динамических источника света и солнце светит а когда пятый добавляю то солнце пропадает (не обсчитывается) и при добавлении лайтов также 5 светят!
innuendo
> там ешё так чудно включаешь фанарик - он вроде как spot - а кусок индора
> освещает не как spot
ага и тени от спотов аще НЕТ! только от PointLight-ов
innuendo
> тебе же ясно сказали - кури DS
а я не менее ясно говорил в разных темах - не-хо-чу. : ) хоцца сделать хорошую графу на forward рендерере + DS ещё осваивать некоторое время придётся а влом и незачем. 100500 лайтов я делать не собираюсь!! меня ВПОЛНЕ УСТРАИВАЕТ 8 лайтов на объект и 4 или 8 шадоумапов (из этих лайтов). Это вполне реализуемо на FR - в очередной раз пример: Crysis : D
ФАК! ну ХОТЬ КТО-НИБУДЬ подскажет по DPEM???????
L
> Это вполне реализуемо на FR - в очередной раз пример: Crysis : D
а какой ценой ? когда дойдешь до Deffered Shadows - позови :)
innuendo
> а какой ценой ?
а какой ценой? я что, шейдер чтоли не напишу? : D менеджмент теней тотже что и в DR + слыхал что там нуна плясать с бубном вокруг прозрачностей всяких
мне религия подсказывает юзать FR : )
п.с. пруф:
4 динамических лайта + освещение от солнца
L
> а какой ценой? я что, шейдер чтоли не напишу? :
ты доку про Крайзис прочти сначала
Тема в архиве.