Les dernières nouveautés de NVIDIA GameWorks

À la GDC 2017, NVIDIA aura annoncé une nouvelle carte graphique pour joueurs, extrêmement puissante et avec un tarif raisonnable (la GTX 1080 Ti est plus puissante que la Titan X Pascal, mais à un prix presque réduit de moitié), mais également toute une série de nouveautés dans ses produits pour développeurs de jeux, rassemblés sous la bannière GameWorks. Il s’agit notamment d’effets et de simulations physiques prêtes à l’emploi.

De manière générale, bon nombre de produits GameWorks deviennent compatibles avec DirectX 12, proposent une implémentation Direct Compute en plus de CUDA (ce qui permet d’utiliser l’accélération graphique avec des cartes AMD, mais uniquement sous Windows), ainsi que l’ouverture du code source d’une série de bibliothèques supplémentaires.

DirectX 12 pour les développeurs

La grande différence entre les versions 11 et 12 de DirectX est le niveau d’abstraction : il faut moins de code pour un même effet avec DirectX 11, le pilote graphique s’occupe de l’optimisation d’une série de primitives de haut niveau (qui déchargent donc le programmeur d’une grande partie du travail). Au contraire, avec DirectX 12, le programmeur récupère une énorme flexibilité, mais doit effectuer le travail que le pilote n’effectue plus.

Les possibilités d’optimisation sont donc bien plus grandes, mais les risques également. NVIDIA travaille sur les deux fronts : proposer de nouveaux outils de développement et préparer toutes ses bibliothèques GameWorks pour DirectX 12. Côté outils, Nsight 5.3 apporte la compatibilité avec DirectX 12 et certains casques de réalité virtuelle. PIX, le débogueur visuel DirectX de Microsoft, peut également lire les compteurs de performance des cartes graphiques GeForce.

NVIDIA annonce aussi un nouvel outil : Aftermath, une bibliothèque à intégrer aux jeux afin de déboguer plus facilement les cas de crash. Le principe est d’introduire des marqueurs à intervalle régulier dans le code, où l’état du GPU est sauvegardé. Lors d’une analyse après crash, il devient possible de remonter la ligne du temps au niveau de ces marqueurs. Au niveau de la performance, Aftermath est extrêmement léger : il n’a pas d’impact mesurable sur un jeu. Il peut donc être inclus dans des jeux en production, sans être cantonné au niveau du test.

Nouveautés GameWorks

Une nouvelle version de FleX, le moteur de simulation de particules unifié, est apparue : la 1.1.0 peut exécuter ses calculs sur un processeur graphique par CUDA ou par Direct Compute ; cela ne veut pas dire que CUDA est abandonné, puisque FleX est maintenant compatible avec la version 8.0. Quelques fonctionnalités ont été ajoutées, l’API a été uniformisée avec d’autres bibliothèques physiques de NVIDIA.

Bien évidemment, FleX est maintenant compatible avec DirectX 12. En particulier, la bibliothèque peut tirer parti des fils d’exécution asynchrones pour lancer ses calculs quand le GPU est moins utilisé par le rendu graphique.

Flow est une nouvelle bibliothèque pour le rendu et la simulation de volumes, principalement de la fumée, du feu, des fluides enflammés. Elle remplace et généralise Turbulence et FlameWorks.

HairWorks, pour la simulation de poils et de cheveux, apporte principalement la possibilité d’utiliser la bibliothèque avec DirectX 12 (la version 1.3 est d’ores et déjà disponible sur GitHub, mais pas encore ailleurs).

Le module de destruction, autrefois connu sous le nom de APEX Destruction, a été complètement réécrit pour pleinement profiter des cartes graphiques modernes, tout en laissant la plus grande flexibilité aux développeurs. Blast se focalise sur l’implémentation de la destruction des objets, pas de la simulation physique en général ou de l’affichage : ces points doivent être gérés par l’application (évidemment, un module d’extension intègre Blast dans le moteur physique maison, PhysX). Côté simulation, les contraintes sont simulées de manière bien plus détaillée qu’à l’époque APEX Destruction, ce qui permet de créer les fissures aux endroits les plus faibles. (Plus de détails sur le site officiel.)

