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

Dynamic vertex pulling в Direct3D11 (комментарии) (2 стр)

Страницы: 1 2 3 Следующая »
#15
14:43, 22 янв. 2015

Mephisto std
> А что делать людям, которые сидят на nvidia + windows 7-8?
Портировать им мобильную версию консольной игры с ведроида, они всё равно неудачники. Плюс для них будет бесплатный переход на Win10, потому причин не делать этого просто нет.


#16
14:47, 22 янв. 2015

bazhenovc
> Мусорные вершины можно убрать только использовав MultiDrawIndirect, которого в
> D3D11 нет, есть только обычный DrawIndirect.
Бред же. DrawIndirect принимает на вход буфер, а не одну команду (сmd->first,  cmd->count,  cmd->instanceCount, cmd->baseInstance). Все прекрасно ложится на DrawIndirect, а этот мульти-пульти тут никаким боком. Подозреваю что MultiDrawIndirect еще и client-side, как его другие мульти (без индиректа которые) друзья.

#17
14:55, 22 янв. 2015

bazhenovc
> > Да ну, правда?
> Ты не видишь разницы между DrawIndirect и MultiDrawIndirect?

Поймали с поличным за руку ...

#18
14:56, 22 янв. 2015

MrShoor
Нарисуй мне десяток разных мешей с разным количеством полигонов с помощью одного вызова DrawIndirect.

#19
15:01, 22 янв. 2015

bazhenovc
> Да и шипать проект на OpenGL я бы не рискнул, по крайней мере в ближайшие года
> 3

Mac\Linux ?

#20
15:08, 22 янв. 2015

innuendo
> Mac\Linux ?
Не целевая аудитория.

#21
15:15, 22 янв. 2015
Поймали с поличным за руку ...

Наверное все дело в малиновых штанах :)
#22
15:18, 22 янв. 2015

bazhenovc
> > Mac\Linux ?
> Не целевая аудитория.

Ну я про порт же :)

#23
15:36, 22 янв. 2015

innuendo
> Ну я про порт же :)
Как-нибудь в другое время:)

#24
16:04, 22 янв. 2015

bazhenovc
> Нарисуй мне десяток разных мешей с разным количеством полигонов с помощью одного вызова DrawIndirect.
О боже. Ну ок. Складываешь все меши в один вертекс и индекс буфер. Запоминаешь с какого и до какого индекса находится каждый меш. Каждый объект имеет свои уникальные атрибуты, складываешь их в инстанс буфер. Запоминаешь индекс вершины, где хранятся атрибуты каждого объекта.
Перед отрисовкой создаешь Indirect буфер, заполняешь его структурами:
cmd->first,  cmd->count,  cmd->instanceCount, cmd->baseInstance
для каждого объекта.
Передаешь этот буфер в DrawIndirect, и вуаля, нарисованы разные объекты с разными лодами в разных местах. Единственное ограничение - либо вся геометрия должна быть индексирована, либо нет, а так же можно выводить только один тип примитива (нельзя смешивать треугольники и линии например).

#25
16:14, 22 янв. 2015
Передаешь этот буфер в DrawIndirect, и вуаля, нарисованы разные объекты с разными лодами в разных местах.

1 объект с одним лодом в одном месте. (ну можно в разных местах если instanceCount больше 1)
чтобы нарисовать разные объекты в разнах местах нужно вызвать DrawIndirect несколько раз.
чтобы нарисовать все объекты за один вызов - есть multi версия.
#26
16:18, 22 янв. 2015

Оверхед от "мусорных вершин" не обязан быть большим, его всегда можно ограничить за счёт увеличения количества draw calls. К примеру, если есть куча всяких мешей с размером от 1 до 65535 вертекса, то при прочих равных их всех можно нарисовать за не более чем 180 draw calls с оверхедом не более 5%. При максимальном оверхеде в 10% то же самое можно уже сделать за не более чем 100 draw calls, при 20% - за порядка 55. Но в реальности эти числа можно уменьшить ещё минимум вдвоё (рисовать два разных "размера" за один draw call, например).

#27
16:22, 22 янв. 2015

MrShoor
> Перед отрисовкой создаешь Indirect буфер, заполняешь его структурами:
> cmd->first,  cmd->count,  cmd->instanceCount, cmd->baseInstance
> для каждого объекта.
Ты не можешь передать в DrawIndirect несколько таких структур!

Только одну. Несколько структур ты можешь передать в MultiDrawIndirect.

#28
19:57, 22 янв. 2015

bazhenovc

У него бзик на инстансингах :)

#29
9:59, 24 янв. 2015

bazhenovc
> Ты не можешь передать в DrawIndirect несколько таких структур!
> Только одну. Несколько структур ты можешь передать в MultiDrawIndirect.
Действительно, был не прав, т.к. с индиректом не работал еще, а только собирался. Изучил тему глубже. Странное решение было ввести DrawIndirect, а MultiDrawIndirect не вводить.

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

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