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

Как можно реализовать "Frustum Culling" для "Instanced" (OpenGL) (2 стр)

Страницы: 1 2 3 48 Следующая »
#15
18:42, 13 апр. 2016

MrShoor
Я делал без буфера.
В вершинном шейдере использовал SV_InstanceID и умножал на 3.0, что бы сместить следующую модель.
То есть input.Pos.xy += SV_InstanceID*3.0 (это для того что бы ясно было, это абстрактный код)


#16
18:46, 13 апр. 2016

ronniko
> То есть input.Pos.xy += SV_InstanceID*3.0 (это для того что бы ясно было, это
> абстрактный код)
Так, а когда 1000 дравколлов делал как двигал модель?

#17
18:46, 13 апр. 2016
Так, а когда 1000 дравколлов делал как двигал модель?

Ты видимо еще не доконца проснулся :)

Матрица World 4х4 ! Менял X,Y +3.0 (World._41 и World._42)

#18
18:50, 13 апр. 2016

ronniko
> Матрица World !
pfff | Как можно реализовать "Frustum Culling" для "Instanced" (OpenGL)
То есть у тебя в обоих случаях была World матрица, только в случае с инстансингом у тебя было еще input.Pos.xy += SV_InstanceID*3.0
Сам догадаешься почему инстансинг получился медленнее?

#19
18:51, 13 апр. 2016

MrShoor
Чувак матрицу World для инстанса я один раз передаю.
Ты что не знаешь как работает DrawInstanced  ?
И не знаешь для чего в вершинном шейдере матрица WVP(World, View, Projection) ?!!!

#20
19:02, 13 апр. 2016

ronniko
> Чувак матрицу World для инстанса я один раз передаю.
> Ты что не знаешь как работает DrawInstanced ?
Понятно, недогадался. Объясняю, когда ты передаешь матрицу (ну или что угодно передаешь на отрисовку) нагрузка целиком ложится на CPU. А нагрзука на GPU - это код твоего шейдера. Так вот, ты своим тестом в 2000 вершин показал только то, что твоя видеокарта за то время, пока ты заливаешь новую матрицу успевает обработать около 2000 вершин. Поэтому у тебя при >2000 вершин видеокарта в обоих случаях лопатит без перерыва, а шейдер в случае с SV_InstanceID*3.0 чуть-чуть тяжелее.

Чувак, ты сравнивал разные шейдера! Разной сложности! Вот если бы ты передавал в константном буфере свой аналог SV_InstanceID,  делал такое же умножение - можно было бы говорить что инстансинг тяжелее.

#21
19:04, 13 апр. 2016

У меня в 2-х случаях шейдер почти одинаков , разница лишь в SV_InstanceID*3.0
Наврядли эта строчка так сильно играет огромную роль в просадке ФПС.

И я выводил 20 тысяч полигонов в 3д модели.

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

Спасибо !
За 6 лет программирования Directx , я только сейчас узнал от тебя про это :)))
Эх, где же ты был все эти 6 лет назад. Ща бы мы , уже с тобой крайзис 10 , бы допилили ! У Крайтека бы челюсть отвисла бы :)

#22
19:21, 13 апр. 2016

ronniko
> Наврядли эта строчка так сильно играет огромную роль в просадке ФПС.
Ну ты же как обычно измеряешь. Было 2700 фпс, стало 2670. Значит просело. А одно унможение и сложение на фоне единственного умножения на матрицу вполне могло сыграть роль.

> Эх, где же ты был все эти 6 лет назад. Ща бы мы , уже с тобой крайзис 10 , бы
> допилили ! У Крайтека бы челюсть отвисла бы :)
А зачем мне ты в команде? :D

#23
19:23, 13 апр. 2016

MrShoor
Ну вот. А раз не получили ощутимого профита от инстанса.
То как ТС советуют инстанс и геометрические шейдеры для отсичения.
То это еще сильнее посадит ФПС.
Потому http://www.gamedev.ru/code/forum/?id=213134#m3

#24
19:34, 13 апр. 2016

ronniko
> Ну вот. А раз не получили ощутимого профита от инстанса.
Не получил профита от инстанса конкретно ты. Если бы ты для своего инстанс теста не делал += SV_InstanceID*3.0 - то и проседания на 2000+ вершин не было бы. Тебе рссказать как избавится от += SV_InstanceID*3.0 чтоли?

> То как ТС советуют инстанс и геометрические шейдеры для отсичения.
Согласен, геометрические шейдеры тут нафиг не нужны. Как минимум потому что GPU итак отсечение треугольников по клипспейсу делает, без всякого геометрического шейдера. Ну и при геометрическом шейдере вершины по прежнему будут все обработаны. Так что геометрические шейдеры - полный бред.

Но ты в том же комментарии посоветовал:
> Лучше без инстансинга.
> По старинке проверил по фрустуму , отрисовал. Так будет много DrawCall-ов, но быстрее.
Что неправда. Потому что нафиг не упилось дравколлы плодить.
Потому что лучше: проверил по фрустуму, если подошло - добавил матрицу в std::vector. Потом одним куском залил в инстанс буфер (который DYNAMIC + DISCARD), и за один дравколл отрисовал.

#25
19:37, 13 апр. 2016
Потому что лучше: проверил по фрустуму, если подошло - добавил матрицу в std::vector. Потом одним куском залил в инстанс буфер (который DYNAMIC + DISCARD), и за один дравколл отрисовал.

Можно и так.

Не получил профита от инстанса конкретно ты.

Если бы инстанс поднял бы хотя бы в полтора раза ФПС по сравнению с DrawIndexed.
То да.
А так инстанс не особо.
И тем более инстанс все равно CPU драйвером каждый раз на GPU отсылает Instance_ID. Потому нет особого профита от инстанса.
Профит инстанса лишь в том, что одна команда DrawInstanced рисует тучу объектов (удобно).

#26
21:28, 13 апр. 2016

MrShoor
> Ну и при геометрическом шейдере вершины по прежнему будут все обработаны. Так
> что геометрические шейдеры - полный бред.

Ну да, AMD и Epic с тобой не согласные. Ты хоть знаешь, как работает GS?

Чувак!

#27
21:34, 13 апр. 2016

innuendo
> Ну да, AMD и Epic с тобой не согласные. Ты хоть знаешь, как работает GS?
Он работает после вершинного шейдера. Этого достаточно.

#28
21:35, 13 апр. 2016

MrShoor
> > Ну да, AMD и Epic с тобой не согласные. Ты хоть знаешь, как работает GS?
> Он работает после вершинного шейдера. Этого достаточно.

Ты хоть раз писал GS ? Чувак, чуешь ? :)

#29
21:36, 13 апр. 2016

innuendo
> Ты хоть раз писал GS ?
Естественно писал. А ты?

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

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