De manière similaire, APEX Clothing laisse la place à NvCloth. La bibliothèque semble avoir été réécrite pour plus de flexibilité, comme Blast, avec une compatibilité DirectX 11 et 12, les solveurs pouvant fonctionner indifféremment sur CPU ou sur GPU.

Libération du code source

La libération du code source de GameWorks est une opération de longue haleine, débutée en 2015. NVIDIA continue dans la lignée, avec plus de code disponible. Cependant, les conditions ne semblent pas changer : pas de licence libre, enregistrement obligatoire mais gratuit.

Sources et images : communiqué de presse de NVIDIA, NVIDIA talks DX12, including GameWorks support, GDC 2017: NVIDIA Gameworks goes DX12 and more !.

Première version publique de PhysX 3.4

PhysX est le moteur physique de NVIDIA, l’un des plus importants sur le marché. À l’origine, le moteur vient d’AGEIA, il portait alors le nom de NovodeX ; la spécificité de la société était de fournir une carte d’extension au format PCI ou PCI-Express, dont le but était d’accélérer les calculs physiques. Depuis lors, NVIDIA a repris le cheval de bataille de l’accélération matérielle, mais avec des cartes graphiques, nettement plus courantes.

Pour la branche 3.x, NVIDIA prévoyait initialement une nouvelle version tous les six mois. Le rythme a été tenu entre les quatre premières versions… puis a été complètement abandonné pour la 3.4 : PhysX 3.3 est sorti fin 2013, il y a trois ans. Sur cette durée, les développeurs du moteur ont laissé paraître quelques indices, notamment au niveau des optimisations, avec récemment une intégration à l’Unreal Engine 4.13. Ils ont aussi été actifs sur d’autres technologies orientées physiques, comme FleX (simulateur de particules unifié), Cataclysm (simulation de liquides), HairWorks (simulateur de cheveux et poils), etc.

La version 3.4 apporte une grande nouveauté au niveau de l’accélération matérielle : la simulation des corps rigides sur GPU (GRB). À part les articulations, toutes les fonctionnalités des corps rigides sont implémentées sur GPU : la simulation, les requêtes sur l’état des corps, l’interaction avec des tissus et des particules, avec la même aisance et la même API que sur CPU. Cette implémentation utilise CUDA (elle n’est accessible que sur des GPU NVIDIA) et requiert un GPU raisonnablement récent (de génération Kepler, c’est-à-dire au moins la série 600) ; sinon, l’implémentation sur CPU est la seule disponible (et elle est nettement plus rapide que celle de PhysX 3.3).

Dans les nouveautés majeures, de nouvelles fonctions ont été ajoutées pour accéder aux détails de la génération des contraintes de contact ; la détection continue de collisions fait son apparition. NVIDIA APEX est maintenant complètement découplé de PhysX : il n’est plus nécessaire d’avoir la moindre parcelle de code PhysX pour utiliser un module APEX (le code commun a été factorisé et se situe en dehors de PhysX).

Au niveau des plateformes, cette version fait le ménage. Ainsi, parmi les consoles, la PS 3, la PS Vita, la XBox 360 et la Wii U ne sont plus gérées, tout comme Windows RT et Android x86. L’accélération GPU nécessite au moins une carte NVIDIA GeForce série 400 et elle n’est plus disponible sur les systèmes d’exploitation plus anciens (Linux 32 bits, Windows XP 64 bits, Windows Vista). Pour le développement, Visual Studio 2010 cède sa place à la 2015 (les versions 2012 et 2013 sont toujours compatibles).

Cette version n’est toujours pas finale : cette étape est attendue pour février. En attendant, le code source est déjà disponible pour les personnes inscrites.

Source : Pre-release version of PhysX SDK 3.4 is now available on GitHub.

Voir aussi : les notes de version.

Un nouveau moteur de simulation de liquides pour Unreal Engine 4 : NVIDIA Cataclysm

