GDC: Hitman et le portage DirectX 12

Tags : DirectX 12; GDC; GDC 2016;
Publié le 15/03/2016 à 17:35 par
Imprimer

Lors de la première journée de GDC, la tradition veut qu'AMD et Nvidia s'associent pour organiser un ensemble de tutoriels à destination des développeurs. Cette année, comme vous pouvez vous en douter, ils portaient tous sur Direct3D 12 et quelques développeurs sont venus faire part de leur première expérience avec cette nouvelle API. C'est le cas d'IO Interactive qui nous a parlé d'Hitman, à travers Jonas Meyer, responsable du rendu du moteur Glacier.

 
 

Hitman et le moteur Glacier reposent sur un rendu de type Tile Deferred qui lui permet de prendre en charge un nombre très élevé de sources de lumière. Le principe consiste à subdiviser l'image en petits blocs, les light tiles, et à déterminer par quelles sources de lumière chacun d'entre eux est réellement affecté. Un tri qui évite le calcul prohibitif de chaque source de lumière pour chaque pixel.

IO Interactive a décidé de porter ce moteur sous Direct3D 12, mais pas d'en faire une réécriture complète. La base du moteur repose toujours sur Direct3D 11. L'objectif de ce portage était d'améliorer les performances d'une part du côté CPU et d'autre part du côté GPU à travers l'exploitation d'async compute (multi engine).

Mais les développeurs ont tout d'abord été particulièrement surpris par un autre point : le temps de travail requis pour mettre en place une gestion de la mémoire efficace pour éviter d'en gaspiller et pour assurer un code robuste. Avec les nouvelles API, ce n'est plus le pilote qui se charge automatiquement de tout cela et de nombreux problèmes peuvent se poser. Il est donc crucial de contrôler en permanence l'utilisation de la mémoire sans quoi c'est l'OS qui va prendre la main pour faire de la place sans ménagement, ce qui peut conduire à un plantage, notamment lorsque l'on passe d'une application à l'autre.

Les pilotes ont la possibilité de marquer certaines ressources comme prioritaires (par exemple les render targets), ce qui aide dans bien des cas, mais d'autres types de ressources peuvent être cruciales. Actuellement les développeurs n'ont aucun moyen de les marquer comme prioritaires et pour garantir la robustesse de leur code ils doivent donc s'assurer que l'utilisation globale de la mémoire reste dans les clous. Pouvoir spécifier manuellement quelles ressources sont prioritaires est une future évolution souhaitée par IO Interactive.

 
 

Une fois ces difficultés surmontées, les développeurs ont pu se concentrer sur l'aspect performances avec tout d'abord des gains significatifs au niveau du CPU. Du côté GPU, l'async compute a été implémenté de manière relativement basique avec la mise en parallèle du calcul du SSSAA (filtre d'antialiasing), du SSAO (occultation ambiante) et des light tiles. De quoi obtenir un gain de 5 à 10% sur les Radeon mais nul pour les GeForce. IO Interactive précise à ce sujet être en train de travailler avec Nvidia pour essayer d'améliorer cela.

Pour terminer, une comparaison des performances entre Direct3D 11 et 12 a été présentée pour deux GPU différents. Si IO Interactive ne précise pas de quel GPU il s'agit, il semble évident qu'il s'agit dans le premier cas d'un GPU Nvidia et dans le second cas d'un GPU AMD qui profite de gains bien plus importants.

 
 

Vous pourrez retrouver l'intégralité de la présentation d'IO Interactive ci-dessous :

 
 

Vos réactions

Top articles