Les sources de PhysX disponibles gratuitement

Peu après Unreal Engine 4, voici que son moteur physique, PhysX, développé par NVIDIA, se met à la même mode : son code source est gratuitement disponible. Bien évidemment, le projet ne devient pas libre pour autant : il est nécessaire de s’enregistrer sur le site de NVIDIA avant d’avoir accès aux sources.

Ce moteur physique est disponible pour les plateformes Windows, Linux, OS X et Android (en plus des consoles de jeux, mais elles sont exclues de cette ouverture) et est utilisé dans plus de cinq cents jeux. Il était déjà gratuit pour des utilisations, commerciales ou non.

L’ouverture concerne principalement le moteur physique, mais également le débogueur visuel (PVD) et quelques modules APEX : Clothing, Destructible et Emitter. Il s’agit de la version 3.3.3 (PhysX) et 1.3.3 (APEX), c’est-à-dire la prochaine version. Parmi les fonctionnalités disponibles, on compte les corps rigides, les collisions, la gestion des personnages, des particules et des véhicules, en plus des tissus et objets déformables, notamment.

Le dépôt GitHub n’est cependant pas celui de développement : il ne contient que huit commits depuis fin janvier. Le code CUDA, qui déporte une partie des calculs sur le GPU, est bien évidemment de la partie.

Sources : https://developer.nvidia.com/content/latest-physx-source-code-now-available-free-github, http://physxinfo.com/.

Sortie de PhysX 3.3.2 et d’APEX 1.3.2

De nouvelles versions de PhysX et APEX sont sorties (respectivement le moteur physique de NVIDIA, notamment utilisé dans l’Unreal Engine, et une série d’extensions adaptées aux artistes, utilisables indépendamment de PhysX). Outre les habituelles améliorations de performances et corrections de défauts, parmi les principales nouveautés côté PhysX, de nouvelles plateformes sont prises en charge : l’accélération GPU est désormais disponible pour Linux, tandis que le moteur fonctionnera sur les périphériques Android avec un processeur x86 (les processeurs ARM étant déjà gérés depuis la 3.3.0). Également, la documentation a été fortement restructurée et modifiée.

Le module APEX Destruction, qui gère la destruction d’objets, peut désormais employer la fracturation de Voronoï en temps réel (il fallait précédemment utiliser un modul de précalcul). Par contre, la simulation des corps rigides n’est plus possible sur le GPU (il semblerait que ce solveur avait des limitations et que ce mouvement est la première étape d’une migration vers FLEX, l’architecture unifiée de solveur GPU prévue pour PhysX 3.4).

Pour la simulation de tissus de APEX Clothing, le niveau de détail sera, dès la prochaine version, entièrement géré par l’utilisateur : le niveau de détail physique, qui utilisait un budget maximal pour tous les tissus afin d’adapter le niveau de détail de la simulation à l’impact sur l’image affichée, est désormais déprécié, le moteur de jeu sera chargé de ces détails.

Côté APEX Particles et Turbulence, la principale modification est que les GPU de génération antérieure à Fermi ne permettront plus l’accélération.

En plus de ces modifications, les ingénieurs de NVIDIA ont également travaillé sur la simulation de brins d’herbe avec NVIDIA Turf Effects, une technologie prévue pour la simulation de grandes étendues d’herbe avec des interactions physiques (avec des formes aussi simples que des cubes ou bien nettement plus complexes). Les brins peuvent être représentés avec trois triangles chacun, jusqu’à plusieurs centaines pour un plus haut niveau de détail, ce qui permet de gérer plusieurs millions de brins avec une haute fidélité (y compris pour l’éclairage et les ombres). L’intérêt pourrait être de visualiser, dans un jeu vidéo, les emplacements où une bataille a eu lieu. Ce module devrait être disponible début 2015 pour PC (DirectX 11).

Sources : PhysX SDK 3.3.2 arrives, adds GPU acceleration support on Linux, APEX SDK 1.3.2 is available, NVIDIA Turf Effects.

Mise à jour (3 novembre) : les extensions pour Autodesk Maya et 3ds Max sont également mises à jour, avec principalement des corrections de défauts. Téléchargement : GameWorks Download Center. Source : New PhysX plug-ins offer support for 3ds Max and Maya 2015.

NVIDIA HairWorks pour la simulation de poils

