Instance Draw

Версия Minecraft
1.7.10
250
12
24
Делаю систему частиц и как завещал глуми "по дравколу на частицу тупо!!"
Буду юзать glDrawArrayInstanced..
Я почитал что это, как и где применяется. Куда что пихать, даже заставил заработать(ну конечно не так как надо мне).
Везде пишется что "используем шейдер и бла бла бла.." 
И вот один из вопросов:

-Можно ли обойтись без шейдера?



Если же нет то и черт с ним, сделаю шейдер проклятый. 

Еще, уже просьба, а не вопрос. 
Подкиньте пару статеек по использованию инстанс рендера, только на русском языке(ну можно и на английском, главное чтоб с примерами и более менее понятно, а не это сюда, а это сюда. Почему? Так нада!)
 
Решение
Предположения:
Новый конвейер требует обязательные 2 шейдера.
По instanced(и вообще опенглу) рекомендую канал ThinMatrix, сайт learnopengl.com. И, конечно же, официальный сайт этого АПИ.


Ах, я ещё слышал, что эта техника сильно грузит канал CPU->GPU. Ну и верно. По идее, если грузить большое количество данных, то...
Предположения:
Новый конвейер требует обязательные 2 шейдера.
По instanced(и вообще опенглу) рекомендую канал ThinMatrix, сайт learnopengl.com. И, конечно же, официальный сайт этого АПИ.


Ах, я ещё слышал, что эта техника сильно грузит канал CPU->GPU. Ну и верно. По идее, если грузить большое количество данных, то...
 
RinKirin написал(а):
-Можно ли обойтись без шейдера?
Нельзя.


CoomingSoon написал(а):
Новый конвейер требует обязательные 2 шейдера.
Зачем два?
Включил шейдер, отрисовал все однотипные партиклы, выключил.


CoomingSoon написал(а):
Ах, я ещё слышал, что эта техника сильно грузит канал CPU->GPU.
Почему? Ведь данные уже загружены в гпу и ты просто говоришь: отрисуй мне нное кол-во таких штук.
 
CoomingSoon написал(а):
2 шейдера - вершинный и фрагментарный.
Про статическую отрисовку согласен. Но если обновлять данные, то будет плохо.

Не будет.
Инстансед отрисовка даёт ровно одно: уменьшение кол-ва данных, перекидываемых между цпу и гпу. Вместо того чтобы передавать по 4 позиции вершин за частицу, мы можем передать позицию её центра. Ювшки можно экономить похожим способом.
И всё, нечего тут разводить "ой, а если сделать то, будет плохо, или нет, я не знаю, но напишу тут на всякий случай об этом".
 
Oldestkon написал(а):
Не будет.
Инстансед отрисовка даёт ровно одно: уменьшение кол-ва данных, перекидываемых между цпу и гпу. Вместо того чтобы передавать по 4 позиции вершин за частицу, мы можем передать позицию её центра. Ювшки можно экономить похожим  способом.
И всё, нечего тут разводить "ой, а если сделать то, будет плохо, или нет, я не знаю, но напишу тут на всякий случай об этом".
Ок-ок, но как же трансформации, к примеру? Они разные у всех объектов будут(если это частицы, допустим).
 
CoomingSoon написал(а):
Ок-ок, но как же трансформации, к примеру? Они разные у всех объектов будут(если это частицы, допустим).

Трансформации (позицию + поворот) можно паковать как хочешь и передавать атрибутом. Одним на всю частицу.
Instanced вызов позволяет перебирать одни и те же 4 вершинки, и при этом раз в 4 вершинки читать новые аттрибуты. Все происходит на стороне гпу, поэтому лишние данные не бегают. В итоге все красиво и оптимально.


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