Jump to content

Z-бои

Демонстрация z-файтинга с использованием нескольких цветов и текстур на сером фоне.

Z-fighting , также называемый сшивкой или planefighting , — это явление в 3D-рендеринге , которое возникает, когда два или более примитивов находятся на очень одинаковом расстоянии от камеры. Это приведет к тому, что они будут иметь почти одинаковые или идентичные значения в z-буфере , который отслеживает глубину. Это означает, что при рендеринге определенного пикселя неясно, какой из двух примитивов отрисовывается в этом пикселе, поскольку z-буфер не может точно определить, какой из двух примитивов находится дальше от другого. [1] Если один пиксель был однозначно ближе, то менее близкий можно было отбросить. Это особенно распространено в копланарных многоугольниках, где две грани занимают практически одно и то же пространство, ни одна из которых не находится спереди. В результате затронутые пиксели визуализируются фрагментами одного или другого полигона произвольно, в порядке, определяемом точностью z-буфера. Оно также может меняться при изменении сцены или камеры, в результате чего один полигон «выигрывает» z-тест, затем другой и так далее. Общий эффект — мерцающая шумная растеризация двух полигонов, которые «борются» за цвет пикселей экрана. Эта проблема обычно вызвана ограниченной субпиксельной точностью, с плавающей запятой и фиксированной запятой ошибками округления .

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

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

смягчение последствий

[ редактировать ]
Эффект виден на двух копланарных многоугольниках.

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

Z-борьбу, вызванную недостаточной точностью буфера глубины, можно решить, просто уменьшив видимое расстояние в мире. Это уменьшает расстояние между ближней и дальней плоскостями и решает проблему точности. Однако в некоторых виртуальных средах, где важна видимость на большом расстоянии или где снижение видимости было бы невероятным, например, в космическом симуляторе или симуляторе полета, это невозможно. В таких случаях существуют альтернативные методы. Один из таких методов — «имитировать» расстояние до объектов, находящихся далеко от пользователя, без фактического изменения их положения. Например, если максимальное безопасное расстояние обзора (за пределами которого происходит z-борьба) составляет 10 000 единиц, а объект, подлежащий рендерингу, находится на расстоянии 15 000 единиц, вместо этого этот объект можно визуализировать на расстоянии 10 000 единиц, но его можно уменьшить пропорционально расстояние, на которое он был перемещен. Таким образом, объект, уменьшенный вдвое, будет выглядеть так, как будто он в два раза дальше, чем есть на самом деле. Если это делается только для объектов, которые уже находятся близко или на максимальном расстоянии обзора, а объекты, находящиеся близко к пользователю, визуализируются нормально, этот метод не должен быть заметен. Другой метод, который используется для уменьшения или полного устранения Z-борьбы, - это переключение на логарифмический Z-буфер, обращающий Z. Этот метод можно увидеть в игре. Гранд Крафт Авто V. Из-за способа кодирования числа с плавающей запятой имеют гораздо большую точность, когда они ближе к 0. Здесь обращение Z приводит к большей точности при сохранении глубины очень удаленных объектов, что значительно уменьшает Z-борьбу. [3]

  1. ^ «LearnOpenGL — Глубинное тестирование» . Learnopengl.com . Проверено 1 июля 2021 г.
  2. ^ «Точность буфера глубины — OpenGL Wiki» . www.khronos.org . Проверено 30 июня 2021 г.
  3. ^ Курреж, Адриан (2 ноября 2015 г.). «GTA V — Исследование графики» . AdrianCourreges.com . Проверено 20 июня 2018 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 4628b4879c746e5be2a15fd7ad5b557c__1722749640
URL1:https://arc.ask3.ru/arc/aa/46/7c/4628b4879c746e5be2a15fd7ad5b557c.html
Заголовок, (Title) документа по адресу, URL1:
Z-fighting - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)