🎨 Un outil puissant pour convertir des fichiers SVG en scènes Godot optimisées
Ce projet convertit automatiquement des fichiers SVG complexes en scènes Godot (.tscn) avec une optimisation intelligente entre chemins vectoriels et sprites bitmap selon la taille et la complexité des éléments.
- 🔄 Conversion automatique : SVG vers scène Godot (.tscn)
- 🧠 Optimisation intelligente : Décision automatique entre Path2D et TextureRect selon la taille
- 🎯 Gestion des éléments
<use>: Support complet des références et réutilisations - 📏 Gestion des transformations : Matrices, échelles, rotations, translations
- 🖼️ Rendu bitmap optimisé : Pour les éléments complexes ou volumineux
- ⚡ Nettoyage automatique : Suppression des fichiers temporaires
- 🔧 Configuration flexible : DPI, seuils de taille personnalisables
- Node.js v14+
- npm ou yarn
- Système d'exploitation : Windows, macOS, Linux
# Cloner le projet
git clone <repository-url>
cd svgGodot/src
# Installer les dépendances
npm install- canvas : Rendu bitmap haute qualité
- canvg : Conversion SVG vers Canvas
- potrace : Tracé vectoriel des bitmaps
- sharp : Traitement d'images optimisé
- xmldom : Parsing XML/SVG
node --expose-gc index.js input.svgnode --expose-gc index.js input.svg \
--out ./output \
--scene scene.tscn \
--dpi 144 \
--size-threshold 400| Option | Description | Défaut |
|---|---|---|
--out |
Répertoire de sortie | ./out/<nom_fichier> |
--scene |
Nom du fichier .tscn | <nom_fichier>.tscn |
--dpi |
Résolution de rendu | 96 |
--min-alpha |
Seuil alpha minimum | 1 |
--size-threshold |
Seuil de taille (px) | 500 |
--help, -h |
Afficher l'aide | - |
src/
├── index.js # Point d'entrée principal
├── config/
│ └── cli.js # Gestion des arguments CLI
├── core/
│ ├── SvgToGodotProcessor.js # Processeur principal
│ ├── ElementProcessor.js # Analyse des éléments SVG
│ ├── SvgProcessor.js # Traitement du document SVG
│ ├── TextureGenerator.js # Génération des textures
│ └── GroupBuilder.js # Construction des groupes
├── rendering/
│ ├── render.js # Moteur de rendu
│ ├── trace.js # Tracé vectoriel
│ └── pathUtils.js # Utilitaires de chemins
├── utils/
│ ├── commonUtils.js # Utilitaires partagés
│ └── svgUtils.js # Utilitaires SVG
└── writers/
└── godotWriter.js # Écriture des fichiers Godot
- 📖 Analyse SVG : Parsing du document et identification des éléments
- 🔍 Classification : Décision Path2D vs TextureRect selon la taille
- 🎨 Rendu conditionnel :
- Petits éléments → Path2D (vectoriel)
- Grands éléments → TextureRect (bitmap)
- 🔗 Résolution des
<use>: Traitement des références et groupes - 📝 Génération Godot : Création du fichier .tscn final
- 🗑️ Nettoyage : Suppression des fichiers temporaires
// Logique de décision automatique
if (width > SIZE_THRESHOLD || height > SIZE_THRESHOLD) {
// Élément volumineux → Texture bitmap
generateTexture(element);
} else {
// Élément compact → Chemin vectoriel
generatePath2D(element);
}out/
└── <nom_fichier>/
├── <nom_fichier>.tscn # Scène Godot principale
├── textures/ # Textures générées (.png)
# Pour des SVG haute résolution
node --expose-gc index.js input.svg --dpi 300 --size-threshold 800
# Pour optimiser la mémoire
node --expose-gc index.js input.svg --size-threshold 300L'option --expose-gc active le garbage collector manuel pour une gestion optimale de la mémoire lors du traitement de gros fichiers SVG.
- Gestion mémoire : Nettoyage automatique pendant le traitement
- Optimisations :
- Réutilisation des éléments
<use>identiques - Cache des transformations calculées
- Suppression automatique des fichiers temporaires
- Réutilisation des éléments
- Scalabilité : Testé sur des SVG de plusieurs MB
node --expose-gc index.js logo.svgnode --expose-gc index.js illustration.svg --dpi 144 --size-threshold 600node --expose-gc index.js artwork.svg --dpi 300 --out ./production❌ "No input file specified"
# ✅ Solution : Spécifier un fichier SVG
node --expose-gc index.js input.svg❌ "Run with --expose-gc"
# ✅ Solution : Ajouter le flag --expose-gc
node --expose-gc index.js input.svg❌ Erreur de mémoire
# ✅ Solution : Réduire le seuil de taille
node --expose-gc index.js input.svg --size-threshold 300- ✅ Chemins (
<path>) - ✅ Formes (
<rect>,<circle>,<ellipse>,<polygon>) - ✅ Groupes (
<g>) - ✅ Références (
<use>) - ✅ Définitions (
<defs>) - ✅ Transformations (translate, scale, rotate, matrix)
- ✅ Styles (fill, stroke, opacity)
- 🔧 Refactorisation complète : Code modulaire et maintenable
- ⚡ Optimisations : Élimination du code dupliqué (~150 lignes)
- 🧹 Nettoyage auto : Suppression des dossiers temporaires
- 🛠️ Utilitaires centralisés : Fonctions partagées optimisées
- Fork le projet
- Créer une branche feature (
git checkout -b feature/nouvelle-fonctionnalite) - Commit les changements (
git commit -m 'Ajouter nouvelle fonctionnalité') - Push vers la branche (
git push origin feature/nouvelle-fonctionnalite) - Ouvrir une Pull Request
Ce projet est sous licence ISC.
Pour toute question ou problème :
- 📋 Ouvrir une issue sur GitHub
- 📖 Consulter la documentation
- 🔍 Vérifier les exemples d'utilisation
Développé avec ❤️ pour la communauté Godot