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

Shadow volumes - advanced optimizations + shadowmaps для солнца на pixel shader 2

Страницы: 1 2 38 9 Следующая »
#0
16:28, 21 ноя. 2013

короче

релизю свой олдскул doom3 рендерер

и встала серьезная проблема в скорости изза теней от статики

я перепробовал дохрена всего - но последние мои пробы НЕ дали ВООБЩЕ никакого прироста в рендере
не знаю насколько нормальные показатели

gf8500 GT - 36lights ; 1024*768 - типичные лайты факелов небольшого радиуса

без теней - 205 000 tris - 40fps
с тенями -  330 000 tris - 12fps

???

п.с
дум3 дает всегда 60фпс
но в кастомном mod кое где много лайтов и скорость проседает до 25 - это у них в думе просто 3 лайта на сцену чтоли?

предложите оптимизации - а я отвечу делал или нет.. потому что задолбаешься перечислять что уже делал.

тормозит именно рендерер ребер как я понял.. надо уменьшать колво отбрасывающих тени объектов .. там восновном кубы уровня - статика

>надо както определить если вообще объект свою тень отбрасывает и она видна
как этосделать?

строю волум в офлайне на проце.. и пересекаю тупо треугольники волума со сценой... если нет пересечения - то от объекта тень не отбрасываю - РАЙТ?

интересуют подобные еще offline тесты надобностей -... еще можно придумать если объект ПОЛНОСТЬЮ в тени. тоже тень не отбрасывать
как проверить это  = я еще не знаю...


#1
16:32, 21 ноя. 2013

The Andreyp
> > адо както определить если вообще объект свою тень отбрасывает и она видна
> как этосделать?
Проекцию ограничивающего бокса на другие объекты проверять на видимость в frustum. Для простоты на плоскость земли, если не видна не строить тень вообще. Но такие случаи редки.
>строю волум в офлайне на проце.. и пересекаю тупо треугольники волума со сценой... если нет пересечения - то от объекта тень не отбрасываю - РАЙТ?
это медленно очень.

#2
16:45, 21 ноя. 2013

>Проекцию ограничивающего бокса
недостаточно понял - в фпс нет такого понятия как пол - там геометрия может быть произвольная; это надо тогда проекцию каждых пар иметь - а проекция если зависит от камеры - то перессчитывать ее каждый кадр
все объекты перебирать в онлайне нереально

я кстати брал баундбокс SV и проверял во фрустуме его - я знал что тень может быть не видна
но это НЕ ДАЛО НИКАКОГО прироста..

>это медленно очень
у меня bsp - может прокатит?

#3
17:08, 21 ноя. 2013

The Andreyp
1. Проверяешь ли ты объект попадает он в камеру или нет, и если нет, то не рисовать.

2. Как то давно читал про технику рендера DOOM 3. У них "низкополигональные" модели скругляются шейдером. Т.е. реальное число треугольников на модель ограниченно. Как у тебя с этим обстоят дела ?

3. Высокополигональных моделей на сцену не много. Вот такой он коридорный дум. Т.е. число треугольников на сцену у них также ограниченно.

#4
17:50, 21 ноя. 2013

я бы посоветовал
1.волюмы вытягивать на gpu
2.на цпу - проверять только попадание волюма во фрустум (капсула), вытягивать всегда, если попадает в радиус влияния источника света
3.не вытягивать волюм далеко, чтобы экономить филлрейт. Условно - чтобы под землю только ушел волюм.
4.36 источников у тебя, от которых тени отбрасываются?  в идеале 1, до 3-4 если очень хочется - больше слишком дорого

узкое место стенцил теней это филлрейт, важен не столько полигонаж объектов, сколько количество объектов в сцене, количество обрабатываемых пикселей. Больше источников света = больше геометрии = больше overdraw = проседание фпс
не работал со стенцильными тенями особо, но можно подумать в сторону рисования теней в half res с умным upsampling'ом / растягиванием на весь экран

#5
17:53, 21 ноя. 2013

KKH
> Проверяешь ли ты объект попадает он в камеру или нет, и если нет, то не рисовать.
У меня вопрос по данному пункту. Если объект не попадает в камеру, но тень от него видна (или возможно видна) в камере.
Как обычно поступают в данном случае? Как проверяют тень во фрустуме? Делают ли так вообще?

#6
18:19, 21 ноя. 2013

The Andreyp
> недостаточно понял - в фпс нет такого понятия как пол - там геометрия может быть произвольная;
берешь нижнюю точку ограничивающего бокса объекта от нее стоишь плоскость с нормалью вверх. строишь проекцию от верхник точек бокса на эту плоскость. Смотришь видимость проекции в камере. Это намного быстрее чем пересечение полигонов волюма со сценой.
Либо как тут сказали проверяешь волюм на видимость.

>но это НЕ ДАЛО НИКАКОГО прироста..
может мало объектов у которых не видна тень? Представь лес где несколько десятков деревьев, У 2-3 дерева ты не увидишь тень на земле, потому-что будешь близко стоять к ним и не видеть низ земли перед ними. Но если опустить голову то увидишь.
>у меня bsp - может прокатит?
Вообще перебор полигонов это плохая затея.

#7
19:35, 21 ноя. 2013

