Нерегулярный Z-буфер
Нерегулярный Z-буфер — это алгоритм, предназначенный для решения проблемы видимости в трехмерной компьютерной графике в реальном времени. Он связан с классическим Z-буфером тем, что сохраняет значение глубины для каждого образца изображения и использует его для определения видимых геометрических элементов сцены. Однако ключевое различие между классическим Z-буфером и нерегулярным Z-буфером заключается в том, что последний допускает произвольное размещение образцов изображения в плоскости изображения , тогда как первый требует, чтобы образцы были расположены в регулярной сетке.
Эти образцы глубины явно сохраняются в двумерной пространственной структуре данных. Во время растеризации треугольники проецируются на плоскость изображения, как обычно, и запрашивается структура данных, чтобы определить, какие образцы перекрывают каждый проецируемый треугольник. Наконец, для каждой перекрывающейся выборки выполняется стандартное Z-сравнение и (условное) обновление кадрового буфера.
Выполнение
[ редактировать ]Классический алгоритм растеризации проецирует каждый многоугольник на плоскость изображения и определяет, какие точки выборки из набора с регулярными интервалами лежат внутри проецируемого многоугольника. Поскольку расположение этих выборок (т.е. пикселей) неявно, это определение может быть сделано путем проверки краев на неявной сетке точек выборки. Однако если точки выборки расположены неравномерно и не могут быть вычислены по формуле, то этот подход не работает. Нерегулярный Z-буфер решает эту проблему, явно сохраняя местоположения выборок в двумерной пространственной структуре данных , а затем запрашивая эту структуру, чтобы определить, какие выборки лежат внутри проецируемого треугольника. Этот последний шаг называется «нерегулярной растеризацией».
Хотя конкретная используемая структура данных может варьироваться от реализации к реализации, двумя изученными подходами являются kd-дерево и сетка связанных списков. Сбалансированная реализация kd-дерева имеет то преимущество, что она гарантирует доступ O(log(N)). Его главный недостаток состоит в том, что параллельное построение kd-дерева может быть затруднено, а обход требует дорогостоящих инструкций ветвления. Преимущество сетки списков состоит в том, что ее можно более эффективно реализовать на графического процессора аппаратном обеспечении , который предназначен в первую очередь для классического Z-буфера.
С появлением CUDA значительно улучшилась программируемость современного графического оборудования. Магистерская диссертация «Быстрая растеризация треугольников с использованием нерегулярного Z-буфера в CUDA» (см. Внешние ссылки) содержит полное описание реализации программного обеспечения для картирования теней на основе нерегулярного Z-буфера в CUDA. Система рендеринга полностью работает на графических процессорах. Он способен генерировать тени без искажений со скоростью десятков миллионов треугольников в секунду.
Приложения
[ редактировать ]Нерегулярный Z-буфер можно использовать для любого приложения, требующего расчета видимости в произвольных местах плоскости изображения. Было показано, что он особенно хорош в картографировании теней — алгоритме пространства изображений для рендеринга жестких теней. Помимо рендеринга теней, потенциальные приложения включают адаптивное сглаживание , дрожающую выборку и картографирование среды .