25 July 2024

10 mins de lecture

Une technique qui va faire des vagues : pavage et fondu dans le rendu des surfaces océaniques

Introduction

Le rendu de surfaces océaniques réalistes dans le graphisme informatique représente une tâche difficile mais néanmoins essentielle pour créer des environnements virtuels immersifs. Des jeux vidéo aux films, il est crucial de simuler fidèlement le caractère dynamique des vagues océaniques. Or, les méthodes traditionnelles sont souvent impuissantes à éviter les motifs répétitifs (appelés « artefacts de pavage »), surtout pour restituer de grandes surfaces océaniques comme ici en figure 1. En outre, dans un contexte en temps réel, il est indispensable de prendre en compte les performances et la consommation mémoire, qui limitent l'étendue des solutions possibles pour remédier à ce problème.


Figure 1 : les méthodes traditionnelles ne sont pas en mesure d'éviter les motifs répétitifs. Par comparaison, notre méthode produit efficacement des océans apériodiques.

Dans notre récente publication présentée lors du HPG 2024, nous avons suggéré une approche nouvelle qui utilise un algorithme de synthèse des textures pour créer efficacement une surface océanique apériodique et donc réaliste. Cet article a pour objectif d'expliciter les aspects principaux de notre méthode, ses avantages et ses résultats par comparaison aux techniques traditionnelles.

Les défis des simulations océaniques traditionnelles

L'approche conventionnelle pour simuler une surface océanique emploie le modèle de Tessendorf [1], qui utilise une transformée de Fourier rapide inverse (IFFT) afin de calculer des mouvements de vagues réalistes sous forme de texture unique pour chaque image. Cette approche est illustrée en figure 2. Une map normale périodique est souvent calculée en plus à l'aide d'IFFT pour le rendu.

-LA FORGE Studio- Making Waves in Ocean Surface Rendering using Tiling and Blending - Figure 2
Figure 2 : l'approche traditionnelle décrite dans la vidéo YouTube « Ocean waves simulation with Fast Fourier transform » de la chaîne Jump Trajectory

Les maps ainsi obtenues sont périodiques : elles nous permettent de couvrir toute une surface océanique à l'aide d'un pavage qui prend pour unité la superficie générée. Appliqué à une vaste zone et vu de loin, le pavage devient visible, ce qui compromet la crédibilité de l'océan généré.


Figure 3 : océan périodique généré à l'aide du modèle de Tessendorf

Approches précédentes

Pour résoudre ce problème, une solution courante consiste à ajouter un bruit apériodique comme le bruit de Perlin [2] en fondu à la map de déplacement (displacement map) périodique. Dans notre expérience, un bruit trop faible ne parvient pas à masquer la périodicité, tandis qu'un bruit trop prononcé peut déformer l'aspect de l'océan et le rendre irréaliste.

Une autre approche consiste à subdiviser le spectre océanique en plusieurs sous-spectres représentant chacun différentes plages de fréquences. Ces sous-spectres servent ensuite à calculer plusieurs IFFT qui sont combinées pour créer une map de déplacement finale. Cette approche est illustrée en figure 4.

-LA FORGE Studio- Making Waves in Ocean Surface Rendering using Tiling and Blending - figure 4
Figure 4 : modèle de Tessendorf associé à 3 sous-maps de déplacement

Cette méthode donne des mouvements océaniques périodiques d'une période bien plus élevée ; toutefois, les répétitions restent très visibles pour les vagues de basse fréquence, ce qui oblige souvent à les atténuer. En outre, cette méthode implique de calculer plusieurs transformées de Fourier rapides inverses, ce qui peut allonger le délai de calcul si la résolution de chaque sous-map reste élevée.

Notre approche : pavage et fondu

