~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 1BE2EB4FDFE796F4820314AF8C0DFC5C__1712414640 ✰
Заголовок документа оригинал.:
✰ Z-buffering - Wikipedia ✰
Заголовок документа перевод.:
✰ Z-буферизация — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Z-buffering ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/1b/5c/1be2eb4fdfe796f4820314af8c0dfc5c.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/1b/5c/1be2eb4fdfe796f4820314af8c0dfc5c__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 05:37:37 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 6 April 2024, at 17:44 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Z-буферизация — Википедия Jump to content

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

Из Википедии, бесплатной энциклопедии
Данные Z-буфера

Буфер глубины , также известный как z-буфер , представляет собой тип буфера данных, используемый в компьютерной графике для представления информации о глубине объектов в трехмерном пространстве с определенной точки зрения . Глубина хранится в виде карты высот сцены, значения представляют собой расстояние до камеры, причем 0 — самое близкое значение. Схема кодирования может быть изменена таким образом, чтобы наибольшее число соответствовало значению, ближайшему к камере. Буферы глубины помогают при рендеринге сцены и гарантируют, что правильные полигоны правильно перекрывают другие полигоны. Z-буферизация была впервые описана в 1974 году Вольфгангом Штрассером в его докторской диссертации по быстрым алгоритмам рендеринга перекрытых объектов. [1] Аналогичным решением для определения перекрывающихся полигонов является алгоритм художника , который способен обрабатывать непрозрачные элементы сцены, хотя и ценой эффективности и неверных результатов.

В конвейере 3D-рендеринга , когда объект проецируется на экран, глубина (z-значение) сгенерированного фрагмента в проецируемом изображении экрана сравнивается со значением, уже хранящимся в буфере ( тест глубины ), и заменяет его. если новое значение ближе. Он работает в тандеме с растеризатором , который вычисляет цветные значения. Фрагмент, выводимый растеризатором, сохраняется, если он не перекрывается другим фрагментом.

При просмотре изображения, содержащего частично или полностью перекрывающиеся непрозрачные объекты или поверхности, невозможно полностью увидеть те объекты, которые находятся дальше всего от зрителя и за другими объектами (т. е. одни поверхности скрыты за другими). Если бы не было механизма управления перекрывающимися поверхностями, поверхности отображались бы друг на друге, не заботясь о том, должны ли они находиться позади других объектов. Идентификация и удаление этих поверхностей называется проблемой скрытой поверхности . Чтобы проверить перекрытие, компьютер вычисляет значение z пикселя, соответствующего первому объекту, и сравнивает его со значением z в том же месте пикселя в z-буфере. Если вычисленное значение z меньше, чем значение z, уже находящееся в z-буфере (т. е. новый пиксель находится ближе), то текущее значение z в z-буфере заменяется вычисленным значением. Это повторяется для всех объектов и поверхностей в сцене (часто параллельно ) . В конце концов, z-буфер позволит правильно воспроизвести обычное восприятие глубины: близкий объект скрывает более далекий. Это называется z-отбраковка .

Z-буфер имеет ту же внутреннюю структуру данных, что и изображение, а именно 2D-массив, с той лишь разницей, что он хранит одно значение для каждого пикселя экрана вместо цветных изображений, которые используют 3 значения для создания цвета. Из-за этого Z-буфер выглядит черно-белым, поскольку он не хранит информацию о цвете. Буфер имеет те же размеры, что и экранный буфер, для обеспечения единообразия.

Первичные тесты видимости (например, отсечение задней грани ) и вторичные тесты видимости (например, проверки перекрытия и обрезка экрана) обычно выполняются на полигонах объектов, чтобы пропустить определенные полигоны, которые не нужны для рендеринга. Z-буфер, напротив, сравнительно дорог , поэтому выполнение первичных и вторичных тестов видимости освобождает z-буфер от некоторой нагрузки.

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

Использует [ править ]

Z-буфер — это технология, используемая практически во всех современных компьютерах, ноутбуках и мобильных телефонах для выполнения трехмерной компьютерной графики . Основное применение сейчас — видеоигры , требующие быстрой и точной обработки 3D-сцен. Z-буфер реализован аппаратно в потребительских видеокартах . Z-буфер также используется (реализованный как программное обеспечение, а не аппаратное обеспечение) для создания компьютерных спецэффектов для фильмов. [ нужна цитата ]

