OpenGL - Будет ли использоваться многократное рендеринг замедления VBO?

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

Ответ 1

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

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

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

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

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