stringtranslate.com

Определение скрытой поверхности

В 3D-компьютерной графике определение скрытой поверхности (также известное как определение показанной поверхности , удаление скрытой поверхности ( HSR ), отсечение окклюзии ( OC ) или определение видимой поверхности ( VSD )) — это процесс определения того, какие поверхности и части поверхности можно увидеть под определенным углом обзора. Алгоритм определения скрытой поверхности — это решение проблемы видимости , которая была одной из первых крупных проблем в области 3D- компьютерной графики . Процесс определения скрытой поверхности иногда называют скрытием , а такой алгоритм иногда называют скрытием . Когда речь идет о рендеринге строк , это называется удалением скрытых линий . Определение скрытой поверхности необходимо для правильной визуализации сцены, чтобы нельзя было видеть элементы, скрытые за самой моделью, позволяя видеть только естественно просматриваемую часть графики.

Фон

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

Существует множество методов определения скрытой поверхности. По сути, они представляют собой упражнение по сортировке и обычно различаются по порядку, в котором выполняется сортировка, и по способу подразделения задачи. Сортировка большого количества графических примитивов обычно выполняется методом « разделяй и властвуй» .

Алгоритмы

Учитывая конвейер рендеринга , этапы проецирования , отсечения и растеризации обрабатываются по-разному следующими алгоритмами:

Z-буферизация
Во время растеризации значение глубины/Z каждого пикселя (или выборки в случае сглаживания, но без потери общности используется термин « пиксель» ) сравнивается с существующим значением глубины. Если текущий пиксель находится позади пикселя в Z-буфере, пиксель отклоняется, в противном случае он закрашивается, и его значение глубины заменяет значение в Z-буфере. Z-буферизация легко поддерживает динамические сцены и в настоящее время эффективно реализована в графическом оборудовании. Это текущий стандарт. Стоимость использования Z-буферизации заключается в том, что она использует до 4 байтов на пиксель и что алгоритм растеризации должен проверять каждый растеризованный образец на соответствие Z-буферу. Z-буфер также может страдать от артефактов из-за ошибок точности (также известных как Z-fighting ).
Буферы покрытия (C-буфер ) и поверхностный буфер ( S-буфер )
Быстрее, чем Z-буферы, и широко использовался в играх эпохи Quake I. Вместо хранения значения Z на пиксель они хранят список уже отображаемых сегментов на строку экрана. Затем новые полигоны вырезаются по уже отображенным сегментам, которые скрывают их. S-буфер может отображать несортированные полигоны, тогда как C-буфер требует, чтобы полигоны отображались от ближайшего к самому дальнему. Поскольку метод C-буфера не требует отрисовки пикселя более одного раза, процесс происходит немного быстрее. Это обычно использовалось с деревьями разделения двоичного пространства (BSP), которые обеспечивали сортировку полигонов.
Сортированный список активных ребер
Используемый в Quake 1, он хранил список ребер уже отображаемых полигонов (см. рендеринг развертки ). Полигоны отображаются от ближайшего к дальнему. Новые полигоны обрезаются по краям уже отображенных полигонов, создавая новые полигоны для отображения, а затем сохраняя дополнительные ребра. Его гораздо сложнее реализовать, чем S/C/Z-буферы, но он гораздо лучше масштабируется с увеличением разрешения.
Алгоритм художника
Сортирует полигоны по их барицентру и рисует их задом наперед. Это приводит к небольшому количеству артефактов при применении к сценам с полигонами одинакового размера, образующими гладкие сетки, и включенным отсечением обратной грани . Цена здесь — это этап сортировки и тот факт, что могут возникнуть визуальные артефакты. Этот алгоритм не предназначен для общих сцен, поскольку он не может обрабатывать полигоны в различных распространенных конфигурациях, например поверхности, которые пересекаются друг с другом.
Разделение двоичного пространства (BSP)
Делит сцену по плоскостям, соответствующим границам полигонов. Подразделение построено таким образом, чтобы обеспечить однозначное упорядочение глубины из любой точки сцены при обходе дерева BSP. Недостатком здесь является то, что дерево BSP создается с дорогостоящей предварительной обработкой. Это означает, что он менее подходит для сцен, состоящих из динамической геометрии. Преимущество заключается в том, что данные предварительно отсортированы и не содержат ошибок и готовы к использованию ранее упомянутых алгоритмов. Обратите внимание, что BSP не является решением проблемы HSR, а лишь вспомогательным средством.
трассировка лучей
Пытается смоделировать путь лучей света к точке обзора, прослеживая лучи из точки обзора в сцену. Хотя это и не алгоритм удаления скрытых поверхностей как таковой, он неявно решает проблему удаления скрытых поверхностей, находя ближайшую поверхность вдоль каждого луча обзора. Фактически это эквивалентно сортировке всей геометрии попиксельно.
Алгоритм Варнока
Делит экран на более мелкие области и сортирует внутри них треугольники. Если существует неоднозначность (т. е. полигоны перекрываются по глубине внутри этих областей), то происходит дальнейшее подразделение. В пределе подразделение может происходить вплоть до уровня пикселей.

