Z-буферизация

Поделись знанием:
(перенаправлено с «Z-конфликт»)
Перейти к: навигация, поиск

Z-буферизация — в компьютерной трёхмерной графике способ учёта удалённости элемента изображения. Представляет собой один из вариантов решения «проблемы видимости». Очень эффективен и практически не имеет недостатков, если реализуется аппаратно. Программно же существуют другие методы, способные конкурировать с ним: Z-сортировка («алгоритм художника») и двоичное разбиение пространства (BSP), но они также имеют свои достоинства и недостатки. Основной недостаток Z-буферизации состоит в потреблении большого объёма памяти: в работе используется так называемый буфер глубины или Z-буфер.

Z-буфер представляет собой двумерный массив, каждый элемент которого соответствует пикселю на экране. Когда видеокарта рисует пиксель, его удалённость просчитывается и записывается в ячейку Z-буфера. Если пиксели двух рисуемых объектов перекрываются, то их значения глубины сравниваются, и рисуется тот, который ближе, а его значение удалённости сохраняется в буфер. Получаемое при этом графическое изображение носит название z-depth карта, представляющая собой полутоновое графическое изображение, каждый пиксель которого может принимать до 256 значений серого. По ним определяется удалённость от зрителя того или иного объекта трехмерной сцены. Карта широко применяется в постобработке для придания объёмности и реалистичности и создаёт такие эффекты, как глубина резкости, атмосферная дымка и т. д. Также карта используется в 3д-пакетах для текстурирования, делая поверхность рельефной.

  • Примеры карт

Ниже представлен результат использования двух карт вместе. Здесь вторая карта снята из сцены, в которой первая выступила в качестве текстуры, выдавливающей поверхность.

Карта 1 Карта 2 Результат


Разрядность буфера глубины оказывает сильное влияние на качество визуализации: использование 16-битного буфера может привести к геометрическим искажениям, например, эффекту «борьбы», если два объекта находятся близко друг к другу. 24, 32-разрядные буферы хорошо справляются со своей задачей. 8-битные почти никогда не используются из-за низкой точности.

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



Варианты

В Z-буфере в его классическом виде разрядная сетка буфера недостаточно точна на близких расстояниях. Для решения этой проблемы применяется w-буфер, в котором применяется не удалённость, а обратная ей величина (<math>w=1/z</math>). Что лучше применять — z-буфер или w-буфер — зависит от программы.

На современных видеоадаптерах работа с z-буфером отнимает немалую часть пропускной способности ОЗУ видеоадаптера. Для борьбы с этим применяют сжатие без потерь: сжатие/восстановление отнимает меньше ресурсов, чем обращение к памяти.

В начале кадра происходит заполнение буфера некоторым числом (например, числом 1,0). Это также отнимает некоторую долю машинного времени, поэтому часто поступают так: первый кадр буферизация настраивается так, чтобы глубина ближних объектов была 0,0, а дальних — 0,5. Второй кадр — от 1,0 до 0,5. Это снижает точность на 1 бит, но позволяет избавиться от очистки буфера.

Z-буфер и сортировка

Хотя Z-буфер предназначен именно для того, чтобы обойтись без сортировки видимых граней, скорость работы Z-буфера серьёзно зависит от сортировки объектов. Дело в том, что для отбракованного пикселя не запускаются алгоритмы просчёта цвета — текстурирование, освещение и шейдеры. Поэтому для оптимальной работы рендерера, использующего Z-буфер, рекомендуется отсортировать видимые объекты в порядке удаления (хотя бы приблизительно).

Полупрозрачные объекты приходится сортировать программно и рисовать в последнюю очередь.

Z-конфликт

Если два объекта имеют близкую Z-координату, иногда, в зависимости от точки обзора, показывается то один, то другой, то оба полосатым узором. Это называется Z-конфликт (англ. Z fighting). Чаще всего конфликты присущи спецэффектам (декалям), накладывающимся на основную текстуру, например, дырам от пуль.

Решаются Z-конфликты сдвигом одного объекта относительно другого на величину, превышающую погрешность Z-буфера.


Напишите отзыв о статье "Z-буферизация"

Отрывок, характеризующий Z-буферизация

