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 :

  • DAE (Collada), qui est actuellement le flux de travail le plus abouti.
  • GLTF 2.0. Les formats texte et binaire sont pris en charge. Godot le prend totalement en charge, mais le format est nouveau et gagne du terrain.
  • Formats OBJ (Wavefront). C’est également entièrement pris en charge, mais assez limité (pas de prise en charge des pivots, squelettes, etc.).

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

Pourquoi pas FBX ?

La plupart des moteurs de jeu utilisent le format FBX pour importer des scènes 3D, qui est sans aucun doute l’un des plus standardisés du secteur. Cependant, ce format nécessite l’utilisation d’une bibliothèque fermée d’Autodesk qui est distribuée avec des termes de licence plus restrictifs que ceux de Godot.

Il est prévu dans le futur, d’offrir une extension binaire utilisant GDNative.

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 de fichiers DAE de Blender

Blender a également un support COLLADA intégré, mais il est également bancal et ne devrait pas être utilisé.

Godot fournit une extension Python qui fera un bien meilleur travail d’exportation des scènes.

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.

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

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.
  • Vertex : 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 vertex : 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 vertex : 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 vertex 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.

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. (@TODO ceci a besoin de documentation)

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 en tant que clips. Il suffit de spécifier à partir de quelle image jusqu’à quelle image chaque clip doit être pris (et, bien sûr, n’oubliez pas de spécifier l’option IPS ci-dessus).

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 vraiment possible car si la ressource source change (fichier source .dae, .gltf, .obj réexporté à partir d’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 la 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 :

Supprimer les nœuds (-noimp)

Les noms de nœuds qui ont ce suffixe seront supprimés au moment de l’importation, quel que soit leur type. Ils n’apparaîtront pas dans la scène importée.

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

L’option « -col » ne fonctionnera que pour les nœuds Mesh. Si elle est détectée, un nœud de collision statique enfant sera ajouté, utilisant la même géométrie que le maillage.

Cependant, il arrive souvent que la géométrie visuelle soit trop complexe ou trop peu lisse pour les collisions, ce qui finit par ne pas bien fonctionner.

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 » créera une ConvexPolygonShape au lieu d’une ConcavePolygonShape.

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

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.

Créer une navigation (-navmesh)

Un nœud de maillage avec ce suffixe sera converti en un maillage de navigation. Le nœud de maillage original sera supprimé.

Corps Rigide (-rigid)

Crée un corps rigide à partir de ce maillage.

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 d’animation Godot avec le drapeau loop activé. Ceci est sensible à la casse et ne nécessite pas de 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 ».