Guide d’import de modèles Blender dans Unity 3D

Blender est une solution de choix pour créer des modèles 3D à importer dans Unity. Blender est un logiciel gratuit et open source, assez facile d’accès, avec de plus en plus de fonctionnalités au fil des années.

Il y a en outre une grosse communauté derrière Blender, ce qui fait qu’on trouve une grande quantité de ressources, tutoriaux, etc.

Une des choses qui n’est pas simple à trouver, c’est de faire un export « propre » d’un modèle 3D de Blender vers Unity, sans avoir des soucis d’échelle ou de rotation.

Différences entre la 3D d’Unity et de Blender

Unity et Blender n’utilisent pas la même convention pour les 3 axes de leur environnement 3D :

  • Dans Unity 3D :
    • L’axe vertical est Y, avec +Y en haut
    • l’axe horizontal gauche-droite est X, avec +X à droite
    • l’axe horizontal avant-arrière est Z, avec +Z au fond
  • Dans Blender :
    • L’axe vertical est Z (le haut est +Z)
    • L’axe horizontal gauche-droite est X (avec +X à droite)
    • L’axe avant-arrière est Y.

C’est lié au fait que Blender est un environnement 3D complet, donc le plan X/Y est considéré comme étant le plan horizontal. Tandis que Unity 3D part d’un environnement 2D, où le plan X/Y est le plan 2D vertical, et où Z est l’ajout de la profondeur 3D.

Traitement dans Blender avant d’exporter pour Unity 3D

Notre objectif est d’obtenir dans Unity un objet :

  1. Correctement aligné (par défaut, l’avant du personnage doit regarder le repère « avant » de l’Unity (+Z soit Vector3.Forward)
  2. Avec les bonnes dimensions (la taille de l’objet doit être cohérente avec le monde, c’est notamment important pour le moteur physique)
  3. Avec le transform paramétré sur des valeurs à standard une fois dans Unity (position et rotation à zéro, et scale (échelle) à 1).

Gardez en tête que 1 unité dans Blender / Unity = 1 mètre dans le monde réel. Dimensionnez votre modèle en fonction de cette échelle. Les unités sont visibles sur la grille, ce sont les lignes plus épaisses.

Exemple de modèle qui mesure 1,70 mètre

Faites votre modèle de manière à ce qu’il regarde la direction -Y. de Blender (donc sa gauche doit être X et sa tête doit regarder Y). Si vous appuyez sur le 1 du Pavé numérique, vous devez voir votre personnage en face.

Ensuite, pour éviter d’avoir un transform non standard dans Unity, assurez-vous que dans Blender, tout est appliqué : transformation, échelle et rotation. En vérifiant dans l’onglet « Object Proprerties », Location, Rotation et Scale devraient avoir des données comme indiquées ainsi.

Si ce n’est pas le cas (typiquement, ça peut se produire si vous avez fait des opérations dans Blender en mode Object plutôt qu’en mode Edit), vous pouvez appliquer les transformations avec Ctrl + A > Apply All Transforms.

Options d’export dans Blender

Côté blender, après avoir sauvegardé votre fichier de sauvegarde au format .blend, faites un export au format .fbx. C’est un des formats avec lequel Unity travaille très facilement.

La section « Include » permet de déterminer ce qui est exporté. Si vous avez utilisé des caméras ou des lampes lors de la modélisation ou pour faire du rendu, il est utile de les décocher, pour éviter qu’elles soient importées dans Unity.

La section « Transform » permet de choisir comment le modèle sera exporté :

  1. Scale : échelle de 1.00, comme nous avons fait en sorte de caler l’échelle aux étapes précédentes.
  2. En terme d’Apply Scalings, choisissez les FBX Units Scales
  3. Forward permet de déterminer l’axe qui correspond à l’avant. Choisissez -Z Forward pour que l’avant Y de blender soit calé sur le Z de Unity.
  4. Up permet de déterminer l’axe vertical. Dans Unity, c’est Y, donc nous choisissons Y Up.
  5. Apply Unit et Apply Transform peuvent être cochées par sécurité pour que

N’hésitez pas à sauvegarder les réglages avec le [+] de Operator Presets, comme ça, pour les prochains exports, il vous suffira de sélectionner ce préréglage directement.

Si vous sauvegardez le .fbx dans le dossier assets d’Unity (typiquement, dans un sous-dossier dédié, comme Assets/Models/), Unity va automatiquement le recharger quand la fenêtre de l’Editor reprendra le focus. Le modèle est alors importable.

Import du modèle 3D côté Unity

Dans le panneau Project de Unity, si vous cliquez sur le fichier fbx, vous aurez les options d’importation. Si vous avez bien suivi les étapes suivantes, vous devriez avoir un scale à 0 et une conversion d’unité de 1 m <=> 1 m (et non pas, par exemple de 1 cm vers 1 m).

Ici, il est possible de cocher « Generate Colliders » si vous avez besoin que votre modèle possède un Collider (qui sera basé sur le Mesh 3D).

Si vous importez le modèle 3D dans la scène, son transform devrait être avec 0 dans toutes les rotations et 1 dans tous les scale. La Position peut varier selon l’endroit où vous faites glisser le modèle dans la scène.

Le modèle doit regarder dans la direction du Z positif / Vector3.Forward.

Récupérer l’armature / le rig de Blender dans Unity, et corriger l’erreur de rotation de l’armature à 90°

Si c’est un personnage riggé, donc avec une armature, que vous importez de Blender vers Unity, pensez à sélectionner « Armature » dans les options d’export de Fbx de Blender.

Cependant, si vous regardez l’armature dans Unity, vous verrez qu’elle est importée avec une rotation de -90° (généralement avec une erreur d’arrondi) :

Pour que l’armature soit aussi importée correctement avec des rotations à 0, suivez ces étapes :

L’Armature devrait être parent de votre Mesh, cette étape est à faire après avoir l’opération de parentage Mesh/Armature.

  1. Sélectionnez l’Armature (le Mesh est aussi sélectionné automatiquement).
  2. Faites une rotation de -90° (Raccourci Blender RX-90).
    Le modèle doit regarder « vers le haut ».
  3. Appliquez la rotation sur l’Armature (Ctrl + A > Apply Rotation).
  4. Faites la rotation inverse de +90° (Raccourci RX90).
  5. Sélectionnez uniquement le Mesh, assurez-vous que l’armature n’est pas sélectionnée.
  6. Appliquez la rotation sur le Mesh (Ctrl + A > Apply Rotation).
  7. Exportez le .fbx en sélectionnant Armature et Mesh dans les options d’export.

Au final, dans Unity vous aurez le Mesh et l’Armature avec une taille et une rotation standard. Bien sûr, les différents os de l’armature auront des rotations et des échelles variées, mais ça c’est normal, c’est le principe des os d’une armature.

En tous cas, régler les modèles 3D et les éventuelles armature afin qu’ils soient importés correctement dans Unity est une process très important à mettre en place dès le début de votre projet, pour éviter d’avoir à retoucher par la suite les taille ou les rotations des modèles 3D (voire pire, devoir changer toutes leurs animations après la correction de la rotation).

Vous partez ainsi sur une base saine pour tout le reste de l’intégration d’éléments 3D dans votre jeu.