Кроме того, данные Z-буфера, полученные при рендеринге поверхности с точки зрения источника света, позволяют создавать тени с помощью техники отображения теней . [2]

События [ править ]

Даже при достаточно малой степени детализации могут возникнуть проблемы с качеством, когда точность значений расстояний в z-буфере не распределяется равномерно по расстоянию. Ближние значения гораздо более точны (и, следовательно, могут лучше отображать более близкие объекты), чем значения, расположенные дальше. Обычно это желательно, но иногда это может привести к появлению артефактов по мере удаления объектов. Вариант z-буферизации, который приводит к более равномерному распределению точности, называется w-буферизацией (см. ниже ).

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

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

На более поздних видеокартах для ПК (1999–2005 гг.) управление z-буфером использует значительную часть доступной памяти пропускной способности . Для снижения затрат на производительность z-буферизации использовались различные методы, такие как сжатие без потерь (компьютерные ресурсы для сжатия/распаковки дешевле, чем полоса пропускания) и сверхбыстрая аппаратная z-clear, которая делает устаревшим принцип «один кадр положительный, один кадр». отрицательный» трюк (полный пропуск межкадровой очистки с использованием чисел со знаком для умной проверки глубины).

В некоторых играх, особенно в нескольких играх позже в жизненном цикле N64 , было решено либо минимизировать Z-буферизацию (например, сначала визуализировать фон без Z-буферизации и использовать Z-буферизацию только для объектов переднего плана), либо полностью отказаться от нее, чтобы уменьшить требования к пропускной способности памяти и требования к памяти соответственно. Super Smash Bros. и F-Zero X — две игры для N64, в которых Z-буферизация минимизирована для увеличения частоты кадров. В некоторых играх Factor 5 Z-буферизация также была сведена к минимуму или опущена. На N64 Z-буферизация может потреблять в 4 раза больше полосы пропускания, чем без использования Z-буферизации. [3]

Mechwarrior 2 на ПК поддерживает разрешения до 800x600. [4] на оригинальном 3DFX Voodoo размером 4 МБ из-за отсутствия Z-буферизации.


Z-отсечение [ править ]

В рендеринге z-отсечение — это раннее удаление пикселей на основе глубины, метод, обеспечивающий повышение производительности, когда рендеринг скрытых поверхностей является дорогостоящим. Это прямое следствие z-буферизации, при которой глубина каждого пикселя-кандидата сравнивается с глубиной существующей геометрии, за которой он может быть скрыт.

При использовании z-буфера пиксель можно отсеять (отбросить), как только станет известна его глубина, что дает возможность пропустить весь процесс освещения и текстурирования пикселя, который в любом случае не был бы виден . трудоемкие пиксельные шейдеры Кроме того, для отсеянных пикселей обычно не выполняются . Это делает z-отсечение хорошим кандидатом на оптимизацию в ситуациях, когда являются скорость заполнения , освещение, текстурирование или пиксельные шейдеры основными узкими местами .

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

  • многоугольники могут перекрывать друг друга в цикле (например: треугольник A перекрывает B, B перекрывает C, C перекрывает A), и
  • в треугольнике не существует канонической «ближайшей» точки (например: независимо от того, сортируют ли треугольники по их центроиду , ближайшей или самой дальней точке, всегда можно найти два треугольника A и B такие, что A «ближе», но на самом деле B надо рисовать в первую очередь).

Таким образом, алгоритм обратного рисования не может использоваться в качестве альтернативы Z-отсеянию (без серьезной реинжиниринга), за исключением случаев оптимизации Z-отсеивания. Например, оптимизация может заключаться в том, чтобы сохранять полигоны отсортированными в соответствии с расположением x/y и глубиной z, чтобы обеспечить границы, чтобы быстро определить, могут ли два полигона иметь взаимодействие окклюзии.

Математика [ править ]

Диапазон значений глубины в пространстве камеры , подлежащем рендерингу, часто определяется между и значение .

После перспективного преобразования новое значение , или , определяется:

После орфографической проекции новое значение , или , определяется:

где это старое значение в пространстве камеры и иногда называется или .

Полученные значения нормализованы между значениями -1 и 1, где плоскость находится в -1 и плоскость равна 1. Значения за пределами этого диапазона соответствуют точкам, которые не находятся в усеченной пирамиде просмотра и не должны отображаться.

Представление с фиксированной точкой [ править ]

