Stap 6: … en filtering
De oplettende lezer, die heeft gezien dat een driedimensionaal object uit een beperkt – zij het soms groot – aantal polygonen bestaat, en die ook heeft gezien dat texturen een vaste grootte hebben, zal nu de conclusie trekken dat een textuur nooit zomaar op een 3D-object gaat passen. Die lezer heeft gelijk: er is een heel scala aan technieken ontwikkeld om te compenseren voor dit probleem. Deze technieken vallen alle onder de noemer filtering.
Voordat we filtering uit kunnen leggen, moet eerst een begrip aan bod komen dat we tot dusver vanwege mogelijke verwarring hebben vermeden: de texel. Texel staat voor texture element, wat feitelijk niets anders is dan een pixel van een textuur, die correspondeert met een plaats op de gerasterde scène die uit de triangle setup is gerold. Op plaatsen waar een textuur niet mooi aansluit op het 3D-object, en op plaatsen waar de texturen op elkaar aan moeten sluiten, moet dus ontbrekende informatie worden aangevuld. Dit gebeurt door deze informatie, ofwel de kleuren van de betreffende pixels, af te leiden uit de aangrenzende texels.
De eenvoudigste manier hiervoor is point sampling, ofwel het kopiëren van de kleur van de dichtstbijzijnde texel. Dit is een snelle en weinig rekenintensieve methode, maar niet erg precies. Indien het 3D-object kleiner is dan de gebruikte textuur en deze dus verkleind moet worden, kan veel detail verloren gaan doordat texels gewoonweg verwaarloosd worden. Als het echter groter is en de textuur moet worden ‘opgerekt’, ontstaat een erg ‘blokkerig’ beeld, doordat veel pixels precies dezelfde kleur hebben. Dit is de reden dat objecten in de eerste 3D-spellen, die alleen point sampling ondersteunden, erg grofkorrelig oogden wanneer ze dichtbij kwamen.
Met de introductie van bilinear filtering werd voor een groot deel aan deze bezwaren tegemoet gekomen: hierbij wordt niet zomaar de kleur van de dichtstbijzijnde texel gekopieerd, maar wordt gekeken naar de vier dichtstbijzijnde texels. Door deze vier kleuren te mengen en het ‘gemiddelde’ te gebruiken, oogde het eindresultaat een stuk beter. In figuur 12 is het verschil tussen point sampling en bilinear filtering te zien bij een sterk verkleinde textuur, in figuur 13 juist bij een sterk vergrote textuur.

Figuur 12: bij bilinear filtering gaan minder details verloren bij verkleinde texturen (links: bilinear filtering / rechts: point sampling)

Figuur 13: bij vergrote texturen oogt bilinear filtering een stuk minder korrelig (links: bilinear filtering / rechts: point sampling)
Naast het interpoleren van ontbrekende kleuren is er nog een truc om het juiste formaat textuur te gebruiken: MIP-mapping. Hierbij wordt een textuur in meerdere formaten opgeslagen in het videogeheugen en de meest passende gekozen. De naam ‘MIP’ is hiermee ook verklaard: de Latijnse frase multum in parvo betekent ‘meerdere in één’, wat precies is waar MIP-mapping op neerkomt. Op ieder van de afzonderlijke MIP-maps wordt ook nog eens bilinear filtering toegepast om ze zo goed mogelijk in elkaar over te laten vloeien. In figuur 14 is te zien hoe bijvoorbeeld 4 niveaus van MIP-mapping zijn toegepast op een textuur.

Figuur 14: een voorbeeld van een MIP-map
Een nadeel van MIP-mapping wordt hiermee ook duidelijk: bij het dichterbij komen of verder weg plaatsen van een 3D-object moet op een bepaald moment van MIP-level veranderd worden. Zonder een extra truc is deze verandering van resolutie zichtbaar – en dus storend. De truc om dit tegen te gaan heet trilinear filtering en hiermee wordt bij overgangen tussen MIP-levels als het ware een gemiddelde berekend tussen de twee meest ideale MIP-maps. De uitkomst hiervan levert de uiteindelijke kleur op. Deze methode is aanzienlijk rekenintensiever dan alleen het gebruik van bilinear filtering en MIP-maps, omdat het steeds gebruiken van twee MIP-levels twee keer zoveel geheugenbandbreedte kost. Voor moderne videokaarten is dit echter geen enkel probleem meer.
Hoe goed het resultaat van de hier beschreven filtering technieken ook is, er kleeft een substantieel nadeel aan: de kwaliteit van het resultaat is erg afhankelijk van de hoek van het camerastandpunt ten opzichte van de texturen waarop filtering wordt toegepast. Wanneer deze hoek teveel afwijkt van ‘loodrecht’, nemen de interpolatiefouten al snel toe.
We sluiten dit deel van ons verhaal over de werking van 3D-videokaarten af met het vraagstuk ‘welke manier van filtering zou nu een nóg beter resultaat geven?’ Het antwoord hierop vind je in het volgende deel, waar we aankomen bij het einde van de pipeline en hierop naadloos verdergaan met de werking van de nieuwste videokaarten.
Lees Hoe werkt een 3D grafische kaart? (2003) - Deel 3.
Lees Hoe werkt een 3D grafische kaart? (2003) - Deel 1 nog eens terug.