Skip to content

Chimboz/svg2godot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SVG to Godot Converter

🎨 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.

✨ Fonctionnalités

  • 🔄 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

📋 Prérequis

  • Node.js v14+
  • npm ou yarn
  • Système d'exploitation : Windows, macOS, Linux

🚀 Installation

# Cloner le projet
git clone <repository-url>
cd svgGodot/src

# Installer les dépendances
npm install

📦 Dépendances

  • canvas : Rendu bitmap haute qualité
  • canvg : Conversion SVG vers Canvas
  • potrace : Tracé vectoriel des bitmaps
  • sharp : Traitement d'images optimisé
  • xmldom : Parsing XML/SVG

🎯 Utilisation

Utilisation basique

node --expose-gc index.js input.svg

Utilisation avancée

node --expose-gc index.js input.svg \
  --out ./output \
  --scene scene.tscn \
  --dpi 144 \
  --size-threshold 400

Options disponibles

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 -

🏗️ Architecture

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

🔄 Processus de conversion

  1. 📖 Analyse SVG : Parsing du document et identification des éléments
  2. 🔍 Classification : Décision Path2D vs TextureRect selon la taille
  3. 🎨 Rendu conditionnel :
    • Petits éléments → Path2D (vectoriel)
    • Grands éléments → TextureRect (bitmap)
  4. 🔗 Résolution des <use> : Traitement des références et groupes
  5. 📝 Génération Godot : Création du fichier .tscn final
  6. 🗑️ Nettoyage : Suppression des fichiers temporaires

📊 Algorithme d'optimisation

// 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);
}

📁 Structure de sortie

out/
└── <nom_fichier>/
    ├── <nom_fichier>.tscn     # Scène Godot principale
    ├── textures/              # Textures générées (.png)

🔧 Configuration avancée

Personnalisation des seuils

# 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 300

Optimisation mémoire

L'option --expose-gc active le garbage collector manuel pour une gestion optimale de la mémoire lors du traitement de gros fichiers SVG.

⚡ Performance

  • 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
  • Scalabilité : Testé sur des SVG de plusieurs MB

🧪 Exemples d'utilisation

Fichier simple

node --expose-gc index.js logo.svg

Illustration complexe

node --expose-gc index.js illustration.svg --dpi 144 --size-threshold 600

Production haute qualité

node --expose-gc index.js artwork.svg --dpi 300 --out ./production

🐛 Dépannage

Erreurs communes

❌ "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

🔍 Types d'éléments supportés

  • 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)

📈 Améliorations récentes

  • 🔧 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

🤝 Contribution

  1. Fork le projet
  2. Créer une branche feature (git checkout -b feature/nouvelle-fonctionnalite)
  3. Commit les changements (git commit -m 'Ajouter nouvelle fonctionnalité')
  4. Push vers la branche (git push origin feature/nouvelle-fonctionnalite)
  5. Ouvrir une Pull Request

📄 Licence

Ce projet est sous licence ISC.

🆘 Support

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors