Importation de scènes 3D

Importateur de scènes Godot

En ce qui concerne les ressources 3D, Godot dispose d’un importateur flexible et configurable.

Godot travaille avec des scènes. Cela signifie que toute la scène sur laquelle vous travaillez dans votre DCC 3D préféré sera transférée aussi fidèlement que possible.

Godot prend en charge les formats de fichiers de scènes 3D suivants :

  • glTF 2.0 (recommandé). Godot a un support complet pour les formats texte (.gltf) et binaire (.glb).

  • DAE (COLLADA), un ancien format qui est entièrement supporté.

  • OBJ (Wavefront) + leurs fichiers de matériaux MTL. Ce format est également entièrement supporté, mais assez limité (pas de support pour les pivots, les squelettes, les animations, les matériaux PBR, ...).

  • ESCN, un format spécifique à Godot que Blender peut exporter avec un plugin.

  • FBX, pris en charge via la bibliothèque Open Asset Import. Cependant, FBX est propriétaire, nous vous recommandons donc d'utiliser d'autres formats listés ci-dessus, si cela convient à votre flux de travail.

Copiez simplement le fichier de scène avec la texture dans le dépôt du projet, et Godot effectuera une importation complète.

Il est important que le maillage ne soit pas déformé par les os lors de l'exportation. Assurez-vous que le squelette soit réinitialisé à sa position T ou à sa position de repos par défaut avant d'exporter avec votre éditeur 3D préféré.

Exportation de fichiers DAE de Maya et de 3DS Max

Autodesk a ajouté le support COLLADA intégré à Maya et 3DS Max, mais il est inopérant par défaut et ne doit pas être utilisé. La meilleure façon d'exporter ce format est d'utiliser les extensions OpenCollada. Elles fonctionnent bien, malgré qu'elles ne soient pas toujours à jour avec la dernière version du logiciel.

Exportation des fichiers glTF 2.0 depuis Blender

Il y a trois façons d'exporter les fichiers glTF depuis Blender. En tant que binaire glTF (fichier .glb), glTF intégré (fichier .gltf), et avec textures (gltf + .bin + textures).

glTF fichiers binaires sont les plus petits des trois options. Ils comprennent le maillage et les textures mis en place dans Blender. Lorsqu'elles sont introduites dans Godot, les textures font partie du fichier matériel de l'objet.

Les fichiers intégrés glTF fonctionnent de la même manière que les fichiers binaires. Ils n'offrent pas de fonctionnalités supplémentaires dans Godot, et ne devraient pas être utilisés car ils ont une taille de fichier plus grande.

Il y a deux raisons d'utiliser glTF avec les textures séparées. La première est d'avoir la description de la scène dans un format textuel et les données binaires dans un fichier binaire séparé. Cela peut être utile pour le contrôle de la version si vous souhaitez passer en revue les modifications dans un format basé sur le texte. La deuxième est que vous avez besoin des fichiers de texture séparés du fichier matériel. Si vous n'avez besoin ni de l'un ni de l'autre, les fichiers binaires glTF sont très bien.

Avertissement

Les animations «blend shape» ne peuvent pas être importées - elles nécessitent une animation manuelle dans Godot.

Note

Blender versions older than 3.2 do not export emissive textures with the glTF file. If your model uses one and you're using an older version of Blender, it must be brought in separately.

Par défaut, Blender a désactivé l'élimination de la face arrière des matériaux et exporte les matériaux en fonction de leur rendu dans Blender. Cela signifie que les matériaux dans Godot auront leur mode d'élimination défini sur Disabled. Cela peut diminuer les performances puisque les faces arrière seront rendues, même si elles sont réduites par d'autres faces. Pour résoudre ce problème, activez Backface Culling (Suppression des faces arrières) dans l'onglet Materials (propriétés de matériaux) de Blender, puis exportez à nouveau la scène vers glTF.

Exportation de fichiers DAE de Blender

Blender a un support COLLADA intégré, mais il ne fonctionne pas correctement pour les besoins des moteurs de jeu et ne devrait pas être utilisé tel quel.

Godot fournit un plugin Blender qui exportera correctement les scènes COLLADA pour une utilisation dans Godot. Il ne fonctionne pas avec Blender 2.8 ou plus récent, mais il est prévu de le mettre à jour dans le futur.

Exportation de fichiers ESCN depuis Blender

Le plus puissant, appelé godot-blender-exporter. Il utilise des fichiers .escn qui sont un peu un autre nom de fichier .tscn (fichier de scène Godot), il conserve autant d'informations que possible à partir d'une scène Blender. Cependant, il est considéré comme expérimental.

