короче
релизю свой олдскул doom3 рендерер
и встала серьезная проблема в скорости изза теней от статики
я перепробовал дохрена всего - но последние мои пробы НЕ дали ВООБЩЕ никакого прироста в рендере
не знаю насколько нормальные показатели
gf8500 GT - 36lights ; 1024*768 - типичные лайты факелов небольшого радиуса
без теней - 205 000 tris - 40fps
с тенями - 330 000 tris - 12fps
???
п.с
дум3 дает всегда 60фпс
но в кастомном mod кое где много лайтов и скорость проседает до 25 - это у них в думе просто 3 лайта на сцену чтоли?
предложите оптимизации - а я отвечу делал или нет.. потому что задолбаешься перечислять что уже делал.
тормозит именно рендерер ребер как я понял.. надо уменьшать колво отбрасывающих тени объектов .. там восновном кубы уровня - статика
>надо както определить если вообще объект свою тень отбрасывает и она видна
как этосделать?
строю волум в офлайне на проце.. и пересекаю тупо треугольники волума со сценой... если нет пересечения - то от объекта тень не отбрасываю - РАЙТ?
интересуют подобные еще offline тесты надобностей -... еще можно придумать если объект ПОЛНОСТЬЮ в тени. тоже тень не отбрасывать
как проверить это = я еще не знаю...
The Andreyp
> > адо както определить если вообще объект свою тень отбрасывает и она видна
> как этосделать?
Проекцию ограничивающего бокса на другие объекты проверять на видимость в frustum. Для простоты на плоскость земли, если не видна не строить тень вообще. Но такие случаи редки.
>строю волум в офлайне на проце.. и пересекаю тупо треугольники волума со сценой... если нет пересечения - то от объекта тень не отбрасываю - РАЙТ?
это медленно очень.
>Проекцию ограничивающего бокса
недостаточно понял - в фпс нет такого понятия как пол - там геометрия может быть произвольная; это надо тогда проекцию каждых пар иметь - а проекция если зависит от камеры - то перессчитывать ее каждый кадр
все объекты перебирать в онлайне нереально
я кстати брал баундбокс SV и проверял во фрустуме его - я знал что тень может быть не видна
но это НЕ ДАЛО НИКАКОГО прироста..
>это медленно очень
у меня bsp - может прокатит?
The Andreyp
1. Проверяешь ли ты объект попадает он в камеру или нет, и если нет, то не рисовать.
2. Как то давно читал про технику рендера DOOM 3. У них "низкополигональные" модели скругляются шейдером. Т.е. реальное число треугольников на модель ограниченно. Как у тебя с этим обстоят дела ?
3. Высокополигональных моделей на сцену не много. Вот такой он коридорный дум. Т.е. число треугольников на сцену у них также ограниченно.
я бы посоветовал
1.волюмы вытягивать на gpu
2.на цпу - проверять только попадание волюма во фрустум (капсула), вытягивать всегда, если попадает в радиус влияния источника света
3.не вытягивать волюм далеко, чтобы экономить филлрейт. Условно - чтобы под землю только ушел волюм.
4.36 источников у тебя, от которых тени отбрасываются? в идеале 1, до 3-4 если очень хочется - больше слишком дорого
узкое место стенцил теней это филлрейт, важен не столько полигонаж объектов, сколько количество объектов в сцене, количество обрабатываемых пикселей. Больше источников света = больше геометрии = больше overdraw = проседание фпс
не работал со стенцильными тенями особо, но можно подумать в сторону рисования теней в half res с умным upsampling'ом / растягиванием на весь экран
KKH
> Проверяешь ли ты объект попадает он в камеру или нет, и если нет, то не рисовать.
У меня вопрос по данному пункту. Если объект не попадает в камеру, но тень от него видна (или возможно видна) в камере.
Как обычно поступают в данном случае? Как проверяют тень во фрустуме? Делают ли так вообще?
The Andreyp
> недостаточно понял - в фпс нет такого понятия как пол - там геометрия может быть произвольная;
берешь нижнюю точку ограничивающего бокса объекта от нее стоишь плоскость с нормалью вверх. строишь проекцию от верхник точек бокса на эту плоскость. Смотришь видимость проекции в камере. Это намного быстрее чем пересечение полигонов волюма со сценой.
Либо как тут сказали проверяешь волюм на видимость.
>но это НЕ ДАЛО НИКАКОГО прироста..
может мало объектов у которых не видна тень? Представь лес где несколько десятков деревьев, У 2-3 дерева ты не увидишь тень на земле, потому-что будешь близко стоять к ним и не видеть низ земли перед ними. Но если опустить голову то увидишь.
>у меня bsp - может прокатит?
Вообще перебор полигонов это плохая затея.
>Проверяешь ли ты объект попадает он в камеру или нет, и если нет, то не рисовать.
объект проверяется только на 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?
The Andreyp
> картинка сцены - фпс старый - но сцена осталась ))
не видно откуда там взялось 200к+ треугольников.
> gf8500 GT - 36lights
видюха уже довольно старая , и при 36 источниках если каждый дает свою тень на объект это же вообще ж, объединяй рядом стоящие источники в один, также можешь для каста тени использовать упрощенную геометрию, но при этом соблюдать условие чтобы она полностью покрывала геометрию идущую на рендер.
>не видно откуда там взялось 200к
не всё счтиал - скрин старый
геометрия лайта это тоже трисы в плюс
но на самом деле откуда-то взялась))
>объединяй рядом стоящие источники в один,
да, можно - просто поставить у соседних не отбрасывать тень флаг
получается яркость та же только из них тень отбрасывает один
>для каста тени использовать упрощенную геометрию
будут артефакты - но та статика кубы - куда уж проще)
п.с
на GTX570 оно дает 80фпс с тенями
The Andreyp
вообще если у тебя много статики, то зачем тебе теневые объемы? Упакуй все в лайтмэпы, а стенсильные тени если так сильно их хочется оставь для динамики.
The Andreyp
> Так я понял метод проекций?
>
> https://dl.dropboxusercontent.com/u/5862637/proj.png
>
> и что с этими фиолетовыми - pointInFrustum?
Ну типа того. Проецируешь верхние точки aabb на эту плоскость, используя направление источника света. Полученные 4 точки проверяешь через pointInFrustum как ты и написал.
Да и послушай про отсечение объединение источников света. Иначе все умрет.
The Andreyp
"...330 000..."
Это через чур много. Как бы, чудес не бывает, в супер-движках супер фпс, только из-за того, что там мало полигонов отрисовывается. Если говорить, конкретно о Дум3, то там, во-первых, традиционно хорошо отсекаются видимые полигоны; потом, всё лоуполи (и стены, и монстры и завалы из коробок); всего 2-3 монстра в кадре (во всяких аддонах с большим количеством монстров фпс заметно проседает) и, опять же, как правило, 2-3 источника света в кадре с очень ограниченным радиусом.
Aroch
> куй все в лайтмэпы, а стенсильные тени есл
птому что любой статич лайт может стать динамическим - будет взаимодействие
+ лайтмапы - память + косяки в сжатии. некрасиво
у меня есть quake3 rendermodel - там лайтмапы и полная статика- но это для мобил будет скорее всего
.Scotina
понятно...
Andrey
> используя направление источника света
а если у меня только OMNI ?
The Andreyp
> а если у меня только OMNI ?
тогда не проверяем
Тема в архиве.