Liquid Crystal, une démo sandbox "indie" de simulation physique rendue par voxel |
————— 14 Septembre 2020 à 08h31 —— 18753 vues
Liquid Crystal, une démo sandbox "indie" de simulation physique rendue par voxel |
————— 14 Septembre 2020 à 08h31 —— 18753 vues
Internet regorge de perles en tout genre de créateurs souvent (très) obstinés et (très) passionnés, un environnement où il n’est toutefois jamais facile de sortir la tête de l’eau. Et si l'on se penchait sur l'une d'entre elle, histoire de varier un peu ? Petite trouvaille par hasard fruit d’une navigation (silencieuse, pas comme celle de Trump) quasi journalière sur Twitter, la démo Liquid Crystal est la création d’un développeur de jeu « indie » nommé Grant Kot, activité à laquelle il s’adonne sur son temps libre en marge de son activité professionnelle d’ingénieur logiciel à New York.
Liquid Crystal est une première brève démonstration technique d’un jeu « bac à sable » physique en cours de développement, l’objectif étant la création d’un titre où chaque bloc est physiquement simulé et peut être interagi avec. Dans la démo, une petite portion dans un cadre fermé d’un monde fait de particules où il est possible de se déplacer/voler, y compris en hauteur, et interagir avec lesdites particules, en les tirant ou appliquant une force d’attraction (un peu comme Moïse, en fait). La démo exige un GPU compatible DirectX 11.1 — chez Nvidia tous les GPU depuis Fermi, chez AMD tous ceux depuis Evergreen. Pour l’anecdote, une création plus avancée est également en cours de gestation derrière les rideaux et qui fera cette fois-ci bon usage de DirectX 12 Ultimate — annoncé mi-mars par Microsoft.
En matière de techniques déployées, on trouve d’abord un moteur de jeu voxel (contraction de « volume » et « élément », permet de stocker les caractéristiques physiques d’un point d’un volume sur un maillage régulier) utilisant la Material Point Method (une technique numérique utilisée pour simuler le comportement de différents matériaux/éléments) pour les simulations physiques. La totalité des effets physiques est gérée par le CPU pour réserver le GPU à d’autres tâches.
Dans le cas de la démo, la technique utilisée pour l'éclairage se rapproche un peu du voxel cone tracing de Crytek (grosso modo du ray tracing sans matos RTX) ou le voxel global illumination (VGXI) de Nvidia, certes, probablement dans une version moins avancée. Le créateur n’a pas utilisé de structure de données adaptative comme un Sparse Voxel Octree (une technique de rendu 3D utilisant du ray casting ou une autre forme de lancer de rayon dans une représentation octree) ni d’éclairage diffus, plus lourd et plus complexe à mettre en œuvre. En somme, l’objectif premier du développeur était d’abord la vitesse plutôt que la qualité du rendu, afin d’être en mesure d’apprécier les effets de réflexions/réfractions d’objets en mouvement rapides sans aucun lag.
On y trouve également du ray marching — ou encore ray casting et parfois aussi ray tracing volumétrique —, une technique de projection de rayon volumique pour un rendu de volume basé sur l’image, en calculant des images 2D à partir d’ensembles de données volumétriques 3D. Dans la démo, l’utilisation du ray maching permet aux rayons lumineux de se plier en cas de contact physique avec un volume, qui peut être constitué d’un ensemble d’éléments ayant des indices de réfraction différents, naturellement dans l’objectif d’obtenir un rendu et une propagation de la lumière aussi naturels que possible. Depuis la dernière mise à jour, les shaders de l’eau affichent notamment aussi des effets de Fresnel et d’absorption de lumière.
L'auteur, Grant Kot, a aussi publié une version V4 introduisant la technique de merge instancing, d’abord pour les GPU incompatibles avec les mesh shaders (voir la démo de Nvidia avec Turing en 2018, notez que la version avec mesh shaders de Liquid Crystal n’a pas encore été publiée), mais aussi pour permettre l’utilisation d’un mesh différent pour chaque particule (avec jusqu’à 64 triangles), de quoi varier grandement les formes affichées à l’écran. L’inconvénient, c’est que cette technique est plus gourmande, car fait travailler inutilement le GPU pour effectuer des transformations géométriques qui ne seront pas visibles pour le joueur.
Inversement, les mesh shaders disposent d’une méthode de tri (le frustum culling) pour éviter justement cette perte de temps de calcul, un gain qui permet en retour d’augmenter sensiblement le niveau de détails dans l’environnement immédiat visible du joueur. Le développeur annonce pour l’instant être arrivé à 256 triangles par particules à proximité du joueur, et espère bien pouvoir aller encore plus haut.
Bien entendu, ceci est encore une ébauche très expérimentale préalpha sur le long chemin vers une « early access » et qui nécessite encore beaucoup de travail d’optimisation de la parole de l’auteur lui-même. Sa feuille de route comporte notamment la future version faisant usage des mesh shaders pour un meilleur niveau de détail (LOD), l’ajout des effets de températures, une optimisation de l’éclairage des objets statiques ou encore l’exploitation du calcul asynchrone (Async Compute) pour simuler l’éclairage lors de la rastérisation. Bref, si c’est votre dada habituel, par passion ou pour le travail, ou même par simple curiosité, une progression à suivre directement sur sa page YouTube et la page ci-dessous !
Un poil avant ?NvidiARM, c'est officiel ! | Un peu plus tard ...Et sinon, Mac OS X sur votre Rapberry Pi, ça vous tente ? |