L'exportateur ESCN a un document détaillé décrivant ses fonctionnalités et son utilisation.

Exporter les textures séparément

Si les textures peuvent être exportées avec un modèle dans certains formats de fichier, comme glTF 2.0, vous pouvez également les exporter séparément. Godot utilise le PBR (rendu à base physique) pour ses matériaux, donc si un programme de texturation peut exporter des textures PBR, elles peuvent fonctionner dans Godot. Cela inclut la Substance suite, ArmorPaint (open source), et Material Maker (open source).

Note

Pour plus d'informations sur les matériaux de Godot, voir Spatial Material.

Considérations relatives à l'exportation

Comme les cartes graphiques ne peuvent dessiner que des triangles, les maillages qui contiennent des quads ou des N-gons doivent être triangulés avant de pouvoir être dessiner. Godot peut trianguler les maillages à l'importation, mais les résultats peuvent être imprévisibles ou incorrects, en particulier avec les N-gons. Indépendamment de l'application cible, la triangulation avant l'exportation de la scène conduira à des résultats plus cohérents et devrait être faite chaque fois que possible.

Pour éviter les problèmes de triangulation incorrecte après l'importation dans Godot, il est recommandé de faire en sorte que le DCC 3D triangule les objets par lui-même. Dans Blender, cela peut être fait en ajoutant un modificateur Triangulate à vos objets et en s'assurant que Apply Modifiers est coché dans la boîte de dialogue d'exportation. Alternativement, selon l'exportateur, vous pouvez trouver et activer une option Triangulate Faces dans le dialogue d'exportation.

Pour éviter les problèmes de sélection 3D dans l'éditeur, il est recommandé d'appliquer la transformation d'objet dans le 3D Digital Content Creation avant d'exporter la scène.

Processus d’importation

L'importateur de scènes Godot permet différents flux de travaux selon la manière dont les données sont importées. Suivant de nombreuses options, il est possible d'importer une scène avec :

  • Matériaux externes (par défaut) : où chaque matériau est enregistré dans un fichier ressource. Leurs modifications sont conservées.

  • Maillages externes : où chaque maillage est enregistré dans un fichier différent. De nombreux utilisateurs préfèrent traiter directement les maillages.

  • Animations externes : Permet de modifier et de fusionner des animations enregistrées lorsque les sources changent.

  • Scènes externes : enregistrer les nœuds racine des scènes importées chacun en tant que scène distincte.

  • Scène unique : un fichier de scène unique avec tout intégré.

../../_images/scene_import1.png

Comme différents développeurs ont des besoins différents, ce processus d'importation est hautement personnalisable.

Options d'importation

L'importateur a plusieurs options, lesquelles seront discutées ci-dessous :

../../_images/scene_import2.png

Nœuds

Type de Racine

Par défaut, le type du nœud racine dans les scènes importées est "Spatial", mais cela peut être modifié.

Nom de la Racine

Permet de définir un nom spécifique pour le nœud racine généré.

Échelle de la racine

L'échelle du nœud racine.

Script Personnalisé

Un script spécial pour traiter toute la scène après l'importation peut être fourni. Ceci est idéal pour le post-traitement, le changement de matériaux, les choses amusantes avec la géométrie, etc.

Créez un script comme celui-ci :

tool # Needed so it runs in the editor.
extends EditorScenePostImport


func post_import(scene):
    # Do your stuff here.
    return scene # remember to return the imported scene

La fonction post_import prend la scène importée comme argument (le paramètre est en fait le nœud racine de la scène). La scène qui sera finalement utilisée doit être retournée. Cela peut en être une différente.

Stockage

Par défaut, Godot importe une seule scène. Cette option permet de spécifier que les nœuds situés en dessous de la racine seront chacun une scène distincte et seront instanciés dans la scène importée.

Bien entendu, instancier manuellement des scènes importées à d'autres endroits fonctionne également.

Matériaux

Localisation

Godot prend en charge les matériaux dans les mailles ou les nœuds. Par défaut, les matériaux seront placés sur chaque nœud.

Stockage

Les matériaux peuvent être stockés dans la scène ou dans des fichiers externes. Par défaut, ils sont stockés dans des fichiers externes, leur édition est donc possible. En effet, la plupart des DCC 3D n’ont pas les mêmes options de matériaux que celles présentes dans Godot.

