Hoe werkt een 3D grafische kaart - Deel 2

Inhoudsopgave
  1. 1. De pixel rendering engine
  2. 2. Shading
  3. 3. Texture Mapping
  4. 4. Texture Filtering
  5. 5. Atmosferische Effecten
  6. 6. Z-Bufering
  7. 7. Verdere 3D Effecten
  8. 8. Verdere 3D Effecten (vervolg)
  9. 9. De AGP Interface
  10. 10. De Software Aansturing

Texture Filtering

Zoals u wel begrijpt heeft de oorspronkelijke texture nooit precies hetzelfde formaat als het 3D object waar de afbeelding op geplaatst moet worden. Uit de pixels van de texture (die in het 3D jargon 'texels' worden genoemd) moeten dus op één of andere manier de kleuren van alle pixels van het 3D object worden afgeleid.

De makkelijkste en snelste manier om dit te doen heet point sampling of point filtering. Hierbij wordt voor iedere pixel de kleur van de dichtstbijzijnde texel gekopieerd. Dit systeem wordt daarom ook wel de 'nearest' methode genoemd. Hoewel point sampling erg snel gaat, heeft het ook een aantal nadelen. Indien het 3D object veel kleiner is dan de oorspronkelijk texture kan er veel detail verloren gaan, omdat veel texels gewoonweg verwaarloosd worden. Als een dergelijk object dan gaat bewegen kan het ook zijn dat het een beetje knipperend overkomt, aangezien kleine details in de texture soms wel en soms niet zichtbaar zijn. Als het 3D object echter groter is dan de oorspronkelijk texture ontstaat er weer een ander probleem. Het resultaat wordt dan erg blokkerig, aangezien een enkele texel dan identiek op meerdere pixels wordt geprojecteerd. Iedereen herinnert zich nog wel hoe blokkerig de graphics van spellen als Doom 1 en Doom 2 werden als je tegen een muur aanliep. Dit komt doordat in deze spellen alleen maar van point sampling gebruik werd gemaakt.

Een systeem om deze twee problemen al een beetje tegen te gaan is bilinear filtering. Bij bilinear filtering wordt niet alleen naar de dichtstbijzijnde texel gekeken, maar wordt de uiteindelijke kleur berekend door de kleuren van de vier dichtstbijzijnde texels naar verhouding te vermengen. Dit systeem is dus in principe te vergelijken met het anti-aliasing systeem, met dien verstande dat er met maximaal vier texels rekening wordt gehouden. De resultaten zijn in ieder geval stukken beter dan met point sampling.

In figuur 7 en 8 zien we duidelijk de voordelen van bilinear filtering ten opzichte van point sampling. In figuur 7 zien we een 3D object waarbij de texture flink verkleind is. Rechts zien we het resultaat met point sampling (waar dus veel detail verloren gaat) en links het resultaat met bilinear filtering. Een gedeelte van de oorspronkelijke texture is ook in de afbeelding te vinden. In figuur 8 zien we juist het andere probleem, namelijk een texture die flink vergroot moet worden. (Dus bijvoorbeeld het "tegen een muur aanlopen" in een 3D game.) Rechts het erg blokkerige resultaat van point sampling (zoals in Doom 1 en 2) en links het al betere resultaat van bilinear filtering (zoals bijvoorbeeld in Quake). In de afbeelding is ook de oorspronkelijk texture te zien. 


Figuur 7 - De voordelen van bilinear filtering bij sterk verkleinde textures
(links: bilinear filtering / rechts: point filtering)


Figuur 8 - De voordelen van bilinear filtering bij sterk vergrote textures
(links: bilinear filtering / rechts: point filtering)

Sinds de komst van de 3D versnellers is bilinear filtering al meer dan standaard. Maar er zijn een aantal andere, nog mooiere texture mapping systemen die steeds meer gebruikt worden.

Iets wat in 3D games steeds meer gebruikt wordt zijn de zogenaamde MIP-maps. MIP is een afkorting voor het Latijnse "Multum in Parvo" wat "Meerdere in Één" betekent. In een MIP-map worden dan ook meerdere versies van een texture opgeslagen. Elke nieuwe variant is weer de helft kleiner als de vorige en door de auteur zorgvuldig met behulp van anti-aliasing verkleind. Een voorbeeld van een MIP-map zien we in figuur 9.


Figuur 9 - Een voorbeeld van een MIP-map

Bij het toepassen van texture mapping zoekt de 3D videokaart nu het meest ideale textureformaat uit de MIP-map. Op de gekozen texture wordt meestal weer bilinear filtering toegepast. Om de kwaliteit van MIP-mapping te behalen met een filtering methode zouden veel grote tweedimensionale filters noodzakelijk zijn.

Toch heeft ook MIP-mapping een nadeel. Als een 3D object zich naar voren of naar achteren verplaatst, wordt er op een gegeven moment van MIP level veranderd. Deze resolutiesprong is vaker goed zichtbaar. Om dit tegen te gaan is er nog een trilinear filtering systeem. Bij trilinear filtering wordt eerst op de twee meest ideale MIP levels bilinear filtering toegepast. Uit de twee resultaten wordt door middel van interpolatie de uiteindelijke kleur gefilterd. Trilinear filtering is de methode waarbij verreweg de mooiste resultaten worden behaald, maar het systeem vraagt ook zeer veel van de 3D chip. Ook is er bij trilinear filtering veel meer geheugen bandbreedte nodig, aangezien er steeds twee MIP levels gebruikt worden.

Bij nieuwe spellen als Quake 3 kan trilinear filtering al zonder problemen worden toegepast. De resultaten zijn absoluut verbluffend, maar de snelheid kan flink terugvallen ten opzichte van standaard bilinear filtering. Nog mooier dan trilinear filtering is het nieuwe anisotropic filtering. Aangezien deze methode nog vrijwel niet toegepast wordt, zal ik hem hier verder niet behandelen.

Advertentie
0