>Проверяешь ли ты объект попадает он в камеру или нет, и если нет, то не рисовать.
объект проверяется только на occlusion, PVS , а по фрусутму я не стал.. тень должна быть видна если к объекту спиной..
так - всеравно можно попасть на артефакт, но забил...

тень строю если объект в PVS (не оклюжен)
у меня там строится PVS как в ку3

>реальное число треугольников на модель ограниченно. Как у тебя с этим обстоят дела ?
никаких ограничений - как вставил так и будет..
но у меня там со статикой проблемы - её потому что 80% в кадре..

> коридорный дум
да - походу в коридорах только и нормально.. три лайта - и тени только от одного из трех
да еще и 4 стены вокруг - вот и 60фпс

>волюмы вытягивать на gpu
делаю

>на цпу - проверять только попадание волюма во фрустум
проверял - прироста не дало, но проверял AABB
капсулу как строить - непонятно

>вытягивать всегда, если попадает в радиус влияния источника света
делаю,  тени строятся только от тех объектов которые в радиусе лайта

>не вытягивать волюм далеко
делаю - вытягиваю на lightRadius*4 - иначе не доходит

>36 источников у тебя, от которых тени отбрасываются? в идеале 1, до 3-4 если очень хочется -
больше слишком дорого

да - от всех 36 - отбрасываются тени
картинка сцены - фпс старый - но сцена осталась ))

https://dl.dropboxusercontent.com/u/5862637/%D0%A0%D0%B5%D0%B7%D1… /R.f.d018.jpg

>в half res с умным upsampling'ом / растягиванием на весь экран
это получается в отдельный колорбуфер рисовать только тени?
а потом получать резалт и растягивать + миксовать с лайтингом?

это я так в SM deffered своем делал.. здесь не знаю... стоит ли

>Как обычно поступают в данном случае? Как проверяют тень во фрустуме? Делают ли так вообще?
объект и его тень кулятся НЕЗАВИСИМО
как я уже писал - кулил AABb тени - не помогло

2Andrey - видимо придется вернуть ту проверку на видимость aabb тени во фрустуме
над проекцией подумать попытаюсь...спс

>может мало объектов у которых не видна тень
может и мало - хз

Так я понял метод проекций?

https://dl.dropboxusercontent.com/u/5862637/proj.png

и что с этими фиолетовыми - pointInFrustum?

#8
20:07, 21 ноя. 2013

The Andreyp
> картинка сцены - фпс старый - но сцена осталась ))
не видно откуда там взялось 200к+ треугольников.
> gf8500 GT - 36lights
видюха уже довольно старая , и при 36 источниках если каждый дает свою тень на объект это же вообще ж, объединяй рядом стоящие источники в один, также можешь для каста тени использовать упрощенную геометрию, но при этом соблюдать условие чтобы она полностью покрывала геометрию идущую на рендер.

#9
20:42, 21 ноя. 2013

>не видно откуда там взялось 200к
не всё счтиал - скрин старый

геометрия лайта это тоже трисы в плюс

но на самом деле откуда-то взялась))

>объединяй рядом стоящие источники в один,
да, можно - просто поставить у соседних не отбрасывать тень флаг
получается яркость та же только из них тень отбрасывает один

>для каста тени использовать упрощенную геометрию
будут артефакты - но та статика кубы - куда уж проще)

п.с
на GTX570 оно дает 80фпс с тенями

#10
21:10, 21 ноя. 2013

The Andreyp
вообще если у тебя много статики, то зачем тебе теневые объемы? Упакуй все в лайтмэпы, а стенсильные тени если так сильно их хочется оставь для динамики.

#11
21:20, 21 ноя. 2013

The Andreyp
> Так я понял метод проекций?
>
> https://dl.dropboxusercontent.com/u/5862637/proj.png
>
> и что с этими фиолетовыми - pointInFrustum?
Ну типа того. Проецируешь верхние точки aabb на эту плоскость, используя направление источника света. Полученные 4 точки проверяешь через pointInFrustum как ты и написал.
Да и послушай про отсечение объединение источников света. Иначе все умрет.

#12
21:23, 21 ноя. 2013

The Andreyp
"...330 000..."

Это через чур много. Как бы, чудес не бывает, в супер-движках супер фпс, только из-за того, что там мало полигонов отрисовывается. Если говорить, конкретно о Дум3, то там, во-первых, традиционно хорошо отсекаются видимые полигоны; потом, всё лоуполи (и стены, и монстры и завалы из коробок); всего 2-3 монстра в кадре (во всяких аддонах с большим количеством монстров фпс заметно проседает) и, опять же, как правило, 2-3 источника света в кадре с очень ограниченным радиусом.

#13
21:42, 21 ноя. 2013

Aroch
> куй все в лайтмэпы, а стенсильные тени есл

птому что любой статич лайт может стать динамическим - будет взаимодействие
+ лайтмапы - память + косяки в сжатии. некрасиво

у меня есть quake3 rendermodel - там лайтмапы и полная статика- но это для мобил будет скорее всего

.Scotina
понятно...


Andrey
> используя направление источника света
а если у меня только OMNI ?

#14
21:46, 21 ноя. 2013

The Andreyp
> а если у меня только OMNI ?
тогда не проверяем

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

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