PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Welche Cullingtechnik?


Gast
2008-08-24, 17:23:21
Hi,

Also früher zu Zeiten von Quake 3 und Co wurde ja immer BSPs benutzt, um Vertices, die nicht im Sichtbereich liegen, auszuschließen.

Mit welchen Techniken wird sowas in heutigen Spielen denn üblicherweise gemacht?

Ringwald
2008-08-24, 20:11:39
HL2 macht es doch immer noch so oder nicht?

Savay
2008-08-25, 04:13:07
die UE2.5 nutzt auch noch eine BSP. zumindest was das grobe level design angeht. darin werden dann allerdings die feiner strukturierten level elemente als "hardware" mesh eingefügt.
naturgemäß kann auf die dann natürlich keine shadowmap gerendert werden weshalb die komplett vorgerendert aus nem 3d editor importiert werden müssen.

ich hab mir die UE3 noch nicht angesehen nehme aber an das es dort immernoch sehr ähnlich ist. BSP grundstruktur...hardwaremesh zum "dekorieren"...

inwieweit das im detail einfluss auf das culling hat mag ich nicht abschätzen aber bei der UE2.5 und somit (unter vorbehalt) auch der UE3 werden meines wissens die meshes immer komplett gerendert...und nur verworfen wenn sie sich in einer anderen komplett von LoS aus unsichtbaren BSP zone befinden. die müssen natürlich vom leveldesigner gesetzt werden.

Coda
2008-08-25, 12:43:55
Der BSP-Tree hat nicht direkt was mit dem Culling zu tun.

Was du meinst ist PVS, also vorberechnete Verdeckungsinformation pro BSP-Leaf.

Das macht HL² heute in der Tat noch so und es funktioniert bescheiden. Ich habe das mal in einem TF2-Level getestet, da wurde fast nichts gecullt. Was nicht weiter schlimm ist, weil die Engine eh keine großen Anforderungen an die Grafikhardware stellt.

Ansonsten kommen diverse Techniken zur Verwendung, vor allem Portals und Hardware Occlusion Queries (UT3).

Abraxus
2008-08-25, 12:51:32
Ansonsten kommen diverse Techniken zur Verwendung, vor allem Hardware Occlusion Queries (UT3).
Davon geht man wieder weg und schreibt sich dafür seinen eigenen kleinen SW-Rasterizer/Raycaster. In Zeiten von Multicore ist das auch gar keine so blöde Idee.

Coda
2008-08-25, 13:06:55
Richtig, hab ich auch schon gehört dass manche das machen. Vor allem hat man damit dann das Problem nicht, dass Dinge aufpoppen.

Gauß
2008-09-05, 17:05:32
Wieso sollte man dafür den Aufwand machen Geometrie zu zeichnen?
Ganz einfache Begrenzungsvolumen sind am effizientesten.

Coda
2008-09-05, 17:25:25
Begrenzungsvolumen sind auch Geometrie.

Gauß
2008-09-05, 17:40:01
Man braucht diese aber nicht zu zeichnen wenn man Objekte außerhalb des Sichtbereichs ausschließen will.
Dazu reicht es die Begrenzungsebenen zu transformieren und zu testen.

Coda
2008-09-05, 18:04:08
Ich versteh dich nicht tut mir leid. Von welcher Culling-Technik redest du grad?

Gauß
2008-09-05, 18:21:20
Keine Ahnung wie man das gemeinhin nennt.
Die Ebenen des Sichtkegelstumpfes werden gegen die Volumen der Objekte getestet, wobei diese Volumen mitunter in trivialen räumlichen Hierarchien organisiert sind.

Ist meines Wissens der einfachste und effizienteste Weg Objekte außerhalb des Sichtbereiches auszuschließen.

Coda
2008-09-05, 19:21:28
Das ist doch nur Frustum Culling, es geht hier darum verdeckte Geometrie nicht zu rendern.

Gauß
2008-09-05, 20:02:27
Das ist doch nur Frustum Culling, es geht hier darum verdeckte Geometrie nicht zu rendern.Die Frage im ersten Beitrag war nach Ausschlussverfahren für Objekte außerhalb des Sichtbereiches, was ja wohl der "viewfrustum" ist.

Coda
2008-09-05, 20:13:36
Du kannst durch Mauern sehen?

Gast
2008-09-05, 22:32:51
und du kannst hinter dich sehen?

Seht's ein: Ihr seid beide ON-Topic.

frittentuete
2008-09-07, 20:55:34
er kann sich drehen, dann sieht er das was hinter ihm ist ;)

pvs wird meiner Meinung nach vorberechnet (im editor oder beim laden des levels). damit weiß man von jeder position (in jeder blickrichtung), welche räume sichtbar sind. dann kann man mit frustum-culling weiter unterteilen.

macht es heutzutage denn noch groß sinn (bei der heutigen grafikpower) überhaupt noch occlusion (pvs)-culling zu nutzen?