Lorsque des matériaux sont intégrés, ils seront perdus chaque fois que la scène source sera modifiée et réimportée.

Note

Godot ne réimporte pas les matériaux qui sont stockés dans des fichiers externes à moins que vous ne supprimiez le fichier .material associé avant la réimportation.

Pour forcer la réimportation des matériaux à chaque fois que la scène 3D est réimportée, changez le mode de stockage des matériaux dans la scène 3D en le sélectionnant dans le dock Système de fichiers, en allant dans le dock Importation puis en réglant Material > Storage sur Built-In au lieu de Files.

Conserver à la réimportation

Sitôt que les matériaux sont modifiés pour bénéficier des fonctionnalités de Godot, l'importateur conservera les éléments modifiés et ignorera ceux provenant de la scène source. Cette option est uniquement disponible si les matériaux sont enregistrés en tant que fichiers.

Maillages

Compresser

Fait utiliser des nombres de moindre précision dans plusieurs aspects des maillages pour sauver de l’espace.

Ceux-ci sont :
  • Matrice de transformation (position, rotation, and échelle) : flottant 32-bit vers entier signé 16-bit.

  • Sommets : flottant 32-bit vers entier signé 16-bit.

  • Normales : flottant 32-bit vers entier non-signé 32-bit.

  • Tangentes : flottant 32-bit vers entier non-signé 32-bit.

  • Couleur des sommets : flottant 32-bit vers entier non-signé 32-bit.

  • UV : flottant 32-bit vers entier non-signé 32-bit.

  • UV2 : flottant 32-bit vers entier non-signé 32-bit.

  • Poids des sommets : flottant 32-bit vers entier non-signé 16-bit.

  • Squelette d’armature : flottant 32-bit vers entier non-signé 16-bit.

  • Indices de tableau : flottant 32-bit vers entier non-signé 16 ou 32-bit selon le nombre d’éléments.

Information supplémentaire :
  • UV2 = le deuxième canal UV for les textures de détail et les textures de lightmap précalculé.

  • Indices de tableau = Un tableau de nombres qui numérote chaque élément des tableaux ci-dessus, ç-à-d. qu’il numérote les sommets et les normales.

Dans certains cas, cela peut entraîner une perte de précision. Il peut donc être nécessaire de désactiver cette option. Par exemple, si un maillage est très grand ou que plusieurs maillages sont importés couvrant une grande surface, la compression de l’importation de ce maillage risque d’entraîner des lacunes dans la géométrie ou des sommets qui ne se trouvent pas exactement où ils devraient être.

Vérifier les tangentes

Si des textures avec des textures normales doivent être utilisées, les maillages doivent avoir des tableaux de tangentes. Cette option garantit qu'elles seront générées si elles ne sont pas présentes dans la scène d'origine. Godot utilise Mikktspace pour cela, mais il est toujours préférable de les générer dans l'exportateur.

Stockage

Les maillages peuvent être stockés dans des fichiers séparés (ressources) au lieu d'être intégrés. Cela n'a pas beaucoup d'intérêt à moins que l'on veuille construire des objets avec directement.

Cette option est fournie pour aider ceux qui préfèrent travailler directement avec des maillages au lieu de scènes.

Pré-calculer les lumières

Que le maillage soit utilisé ou non dans les lumières préparées.

  • Désactivé: Le maillage n'est pas utilisé dans les lumières préparées.

  • Activer: Le maillage est utilisé dans les lumières préparées.

  • Gen Lightmaps : Le maillage est utilisé dans les lightmaps préparées et ouvre un second calque UV pour les lightmaps.

Note

Pour plus d'informations sur le pré-calcul de lumière voir Baked lightmaps.

Fichiers externes

Les maillages générés et les matériels peuvent être optionnellement stocké dans un sous-répertoire nommé d’après la scène.

Options d’animation

Godot fournit de nombreuses options relatives à la manière dont les données d'animation sont traitées. Certains exportateurs (tels que Blender), peuvent générer de nombreuses animations dans un seul fichier. D'autres, tels que 3DS Max ou Maya, nécessitent de nombreuses animations placées dans la même ligne de temps ou, au pire, placent chaque animation dans un fichier distinct.

../../_images/scene_import3.png

L'import d'animation est activé par défaut.

Attention

Pour modifier les animations d'une scène 3D importée, vous devez changer l'option de stockage des animations de Built-In à Files dans le dock d'importation. Sinon, les modifications apportées aux animations à partir de Godot seront perdues lors de l'exécution du projet.

IPS

