Hoe werkt een 3D grafische kaart? (2003) – Deel 2

Inhoudsopgave
  1. 1. Inleiding
  2. 2. Stap 3: de laatste transformatie
  3. 3. Stap 4: Opruiming
  4. 4. Stap 5: triangle setup en rasterization
  5. 5. Stap 6: Pixel shading...
  6. 6. Stap 6: … texturing...
  7. 7. Stap 6: … en filtering

Stap 4: Opruiming

Tot dusver hebben we het alleen nog maar over vertices gehad, de hoekpunten van de driehoeken die de bouwstenen zijn van een 3D-model. Wanneer de vertices eenmaal getransformeerd en belicht zijn, kan de videokaart aan het werk om het eigenlijke beeld op te bouwen en te bewerken tot het uiteindelijk op het scherm weergegeven wordt. De stap die we hier bespreken, is eigenlijk een onderdeel van de erop volgende stap triangle setup, maar is tegenwoordig zo belangrijk en uitgebreid dat we hem apart bespreken.

Oorspronkelijk waren 3D-videokaarten behoorlijk inefficiënt in de manier waarop ze de vertex-data die in de vorige stap is getransformeerd bewerkten: alle vertices werden verwerkt tot polygonen, belicht, voorzien van texturen en op het scherm vertoond. Hierbij hield de videokaart geen rekening met het feit dat een groot deel van al dit werk helemaal niet zichtbaar zou zijn op het scherm: de vertices doorliepen allemaal de gehele rest van de pipeline, ongeacht waar ze zich bevonden in de scène. Denk aan de achterkant van objecten of de (gedeeltelijke) plaatsing van een object achter een ander object. Dit was inefficiënt, omdat de beperkt beschikbare bandbreedte (hoeveelheid data die tegelijkertijd van en naar het videogeheugen geschreven kan worden) feitelijk verspild werd.

Videogeheugen is eigenlijk altijd duur – gesteld kan worden dat het altijd het snelst beschikbare geheugen is dat in grote hoeveelheden kan worden geproduceerd, ongeacht het moment in de geschiedenis waar we naar kijken. Om die reden zagen de fabrikanten van 3D-chips al snel in dat ze het geheugen zo optimaal mogelijk moesten benutten. De eerste stap was clipping, het verwijderen van alle delen van de scène die buiten het schermbeeld zouden vallen. Een tweede voor de hand liggende opruimactie betrof de (toch onzichtbare) achterkant van objecten: 3dfx gebruikte al een vorm van backface culling, waarmee deze werden verwijderd, in de Voodoo2.

  
Figuur 2: ons 3D-figuur uit deel 1, en na backface culling.

Op het moment dat de geometrische complexiteit, ofwel het aantal polygonen per scène, aanzienlijk ging toenemen, na de introductie van hardwarematige transformation & lighting in 3D-chips, werd het belang van optimalisatie groter. Ter illustratie: bij een moderne 3D-scène bevinden zich al snel 10 ‘lagen’ van complexe 3D-objecten achter elkaar, een verschijnsel dat we overdraw noemen. Zonder optimalisaties zou ieder van die 10 lagen verwerkt moeten worden, of de objecten nu zichtbaar zijn of niet. Om die reden introduceerde ATI met de Radeon in juli 2000 onder de naam HyperZ een set technologische trucs om ‘overbodig werk’ te minimaliseren, nVidia deed met de Geforce3 hetzelfde maar uitgebreider onder de noemer Lightspeed Memory Architecture (LMA). Beide technologieën zijn inmiddels aan hun derde revisie toe, met als zichtbaar resultaat dat een moderne videokaart de beschikbare bandbreedte aanzienlijk beter benut. Desalniettemin is nog steeds sprake van enige overdraw. Figuur 3, een schermafbeelding uit de VillageMark benchmark is een mooie illustratie van dit begrip.

Aangezien we in dit artikel eerst de DirectX 7-videokaarten aanhouden, gaan we hier niet al te diep in op de diverse methodes die in de nieuwste kaarten gebruikt worden om het effect van overdraw te minimaliseren en de bandbreedte dus zo effectief mogelijk te gebruiken. Alle bandbreedtebesparende optimalisaties komen in een toekomstig artikel uitgebreid aan bod. Het is overigens van belang op te merken dat de plaats in de pipeline van de diverse optimalisaties varieert per videokaartgeneratie en fabrikant.


Figuur 3: VillageMark is een benchmark die test hoe goed videokaarten met overdraw overweg kunnen.

Advertentie
0