Skip to content

Latest commit

 

History

History
143 lines (100 loc) · 24.1 KB

File metadata and controls

143 lines (100 loc) · 24.1 KB

Development history (French). Public release evidence and current installation results are in docs/RELEASE_VALIDATION.md. Paths under Saved/ refer to local development artifacts and are not included in the Git repository.

Habitations traversables — 6 septembre 2026

Les 12 bâtiments procéduraux et les 12 maisons détaillées ont des ouvertures réelles, des pièces meublées et des collisions autour des passages. Les modèles détaillés ont été reconstruits puis importés localement : 1 229 450 triangles, 4 588 volumes convexes, 144 trajets contrôlés par le générateur avec un rayon de 28 cm. Les nouveaux assets ne sont pas encore dans le pack public ; voir le guide de vol intérieur.

  • Compilation Unreal Engine 5.8.1/Linux réussie : Saved/Logs/InteriorBuild.log.
  • ./Scripts/check.sh -DonifyShot=12 -DonifyCaptureName=Donify-house-interior.png termine avec le code 0 : 23 marqueurs PASS, dont les 13 contrôles déterministes du groupe physics, aucun FAIL. Journaux : Saved/Logs/Validation.log et Saved/Logs/InteriorValidation-stdout.log.
  • Les six scénarios ajoutés vérifient les passages et surfaces solides, toutes les maisons détaillées et leurs étages, les cages verticales, la caméra, l'atterrissage intérieur et une traversée physique continue porte → pièce → fenêtre. Les deux villas sondées ont des orientations opposées ; leur annexe reste accessible à travers la fenêtre de liaison. La première exécution a détecté une vitre d'abribus dans une façade ; l'abri et son mobilier ont été déplacés entre les parcelles, puis la suite complète est passée sans modifier les attentes.
  • Captures intérieures examinées à 1600 × 1000 : Saved/Donify-house-interior.png et Saved/Donify-procedural-interior.png. L'entrée et la traversée visuelle vers le jardin ont aussi été examinées à 1280 × 800 : Saved/Donify-house-doorway.png. Les ouvertures, pièces, murs et sols sont visibles dans le rendu réel du jeu.
  • Sur RTX A5000, la vue fixe intérieure 12 donne 56,65 FPS moyens, 17,65 ms par image et 24,15 ms au p95, sur 340 images après échauffement. Une session du jeu déjà ouverte avait faussé les premières mesures ; elle a été suspendue pendant cet échantillon puis reprise automatiquement. Cet échantillon de six secondes ne garantit pas une fréquence constante en vol.
  • Contrôles d'architecture et de sources réussis ; les 27 tests Python des scripts passent.

Les portes et fenêtres sont fixes en position ouverte. Les combles restent décoratifs. Les descriptions sans intérieurs des entrées historiques ci-dessous correspondent aux anciennes versions.

Démonstration de gameplay à valider — 6 septembre 2026

  • Vidéo locale finale : Saved/Gameplay/Donify-gameplay-validation.mp4, 1 min 24 s, 1600 × 1000 à 30 images/s, H264 et AAC stéréo. Le vol est continu, avec les commandes de production, sans téléportation ni accélération des pas physiques. Seule la pause finale au sol a été raccourcie depuis la prise de 90 secondes. Les légendes indiquent explicitement une démo scriptée en temps réel et un extrait de mission.
  • La seconde prise termine son atterrissage au temps de scénario 76,419 s, en X = −109,576 m, Y = 0,047 m, Z = 0,292 m. Le contact et la coupure des moteurs sont vérifiés par le scénario. Le maximum d'altitude mesurée est de 17,952 m ; le maximum de vitesse horizontale est de 5,350 m/s. Journal : Saved/Gameplay/Donify-demo-review-v2.recording/Unreal.log ; résultat technique : Saved/Gameplay/Donify-gameplay-validation.json.
  • L'enregistreur capture la fenêtre de son propre processus Unreal et son audio dans une sortie PulseAudio temporaire dédiée. Le microphone et les autres applications ne sont pas enregistrés. Le contrôle vidéo vérifie dimensions, durée, piste stéréo et signal non silencieux. Départ, vol, mode automatique, rotation de reprise et arrivée ont été examinés sur les images extraites.
  • La première prise a révélé un défaut réel de caméra au sol : la sonde de poursuite Unreal de rayon 12 cm commençait à l'intérieur de la plateforme, car le centre du microdrone n'est qu'à 2,2 cm au-dessus du support. Le rayon est maintenant de 1 cm. La collision caméra reste activée ; aucun changement de dynamique ou de géométrie du pad n'a été fait.
  • Une régression camera_clearance vérifie la caméra après les atterrissages sur le pad et la plateforme surélevée, sa rétraction devant un mur et son rétablissement après retrait de l'obstacle. 17 marqueurs PASS, dont les 13 contrôles physiques PASS du groupe physics, aucun FAIL ; check.sh exige maintenant ce nouveau scénario. Logs : Saved/Logs/Gameplay-camera-build.log, Saved/Logs/Gameplay-camera-validation.log et Saved/Logs/Gameplay-camera-regression.log. La dernière adaptation du séquencement de démonstration a compilé dans Saved/Logs/Gameplay-final-build.log et a été exécutée lors de la seconde prise.

