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

Уличное освещение множеством источников света

Страницы: 1 2 Следующая »
#0
19:55, 8 окт 2010

Добрый день!

Я занимаюсь разработкой движка для отображения геоинформационных данных, если проще - визуализатор карт.
Сейчас идёт разработка ночного освещения - сделан свет в окошках.
Необходимо разработать ещё и освещение уличными фонарями. Их может быть в кадре несколько десятков тысяч.
Подскажите оптимальное решение.

Варианты, которые вижу я:
1. Простые лайтмэпы, накладываются на тайл ландшафта и находяшиеся на этом тайле объекты. Накладываются тупо проекцией сверху. Строятся при загрузке данных путём отрисовки источников света в текстуру. В данном случае это получатся просто плавно затухающие к краям круги. Недостаток - источники получатся не сферические, а цилиндрические.
2. Учёт источников света в шейдере - цикл по всем источникам света, находящимся на данном тайле террэйна. Минусы - ограничение по количеству источников света на тайл террэйна. Думаю будут проблемы с передачей такого количества параметров в шейдер.
Плюсы - динамичность. Из оптимизаций - рисовать ближайшие к наблюдателю N источников света. Вдали рисовать только гало - частицу с соответствующей текстурой.
3. Слышал ещё про некие стенсильные источники света. Рисуются световые объёмы (по аналогии с shadow volumes) - сферы. В стенсиле получаем освещяется ли точка - находится ли она в световом объёме. Минусы - много вызовов, связанных с отрисовкой сфер. Границы источников света - жёсткие, не плавные.

Что посоветуете?

GISEngine | Уличное освещение множеством источников света
#1
20:01, 8 окт 2010

http://www.graphics.cornell.edu/~bjw/lightcuts.pdf

#2
20:11, 8 окт 2010

AST
Делай лайтмапы.  Такое огромное кол-во света быстро тебе ничто не просчитает. Лайтмап - если правильно построен то и выглядеть будет красиво.

#3
20:28, 8 окт 2010

Вариант 1 можно усовершенствовать в шейдере, так что бы это были не цилиндры света, а некое приближение к сфере.

#4
22:31, 8 окт 2010

Посмотри Ассасин Крид для PSP. Там лайтмап, планарно на ландшафт + въсота света в каждой клетке. Возможно 2 въсотъ, если свет повъше над ландшафтом.

#5
0:09, 9 окт 2010

а как же deferred shading?.. это более продвинутый 3-й вариант

#6
0:59, 9 окт 2010

arabesc, DS будет медленнее, чем предложенные варианты. Причем, учитывая статичность фонарей, DS - очевидный оверкилл.

#7
1:03, 9 окт 2010

arabesc
Можно вблизи отрубать лайтмап и включать DS.

#8
1:34, 9 окт 2010

AST
Оффтоп: Можно к ночи прикрутить blue shift - только настроить правильно - немного пореалистичнее будет.

#9
2:12, 9 окт 2010

Синий Дракон
> DS будет медленнее, чем предложенные варианты.
лайтмапы надо считать и хранить
для геоинформационной системы, оперирующей большими объёмами данных, это может быть существенный минус

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

#10
2:25, 9 окт 2010

arabesc
> лайтмапы надо считать и хранить
Подлетаем к городу - считаем лайтмеп.

#11
18:56, 9 окт 2010

FROL
Сложновато думаю для таких целей

ksacvet777
Синий Дракон
Z
Да, надо попробовать лайтмэпы. Может для фонарей они будут и ничего.
Только памяти они будут немало отнимать. Все объекты генерируются в реальном времни в отдельном потоке. Поэтому считать лайтмэп в отдельном потоке для меня не составит труда.
Надо попробовать.

fzr125
Это какой-то пост эффект?

arabesc
Да, deferred тоже можно поробовать.
По крайней мере deferred пасс сделать для уличного освещения.
После отрисовки сцены - взять depth buffer, из него получать положения и рисовать источники света. Единственная проблема будет - много draw call-ов.

А что насчёт гало частицами?

#12
20:37, 9 окт 2010

AST
> Да, deferred тоже можно поробовать.
посмотри демку ds от intel - там правда dx11

#13
3:47, 10 окт 2010

AST
> Единственная проблема будет - много draw call-ов.
группируй источники света и рисуй хоть за один dip

#14
10:07, 10 окт 2010

AST
Как таковые лайтмэпы не нужны, просто для каждого объекта учитываешь только те источки света, которые на него влияют.
Уличный же фонарь светит в радиусе 20-50 метров, а не 10км.

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

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