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

Инстансинг и куллинг на CPU

Страницы: 1 2 38 9 Следующая »
#0
10:28, 9 ноя 2023

Такой вопрос. Есть несколько тысяч инстанс-деревьев, допустим ёлок.
Понятное дело, что какая-то часть ёлок окажется позади камеры.
Что эффективнее - вызвать отрисовку всех ёлок на уровне разом (через инстансинг), предоставляя OpenGL самостоятельно их откуллить, а буффер с инстанс-данными сформировать один раз и в дальнейшем уже не менять, или же откуллить на CPU, пересобирая каждый кадр буффер с инстанс-данными только для тех ёлок, которые попали в кадр?

#1
10:32, 9 ноя 2023

g-cont
Если cpu не особо нагружен и простаивает, то в любом случае эффективнее будет откуллить.

#2
10:54, 9 ноя 2023

Ruslan
а может есть возможность загружать какой-то ремаппинг для gl_InstanceID ? Чтобы в списке были только номера тех инстансов, которые реально попали в кадр.

#3
11:06, 9 ноя 2023

g-cont
> а может есть возможность загружать какой-то ремаппинг для gl_InstanceID ? Чтобы
> в списке были только номера тех инстансов, которые реально попали в кадр.
сорян, по вот этому вопросу ничего не могу сказать, но думаю, что если какая-то возможность есть, то такие данные появятся только на следующем кадре, это приведет к тому, что деревья будут визуально появляться\исчезать.

#4
11:13, 9 ноя 2023

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

#5
11:15, 9 ноя 2023

На CPU вполне можно куллить.

Можно ,но осторожно.
И с умом.

#6
11:27, 9 ноя 2023

Есть несколько тысяч инстанс-деревьев, допустим ёлок.

Помогу ТС.
Умнож это число на 1000 000.
И ты увидешь, что ни проц и не GPU все это не отсортируют сразу.

Ищи другой путь сталкер :)

#7
12:40, 9 ноя 2023

Если их действительно много, можно куллить на GPU, оттуда же писать буфер инстанс данных и indirect команды отрисовки

#8
12:42, 9 ноя 2023

g-cont
> а может есть возможность загружать какой-то ремаппинг для gl_InstanceID ?
Можно же сделать такой ремаппинг самому.

#9
13:45, 9 ноя 2023

g-cont
Чем меньше шлешь на ГПУ тем лечше

#10
14:05, 9 ноя 2023

g-cont
> Понятное дело, что какая-то часть ёлок окажется позади камеры

А стоит ли овчинка выделки? Ведь для вершин, не попадающих во фрустум, отработают только вертексные шейдеры, до растеризации их примитивов дело вообще не дойдет, т.к. примитивы целиком не попадут в bounding box

#11
14:27, 9 ноя 2023

g-cont
> а может есть возможность загружать какой-то ремаппинг для gl_InstanceID
Есть же DrawIndirect + firstInstance

#12
15:30, 9 ноя 2023

Masked Software Occlusion Culling
https://www.intel.com/content/www/us/en/developer/articles/techni… -culling.html

#13
15:33, 9 ноя 2023

Для случаев позади камеры, достаточно нарезать на куски. Которые немного позади камеры таки попали, замедления это не даст, вершинные шейдеры быстро пробегут

#14
18:19, 9 ноя 2023

MikeNew
> На CPU вполне можно куллить. Сфера-фруструм - это быстро.
Да, я это и имел в виду, собственно, не более того.
Уточню задачу: есть инстанс-меш и матрицы трансформации. Матрицы сохраняю во float-текстуру.

Варианты отрисовки:
- Заполняю float-текстуру матрицами всех имеющихся инстансов, инстансы рисую за один вызов, предоставляя GPU самостоятельно откуллить то, что не попало во фрустум.

- Выполняю отсечение на CPU, во float-текстуру пишу только матрицы тех инстансов, которые видны. Соответственно текстуру обновляю каждый кадр.

Какой вариант будет выгоднее на ваш взгляд? Инстансов по современным меркам относительно немного, до 65 тысяч, в среднем 5-10 тысяч.

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