La vidéo reste une proposition locale soumise à validation utilisateur. Aucun envoi d'assets vers R2, aucune création de dépôt GitHub et aucun push n'ont été effectués pendant cette préparation. Le parcours d'enregistrement est documenté dans GAMEPLAY_RECORDING.md.

Modularité — 6 septembre 2026

  • Trois modules Unreal déclarés et compilés : DonifySimulation, DonifyAudio, Donify. Compilation avec ./Scripts/build.sh -DisableUnity réussie, sans diagnostic de compilation, dans Saved/Logs/Modularity-build.log. Cette option compile chaque fichier séparément et vérifie que les inclusions ne dépendent pas d'un regroupement Unity.
  • python3 Scripts/check_architecture.py accepte les frontières actuelles. Dans une copie temporaire des sources, cinq violations injectées ont été rejetées : audio vers gameplay, simulation vers Engine, inclusion globale de Donify.h, accès à un en-tête privé d'un autre module, et module manquant dans .uproject. check.sh exécute désormais ce contrôle avant le jeu.
  • ./Scripts/check.sh -DonifyShot=9 -DonifyCaptureName=Donify-modular-cockpit.png termine avec le code 0 : 16 marqueurs PASS, 13 contrôles physiques PASS, aucun FAIL. Journal conservé : Saved/Logs/Modularity-validation.log ; sortie du script : Saved/Logs/Modularity-check.log. Les équations et les scénarios existants ont été déplacés sans changement de leurs calculs ou tolérances.
  • Capture à 1600 × 1000 examinée : Saved/Donify-modular-cockpit.png. Monde, panneaux, télémétrie et carte zoomée restent présents. L'échantillon de capture donne 46,54 FPS moyens et 33,31 ms au p95 ; il ne constitue pas un benchmark prolongé.
  • Vol explicite -DonifyAudioProbe -DonifyShot=9 terminé normalement : 14 sons, trois boucles, dix annonces, aucun repli nécessaire ; annonce armed déclenchée, motor_playing=1, wind_playing=1, gain moteur 0,271 et rapport de régime 1,006. Journal : Saved/Logs/Modularity-audio-probe.log. Cela vérifie la lecture côté moteur ; aucune nouvelle mesure du périphérique de sortie ni confirmation d'écoute utilisateur n'a été demandée.
  • Les classes de gameplay conservent le package /Script/Donify et les chemins des assets sont inchangés. Les scénarios de capture appartiennent désormais à l'instance du drone, au lieu d'utiliser des variables statiques partagées entre sessions.

Le découpage isole la simulation et l'audio ; le HUD, les missions et les collisions restent intégrés au pawn dans le module Donify. Le packaging, un clone vierge, Windows/macOS et deux relances PIE dans un même processus n'ont pas été validés ici. Voir ARCHITECTURE.md et CONTRIBUTING.md.

