Table des matières
WearTrailsExperiments
WearTrailsExperiments regroupe des prototypes web qui transforment le contact entre un corps qui glisse et le sol en cartes persistantes d’usure et de flux. Ils explorent en JavaScript l’idée de la recherche de maîtrise à l’ÉTS sur l’usure dans l’espace texture : zones de contact, vitesse tangentielle et traction écrites dans une texture, là où le contact a réellement eu lieu. Le dépôt est publié sous ETSim pour les chercheurs en rendu qui veulent essayer ces idées sans construire de simulateur natif.
1. Aperçu
Le dépôt a deux parties.
docs/, l’application modulaire. docs/index.html charge three.js 0.158 et Ammo.js depuis un CDN et lance js/main-clean-complete.js. Un corps (cube, cube mou volumique, sphère, palet torique, palet cylindrique, cône ou GLB personnalisé) tombe sur un plan avec gravité, frottement, restitution, vitesse et force réglables. À chaque image :
js/contacts.jséchantillonne les points de contact et leur centre ;js/bounding-box/ajuste la zone de contact par AABB, OBB par ACP, OMBB par calipers tournants, KDOP-8 ou une méthode hybride ;js/pip/affiche huit vignettes : masques du dessus, du dessous et d’intersection, vitesse tangentielle, traction instantanée (τ = μ σn), distance de glissement cumulée, distance de glissement locale avec vecteurs de direction, et usure locale ;js/managers/flow-accumulation-manager.jscumule l’usure au sol sous la forme K × traction × vitesse, garde une direction de glissement lissée dans le temps et encode le tout en HSVA ou RGBA ;js/managers/ground-variant-manager.jscharge un sol GLB à variantes de matériaux et les mélange selon la carte d’usure, en faisant pivoter les textures dans le sens du flux ;js/shaders/wear-map-shader.jscolore la carte de distance glissée, avec une échelle logarithmique en option.
experiments/, des prototypes en un seul fichier. Neuf pages HTML autonomes, nommées d’après leur contenu : masques de contact, dynamic paint avec traces UV et enveloppes OBB, champs vectoriels de glissement, peinture multicouche avec prise en charge des GLB, simulations d’usure directionnelle et selon la dureté, et mélange GLB/champ de flux. docs/glb_khr_variants_blend.html est un test plus court de mélange de variantes de matériaux glTF avec une carte en niveaux de gris.
2. Cas d’utilisation
Expériences web qui transforment le contact et le glissement de corps rigides en cartes d'usure et de flux sur une texture de sol.
- Faire glisser un corps
- Chercheur en renduNavigateur (WebGL)CDN three.js/Ammo.js
docs/index.html charge three.js 0.158 et Ammo.js depuis un CDN, puis main-clean-complete.js lâche un cube, une sphère, un palet, un cône, un cube mou ou un GLB sur un plan avec vitesse, force et frottement réglés.
- Comparer les boîtes de contact
- Chercheur en renduNavigateur (WebGL)
docs/js/bounding-box/ ajuste la zone de contact par AABB, OBB par ACP, OMBB par calipers tournants, KDOP-8 ou une méthode hybride.
- Examiner les vues de contact
- Chercheur en renduNavigateur (WebGL)
Huit vignettes montrent les vues du dessus, du dessous et d'intersection, la vitesse tangentielle, la traction instantanée, la distance de glissement cumulée et l'usure locale.
- Accumuler l'usure au sol
- Chercheur en renduNavigateur (WebGL)
FlowAccumulationManager ajoute K x traction x vitesse dans des tampons du sol et conserve la direction de glissement, encodée en HSVA ou RGBA.
- Mélanger des variantes GLB
- Chercheur en renduNavigateur (WebGL)
GroundVariantManager charge un sol GLB à variantes de matériaux et utilise l'usure cumulée comme carte de mélange et la direction du flux pour pivoter les textures.
- Exporter les cartes en PNG
- Chercheur en renduNavigateur (WebGL)
Export Wear Map et Save Stamps enregistrent les canevas du sol en PNG par un lien de téléchargement.
2.1. Scénario : Enregistrer la trace d'usure d'un cube qui glisse
- Servir le dossier docs/ avec python -m http.server 8000 et ouvrir http://localhost:8000.
- Choisir Cube (subdiv 10), l'algorithme OBB (PCA-based) et une valeur de frottement, puis cliquer sur Start.
- Utiliser Pause, Step Frame et Apply Angular Impulse pour suivre la zone de contact dans les vignettes.
- Basculer l'encodage d'usure entre HSVA (Direction + Wear) et RGBA pour lire direction et quantité.
- Cliquer sur Export Wear Map pour enregistrer en PNG la carte cumulée du sol.
Fichiers consultésREADME.mddocs/README.mddocs/index.htmldocs/js/main-clean-complete.jsdocs/js/bounding-box/index.jsdocs/js/pip/pip4.jsdocs/js/pip/pip5.jsdocs/js/pip/pip6.jsdocs/js/pip/pip7.jsdocs/js/pip/pip8.jsdocs/js/managers/flow-accumulation-manager.jsdocs/js/managers/ground-variant-manager.jsdocs/js/shaders/wear-map-shader.jsexperiments/Contact_mask.html
3. Démarrage
Les pages utilisent des modules ES et ont donc besoin d’un serveur web local. D’après le README de docs/ :
cd docs
python -m http.server 8000
# ouvrir http://localhost:8000
Cliquer sur Start, régler les contrôles du panneau de gauche et observer les vignettes. Pause, Step Frame et Apply Angular Impulse aident à suivre un contact, et Export Wear Map ou Save Stamps enregistrent les cartes du sol en PNG. Les pages de experiments/ s’ouvrent de la même façon. Une connexion Internet est nécessaire pour les bibliothèques chargées par CDN.
4. Guide du dépôt
docs/index.html: page principale avec son panneau de contrôle.docs/js/main-clean-complete.js: module d’entrée.docs/js/main.jsest un autre module d’entrée queindex.htmlne charge pas.docs/js/bodies/crée les corps physiques,docs/js/body-manager.jsgère leur cycle de vie.docs/js/bounding-box/: algorithmes d’ajustement de la zone de contact.docs/js/pip/: les huit rendus en vignette.docs/js/managers/: gestionnaires de scène, de physique, de sol, de tamponnage, de champ et flux, d’accumulation d’usure et de variantes GLB.docs/js/shaders/wear-map-shader.js: shader GLSL de la carte d’usure.experiments/: les prototypes HTML autonomes.
5. Fonctionnalités
- Corps rigides et mous sur la physique Ammo.js, y compris des modèles GLB personnalisés.
- Cinq méthodes d’ajustement de la zone de contact, avec alignement de l’OBB sur la vitesse.
- Vues en direct des masques de contact, de la vitesse tangentielle, de la traction, de la distance glissée et de l’usure.
- Usure cumulée au sol de façon persistante, effacée seulement sur demande, avec une direction de glissement lissée dans le temps.
- Mélange de variantes de matériaux GLB piloté par l’usure cumulée.
- Export PNG des tampons et des cartes d’usure et de flux.
6. Limites
- Ce sont des prototypes de recherche : le modèle d’usure est une heuristique visuelle dans des tampons de canevas, pas un modèle tribologique calibré.
docs/README.mddécrit une ancienne organisation (stamp/,field-flow/, six vignettes) qui ne correspond plus aux fichiers, et le README principal tient en une phrase.- Les bibliothèques viennent de CDN, dont Ammo.js tiré d’une branche mouvante (
@HEADou@main) dans plusieurs pages ; le comportement peut donc changer sans modification du code. - La plupart des expériences utilisent three.js 0.160, l’application la version 0.158.
- Le README signale que l’angle de l’OBB peut trembler à basse vitesse et que les GLB personnalisés devraient être convexes.
- Ni tests ni étape de build.
7. Sources
- Dépôt GitHub
- README
docs/README.mddocs/js/main-clean-complete.jsdocs/js/managers/flow-accumulation-manager.jsdocs/js/managers/ground-variant-manager.js
8. Pipeline CI/CD
Aucun pipeline CI/CD dans le dépôt. Le code se construit et se lance à la main, comme décrit plus haut.
Généré à partir du code au commit 065ad38.
9. Schéma de déploiement
Mermaid Schéma de déploiement
flowchart LR
repo[("Dépôt GitHub")]
local["Poste local"]
repo -->|"cloner et lancer"| local
Le dépôt ne contient ni Dockerfile, ni fichier Compose, ni configuration d’hébergement : le code s’exécute sur le poste qui le clone.
10. Dépendances externes
Le dépôt ne déclare aucun paquet externe : aucun manifeste (pyproject.toml, requirements.txt, package.json, pom.xml…) n’y figure.
11. Glossaire
Dépôt
Les fichiers source, la configuration et l’historique versionné d’un projet.
README
Le document d’entrée du dépôt, qui présente généralement son rôle et son installation.
Dépendance
Une bibliothèque, un outil ou un service nécessaire à la compilation ou à l’exécution d’un composant.
HTTP
Un protocole de requête et réponse utilisé par les navigateurs et services web. Une requête comprend une méthode, un chemin, des en-têtes et parfois un corps.
Volume et montage de dossier
Un volume est un stockage géré par la plateforme de conteneurs ; un montage de dossier expose un chemin de l’hôte dans un conteneur.
Interface en ligne de commande
Une interface textuelle où les commandes et arguments choisissent les opérations. Les codes de retour permettent aux scripts de détecter un succès ou un échec.
Compilation
Les étapes qui transforment les sources et dépendances en programme exécutable ou en livrable distribuable.
GPU
Un processeur conçu pour les calculs parallèles, dont le rendu graphique et de nombreuses opérations numériques.
Shader
Un programme exécuté à une étape d’un pipeline graphique ou de calcul, par exemple pour transformer des sommets ou calculer la couleur des pixels.
12. Références
- ETSim. (2026, 5 novembre). [Web page] github.com.
- ETSim. (2026, 5 novembre). WearTrailsExperiments. [Software repository] github.com.
- ETSim. (2026, 5 novembre). README. [Source file or documentation] github.com.
- ETSim. (2026, 5 novembre). docs/README.md. [Source file or documentation] github.com.
- ETSim. (2026, 5 novembre). docs/js/main-clean-complete.js. [Source file or documentation] github.com.
- ETSim. (2026, 5 novembre). docs/js/managers/flow-accumulation-manager.js. [Source file or documentation] github.com.
- ETSim. (2026, 5 novembre). docs/js/managers/ground-variant-manager.js. [Source file or documentation] github.com.
Les sources sans date de publication indiquent la date de leur dernière vérification, le 5 novembre 2026. Les liens des fichiers conservent la révision inspectée lorsqu’elle est disponible.