De senaste 3D-acceleratorerna stöder “Anisotrophic filtering”, “Trilinear filtering”, “Single pass Multitexturing”, etc. Vad betyder egentligen alla dessa namn? Hur påverkar de bildkvaliteten. Hur kommer det sig att folk säger att trilinjär filtrering är så mycket bättre än bilinjär filtrering när skärmdumpar ser nästan identiska ut? Allt detta och mer kommer att besvaras i den här artikeln. | |
OBS: För exemplen på bildkvalitet är en skärmupplösning på 24 eller 32 bitar till hjälp. (Det är svårt att se skillnaden mellan 24bit och 16bit om ditt skrivbord körs på 16bit!) |
Färgdjup
En av de mest märkbara förbättringarna jämfört med tidigare hårdvaruarkitekturer är kanske hoppet från 256 färger till 16bitars färg. Med 16-bitars färg kan hela 64 000 färger visas på skärmen. Denna förbättring gav liv åt nyare spel, eliminerade skarpt kontrasterande färger, möjliggjorde coola funktioner som färgad belysning, äkta mjuka färgövergångar och mer. Jag kommer inte ens bry mig om att visa skillnaden mellan 256 färger och 16bitars färg; Jag är säker på att ni alla vet skillnaden; men vad sägs om 24bit färg? De senaste hårdvaruacceleratorerna stöder 24-bitars färgutdata. Är det verkligen stor skillnad mellan det och 16-bitars färg? Kolla in dessa ögonblicksbilder:
16-bitars färg, klicka för förstorad bild |
24-bitars färg, klicka för förstorad bild |
Uppenbarligen är det inte så stor skillnad mellan dessa två ögonblicksbilder. (Var fick jag tag i dessa fula ögonblicksbilder? Tja, de är från min egenbryggade mjukvaruåtergivningsmotor)
Varför 24bit färg?
Räcker inte 16bit färg? Jag menar, det finns 64k färger tillgängliga, varför behöver vi fler? Problemet är egentligen inte antalet färger; det är VILKA färger som finns. Standardformatet för en 16-bitars färg är 5-bitars röd, 6-bitars grön och 5-bitars blå. Det betyder att det bara finns 2^5 = 32 nyanser av rött tillgängliga, 2^6 = 64 nyanser av grönt tillgängliga och 2^5 = 32 nyanser av blått tillgängliga. Problemet med detta är att om du vill skapa en gradient av rött som täcker hela 800×600 spelskärmen så kommer det att se ganska fult ut, eftersom 600/32 = ~19 pixlar kommer att ha samma färg innan gradienten ändras. Detta kommer att märkas smärtsamt. (Stormästare B utvecklar detta lite)
Med 24-bitars färg delas färgerna upp i 8-bitars röd, 8-bitars grön och 8-bitars blå. Detta ger oss 2^8, eller 256 nyanser av varje färg. Detta är mycket mer visuellt tilltalande än bara 32 eller 64 nyanser av varje färg. En gradient av rött för vår 800×600 skärm kommer bara att ha ~2 rader som har samma färg; knappt märkbar.
Om 24-bitars färg tillåter sådana mjukare färgövergångar, hur kommer det sig att det inte syns i ovanstående ögonblicksbilder. Svaret är att det bara är i mycket mindre skala.
Som du kan se från denna ögonblicksbild, (den grövsta delen är faktiskt den mörkbruna i 16-bitars färgen, inte den del som är inringad (skyller på JPEG) 16-bitars färgbilden har hårda övergångar mellan färger, medan 24-bitarsbilden är mycket mycket jämnare Gör det verkligen någon skillnad om du bara kan se att det är 16-bitars färg genom att zooma in? Inte riktigt, men varhelst i ett spel det finns någon form av gradient, eller gradvis blekning, (belysning är ett exempel) är 24-bitars färg kommer att se betydligt bättre ut än 16-bitars färg. Om du kör ditt skrivbord i 16-bitars färg kommer du att märka att de rosa molnen i bakgrunden förmodligen inte kommer att se så jämna ut som det var tänkt, när de faktiskt på en 24-bitars färgskärm ser praktiskt taget felfri ut.
Affären med 32-bitars färg
Vad är 32-bitars färg? Ger 32bitars färg oss 10,12,10 bitar av nyanser? Egentligen ger 32bit exakt samma bildkvalitet som 24bit färg. Den extra byten är vanligtvis märkt A (för ALPHA) och berättar hur transparent pixeln är. Observera att grafikkortet inte använder detta A-värde automatiskt; programmerare kan dock dra nytta av denna extra lagring per pixel för att göra några snygga effekter.
Varför behöver vi 32-bitars färg om det är samma sak?
En av de viktigaste anledningarna till att 32-bitars färg “uppfanns” är för att viss videoarkitektur (särskilt 128-bitarsarkitekturer) lättare kan hantera en styrka på 2 antal bitar, snarare än ett udda tal som 24. Jag gissar att RIVA 128, och andra 128-bitars arkitekturer med hög bandbredd) passerar 128 bitar varje gång, och att hantera “fraktionella pixlar” (dvs. att skicka in 128-bitars 24-bitars pixlar kommer att ge RIVA 5 pixlar och den röda komponenten i den 6:e pixeln att bearbeta, inte särskilt snyggt)
Läs vidare för att ta reda på mer om texturkartläggning.