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

Software rendering - occlusion culling

Страницы: 1 2 3 4 5 Следующая »
#0
14:49, 15 сен. 2014

Приветы!

Значит, такая тема. Occlusion culling по следующей методе:

1. Доставать depth-buffer с прошлого кадра в низком разрешении (256х128 например)
2. Рендерить софтварно ббоксы объектов
3. Сравнивать с depth-buffer"ом и отсекать то что не попадает.

Теперь несколько чисто технических вопросов:
1. Как лучше сделать downsampling depth-buffer'а? (с пропуском/интерполяцией по соседним значениям)
2. Как правильно сделать reprojection depth-buffer с предыдущего кадра в текущий?

Если есть еще какие идеи по сабжу, то было бы классно обсудить.
Peace.


#1
15:01, 15 сен. 2014

>Приветы!
Привет.

#2
15:07, 15 сен. 2014

Mephisto std
> 1. Как лучше сделать downsampling depth-buffer'а? (с пропуском/интерполяцией по
> соседним значениям)
лучше с min операцией при совмещении пикселей, я думаю

#3
15:18, 15 сен. 2014

Mr F
Хммм...
min - в смысле ближе к камере? Т.е. 0 - это прямо в камере, 2^32 - это максимально далеко от камеры кажись в Z-buffer
Наоборот, чтобы минимизировать артефакты куллинга надо по идее max брать
???

#4
15:53, 15 сен. 2014

Mephisto std
да, тьфу, попутал, max нужен
min хорош когда шадоумапы даунсемплишь и не хочешь потерять мелкие детали теней)
а тут наоборот надо мелочи обрезать и оставить толстое и внутренее самое

#5
16:09, 15 сен. 2014

Mr F
А, собственно, каков правильный механизм такого даунсемплинга с точки зрения шейдеров?
Мне вот приходит такой алго на ум:
Например, из 1024 в 256
1. делим, получаем сколько пикселей приходится на один (4)
2. вычисляем смещение текстурных координат в старой текстуре на один пиксель (1/1024)
3. И для каждого пикселя собственно РТ делаем 4х4 лукапа (в высоту и ширину).
4. Лукапы фильтровать с max

#6
16:09, 15 сен. 2014

А можно узнать, зачем? В голову приходит только платформа без ocq\conditional render.

#7
16:25, 15 сен. 2014

N1
зачем что?

#8
16:46, 15 сен. 2014

Mephisto std
Думал из вопроса вытекает, что "зачем" - про то, что сподвигло OC делать софтваром.

#9
16:55, 15 сен. 2014

N1
Ну я подумал что ты это имеешь ввиду, но сама суть вопроса меня удивила, решил переспросить на всякий случай. =)

Нужно для сложных процедурных сцен (где нельзя заранее предрасчитать зоны видимости, например, открытые пространства),
где стоимость рисования объектов очень велика.

Пример: огромный лес, в котором почти всегда большую часть деревьев закрывают другие деревья,
однако по фруструм-куллингу все эти деревья попадают в рендер, что отнимает довольно много миллисекунд
у кадра.

#10
17:02, 15 сен. 2014

N1
> А можно узнать, зачем? В голову приходит только платформа без ocq\conditional
> render.

Стандартная система куллинга в Frostbyte

ТС, можно погуглить hierarchical z buffer occlusion culling, там много схожего.

#11
17:07, 15 сен. 2014

Mephisto std
OC лучше работает в коридорных локациях. В описанной сцене он скорее загнет производительность растеризацией тонны ббоксов. С процедуральным контентом лучше сработают хаки с учетом его специфики(например, снижать расстояние отсечения для деревьев\камней\травы близких по высоте к уровню камеры). Я вроде не слышал, чтобы OC по depth-buffer юзали в чем-то типа кваки\анрила. Если это так, интересно что конкретно мешало. Там уровни для этого хорошо подходят.

TheGrayWolf
> hierarchical z buffer
Гораздо сложнее. И разве он там совсем не использует GPU?

#12
17:09, 15 сен. 2014

Mephisto std
> 1. Доставать depth-buffer с прошлого кадра в низком разрешении (256х128
> например)
Атефактов не оберёшься. Надо нарендерить глубину окклюдеров текущего кадра в низком разрешении в буфер глубины, потом построить иерархический со взятием дальнего от камеры значения глубиныю А уж потом, когда есть иерархический буфер, отсекай сколько угодно.

Разрешение, кстати, можно и побольше выбрать, чем 256x128. Отрендерить софтварно одну глубину даже в разрешении 640x480 будет стоить почти ничего.

#13
17:16, 15 сен. 2014

Panzerschrek[CN]
а почему софтварно? что мешает отдельную  текстурку глубины привязать к отдельному фреймбуферу низкого разрешения, туды все отрисовать, что нужно и потом эту текстурку уже и использовать. 

#14
17:20, 15 сен. 2014

MAMOHT-92
Наверно, чтобы получать глубину в текущем кадре, а не из прошлого, не?

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

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

Тема закрыта.