288 lines
11 KiB
Markdown
288 lines
11 KiB
Markdown
# POC A — Bilan technique consolidé
|
||
|
||
## Statut
|
||
|
||
- Date de consolidation : 6 août 2026.
|
||
- État : POC validé et figé comme référence de conception.
|
||
- Nature : prototype jetable sous Godot 4.7.1, renderer GL Compatibility.
|
||
- Suite : POC B consacré au sonar de relief facetté et à sa lisibilité.
|
||
|
||
Ce document sépare les décisions validées des valeurs de réglage et des
|
||
solutions provisoires. Les nombres ci-dessous décrivent la dernière version
|
||
testée du POC A ; ils ne constituent pas tous des valeurs de production.
|
||
|
||
## Résultat du POC
|
||
|
||
Le principe d'un mini-sous-marin piloté sous contrainte est validé. Le joueur
|
||
peut comprendre les ressources, anticiper une profondeur dangereuse, naviguer
|
||
avec une inertie perceptible et retrouver un objectif depuis un POV intérieur.
|
||
|
||
Deux points restent explicitement ouverts :
|
||
|
||
- la réactivité exacte des commandes doit encore être affinée ;
|
||
- les projecteurs et leur diffusion dans l'eau doivent être entièrement repris.
|
||
|
||
## Décisions de conception validées
|
||
|
||
### Point de vue
|
||
|
||
- POV unique depuis l'habitacle.
|
||
- Vue extérieure abandonnée comme mode de pilotage de production.
|
||
- Large hublot circulaire avec cadre fixe servant de repère spatial.
|
||
- Caméra physiquement enfant de la coque et incapable de quitter la cabine.
|
||
- Tangage et une part du roulis de la coque transmis à la caméra.
|
||
- Regard vertical limité par le champ utile du hublot.
|
||
|
||
### Commandes et mouvement
|
||
|
||
- W/S : avancer et reculer.
|
||
- A/D : gouverner à gauche et à droite, sans translation latérale commandée.
|
||
- Souris horizontale : modifier la consigne de cap.
|
||
- Souris verticale : regarder dans les limites du hublot.
|
||
- Espace/Ctrl : monter et descendre.
|
||
- Maj : forte poussée.
|
||
- Le retour à la commande doit être immédiat, mais la réponse physique retardée.
|
||
- La coque conserve une dérive et une vitesse angulaire progressives.
|
||
- Le sous-marin ne doit pas tourner presque sur place.
|
||
|
||
Le POC ne contient pas encore le retour moteur audio requis en production. Le
|
||
retour immédiat actuel repose principalement sur l'inclinaison du cockpit, le
|
||
mouvement des faisceaux et les instruments.
|
||
|
||
### Orientation et environnement
|
||
|
||
- Un espace vide ne permet pas de lire correctement vitesse ou profondeur.
|
||
- Relief proche, particules suspendues et silhouettes distinctes sont requis.
|
||
- Une balise principale distante ne suffit pas après un changement d'objectif.
|
||
- Des chaînes de petits feux colorés peuvent indiquer un trajet sans flèche HUD.
|
||
- La visibilité doit conserver des silhouettes au-delà de la portée utile des
|
||
phares ; une obscurité entièrement noire désoriente sans enrichir la recherche.
|
||
|
||
### Survie et interface
|
||
|
||
- L'oxygène diminue continuellement.
|
||
- La batterie représente explicitement la propulsion et ne diminue que sous
|
||
poussée ou gouvernail actif.
|
||
- La batterie vide n'entraîne pas une mort instantanée.
|
||
- La profondeur dangereuse, les dégâts de collision et la marge de retour sont
|
||
toujours annoncés.
|
||
- Les alarmes utilisent texte, couleur et son ; aucune information critique ne
|
||
doit dépendre uniquement de la couleur en production.
|
||
- L'éjection volontaire nécessite une commande maintenue trois secondes.
|
||
|
||
## Baseline de pilotage actuelle
|
||
|
||
### Translation
|
||
|
||
| Paramètre | Valeur du POC |
|
||
|---|---:|
|
||
| Vitesse de croisière | 6,0 m/s |
|
||
| Forte poussée | 9,5 m/s |
|
||
| Accélération | 2,0 m/s² |
|
||
| Freinage | 1,35 m/s² |
|
||
| Résistance latérale | 2,2 m/s² |
|
||
|
||
### Rotation
|
||
|
||
| Paramètre | Valeur du POC |
|
||
|---|---:|
|
||
| Vitesse de consigne clavier | 55°/s |
|
||
| Vitesse angulaire maximale | 45°/s |
|
||
| Accélération angulaire | 30°/s² |
|
||
| Freinage angulaire | 24°/s² |
|
||
| Sensibilité souris | 0,0025 rad/pixel |
|
||
|
||
La consigne de cap et la rotation réelle sont distinctes. La vitesse angulaire
|
||
se rapproche progressivement d'une vitesse cible calculée depuis l'erreur de
|
||
cap, puis se résorbe sans téléporter la coque sur la consigne.
|
||
|
||
### Mesure de référence
|
||
|
||
Avec W+D maintenus depuis l'arrêt :
|
||
|
||
| Temps | Rotation cumulée | Vitesse linéaire |
|
||
|---|---:|---:|
|
||
| 0,5 s | environ 4° | 1,00 m/s |
|
||
| 2,0 s | environ 57° | 3,96 m/s |
|
||
| 4,0 s | environ 147° | 5,57 m/s |
|
||
|
||
Cette réponse a été jugée correcte dans son principe, mais encore perfectible
|
||
dans son réglage fin.
|
||
|
||
## Baseline caméra et hublot
|
||
|
||
| Paramètre | Valeur du POC |
|
||
|---|---:|
|
||
| FOV vertical Godot (`KEEP_HEIGHT`) | 82° |
|
||
| Position locale caméra | (0,00 ; 0,52 ; -0,48) m |
|
||
| Inclinaison initiale | -0,04 rad |
|
||
| Regard vertical minimal | -0,30 rad, environ -17° |
|
||
| Regard vertical maximal | 0,20 rad, environ 11° |
|
||
| Tangage visuel maximal de la coque | 18° |
|
||
| Roulis visuel maximal de la coque | 16° |
|
||
| Roulis transmis à la caméra | 55 % |
|
||
|
||
Le hublot est un masque circulaire en shader `canvas_item`, corrigé selon le
|
||
ratio de l'écran. Son rayon normalisé vertical est de 0,435. Le cadre et le
|
||
verre sont provisoires ; seule la forme circulaire et la présence d'un repère
|
||
fixe sont validées.
|
||
|
||
Le contrôleur contient encore une branche de caméra extérieure héritée des
|
||
premières itérations. Elle n'est pas validée et doit être supprimée lors de la
|
||
réécriture de production.
|
||
|
||
## Baseline des projecteurs
|
||
|
||
| Paramètre | Valeur du POC |
|
||
|---|---:|
|
||
| Nombre | 2 |
|
||
| Portée SpotLight3D | 58 m |
|
||
| Énergie | 38 |
|
||
| Angle | 24° |
|
||
| Divergence horizontale | ±6° |
|
||
| Inclinaison verticale | -3° |
|
||
| Ombres | désactivées |
|
||
|
||
GL Compatibility n'affiche pas le volume lumineux dans le brouillard. Le POC
|
||
combine donc :
|
||
|
||
1. deux `SpotLight3D` pour éclairer les surfaces ;
|
||
2. des lentilles émissives en vue extérieure ;
|
||
3. six plans translucides par phare en POV pour simuler la diffusion dans l'eau ;
|
||
4. un cône translucide différent pour l'ancienne vue extérieure.
|
||
|
||
Les six plans POV se trouvent à 4, 7,5, 12, 18, 25 et 32 mètres. Cette solution
|
||
est un bricolage jetable : elle produit des halos, dépend fortement du point de
|
||
vue et ne doit pas être portée telle quelle en production.
|
||
|
||
Les ombres des projecteurs ont été désactivées après apparition de bandes de
|
||
shadow mapping sur les volumes whitebox. Le renderer de production visé reste
|
||
Forward+ ; le traitement final devra comparer brouillard volumétrique, particules
|
||
éclairées et solution écran, avec des limites strictes de performance.
|
||
|
||
## Baseline de visibilité et navigation
|
||
|
||
### Environnement
|
||
|
||
| Paramètre | Valeur du POC |
|
||
|---|---:|
|
||
| Couleur de fond | `#031823` |
|
||
| Énergie ambiante | 0,46 |
|
||
| Couleur ambiante | `#2b6575` |
|
||
| Densité du brouillard | 0,013 |
|
||
| Énergie lumineuse du brouillard | 0,52 |
|
||
| Énergie directionnelle | 0,35 |
|
||
|
||
Le parcours comprend sept formations rapprochées supplémentaires et 520
|
||
particules suspendues. Les particules ont une durée de vie de 14 secondes et une
|
||
vitesse initiale comprise entre 0,025 et 0,11 m/s. Ces valeurs servent uniquement
|
||
à rendre parallaxe et vitesse perceptibles.
|
||
|
||
### Balises
|
||
|
||
| Étape | Position | Rayon |
|
||
|---|---|---:|
|
||
| Navigation initiale | (0 ; -22 ; -58) | 8 m |
|
||
| Plongée critique | (38 ; -66 ; -128) | 4 m |
|
||
| Récupération | (0 ; -12 ; 12) | 8 m |
|
||
|
||
Après la première balise, trois feux orange matérialisent une descente graduelle
|
||
vers la seconde. Après la seconde, quatre feux verts matérialisent le retour.
|
||
Les feux intermédiaires ont un rayon de 0,38 m, une émission de 1,5 et une lumière
|
||
omnidirectionnelle de portée 7 m et d'énergie 1,8.
|
||
|
||
Les positions exactes restent des données whitebox et ne constituent pas une
|
||
règle de level design. La règle validée est qu'un changement d'objectif doit
|
||
fournir immédiatement un premier repère visible dans le hublot.
|
||
|
||
## Baseline de survie
|
||
|
||
| Paramètre | Valeur du POC |
|
||
|---|---:|
|
||
| Oxygène | 600 s, soit 10 min |
|
||
| Batterie | 100 % |
|
||
| Intégrité | 100 % |
|
||
| Consommation oxygène | 1 s par seconde |
|
||
| Consommation batterie à pleine poussée | 0,60 %/s |
|
||
| Profondeur nominale | 60 m |
|
||
| Profondeur critique | 72 m |
|
||
| Profondeur d'écrasement | 78 m |
|
||
|
||
Entre 60 et 72 mètres, les dégâts de pression progressent de 0,15 à 5 points
|
||
par seconde selon une courbe quadratique. Entre 72 et 78 mètres, ils progressent
|
||
de 5 à 18 points par seconde. À partir de 78 mètres, la coque perd 25 points par
|
||
seconde.
|
||
|
||
Une collision commence à infliger des dégâts au-delà d'une composante d'impact
|
||
de 3,5 m/s. Les dégâts valent `(impact - 3,5) × 4`, avec un délai de 0,45 seconde
|
||
avant un nouveau dégât de collision.
|
||
|
||
L'estimation de retour utilise la distance divisée par 6 m/s, multipliée par la
|
||
consommation à pleine poussée, plus 0,035 point de batterie par mètre de remontée.
|
||
Elle reste une approximation volontairement simple.
|
||
|
||
## Alarmes et états terminaux
|
||
|
||
| Niveau | Seuil de ressource | Répétition sonore |
|
||
|---|---:|---:|
|
||
| Attention | ≤ 30 % | un signal à l'entrée du niveau |
|
||
| Retour | ≤ 15 % | 2,5 s |
|
||
| Critique | ≤ 5 % | 1,25 s |
|
||
| Vide/défaillance | 0 % | 0,75 s |
|
||
|
||
Pour la profondeur, l'attention commence à 51 m, le retour au-delà de 60 m, le
|
||
critique à 72 m et la défaillance à 78 m.
|
||
|
||
La coque à zéro et l'oxygène à zéro terminent la plongée. La batterie à zéro ne
|
||
la termine pas immédiatement. F9 force oxygène à 30 secondes, batterie à 12 %
|
||
et coque à 28 % afin de tester rapidement les alarmes.
|
||
|
||
## Ce qui est validé et ce qui ne l'est pas
|
||
|
||
### Validé
|
||
|
||
- POV intérieur et hublot circulaire.
|
||
- Caméra fixée dans la cabine.
|
||
- Mapping W/S, A/D, Espace/Ctrl et Maj.
|
||
- Séparation entre commande immédiate et réponse physique inertielle.
|
||
- Séparation oxygène, propulsion et intégrité.
|
||
- Profondeur nominale lisible et conséquences progressives.
|
||
- Besoin de relief, particules et repères après changement d'objectif.
|
||
- Principe des alarmes et de l'éjection volontaire.
|
||
|
||
### Provisoire
|
||
|
||
- Toutes les valeurs numériques de pilotage.
|
||
- Position exacte de la caméra et FOV à 82°.
|
||
- Intensité du roulis et du tangage.
|
||
- HUD et cadre du hublot.
|
||
- Géométrie, couleurs et densité du parcours.
|
||
- Estimation de coût du retour.
|
||
- Sons synthétiques des alarmes.
|
||
|
||
### À reprendre
|
||
|
||
- Rendu et puissance perçue des projecteurs.
|
||
- Retour audio immédiat du moteur, des propulseurs et du gouvernail.
|
||
- Réglage fin de la réactivité des commandes.
|
||
- Accessibilité du roulis, du mouvement caméra et du contraste.
|
||
- Vérification manette et remappage complet.
|
||
- Migration du rendu vers Forward+.
|
||
|
||
## Vérification technique
|
||
|
||
- 13 tests headless passent : 9 pour la survie et 4 pour la fondation sonar.
|
||
- La scène POC A charge sans erreur de script.
|
||
- Les itérations du hublot, des projecteurs et des guides ont été vérifiées sur
|
||
un rendu OpenGL Compatibility 1280 × 720 sur Apple M1.
|
||
- Les tests ne couvrent pas encore l'interface, le shader du hublot, les
|
||
particules, le mouvement complet du véhicule ni le rendu des projecteurs.
|
||
|
||
## Contrat de reprise pour la production
|
||
|
||
Le code du POC A peut être réutilisé pour apprendre ou accélérer un autre POC,
|
||
mais ne doit pas devenir silencieusement le contrôleur de production. Une
|
||
réécriture devra préserver les décisions validées, repartir des valeurs de cette
|
||
baseline comme premier réglage et remplacer explicitement chaque solution
|
||
provisoire.
|