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. Godot a un support complet pour les formats texte et binaire.
  • DAE (COLLADA), un ancien format qui est entièrement supporté.
  • Formats OBJ (Wavefront). C'est également entièrement pris en charge, mais assez limité (pas de prise en charge des pivots, squelettes, etc.).
  • ESCN, un format spécifique à Godot que Blender peut exporter à l'aide d'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.

Note

Blender does not export emissive textures with the glTF file. If your model uses one, it must be brought in separately.

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.

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

Les nœuds

Type racine

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

Nom racine

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

Échelle de 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

Emplacement

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.

Continuer à réimporter

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 une cartographie normale 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 source. 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é-calcul de l'éclairage

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.

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.

Script de filtrage

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

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 :

  • Adding collision detection to objects.
  • Setting objects as navigation meshes.
  • Deleting nodes that are not used in the game engine (like specific lights used for modelling).

To simplify this workflow, Godot offers several suffixes that can be added to the names of the objects in your 3D modelling software. When imported, Godot will detect suffixes in object names and will perform actions automatically.

Note

All the suffixes described below are case-sensitive.

Supprimer les nœuds (-noimp)

Objects that have the -noimp suffix will be removed at import-time no matter what their type is. They will not appear in the imported scene.

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

The option -col will work only for Mesh objects. If it is detected, a child static collision node will be added, using the same geometry as the mesh. This will create a triangle mesh collision shape, which is a slow, but accurate option for collision detection. This option is usually what you want for level geometry (but see also -colonly below).

The option -convcol will create a ConvexPolygonShape instead of a ConcavePolygonShape. Unlike triangle meshes which can be concave, a convex shape can only accurately represent a shape that doesn't have any concave angles (a pyramid is convex, but a hollow box is concave). Due to this, convex collision shapes are generally not suited for level geometry. When representing simple enough meshes, convex collision shapes can result in better performance compared to a triangle collision shape. This option is ideal for simple or dynamic objects that require mostly-accurate collision detection.

However, in both cases, the visual geometry may be too complex or not smooth enough for collisions. This can create physics glitches and slow down the engine unneccesarily.

To solve this, the -colonly modifier exists. It will remove the mesh upon importing and will create a StaticBody collision instead. This helps the visual mesh and actual collision to be separated.

The option -convcolonly works in a similar way, but will create a ConvexPolygonShape instead.

The option -colonly can also be used with Blender's empty objects. On import, it will create a StaticBody with a collision node as a child. The collision node will have one of a number of predefined shapes, depending on Blender's empty draw type:

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

When possible, try to use a few primitive collision shapes instead of triangle mesh or convex shapes. Primitive shapes often have the best performance and reliability.

Note

For better visibility in Blender's editor, you can set the "X-Ray" option on collision empties and set some distinct color for them in Blender's User Preferences > Themes > 3D View > Empty.

Créer une navigation (-navmesh)

A mesh node with the -navmesh suffix will be converted to a navigation mesh. The original Mesh object will be removed at import-time.

Créer un VehicleBody (-vehicle)

A mesh node with the -vehicle suffix will be imported as a child to a VehicleBody node.

Créer une VehicleWheel (-wheel)

A mesh node with the -wheel suffix will be imported as a child to a VehicleWheel node.

Corps Rigide (-rigid)

A mesh node with the -rigid suffix will be imported as a RigidBody.

Boucle d'animation (-loop, -cycle)

Animation clips in the COLLADA document that start or end with the token loop or cycle will be imported as a Godot Animation with the loop flag set. Unlike the other suffixes described above, this does not require a hyphen.

In Blender, this requires using the NLA Editor and naming the Action with the loop or cycle prefix or suffix.