- Z-буфер
-
Данные в Z-буфере
Z-буферизация — в компьютерной трёхмерной графике, способ учёта удалённости элемента изображения. Представляет собой один из вариантов решения «проблемы видимости». Очень эффективен и практически не имеет недостатков, если реализуется аппаратно. Программно же существуют другие методы, способные конкурировать с ним: Z-сортировка («алгоритм художника») и двоичное разбиение пространства (BSP), но они также имеют свои достоинства и недостатки. Основной недостаток Z-буферизации состоит в потреблении большого объёма памяти: в работе используется так называемый буфер глубины или Z-буфер.
Z-буфер представляет собой двумерный массив, каждый элемент которого соответствует пикселу на экране. Когда видеокарта отрисовывает пиксел, его удалённость просчитывается и записывается в ячейку Z-буфера. Если пикселы двух рисуемых объектов перекрываются, то их значения глубины сравниваются, и рисуется тот, который ближе, а его значение удалённости сохраняется в буфер.
Разрядность буфера глубины оказывает сильное влияние на качество отрисовки: использование 16-битного буфера может привести к геометрическим искажениям, например, эффекту «борьбы», если два объекта находятся близко друг к другу. 24, 32-разрядные буферы хорошо справляются со своей задачей. 8-битные почти никогда не используются из-за низкой точности.
Обычно изобретателем z-буфера считают Эдвина Катмулла, хотя эту идею описал ещё Вольфганг Штрассер в своей диссертации (1974).
Варианты
В Z-буфере в его классическом виде разрядная сетка буфера недостаточно точна на близких расстояниях. Для решения этой проблемы применяется w-буфер, в котором применяется не удалённость, а обратная ей величина (w = 1 / z). Что лучше применять — z-буфер или w-буфер — зависит от программы.
На современных видеоадаптерах работа с z-буфером отнимает немалую часть пропускной способности ОЗУ видеоадаптера. Для борьбы с этим применяют сжатие без потерь: сжатие/восстановление отнимает меньше ресурсов, чем обращение к памяти.
В начале кадра происходит заполнение буфера некоторым числом (например, числом 1,0). Это также отнимает некоторую долю машинного времени, поэтому часто поступают так: первый кадр буферизация настраивается так, чтобы глубина ближних объектов была 0,0, а дальних — 0,5. Второй кадр — от 1,0 до 0,5. Это снижает точность на 1 бит, но позволяет избавиться от очистки буфера.
Z-буфер и сортировка
Хотя z-буфер предназначен именно для того, чтобы обойтись без сортировки видимых граней, скорость работы z-буфера серьёзно зависит от сортировки объектов. Дело в том, что для отбракованного пикселя не запускаются алгоритмы просчёта цвета — текстурирование, освещение и шейдеры. Поэтому для оптимальной работы рендерера, использующего z-буфер, рекомендуется отсортировать видимые объекты в порядке удаления (хотя бы приблизительно).
Wikimedia Foundation. 2010.