La plupart des formats d'exportation 3D stockent la ligne de temps pour l'animation en secondes au lieu d'images. Pour s'assurer que les animations sont importées aussi fidèlement que possible, veuillez spécifier les images par seconde utilisées pour les éditer. Ne pas le faire peut entraîner des saccades minimes.

Filtrer les scripts

Il est possible de spécifier un script de filtrage dans une syntaxe spéciale pour décider quelles pistes de quelles animations doivent être conservées.

Le script de filtrage est exécuté pour chaque animation importée. La syntaxe se compose de deux types d'instructions, la première pour choisir les animations à filtrer, et la seconde pour filtrer les pistes individuelles dans l'animation correspondante. Tous les modèles de noms sont exécutés à l'aide d'une correspondance d'expressions insensible à la casse, en utilisant les caractères génériques ? et * (en utilisant String.matchn() sous le capot).

Le script doit commencer par une instruction de filtre d'animation (comme indiqué par la ligne commençant par un @). Par exemple, si nous voulons appliquer des filtres à toutes les animations importées dont le nom se termine par "_Loop" :

@+*_Loop

De même, des modèles supplémentaires peuvent être ajoutés à la même ligne, séparés par des virgules. Voici un exemple modifié pour ajouter inclure toutes les animations dont le nom commence par "Arm_Left", mais aussi exclure toutes les animations dont le nom se termine par "Attack" :

@+*_Loop, +Arm_Left*, -*Attack

Après l'énoncé du filtre de sélection d'animation, nous ajoutons des motifs de filtrage de pistes pour indiquer quelles pistes d'animation doivent être conservées ou supprimées. Si aucun motif de filtre de piste n'est spécifié, toutes les pistes des animations correspondantes seront supprimées !

Il est important de noter que les instructions du filtre de piste sont appliquées dans l'ordre pour chaque piste de l'animation, ce qui signifie qu'une ligne peut inclure une piste, une règle ultérieure peut toujours la supprimer. De même, une piste exclue par une règle antérieure peut alors être à nouveau incluse par une règle de filtrage plus bas dans le script de filtrage.

Par exemple : inclure toutes les pistes dans les animations dont les noms se terminent par "_Loop", mais supprimer toutes les pistes affectant un "Skeleton" qui se terminent par "Control", sauf si elles ont "Arm" dans leur nom :

@+*_Loop
+*
-Skeleton:*Control
+*Arm*

Dans l'exemple ci-dessus, des pistes comme "Skeleton:Leg_Control" seraient rejetées, alors que des pistes comme "Skeleton:Head" ou "Skeleton:Arm_Left_Control" seraient retenues.

Toutes les lignes de filtre de piste qui ne commencent pas par un + ou - sont ignorées.

Stockage

Par défaut, les animations sont sauvegardées en étant intégrées. Il est possible de les enregistrer dans un fichier à la place. Cela permet d'ajouter des pistes personnalisées aux animations et de les conserver après une réimportation.

Optimiseur

Lors de l'importation d'animations, un optimiseur est lancé, ce qui réduit considérablement la taille de l'animation. En général, cette fonction devrait toujours être activée, à moins que vous ne soupçonniez qu'elle pourrait casser une animation donnée.

Clips d'animation

Il est possible de spécifier plusieurs animations à partir d'une seule ligne de temps sous forme de clips. Pour que cela fonctionne, le modèle doit avoir une seule animation qui est nommée default. Pour créer des clips, il faut modifier la quantité de clips pour qu'elle soit supérieure à zéro. Vous pouvez ensuite nommer un clip, spécifier les images sur lesquelles il commence et s'arrête, et choisir si l'animation se met en boucle ou non.

Héritage de scène

Dans de nombreux cas, il peut être souhaitable d'apporter des modifications à la scène importée. Par défaut, ce n'est pas possible car si l'asset source change (fichier source .dae, .gltf, .obj réexporté depuis une application de modélisation 3D), Godot réimporte la scène entière.

Il est cependant possible de faire des modifications locales en utilisant l'héritage de scène. Essayez simplement d'ouvrir la scène importée et la boîte de dialogue suivante apparaîtra :

../../_images/scene_import4.png

