Skip to content

Construire un monde ouvert dans le navigateur, partie 9 : Transvoxel a commencé par une structure de test

Par Oleg Sidorkin, CTO et cofondateur de Cinevva

Vous découvrez la série ? Consultez le guide de la série. Il explique ce qu'est un spike et renvoie vers toutes les parties.

Les raccords sont l'endroit où la confiance vient mourir.

Tout peut sembler stable jusqu'à ce que deux résolutions se rencontrent. Un chunk en LOD 0 se trouve à côté d'un chunk en LOD 1. Leurs maillages sont générés indépendamment. Le long de leur frontière commune, les positions des sommets ne correspondent pas, car le chunk de résolution inférieure possède une grille deux fois moins dense. Résultat : des fissures visibles, des jonctions en T et des arêtes qui scintillent.

L'algorithme Transvoxel résout ce problème en générant des cellules de transition spéciales le long de la face séparant deux chunks de résolutions différentes. Ces cellules échantillonnent simultanément les grilles haute et basse résolution, puis produisent des triangles qui raccordent les deux surfaces. L'algorithme utilise ses propres tables de correspondance, distinctes de celles du marching cubes classique, avec 512 cas de cellules de transition.

À ce stade, nous avions accumulé suffisamment de cicatrices d'intégration pour savoir qu'il ne fallait pas précipiter l'implémentation.

Le spike 15 avait une seule mission : construire un banc de test des raccords auquel nous pourrions nous fier avant de toucher à l'algorithme complet. Nous avons mis en place un environnement contrôlé dans lequel deux chunks contenant des données SDF connues étaient placés côte à côte à des résolutions différentes, avec des contrôles de visualisation permettant d'afficher ou de masquer indépendamment le maillage principal, le maillage de raccord, le rendu filaire et les normales.

Ouvrir le spike 15 dans un nouvel onglet ↗ · Voir le code source

Une fois le banc de test stabilisé, le spike 16 a validé la génération de cellules de transition pilotée par des tables sur une seule face. Nous avons choisi une face alignée sur un axe (la frontière +X), implémenté l'évaluation des cellules de transition uniquement pour cette face, puis comparé le résultat aux données de référence de l'article sur Transvoxel.

Ouvrir le spike 16 dans un nouvel onglet ↗ · Voir le code source

Nous avons délibérément testé une face à la fois, car le raccordement des tables de transition comporte de nombreux modes de défaillance indépendants. Le calcul de l'indice de cas dépend de l'échantillonnage des bons sommets dans les deux grilles. L'indexation des sommets au sein d'une cellule de transition utilise un schéma de numérotation différent de celui des cellules classiques du marching cubes. L'ordre d'enroulement doit être cohérent avec celui du maillage principal, sinon l'élimination des faces arrière fera disparaître les triangles du raccord. Si vous testez les six faces simultanément, tous les symptômes semblent aléatoires. Si vous testez minutieusement une seule face, vous obtenez des erreurs pertinentes et faciles à déboguer.

Autre avancée subtile de cette phase : l'investissement dans les outils. Nous avons très tôt créé des options de visibilité, un rendu limité aux raccords et des indicateurs de LOD codés par couleur. À l'époque, ces contrôles semblaient superflus. Plus tard, lorsque les cas limites se sont compliqués, ils ont largement rentabilisé cet effort, car nous pouvions isoler précisément les cellules de raccord qui se comportaient mal.

À la fin de ce chapitre, nous n'en avions pas « fini avec les raccords ». Nous étions désormais en mesure d'analyser leurs bugs au lieu de les redouter.

Dans la partie 10, les vraies montagnes russes commencent. Coins mêlant plusieurs LOD, inversions de l'ordre d'enroulement, fantômes dus à un surdessin partiel, et ces moments où vous êtes certain que l'algorithme est incorrect avant de découvrir que le bug vient d'une plage de dessin qui lit au-delà du nombre de sommets actifs.

Technologies abordées dans ce chapitre

L'algorithme Transvoxel. Conçu par Eric Lengyel (transvoxel.org), Transvoxel résout le problème le plus difficile du LOD pour les terrains volumétriques : les raccords entre des chunks de résolutions différentes. Lorsqu'un chunk haute résolution jouxte un chunk basse résolution, les maillages générés par marching cubes ne s'alignent pas à la frontière, ce qui produit des fissures visibles. Transvoxel insère le long des faces de frontière des cellules de transition spéciales qui comblent l'écart de résolution au moyen de triangles supplémentaires correspondant aux deux côtés. L'algorithme utilise ses propres tables de correspondance, distinctes de celles du marching cubes classique, avec 512 cas de cellules de transition ramenés à 73 classes d'équivalence. Il est libre de brevets et a été utilisé dans des jeux commercialisés, notamment Space Engineers et Astroneer. Consultez notre guide sur les paysages consacré à Transvoxel.

Cellules de transition. Cellules spéciales générées sur la face séparant deux niveaux de LOD. Contrairement aux cellules classiques du marching cubes, qui échantillonnent 8 coins d'une même grille, les cellules de transition échantillonnent simultanément les grilles haute et basse résolution. La face haute résolution comporte 3×3=9 points d'échantillonnage, tandis que la face basse résolution en comporte 2×2=4. Ce sont ces 9 échantillons qui donnent à l'algorithme ses 29=512 cas bruts, ramenés à 73 triangulations distinctes après regroupement des rotations et des réflexions. La classification et la triangulation des cellules utilisent des tables dédiées qui produisent des triangles reliant des sommets aux deux résolutions. Le schéma de numérotation des sommets diffère de celui des cellules MC classiques, ce qui constitue une source fréquente de bugs d'implémentation.

Raccords de transition entre LOD. Frontière entre deux résolutions de maillage où une incompatibilité topologique provoque des artefacts visuels. Sans raccord, un chunk en LOD 0 doté d'une grille de 1 m placé à côté d'un chunk en LOD 1 doté d'une grille de 2 m produit des jonctions en T : le maillage fin possède le long de la frontière des sommets que le maillage grossier ne partage pas, créant des fissures par lesquelles la lumière transparaît. Transvoxel, le géomorphing et les jupes géométriques sont trois approches permettant de corriger ces raccords. Pour les terrains volumétriques, Transvoxel est la solution de référence, car le géomorphing ne fonctionne qu'avec les cartes de hauteur. Consultez le LOD pour les terrains volumétriques.


Partie 9 sur 12.
Précédent : Partie 8 - Intégrer sans perdre notre référence
Suivant : Partie 10 - Le chaos des raccords et le boss final des coins
Guide de la série : /fr/blog/2026-02-25-open-world-browser-series-guide