stringtranslate.com

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

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

Фон

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

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

Алгоритмы

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

Z-буферизация
Во время растеризации значение глубины/Z каждого пикселя (или выборки в случае сглаживания, но без потери общности используется термин пиксель ) проверяется относительно существующего значения глубины. Если текущий пиксель находится позади пикселя в Z-буфере, пиксель отклоняется, в противном случае он затеняется, и его значение глубины заменяет значение в Z-буфере. Z-буферизация легко поддерживает динамические сцены и в настоящее время эффективно реализована в графическом оборудовании. Это текущий стандарт. Стоимость использования Z-буферизации заключается в том, что она использует до 4 байт на пиксель, и что алгоритму растеризации необходимо проверять каждую растеризованную выборку относительно Z-буфера. Z-буфер также может страдать от артефактов из-за ошибок точности (также известных как Z-борьба ).
Буферы покрытия (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 .