Potentiellt synligt set
I 3D-datorgrafik används potentiellt synliga uppsättningar för att påskynda renderingen av 3D-miljöer . De är en form av ocklusionsavlivning , varvid en kandidatuppsättning potentiellt synliga polygoner förberäknas och sedan indexeras under körning för att snabbt få en uppskattning av den synliga geometrin . Termen PVS används ibland för att hänvisa till alla ocklusionsutdrivningsalgoritmer (eftersom detta i själva verket är vad alla ocklusionsalgoritmer beräknar), även om det i nästan all litteratur används specifikt för att hänvisa till ocklusionsutdrivningsalgoritmer som förberäknar synliga uppsättningar och associera dessa uppsättningar med regioner i rymden. För att göra denna koppling är kamerans visningsutrymme ( uppsättningen punkter från vilken kameran kan återge en bild) vanligtvis uppdelad i (vanligtvis konvexa ) regioner och en PVS beräknas för varje region.
Fördelar kontra kostnad
Fördelarna med att avlasta synlighet som en förprocess är:
- Applikationen behöver bara slå upp den förberäknade uppsättningen med tanke på dess vyposition. Denna uppsättning kan reduceras ytterligare genom utslaktning med frustum . Beräkningsmässigt är detta mycket billigare än att beräkna ocklusionsbaserad synlighet för varje bildruta.
- Inom en ram är tiden begränsad. Endast 1/60-dels sekund (förutsatt att en bildhastighet på 60 Hz) är tillgänglig för synlighetsbestämning, renderingsförberedelse (förutsatt att grafikhårdvara), AI, fysik eller vilken annan appspecifik kod som helst som krävs. Däremot kan förbearbetningen offline av en potentiellt synlig uppsättning ta så lång tid som krävs för att beräkna korrekt synlighet.
Nackdelarna är:
- Det finns ytterligare lagringskrav för PVS-data.
- Förbehandlingstiderna kan vara långa eller obekväm.
- Kan inte användas för helt dynamiska scener.
- Den synliga uppsättningen för en region kan i vissa fall vara mycket större än för en punkt.
Primärt problem
Det primära problemet i PVS-beräkning blir då: Beräkna mängden polygoner som kan vara synliga från var som helst inuti varje region i en uppsättning polyedriska områden.
Det finns olika klassificeringar av PVS-algoritmer med avseende på vilken typ av synlighet som de beräknar.
Konservativa algoritmer
Dessa överskattar sikten konsekvent, så att ingen triangel som är synlig får utelämnas. Nettoresultatet är att inget bildfel är möjligt, men det är möjligt att kraftigt överskatta synbarheten, vilket leder till ineffektiv rendering (på grund av renderingen av osynlig geometri). Fokus på konservativ algoritmforskning är att maximera occluderfusion för att minska denna överskattning. Listan över publikationer om denna typ av algoritm är omfattande – bra undersökningar om detta ämne inkluderar Cohen-Or et al. och Durand.
Aggressiva algoritmer
Dessa underskattar synlighet konsekvent, så att inga redundanta (osynliga) polygoner finns i PVS-uppsättningen, även om det kan vara möjligt att missa en polygon som faktiskt är synlig vilket leder till bildfel. Fokus på aggressiv algoritmforskning är att minska det potentiella felet.
Ungefärliga algoritmer
Dessa kan resultera i både redundans och bildfel.
Exakta algoritmer
Dessa ger optimala synlighetsuppsättningar, där det inte finns några bildfel och ingen redundans. De är dock komplicerade att implementera och körs vanligtvis mycket långsammare än andra PVS-baserade synlighetsalgoritmer. Teller beräknade exakt synlighet för en scen uppdelad i celler och portaler (se även portalrendering ) .
De första allmänna hanteringsbara 3D-lösningarna presenterades 2002 av Nirenstein et al. och Bittner. Haumont et al. förbättra prestandan för dessa tekniker avsevärt. Bittner et al. lösa problemet för 2.5D urbana scener. Även om det inte är helt relaterat till PVS-beräkning, ger arbetet med 3D Visibility Complex och 3D Visibility Skeleton av Durand en utmärkt teoretisk bakgrund om analytisk synlighet.
Synlighet i 3D är i sig ett 4-dimensionellt problem. För att tackla detta utförs lösningar ofta med Plücker-koordinater , som effektivt lineariserar problemet i ett 5D- projektivt utrymme . I slutändan löses dessa problem med högre dimensionell konstruktiv solid geometri .
Sekundära problem
Några intressanta sekundära problem inkluderar:
- Beräkna en optimal underindelning för att maximera utslagning av sikten.
- Komprimera de synliga uppsättningsdata för att minimera lagringskostnader.
Implementeringsvarianter
- Det är ofta oönskat eller ineffektivt att helt enkelt beräkna triangelnivåsynlighet. Grafikhårdvara föredrar att objekt är statiska och finns kvar i videominnet. Därför är det generellt sett bättre att beräkna synlighet per objekt och att dela upp alla objekt som kan vara för stora individuellt. Detta lägger till konservativitet, men fördelen är bättre hårdvaruanvändning och komprimering (eftersom synlighetsdata nu är per objekt, snarare än per triangel).
- Att beräkna cell- eller sektorsynlighet är också fördelaktigt, eftersom genom att bestämma synliga områden i rymden , snarare än synliga objekt, är det möjligt att inte bara ta bort statiska objekt i dessa områden, utan även dynamiska objekt.
externa länkar
Citerade författares sidor (inklusive publikationer):
Andra länkar: