Rendre des sols encore plus réalistes dans Vortex Studio

CM Labs est fier de son niveau de réalisme, en basant ses simulations sur des propriétés de moteur et une physique précise. Nos travaux sur les câbles et l’eau ont fait de nos grues et de nos capacités de simulation marine des outils inégalés. De même, pour modéliser avec précision les véhicules de terrassement, le sol avec lequel ils travaillent doit se comporter comme du sol. Une bonne simulation du sol dans Vortex® Studio nous permet non seulement d’obtenir le bon comportement physique, mais il est également important que l’apparence soit adéquate pour une immersion totale de l’opérateur. Vortex Studio comprend une puissante simulation de terrassement qui utilise une approche hybride de champs de hauteur et de particules pour permettre la simulation en temps réel du sol. Vous trouverez plus de détails dans le Guide théorique de Vortex Studio.

Cependant, ce billet met en lumière certaines des améliorations que nous avons apportées au rendu des sols pour permettre des images plus précises, des particules de plus petite taille et un comportement adéquat.

Créer une surface de sol adéquate

Par le passé, nous avons utilisé des effets tels que des maillages de particules et des panneaux d’affichage poussiéreux pour rendre les volumes de sol dans Vortex Studio. Cette méthode ne semblait pas tout à fait naturelle, car le nombre de particules nécessaires pour obtenir un aspect vraiment réaliste exigeait beaucoup de ressources informatiques. Par conséquent, dans notre récente mise à jour (Vortex Studio 2018a), nous sommes passés à la technique du Screen Space Mesh (SSM) – initialement développée pour le rendu des fluides – et l’avons adaptée au rendu des sols à texture opaque.

SSM UVs

En bref, la technique SSM génère un maillage dans l’espace visuel en utilisant les données de profondeur d’un ensemble de particules. En d’autres termes, la carte de profondeur des particules est traitée et rendue floue pour recréer un gros blob de particules. Les normales, qui sont générées à partir de la carte de profondeur, sont utilisées pour l’éclairage, ce qui donne au blob un aspect agréable et liquide.

La mise en œuvre de l’effet SSM n’a pas été difficile, bien que l’étape du flou ait représenté un défi important. Cependant, il s’agit de l’étape qui permet à l’ensemble de fonctionner, en fusionnant les bords des particules. Finalement, nous avons utilisé un flou à deux passages, qui semblait bien adapté à nos besoins, notamment en termes de performances. Cependant, même avec un algorithme de flou adapté, l’aspect et la sensation du SSM nécessitaient encore du travail pour qu’il ressemble à un vrai sol.

Amélioration de la technique SSM

Le défi le plus important que nous ayons eu à relever a été l’aspect fluide du SSM – parfait pour l’eau, mais moins bien pour la terre. Le SSM n’est jamais vu avec autre chose qu’une seule couleur pour une raison simple : il n’y a aucun moyen d’y appliquer des textures. Le maillage est dans l’espace de l’écran et les données de profondeur ne suffisent pas à positionner l’image de texture sur le maillage.
L’approche naïve pour résoudre ce problème consistait à générer des UV basés sur la variable de shader gl_Position, qui contient la position des pixels sur l’écran. Cependant, comme ces positions se situent dans l’espace de visualisation, nous avons constaté un effet que nous appelons « texture swimming » (nage de la texture), où la texture finit par suivre la caméra.

Pour générer des données UV dans l’espace mondial (données indépendantes de la rotation et de la position de la caméra), nous avons généré un second tampon, avec le tampon de profondeur, pour enregistrer les UV des particules. Étant donné que le moteur physique ne modifie pas les rotations des particules (pour des performances plus rapides), nous avons également semé aléatoirement les UV associés à chaque particule pour casser les modèles visuels. Pour simplifier et accélérer la génération d’UV, les particules ont été converties en quelque chose de similaire à des panneaux d’affichage en forme de sphère, de sorte que le calcul des profondeurs, des normales et des UV n’était qu’une simple recherche de texture.

À ce stade, nous avons dû choisir de générer les normales à l’aide du tampon de profondeur ou d’utiliser celles des particules (à travers un autre tampon). La génération des normales a donné d’excellents résultats pour les matériaux fluides. Il a donc été décidé d’utiliser les normales des particules.

Pour un rendu transparent du sol et de la roche, nous avons combiné l’instanciation de maillage et le SSM. Ces maillages instanciés étaient des particules originales sélectionnées de manière aléatoire et utilisées pour générer le tampon de profondeur d’entrée du SSM. Cela nous a permis d’appliquer un matériau par géométrie de particule au lieu d’un matériau global pour toutes les géométries dans l’extension Soil Particles. Cela signifie que nous pouvons, par exemple, rendre des rochers dans un sol argileux.

Optimisation avec un flou dépendant de la distance

Un autre problème lié à l’utilisation de l’effet SSM est sa dépendance à l’égard de la vue. En raison du fonctionnement du flou, la distance de la caméra par rapport à la maille affecte grandement la quantité de flou qui lui est appliquée. Cet artefact n’est pas aussi évident lorsqu’on utilise des matériaux transparents (comme l’eau) mais, dans notre cas, il est devenu très évident parce que nous traitons exclusivement des matériaux opaques.

Notre solution a consisté à utiliser un noyau dépendant de la vue, qui réduit le flou à mesure que la caméra s’éloigne. Ce noyau est calculé à partir de la distance de vue, de la résolution de l’écran et des valeurs de proximité et d’éloignement. Comme ces valeurs ne changent pas beaucoup (dans notre cas), nous avons simplement codé en dur les valeurs qui nous convenaient au lieu de rendre les étapes de flou encore plus coûteuses et complexes sur le plan du calcul.

Vortex Studio Screen-Space-Mesh-avant-et-après
Sol dans Vortex Studio : Avant (gauche) et après (droite) SSM.

Le SSM est un effet coûteux en termes de calcul, même s’il est plus efficace que l’utilisation de milliards de particules. L’étape de floutage est de loin l’étape la plus coûteuse de tout l’effet, et pour réduire ce coût, nous utilisons un noyau entrelacé qui étend la taille du noyau sans ajouter plus de recherches de textures. Cette méthode a un effet secondaire : elle ajoute quelques pixels ici et là autour du maillage, mais comme nous creusons dans le sol d’un matériau similaire, ces pixels « parasites » sont souvent invisibles.

Conclusion

Travailler avec le SSM a été un défi intéressant, bien qu’une bonne documentation et des exemples en ligne nous aient simplifié la tâche. En tant qu’équipe, nous sommes très satisfaits des résultats globaux et pensons que nous offrons l’un des rendus de sol les plus avancés et les plus réalistes de l’industrie de la simulation.

Bien sûr, il y a encore du travail à faire sur notre technologie de rendu des sols. Par exemple, la fusion entre le sol déplacé et le champ de hauteur/terrain reste évidente, bien qu’un art de qualité puisse grandement contribuer à atténuer cette différence.

Nous y travaillons !