Mise à jour 0.7.1 — zoom, marque et audio

  • Compilation réussie : Saved/Logs/Map-audio-build.log. Les 16 contrôles existants repassent, script terminé avec le code 0 (Saved/Logs/Map-audio-check.log, Saved/Logs/Validation.log).
  • Carte initiale : champ de 160 m au lieu de 400 m, soit un zoom 2,5×. Boutons +/− bornés entre 80 et 640 m, échelle et projection mises à jour ensemble. Le recentrage sur la ville conserve une vue d'ensemble.
  • Aucune référence à DJI dans les sources du cockpit ; la police dédiée à ce logo a été supprimée. Capture réelle inspectée : Saved/Donify-cockpit-zoom.png à 1600 × 1000.
  • Audio : sortie HDMI rééquilibrée de gauche 119 % / droite 0 % à 70 % sur les deux canaux ; son hors focus activé dans le projet. Diagnostic audible confirmé par un signal sur les deux canaux de sortie, puis par l'utilisateur. Les détails et limites de la mesure figurent dans docs/AUDIO.md.

Mise à jour cockpit 0.7 — 6 septembre 2026

  • Compilation Unreal Development réussie : Saved/Logs/Cockpit-build.log. Les nouveaux panneaux arrondis utilisent un mélange alpha explicite ; les polices Roboto sont des UFont runtime conservées par le HUD.
  • ./Scripts/check.sh -DonifyShot=9 -DonifyCaptureName=Donify-cockpit.png a terminé avec le code 0 : 16 marqueurs PASS, aucun marqueur FAIL. Journal : Saved/Logs/Validation.log, 15:23 UTC. Les ajustements de présentation suivants déplacent la manette et ajoutent le flou localisé ; ils ont été recompilés et vérifiés visuellement sans nouvelle modification des lois de pilotage.
  • Le matériau de verre dépoli /Game/UI/M_CockpitGlass, créé par Scripts/create_cockpit_glass.py, a compilé sans erreur de shader et son masque a été examiné sur la capture finale. Le filtre gaussien ne concerne que le décor derrière les panneaux : la télémétrie est dessinée ensuite.
  • Capture réelle du cockpit à 1600 × 1000 examinée : Saved/Donify-cockpit.png. Télémétrie, boussole, graduations, carte circulaire et bandeaux restent visibles. La carte contient une capture de la scène, pas une image de référence figée.
  • Capture réelle avec aide et manette à 1280 × 800 examinée : Saved/Donify-cockpit-help-1280.png. Les panneaux ouverts restent dans la fenêtre et la manette ne recouvre plus les réglages caméra. Le script de lancement place désormais les dimensions explicites avant les valeurs par défaut, car Unreal lit la première occurrence.
  • Échantillon de six secondes du cockpit à 1600 × 1000 : moyenne 21,24 ms / 47,08 FPS, p95 32,15 ms, avec le verre dépoli actif (Saved/Logs/Cockpit-glass-capture.log, 15:31 UTC). La carte orthographique 512 × 512 est rafraîchie toutes les 0,75 s. Cet échantillon ne constitue pas une mesure prolongée.

La reproduction concerne la disposition et le style du cockpit. Les panneaux sont translucides avec flou gaussien localisé de la scène ; le logo est composé typographiquement. Les données de vol restent celles de la simulation. Le bouton rouge demande une vraie capture PNG ; la vidéo 4K et les capteurs GPS/radio ne sont pas implémentés. Ces captures vérifient l'affichage ; elles ne constituent pas un essai manuel de chaque bouton à la souris ni une nouvelle calibration de manette.

Les notes ci-dessous documentent les versions antérieures ; leurs anciennes descriptions du HUD et de la barre inférieure sont remplacées par le cockpit 0.7 décrit dans le README.

Validation de Donify 0.6.0 — 6 septembre 2026

Compilation réussie sous Unreal Engine 5.8.1 avec le compilateur livré par Epic. Exécution Vulkan sur NVIDIA RTX A5000. La rue témoin conserve le Tello reconstruit et son profil de 87 g avec protections. Les imports de sept scans PBR (21 cartes, douze matériaux Street…), douze maisons et leur module de stationnement, ainsi que six modèles végétaux sont terminés. Le dernier import des matériaux végétaux a corrigé l'interprétation sRGB de trois albedos PNG 16 bits par une conversion fidèle en 8 bits, avec une différence maximale de 1/255 par canal ; les fichiers originaux sont conservés.

Dynamique : 13 contrôles réussis