Précédemment, NVIDIA avait offert des détails techniques sur un algorithme de simulation de poils, follow the leader. Associé aux développements précédents de la firme, NVIDIA HairWorks fournit une technologie complète intégrée de simulation de poils. Elle est d’ores et déjà utilisée dans Call of Duty: Ghosts et Witcher 3 et entre en compétition avec TressFX, la technologie d’AMD, notamment utilisée dans Tomb Raider.

Ces deux implémentations partagent déjà un point commun : l’utilisation de DirectCompute, la technologie de GPGPU proposée par Microsoft dans le cadre de DirectX – une technologie indépendante du fabricant de cartes graphiques –, alors que précédemment tout PhysX utilisait NVIDIA CUDA. Ce choix a été justifié par le fait que la plus grande partie du temps est utilisée pour l’affichage des poils, pas pour le calcul : il était alors plus efficace de travailler au plus près de l’API graphique. Il ne s’agit donc pas d’un revirement complet pour NVIDIA (tous les prochains développements n’utiliseront pas forcément DirectCompute). Au niveau de la portabilité, les consoles actuelles devraient être supportées dans le futur.

Par rapport aux techniques précédemment montrées, NVIDIA HairWorks intègre les différents composants dans un solveur unique qui traite tant les humains que les animaux, sur des corps dynamiques. Il permet également de simuler de l’herbe. Parmi les fonctionnalités supportées, on peut compter la préservation des formes, l’évitement des étirements des poils, divers contrôles sur les forces dynamiques, l’inertie, les collisions (relativement simples pour le moment, des fonctionnalités plus avancées arriveront avec le temps, comme des détections plus robustes et contre des objets déformables) ou encore le support de plusieurs processeurs graphiques (aucune implémentation sur CPU n’est actuellement prévue). Un grand nombre de paramètres sont disponibles : raideur, l’ondulation, la variation de longueur, l’humidité (le moteur est capable de gérer des transitions de poils secs à humide et inversement).

Le rendu de poils requiert énormément de données : pour Call of Duty, il faut compter un demi million de poils simultanément. Les algorithmes de rendu utilisent donc énormément les fonctionnalités de pavage (tesseletion) de DirectX 11, ce qui permet de créer de manière dynamique un très grand nombre de poils sans utiliser trop de mémoire. Ensuite, une étape de posttraitement a lieu, notamment pour calculer les ombres (qui correspondent à la peau sous-jacente).

Côté artiste, une série d’outils est utilisée (courbes de guidage, notamment), en réutilisant des outils tiers (comme Shave and a Haircut pour Maya ou bien Hair and Fur pour 3DS Max).

Le produit devrait être disponible de manière publique « dans un futur très proche ».

Source : http://physxinfo.com/news/12197/introducing-nvidia-hairworks-fur-and-hair-simulation-solution/

Sortie d’APEX 1.3

APEX 1.3 vient de sortir et supporte PhysX SDK 3.3, récemment sorti.

Un des changements de cette version est plus architectural : tout le code de support des versions précédentes a été migré dans un nouveau module, APEX Legacy. Il suffira de le charger pour que les données des versions précédentes soient lisibles (au lieu de charger un module de support par module d’APEX, comme APEX Clothing Legacy ou APEX Destructible Legacy).

Les modules Destruction et Clothing supportent désormais les mandataires d’affichage (render proxies) : les données nécessaires à l’affichage sont désormais stockées dans un objet séparé, qui peut être détaché des acteurs. Ainsi, dans un contexte multifil, le moteur physique peut très bien avoir des acteurs déjà supprimés car plus nécessaires, alors que toutes les données ne sont pas encore affichées : en détachant cet objet de rendu, les données sont gardées.

Destruction

Du côté artiste, le module de destruction propose désormais des groupes comportementaux. Ainsi, toute une série de paramètres (seuil de dommage, propagation des dommages, densité, etc.) seront stockés au niveau d’un groupe, au lieu de chaque débris.

Interface des groupes comportementaux

Le paramètre de propagation des dommages (damage spread) est une triplet contenant un rayon minimum, un multiplicateur de rayon et un exposant de décroissance, qui remplace le paramètre de rayon de dommage. Quand un dommage est causé à une structure destructible, elle possède un certain rayon (qui peut être nul dans le cas d’un point) ; une fois multiplié et additionné au rayon minimum, cette valeur – appelée rayon maximum – indique la distance après laquelle la structure n’est plus impactée par le dommage ; tous les points entre ces deux rayons sont touchés de manière dégressive (selon une loi précisée par l’exposant de décroissance), tous les points dans le rayon minimum reçoivent un dommage maximal.

