Доброго времени суток, ув. Геймдевелопелы. Изучил такие техники как Shadow Volume, Shadow Map. Но вопрос вот в чем. Моя сцена в приложении - улица города, с домами, столбами, транспортом, лавочками и т.п. Для outdoor сцен нвидиа советуют использовать шадоумап. Но если я буду использовать шадоумап - то тени будут отбрасывать неравномерно. Чем дальше от источника света тем тень получится вытянутее. А если источник совсем далеко то будут дикие артефакты. Использовать объемы, это жестоко в плане вычислений (сложная сцена). Думал перемещать источник света за обьектом, не меняя направление излучения, итог - тени изменяют форму (этого не надо). Просчитывать тени заранее (лайтмап) тоже не подходит. Надо чтобы был один источник света который летает по "небу", а тень должна менятся от всех обьектов. Но как я не знаю. В ГТА СА как-то сделали...
разве в GTA San Andreas shadow map? Помоему там stencil
а для солнца обычный SM не используют, как я понял. Есть куча всяким xSM. PSM, PSSM,TSM,CSM... только геморно это очень сделать))).
BenTech спасибо, за ответ.
Это я немного не туда смотрел. Действительно думаю лучше использовать для статики лайт-мапы, для динамики шадоумапы. С волюмами лучше не делать, т.к. не под то точю проект (симулятор транспорта - некогда будет смотреть на тени :)
fzr125
>симулятор транспорта - некогда будет смотреть на тени :)
- шутка такая? как раз так там на тени больше всего смотришь... это в флай симе нафиг не нужны тени...
>симулятор транспорта
ммм это типо гоночки? Просто если так, то можно сделать PSSM на все. Т.к. источник света будет один - солнце. Ночью можно обойтись обычным направленным светом(свет от фар) даже без теней.
ИМХО делать и динамические и статические тени одновременно геморно. Плюс лайтмапы придеться перерасчитывать если, допустим, захочешь изменить геометрию уровня(статики).
Был тут проект недавно Camaro Unleashed там как раз PSSM, смотрится неплохо.
ЗЫ может тут найдутся добрые люди и подскажут, как сделать PSSM - тени? А то все, что нашел в сети под OpenGl - это древнюю демку(без шойдеров).
BenTech
> ЗЫ может тут найдутся добрые люди и подскажут, как сделать PSSM - тени? А то
> все, что нашел в сети под OpenGl - это древнюю демку(без шойдеров).
Сам только начал читать, уже ближе к желаемому результату...
Ну про ПССМ я почитал, в принципе нормально, но есть одно НО.
Я не знаю как правильно реализовать это в большой сцене. Ну если источник 1 - Солнце, то все объекты независимо от их местоположения должны отбрасывать тень под одним углом. А этого средствами шадоумапа не добьешся... Но ведь как-то ж можно сделать. Лайтмапы не катят. Т.к. нужно будет делать смену времени суток. Объемы - слишком тормозят.
Может сделать ПССМ и просто перемещать источник света за игроком. Ведь источник высоко висит, а игрок слишком низко бегает по левелу, и собственно не заметит фейка. Или нет? Речь идет о таких локациях типа ВОВ или ГТАСА - тоесть, не маленьких.
П.С. Заметил в ГТАСА такие вот бока :
-тень все таки лежит под разными углами от двух рядом стоящих обьектов, значит в сцене все-таки используют источники освещения.
-Игрок может отбросить тень в тени другого обьекта (и даже ночью тень видна)
Но под какими углами там не ходит тень - нет артефактов aliasing - что натолкнуло на мысль что там не шадоумапы... Блин совсем запутался... Какими тенями можно добится чего-то среднего (один угол теней на всей локации)?
fzr125
> то все объекты независимо от их местоположения должны отбрасывать тень под одним углом
Для этого есть ортогональлная проекция
fzr125
"...то все объекты независимо от их местоположения должны отбрасывать тень под одним углом..."
Для этого, как уже написал Sergio666, используется ортогональная проекция, т.е. проекция без перспективных искажений. Для источника света вроде солнца требуется только вектор направления. Поэтому при отрисовке в теневую текстуру позиция солнца может перемещатся вместе с игроком.
В стенсиле тоже самое, вытягиваем рёбра без учёта позиции источника света, у нас есть угол падения лучей от солнца и мы вытягиваем рёбра именно в этом направлении.
"Заметил в ГТАСА..."
На шадоумепе и шадоуволюме свет клином не сошёлся. Например, в CS Source и, видимо, в HF2 применялись, т.н. "проекционные" тени.
fzr125
> то все объекты независимо от их местоположения должны отбрасывать тень под
> одним углом.
Для этого есть паралельный источнек света.
Sergio666
> Для этого есть ортогональлная проекция
Можно поподробнее. Я так понял, что за каждый проход мы рендерим в шадоумап каждый обьект и перемещаем источник света так чтобы углы сохранились? Или не?
.Scotina
> Поэтому при отрисовке в теневую текстуру позиция солнца может перемещатся
> вместе с игроком.
А не будет ли заметно при взгляде на дальние обьекты, что их тень изменяет свой угол от того что источник света тоже меняет позицию?
fzr125
ты путаешь с перспективной проекцией. Ортогональность - есть параллельность перпендикулярность. т.е. объкт, находящийся от камеры на расстоянии в 5м будет таких же размеров, как и 1000м
fzr125
"Или не..."
Не. Написали же, солнце - это направленный ( а не точечный ) источник света. Поэтому точно также рендерим все объекты (в обычной шадоумапе ) в один проход, только во время отрисовки используем не обычную перспективную проекцию ( которая, например в камере игрока ), а ортогональную. Ортогональная проекция, это как в черчении, когда мы рисуем изображение без перспективы. Т.е. в перспективной проекции видимое камерой представляет собой пирамиду расширяющуюся от зрителя, а в ортогональной - куб. Наверняка первые твои треугольники, кубики, шарики в ОГЛ, или ДиректИксе были отрисованы без перспективы. Текст ещё без перспективы отрисовывается.
Blew_zc , .Scotina - Спасибо, буду разбиратся. Но суть вроде понял. Еще раз спасибо.
Тема в архиве.