Nieuwe features
Charisma Engine 2
ATI's T&L engine uit de Radeon, the 'Charisma Engine' is meegekomen naar de Radeon 8500 en heeft de naam 'Charisma Engine II' meegekregen. Dit is eigenlijk een onjuiste benaming aangezien het nog steeds gaat om een niet programmeerbare T&L engine die DirectX 7 compatible is. Door de hogere snelheid van de Radeon 8500 kunnen de berekeningen wel sneller uitgevoerd worden dan bij zijn voorganger.
Smartshader
Wel nieuw is de 'Smartshader Engine'. Wederom een duur woord, maar in de praktijk niets anders dan een DirectX pixel en vertex shader. Een dergelijke engine treffen we ook aan bij de GeForce 3 familie van nVidia.
ATI's Smartshader bevat DirectX 8.0 compatible vertex shader en is een aanvulling op de niet programmeerbare T&L engine. Het nadeel van een standaard T&L engine is namelijk dat er slechts een beperkt aantal functies ondersteund worden. Zoals gezegd is de vertex shader van de Radeon 8500 volledig programmeerbaar, dus programmeurs kunnen hun eigen effecten hier creëren. We kunnen de Vertex Shader daarom ook het beste zien als een ‘black box’: er komt een hoekpunt met alle bijbehorende informatie binnen, er worden de nodige berekeningen uitgevoerd en er rolt weer een hoekpunt met nieuwe informatie uit. Wat er binnenin gebeurt is puur de keuze aan de programmeur. Wel zijn er een aantal vereisten: zo is de Vertex Shader een echte 1-op-1 relatie: voor ieder hoekpunt dat erin gaat, komt er ook weer een hoekpunt uit. Er kunnen dus geen hoekpunten verdwijnen of hoekpunten bijgemaakt worden. Wel kan de programmeur er indien gewenst voor kiezen om een hoekpunt geheel ongewijzigd door te sturen.
Onderstaande afbeelding laat dit zien in een voorbeeld:
We zien de Vertex Shader hier duidelijk als ‘black box’: eerst wordt een speciaal effect ‘A’ in de Vertex Shader geladen. Daarna worden een aantal hoekpunten volgens dit effect verwerkt. Daarna wordt een nieuw effect (‘B’) geladen, waarmee weer andere hoekpunten verwerkt worden.
Voordat we een aantal voorbeelden van mogelijke effecten van de Vertex Shader gaan bekijken, is het nuttig na te gaan welke data nu precies de Vertex Shader in gaat en dus verwerkt kan worden. Dit is te zien in onderstaande figuur:
We zien hier wat een ‘vertex’ is: een hoekpunt van een driehoek waaruit 3D objecten zijn opgebouwd. Voor al deze effecten gaat de volgende data de Vertex Shader in: de coördinaten, de gewenste kleur, de gewenste textures binnen de driehoek en de coördinaten van de texture die op het hoekpunt moeten liggen (bij meerdere texturelagen komt deze informatie dus vaker voor), de mistindex, de lichtindex, en zo verder. Kijk voor meer informatie over texturing in ons achtergrondartikel ‘Hoe werkt een 3D grafische kaart? – Deel 2’.
Met al deze informatie kan in de Vertex Shader dus met effectprogrammaatjes ‘geknoeid’ worden. Zo kunnen de coördinaten van hoekpunten gewijzigd worden om realistische bewegingen te maken, kleuren en texture informatie kan gewijzigd worden om aparte belichtingseffecten te creëren, en zo verder. Nogmaals: doordat de Vertex Shader zelf programmeerbaar is, valt er een oneindig aantal effecten te bedenken. Aangezien de Vertex Shader geheel is geoptimaliseerd voor grafische berekeningen, kan dit soort bewerkingen op de 3D chip stukken sneller plaatsvinden dan op de CPU van de PC.