2009-03-27 14 views
7

Algorytm okluzji jest niezbędny w branży CAD i gier. I są one różne w tych dwóch branżach, które myślę. Moje pytania to:Kolekcja algorytmów okluzji

  1. Jakie algorytmy okluzji stosuje się odpowiednio w obu indurstrach?
  2. i jaka jest różnica?

Pracuję nad oprogramowaniem CAD, a przyjęty przez nas algorytm okluzji to: - ustaw identyfikator obiektu jako jego kolor (liczbę całkowitą), a następnie wyrenderuj scenę, w końcu odczytaj piksel, aby znaleźć widoczne obiekty. Występ nie jest tak dobry, więc chcę tu uzyskać dobre pomysły. Dzięki.


Po przeczytać anwsers, chcę wyjaśnić, że algorytmy okluzji tutaj oznacza „okluzji uboju” - dowiedzieć się widoczną powierzchnię lub podmioty przed wysłaniem ich do rurociągu.

Z google, znalazłem algorytm na gamasutra. Jakieś inne dobre pomysły lub ustalenia? Dzięki.

+0

Wygląda na to, że używasz bufora elementów: http: // stackoverflow.com/questions/498601/what-is-the-best-approach-to-compute-efficient-the-first-intersection-between-a/570861 # 570861 To nie jest zły algorytm, ale będzie miał problemy z wizualnymi krawędziami . –

Odpowiedz

3

on zatrzymany mi, że większość odpowiedzi do tej pory tylko omówienia obrazu rzędu okluzji . Nie jestem do końca pewien, czy chodzi o CAD, ale w grach okluzja zaczyna się na znacznie wyższym poziomie, przy użyciu drzew BSP, drzewek oś i/lub renderowania portalu, aby szybko określić obiekty, które pojawiają się w obserwowanym cielsku.

+0

+1. DirectX/OpenGL wykonuje przyzwoitą pracę rysowania tylko rzeczy, które widzisz (za pomocą bufora Z). Jeśli chcesz ograniczyć ilość renderowanych materiałów, aby uzyskać lepszą wydajność, musisz przejrzeć jeden z tych algorytmów. –

+0

Tak; ale oprócz okluzji opartej na pikselach, D3D ani OpenGL nie tworzą wykresu "magia". Przycinanie i usuwanie nie są wystarczające, aby usprawiedliwić wysyłanie wszystkich wielokątów znanych do urządzenia renderującego, ponieważ przycinanie skaluje się nieco liniowo. –

5

W grach okluzja odbywa się za sceną przy użyciu jednej z dwóch bibliotek 3D: DirectX lub OpenGL. Aby uzyskać szczegółowe informacje, okluzja odbywa się za pomocą Z buffer. Każdy punkt ma składową Z, punkty, które są bliżej znikają, a punkty są dalej oddalone.

Algorytm okluzji wykonywany jest zwykle w sprzęcie za pomocą dedykowanego układu przetwarzania grafiki 3D, który implementuje funkcje DirectX lub OpenGL. Program gry wykorzystujący DirectX lub OpenGL będzie rysował obiekty w przestrzeni 3D, a biblioteka OpenGL/DirectX będzie renderować scenę, biorąc pod uwagę projekcję i okluzję.

2

Termin, którego należy szukać, to hidden surface removal.

Renderowanie w czasie rzeczywistym zazwyczaj wykorzystuje jedną prostą metodę usuwania ukrytej powierzchni: uśpienie od tyłu. Każdy poli będzie miał "normalny na powierzchni" punkt, który jest wstępnie obliczany w określonej odległości od powierzchni. Sprawdzając kąt normalnej powierzchni względem kamery, wiadomo, że powierzchnia jest odwrócona i dlatego nie trzeba jej renderować.

Oto niektóre interaktywne flash-based demos and explanations.

+0

Ten proces jest niezbędny, ale niewystarczający. Każdy wklęsły obiekt będzie nadal wymagał, aby powierzchnie były renderowane w prawidłowej kolejności, a jeśli jeden obiekt pojawi się przed innym, to zwykłe uśpienie powierzchni nie pomaga. –

+0

Nazwałam funkcję usuwania ujęcia, ponieważ buforowanie Z było już wspomniane. Gdybym napisał więcej, byłbym głównie powtarzając stronę z Wikipedii, którą łączyłem. – spoulson

1

Piksel sprzętowy Z-Buforowanie jest zdecydowanie najprostszą techniką, jednak w scenach obiektów o dużej gęstości wciąż można próbować renderować ten sam piksel wiele razy, co w niektórych sytuacjach może stać się problemem wydajności. - Na pewno musisz się upewnić, że nie odwzorowujesz i nie teksturujesz tysięcy obiektów, które nie są widoczne.

Jestem obecnie myśleć o tym problemie w jednym z moich projektów, Znalazłem ten stymulowany kilka pomysłów: http://www.cs.tau.ac.il/~dcor/Graphics/adv-slides/short-image-based-culling.pdf