Буферы глубины
Буфер глубины или z-буфер хранит сведения о глубине, чтобы контролировать, какие области многоугольников отображаются, а не скрыты от просмотра.
Источники данных в Azure Monitor
Буфер глубины, часто называемый z-буфером или w-буфером, является свойством устройства, в который хранятся сведения о глубине, которые будут использоваться Direct3D. Когда Direct3D отрисовывает сцену на целевую поверхность, она может использовать память в связанной поверхности буфера глубины в рабочей области, чтобы определить, как пиксели растровых многоугольников occlude друг друга. Direct3D использует внеэкранную поверхность Direct3D в качестве цели, в которую записываются конечные значения цветов. Поверхность буфера глубины, связанная с поверхностью целевого объекта отрисовки, используется для хранения сведений о глубине, которая сообщает Direct3D, насколько глубоко каждая видимая пиксель находится в сцене.
Когда сцена растеризована с включенной буферизацией глубины, проверяется каждая точка на поверхности отрисовки. Значения в буфере глубины могут быть координатами z-координаты точки или его однородной координатой w- от расположения точки (x,y,z,w) в пространстве проекции. Буфер глубины, использующий значения z, часто называется z-буфером, а тот, который использует значения w, называется w-buffer. Каждый тип буфера глубины имеет преимущества и недостатки, которые рассматриваются далее.
В начале теста значение глубины в буфере глубины устанавливается максимально возможное значение для сцены. Значение цвета на поверхности отрисовки имеет значение цвета фона или значение цвета фоновой текстуры в этой точке. Каждый многоугольник в сцене проверяется, пересекается ли он с текущей координатой (x,y) на поверхности отрисовки.
Если он пересекается, значение глубины , которое будет координатой z в z-буфере, и координата w в w-buffer - в текущей точке проверяется, если оно меньше значения глубины, хранящегося в буфере глубины. Если глубина значения многоугольника меньше, он хранится в буфере глубины и значение цвета из многоугольника записывается в текущую точку на поверхности отрисовки. Если значение глубины многоугольника в этой точке больше, проверяется следующий многоугольник в списке. Этот процесс показан на следующей схеме.
Методы буферизации
Хотя большинство приложений не используют эту функцию, вы можете изменить сравнение, которое Direct3D использует для определения значений, помещенных в буфер глубины и последующей поверхности целевой отрисовки. На некотором оборудовании изменение функции сравнения может отключить иерархическое тестирование z.
Почти все акселераторы на рынке поддерживают z-буферизацию, что делает z-буферы наиболее распространенным типом буфера глубины сегодня. Однако вездесущие, z-буферы имеют свои недостатки. Из-за математики, созданные значения z в z-буфере, как правило, не распределяются равномерно по диапазону z-буфера (обычно 0,0 до 1,0, включительно).
В частности, соотношение между далекими и близкими плоскостями сильно влияет на распределение неравномерно z значений. Использование расстояния дальней плоскости к соотношению расстояния около плоскости 100, 90 процентов диапазона буфера глубины тратится на первые 10 процентов диапазона глубины сцены. Типичные приложения для развлечений или визуального моделирования с внешними сценами часто требуют соотношений дальней плоскости или почти плоскости в любом месте от 10000 до 10 000. В соотношении от 1000, 98 процентов диапазона тратится на первые 2 процента диапазона глубины, и распределение становится хуже с более высокими коэффициентами. Это может привести к скрытым артефактам поверхности в удаленных объектах, особенно при использовании 16-разрядных буферов глубины, наиболее часто поддерживаемой битовой глубины.
С другой стороны, буфер глубины на основе W часто равномерно распределяется между ближайшими и дальними плоскостями клипа, чем z-буфер. Ключевым преимуществом является то, что соотношение расстояний для далеких и близких плоскостей вырезки больше не является проблемой. Это позволяет приложениям поддерживать большие максимальные диапазоны, а также получать относительно точные буферизации глубины близко к точке глаза. Буфер глубины на основе w не идеально подходит, и иногда может отображать скрытые артефакты поверхности для близлежащих объектов. Еще один недостаток подхода w-buffered связан с поддержкой оборудования: w-buffering не поддерживается как широкое оборудование, так как z-буферизация.
Использование z-буфера требует накладных расходов во время отрисовки. Различные методы можно использовать для оптимизации отрисовки при использовании z-буферов. Приложения могут повысить производительность при использовании z-буферизации и текстирования, гарантируя, что сцены отрисовываются с передней на спину. Текстурированные примитивы z-буфера предварительно проверяются на основе строки сканирования z-буфера. Если линия сканирования скрыта ранее отрисованным многоугольником, система отклоняет ее быстро и эффективно. Z-буферизация может повысить производительность, но метод наиболее полезен, когда сцена рисует одни и те же пиксели более одного раза. Это трудно вычислить точно, но часто можно сделать близкое приближение. Если одни и те же пиксели рисуются менее чем в два раза, можно добиться оптимальной производительности, переключив z-буферизацию и отрисовки сцены с заднего края на передний план.
Фактическое толкование значения глубины зависит от отрисовщика.
Связанные темы