Отбраковка и определение видимой поверхности

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

Преимущество отсеивания на ранних стадиях конвейера заключается в том, что невидимые объекты не нужно извлекать, трансформировать, растрировать или закрашивать. Типы алгоритмов отбраковки включают в себя:

Просмотр-усеченный отбор

Усеченная пирамида просмотра — это геометрическое представление объема, видимого виртуальной камерой . Естественно, объекты за пределами этого объема не будут видны на конечном изображении, поэтому они отбрасываются. Часто объекты лежат на границе усеченной пирамиды обзора. Эти объекты разрезаются на части вдоль этой границы в процессе, называемом обрезкой , а части, лежащие за пределами усеченной пирамиды, отбрасываются, поскольку их некуда рисовать.

Отбраковка задней поверхности

В случае 3D-объектов часть поверхности объекта обращена к камере, а остальная часть обращена в сторону от камеры, т. е. находится на задней стороне объекта, чему мешает передняя сторона. Если объект полностью непрозрачен, эти поверхности рисовать не нужно. Они определяются порядком намотки вершин: если у нарисованного треугольника вершины расположены на плоскости проекции по часовой стрелке, если смотреть на камеру, то они переключаются на порядок против часовой стрелки, когда поверхность отворачивается от камеры.

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

Отбор вкладов

Часто объекты находятся настолько далеко, что не вносят существенного вклада в итоговое изображение. Эти объекты выбрасываются, если их проекция на экран слишком мала. См. Плоскость отсечения .

Отсечение окклюзии

Объекты, которые полностью находятся за другими непрозрачными объектами, могут быть отсеяны. Это очень популярный механизм для ускорения рендеринга больших сцен со сложностью от умеренной до высокой. Существует несколько типов подходов к отсеиванию окклюзии:

Диссертация Хансонга Чжана «Эффективное отсечение окклюзии для интерактивного отображения произвольных моделей» [1] описывает подход к отсеиванию окклюзии.

Разделяй и властвуй

Популярная тема в литературе по VSD – « разделяй и властвуй» . Алгоритм Варнока стал пионером в разделении экрана. Трассировка лучей — это метод трассировки лучей, который делит видимые объемы на лучи. Различные подходы к подразделению экранного пространства сокращают количество примитивов, рассматриваемых для каждой области, например, мозаика или отсечение BSP экранного пространства. Тайлинг может использоваться в качестве предварительной обработки для других методов. Аппаратное обеспечение Z-буфера обычно может включать в себя грубый «hi-Z», против которого примитивы могут быть отвергнуты на ранней стадии без растеризации. Это форма отсеивания окклюзии.

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

Смотрите также

Источники

  1. ^ «Отбор окклюзии с помощью иерархических карт окклюзии» . www.cs.unc.edu .