Les contrôles exécutent les équations de production de DroneDynamics.h dans Unreal :

  • Chute libre en vide après 1 s : z = 95,09667 m et vz = −9,80665 m/s, conformes à la solution analytique.
  • Stationnaire de 10 s : poussée de 0,85318 N, vitesse nulle.
  • Inclinaison de 20° : accélération longitudinale de 3,35407 m/s², conforme à la projection de la poussée.
  • Convention de roulis : une commande à droite accélère vers la droite.
  • Vent de 8 m/s en Angle : dérive de 17,71 m après 5 s.
  • Compensation du vent en mode stabilisé : vitesse résiduelle de 0,0106 m/s.
  • Coupure moteurs : poussée résiduelle nulle et chute accélérée.
  • Intégration de l'énergie de batterie, tension sous charge et cohérence puissance = tension × courant.
  • Lacet : sens et vitesse demandée respectés.
  • Acro : vitesse angulaire suivie sans redressement automatique.
  • Baisse de densité : diminution calculée de la portance.
  • Montée en régime : poussée de 0,16165 N après 20 ms, comparée à la réponse analytique des moteurs.
  • Consigne de croisière à 8 m/s : vitesse obtenue de 7,99983 m/s, vario −0,00031 m/s et inclinaison de 16,63°, inférieure à 25°.

Intégration Unreal : 15 scénarios réussis

  1. Mission par l'avenue et la périphérie à 18 m, approche et atterrissage, puis 2 s de stabilisation : position finale X = 10999,982 cm, Y = 9999,985 cm, Z = 29,201 cm ; vitesse nulle et moteurs coupés.
  2. Une commande manuelle interrompt la mission.
  3. Collision avec un obstacle indépendant du plan de ville : le drone reste du côté de départ et subit l'impact.
  4. Météo : vent nul au réglage zéro, réponse du vecteur vent au changement de consigne, densité plus élevée dans l'air froid. Les comparaisons se font à temps et altitude identiques ; elles ne dépendent pas de la phase d'une rafale à la fin de la mission.
  5. Affichage des commandes : stick diagonal, LT et RT simultanées, boutons Y/LB, relâchement, clavier W/Espace/T/Page haut et accords d'alias ZQSD/WASD. Les cinq sous-contrôles pressed, released, keyboard, aliases et neutral passent.
  6. Audio : les 14 sons sont chargés, avec 3 boucles, 10 voix et aucun repli actif. Les propriétés de boucle/durée, le silence en QA, la priorité des annonces, le rejet des annonces périmées et l'anti-répétition passent (queue=PASS). Les composants de lecture restent arrêtés durant ce contrôle ; il ne constitue pas une écoute sur les haut-parleurs de l'utilisateur.
  7. Commandes via la pile d'entrée Unreal réelle : X demande le décollage, B l'atterrissage, Y/A modifient l'entrée verticale et RT/LT le réglage de propulsion indépendamment. Un stick et RT déjà maintenus ne suppriment pas la demande B. L'appui court LB conserve le mode, le maintien ouvre la roue, les deux sticks sélectionnent sans commander le vol, le relâchement valide et une garde attend le neutre. Un relâchement répété et une déviation résiduelle ne suppriment pas cette garde. LS demande le freinage et consomme le stick encore incliné.
  8. Décollage depuis le pad jusqu'à environ 1,5 m, retour au manuel, puis atterrissage : aucune téléportation, coupure uniquement au contact, position finale Z = 29,248 cm et propulsion nulle.
  9. Même séquence sur une plateforme indépendante à 90,10 m : centre final Z = 9012,268 cm contre 9012,200 cm attendu. Le support est mesuré dans la scène, sans hauteur du pad imposée.
  10. Coupure et reprise (direct_power, nom historique) : zéro impose une poussée demandée nulle même avec Y, puis RT relance les moteurs pendant la chute en conservant position et vitesse continues. Le réglage atteint 50 % puis 100 %, le drone réduit sa vitesse de chute et LT peut revenir à zéro. Tous les indicateurs zero, continuous, half, full, recovery, cutoff passent. Ce réglage pilote désormais la vitesse de croisière en manuel stabilisé ; il n'impose plus un collectif fixe non nul.
  11. Priorité du collectif dans le mélangeur Angle de laboratoire : les corrections d'attitude n'augmentent pas la poussée demandée. À zéro, la consigne est exactement nulle tandis que les hélices décélèrent physiquement ; à 3 %, la poussée demandée vaut 0,051191 N, conforme au collectif prévu.
  12. Maintien manuel : après le décollage, dérive verticale de 0,0016 m en 30 s sans commande. Y puis A modifient la hauteur, leur relâchement tient la nouvelle cible. Après freinage, 30 s de vent moyen à 3 m/s et de rafales produisent un écart final de position de 0,1331 m, sous le seuil de 0,30 m.
  13. Croisière manuelle : après retour progressif du joystick au centre, la vitesse et l'altitude restent tenues pendant 30 s. Les erreurs finales sont inférieures à 0,0001 m/s et 0,0001 m dans ce scénario calme. Le lacet et la re-sélection MANUEL conservent la trajectoire mondiale ; RT/LT augmentent/réduisent la vitesse sans changer l'altitude. Une montée à 2 m/s peut accompagner la croisière maximale de 8 m/s sans réduction artificielle de la consigne horizontale (combined=1).
  14. Menu en croisière : les sticks, Y/A et gâchettes bloqués pendant l'ouverture ne changent ni la direction, ni la vitesse cible, ni le réglage de propulsion, ni la cible d'altitude.
  15. Reprise après chute : RT capture l'altitude atteinte au moment de la relance, sans revenir à l'ancienne cible. La position et la vitesse restent continues ; après 25 s de récupération, l'erreur d'altitude vaut 0,0013 m.

