Хочу отрисовать деревья (для леса) через glDrawElementsInstanced, но вот не знаю как для этой функции реализовать отсечение геометрии
Malkawian407
> но вот не знаю как для этой функции реализовать отсечение геометрии
gs culling
http://rastergrid.com/blog/downloads/mountains-demo/
Malkawian407
Генерить буфер инстансинга каждый кадр.
Malkawian407
Не советую геометрический шейдер, посадит ФПС-ы.
Лучше без инстансинга.
По старинке проверил по фрустуму , отрисовал. Так будет много DrawCall-ов, но быстрее.
Дело в том что инстанс не дружит с моделями больше 2000 полигонов.
Да и геометрический шейдер тоже. Все это посадит ФПС.
Можно формировать из массива Instance новый буфер только из Instance которые прошли Frustum и потом уже пихать его в отрисовку всех Instance за один Draw
ronniko
> Дело в том что инстанс не дружит с моделями больше 2000 полигонов.
Это типа 1999 полигонов норм, а 2001 полигон не рисует/падет ?
MrShoor
Это типа 1999 полигонов норм, а 2001 полигон не рисует/падет ?
Ну 2000 это примерно. Просто инстанс начинает медленнее рисовать вот и все. Не падает.
Но на практике подметил, что инстанс проигрывает если модель больше 2000 полигонов с DrawCall.
Делал 1000 DrawCall и инстанс у модели в 20 тысяч полигонов и инстанс проиграл в скорости.
ronniko
> Делал 1000 DrawCall и инстанс у модели в 20 тысяч полигонов и инстанс проиграл
> в скорости.
А как он может проигрывать draw call'ам? Если на это есть объективная причина, то драйвер должен был заменить instanced вызов на 1000 обычных вызовов.
ronniko
> Делал 1000 DrawCall и инстанс у модели в 20 тысяч полигонов и инстанс проиграл
> в скорости.
Что-то ты не так делал.
Делал в Directx 11.
Об этом и на форуме были высказывания. Я о инстансе.
ronniko
> Делал в Directx 11.
Как делал?
Выводил одну модель на 20 тысяч полигонов.
Через DrawInstanced и число 1000 штук.
Филрейта не было. Если вдруг вы подумали что модель выводиться на весь экран и из-за этого филрейт. Нет.
Потом эту же модель рисовал DrawIndexed в цикле 1000 раз. И инстанс проиграл.
ronniko
> DrawInstanced
И все? Я попробовал скопилировать этот код в С++, говорит ошибка. В общем твой код не компилицо.
MrShoor
Что ты там компилишь ?
Я разве тебе дал исходники ?
ronniko
> Что ты там компилишь ?
Я говорю, что писать название функции, которую ты вызывал - не имеет смысла. Все итак знают, как рисовать инстансы. Ты лучше покажи как инстанс буфер формируешь. И как формируешь константные буфера, которые "быстрее" вызывать.
Тема в архиве.