Pour surmonter ces limitations, nous vous proposons une nouvelle méthode qui synthétise une surface océanique grâce à l'algorithme de pavage et de fondu [3]. Développée à l'origine pour la synthèse de textures en temps réel, cette technique est adaptée afin de générer efficacement la map de déplacement d'un océan apériodique, tel qu'illustré en figure 5. L'algorithme applique un fondu du contenu de plusieurs pavages hexagonaux sur une grille normale tout en préservant les propriétés statistiques des maps d'origine. L'usage de cases hexagonales permet de mélanger le contenu de trois hexagones précisément par texel dans la texture. Les pondérations de fondu valent 1 au centre et convergent vers 0 sur les bords pour assurer une transition fluide du contenu d'un hexagone à l'autre. Le contenu de chaque hexagone est choisi aléatoirement dans la base, ce qui rend la texture produite véritablement apériodique. Notez aussi que le fondu n'est pas linéaire mais préserve la covariance : autrement dit, les vecteurs synthétisés restent cohérents avec la base.

-LA FORGE Studio- Making Waves in Ocean Surface Rendering using Tiling and Blending - figure 5
Figure 5 : pavage et fondu

Pour utiliser le pavage en fondu dans le contexte de la génération océanique, nous commençons avec une map de déplacement périodique et une map normale générées à l'aide du modèle de Tessendorf traditionnel. Ces maps servent de base de travail à notre algorithme de synthèse. De ce fait, les éventuelles implémentations existantes peuvent être améliorées à partir de ce stade sans modifier l'algorithme de génération.

Notre méthode applique ensuite l'algorithme de pavage et fondu aux maps de base (normale et de déplacement), comme indiqué dans la figure 6 pour la map de déplacement. Il en résulte une map normale et une map de déplacement apériodiques et non délimitées qui préservent le réalisme des vagues océaniques.

-LA FORGE Studio- Making Waves in Ocean Surface Rendering using Tiling and Blending - figure 6
Figure 6 : notre approche

Map de flux

Nous ajoutons une map de flux (flow map) permettant aux utilisateurs de spécifier la direction des vagues. En pratique, cela consiste à échantillonner un vecteur de la map de flux au centre de chaque hexagone, le convertir en angle de rotation, faire pivoter tout l'hexagone à hauteur de cet angle, puis corriger chaque valeur normale ou de déplacement échantillonnée en lui appliquant une autre rotation du même angle avec pour axe le vecteur « up ». Cette stratégie est représentée en figure 7.

-LA FORGE Studio- Making Waves in Ocean Surface Rendering using Tiling and Blending - figure 7
Figure 7 : la stratégie de map de flux implémentée

Le fondu homogène du contenu d'un hexagone à un autre permet aussi une transition fluide d'une direction de vague océanique à une autre. Cette fonction peut se révéler particulièrement utile pour créer des vagues qui réagissent aux facteurs environnementaux, et donc donner aux créateurs plus de possibilités d'interaction. Vous trouverez en figure 8 plusieurs exemples d'utilisation d'une map de flux avec notre océan. Notez qu'il est possible de modifier la map de flux en temps réel puisqu'aucun précalcul n'est nécessaire.


Figure 8 : notre approche permet d'éditer l'orientation des vagues à l'aide d'une map de flux

Mappage LEAN

Nous employons le mappage LEAN [4] pour filtrer les vecteurs normaux de la surface océanique afin de calculer précisément les reflets spéculaires quelle que soit la distance de vue, comme indiqué en figure 9. Le principe consiste à convertir la map normale en BRDF à mesure que la résolution diminue afin de représenter précisément l'empreinte de chaque pixel de l'écran dans la surface shadée. Pour ce faire, on précalcule les fonctions de moyennes et de covariances de la BRDF pour chaque résolution, ce qui nécessite de calculer une texture supplémentaire. Comme la compatibilité avec le pavage et fondu était déjà établie, nous avons montré comme l'implémenter directement dans notre article. En outre, nous avons montré comme l'implémenter avec des maps de flux, en corrigeant le lobe spéculaire sans précalcul supplémentaire.

-LA FORGE Studio- Making Waves in Ocean Surface Rendering using Tiling and Blending - figure 9
Figure 9 : comparaison entre le mappage normal, les données référentielles et le mappage LEAN

Implémentation