Dans les scènes héritées, les seules limitations pour les modifications sont :

  • Les nœuds ne peuvent pas être supprimés (mais peuvent être ajoutés n'importe où).

  • Les sous-ressources ne peuvent pas être éditées (sauvegardez-les en externe comme décrit ci-dessus)

Sinon, tout est permis !

Conseils pour l'importation

Souvent, lors de l'édition d'une scène, il y a des tâches communes qui doivent être effectuées après l'exportation :

  • Ajout de détection de collision aux objets.

  • Réglage des objets comme maillages de navigation.

  • Supprimer les nœuds qui ne sont pas utilisés dans le moteur de jeu (comme les lumières spécifiques utilisées pour la modélisation).

Pour simplifier ce flux de travail, Godot propose quelques suffixes qui peuvent être ajoutés aux noms des objets dans votre logiciel de modélisation 3D. Lors de l'importation, Godot les détectera et effectuera des actions automatiquement.

Note

Tous les suffixes décrits ci-dessous sont sensibles à la casse.

Supprimer les nœuds (-noimp)

Les objets qui ont le suffixe -noimp seront supprimés à l'importation, quel que soit leur type. Ils n'apparaîtront pas dans la scène importée.

Créer des collisions (-col, -convcol, -colonly, -convcolonly)

L'option -col ne fonctionnera que pour les objets Mesh. Si elle est détectée, un nœud de collision statique enfant sera ajouté, en utilisant la même géométrie que le maillage. Cela créera une forme de collision de maillage triangulaire, ce qui est une option lente mais précise pour la détection de collisions. Cette option est généralement celle que vous souhaitez pour la géométrie de niveau (mais voir aussi -colonly ci-dessous).

L'option -convcol va créer un classe_convexpolygonshape au lieu d'un classe_concavepolygonshape. Contrairement aux maillages triangulaires qui peuvent être concaves, une forme convexe ne peut représenter avec précision qu'une forme qui n'a pas d'angles concaves (une pyramide est convexe, mais une boîte creuse est concave). De ce fait, les formes de collision convexes ne sont généralement pas adaptées à la géométrie de niveau. Lorsqu'elles représentent des maillages assez simples, les formes de collision convexes peuvent donner de meilleures performances qu'une forme de collision triangulaire. Cette option est idéale pour les objets simples ou dynamiques qui nécessitent une détection des collisions précises.

Cependant, dans les deux cas, la géométrie visuelle peut être trop complexe ou pas assez lisse pour les collisions. Cela peut créer des glitches physiques et ralentir le moteur inutilement.

Pour résoudre ce problème, le modificateur -colonly existe, qui supprimera le maillage lors de l'importation et créera une collision StaticBody à la place. Cela permet de séparer le maillage visuel et la collision réelle.

L'option -convcolonly fonctionne de la même manière, mais crée à la place un ConvexPolygonShape.

L'option -colonly peut également être utilisée avec les objets vides de Blender. Lors de l'importation, il créera un StaticBody avec un nœud collision en tant qu'enfant. Le nœud collision aura une des formes prédéfinies, en fonction du type de dessin vide de Blender :

../../_images/3dimp_BlenderEmptyDrawTypes.png

Dans la mesure du possible, essayez d'utiliser quelques formes primitives de collision au lieu de maillages triangulaires ou de formes convexes. Les formes primitives ont souvent les meilleures performances et une meilleure fiabilité.

Note

Pour une meilleure visibilité dans l'éditeur de Blender, l'utilisateur peut définir l'option "X-Ray" sur les vides de collision et définir une couleur distincte pour eux dans User Preferences > Themes > 3D View > Empty.

Voir aussi

Voir Formes de collision (3D) pour un aperçu complet des formes de collisions.

Créer une navigation (-navmesh)

Un nœud de maillage avec le suffixe -navmesh sera converti en un maillage de navigation. Le objet Mesh original sera supprimé à l'importation.

Créer un VehicleBody (-vehicle)

Un nœud de maillage avec le suffixe -vehicle sera importé en tant qu'enfant d'un nœud VehicleBody.

Créer une VehicleWheel (-wheel)

Un nœud de maillage avec le suffixe -wheel sera importé en tant qu'enfant d'un nœud VehicleWheel.

Corps Rigide (-rigid)

Un nœud de maillage avec le suffixe -rigid sera importé en tant qu'enfant d'un nœud RigidBody.

Boucle d'animation (-loop, -cycle)

Les clips d'animation dans le document COLLADA qui commencent ou se terminent par le jeton loop ou cycle seront importés sous forme de Godot Animation avec le flag loop activé. Contrairement aux autres suffixes décrits ci-dessus, il n'est pas nécessaire d'utiliser un trait d'union.

Dans Blender, cela nécessite d'utiliser l'éditeur NLA et de nommer l'Action avec le préfixe ou le suffixe loop ou cycle.