Le système de fracturation en temps réel est désormais disponible, après une série d’annonces (comme une démo de couplage avec des fluides ou des algorithmes). L’effet semblera alors plus naturel et plus détaillé, il dépendra plus fortement du point d’impact et de la force appliquée que de la fracturation précalculée. Il faut noter que, pour APEX 1.3, la fracturation ne se fera que comme du verre.

Fracturation en temps réel

Tissus

Le solveur amélioré disponible dans PhysX 3.3 est désormais à la base des simulations de tissus, ils supportent donc les autocollisions, les collisions avec d’autres objets de tissus, ainsi que des collisions (plus limitées) avec le décor.

Particules

Les différents modules liées aux particules (APEX Basic FS, Basic IOS, Emitter…) sont désormais fusionnés dans APEX Particles, ce qui limite de factor le nombre de DLL à déployer avec les applications les utilisant mais aussi le code de chargement des différents modules.

Un nouveau type d’entité facilite les interactions entre les particules et la turbulence, en liant ces acteurs et données en un seul acteur manipulable en temps réel (des émetteurs de particules, une grille de turbulence, un champ de force, une source de chaleur et d’autres peuvent être ainsi fusionnées). Chacun des effets individuels peut avoir des caractéristiques temporelles différentes, comme une durée ou des compteurs ; de même, un système parent-enfant est déployé, ce qui fait que le déplacement de l’acteur racine déplace tous les enfants.

Éditeur d'effets de particules

Source : http://physxinfo.com/news/12024/apex-1-3-released-features-first-iteration-of-real-time-fracturing/

Sortie de PhysX 3.3 et des plug-ins 3DS Max et Maya en version 3.0 (ainsi que PhysX 3.2.5 et APEX 1.2.5)