Notre méthode peut être intégrée sans difficulté aux pipelines de calcul existants. Elle est compatible avec tous les modèles qui génèrent des maps de déplacement océaniques périodiques, ce qui en fait une solution polyvalente pour différentes applications.

Nous avons intégré notre algorithme au pipeline de shaders pour assurer des performances en temps réel. Les maps normales et de déplacement sont calculées au niveau de la carte graphique, ce qui permet des mises à jour rapides et des interactions dynamiques avec les vagues. La map de déplacement est synthétisée dans le vertex shader, tandis que la normale et le mappage LEAN (le cas échéant) sont synthétisés dans le fragment shader. Notre implémentation est également compatible avec les systèmes existants qui génèrent des maps de dérivées à la place des normales. Il prend aussi en charge les reflets environnementaux et les ajustements d'éclairage en temps réel.

Pour gérer efficacement les différents niveaux de détail, notre méthode ajuste de façon dynamique la résolution de la map de déplacement en fonction de la distance de l'observateur, par filtrage des textures et tessellation de la géométrie. Ainsi, les surfaces océaniques lointaines sont rendues avec moins de détails tandis que les surfaces proches conservent une fidélité élevée.

Résultats

Pour valider cette approche, nous avons effectué des comparatifs visuels poussés avec les méthodes traditionnelles. Il en ressort l'absence d'artefacts de pavage et l'aspect naturel des vagues synthétisées. Pour quantifier la qualité de nos résultats, nous nous basons sur la fonction d'autocorrélation. Cet outil mathématique nous aide à mesurer les corrélations entre les observations de maps de déplacement synthétisées séparées par des distances diverses. Une valeur d'autocorrélation faible à distance élevée indique une périodicité réduite. Ce comparatif visuel démontre que notre approche aboutit à un meilleur rapport qualité visuelle / performances, comme illustré en figure 10. Nous avons également montré que la fonction d'autocorrélation de notre océan était plus proche de celle d'un océan réel, pour la même raison.

-LA FORGE Studio- Making Waves in Ocean Surface Rendering using Tiling and Blending - figure 10
Figure 10 : comparatif visuel avec les méthodes traditionnelles. De haut en bas : rendu océanique (haut), map de déplacement sur les 4 périodes correspondantes (milieu) et autocorrélation positive (bas)

Notre approche est plus rapide que les méthodes traditionnelle associant plusieurs sous-maps de déplacement. Elle consomme en outre moins de mémoire, puisqu'elle ne nécessite pas de stocker et de calculer plusieurs IFFT. Elle nécessite une quantité de mémoire / temps de traitement graphique comparable à un océan généré avec bruit de Perlin, mais produit un océan réellement apériodique et donc plus réaliste.

-LA FORGE Studio- Making Waves in Ocean Surface Rendering using Tiling and Blending - figure 11
Figure 11 : temps de traitement graphique

Conclusion

Nos recherches présentent une avancée notable en matière de simulation de surface océanique. À l'aide d'un algorithme de synthèse de textures, nous pouvons créer efficacement des surfaces océaniques apériodiques et réalistes. En plus de remédier aux limites des techniques traditionnelles, cette méthode offre aussi plus de contrôle et de qualité visuelle.

Que vous soyez développeur de jeu cherchant à créer des environnements immersifs ou chercheur en quête de nouvelles façons de simuler des phénomènes naturels, notre approche fournit une solution robuste et polyvalente. Nous sommes impatients de découvrir l'accueil qui sera fait à cette méthode et les améliorations qui lui seront apportées dans les applications à venir.

Références

[1]: Simulating Ocean Water, SIGGRAPH 2001 Course notes, Tessendorf, Jerry

[2]: Ocean Surface Simulation, NVIDIA Graphics SDK 11 Direct3D, NVIDIA

[3]: Procedural Stochastic Textures by Tiling and Blending, GPU Zen 2: Advanced Rendering Techniques, Deliot, Thomas and Heitz, Eric

[4]: LEAN mapping, Proceedings of the 2010 ACM SIGGRAPH symposium on Interactive 3D Graphics and Games, Olano, Marc and Baker, Dan