Bonnes pratiques
3DVue
Guides techniques pour préparer vos fichiers 3D, vos textures, vos BAT et intégrer le configurateur sur votre site. Mis à jour en avril 2026.
Préparer vos fichiers 3D
Formats acceptés, règles de conversion et bonnes pratiques Blender pour une intégration sans friction.
Formats acceptés
La plateforme 3DVue accepte plusieurs formats 3D. Le GLTF est le format recommandé : il offre le meilleur rapport qualité/poids pour le rendu web temps réel.
Conversion depuis SolidWorks : STEP / STL → GLTF
Les fichiers issus de logiciels CAO (SolidWorks, Fusion 360, CATIA) sont généralement en formats .STEP, .STP ou .STL. Ils doivent être convertis avant intégration.
1. Ouvrir FreeCAD 2. Importer le fichier STEP/STL Ctrl + I → sélectionner votre fichier .stp ou .stl 3. Exporter en GLTF ou DAE Ctrl + E → choisir format DAE ou GLTF Convertisseur en ligne (alternative rapide) : https://imagetostl.com/fr/convertir/un-fichier/stp/en/glb
Export depuis Blender
Si vous travaillez directement dans Blender, voici les réglages d'export GLTF recommandés pour la plateforme 3DVue. Utiliser la compression Draco réduit significativement le poids du fichier.
Format : glTF Binary (.glb) ← embarque tout dans un seul fichier Compression : Draco activé ← réduit le poids de 60 à 80% Textures : Include → cocher Matériaux : Export materials → cocher Transformations : Apply → cocher ← obligatoire, voir section Transformations
Nommage des collections Blender
Des scripts automatisent l'export des GLTF et des UV maps. Pour qu'ils fonctionnent correctement, les collections Blender doivent respecter une structure précise.
Collection └── nom-du-produit ← sans accent ni espace ├── modelisation ← tous les objets 3D └── gltf ← fichiers d'export générés Exemples corrects : nom-du-produit : fauteuil-butterfly ✓ nom-du-produit : table-tolix-a ✓ Exemples incorrects : nom-du-produit : Fauteuil Butterfly ✗ majuscule + espace nom-du-produit : siège-étagère ✗ accent
Transformations & échelle
- Toujours appliquer les transformations Ctrl + A → Toutes les transformations avant export : sinon les UV sont incorrects
- Travailler à l'échelle 1 (comme dans le vrai monde en mètres) : évite les erreurs d'échelle dans le configurateur
- Si un objet ne touche pas le sol (ex: pendentif, luminaire suspendu), ajouter un plan invisible nommé RA de taille 0.0001m en position 0,0,0 pour la réalité augmentée
UV Mapping
Le dépliage UV conditionne la qualité du rendu des textures. Un UV mal fait crée des distorsions visibles : le motif s'étire ou se compresse sur certaines faces.
Addons Blender recommandés
Ces addons sont utilisés systématiquement par l'équipe 3DVue pour garantir des UV de qualité sur tous les projets.
| Addon | Usage principal |
|---|---|
| UV Toolkit | Checker map pour visualiser les distorsions UV : indispensable pour vérifier la qualité du dépliage avant export |
| Texel Density | Assure une cohérence de densité entre tous les objets d'un même projet. Si un bois apparaît dans plusieurs objets, il doit toujours avoir la même "taille" apparente |
| UVPackmaster | Optimise le placement des îles UV sur la carte, gère l'orientation selon le sens des objets (utile pour le bois, les tissus à motifs directionnels) |
| Mio3 | Rectifie les UV déformés, permet de superposer des UV similaires (gain de place sur la carte UV) |
Cohérence du Texel Density
Le texel density définit combien de pixels de texture couvrent une surface réelle donnée. Si deux objets d'un même client ont des texel densities différents, une texture bois aura une taille différente sur chaque objet : ce qui n'est pas réaliste.
Privilegier les dépliages UV basés sur des coutures (seams) avec la méthode Conformal : sauf pour les objets avec une couleur uniforme (uni) qui n'ont pas besoin d'un dépliage précis.
UV pour les BAT SVG
Quand le configurateur utilise un BAT SVG (personnalisation avec upload de logo ou texte), des règles supplémentaires s'appliquent au dépliage UV.
- Tous les UV doivent tenir sur une seule carte UV
- Exporter la carte UV en 4096×4096 px
- Le GLTF doit correspondre exactement à la carte UV exportée
- Un script Blender automatise l'export du GLTF et de la UV map : les collections doivent être correctement nommées pour qu'il fonctionne
- Si besoin, peindre sur la carte UV pour aider la création du fichier Illustrator (alignement de motifs)
Textures PBR
Nommage, formats et spécifications pour les fichiers de texture compatibles avec la plateforme 3DVue.
Nommage des fichiers de texture
Chaque couche PBR correspond à un fichier de texture avec un nom standardisé. La plateforme identifie le rôle de chaque texture par son nom.
| Nom de fichier | Rôle | Support |
|---|---|---|
| albedo | Couleur de base de la matière (aussi appelé diffuse) | ✅ Complet |
| roughness | Niveau de brillance : blanc = mat, noir = brillant | ✅ Complet |
| metallic | Propriétés métalliques : reflets environnement | ✅ Complet |
| normal | Relief en trompe-l'œil : simule les bosses et creux sans polygones | ✅ Complet |
| emissive | Zones lumineuses (LED, écrans, parties rétroéclairées) | ✅ Complet |
| occlusion | Ombres de contact entre surfaces (ambient occlusion) | ✅ Complet |
| bump | Alternative à la normal map : non pris en charge si une normal map est déjà présente | ⚠️ Ignoré si normal présent |
| alpha | Transparence : à tester selon le cas d'usage, non compatible RA | ⚠️ Non compatible RA |
Formats & résolution
- Format carré obligatoire : 1024×1024 ou 2048×2048 (maximum 2K)
- Format de fichier : PNG (recommandé pour transparence et qualité) ou JPEG (plus léger)
- Une normal map trop lourde peut être compressée sans perte visible via imagecompressor.com
Créer un BAT SVG
Guide Illustrator pour les projets avec personnalisation : upload de logo, texte gravé, zones de marquage. Le BAT SVG est le fichier de production généré par le configurateur.
Règles générales
- Format carré obligatoire, résolution 4K (4096×4096 px)
- Nommage : BAT-nomdumodele-dimension_albedo.svg
- Aucun accent, aucun espace dans le nom du fichier
- Tous les éléments éditables doivent être vectorisés dans le SVG : aucun élément raster
Format : BAT-nomdumodele-dimension_albedo.svg Exemples : BAT-maillotmatch-tailleL_albedo.svg ✓ BAT-gobelet-25cl_albedo.svg ✓ BAT-maillot match taille L albedo.svg ✗ espaces interdits BAT-maillotmatch-tailléL_albedo.svg ✗ accent interdit
Structure des calques Illustrator
Les calques Illustrator doivent être organisés selon une structure précise pour que le configurateur puisse identifier les zones éditables et les zones de référence.
| Nom du calque | Rôle | Toucher ? |
|---|---|---|
| masqué | Calque de travail : éléments de test ou mis de côté sans suppression | ✅ Libre |
| non vecto | Textes non vectorisés gardés pour réutilisation : non exportés | ✅ Libre |
| gabarit | Limites du modèle 3D : guide de placement, ne pas modifier | 🚫 Ne pas toucher |
| logo | Tous les logos renommés correctement | ✅ Libre |
| design, design-1, design-2… | Éléments graphiques de chaque variante de design | ✅ Libre |
| présentation | Template commun à tous les designs : ne pas modifier | 🚫 Ne pas toucher |
Export SVG depuis Illustrator
- Vectoriser tous les éléments éditables avant export : Maj + Ctrl + O
- Nommer le fichier exporté avec la convention nomdudesign_albedo.svg
- Aucun élément raster dans le fichier exporté : tout doit être vectoriel
- Vérifier que les calques gabarit et présentation sont masqués à l'export
Maj + Ctrl + O : vectoriser la forme sélectionnée
Ctrl + C : copier
Ctrl + Maj + V : coller au même emplacement
Script de renommage Illustrator
Script JSX pour renommer automatiquement les calques sélectionnés au format color_XXX. Gain de temps considérable sur les projets avec de nombreuses zones éditables.
Installation
1. Copier le code ci-dessous dans un fichier texte 2. Renommer le fichier en RenameColor.jsx 3. Copier dans le dossier scripts Illustrator : C:\Program Files\Adobe\Adobe Illustrator 2026\Presets\fr_FR\Scripts\ 4. Exécuter depuis Illustrator : Fichier → Script → RenameColor
Code du script
// Script Rename Color : Ultra Rapide // Renomme tous les objets sélectionnés en "color_XXX" (function() { if (app.documents.length === 0) { alert("Veuillez ouvrir un document Illustrator."); return; } var doc = app.activeDocument; var selection = doc.selection; if (selection.length === 0) { alert("Veuillez sélectionner au moins un objet à renommer."); return; } var number = prompt("Numéro (ex: 001, 002, etc.) :", "001"); if (number === null || number === "") { return; } var finalName = "color" + number; for (var i = 0; i < selection.length; i++) { selection[i].name = finalName; } alert(selection.length + " objet(s) renommé(s) en : " + finalName); })();
Intégrer le viewer 3DVue
Le viewer 3DVue est un Web Component natif. Il fonctionne dans tout environnement HTML : Shopify, WooCommerce, PrestaShop, WordPress, ou site custom.
Inclure le script
Ajoutez le script une seule fois dans votre <head> ou avant </body>. Une inclusion suffit pour toutes les pages de votre site.
<script src="https://cdn.jsdelivr.net/gh/3dvue/api@v4/viewer-3dvue-min.js"></script>
Déclarer le composant
Placez la balise <viewer-3dvue> là où vous souhaitez afficher le viewer. Deux attributs sont requis : name (identifiant unique sur la page) et src (URL de votre configurateur, fournie par 3DVue à la livraison).
<!-- Attributs requis --> <viewer-3dvue name="monViewer" src="https://app.3dvue.fr/view?p=AB01-CD02" ></viewer-3dvue> <!-- Avec debug activé (logs console) --> <viewer-3dvue name="monViewer" src="https://app.3dvue.fr/view?p=AB01-CD02" debug ></viewer-3dvue>
Contrôle sans JavaScript
Le composant écoute automatiquement les événements click et change sur tout élément portant les attributs ci-dessous. Aucun JavaScript à écrire.
| Attribut | Valeur | Usage |
|---|---|---|
| viewer-3dvue | Nom du viewer ciblé | Obligatoire sur tout élément déclencheur |
| viewer-3dvue-clic | setMaterial | Déclenche un changement de matière au clic |
| viewer-3dvue-change | setMaterial | Déclenche un changement à la sélection d'un <select> |
| viewer-3dvue-meshs-materials | JSON {"indexMesh":"idMatiere"} | Matières à appliquer (plusieurs meshes possibles) |
| viewer-3dvue-mesh | "1,2,3" | Index de meshes ciblés pour un <select> |
<!-- Bouton qui change plusieurs matières au clic --> <button viewer-3dvue="monViewer" viewer-3dvue-clic="setMaterial" viewer-3dvue-meshs-materials='{"1":"0n","3":"2b"}' > Coloris Bleu nuit </button> <!-- Select qui applique la valeur choisie --> <select viewer-3dvue="monViewer" viewer-3dvue-change="setMaterial" viewer-3dvue-mesh="2,4" > <option value="0n">Rouge</option> <option value="1a">Bleu</option> </select>
API JavaScript
Pour les cas avancés : chargement dynamique, capture d'image, export SVG. Récupérez la référence du composant via querySelector.
| Méthode | Description |
|---|---|
| setMaterial(materials, index) | Applique des matières sur les meshes d'un objet |
| loadModel(id) | Remplace le modèle courant |
| addModel(id) | Ajoute un objet à la scène |
| removeModel(index) | Supprime un objet par son index |
| resetCamera() | Remet la caméra en position initiale |
| pauseRenderer() / startRenderer() | Contrôle manuel du rendu (géré automatiquement par IntersectionObserver) |
| captureToBase64() | Capture le rendu en image base64 → événement onCaptureBase64Complete |
| exportSVG() | Génère le BAT SVG du produit → événement onSVGExportComplete |
| addSVGText(text, opts) | Ajoute un texte sur une zone éditable du produit |
| addSVGImage(source, opts) | Ajoute une image (File ou ArrayBuffer) sur une zone éditable |
| loadFonts(fonts) | Précharge des polices Google Fonts ou .woff2 personnalisées |
| setSVGElementParam(param, value, id) | Modifie un paramètre d'un élément SVG : fill, text, fontFamily, scaleX, scaleY, angle, colorStop.N. Sans id : applique à l'élément actuellement sélectionné |
| removeSVGElement(id) | Supprime un élément SVG ajouté (texte ou image). Sans id : supprime l'élément sélectionné |
| showSVG2D() / hideSVG2D() | Bascule le viewer en vue à plat pour l'édition SVG / retour en vue 3D |
| captureSVGToBase64() | Capture la texture SVG en image base64 |
Événements
Écoutez les événements directement sur l'élément viewer-3dvue via addEventListener.
| Événement | Propriétés e.detail | Description |
|---|---|---|
| onLoadComplete | - | Viewer chargé et prêt : moment recommandé pour appeler loadFonts() |
| onCaptureBase64Complete | base64, error | Rendu capturé par captureToBase64() |
| onSVGExportComplete | path, error | BAT généré par exportSVG() : path = URL du fichier sur le serveur |
| onSVGObjectSelected | obj.id, obj.type, obj.text, obj.fill, obj.fontFamily, obj.scale, obj.angle | Un élément SVG (texte ou image) a été sélectionné dans le viewer |
| onSVGObjectDeselected | - | L'élément SVG actif a été désélectionné |
// Récupérer la référence du composant const viewer = document.querySelector('viewer-3dvue[name="monViewer"]'); // Attendre que le viewer soit prêt (recommandé pour loadFonts) viewer.addEventListener("onLoadComplete", () => { viewer.loadFonts([{ family: "Bebas Neue" }, { family: "Pacifico" }]); }); // Changer les matières viewer.setMaterial({ "1": "0n", "3": "2b" }); // Modifier l'élément SVG sélectionné viewer.setSVGElementParam("fill", "#ff0000"); // couleur viewer.setSVGElementParam("text", "Mon texte"); // contenu texte viewer.setSVGElementParam("colorStop.0", "#7C3AED", "zone-id"); // gradient // Réagir à la sélection d'un élément SVG viewer.addEventListener("onSVGObjectSelected", (e) => { const obj = e.detail.obj; // obj.id, obj.type, obj.text, obj.fill, obj.fontFamily, obj.scale, obj.angle if (obj.type === "text") inputText.value = obj.text ?? ""; }); viewer.addEventListener("onSVGObjectDeselected", () => { inputText.value = ""; }); // Capturer le rendu courant viewer.captureToBase64(); viewer.addEventListener("onCaptureBase64Complete", (e) => { const { base64, error } = e.detail; if (!error) document.querySelector("#preview").src = base64; });
Matthieu répond directement : pas de ticketing, pas de délai. Si quelque chose n'est pas clair ou si votre cas n'est pas couvert ici, prenez un RDV.