Streaming de terrain hors mémoire : comment un MNT de plusieurs Go s'ouvre sur un portable
Un MNT à 5 cm d'un chantier de 2 km × 2 km contient 1,6 milliard d'altitudes — 6,4 Go en flottants 32 bits, plus que la mémoire de la plupart des cartes graphiques. Le streaming hors mémoire (out-of-core) est la réponse d'ingénierie : garder toute la surface sur disque sous une forme lisible morceau par morceau, et ne garder en mémoire que ce que l'écran peut montrer. Cet article explique comment STREAM s'y prend, chiffres à l'appui.
Étape 1 : une copie tuilée et multirésolution
Le GeoTIFF ou BigTIFF source est lu une fois et converti en copie native : un découpage fixe en tuiles de 512 × 512 avec niveaux d'aperçu, altitudes en Float32 et orthophotos en RGBA8, stockées en BigTIFF tuilé compressé ZSTD. Une table des tuiles indique celles qui sont construites, et la copie n'est complète que lorsque toutes le sont.
Pour un MNT de 40 000 × 40 000, cela fait 79 × 79 = 6 241 tuiles en pleine résolution, de 1 Mio chacune en Float32. Diviser par deux jusqu'à une seule tuile ajoute sept niveaux d'aperçu — 8 380 tuiles en tout. Chaque tuile a une identité fixe (niveau, x, y), ce qui rend tout le reste adressable.
| Grandeur | Valeur | D'où elle vient |
|---|---|---|
| Tuiles en pleine résolution | 79 × 79 = 6 241 | 40 000 ÷ 512 = 78,1, arrondi au supérieur |
| Taille d'une tuile Float32 | 1 Mio | 512 × 512 × 4 octets |
| Niveaux avec aperçus | 8 | division par deux de 79 tuiles à 1 |
| Tuiles dans toute la pyramide | 8 380 | somme sur tous les niveaux |
| Écran de 1920 × 1080 | ≈ 7,9 tuiles de pixels | 2,07 millions ÷ 262 144 |
Étape 2 : ne demander que ce que voit la caméra
À chaque image, l'état de la caméra produit un ensemble de requêtes : un ensemble grossier épinglé qui couvre toute la vue et un ensemble de détail là où vous regardez. Les tuiles hors de cet ensemble ne sont ni décodées, ni envoyées au GPU, ni conservées.
C'est ce qui borne la mémoire. Une vue de 1920 × 1080 contient à peu près autant de pixels que huit tuiles complètes ; avec une marge et un mélange de niveaux, l'ensemble de travail reste de quelques dizaines de tuiles — quelques dizaines de mégaoctets — que le fichier fasse 200 Mo ou 20 Go.
Étape 3 : décoder hors du fil de rendu, le plus récent d'abord
Le décodage s'exécute sur des fils de travail sous forme de tâches à cinq niveaux de priorité, de la prédiction en arrière-plan à l'urgence, avec une limite de tâches en vol. Chaque requête porte une génération ; quand la caméra avance, les générations anciennes sont annulées au lieu de se terminer, si bien qu'un déplacement rapide ne laisse pas une file de tuiles que personne ne verra.
L'ordre d'envoi suit le point de visée et la visibilité. Si une tuile fine n'est pas prête, la tuile grossière au-dessus la remplace : la surface reste toujours fermée et le détail s'affine à mesure que les tuiles arrivent.
Étape 4 : évincer sans ouvrir de trous
Quand l'atlas GPU est plein, l'éviction préfère les tuiles de même niveau ou plus grossières que la tuile entrante, pondère la distance au point de visée et protège les pages qui assurent le repli grossier. Faire de la place pour le détail ne retire jamais la base en dessous.
Altitude et orthophoto sont gérées comme des ensembles de pages creuses séparés, chacun avec sa propre résidence : une orthophoto lourde ne peut pas priver le terrain de tuiles d'altitude.
Ce que le streaming change pour l'ingénieur
Le coût passe à la première ouverture, où la conversion s'exécute une seule fois avec une carte de progression annulable ; ensuite, le même levé se rouvre en quelques secondes. Plusieurs MNT d'un même site sont réunis en une mosaïque virtuelle — le pixel valide le plus haut l'emporte, le NoData laisse voir la couche dessous — et les analyses lisent la même mosaïque que le rendu.
Rien de tout cela ne demande de serveur : conversion, streaming et rendu tournent sur la machine locale avec Vulkan sur le GPU, ce qui permet d'examiner un levé de plusieurs gigaoctets sur un portable de chantier sans l'envoyer nulle part.
Questions fréquentes
Que signifie hors mémoire pour des données de terrain ?
Le jeu de données reste sur disque sous forme tuilée et multirésolution, et seules les parties nécessaires à la vue courante sont chargées en mémoire. C'est l'écran, pas la taille du fichier, qui borne la mémoire.
Combien de tuiles compte un MNT de 40 000 × 40 000 ?
En tuiles de 512 × 512, 79 × 79 = 6 241 en pleine résolution, de 1 Mio chacune en Float32, et 8 380 avec les sept niveaux d'aperçu.
Pourquoi la première ouverture est-elle plus longue ?
Parce que la source est convertie une fois en copie native tuilée avec niveaux d'aperçu. Ensuite le rendu lit directement les tuiles de la copie et la réouverture prend quelques secondes.
Découvrir le streaming de terrain dans STREAM
Windows natif · entièrement hors ligne · bêta gratuite