Обычно эти значения сохраняются в z-буфере аппаратного графического ускорителя в формате с фиксированной запятой . Сначала они нормализуются к более распространенному диапазону [0, 1] путем замены соответствующего преобразования в предыдущую формулу:

Упрощение:

Во-вторых, приведенная выше формула умножается на где d — глубина z-буфера (обычно 16, 24 или 32 бита) и округление результата до целого числа: [5]

Эту формулу можно инвертировать и вывести, чтобы вычислить разрешение z-буфера («детализация», упомянутая ранее). Обратная ситуация вышесказанному :

где

Разрешение z-буфера с точки зрения пространства камеры будет дополнительным значением, полученным в результате наименьшего изменения целого числа, хранящегося в z-буфере, которое равно +1 или -1. Следовательно, это разрешение можно рассчитать по производной как функция :

Выразив это обратно в терминах пространства камеры, заменив вышеизложенным :

Это показывает, что значения сгруппированы гораздо плотнее вблизи плоскости и гораздо реже на дальнем расстоянии, что приводит к большей точности ближе к камере. Чем меньше то есть, тем меньше точность там, где слишком близко установленная плоскость является распространенной причиной нежелательных артефактов рендеринга более удаленных объектов. [6]

Чтобы реализовать z-буфер, значения по линейно интерполируются экранному пространству между вершинами текущего многоугольника , и эти промежуточные значения обычно сохраняются в z-буфере в формате с фиксированной запятой .

W-буфер [ править ]

Чтобы реализовать w-буфер, [7] старые ценности в пространстве камеры или , хранятся в буфере, обычно в формате с плавающей запятой . Однако эти значения нельзя линейно интерполировать по экранному пространству от вершин — обычно их приходится инвертировать , интерполировать, а затем снова инвертировать. Полученные значения , в отличие от , расположены равномерно между и . Существуют реализации w-буфера, которые вообще исключают инверсии.

Будет ли Z-буфер или w-буфер обеспечивать лучшее изображение, зависит от приложения.

Алгоритмы [ править ]

Следующий псевдокод демонстрирует процесс z-буферизации:

// Прежде всего, инициализируем глубину каждого пикселя.
 d(i, j) = бесконечность // Максимальная длина

 // Инициализируем значение цвета для каждого пикселя цветом фона
 c(i, j) = цвет фона

 // Для каждого многоугольника выполните следующие действия:
 for (каждый пиксель в проекции многоугольника)
 {
   // Находим глубину, т.е. z многоугольника
   // в точке (x, y), соответствующей пикселю (i, j) 
    если (z < d(i, j))
   {
     d(i, j) = z;
     c(i, j) = цвет;
   }
 }
 

См. также [ править ]

Ссылки [ править ]

  1. ^ Штрассер, Вольфганг (26 апреля 1974 г.). "Будущая работа". Быстрое отображение кривых и ( поверхностей на графических устройствах отображения ( PDF) на немецком языке). Берлин. 6-1. {{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
  2. ^ Акенине-Мёллер, Томас; Хейнс, Эрик; Хоффман, Нати (6 августа 2018 г.). Рендеринг в реальном времени, четвертое издание . ЦРК Пресс. ISBN  978-1-351-81615-1 .
  3. ^ Как я реализовал MegaTextures на реальном оборудовании Nintendo 64 , получено 4 января 2024 г.
  4. ^ Сравнение 3D-ускорения, эпизод 11: Mechwarrior 2 — 3DFX / PowerVR / S3 Virge / ATI Rage / Matrox Mys , получено 4 января 2024 г.
  5. ^ Организация OpenGL. «Open GL/FAQ 2 — Точность буфера глубины» . Проверено 26 декабря 2017 г.
  6. ^ Грегори Массаль. «Буфер глубины — мелкие детали» . Архивировано из оригинала 15 октября 2008 года . Проверено 3 августа 2008 г.
  7. ^ Стив Бейкер. «Учимся любить свой Z-буфер» . Проверено 3 января 2018 г.

Внешние ссылки [ править ]

Примечания [ править ]

  1. ^ См. Вольфганг К. Гилой [ де ] , Дж. Л. Энкарнасао, В. Штрассер. «Школа компьютерной графики Гилоя». Компьютерная графика 35 4:12–16.
Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 1BE2EB4FDFE796F4820314AF8C0DFC5C__1712414640
URL1:https://en.wikipedia.org/wiki/Z-buffering
Заголовок, (Title) документа по адресу, URL1:
Z-buffering - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)