L’annonce n’est pas encore officielle, mais le code source est déjà disponible et les vidéos en ligne : NVIDIA propose un nouveau solveur physique généraliste pour la simulation de liquides dans Unreal Engine (en sus de Flex).

Unreal Engine 4 est un moteur de jeu bien implanté dans le domaine, notamment chez les professionnels, avec un rendu très léché, même si les premiers développements ont eu lieu en 2005 et les premières démos publiques en 2012. De son côté, NVIDIA a une très bonne expérience dans le développement de simulations physiques, notamment avec son moteur physique PhysX ou la suite GameWorks.

Dernièrement, le code source d’une nouvelle démo est apparu sur les dépôts de NVIDIA, intégrant le solveur FLIP dans Unreal Engine 4.12.5. Les calculs s’effectuent sur le processeur graphique et leurs résultats s’intègrent dans la gestion des particules d’Unreal Engine. En temps réel, FLIP peut simuler jusque deux millions de particules.

Le code de simulation utilise une approche hybride (d’ailleurs, FLIP signifie fluid implicit particle) : l’information générée par la simulation est stockée au niveau de particules (comme Flex), tandis que les calculs sont réalisés selon une approche plus classique à base de grille.

Télécharger le code source de la démo. (enregistrement du compte GitHub nécessaire auprès d’Epic).
Source, image et vidéo : NVIDIA presents Cataclysm liquid solver for Unreal Engine 4.

Simulation en temps réel de grandes déformations élastoplastiques

La simulation des objets déformables est un problème difficile à résoudre, plus encore quand il l’est en temps réel, par exemple dans un jeu vidéo. Il s’agit d’animer des objets (un ballon, par exemple) qui se déforment quand ils sont soumis à une force — au contraire des objets indéformables, comme un mur, sur lequel on peut s’appuyer sans qu’il se plie de manière perceptible. Dans le cas où ces déformations sont relativement limitées, la situation est gérable de manière relativement efficace — nettement moins pour des déformations importantes, où les résultats ne sont pas visuellement plausibles. Cela limite actuellement la créativité des développeurs, notamment de jeux vidéo, lorsqu’ils veulent intégrer des matériaux comme de la mousse ou de la pâte — ô combien utiles.

On distingue deux catégories de déformations : d’abord élastiques, le matériau se déforme puis revient à sa position d’origine (comme un élastique ou un ressort) ; puis plastiques, il ne revient pas à sa forme initiale (comme une latte en plastique que l’on plie). La simulation concerne surtout les matériaux qui passent d’un comportement à l’autre : ils s’appellent élastoplastiques. La simulation, actuellement, peut se faire pour des déformations élastiques importantes, mais pas dans le régime plastique.

C’est là qu’intervient une équipe de chercheurs (travaillant chez NVIDIA pour leur moteur PhysX), en poursuivant leurs travaux sur la dynamique par positions (PBD), déjà appliquée avec grand succès sur des fluides. Les problèmes de déformation élastoplastique sont souvent résolus par correspondance des formes, un algorithme dont les racines sont très géométriques : à partir d’une position initiale et de points objectifs qui minimisent l’énergie, la méthode déplace, à chaque pas de temps, les points en direction des objectifs.

Les apports de l’équipe font le lien entre cette technique et leur cadre de dynamique par position. Dans cette dernière, tous les objets sont représentés comme une série de points liés par des contraintes. Par exemple, un objet solide comme une brique pourra être représenté par une série de points, avec des distances imposées entre chaque paire de points de la brique : elle restera solide et ne se déformera pas. Ici, les solides déformables sont également représentés par un nuage de points. Cependant, les contraintes ne porteront pas sur des distances à conserver, mais une forme plus légère qui garantit une certaine cohésion de la forme. Les particules sont alors filtrées et redistribuées pour continuer la simulation.

De par le formalisme employé (dynamique par positions), cette technique permet des interactions faciles avec d’autres éléments simulés, comme des corps rigides, des fluides, des tissus. Cependant, l’approche n’a pas forcément un sens physique : elle ne cherche pas à conserver la masse totale des objets déformés, mais seulement le volume visible par l’utilisateur — ce qui est une approximation raisonnable pour bon nombre de cas.