Gast
2008-09-07, 21:44:44
Das macht man ja hauptsächlich um die CPU zu entlasten.

Coda
2008-09-07, 22:57:56
und du kannst hinter dich sehen?
Ich habe ja nicht behauptet, dass man kein Frustum Culling machen sollte, nur ging's darum nicht als er geantwortet hat.

frittentuete
2008-09-07, 23:16:09
Das macht man ja hauptsächlich um die CPU zu entlasten.

Du belastest die Cpu mit dem cullen aber, um die grafikkarte zu entlasten ^^

"die schnellste Art ein Vertex zu zeichnen, ist es garnicht zu zeichnen"

Coda
2008-09-07, 23:27:04
Ersetz "Vertex" mit "Mesh" und du bist im 21. Jahrhundert angelangt.

Gast
2008-09-07, 23:36:47
Du belastest die Cpu mit dem cullen aber, um die grafikkarte zu entlasten ^^

"die schnellste Art ein Vertex zu zeichnen, ist es garnicht zu zeichnen"

Das zeichnen ist manchmal teurer für die CPU als das cullen. Noch kann die GPU nicht alles alleine machen.

Coda
2008-09-08, 00:07:33
Was genau soll das sein was die GPU nicht alleine kann?

Gast
2008-09-08, 00:38:32
Was genau soll das sein was die GPU nicht alleine kann?
Die Daten von der HDD lesen/erschließen/verarbeiten?
Entscheiden was wichtig ist und was nicht?
Alles was nicht in den GPU RAM passt?

So Sachen wie Geomorphing, LOD und Animation würde ich lieber auf der CPU machen, auch wenn auf der GPU die Sachen (einzeln für sich) realisierbar währen.

Weil du "theoretisch" so gerne Haare spaltest, kannst du mir gern mal die Kimme sauber rasieren.

Coda
2008-09-08, 01:22:42
Die Daten von der HDD lesen/erschließen/verarbeiten?
Wenn man während eines Frames anfängt von der Platte zu lesen ist alles zu spät.

Entscheiden was wichtig ist und was nicht?
Kapier ich nicht. Eine GPU macht genau das was man ihr sagt.

Alles was nicht in den GPU RAM passt?
Das was nicht in den VRAM passt erzeugt der Treiber im RAM. Mehr muss er nicht machen.

So Sachen wie Geomorphing, LOD und Animation würde ich lieber auf der CPU machen
Wieso? Gerade Animationen mittels Skinning wird heutzutage praktisch ausschließlich auf der GPU berechnet. LOD liegt normal als verschiedene vorberechnete Meshes vor und bedarf keiner CPU-Zeit. Progressive Meshes auf der CPU sind viel zu langsam.

Weil du "theoretisch" so gerne Haare spaltest, kannst du mir gern mal die Kimme sauber rasieren.
Das hat rein gar nichts mit "Theorie" zu tun.

Gast
2008-09-08, 01:25:54
Wenn man während eines Frames anfängt von der Platte zu lesen ist alles zu spät.

Wenn man einem die Worte in den Mund legt, kann man so manch dummen Menschen damit beeindrucken.

Coda
2008-09-08, 01:27:14
Wenn man einem die Worte in den Mund legt, kann man so manch dummen Menschen damit beeindrucken.
Wir hatten es von Culling. Ich sehe nicht ein, warum ein Draw-Call für die CPU teurer sein sollte als die Berechnungen für das Culling. Das ist praktisch nie der Fall. Vor allem nicht mehr heute.

catamaran
2008-09-08, 07:16:52
Wir hatten es von Culling. Ich sehe nicht ein, warum ein Draw-Call für die CPU teurer sein sollte als die Berechnungen für das Culling. Das ist praktisch nie der Fall. Vor allem nicht mehr heute.
Das kommt drauf an wieviel der Draw-Call mitschickt. Bei einem Vertex stimme ich dir jedenfalls zu. :)

Zurück zum Thema: natürlich macht PVS Sinn. Es wird immer Sinn machen. Diese Sichtbarkeitstest sind idR einfach zu realisieren und in kürzester Zeit zu prüfen. Der Test wird ja nicht pro Vertex, sondern wie Coda schon richtig andeutete pro Mesh, bzw Teile eines Mesh/Region oder wie auch immer die Daten organisiert sind, gemacht.
Culling auf der Grafikkarte findet afaik ja nicht pro Mesh, sondern pro Vertex statt. Schicke ich 50k Vertices, dann hat die Grafikkarte sicher mehr zu tun als wenn ich den Draw-Call bereits zuvor ausschließen kann.

Coda
2008-09-08, 07:18:28
Das kommt drauf an wieviel der Draw-Call mitschickt. Bei einem Vertex stimme ich dir jedenfalls zu. :)

Und auf die API-Schnittstelle. Direct3D auf XP war da noch grausig. OpenGL war schon immer sehr viel besser und die Vista-APIs sind es jetzt auch.