Z-буферизация (z-buffering) - самый надежный метод удаления скрытых поверх-
ностей. Z-буфер - область видеопамяти, в которой для каждого пиксела хранит-
ся значение глубины. Когда рендерится новый пиксел, его глубина сравнивается
со значением, хранимом в z-буфере, точнее с глубиной уже срендеренного пик-
села с теми же x и y координатами. Если новый пиксел имеет значение глубины
выше значения в z-буфере, это значит что новый пиксел невидим, и он не запи-
сывается во фрейм-буфер, если ниже - то записывается. Z-буфер обычно распо-
ложен во фреймбуфере, поэтому при отключении аппаратной z-буферизации место
под z-буфер освобождается, что позволяет 3D-ускорителю работать в более вы-
соких разрешениях. Ради получения этих высоких разрешений некоторые игры с
несложной графикой используют не Z-буферизацию, а более простые методы уда-
ления скрытых поверхностей. Тем не менее отключение z-буферизации может при-
водить к артефакту, известному как z-алиасинг.
Главный аттрибут z-буфера - разрещающая способность. Она критична для высо-
кокачественного рендеринга сцен с большой глубиной. Чем выше разрешающая
способность, тем выше дискретность z-координат и точнее выполняется ренде-
ринг удаленных объектов. 24-разрядный z-буфер дает разрешающую способность
16 млн, 32-разрядный - 2 млрд, а 16-разрядный - только 64 тыс. Если при рен-
деринге разрешающей способности не хватает, то может случиться, что 2 пере-
крывающихся объекта получат одну и ту же z-координату, в результате аппара-
тура не будет знать какой объект ближе к наблюдателю, что опять же ведет к
z-алиасингу.
При использовании z-буферизации надо позабититься о том, чтобы глубины были
корректны с точки зрения перспективы. Допустим, ускоритель рендерит треу-
гольник с заданными z-координатами трех его вершин. Он должен рассчитать
z-координаты для всех точек, лежащих внутри треугольника. Если их просто ин-
терполировать, то результат получится некорректным с точки зрения перспекти-
вы, поэтому их надо корректировать. Hо современные 3D-ускорители используют
технику, называемую w-буфером. W-координата - величина с плавающей точкой,
обратная к z-координате. Всем вершинам ставятся в соответствие именно
w-координаты, которые можно интерполировать без перспективной коррекции.
|