Sources : Real-time Simulation of Large Elasto-Plastic Deformation with Shape Matching, Meshless Deformations Based on Shape Matching.
Merci à Claude Leloup pour ses corrections.

NVIDIA GameWorks : du code source libéré, de nouveaux modules

Comme NVIDIA l’avait annoncé il y a peu, de grandes nouvelles traversent son programme GameWorks, avec de l’ouverture de code source sous licence libre et la mise à disposition de nouveaux modules. Cette boîte à outils est composée d’une série d’effets utilisables très facilement par les développeurs dans leurs jeux.

De nouvelles technologies

Trois nouvelles bibliothèques font maintenant partie du programme GameWorks, après avoir été testées dans des jeux déjà en vente, principalement pour l’éclairage et la gestion des ombres (toutes sont d’ores et déjà disponibles au téléchargement) :

  • NVIDIA Volumetric Lighting simule le trajet de la lumière et sa dispersion dans l’atmosphère et l’air, un effet utilisé dans Fallout 4, plus particulièrement dans les rayons crépusculaires ;
  • NVIDIA Hybrid Frustum Traced Shadows (HFTS) traite plus particulièrement les ombres et assure une transition plus douce entre les ombres bien droites à proximité de l’objet qui bloque la lumière et les ombres bien plus douces au loin, un effet utilisé dans Tom Clancy’s The Division ;
  • NVIDIA Voxel Accelerated Ambient Occlusion (VXAO) gère l’éclairage au niveau d’une scène avec une occlusion ambiante en temps réel : la différence par rapport aux techniques plus traditionnelles est l’utilisation de toute la géométrie de la scène, pas seulement la zone visible par la caméra ; cet effet a été utilisé dans Rise of the Tomb Raider.


NVIDIA Volumetric Lighting pour le rendu d’un rayon crépusculaire dans Fallout 4


NVIDIA Hybrid Frustum Traced Shadows pour le rendu des ombres dans The Division


NVIDIA Voxel Accelerated Ambient Occlusion pour l’éclairage global dans Rise of the Tomb Raider

De nouveaux solveurs physiques

À un autre niveau, dans la simulation physique pure, de nouvelles extensions ont été annoncées (des préversions privées sont actuellement disponibles) : l’une pour les corps rigies, NVIDIA PhysX GRB (GPU rigid body) ; l’autre pour les fluides combustibles, NVIDIA Flow.

NVIDIA PhysX GRB simule des corps rigides sur des processeurs graphiques, mais peut aussi exploiter le processeur principal en simultané (sans aucun écart en fonctionnalité selon la combinaison de processeurs choisie) : par rapport au code traditionnel, les calculs peuvent être accélérés d’un facteur six pour des simulations relativement lourdes ; une préversion privée est actuellement disponible, une version plus avancée devrait être rendue disponible dans les semaines à venir.

L’accélération sur le GPU concerne toutes les étapes du solveur, répliquées par rapport à la version CPU : les contraintes, les contacts, les phases de recherche. Cependant, au niveau de l’implémentation, la version GPU a été optimisée à certains points, comme la gestion d’îlots d’objets, pour gérer des scènes encore plus grandes. L’API est très similaire à celle de PhysX, ce qui facilitera l’utilisation de ce nouveau solveur ; cependant, tout le code GPU utilise NVIDIA CUDA, ce qui empêche son utilisation sur du matériel de fabricants concurrents mais devrait être compatible Linux et OS X.

NVIDIA Flow simule l’écoulement de fluides combustibles, ce qui modélise notamment le feu et la fumée ; la différence par rapport aux techniques précédentes est que ce solveur n’est pas limité à un volume prédéfini de simulation, puisqu’il adapte la grille de calcul aux nouveaux besoins. Contrairement à NVIDIA PhysX GRB, cette bibliothèque n’a pas de parti pris au niveau du matériel : elle utilise directement DirectX 11 et 12 et fonctionne donc sur du matériel AMD (mais pas sur des systèmes d’exploitation autres que Windows).

