• DirectX: een woordje uitleg.

    28 January 2013 00:22 door
    DirectX is een platform, ontwikkeld door Microsoft, waarin directieven ofte richtlijnen vervat zitten die bepalen wat op grafisch vlak mogelijk is.

    Met "op grafisch vlak" bedoel ik dan de weergavemogelijkheden waaraan vooral spelontwikkelaars en videokaartenmakers zich moeten houden om dit of dat PC videogame op een deftige manier te kunnen weergeven.

    Natuurlijk worden deze DirectX regelmatig bijgewerkt, vermits zowel spelontwikkelaars als kaartenmakers, dankzij nieuwe technieken en nano-technologie, steeds meer vooruitgang boeken op het gebied van grafische mogelijkheden.

    Tussen haakjes: veel mensen vragen zich af waarom een bepaalde videokaart met gemak HD video kan weergeven, maar bij het minste stevige spel resoluut door de mand gaat.

    De hoofdreden hiervoor is dat een video bestand slechts één laag kent, namelijk de film zelf. Bij een video game telt men verschillende lagen die elk afzonderlijk worden aangestuurd/gerenderd.

    Nemen we als voorbeeld een vergezichts-scene met zon en blauwe lucht waarin vogels voorbij vliegen en wolken langs drijven, bergen, een deel van een woud met een rivier, een weg waarop het door jou bestuurde figuurtje zich voortbeweegt en achter gindse boom geteisem dat je naar het leven staat.

    Dan hebben we één laag voor de lucht, één laag voor de zon (wanneer er een dag/nacht cyclus is), één laag voor de voorbijvliegende vogels, één laag voor de wolken, één laag voor het bos (soms meerdere lagen wanneer verschillende bomen in diverse richtingen bewegen), één laag voor de bergen, één laag voor het vliedende water in de rivier, één laag voor de weg, één laag voor het figuurtje dat je bestuurt en één laag per figuurtje achter gindse boom... als we dan een optelsommetje maken dan komen we ongeveer uit op TIEN lagen boveneen die allemaal tesamen synchroon moeten worden weergegeven én waar jij als speler dan nog veranderingen kan in aanbrengen door bijvoorbeeld met pijl en boog een vogel uit de lucht te schieten of het aanvallende geteisem een halt toe te roepen.

    Je kan dus best begrijpen dat een videokaart heel wat meer rekenkracht nodig heeft om die tien lagen in een spel goed tot zijn recht te laten komen, tegenover de rekenkracht die nodig is om de één-lagige film weer te geven. Maar dit terzijde. Terug naar DirectX.

    Voor Windows XP is het hoogst haalbare DirectX9c. Vanaf Windows Vista is men overgestapt op DirectX 10. Nu, die DirectX10, daar hangt een serieus verhaal aan vast. Microsoft had namelijk als grootste verandering in de DirectX het zogenaamde "Hardware Tessellation" voorzien. Hardware Tessellation is een methode die er voor zorgt dat er meer pixels gebruikt worden in een raster om een lijn weer te geven. Voorbeeld: wanneer in DirectX9 een halve cirkel werd weergegeven, dan werden er bijvoorbeeld 20 pixels gebruikt om de curve voor te stellen. Die pixels werden dan met elkaar verbonden door een lijn, om zo het optisch uitzicht van een halve cirkel te bekomen. Het resultaat was dat de meeste cirkels -wielen van autos, om maar iets te zeggen- er redelijk hoekig uitzagen (men mag niet vergeten dat een pixel een vierkantje is).

    Harware Tessellation zorgt er dus voor dat er meer pixels worden gebruikt voor die halve cirkel, waardoor de lijntjes tussen de pixels korter worden, met als resultaat dat de curve minder hoekig wordt.

    Het enige probleem was dat NVidia -door hun geklooi met het Scarabee project (da's een verhaal voor een andere keer)- een serieuze achterstand hadden opgelopen in de ontwikkeling van hun videokaarten en bijgevolg niet klaar waren om een kaart te bouwen die deze DirectX10 -én Harware Tessellation- aankon (da's ook de reden waarom er geen GTX3xx familie is; NVidia wipte van de GTX2xx naar de GTX4xx familie).

    ATI van hun kant speelden wel kort op de bal en zaten perfect op koers om met hun Radeon 4xxx familie DirectX10 op te peuzelen.

    Echter, bij NVidia waren ze zodanig van hun melk dat ze op blote knieën by Microsoft zijn gaan vragen of die DirectX10 niet kon worden uitgesteld, of toch tenminste aangepast, zodanig dat NVidia de kans én tijd zou krijgen om met een kaart op de proppen te komen die de concurrentie aankon.

    Voor één of andere duistere reden is Microsoft gezwicht voor NVidia en werd de Hardware Tessellation uit DirectX10 gehaald. Bij ATI zaten ze er niet echt mee: de paar honderd miljoen transistoren op de Radeon 4870 processor (het toenmalige vlaggeschip) die voorzien waren om die Hardware Tessellation te tackelen werden gewoon op non-actief gezet. Dat is trouwens ook de reden waarom de volgende familie -de 5xxx, en meer bepaald de 5870- zo goed presteerde en de concurrentie compleet van de tafel veegde: ATI had al een chip die Hardware Tessellation aankon; het enige wat ze moesten doen was die paar honderd miljoen uitgeschakelde transistoren weer activeren. Tegelijkertijd werd er bij NVidia paniekvoetbal gespeeld omdat zij van nul-af-aan moesten beginnen. Eén en ander werd echter rechtgezet met de GTX4xx familie, die zich beter van zijn taak kweet dan verwacht en zelfs zo goed tot beter presteerde dan de ATI 5870, eerst en vooral omdat ze er bij ATI een beetje té gerust in waren en weinig tot geen aanpassingen hadden doorgevoerd voor de 5870. Tenslotte werd Hardware Tessellation ingebed in DirectX11, eerst alleen werkende met Windows 7, later via een update ook te gebruiken met Windows Vista.

    Dus, even recapituleren: DirectX zijn er om iedereen het leven te vergemakkelijken. Zowel de spelontwikkelaar als de kaartenbouwers en ten slotte de eindgebruiker.

    Probleem is echter dat de meeste spellenmakers die DirectX een tikkeltje aanpassen voor hun spel -alles binnen de regels natuurlijk. Daarom is het ten zéérste aan te raden om, bij de installatie van een nieuw (of oud) spel ALTIJD de bijgeleverde DirectX te installeren -zelfs al heb je die bewuste DirectX aan boord. Het vermijdt complicaties achteraf, zoals het uitvallen -of zelfs niet willen opstarten- van het pas geïnstalleerde spel.

    Uitleg is een tikkeltje langer geworden dan ik geanticipeerd had. Hopelijk is iedereen nog wakker. Hallo...?