Les essais d'entrée injectent des événements dans UPlayerInput, puis lisent les mêmes états Unreal que l'affichage en session normale. Les valeurs analogiques incluent les zones mortes de pilotage. Ils ne constituent pas un essai manuel sur une manette physique.

Reproduction : ./Scripts/check.sh. Le script exige les seize marqueurs PASS (physique et quinze scénarios) et retourne un code non nul si un contrôle manque ou échoue. Dernière exécution : ./Scripts/check.sh -DonifyShot=9 -DonifyCleanCapture, sortie 0, journal Saved/Logs/Validation.log à 14:55 UTC le 6 septembre 2026. Les 13 contrôles physiques passent également.

Les 14 sources audio ont aussi été vérifiées : PCM 16 bits mono 48 kHz, durées non nulles, empreintes conformes au manifeste, aucune saturation et extrémités à zéro pour les sons ponctuels. Le test de cache interdit tout appel réseau et vérifie la réutilisation des sources déjà générées. La clé reste dans .env et n'est pas incorporée au jeu. Provenance et reproduction : docs/AUDIO.md.

Examen visuel

Trois captures réelles de la version 0.6 ont été examinées à 1600 × 1000 après compilation et import final des matériaux :

  • Depuis le drone (Saved/Donify-reference-street.png, local development artifact), à 14:55 UTC : continuité des toitures, fenêtres en retrait, végétation verte et route aux dimensions métriques.
  • À hauteur de rue (Saved/Donify-reference-close.png, local development artifact), à 14:56 UTC : vraies ouvertures, vitrages translucides, rideaux, volets ajourés, tuiles, encadrements, gouttières et matériaux de sol photographiques.
  • Vue aérienne (Saved/Donify-reference-aerial.png, local development artifact), à 14:57 UTC : implantation des douze nouvelles maisons, arbre/arbuste distincts, raccords des toits et transition vers les bâtiments conservés.

Le feuillage auparavant blanchi est corrigé dans les trois vues éclairées. Les raccords des toits sont fermés ; une vérification géométrique Blender de 193 548 rayons verticaux sur les douze maisons n'a trouvé aucune ouverture dans les couvertures. Les maisons totalisent 1 143 142 triangles et 44 volumes convexes de collision préparés. Les véhicules restent les modèles de la version 0.5.

Les journaux confirment 24 bâtiments principaux, huit annexes, 32 empreintes de carte, 32 voitures, 1 888 arbres de la génération précédente, 48 nouveaux arbres, 173 arbustes/couvre-sol et 32 820 arbres lointains sur plans croisés. Le terrain fait 3,84 km de côté. Aucun échec de chargement d'asset, erreur de compilation de shader, matériau de remplacement pour usage Nanite manquant ni débordement d'ombres n'apparaît dans les trois journaux finaux. Des avertissements génériques du runtime/éditeur restent présents ; ces journaux ne sont pas dépourvus de tout avertissement.