Toujours au niveau physique, la première version finale de FleX est maintenant disponible pour le grand public, un solveur GPU généraliste que NVIDIA a commencé à montrer en 2013, mais aussi intégré à Fallout 4 pour la gestion des débris.

Du code libéré

Il y a un an, NVIDIA montrait les premiers signes d’ouverture du programme GameWorks en mettant gratuitement à disposition les sources de PhysX, son moteur physique, à l’exception des parties GPU — mais pas sous une licence libre ; de plus, l’accès au dépôt GitHub est soumis à un enregistrement.

Cette semaine, d’autres composants ont été libérés de la sorte : NVIDIA Volumetric Lighting, récemment annoncé et détaillé plus haut ; NVIDIA HairWorks, pour la simulation et le rendu de cheveux et poils ; ainsi que NVIDIA HBAO+, un effet similaire au VXAO utilisé dans Rise of the Tomb Raider.

Ce qui est plus étonnant, cependant, c’est qu’un composant complet a été libéré : FaceWorks, pour le rendu de visages. La licence indique que tout développeur peut créer un travail dérivé et le redistribuer librement, tant qu’il indique qu’il exploite du code source venant de NVIDIA — ce qui ressemble très étrangement à du logiciel libre. Les les modèles 3D ne sont pas concernés par cette licence.

Sources : NVIDIA Advances Real-Time Game Rendering and Simulation With Launch of NVIDIA GameWorks SDK 3.1, GDC 2016: PhysX GPU Rigid Body and NVIDIA Flow (y compris vidéo de NVIDIA PhysX GRB et image de NVIDIA Flow), Fallout 4 Graphics, Performance & Tweaking Guide (image de Fallout 4), Tom Clancy’s The Division Graphics & Performance Guide (image de The Division), Rise of the Tomb Raider Graphics & Performance Guide (image de Rise of the Tomb Raider)

NVIDIA GameWorks, des annonces à venir en 2016, notamment DirectX 12

L’objectif du programme GameWorks de NVIDIA est de fournir une série d’effets graphiques facilement intégrables à des jeux, mais aussi divers outils pour faciliter leur développement : par exemple, des effets de débris utilisés dans Fallout 4, une simulation de cheveux et poils très utilisée, des optimisations de rendu pour la réalité virtuelle intégrées dans Unreal Engine 4. Le moteur physique PhysX fait également partie du programme GameWorks, largement plébiscité : actuellement, pas moins de cent cinquante mille personnes sont inscrites à ce programme, téléchargeant principalement Nsight, Androidworks, PhysX, FleX et HairWorks. Le contenu de GameWorks n’est pas réservé aux développeurs professionnels, les bibliothèques sont également accessibles aux particuliers qui développent des jeux ou des animations dans leur temps libre (comme celle ci-dessous).

NVIDIA GameWorks : depuis les premiers effets

L’affaire GameWorks a commencé sous ce nom en 2013 pour officialiser une équipe qui travaillait depuis le début des années 2000 directement avec les développeurs de jeux : elle cherchait à améliorer leur rendu et optimiser leur performance, pour développer le plein potentiel des processeurs graphiques. Leurs communications passaient par des articles publiés lors du SIGGRAPH (une grande conférence pour l’animation par ordinateur), des codes d’exemple ou encore des démonstration purement technologiques.

Ces efforts ont payé, mais n’étaient pas suffisants : une leçon de cette longue période informelle est qu’une technologie n’est jamais prête avant d’avoir été intégrée complètement dans un jeu. Tel est l’objectif de GameWorks : rassembler des techniques éprouvées dans au moins un jeu et en faciliter l’adoption. Cela signifie aussi s’assurer que l’effet visuel est disponible au plus grand nombre, pas seulement à ceux qui disposent de matériel de dernière génération.

Une attention pour les développeurs de jeux

