Коллекция алгоритмов окклюзии

Алгоритм окклюзии необходим в САПР и игровой индустрии. Я думаю, что они разные в этих двух отраслях. Мои вопросы:

  1. Какие алгоритмы окклюзии применяются соответственно в двух отраслях?
  2. а в чем разница?

Я работаю над разработкой программного обеспечения САПР, и мы приняли алгоритм окклюзии: установите идентификатор объекта как его цвет (целое число), а затем визуализируйте сцену, наконец, прочитайте пиксель, чтобы найти видимые объекты. Производительность не так хороша, поэтому я хочу почерпнуть здесь несколько хороших идей. Спасибо.


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

С помощью Google я нашел алгоритм в gamasutra < / а>. Есть ли другие хорошие идеи или находки? Спасибо.


person windloud    schedule 27.03.2009    source источник
comment
Похоже, вы используете буфер элементов: stackoverflow.com/questions/498601/. Это неплохой алгоритм, но при визуальном восприятии будут проблемы. края.   -  person Bob Cross    schedule 27.03.2009


Ответы (4)


Меня поразило, что в большинстве ответов пока обсуждается только окклюзия порядка изображений. Я не совсем уверен в САПР, но в играх окклюзия начинается на гораздо более высоком уровне, с использованием деревьев BSP, деревьев октавы и / или рендеринга портала для быстрого определения объектов, которые появляются внутри пирамиды просмотра.

person Cecil Has a Name    schedule 27.03.2009
comment
+1. DirectX / OpenGL уже неплохо отрисовывает только то, что вы видите (через Z-буфер). Если вы хотите ограничить объем рендеринга для повышения производительности, вам следует изучить один из этих алгоритмов. - person Vilx-; 28.03.2009
comment
Да; но помимо пиксельной окклюзии, D3D и OpenGL творят магию графа сцены. Отсечения и отсечения недостаточно, чтобы оправдать отправку всех полигонов, известных устройству рендеринга, поскольку отсечение масштабируется несколько линейно. - person Cecil Has a Name; 28.03.2009

В играх окклюзия выполняется за сценой с использованием одной из двух 3D-библиотек: DirectX или OpenGL. Чтобы вдаваться в подробности, окклюзия выполняется с помощью Z-буфера. Каждая точка имеет компонент Z, точки, которые находятся ближе, и точки перекрытия, которые находятся дальше.

Алгоритм окклюзии обычно выполняется аппаратно с помощью специального чипа обработки трехмерной графики, который реализует функции DirectX или OpenGL. Игровая программа, использующая DirectX или OpenGL, будет рисовать объекты в трехмерном пространстве, а библиотека OpenGL / DirectX визуализирует сцену с учетом проекции и окклюзии.

person Himadri Choudhury    schedule 27.03.2009

Вам следует искать по запросу удаление скрытой поверхности.

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

Вот несколько интерактивных демонстраций и пояснений на основе флэш-памяти.

person spoulson    schedule 27.03.2009
comment
Этот процесс необходим, но недостаточен. Для любого вогнутого объекта все равно необходимо, чтобы поверхности были отрисованы в правильном порядке, и если один объект появляется перед другим, то простая отбраковка задней поверхности не помогает. - person Jim T; 27.03.2009
comment
Я назвал backface culling, потому что Z-буферизация уже упоминалась. Если бы я писал еще что-нибудь, я бы просто повторил страницу Википедии, на которую я указал. - person spoulson; 27.03.2009

Аппаратная пиксельная Z-буферизация - это, безусловно, самый простой метод, однако в сценах с объектами высокой плотности вы все равно можете пытаться визуализировать один и тот же пиксель несколько раз, что в некоторых ситуациях может стать проблемой с производительностью. - Вам определенно нужно убедиться, что вы не отображаете и не текстурируете тысячи объектов, которые просто не видны.

В настоящее время я размышляю над этой проблемой в одном из своих проектов, я обнаружил, что это стимулировало несколько идей: http://www.cs.tau.ac.il/~dcor/Graphics/adv-slides/short-image-based-culling.pdf

person Jim T    schedule 27.03.2009