Les temps d'image sont relevés dans Unreal sur environ six secondes après quatre secondes d'échauffement, après compilation des shaders. Le plafond effectivement actif est nul (active_cap_fps=0.0, fréquence non plafonnée), malgré la valeur initiale de 60 dans la configuration du projet.

Vue Images échantillonnées Temps moyen Fréquence moyenne 95e percentile du temps d'image
Depuis le drone, Shot 9 295 20,36 ms 49,10 FPS 29,77 ms
Rue, Shot 10 321 18,71 ms 53,44 FPS 26,81 ms
Aérienne, Shot 11 280 21,42 ms 46,68 FPS 29,69 ms

Ces échantillons courts sur des vues fixes ne garantissent pas une fréquence constante en vol ou sous toutes les météos. Les journaux sont Saved/Logs/Validation.log, Saved/Logs/Reference-close-capture.log et Saved/Logs/Reference-aerial-capture.log.

Les sources et la reproduction de la rue sont décrites dans REFERENCE_STREET.md. Les anciennes captures Saved/Donify-town-street-v2.png, Saved/Donify-town-cars-v2.png et Saved/Donify-town-aerial-v2.png documentent la version 0.5. La référence générée et ses prompts restent dans ENVIRONMENT_REALISM.md ; cette référence ne représente pas le rendu réel du jeu.

La capture historique 0.4.1 Saved/Donify-stabilized-flight.png documente l'interface et le maintien en vol avant la refonte de la ville. Tous les contrôles sont au repos ; la télémétrie affiche 18,7 km/h, un vario nul et une cible de 55 m. Les panneaux, la manette et la barre de boutons restent dans la fenêtre sans se chevaucher. Les RPM réels et les cibles sont distingués du réglage de propulsion.

Les captures de la version 0.4 ci-dessous avaient été examinées à 1600 × 1000 et 1280 × 800 ; leurs anciens libellés de pilotage ne décrivent plus le manuel stabilisé :

  • Saved/Donify-mode-menu.png : deux secteurs MANUEL/AUTO, sélection et mission qui continue en arrière-plan, avec la carte et la manette visibles.
  • Saved/Donify-mission-map.png : carte translucide en vol, bâtiments, points numérotés, route prévue, trace réelle et cap du drone.
  • Les captures antérieures Donify-tello-drone.png, Donify-tello-rain.png et Donify-controller-inputs.png documentent le modèle et les ambiances de la version précédente ; leurs anciennes commandes ne décrivent pas le nouveau pilotage.

La caméra de poursuite limite son retard spatial à 12 cm pour garder le petit drone dans le cadre pendant les accélérations. Le panneau des commandes reste distinct de l'attitude et du pilote automatique ; les boutons cliquables, dont Redémarrer, restent dans la barre inférieure.

Limites

L'environnement combine une implantation procédurale, des maisons modélisées, des matières scannées et des modèles végétaux externes ; il ne reconstruit pas une ville réelle par photogrammétrie. La périphérie conserve ses anciennes maisons et textures générées. Les pièces derrière les nouvelles fenêtres servent au rendu et ne sont pas visitables. Les voitures restent stationnées et leurs collisions sont simplifiées. Les arbres lointains sont des plans croisés sans collision ni ombre portée. Le résultat de la rue témoin reste distinct du photoréalisme de la référence artistique.

Cette validation vérifie la cohérence du simulateur ; elle n'est pas une calibration contre des mesures de vol du Tello réel. La géométrie est reconstruite à partir de l'image, sans modèle 3D du fabricant. Les inerties, coefficients de traînée, gains et propulsion restent estimés ; voir Docs/FlightPhysics.md.

Les collisions utilisent une enveloppe rigide simplifiée, sans contact individuel des pales. Le repos utilise une contrainte de support et de friction statique vérifiée à chaque sous-pas. La météo ne résout pas l'écoulement autour de chaque bâtiment. Les capteurs, la liaison radio et le firmware Tello ne sont pas reproduits. Les modes Angle/Acro sont expérimentaux. Le son est synthétique. Aucune mesure de latence matérielle ni de performances prolongées n'a été effectuée. GPT n'est pas connecté.