18 KiB
POC B — Bilan technique consolidé du sonar bathymétrique
Statut
- Date de consolidation : 7 août 2026.
- État : direction validée et POC figé comme référence de conception.
- Nature : prototype jetable sous Godot 4.7.1, renderer GL Compatibility.
- Dépendance : reprend le véhicule, le POV et les commandes validés dans le POC A.
- Conclusion : la représentation bathymétrique 3D est retenue ; le système n'est pas considéré comme finalisé ni prêt pour la production.
Le joueur a jugé la dernière version « vraiment mieux » et sa direction « bien meilleure », tout en signalant qu'il reste des raffinements. Cette validation porte sur le langage visuel et la boucle d'utilisation, pas sur tous les réglages, la fidélité acoustique ou la qualité graphique définitive.
Résultat du POC
Le sonar devient compréhensible lorsqu'il représente le fond marin comme un modèle numérique de terrain continu observé en perspective. Le joueur peut lire les creux et les hauteurs, identifier un passage et distinguer une anomalie sans interpréter un nuage de points abstrait.
La boucle validée est la suivante :
- Le joueur déclenche manuellement une impulsion avec F.
- La carte se révèle pendant 2,5 secondes, du proche vers le lointain.
- La couleur code l'élévation et l'ombrage montre les pentes.
- Une anomalie matérielle est renforcée en orange.
- Le joueur peut consulter le résultat dans un petit écran ou l'agrandir.
- Un nouveau scan remplace progressivement le précédent.
Historique des essais et leçons
Essai 1 — distance, azimut et points
Le premier système montrait une progression de retours ponctuels et des distances. Le joueur comprenait la notion de distance, mais ne pouvait ni reconnaître le relief ni transformer les points en itinéraire. L'image devenait encore plus déroutante lorsque son orientation ne suivait pas clairement le cap.
Leçon : une donnée techniquement interprétable n'est pas nécessairement une information navigable. La rotation de la représentation avec le véhicule est indispensable, mais ne suffit pas à rendre des points lisibles.
Essai 2 — surfaces facettées
Les impacts ont ensuite été reliés en plaques. Les fragments paraissaient flotter et le joueur ne reconnaissait qu'une vague forme en T.
Leçon : relier des échos ne produit pas automatiquement un terrain. Il faut une surface cohérente, un référentiel stable et une lecture explicite de la hauteur.
Essai 3 — volumes voxelisés
Les plaques ont été épaissies et fusionnées en voxels de trois mètres. Le relief avait davantage de masse, mais les blocs et leurs ruptures dominaient toujours la lecture. La scène restait illisible.
Leçon : l'épaisseur ne corrige pas une mauvaise grammaire visuelle. Points, facettes et voxels sont abandonnés pour l'affichage principal.
Essai 4 — modèle bathymétrique continu
La dernière version s'inspire des modèles numériques d'élévation : grille régulière, surface continue, caméra oblique, palette d'altitude et relief ombré. La scène cubique a également été remplacée par un fond sculpté. Après un premier test concluant, la portée a été augmentée et la caisse métallique rendue plus visible.
Leçon : la lisibilité vient de la combinaison de trois indices redondants : silhouette continue, couleur d'altitude et ombrage. Aucun de ces indices ne doit porter seul toute l'information.
Décisions de conception validées
Déclenchement et temporalité
- Le scan est une action manuelle sur F.
- Le résultat ne doit jamais être immédiat.
- Les retours proches apparaissent avant les retours lointains.
- La durée de référence est de 2,5 secondes pour 95 mètres.
- Un délai technique de 0,35 seconde suit un scan avant la prochaine impulsion.
- Le scan automatique est réservé à une amélioration future.
- Une éventuelle difficulté facile pourra fournir davantage d'assistance, mais aucune aide automatique n'est requise dans la baseline.
Présentation
- Le sonar montre une maquette 3D continue du fond devant le sous-marin.
- Le point de vue est oblique et légèrement surélevé, comparable à une carte de relief plutôt qu'à un écran radar.
- Le sous-marin blanc reste en bas de l'image et son cap pointe vers le haut.
- La caméra ne devient jamais une caméra libre sortant du véhicule.
- Lorsque le sous-marin tourne, la vue sonar tourne avec lui.
- Noir signifie inconnu ou hors de la couverture.
- Bleu signifie bas/profond ; cyan et vert signifient relief intermédiaire ; jaune et rouge signifient haut.
- Orange signale un matériau anormal. Dans le POC, il s'agit d'une caisse.
- Les ouvertures ne sont ni nommées, ni encadrées, ni indiquées par une flèche.
Interface
- Un petit écran sonar reste présent dans le cockpit.
- Un clic sur cet écran l'agrandit ; Tab fournit le même basculement.
- La vue agrandie affiche exactement la même texture que la petite.
- Ouvrir la grande vue ne suspend ni la simulation ni les commandes clavier.
- Le véhicule peut donc poursuivre son mouvement pendant la consultation.
- Le statut textuel indique le pourcentage, la fin du scan et la présence d'une anomalie, sans expliquer automatiquement la géométrie du terrain.
Mémoire des relevés
- Le POC ne construit pas une carte persistante du monde.
- Un seul relevé précédent est conservé pendant l'arrivée du suivant.
- Cet ancien relevé passe d'environ 52 % d'opacité à l'invisibilité pendant les 2,5 secondes du nouveau scan.
- Il est supprimé lorsque le nouveau relevé est terminé.
Baseline numérique du capteur
| Paramètre | Valeur actuelle |
|---|---|
| Portée minimale | 5 m |
| Portée maximale | 95 m |
| Ouverture horizontale | 76° |
| Grille bathymétrique | 49 colonnes × 31 lignes |
| Nombre maximal d'échantillons de terrain | 1 519 |
| Durée de révélation | 2,5 s |
| Premier retour planifié | 4 % du scan, soit environ 0,10 s |
| Délai après impulsion | 0,35 s |
| Masque physique | couche 1 |
| Taille de cellule du modèle d'échos | 0,65 m |
| Hauteur de départ des sondes de terrain | 48 m au-dessus du capteur |
| Profondeur des sondes de terrain | 92 m sous le capteur |
L'origine logique du capteur se trouve à (0 ; -0,75 ; -2,2) mètres dans le
repère local du sous-marin. La grille forme un trapèze qui s'élargit selon
tan(76° / 2) × distance.
Pour chaque ligne, le temps de révélation est interpolé de 4 % à 100 % de la durée totale. Le balayage visible est donc volontairement piloté par la distance avant et non par une simulation exacte du temps aller-retour acoustique.
Acquisition bathymétrique actuelle
La passe principale ne projette pas réellement 1 519 rayons depuis le nez. Elle place une grille horizontale devant le véhicule et lance, pour chaque cellule, une sonde verticale de haut en bas. Le premier impact fournit :
- la position mondiale ;
- la normale de surface ;
- la distance au capteur ;
- la ligne et la colonne ;
- l'intensité ;
- la catégorie de matériau ;
- le type d'échantillon ;
- le temps de retour visuel ;
- l'élévation normalisée.
Cette technique est un substitut de POC destiné à produire une carte d'altitude continue et lisible. Elle peut révéler le dessus d'un relief que le capteur réel ne verrait pas directement. Elle ne doit donc pas être présentée comme une simulation fidèle d'un sonar multifaisceau.
L'intensité combine :
- une atténuation linéaire avec la distance ;
- une réponse d'incidence allant de 0,18 à 1 ;
- une réflectivité propre au collider ;
- un bornage entre 0 et 1.
La passe bathymétrique utilise une portée d'intensité interne égale à 1,4 fois la portée nominale afin de ne pas perdre les coins éloignés du trapèze.
Détection complémentaire des anomalies
Une seconde passe utilise 31 × 21 rayons réellement projetés depuis le nez :
| Paramètre | Valeur actuelle |
|---|---|
| Ouverture horizontale | 76° |
| Ouverture verticale | 64° |
| Inclinaison centrale | -18° |
| Portée | 95 m |
Seuls les impacts classés METAL sont conservés. Cette passe permet de détecter
une anomalie frontale sans réintroduire le nuage de points dans l'affichage.
Le renderer moyenne actuellement toutes les positions métalliques et affiche un seul marqueur. Plusieurs objets éloignés seraient donc fusionnés en une position moyenne incorrecte. La production devra regrouper les retours en amas distincts.
Normalisation de l'élévation
Pour chaque scan, l'altitude minimale devient 0 et l'altitude maximale devient 1, avec une amplitude minimale forcée à six mètres. Ce choix garantit un bon contraste même sur un terrain peu accidenté.
Conséquence : une même couleur ne correspond pas nécessairement à la même profondeur absolue entre deux scans. La palette actuelle communique la forme locale, pas une mesure bathymétrique universelle. Une production devra choisir entre contraste adaptatif, échelle absolue ou combinaison des deux avec une légende chiffrée.
Reconstruction et rendu
Maillage
- Les échantillons sont indexés par
(colonne, ligne). - Deux triangles relient chaque groupe complet de quatre cellules adjacentes.
- Les normales des faces sont accumulées puis normalisées par sommet pour lisser l'éclairage.
- Une absence d'échantillon interrompt le maillage ; les zones inconnues ne sont pas comblées automatiquement.
- Les deux faces de la surface sont rendues afin que le tangage du véhicule ne la fasse pas disparaître.
- Une jupe verticale de 4,5 mètres ferme le pourtour et donne à la carte l'aspect d'une maquette solide.
- Le maillage complet est actuellement reconstruit sur le CPU chaque fois que le nombre de retours visibles change.
Cette dernière stratégie est acceptable pour le POC mais coûteuse. Un système de production devra mettre à jour des bandes ou tuiles incrémentales, réutiliser les buffers ou déléguer une partie de la reconstruction au GPU.
Palette
| Intervalle normalisé | Dégradé |
|---|---|
| 0 à 0,28 | #173f91 vers #168fc1 |
| 0,28 à 0,52 | #168fc1 vers #36b979 |
| 0,52 à 0,76 | #36b979 vers #d7d93d |
| 0,76 à 1 | #d7d93d vers #ee5734 |
| Métal | #ff6b22 |
| Jupe | #152a32 |
| Inconnu | fond #020407 |
L'intensité du retour ajoute au maximum 8 % de blanc à la couleur du terrain.
Viewport et caméra
| Paramètre | Valeur actuelle |
|---|---|
SubViewport |
960 × 540 |
| Mise à jour | continue |
| Projection | orthographique |
| Taille orthographique | 116 m |
| Plan lointain | 240 m |
| Position caméra relative | 30 m derrière, 65 m au-dessus |
| Point visé relatif | 43 m devant, 8 m sous le véhicule |
Le sonar possède son propre World3D, son environnement, deux lumières
directionnelles et sa caméra. Ce découplage permet aux vues compacte et agrandie
de partager une image stable indépendamment de la caméra principale.
L'environnement utilise un tonemapper filmique, une énergie ambiante de 0,42, une lumière principale d'énergie 1,25 avec ombres et une lumière de remplissage d'énergie 0,38.
Repères visuels
- Le sous-marin est une capsule blanche émissive de 5,8 mètres, prolongée par un nez conique.
- La caisse/anomalie est représentée par un cube orange non éclairé de
8 × 4,5 × 8mètres, avec une émission d'énergie 4. - Le cube est placé 1,4 mètre au-dessus de la moyenne des retours métalliques afin de rester identifiable dans la petite vue.
Ces dimensions sont des exagérations d'interface, pas les dimensions physiques exactes des objets détectés.
Baseline de l'interface
| Élément | Dimensions actuelles |
|---|---|
| Panneau compact | 320 × 276 px |
| Texture compacte | 298 × 190 px |
| Panneau agrandi | 1 060 × 652 px |
| Texture agrandie | 1 038 × 556 px |
La légende actuelle est : bleu profond, vert/jaune hauteur, orange caisse/anomalie, noir inconnu. L'interface rappelle la portée de 95 mètres et le fait que le cap se trouve vers le haut.
Les textes, tailles, bordures et positions sont provisoires. Sont validés : la présence des deux formats, leur texture commune, le clic d'agrandissement et la continuité de la simulation.
Scène de calibration
| Élément | Valeur actuelle |
|---|---|
| Position initiale du sous-marin | (0 ; -25 ; 22) m |
| Terrain physique | 150 × 170 m |
| Centre longitudinal du terrain | z = -28 m |
| Maillage du terrain | 61 × 69 sommets |
| Collision | ConcavePolygonShape3D, double face |
| Position horizontale de la caisse | (0 ; -45) m |
| Taille physique de la caisse | 8 × 5 × 7 m |
Le terrain est généré par une pente légère, deux ondulations sinusoïdales et des fonctions gaussiennes. Il contient deux reliefs proches, deux crêtes hautes, une crête arrière et une dépression centrale étroite. Cette dépression forme un chenal en U lisible comme passage possible. La caisse repose dans ce chenal.
La scène est un instrument de calibration de lisibilité. Sa topologie et ses dimensions ne constituent pas une règle de level design.
Architecture et flux de données
Fichiers principaux
| Fichier | Responsabilité actuelle |
|---|---|
src/sonar_system.gd |
Déclenchement, acquisition, calendrier des retours et historique court |
src/sonar_model.gd |
Déduplication spatiale et calcul d'intensité |
src/sonar_relief_renderer.gd |
Reconstruction du maillage et rendu bathymétrique |
src/sonar_hud.gd |
Vues compacte/agrandie, statuts, légende et interactions |
src/poc_b.gd |
Assemblage du POC et génération de la scène de calibration |
tests/run_poc_b_integration.gd |
Validation automatisée de la boucle complète |
Signaux
ping_started()vide le relevé courant et prépare le fondu du précédent.ping_progress(current_cells, previous_cells, progress)alimente le maillage progressif et les statuts.ping_completed(current_cells, previous_cells)fige le nouveau résultat et supprime l'ancien.expanded_changed(is_expanded)gère notamment la capture de la souris.
Les tableaux sont actuellement copiés en profondeur entre le système, les signaux et le renderer. Cette simplicité protège le POC des mutations partagées, mais deviendra coûteuse avec une carte plus grande.
Ce qui est validé et ce qui ne l'est pas
Validé
- Principe d'une surface bathymétrique 3D continue.
- Caméra oblique, orthographique et alignée sur le cap.
- Triple lecture par silhouette, couleur d'altitude et ombrage.
- Impulsion manuelle et résultat non immédiat.
- Révélation du proche vers le lointain en 2,5 secondes.
- Portée de POC suffisamment utile à 95 mètres et couverture de 76°.
- Petit écran cliquable et vue agrandie non bloquante.
- Remplacement progressif d'un seul relevé précédent.
- Différenciation orange d'une anomalie.
- Absence d'aide automatique signalant les ouvertures.
Provisoire
- Toutes les valeurs numériques de portée, résolution et durée.
- Palette exacte et seuils de couleur.
- Caméra, éclairage, taille de la jupe et modèle du sous-marin.
- Taille exagérée du marqueur de caisse.
- Terrain et objet de calibration.
- Textes et composition de l'interface.
- Maintien d'un seul relevé précédent.
- Utilisation du renderer GL Compatibility.
À reprendre ou approfondir
- Acquisition physiquement crédible depuis le capteur sous le nez.
- Représentation des parois verticales, plafonds, grottes et surplombs.
- Regroupement et représentation de plusieurs anomalies.
- Échelle bathymétrique absolue ou légende de profondeur.
- Coût énergétique, bruit, faux retours et interférences.
- Résolution et portée variables selon les améliorations du véhicule.
- Accessibilité de la palette et alternatives à la couleur.
- Courbes de niveau éventuelles dans la grande vue seulement.
- Performance de reconstruction et allocations mémoire.
- Contrôles à la manette et navigation complète dans l'interface.
Limite structurelle : grottes et surplombs
Une carte d'altitude associe une seule hauteur à chaque position horizontale. Elle ne peut donc pas représenter simultanément le toit et le sol d'une grotte, ni un objet situé sous un surplomb.
La production devra probablement utiliser une solution hybride :
- une carte bathymétrique continue pour le fond extérieur ;
- des surfaces locales supplémentaires pour les parois et plafonds visibles ;
- une règle d'occlusion empêchant de révéler ce que l'impulsion ne peut pas atteindre ;
- une transition visuelle cohérente entre carte extérieure et intérieur scanné.
Ce problème doit être testé dans un niveau réel, pas résolu en ajoutant des voxels à la baseline validée.
Vérification technique
- 13 tests unitaires headless passent : neuf pour la survie et quatre pour la fondation sonar.
- 14 assertions d'intégration POC B passent.
- L'intégration vérifie la durée, la portée, l'ouverture, le caractère non immédiat, la densité du relevé, les coordonnées de grille, l'élévation, la détection métallique, la génération de faces, l'agrandissement, la conservation d'un relevé précédent et son remplacement progressif.
- Le rendu a été contrôlé en 960 × 540 puis réduit à 298 × 190.
- La vérification visuelle a été effectuée en OpenGL Compatibility sur Apple M1.
Les tests ne valident pas automatiquement la compréhension humaine du relief, la perception des couleurs, la fidélité acoustique, les performances sur une grande carte ni le comportement de plusieurs anomalies.
Contrat de reprise pour la production
Le code du POC B peut servir de référence, d'outil de calibration ou de point de départ temporaire. Il ne doit pas devenir silencieusement le sonar de production.
Une réécriture devra préserver :
- la surface continue et son orientation stable ;
- la progression temporelle proche-vers-lointain ;
- l'action manuelle et la possibilité d'une amélioration automatique ;
- les formats compact et agrandi ;
- la redondance couleur, volume et anomalie ;
- le principe de ne pas révéler automatiquement le chemin.
Elle devra remplacer explicitement :
- les sondes verticales par un modèle d'acquisition cohérent avec le gameplay ;
- la reconstruction complète à chaque retour par une mise à jour incrémentale ;
- la moyenne unique des anomalies par un regroupement spatial ;
- la carte à hauteur unique par une représentation hybride lorsque les grottes le nécessitent ;
- les copies profondes et données sous forme de dictionnaires par des structures adaptées aux performances mesurées.