three-mesh-bvh : une implémentation de BVH pour le raycasting et les requêtes spatiales dans three.js
gkjohnson/three-mesh-bvh offre une implémentation open source exploitable en conditions réelles avec une structure réutilisable.
En bref
- De quoi s’agit-il ?
- Une bibliothèque qui construit des hiérarchies de volumes englobants pour les géométries three.js afin d'accélérer le raycasting et de prendre en charge des requêtes spatiales comme les intersections de sphères et les tests de points les plus proches.
- À qui s’adresse-t-il ?
- three-mesh-bvh convient aux applications Three.js avec beaucoup de triangles et des requêtes répétées. Il apporte peu à une scène minuscule où le coût de construction dépasserait le gain.
- Puis-je l’utiliser commercialement ?
- Oui. MIT est une licence permissive : vous pouvez utiliser, modifier et vendre un logiciel qui en dépend, à condition de conserver les mentions de droit d’auteur et de licence.
- Est-il encore maintenu ?
- Oui. Les derniers commits datent d’il y a 6 jours.
- En quel langage est-il écrit ?
- Principalement JavaScript, d’après les statistiques de langage de GitHub.
Ces réponses reposent sur les données GitHub du projet (dernière synchronisation le 14 septembre 2026) et sur notre analyse. Elles ne constituent pas un avis juridique.
ANALYSE OPEN SOURCE APPROFONDIE
gkjohnson-three-mesh-bvh : périmètre documenté
three-mesh-bvh ajoute une structure de bounding volume hierarchy pour accélérer les intersections, le raycasting et certaines opérations sur les maillages Three.js.
three-mesh-bvh est une bibliothèque JavaScript qui construit une hiérarchie de volumes englobants (BVH) pour les objets BufferGeometry de three.js. Le README la décrit comme un moyen d'accélérer le raycasting et de permettre des requêtes spatiales sur les maillages. L'exemple principal montre 500 rayons projetés sur un modèle de 80 000 polygones à 60 images par seconde. Une BVH organise la géométrie en un arbre de volumes englobants, de sorte que les tests d'intersection de rayons peuvent ignorer de grandes parties du maillage qui n'intersectent pas le rayon. Le projet inclut un lien vers l'article Wikipédia sur les hiérarchies de volumes englobants pour les lecteurs peu familiers avec la technique.
gkjohnson-three-mesh-bvh : flux d’utilisation
L’optimisation vise les scènes où tester chaque triangle devient coûteux. La bibliothèque fournit aussi des parcours et des opérations liés à la géométrie; la mémoire, la construction de l’arbre et les options de split doivent être mesurées sur votre maillage.
Le README montre deux façons d'utiliser la bibliothèque. La première consiste à patcher les prototypes de three.js avec des fonctions comme computeBoundsTree et acceleratedRaycast, puis à appeler computeBoundsTree sur une géométrie pour générer une BVH. La seconde consiste à construire manuellement un MeshBVH et à l'affecter à la propriété boundsTree de la géométrie. Ensuite, le raycasting via le Raycaster de three.js fonctionne avec la fonction accélérée. Le README note également que définir raycaster.firstHitOnly sur true fait que la fonction raycast utilise un chemin plus rapide 'raycastFirst'.
gkjohnson-three-mesh-bvh : configuration observée
Un test utile construit un `THREE.BufferGeometry`, génère son BVH puis compare le résultat de `raycastFirst` ou du raycast accéléré à celui de Three.js. Mesurez temps de construction, temps d’intersection et comportement après modification des attributs de position.
des maillages triangulaires, la bibliothèque fournit PointsBVH, LineBVH, LineLoopBVH et LineSegmentsBVH pour les géométries THREE.Points, THREE.Line, THREE.LineLoop et THREE.LineSegments. Celles-ci peuvent être utilisées en passant une option type à computeBoundsTree ou en construisant directement la classe. Chaque type de BVH implémente une API de base incluant shapecast et raycastObject3D pour son type de primitive. Le README note que certaines fonctionnalités comme la génération par web worker et la sérialisation ne sont pas prises en charge pour ces BVH spécialisées pour le moment.
gkjohnson-three-mesh-bvh : contrôle ciblé
La compatibilité dépend des versions de Three.js et du mode d’import choisi. Un maillage dynamique peut exiger une reconstruction ou une mise à jour explicitement documentée; ne supposez pas qu’une mutation est détectée automatiquement.
Pour les applications qui nécessitent plus de contrôle, l'instance MeshBVH peut être interrogée directement. L'exemple du README utilise bvh.raycastFirst(ray) pour obtenir le premier hit, et bvh.intersectsSphere(sphere) pour tester l'intersection de sphère. Les requêtes opèrent dans l'espace géométrique local, donc le rayon ou la sphère doit être transformé par la matrice inverse du monde du maillage, et les résultats comme hit.point doivent être retransformés dans l'espace du monde. Le README avertit que lors de l'utilisation du raycasting intégré de three.js, les résultats sont automatiquement convertis en coordonnées du monde.
gkjohnson-three-mesh-bvh : public concerné
three-mesh-bvh convient aux applications Three.js avec beaucoup de triangles et des requêtes répétées. Il apporte peu à une scène minuscule où le coût de construction dépasserait le gain.
La bibliothèque prend en charge la sérialisation d'une BVH sous une forme compacte et sa désérialisation ultérieure via MeshBVH.serialize et MeshBVH.deserialize. Pour les grandes géométries, une génération asynchrone est disponible via GenerateMeshBVHWorker, exporté depuis le sous-chemin 'three-mesh-bvh/worker'. Une variante parallèle, ParallelMeshBVHWorker, utilise SharedArrayBuffer quand il est disponible et retombe sur le worker mono-thread sinon. Le README conseille que la géométrie passée au worker parallèle ait des tableaux position et index adossés à SharedArrayBuffer pour éviter les copies de tampons.
L’optimisation vise les scènes où tester chaque triangle devient coûteux. La bibliothèque fournit aussi des parcours et des opérations liés à la géométrie; la mémoire, la construction de l’arbre et les options de split doivent être mesurées sur votre maillage. Contrôle complémentaire 1 pour gkjohnson-three-mesh-bvh-deep-analysis: comparez la sortie observée avec le fichier et la commande cités.
Conclusion éditoriale
three-mesh-bvh convient aux applications Three.js avec beaucoup de triangles et des requêtes répétées. Il apporte peu à une scène minuscule où le coût de construction dépasserait le gain. La licence MIT autorise l'utilisation, la copie, la modification, la fusion, la publication, la distribution, la sous-licence et la vente de copies, à condition que l'avis de droit d'auteur soit inclus. Le texte de la licence ne mentionne pas de support, de garantie ou d'obligations de maintenance ; le logiciel est fourni « tel quel ».
Notes de la communauté