Frustum culling

Uit Wikipedia, de vrije encyclopedie
Ga naar: navigatie, zoeken

Het frustum is het gezichtsveld van een camera in 3D computer graphics. Alle objecten die in het frustum liggen zouden op het beeld van de camera komen als ze geprojecteerd werden. Objecten die buiten het frustum liggen zijn zeker weten niet te zien vanuit het gezichtsveld van de camera.
Als een object wel in het frustum ligt betekent dat nog niet dat het object ook werkelijk zichtbaar is, omdat er geen rekening wordt gehouden met overlappende objecten. Bijvoorbeeld: Als je een object achter een grote muur plaatst en je kijkt naar de muur, dan kan het object wel in het frustum liggen, maar omdat de muur er voor staat zul je het object toch niet zien.

Frustum culling[bewerken]

Bij het renderen van een 3D scène door middel van rasterizen, worden de hoekpunten van een polygoon naar het scherm geprojecteerd en daarna wordt dit polygoon in 2D ingekleurd. Polygonen die buiten het gezichtsveld vallen worden na het projecteren afgekapt, zodat polygonen, of delen van polygonen die buiten het gezichtsveld vallen niet getekend hoeven te worden. Een probleem hierbij is dat voordat je kan weten of een polygoon wel of niet zichtbaar is, je het al volledig getransformeerd en geprojecteerd moet hebben. Voor scènes waar veel objecten buiten het gezichtsveld liggen kan dit leiden tot onnodig verspilde processortijd, waardoor het renderen langer zal duren, en je dus een lagere framerate krijgt.

Een oplossing hiervoor is frustum culling. Voor frustum culling moet je scène ingedeeld zijn in verschillende objecten van polygonen, waarvan je het bereik weet, bijvoorbeeld door de begrenzende balk of bol van het object van tevoren uit te rekenen. Tijdens het renderen test je dan eerst of dit object in het frustum ligt. Als dit niet zo is weet je gelijk ook zeker dat geen enkel polygoon van dit object in het frustum kan liggen. Als het object wel in het frustum ligt render je de polygonen op de gebruikelijke manier. Sommige polygonen zullen nog steeds buiten het frustum liggen, maar het zijn er een stuk minder dan voorheen, dus het renderen zal hierdoor ook een stuk sneller gaan.

Frustum culling met boomstructuren[bewerken]

Om het frustum culling nog verder te optimaliseren kan je gebruikmaken van een boom structuur, zoals een octree, kd-tree of een bsp-tree. Hierbij groepeer je in principe verschillende objecten weer in een groter object om het aantal frustum-object tests te verminderen.

Zie ook[bewerken]