Un autre problème, en passant d’exemples de code à des bibliothèques complètes, est le besoin d’acceptation de la part des développeurs : les bibliothèques GameWorks sont prévues pour être simples à intégrer (et le sont déjà pour une série de moteurs de jeux)… mais ne viennent pas directement avec le code source. Ce mode de fonctionnement convient très bien à certains développeurs, alors que d’autres ont besoin de mettre les mains dans le cambouis : au fil du temps, ces bibliothèques ont été adaptées pour laisser une plus grande flexibilité au développeur et en distribuant les sources à la demande.

Pour le moment, les composants de GameWorks sont principalement disponibles pour Windows, plus spécifiquement DirectX 11. En effet, cette version est la plus utilisée pour les jeux actuels et ne limite pas le développement des effets (plus particulièrement ceux qui exploitent la physique). Cependant, DirectX 12 gagne du terrain du côté des jeux et les bibliothèques GameWorks verront des versions compatibles avec cette nouvelle version, selon la demande des développeurs de jeux.

Bien que rien ne soit actuellement prêt pour annonce, selon les gens de NVIDIA, pas mal d’annonces auront lieu en 2016, entre GameWorks et DirectX 12. Elles suivront une année 2015 relativement chargée, avec l’inclusion de technologies dans des jeux comme Fallout 4 ou The Witcher 3, mais aussi la première inclusion de WaveWorks pour la simulation d’océans dans Just Cause 3 et War Thunder. Sans oublier les controverses.

Source : Nvidia Talks GameWorks And DirectX 12 Plans For 2016.

NVIDIA FleX arrive dans Fallout 4 avec des effets de débris

Dans la préversion du prochain patch à venir de Fallout 4, un nouvel effet physique a été ajouté : les débris générés par la destruction d’objets par armes à feu. Au lieu de simplement présenter des trous dans le sol ou les façades, des morceaux de béton ou de bois se détacheront et voleront en l’air.

En y regardant de plus près, on peut remarquer que cet effet n’est pas, pour le moment, extrêmement réaliste, avec un nombre excessif de particules générées (faire exploser une chaise pourrait donner plus de débris que la chaise elle-même, par exemple). De plus, seules certaines parties du monde sont concernées par cet effet. Ces limitations sont principalement dues au fait que l’effet a été ajouté après coup et non lors du développement du jeu.

Du côté technique, l’effet utilise le nouveau solveur FleX de NVIDIA (dont la version 0.9.0 est disponible gratuitement), qui exploite les possibilités des processeurs graphiques pour effectuer les calculs sous-jacents ; cela signifie que cet effet ne sera disponible, pour le moment, que sur les GPU NVIDIA (il est prévu depuis les débuts de FleX de réaliser une version exploitant d’autres technologies, mais ces efforts n’ont pas encore vu le jour).

Cependant, ces résultats (préliminaires) sont d’ores et déjà encourageants, par exemple en comparaison de l’effet similaire implémenté dans Borderlands 2, qui utilise le solveur de PhysX (le moteur de physique généraliste de NVIDIA). Les calculs sont plus efficaces en temps, car les débris sont simulés comme de simples points matériels, sans considérer qu’il s’agit de véritables objets en trois dimensions. L’ensemble de leurs mouvements est donc simplifié : le moteur physique ne peut pas prévoir de rotation, un certain mouvement est donc préprogrammé ; les collisions avec les objets statiques sont très simplifiées… et complètement inexistantes avec les autres débris.

Au contraire, dans l’implémentation de Fallout 4, les débris ont une véritable extension spatiale pour la simulation physique : ils ont une forme tridimensionnelle et peuvent interagir entre eux. La différence est plus notable pour un empilement de débris : là où Borderlands 2 formait un simple tapis de débris, sans que l’un chevauche l’autre, Fallout 4 montre un empilement. Les calculs sont effectués dans un formalisme de corps rigides sur GPU et Fallout 4 en est l’une des premières applications ; du côté technique, le point noir actuel est le manque d’ombres.

Source et images : Fallout 4 beta patch adds Nvidia FLEX based particle debris effects.