Après une phase de préversions privées, PhysX 3.3 est désormais disponible au grand public. En résumé, il apporte de nouvelles fonctionnalités (principalement sur la simulation des tissus), mais surtout de grandes améliorations de performances et le support de nouvelles plateformes (GPU Kepler, ARM NEON, Windows 8 Modern, Wii U. Les détails sont disponibles en ligne.

En même temps, les intégrations aux modeleurs 3D 3DS Max et Maya ont été mises à jour en version 3.0 : ces plug-ins ne supportent plus PhysX 2.8, ils se tournent exclusivement vers PhysX 3 et APEX 1.3.

Également, les branches précédentes reçoivent une série de mises à jour, dont l’objet est exclusivement la correction de bogues : PhysX 3.2.5 et APEX 1.2.5.

Sources : http://physxinfo.com/news/11796/physx-sdk-3-3-0-final-release/, http://physxinfo.com/news/11962/physx-plug-ins-have-received-3-0-update/, http://physxinfo.com/news/12003/physx-sdk-3-2-5-and-apex-1-2-5-are-available/.

NVIDIA FLEX, le solveur GPU unifié

Le mois dernier, NVIDIA a annoncé une série de nouveautés pour les développeurs de jeux, dont un nouveau solveur unifié qui fonctionne sur GPU (avec la technologie CUDA, donc actuellement limité aux puces NVIDIA, bien qu’une version DirectCompute soit prévue et une autre sur CPU dans les esprits) – tant sous Windows que Linux, pour le moment.

FLEX est un solveur multiphysique pour les effets visuels. Il hérite notamment des travaux sur PBF pour la simulation des fluides, avec une extension au couplage bidirectionnel entre les liquides et les autres types d’objets (pas seulement des solides, mais également des tissus). Il s’inspire d’outils comme nCloth (intégré dans Maya) ou Lagoa (Softimage), mais en les utilisant en temps réel.

Par rapport à PBF, FLEX veut être plus général et traiter des objets comme des liquides, des matériaux granuleux (sable, poussière), des tissus (y compris des drapeaux ou des journaux), des solides et corps déformables. Il utilise une représentation unique pour tous ces objets, ce qui lui permet de traiter des couplages de manière naturelle. Il reste possible d’écrire son propre code pour faire l’interface avec d’autres solveurs comme ceux d’APEX.

Il s’agit d’un solveur différent de ceux disponibles actuellement dans le SDK PhysX, il n’est d’ailleurs pas prévu pour les mêmes utilisations (un moteur traditionnel prévu pour les solides sera plus approprié pour des personnages ou du raycasting). En particulier, il ne réutilise pas d’algorithme implémenté dans PhysX : il est même utilisable totalement indépendant du moteur de NVIDIA. L’intégration de FLEX dans PhysX devrait arriver dans la version 3.4 ; actuellement, il faut encore faire le pont entre les deux soi-même, pour ceux qui ont accès au SDK (la disponibilité générale se fera avec PhysX 3.4).

Source : http://physxinfo.com/news/11860/introducing-nvidia-flex-unified-gpu-physx-solver/

APEX Hair/Fur

APEX, le framework de simulations physiques basé sur PhysX, verra bientôt l’ajout d’un nouveau module pour les cheveux et autres poils. Actuellement, le module APEX Clothing propose la simulation de tissus qui suivent le personnage qui les porte, comme dans BioShock Infinite.

The Witcher 3: Wild Hunt, attendu en 2014, profitera du module APEX Hair/Fur, qui proposera le même type de fonctionnalités – mais pour des cheveux et des poils, humains ou non.

Ces simulations utilisent des dizaines de milliers de cheveux inextensibles en temps réel pour atteindre cet objectif de réalisme, ce qui requiert une grande puissance de calcul, offerte par les derniers GPU de la marque. Auparavant, ce genre d’effets était limité aux films, puisqu’il n’y avait pas besoin de temps réel.

Pour une simulation aussi rapide, il faut effectuer très peu d’itérations pour chaque image. La technique utilisée, nommée follow the leader (FTL) est géométrique et ne requiert qu’une seule itération, sans pour autant avoir des poils qui s’étirent. L’amélioration apportée par les équipes de NVIDIA est l’extension de cette technique à des cas non statiques.

Chaque poil est constitué d’une série de particules liées les unes aux autres par des distances au repos. À chaque itération, ces particules se meuvent et il faut restaurer l’espacement entre deux (pour éviter l’étirement desdits poils). La version statique de l’algorithme FTL parcourt les positions de tous les points, l’un après l’autre, en modifiant les positions de telle sorte que la particule se situe sur une sphère centrée sur la précédente. La nouvelle position est donnée par le point le plus proche sur la sphère de l’ancienne position.

La nouveauté consiste à améliorer cet algorithme pour le rendre plus dynamique, sortir des hypothèses de quasistaticité. Il faut alors stocker, en plus de la position, la vitesse de chaque particule de chaque poil. L’itération corrigera tant la position que la vitesse, en utilisant la technique de dynamique basée sur les positions (aussi utilisée pour la simulation de fluides). La correction est en général basée sur l’inverse de la masse de chaque particule, mais cela génère un comportement relativement chaotique (exposé dans la vidéo ci-dessous), corrigé par un terme d’amortissement numérique. (Tous les détails sont donnés dans l’article Fast Simulation of Inextensible Hair and Fur, voir plus loin.)

Sources : How NVIDIA Delivered Hairier Effects for Your Favorite Games, Fast Simulation of Inextensible Hair and Fur.

Simulation des fluides basée sur la position : évolutions montrées au SIGGRAPH 2013

La simulation des fluides basée sur la position (position based fluids) est une manière de simuler les fluides basée sur le framework PBD (position-based dynamics) de PhysX, notamment utilisé pour les tissus et autres objets déformables. Comme toujours pour des jeux, cette simulation doit être rapide et stable (demander peu d’itérations pour converger), en sacrifiant la précision des résultats.

Cette approche combine une technique SPH classique (smoothed-particles hydrodynamics) avec ce framework PBD. Cette technique permet d’imposer l’incompressibilité d’un fluide (son volume varie peu, peu importe la pression appliquée, comme l’eau) de manière bien plus efficace qu’avec une approche de type SPH pure, grâce aux contraintes de position. Techniquement, il s’agit toujours d’un solveur itératif basé sur dix kernels CUDA.

Avec un terme plus artificiel de pression, ce nouveau solveur améliore la distribution des particules et crée des effets similaires à la tension de surface. Le confinement des vortex (une technique de simulation des écoulements dominés par des vortex) est aussi utilisé pour laisser l’utilisateur injecter de l’énergie dans le fluide.

Au SIGGRAPH 2013, Miles Macklin (un des auteurs de cette méthode de simulation) a présenté les dernières améliorations en date de l’algorithme : les interactions à double sens entre un fluide et des solides ou des tissus.

Les diapositives de cette présentation sont disponibles en ligne.

Il faut aussi noter que Eric Wolter propose une autre implémentation du même concept en C++ mais avec OpenCL : sources sur GitHub.

Sources : http://physxinfo.com/news/11109/introduction-to-position-based-fluids/ et http://physxinfo.com/news/11679/siggraph-2013-latest-improvements-to-position-based-fluids/

PhysX 3.3 Beta 2

Après une première phase de tests privés, voici PhysX 3.3 Beta 2, une préversion publique. PhysX 3.3 apporte un grand nombre de fonctionnalités ainsi que des améliorations de performances. L’article sur la préversion privée contient la description des fonctionnalités majeures ajoutées.

Parmi les autres points importants de cette version, on peut citer un support plus étendu des plateformes : les GPU Kepler, la dernière famille de GPU de NVIDIA ; la console Wii U ainsi que les applications Windows 8 Modern UI (l’interface traditionnelle était déjà supportée) ; sur les processeurs ARM, le jeu d’instructions NEON (instructions SIMD) est à présent utilisé. Il faut cependant remarquer que les exemples ne sont pas disponibles pour Windows RT ou la Wii U.

Notes de version.

PhysX 3.3 entre en phase de tests privés

L’équipe PhysX de NVIDIA a récemment proposé à des utilisateurs avancés de PhysX, choisis pour leur expérience et le temps qu’ils peuvent apporter aux tests, d’essayer en avant-première PhysX 3.3. Au menu, si ce n’est ce qui a été présenté à la GDC de cette année, on retrouve un bon nombre d’améliorations de performances. De manière générale, cependant, plus d’optimisations sont attendues pour la version finale.

Amélioration des performances et de la stabilité du solveur de solides

Les performances ont été améliorées de quinze à vingt pour cent par rapport à PhysX 3.2, qui représentait déjà une grande amélioration par rapport à PhysX 2.8.4. L’empreinte mémoire a été également améliorée.

Amélioration des performances et de la stabilité du solveur de solides

Algorithme alternatif de phase large de détection des collisions

L’algorithme MBP (multibox pruning) est maintenant disponible comme alternative à SAP (sweep and prune). Il fournit de meilleures performances quand tous les objets de la scène sont en mouvement ou quand de grands nombres d’objets y sont ajoutés. Ces bénéfices ne se montrent cependant que dans les cas où un grand nombre d’objets sont simulés activement et en mouvement simultanément ; sinon, l’algorithme SAP fournira de meilleures performances. Pour utiliser MBP, il faudra configurer un peu plus, en définissant un grille du monde et des frontières.

Algorithme alternatif de phase large de détection des collisions : comparaison des performances

Requêtes de scène plus robustes

L’API des requêtes de scène a été modifiée pour être plus cohérente, tandis que l’implémentation a été améliorée dans un grand nombre de scénarios.

Requêtes de scène plus robustes

Améliorations d’autres algorithmes

Le système de détection des collisions entièrement basé sur les distances PCM (persistent contact manifold) est maintenant souvent plus rapide et plus robuste que les algorithmes précédents.

Pour la détection des collisions continue (CCD), de grandes optimisations ont été apportées, faisant que le comportement du système a été amélioré. L’algorithme supporte maintenant des modifications de contact et les notifications.

Il sera bientôt possible de partager des formes entres des solides, ce qui permettra d’économiser de la mémoire si plusieurs acteurs ont une géométrie commune. Cependant, les géométries ne pourront pas voir leurs attributs modifiés tant qu’elles sont attachées à plusieurs acteurs.

Comme annoncé à la GDC, le solveur de tissus supporte maintenant de nouvelles fonctionnalités, comme les autocollisions, les collisions entre tissus, un nouveau solveur GPU et bien d’autres.

Support matériel

Le code GPU a été porté vers CUDA 5, d’où un support des GPU Kepler. Également, tant le solveur de tissus que de particules supportent la fonctionnalité d’interopérabilité CUDA-Graphics, ce qui permet d’améliorer les performances de la simulation en éliminant des appels inutiles au CPU.

Sur les plateformes ARM, PhysX peut désormais utiliser les extensions NEON de SIMD, afin d’améliorer les performances.

Source : http://physxinfo.com/news/11241/physx-sdk-3-3-closed-beta-testing-begins/