Voordat we gaan smijten met termen als ‘draw calls’ en ‘multi-gpu’ is het handig om eerst uit te leggen waar DirectX überhaupt goed voor is. En om dat te verklaren kunnen we het beste beginnen bij het grote pluspunt van consoles. Spelcomputers als de Xbox One en PlayStation 4 zijn uniform; elke console bevat (vrijwel) precies dezelfde onderdelen. Dat is heerlijk voor ontwikkelaars, want zij weten precies waar ze aan toe zijn bij het ontwerpen van hun game. Omdat exact bekend is wat een PlayStation 4 kan, kunnen programmeurs alles uit de beschikbare hardware halen en dicht ‘op het metaal’ werken.
Daar tegenover staat de pc, met zijn ellendige eigenschap om in honderden, zo niet duizenden, verschillende soorten en maten te komen. Met zo veel mogelijke combinaties van processors en gpu’s – ‘graphics processing unit’ is de technische term voor ‘videokaart’ – is het onmogelijk om overal rekening mee te houden bij de ontwikkeling van een game. Toen eind jaren negentig de eerste 3d-versnellers verschenen, was het niet ongebruikelijk dat ontwikkelaars een aparte versie voor populaire videokaarten als de ATI Rage 3D en de S3 ViRGE moesten schrijven. Zou het niet heerlijk zijn als er een soort laag tussen de game en de hardware zit, die de commando’s om een bepaalde scène te tekenen zodanig vertaalt, dat alle videokaarten het begrijpen?
Enter DirectX
Dat is nou precies wat een api doet. Een api – kort voor ‘application programming interface’ – is een soort basisstuurprogramma dat allerlei soorten hardware met elkaar laat communiceren. Als een game het geluid van een geweerschot wil laten horen, hoeft het dankzij een api niet precies te weten welke geluidschip op het moederbord zit. De game stuurt zijn verzoek uit en de api geeft het door. Er bestaan meerdere api’s – OpenGL, Glide voor de 3dfx-kaarten van weleer, het recent doodverklaarde Mantle en Vulkan dat ervoor in de plaats komt – maar veruit de bekendste is Microsofts DirectX. DirectX bestaat uit meerdere onderdelen die elk een categorie aan hardware helpen aansturen, zoals DirectInput, DirectSound en de belangrijkste voor dit artikel: Direct3D.
Ontwikkelaars krijgen meer vrijheid om ‘dichterbij’ de hardware te programmeren
Een api helpt dus bij de ondersteuning van een breed scala van hardwarecombinaties, maar die abstractie heeft een groot nadeel. De vertaalslag tussen instructies van bijvoorbeeld de processor naar de gpu kost tijd. Het gaat om slechts milliseconden per frame, maar als je tientallen beelden per seconde nodig hebt voor een geloofwaardige ervaring is elke onnodige milliseconde er een te veel. Bezitters van AMD-videokaarten zullen dit hebben gemerkt de afgelopen paar jaar. Onder Direct3D 11 duurt het namelijk opvallend lang voordat een AMD-gpu een ‘draw call’ – het verzoek van de processor om een bepaald object op het scherm te renderen – heeft verwerkt. Zeker in combinatie met langzamere processors, zoals een Core i3, zakt het aantal draw calls per seconde in als een mislukte pudding.
Afgeslankt
DirectX 12 komt met belangrijke verbeteringen ten opzichte van 11. Allereerst wordt de laag tussen hardware en game een stuk slanker. Ontwikkelaars krijgen meer vrijheid om ‘dichterbij’ de hardware te programmeren, zodat er minder vertaalslagen nodig zijn voor een snelle communicatie. Daarnaast is de werkdruk veel beter geoptimaliseerd voor meerdere processorkernen. Voorlopige benchmarks laten alvast zien dat DX12 de taken een stuk netter verdeelt over de beschikbare kernen, zodat je dure quadcore veel beter tot zijn recht komt.
Minstens zo handig is dat de processor de taken niet meer een voor een naar de videokaart stuurt, maar meerdere verzoeken tegelijkertijd en desnoods asynchroon bij de gpu neerlegt. Deze optimalisaties zorgen ervoor dat een AMD R9 290X die met DirectX 11 nauwelijks 600.000 draw calls kan bolwerken, met DirectX 12 ruim acht miljoen draw calls verwerkt. Bij Nvidia-kaarten is de toename iets minder spectaculair, maar dat heeft er vooral mee te maken dat deze gpu’s onder DX11 minder problemen ondervinden.
Mooier, sneller, beter
Betekent dit nu ook dat we bijna tien keer zoveel frames per seconde gaan zien bij games? Helaas niet, want de draw call is slechts een klein onderdeel van het hele proces om een frame te bakken. Maar het wegnemen van deze bottleneck levert wel extra snelheid op en maakt scenario’s mogelijk waarvan we met DirectX 11 alleen maar konden dromen. De demonstratie van de Oxide Games’ Ashes of the Singularity bevat honderden tanks en vliegtuigen die stuk voor stuk projectielen op de vijand afvuren en elk projectiel is ook nog eens zijn eigen lichtbron. Met DirectX 11 zou de processor zich verslikken in het rekenwerk en proestend de framerate onder de tien laten zakken, maar met DirectX 12 is het presenteren van een dergelijke veldslag binnen handbereik.
De optimalisaties voor processoren zijn veruit het belangrijkste pluspunt van DirectX 12, maar de nieuwste versie van Microsofts api bevat meer cadeautjes. De abstractielaag tussen software en hardware wordt niet alleen slanker, maar ook slimmer. Dit blijkt uit de mogelijkheid om straks de rekenkracht van je videokaart te combineren met de geïntegreerde grafische chip van je processor. Deze Multiadapter-feature levert gratis een paar extra frames per seconde op, door gebruik te maken van iets dat vaak toch al in je pc zit. Eerder dit jaar ging zelfs het gerucht rond dat Multiadapter ook gpu’s van Nvidia en AMD samen laat samenwerken, maar een officiële bevestiging blijft uit.
De ondersteuning voor meerdere gpu’s moet sowieso een stuk beter worden met de komst van DirectX 12. Nu is het nog zo dat het geheugen van meerdere videokaarten niet schaalt: twee gpu’s met 4GB aan videogeheugen hebben samen nog steeds 4GB, omdat de inhoud van beide geheugensets overeen moet komen. Met DX12 wordt 1 + 1 eindelijk 2 en liggen hoge resoluties en het comfortabel weergeven van virtual reality binnen handbereik. Al deze mooie verbeteringen maken de weg vrij voor meer grafisch geweld. Square Enix geeft ons een voorproefje met de indrukwekkende Witch Chapter 0 [cry]-demo, ter promotie van Final Fantasy 15. Dit is hoe 63 miljoen polygonen er uitzien.
Binnenkort in een pc of Xbox One bij jou in de buurt
DirectX 12 is alleen beschikbaar voor Windows 10, maar de lopende aanbieding voor bezitters van Windows 7 en 8 om gratis te upgraden maakt die beperking een stuk beter te behappen. Minder duidelijk is welke videokaarten de nieuwe api gaan ondersteunen. Nvidia stelt dat de GTX 900-serie de enige is die DX12 volledig ondersteunt, maar dat klopt niet helemaal. DirectX is naast een programmeerlaag ook een standaard. Technieken die helpen bij het renderen van beelden worden vastgelegd in zogenaamde Feature Levels. Als een videokaart officieel DirectX 11 ondersteunt, is het best mogelijk dat de chip meer kan dan wat de Feature Level voor DX11 voorschrijft. Om het nog ingewikkelder te maken voldoen sommige kaarten van de GTX 900-serie wel aan 12_1, maar niet 12_0.
Het belangrijkste om te weten is dat alle kaarten vanaf de Nvidia GeForce 400-serie en de AMD HD 7000-serie DirectX 12 in enige mate ondersteunen. Ook met oudere kaarten ga je dus een efficiënter gebruik van de processor zien, met een betere framerate tot gevolg. Qua Multiadapter en andere tweaks vallen ze waarschijnlijk buiten de boot. Ook de nieuwste videokaarten zullen niet direct al het moois van DirectX 12 kunnen gebruiken. De games moeten het namelijk zelf ook ondersteunen. Deus Ex: Mankind Divided en Ashes of the Singularity worden de eerste games die de speciale features van DirectX 12 gebruiken.
Tot slot een lichtpuntje voor Xbox One-bezitters. De console die regelmatig op grafisch vlak het onderspit moet delven tegen de PlayStation 4, wordt ook voorzien van DirectX 12. Als je nu uitzinnig van vreugde door de kamer stuitert in de veronderstelling dat alle Xbox One-games binnenkort op 1080p draaien, moeten we je teleurstellen. Een aantal optimalisaties van DX12 zijn al verwerkt in de aangepaste versie van DX11 waar de Xbox One mee werkt. Naar verwachting zal de console er iets op vooruit gaan – dankzij een asynchrone aansturing van de grafische rekenkernen en een efficiënter gebruik van de 32MB aan eSRAM – maar volgens lead engineer Balazs Torok van CD Projekt RED is het onwaarschijnlijk dat games een hogere resolutie gaan halen.
Het is nog moeilijk om te zeggen hoe groot de prestatiewinsten precies zullen zijn, omdat er buiten jubelende powerpoints nog weinig onafhankelijke vergelijkingen bestaan. Met DirectX 12 kun je er in ieder geval op rekenen dat games op een groot aantal systemen beter draaien. Dankzij de betere ondersteuning van meerdere processorkernen en een slimmere aanvoer van data naar de videokaart verwachten we vooral bij pc’s met langzamere processoren een merkbare sprong in prestaties. Ook in het topsegment gaan pc’s er op vooruit, door de verregaande optimalisaties bij twee of meer videokaarten. Als je een pc-gamer bent, is er dus een goede reden om 29 juli op de kalender te zetten.
Reacties op: Api’s kijken – Wat hebben gamers aan DirectX 12?
Leatherhide
serphilith
DonnyLegend
Leatherhide
Crazy Harry
XtraLinkUK
Ik neem altijd dat cgi filmpje als voorbeeld, omdat het nog steeds de meest overtuigende cinematics zijn imo. En vanaf dat moment gedroomd heb van graphics zoals die van The Witcher 3.
En nu ik dit zie, wat eigenlijk niet onmogelijk is op een character in een RPG zoals The Witcher 3, geloof ik dat we er eindelijk zijn. In-game filmpjes gaan al naadloos overin gameplay. Nu nog CGI kwaliteit, wat eindelijk werkelijkheid is geworden vind ik.
Helios
Alleen ook geleerd dat m'n pc wel weer eens aan vernieuwing toe is, met m'n AMD HD 6850
casualkiller
DirectX9 was de toekomst, directX 10 was de toekomst, directX 11 was de toekomst, DirectX12 is de toekomst. Natuurlijk is er vooruitgang maar vooral in videokaarten land en sales.
Zeker als je weet hoeveel DX9 titles er nog uitkomen (onlangs nog : Resident Evil Revelations 2 volgens mij op PC ) , en hoe weinig DX10/11 titles er zijn ( ja wel supported maar niet 'exclusief' )
DirectX is vooral een buzzwoord.