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

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

Страницы: 1 2 37 8 Следующая »
#0
16:58, 13 апр. 2016

Хочу отрисовать деревья (для леса) через glDrawElementsInstanced, но вот не знаю как для этой функции реализовать отсечение геометрии


#1
17:00, 13 апр. 2016

Malkawian407
> но вот не знаю как для этой функции реализовать отсечение геометрии

gs culling
http://rastergrid.com/blog/downloads/mountains-demo/

#2
17:15, 13 апр. 2016

Malkawian407
Генерить буфер инстансинга каждый кадр.

#3
17:31, 13 апр. 2016

Malkawian407
Не советую геометрический шейдер, посадит ФПС-ы.
Лучше без инстансинга.
По старинке проверил по фрустуму , отрисовал. Так будет много DrawCall-ов, но быстрее.

Дело в том что инстанс не дружит с моделями больше 2000 полигонов.
Да и геометрический шейдер тоже. Все это посадит ФПС.

#4
17:49, 13 апр. 2016

Можно формировать из массива Instance новый буфер только из Instance которые прошли Frustum и потом уже пихать его в отрисовку всех Instance за один Draw

#5
18:08, 13 апр. 2016

ronniko
> Дело в том что инстанс не дружит с моделями больше 2000 полигонов.
Это типа 1999 полигонов норм, а 2001 полигон не рисует/падет ?

#6
18:12, 13 апр. 2016

MrShoor

Это типа 1999 полигонов норм, а 2001 полигон не рисует/падет ?

Ну 2000 это примерно. Просто инстанс начинает медленнее рисовать вот и все. Не падает.
Но на практике подметил, что инстанс проигрывает если модель больше 2000 полигонов с DrawCall.
Делал 1000 DrawCall и инстанс у модели в 20 тысяч полигонов и инстанс проиграл в скорости.
#7
18:17, 13 апр. 2016

ronniko
> Делал 1000 DrawCall и инстанс у модели в 20 тысяч полигонов и инстанс проиграл
> в скорости.
А как он может проигрывать draw call'ам? Если на это есть объективная причина, то драйвер должен был заменить instanced вызов на 1000 обычных вызовов.

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

ronniko
> Делал 1000 DrawCall и инстанс у модели в 20 тысяч полигонов и инстанс проиграл
> в скорости.
Что-то ты не так делал.

#9
18:34, 13 апр. 2016

Делал в Directx 11.
Об этом и на форуме были высказывания. Я о инстансе.

#10
18:34, 13 апр. 2016

ronniko
> Делал в Directx 11.

Как делал?

#11
18:35, 13 апр. 2016

Выводил одну модель на 20 тысяч полигонов.
Через DrawInstanced и число 1000 штук.

Филрейта не было. Если вдруг вы подумали что модель выводиться на весь экран и из-за этого филрейт. Нет.

Потом эту же модель рисовал DrawIndexed в цикле 1000 раз. И инстанс проиграл.

#12
18:37, 13 апр. 2016

ronniko
> DrawInstanced
И все? Я попробовал скопилировать этот код в С++, говорит ошибка. В общем твой код не компилицо.

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

MrShoor
Что ты там компилишь ?
Я разве тебе дал исходники ?

#14
18:39, 13 апр. 2016

ronniko
> Что ты там компилишь ?
Я говорю, что писать название функции, которую ты вызывал - не имеет смысла. Все итак знают, как рисовать инстансы. Ты лучше покажи как инстанс буфер формируешь. И как формируешь константные буфера, которые "быстрее" вызывать.

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

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