Введение

Видимость в 3D-компьютерной графике

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

Предыстория

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

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

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

Убой фрустама

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

Выборка с обратной стороны

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

Убой взносов

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

Облик от окклюзии

Объекты, полностью скрытые другими непрозрачными объектами, могут быть отсечены. Это очень распространенный механизм для ускорения рендеринга больших сцен со средней или высокой сложностью геометрии. Существует несколько типов методов окклюзионного отсечения: рендеринг потенциально видимых множеств (PVS) разделяет сцену на области и предварительно вычисляет видимость для них. Эти множества видимости затем индексируются во время выполнения для быстрого получения высококачественных множеств видимости (с учетом сложного взаимодействия окклюдеров). Портальный рендеринг разделяет сцену на ячейки/сектора (комнаты) и порталы (двери) и вычисляет видимость секторов, отсекая их порталами. Диссертация Хансонга Чжана "Эффективное окклюзионное отсечение для интерактивного отображения произвольных моделей" описывает метод окклюзионного отсечения.

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

Популярной темой в литературе по VSD является принцип "разделяй и властвуй". Алгоритм Уорнока стал пионерским в разделении экрана. Трассировка лучей (beam tracing) – это подход к трассировке лучей, который разделяет видимые объемы на лучи. Различные методы разделения пространства экрана уменьшают количество примитивов, рассматриваемых в каждой области, например, разбиение на тайлы (tiling) или отсечение в пространстве экрана с использованием BSP-дерева. Разбиение на тайлы может использоваться в качестве предварительной обработки для других методов. Аппаратное обеспечение Z-буфера обычно включает в себя грубое значение "hi Z", по отношению к которому примитивы могут быть отброшены на ранней стадии без растрирования – это форма отсечения по окклюзии. Иерархии ограничивающих объемов (BVH) часто используются для разделения пространства сцены (примерами являются BSP-дерево, окта-дерево и kd-дерево). Это позволяет выполнять определение видимости иерархически: если узел в дереве считается невидимым, то все его дочерние узлы также невидимы, и дальнейшая обработка не требуется (все они могут быть отброшены рендерером). Если узел считается видимым, то каждый из его дочерних узлов должен быть проверен. Этот обход представляет собой, по сути, проход по дереву, где невидимость/окклюзия или достижение листового узла определяют, следует ли остановиться или рекурсивно продолжить обход соответственно.