Иерархический Z-буфер для отбора окклюзии
Я читаю раздел Occlusion Culling в Real-time Rendering 3rd Edition, и я не мог понять, как это работает. Некоторые вопросы:
Как влияет наличие Z-пирамиды? Зачем нам нужно несколько разрешений Z-буфера? В книге это отображается следующим образом (левая сторона):
Является ли структура Octree той же самой Octree, которая используется для общего отбора и рендеринга усеченного конуса? Или это специализированный Octree, созданный специально для техники отбора окклюзии?
Более общий вопрос: в предыдущем разделе (а также здесь) термин "запрос окклюзии" описывается как "рендеринг упрощенного ограничивающего объема объекта и сравнение его результатов глубины с Z-буфером, возвращая количество пикселей, которые являются видимый ". Какие функции в OpenGL связаны с этой концепцией Occlusion Query?
Является ли этот метод стандартом для отбора окклюзии в играх с открытым миром?
0 ответов
Иерархический Z-буфер полезен в ситуациях, когда большие близлежащие объекты могут перекрывать множество более мелких объектов. Примером может служить визуализация внутренней части здания или горного ландшафта.
Когда визуализируется близлежащий объект, он устанавливает пиксель где-нибудь на более низком уровне разрешения Z-буферной пирамиды на значение, близкое к глубине. Когда визуализируется объект меньшего размера, его ограничивающий прямоугольник можно сначала проверить по этому пикселю и отбраковать целиком.
Да. Это те же октреи. Но это не обязательно должно быть октри. Любая иерархическая структура данных пространственного индексирования будет работать как для иерархического Z-буфера, так и для выбора усеченного конуса.
Чтобы извлечь выгоду из иерархического Z-буфера, нам нужно визуализировать пейзаж, начиная с ближайших объектов. Для этого можно использовать такие приемы, как октреи или BSP.
Кроме того, наличие октри под рукой позволяет отбирать целые ветви дерева на основе расстояния до их bbox, а не отдельных объектов или треугольников.
Часть OpenGL, которая отвечает за запросы окклюзии:
glBeginQuery
,glEndQuery
а такжеglGetQueryObject
, Смотрите Query Objects для деталей.Иерархические Z-буферы были реализованы аппаратно на некоторых ранних Radeon. Однако я не слышал об этом в настоящее время.
Запросы окклюзии, с другой стороны, обычно используются. Они, по сути, дают аналогичные преимущества.