OpenGL - Будет ли использование нескольких VBO замедлять рендеринг? - PullRequest
10 голосов
/ 06 июля 2011

Я рендерил несколько мешей (иногда больше 500), и я хотел знать, как лучше всего к этому подойти.Будет ли бессмысленно создавать 500 VBO, а затем, если они пройдут тесты на усеченность и видимость, отрендерить их.Есть ли более эффективный способ сделать это?Я рассчитываю на максимальную производительность.

1 Ответ

11 голосов
/ 06 июля 2011

Чтобы ответить на ваш вопрос, да, многие VBO замедляют работу. Больше полисов обычно замедляет рендеринг, но большее количество вызовов отрисовки имеет гораздо больший успех. Вы хотите минимизировать изменения состояния и отрисовки, а также количество имеющихся у вас буферов (и использование памяти).

Я бы предложил сначала взглянуть на буферы и выяснить, сколько вам нужно . Если вы можете создать геометрию пакета / экземпляра, объединить статическую геометрию в один буфер, более эффективно использовать буфер и т. Д.

Как только вы сократили буферы до минимально возможного, вы захотите использовать отбраковку нескольких сортов. Видимость, как по усечённой (возможно, в октриевой), так и окклюзии, может значительно повысить производительность. Основная идея состоит в том, чтобы дисквалифицировать геометрию как можно быстрее и проще, поэтому вы начинаете с грубых тестов (октри), затем несколько более детально (возможно, AABB и / или упрощенный корпус), затем окклюзия, затем фактически рисуете.

Вот хорошая статья об отбраковке frustrum , которая немного затрагивает quadtree (и, соответственно, octrees). Диаграммы, пояснения и некоторые примеры кода.

Статьи об отборе окклюзии OpenGL кажутся немного менее распространенными, хотя эта статья из GPU Gems может быть хорошей отправной точкой.

...