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

Тени в outdoor сценах

#0
20:44, 20 авг 2009

Доброго времени суток, ув. Геймдевелопелы. Изучил такие техники как Shadow Volume, Shadow Map. Но вопрос вот в чем. Моя сцена в приложении - улица города, с домами, столбами, транспортом, лавочками и т.п. Для outdoor сцен нвидиа советуют использовать шадоумап. Но если я буду использовать шадоумап - то тени будут отбрасывать неравномерно. Чем дальше от источника света тем тень получится вытянутее. А если источник совсем далеко то будут дикие артефакты. Использовать объемы, это жестоко в плане вычислений (сложная сцена). Думал перемещать источник света за обьектом, не меняя направление излучения, итог - тени изменяют форму (этого не надо). Просчитывать тени заранее (лайтмап) тоже не подходит. Надо чтобы был один источник света который летает по "небу", а тень должна менятся от всех обьектов. Но как я не знаю. В ГТА СА как-то сделали...

#1
21:15, 20 авг 2009

разве в GTA San Andreas shadow map? Помоему там stencil

а для солнца обычный SM не используют, как я понял. Есть куча всяким xSM. PSM, PSSM,TSM,CSM... только геморно это очень сделать))).

#2
21:32, 20 авг 2009

BenTech спасибо, за ответ.
Это я немного не туда смотрел. Действительно думаю лучше использовать для статики лайт-мапы, для динамики шадоумапы. С волюмами лучше не делать, т.к. не под то точю проект (симулятор транспорта - некогда будет смотреть на тени :)

#3
21:37, 20 авг 2009

fzr125
>симулятор транспорта - некогда будет смотреть на тени :)
- шутка такая? как раз так там на тени больше всего смотришь... это в флай симе нафиг не нужны тени...

#4
21:54, 20 авг 2009

>симулятор транспорта

ммм это типо гоночки? Просто если так, то можно сделать PSSM на все. Т.к. источник света будет один - солнце. Ночью можно обойтись обычным направленным светом(свет от фар) даже без теней.

ИМХО делать и динамические и статические тени одновременно геморно. Плюс лайтмапы придеться перерасчитывать если, допустим, захочешь изменить геометрию уровня(статики).

Был тут проект недавно Camaro Unleashed там как раз PSSM, смотрится неплохо.

ЗЫ может тут найдутся добрые люди и подскажут, как сделать PSSM - тени? А то все, что нашел в сети под OpenGl - это древнюю демку(без шойдеров).

#5
0:10, 21 авг 2009

BenTech
> ЗЫ может тут найдутся добрые люди и подскажут, как сделать PSSM - тени? А то
> все, что нашел в сети под OpenGl - это древнюю демку(без шойдеров).

GPU3 GEMS PSSM

Сам только начал читать, уже ближе к желаемому результату...

#6
12:26, 22 авг 2009

Ну про ПССМ я почитал, в принципе нормально, но есть одно НО.

Я не знаю как правильно реализовать это в большой сцене. Ну если источник 1 - Солнце, то все объекты независимо от их местоположения должны отбрасывать тень под одним углом. А этого средствами шадоумапа не добьешся... Но ведь как-то ж можно сделать. Лайтмапы не катят. Т.к. нужно будет делать смену времени суток. Объемы - слишком тормозят.
Может сделать ПССМ и просто перемещать источник света за игроком. Ведь источник высоко висит, а игрок слишком низко бегает по левелу, и собственно не заметит фейка. Или нет? Речь идет о таких локациях типа ВОВ или ГТАСА - тоесть, не маленьких.

П.С. Заметил в ГТАСА такие вот бока :
-тень все таки лежит под разными углами от двух рядом стоящих обьектов, значит в сцене все-таки используют источники освещения.
-Игрок может отбросить тень в тени другого обьекта (и даже ночью тень видна)

Но под какими углами там не ходит тень - нет артефактов aliasing - что натолкнуло на мысль что там не шадоумапы... Блин совсем запутался... Какими тенями можно добится чего-то среднего (один угол теней на всей локации)?

#7
12:44, 22 авг 2009

fzr125
> то все объекты независимо от их местоположения должны отбрасывать тень под одним углом
Для этого есть ортогональлная проекция

#8
13:16, 22 авг 2009

fzr125
"...то все объекты независимо от их местоположения должны отбрасывать тень под одним углом..."

Для этого, как уже написал Sergio666, используется ортогональная проекция, т.е. проекция без перспективных искажений. Для источника света вроде солнца требуется только вектор направления. Поэтому при отрисовке в теневую текстуру позиция солнца может перемещатся вместе с игроком.
В стенсиле тоже самое, вытягиваем рёбра без учёта позиции источника света, у нас есть угол падения лучей от солнца и мы вытягиваем рёбра именно в этом направлении.

"Заметил в ГТАСА..."

На шадоумепе и шадоуволюме свет клином не сошёлся. Например, в CS Source  и, видимо, в HF2 применялись, т.н. "проекционные" тени.

#9
13:18, 22 авг 2009

fzr125
> то все объекты независимо от их местоположения должны отбрасывать тень под
> одним углом.
Для этого есть паралельный источнек света.

#10
13:43, 22 авг 2009

Sergio666
> Для этого есть ортогональлная проекция

Можно поподробнее. Я так понял, что за каждый проход мы рендерим в шадоумап каждый обьект и перемещаем источник света так чтобы углы сохранились? Или не?

.Scotina
> Поэтому при отрисовке в теневую текстуру позиция солнца может перемещатся
> вместе с игроком.


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

#11
13:54, 22 авг 2009

fzr125
ты путаешь с перспективной проекцией. Ортогональность - есть параллельность перпендикулярность. т.е. объкт, находящийся от камеры на расстоянии в 5м будет таких же размеров, как и 1000м

#12
13:56, 22 авг 2009

fzr125
"Или не..."

Не. Написали же, солнце - это направленный ( а не точечный ) источник света. Поэтому точно также рендерим все объекты (в обычной шадоумапе ) в один проход, только во время отрисовки используем не обычную перспективную проекцию ( которая, например в камере игрока ), а ортогональную. Ортогональная проекция, это как в черчении, когда мы рисуем изображение без перспективы. Т.е. в перспективной проекции видимое камерой представляет собой пирамиду расширяющуюся от зрителя, а в ортогональной - куб. Наверняка первые твои треугольники, кубики, шарики в ОГЛ, или ДиректИксе были отрисованы без перспективы. Текст ещё без перспективы отрисовывается.

#13
13:59, 22 авг 2009

Blew_zc , .Scotina - Спасибо, буду разбиратся. Но суть вроде понял. Еще раз спасибо.

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

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