– А другой то австрияк, с ним был, словно мелом вымазан. Как мука, белый. Я чай, как амуницию чистят!
– Что, Федешоу!… сказывал он, что ли, когда стражения начнутся, ты ближе стоял? Говорили всё, в Брунове сам Бунапарте стоит.
– Бунапарте стоит! ишь врет, дура! Чего не знает! Теперь пруссак бунтует. Австрияк его, значит, усмиряет. Как он замирится, тогда и с Бунапартом война откроется. А то, говорит, в Брунове Бунапарте стоит! То то и видно, что дурак. Ты слушай больше.
– Вишь черти квартирьеры! Пятая рота, гляди, уже в деревню заворачивает, они кашу сварят, а мы еще до места не дойдем.
– Дай сухарика то, чорт.
– А табаку то вчера дал? То то, брат. Ну, на, Бог с тобой.
– Хоть бы привал сделали, а то еще верст пять пропрем не емши.
– То то любо было, как немцы нам коляски подавали. Едешь, знай: важно!
– А здесь, братец, народ вовсе оголтелый пошел. Там всё как будто поляк был, всё русской короны; а нынче, брат, сплошной немец пошел.
– Песенники вперед! – послышался крик капитана.
И перед роту с разных рядов выбежало человек двадцать. Барабанщик запевало обернулся лицом к песенникам, и, махнув рукой, затянул протяжную солдатскую песню, начинавшуюся: «Не заря ли, солнышко занималося…» и кончавшуюся словами: «То то, братцы, будет слава нам с Каменскиим отцом…» Песня эта была сложена в Турции и пелась теперь в Австрии, только с тем изменением, что на место «Каменскиим отцом» вставляли слова: «Кутузовым отцом».
Оторвав по солдатски эти последние слова и махнув руками, как будто он бросал что то на землю, барабанщик, сухой и красивый солдат лет сорока, строго оглянул солдат песенников и зажмурился. Потом, убедившись, что все глаза устремлены на него, он как будто осторожно приподнял обеими руками какую то невидимую, драгоценную вещь над головой, подержал ее так несколько секунд и вдруг отчаянно бросил ее:
Ах, вы, сени мои, сени!
«Сени новые мои…», подхватили двадцать голосов, и ложечник, несмотря на тяжесть амуниции, резво выскочил вперед и пошел задом перед ротой, пошевеливая плечами и угрожая кому то ложками. Солдаты, в такт песни размахивая руками, шли просторным шагом, невольно попадая в ногу. Сзади роты послышались звуки колес, похрускиванье рессор и топот лошадей.
Кутузов со свитой возвращался в город. Главнокомандующий дал знак, чтобы люди продолжали итти вольно, и на его лице и на всех лицах его свиты выразилось удовольствие при звуках песни, при виде пляшущего солдата и весело и бойко идущих солдат роты. Во втором ряду, с правого фланга, с которого коляска обгоняла роты, невольно бросался в глаза голубоглазый солдат, Долохов, который особенно бойко и грациозно шел в такт песни и глядел на лица проезжающих с таким выражением, как будто он жалел всех, кто не шел в это время с ротой. Гусарский корнет из свиты Кутузова, передразнивавший полкового командира, отстал от коляски и подъехал к Долохову.
Гусарский корнет Жерков одно время в Петербурге принадлежал к тому буйному обществу, которым руководил Долохов. За границей Жерков встретил Долохова солдатом, но не счел нужным узнать его. Теперь, после разговора Кутузова с разжалованным, он с радостью старого друга обратился к нему:
– Друг сердечный, ты как? – сказал он при звуках песни, ровняя шаг своей лошади с шагом роты.
– Я как? – отвечал холодно Долохов, – как видишь.
Бойкая песня придавала особенное значение тону развязной веселости, с которой говорил Жерков, и умышленной холодности ответов Долохова.
– Ну, как ладишь с начальством? – спросил Жерков.
– Ничего, хорошие люди. Ты как в штаб затесался?
– Прикомандирован, дежурю.
Они помолчали.
«Выпускала сокола да из правого рукава», говорила песня, невольно возбуждая бодрое, веселое чувство. Разговор их, вероятно, был бы другой, ежели бы они говорили не при звуках песни.
– Что правда, австрийцев побили? – спросил Долохов.
– А чорт их знает, говорят.
– Я рад, – отвечал Долохов коротко и ясно, как того требовала песня.
– Что ж, приходи к нам когда вечерком, фараон заложишь, – сказал Жерков.
– Или у вас денег много завелось?
– Приходи.
– Нельзя. Зарок дал. Не пью и не играю, пока не произведут.
– Да что ж, до первого дела…
– Там видно будет.
Опять они помолчали.
– Ты заходи, коли что нужно, все в штабе помогут… – сказал Жерков.
Долохов усмехнулся.
– Ты лучше не беспокойся. Мне что нужно, я просить не стану, сам возьму.
– Да что ж, я так…
– Ну, и я так.
– Прощай.
– Будь здоров…
… и высоко, и далеко,
На родиму сторону…
Жерков тронул шпорами лошадь, которая раза три, горячась, перебила ногами, не зная, с какой начать, справилась и поскакала, обгоняя роту и догоняя коляску, тоже в такт песни.


Возвратившись со смотра, Кутузов, сопутствуемый австрийским генералом, прошел в свой кабинет и, кликнув адъютанта, приказал подать себе некоторые бумаги, относившиеся до состояния приходивших войск, и письма, полученные от эрцгерцога Фердинанда, начальствовавшего передовою армией. Князь Андрей Болконский с требуемыми бумагами вошел в кабинет главнокомандующего. Перед разложенным на столе планом сидели Кутузов и австрийский член гофкригсрата.
– А… – сказал Кутузов, оглядываясь на Болконского, как будто этим словом приглашая адъютанта подождать, и продолжал по французски начатый разговор.
– Я только говорю одно, генерал, – говорил Кутузов с приятным изяществом выражений и интонации, заставлявшим вслушиваться в каждое неторопливо сказанное слово. Видно было, что Кутузов и сам с удовольствием слушал себя. – Я только одно говорю, генерал, что ежели бы дело зависело от моего личного желания, то воля его величества императора Франца давно была бы исполнена. Я давно уже присоединился бы к эрцгерцогу. И верьте моей чести, что для меня лично передать высшее начальство армией более меня сведущему и искусному генералу, какими так обильна Австрия, и сложить с себя всю эту тяжкую ответственность для меня лично было бы отрадой. Но обстоятельства бывают сильнее нас, генерал.
И Кутузов улыбнулся с таким выражением, как будто он говорил: «Вы имеете полное право не верить мне, и даже мне совершенно всё равно, верите ли вы мне или нет, но вы не имеете повода сказать мне это. И в этом то всё дело».