В 3D-компьютерной графике определение скрытой поверхности (также известное как определение показанной поверхности , удаление скрытой поверхности ( HSR ), отсечение окклюзии ( OC ) или определение видимой поверхности ( VSD )) — это процесс определения того, какие поверхности и части поверхности можно увидеть под определенным углом обзора. Алгоритм определения скрытой поверхности — это решение проблемы видимости , которая была одной из первых крупных проблем в области 3D- компьютерной графики . Процесс определения скрытой поверхности иногда называют скрытием , а такой алгоритм иногда называют скрытием . Когда речь идет о рендеринге строк , это называется удалением скрытых линий . Определение скрытой поверхности необходимо для правильной визуализации сцены, чтобы нельзя было видеть элементы, скрытые за самой моделью, позволяя видеть только естественно просматриваемую часть графики.
Определение скрытых поверхностей — это процесс, посредством которого предотвращается визуализация поверхностей, которые не должны быть видны пользователю (например, потому что они находятся за непрозрачными объектами, такими как стены). Несмотря на развитие аппаратных возможностей, потребность в усовершенствованных алгоритмах рендеринга все еще существует . В обязанности движка рендеринга входит обеспечение больших пространств мира, и когда размер мира приближается к бесконечности, движок не должен замедляться, а оставаться на постоянной скорости. Оптимизация этого процесса зависит от возможности обеспечить использование как можно меньшего количества ресурсов для рендеринга поверхностей, которые в конечном итоге не будут отображаться пользователю.
Существует множество методов определения скрытой поверхности. По сути, они представляют собой упражнение по сортировке и обычно различаются по порядку, в котором выполняется сортировка, и по способу подразделения задачи. Сортировка большого количества графических примитивов обычно выполняется методом « разделяй и властвуй» .
Учитывая конвейер рендеринга , этапы проецирования , отсечения и растеризации обрабатываются по-разному следующими алгоритмами:
Областью, связанной с определением видимой поверхности (VSD), является отбраковка , которая обычно происходит перед VSD в конвейере рендеринга. Примитивы или пакеты примитивов можно отклонять целиком, что обычно снижает нагрузку на хорошо спроектированную систему.
Преимущество отсеивания на ранних стадиях конвейера заключается в том, что невидимые объекты не нужно извлекать, трансформировать, растрировать или закрашивать. Типы алгоритмов отбраковки включают в себя:
Усеченная пирамида просмотра — это геометрическое представление объема, видимого виртуальной камерой . Естественно, объекты за пределами этого объема не будут видны на конечном изображении, поэтому они отбрасываются. Часто объекты лежат на границе усеченной пирамиды обзора. Эти объекты разрезаются на части вдоль этой границы в процессе, называемом обрезкой , а части, лежащие за пределами усеченной пирамиды, отбрасываются, поскольку их некуда рисовать.
В случае 3D-объектов часть поверхности объекта обращена к камере, а остальная часть обращена в сторону от камеры, т. е. находится на задней стороне объекта, чему мешает передняя сторона. Если объект полностью непрозрачен, эти поверхности рисовать не нужно. Они определяются порядком намотки вершин: если у нарисованного треугольника вершины расположены на плоскости проекции по часовой стрелке, если смотреть на камеру, то они переключаются на порядок против часовой стрелки, когда поверхность отворачивается от камеры.
Кстати, это также делает объекты полностью прозрачными, когда камера точки обзора находится внутри них, поскольку тогда все поверхности объекта обращены от камеры и отбраковываются рендерером. Чтобы предотвратить это, объект должен быть установлен как двусторонний (т.е. не производится отбраковка задней грани) или иметь отдельные внутренние поверхности.
Часто объекты находятся настолько далеко, что не вносят существенного вклада в итоговое изображение. Эти объекты выбрасываются, если их проекция на экран слишком мала. См. Плоскость отсечения .
Объекты, которые полностью находятся за другими непрозрачными объектами, могут быть отсеяны. Это очень популярный механизм для ускорения рендеринга больших сцен со сложностью от умеренной до высокой. Существует несколько типов подходов к отсеиванию окклюзии:
Диссертация Хансонга Чжана «Эффективное отсечение окклюзии для интерактивного отображения произвольных моделей» [1] описывает подход к отсеиванию окклюзии.
Популярная тема в литературе по VSD – « разделяй и властвуй» . Алгоритм Варнока стал пионером в разделении экрана. Трассировка лучей — это метод трассировки лучей, который делит видимые объемы на лучи. Различные подходы к подразделению экранного пространства сокращают количество примитивов, рассматриваемых для каждой области, например, мозаика или отсечение BSP экранного пространства. Тайлинг может использоваться в качестве предварительной обработки для других методов. Аппаратное обеспечение Z-буфера обычно может включать в себя грубый «hi-Z», против которого примитивы могут быть отвергнуты на ранней стадии без растеризации. Это форма отсеивания окклюзии.
Иерархии ограничивающих объемов (BVH) часто используются для разделения пространства сцены (примерами являются BSP-дерево , окта-дерево и kd-дерево ). Это позволяет выполнять определение видимости иерархически: по сути, если узел в дереве считается невидимым , то все его дочерние узлы также являются невидимыми, и дальнейшая обработка не требуется (все они могут быть отклонены средством визуализации). Если узел считается видимым , то необходимо оценить каждого из его дочерних элементов. Этот обход фактически является обходом по дереву, где невидимость/затенение или достижение конечного узла определяют, следует ли остановиться или выполнить рекурсию соответственно.