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

Inhoudsopgave
  1. 1. Inleiding
  2. 2. Leven voor 3D?
  3. 3. 3D video-acceleratie-kaart?! 
  4. 4. Stap 1: De virtuele 3D-wereld
  5. 5. Stap 2: Scène berekeningen
  6. 6. Stap 3: De videokaart aan het werk met…
  7. 7. …transformaties…
  8. 8. …en belichting

3D video-acceleratie-kaart?! 

Voordat we echt beginnen, nog iets over de benamingen van videokaarten zelf. In dit artikel gebruiken we de term ‘videokaart’, maar we kennen ook ‘grafische kaart’, ‘grafische adapter’, ‘3D-acceleratiekaart’ en ‘3D-versneller’. Tegenwoordig zijn deze benamingen correct voor alle op de markt zijnde videokaarten, maar dat is niet altijd zo geweest (zie ‘Leven voor 3D?’). Aangezien alle moderne videokaarten 3D-functies ondersteunen, duiden we ze meestal niet meer aan als ‘3D-acceleratiekaart’ of ‘3D-versneller’ – deze termen slaan oorspronkelijk ook niet op de eigenlijke videokaart, dat wil zeggen het gedeelte van de PC dat zorgt voor beeld op de monitor, maar op aparte insteekkaarten die via een interne of externe doorluskabel, of via de PCI-bus alleen het gedeelte van de data dat betrekking had op 3D-beelden afhandelden. De aparte videokaart – die, om de verwarring compleet te maken, ook nog wel eens als bijvoorbeeld ‘2D-accelerator’ werd aangeduid – was wat 3D-beelden betreft alleen verantwoordelijk voor het uiteindelijk vertoonde beeld. Voorbeelden van deze vroege ‘3D-versnellers’ zijn de NEC/Videologic PowerVR, en natuurlijk de 3dfx Voodoo en Voodoo2 kaarten. Kort na deze kaarten werden al de eerste videokaarten met gecombineerde 2D- en 3D-functionaliteit op de markt gebracht, waaronder de Rendition Verite-serie, de ATI Rage Pro-kaarten, de 3DLabs Permedia 2 en nVidia’s Riva128. Het is met het oog op de huidige situatie bijna onvoorstelbaar hoeveel verschillende ‘spelers’ zich anno 1997 nog bevonden op de markt voor 3D-kaarten…


Figuur 2: De eerste Voodoo 3D-versneller kaart. Let op de ingang voor de VGA-doorluskabel.

De overgebleven fabrikanten produceren tegenwoordig alleen videokaarten die in staat zijn om 3D-functies uit te voeren, zij het in verschillende mate: een instapkaart moet meer aan de processor overlaten dan een high-end kaart. Hoe dan ook wordt het maken van een driedimensionaal beeld en het vertonen hiervan op een tweedimensionaal scherm niet met één berekening gedaan, maar opgesplitst in een groot aantal stappen. Het geheel van deze stappen noemt men de graphics pipeline (zie kader ‘Wat is een pipeline?’). In de komende artikelen gaan we uiteenzetten wat deze stappen nu precies inhouden en welk onderdeel van de computer verantwoordelijk is voor de afhandeling ervan.

Het verhaal van de graphics pipeline begint namelijk niet in de videokaart, maar in de processor. Deze ontvangt data van een programma – laten we zeggen een 3D spel – en gaat hiermee vervolgens aan de slag. De processor krijgt de data niet rechtstreeks van het spel binnen, maar via een API oftewel application programmers interface. Dit is een vast gedefinieerde set functies die beschikbaar is in het besturingsysteem om door een programma te worden gebruikt. Voor 3D-functies is DirectX van Microsoft veruit de meest gebruikte API; nieuwe versies van DirectX kunnen dan ook gezien worden als de kilometerpaaltjes op de 3D-snelweg. Op het moment van schrijven is versie 9 van Microsoft’s API de meest recente. Een andere API is OpenGL, voor spellenspelers bekend doordat het 3D-spel Quake voorzien werd van ondersteuning voor hardwarematige 3D-acceleratie met behulp van instructies uit deze API. Ook de opvolgers van dit succesvolle spel maken gebruikt van OpenGL.

Wat is een pipeline?

De stappen die benodigd zijn voor het opbouwen van een driedimensionaal beeld op een tweedimensionaal scherm, worden wel aangeduid als de graphics pipeline: letterlijk vertaald ‘grafische pijplijn’. Het concept van een pipeline is al zo oud als de eerste computers en beslaat een variabel aantal stappen, maar altijd minimaal vijf: Instruction Fetch (ophalen van instructie van het programma dat wordt uitgevoerd), Instruction Decode (vertalen van de instructie naar een voor de processor ‘begrijpelijke taal’, Fetch Data/Operands (uit het geheugen ophalen van data die benodigd is om de instructie uit te voeren), Execution (uitvoeren van de instructie), Write Back (wegschrijven van het resultaat naar het geheugen of een processorregister).

Zoals geschreven is de pipeline van een videokaart niet alleen langer en complexer, maar binnen de ‘hoofd pipeline’ kunnen ook nog parallelle vertakkingen voorkomen, die weer bijeenkomen wanneer ze zijn afgerond: de vertex en pixel pipelines, die uitvoerig zullen worden besproken in een volgend deel in deze reeks. Figuur 3 is een eenvoudige weergave van de grafische pipeline zoals we die hier bespreken.


Figuur 3: de grafische pipeline bij DirectX 7 videokaarten 

Advertentie
0