Importer un personnage (modulable) de Daz 3D à Unity

Daz 3D est devenu un incontournable dans le monde de la création d’images 3D mettant en scène des personnages, éclipsant son illustre prédécesseur Poser et dépassant en tous points la seule alternative open source sérieuse, Make Human. Si d’autres logiciels sont utilisés par les professionnels, Daz 3D et son modèle économique attractif (gratuité du logiciel et de nombreuses ressources, magasin de créations tierces avec une large échelle de prix) demeure omniprésent chez les artistes amateurs et autres hobbyistes de tous poils. Le développeur de jeux vidéo amateur fini invariablement par croiser sa route, et l’envie d’utiliser ses modèles de façon interactive titille plus d’un enthousiaste !

La société en est consciente et propose depuis quelques années maintenant une licence interactive (un surcoût à l’achat d’un modèle permettant de l’utiliser dans une création interactive – notamment un jeu vidéo) ainsi que des « ponts » pour exporter les modèles vers d’autres logiciels de création 3D, notamment Unity ou Unreal. L’apparition de ces ponts a tout d’abord fait naître un grand espoir chez Bob, car le passage de Daz à Unity était longtemps fait de bidouilles et de désillusions. Las, le « pont » mis à disposition me déçoit pour plusieurs raisons, mais deux sont assez rédhibitoires : tout n’est pas automatique – ce qui impose de recourir aux bonnes vieilles bidouilles sans maîtriser tout le processus d’export – et Daz impose la création de dossiers et l’utilisation de shaders, ce que je n’aime pas. Car si pour un développeur expérimenté qui souhaite se tourner vers le AAA, cela peut être intéressant, le procédé est trop lourd pour développer un mini-jeu du dimanche après-midi, et complexifie tout.

J’ai donc décidé de me passer de ce « pont » (n’utilisant pas Unreal, je ne sais pas si le passage de Daz 3D à Unreal se passe mieux), mais pas des modèles de Daz 3D. Heureusement, si le « pont » est une solution proposée par Daz 3D, elle n’est absolument pas imposée. J’ai donc mis au point une méthode simple et rapide qui me permet d’obtenir ce que je veux : un personnage modulable de Daz 3D dans Unity, avec des matériaux et shaders assez simples pour que je sois capable de les comprendre et de les modifier selon mes envies. Je vous propose aujourd’hui de découvrir cette méthode.

ÉTAPES

Avertissement

Ce tutoriel ne s’intéresse absolument pas à l’optimisation du personnage : les modèles de Daz 3D sont très détaillés et gourmands en ressources. La méthode proposée peut convenir pour un personnage principal dans un jeu conçu pour un PC assez puissant, mais pas pour de nombreux personnages secondaires (ennemis notamment) ni pour un jeu pour smartphone ou appareil peu puissant. Une optimisation préalable sera nécessaire, notamment de diminution des meshes (voir de fusion de certains modèles). Un outil (payant) existe pour ce faire : le decimator. Les développeurs sans-le-sou pourront se tourner vers Blender (ou attendre une promo de l’outil, deux ou trois fois par an).
Par ailleurs, je ne reviens pas sur les bases de Daz 3D ou d’Unity : il est nécessaire d’avoir une maîtrise minimum de ces deux logiciels pour suivre le tutoriel

Préambule

Comme exemple pratique, j’ai décidé de prendre le cas d’Arthur, le héros de la série des Ghosts’n quelque chose, classique parmi les classiques. Dans cette œuvre, le joueur dirige un chevalier en armure type Renaissance, qui disparaît pour laisser le héros en caleçon blanc à motif rouge au moindre contact avec un ennemi. Une façon rigolote de gérer la barre de vie du héros, qui est restée dans les annales du jeu vidéo. Dans ce tutoriel, je vais donc créer un chevalier en armure avec une belle barbe rousse et un caleçon au goût douteux, et m’assurer de pouvoir faire disparaître l’armure selon mon bon plaisir !

Le magasin d’Unity propose tout ce dont j’ai besoin : une figure Genesis 8.1, une armure renaissance, une barbe rousse et même le caleçon de mes rêves ! Comme le but final est tout de même de disposer d’un personnage jouable, je ferai en sorte qu’Arthur puisse recevoir des poses (et donc animations) de Daz 3D; une des poses de base de Genesis 8.1 me suffira amplement pour valider le fonctionnement. Avec Daz 3D et Unity, je dispose donc de tout ce qu’il me faut pour ce tutoriel.

1 – Préparer et exporter le personnage avec Daz 3D

Dans Daz 3D, je prépare un personnage masculin Genesis 8.1, je lui enfile le caleçon et fait pousser la barbe. Je l’équipe ensuite de son armure; la barbe dépasse du casque, ce n’est pas un problème car je relèverai la visière mais dans Unity, pas maintenant.

En parallèle, je crée un nouveau projet dans Unity (un projet 3D avec le render built-in, que j’ai appelé ArthurProject). Dans Daz 3D, je sélectionne Arthur puis clique sur File -> Export. Je choisis alors l’exportation au format FBX (un format universel d’Autodesk) et choisis le dossier d’enregistrement, qui doit être dans le dossier « Assets » du projet Unity (personnellement et parce qu’une bonne organisation est à la base de tout projet informatique réussi : Assets->Resources->Daz3D->Characters->Arthur->Arthur_001.fbx).

Une fenêtre de dialogue proposant d’affiner les options d’enregistrement s’affiche alors. Je barre en rouge les éléments sélectionnés par défaut qu’il faut éviter, et surligne en jaune ceux qui doivent absolument être sélectionnés.

2 – Importer et corriger le personnage dans Unity

En mettant la fenêtre Unity au premier plan, vous aller constater que le logiciel « mouline » un peu, puis que le dossier Arthur_001 et le modèle Arthur_001 sont visibles dans le dossier d’enregistrement.

Il faut maintenant affiner l’importation du modèle. Sélectionnez-le et affichez l’onglet « Materials » dans l’inspecteur. Sans rien modifier, il suffit de cliquer alternativement sur « Extract Textures » puis « Extract Materials », en indiquant ou créant à chaque fois un dossier de destination. Les textures et les matériaux seront alors créés, et affectés dans le tableau « Remapped Materials ».

Affichez ensuite l’onglet « Rig » et précisez que le type d’animation est générique (avec un type « Humanoïde », les poses et animation de Daz 3D ne s’appliqueront pas correctement). Cliquez sur « Apply ».

Vous pouvez désormais faire glisser Arthur dans la scène ouverte. Vous remrquerez notamment qu’un avatar (nécessaire pour les animations et les poses) a été créé, et que le dossier dans lequel vous avez extrait les Materials est bien rempli.

Evidemment, il y a quelques réglages. Premièrement je relève le ventail du casque. La barbe dépasse toujours un peu du gorgerin, mais je n’ai pas envie de m’embêter à régler ce détail maintenant.

Ensuite, et il s’agit là d’un problème récurrent avec l’importation des modèles de Daz 3D, Arthur arbore un maquillage gothique assez grossier.

Il s’agit d’un problème de matériel assez facile à gérer. Pour les pupilles, il suffit de modifier le matériel « Cornea », l’indiquer comme étant transparent et pousser la transparence de la couleur principale (Albedo) a fond. Pour les cils, il faut indiquer que le matériel « Eyelashes » est « Fade » et modifier la couleur principale (Albedo). Et voilà ! D’autres petits ajustements peuvent être nécessaires sur des points de détail, mais la solution se trouve toujours dans la gestion de la transparence.

La couleur de la barbe d’Arthur dépend pour sa part de trois matériaux qui ont viré au blanc avec l’importation. Il suffit de leur redonner un bel éclat roux !

Et voilà un Arthur tout beau, tout neuf !

3 – Rendre l’équipement modulable

Il va falloir un peu coder, mais rien de compliqué. Le principe est simple : pour faire disparaître l’armure d’Arthur, il suffit de désactiver les éléments qui la composent. Si je les sélectionne dans la hiérarchie et que je décoche la petite case dans l’inspecteur, Arthur se retrouve en caleçon ! Il suffit donc de faire la même chose, mais au moyen d’un script, ce qui est très simple.

Je créé donc un script C# « Instantiation » que j’ajoute à l’élément Arthur_001. Je prévois l’affichage dans l’inspecteur des éléments nécessaires à la désactivation de l’armure, à savoir un tableau contenant tous les éléments de cette armure, et un booléen pour déterminer si l’armure est activée ou non.

J’écris ensuite une fonction publique et simple qui se résume ainsi : si le booléen est vrai, l’armure est équipée et tous les éléments du tableau stockant les pièces de l’armure sont activés; dans le cas contraire, ils sont tous désactivés.

J’appelle cette fonction dans la fonction Start() préexistante. Ainsi, selon que le booléen est vrai ou non, Arthur sera instancié avec ou sans son armure. Si j’ai besoin de modifier l’apparence d’Arthur en cours de jeu, il me suffira de changer la valeur du booléen et d’appeler la fonction InstantiationArmure(), par exemple lors d’un contact avec un ennemi. Simple comme tout. Mon script complet est le suivant.

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Instantiation : MonoBehaviour
{
    [Header("Removable")]
    public GameObject[] ARMURE;
    public bool ArmureEquipee;

    void Start()
    {
        InstantiationArmure();        
    }

    void Update()
    {
        
    }

    public void InstantiationArmure()
    {
        if (ArmureEquipee)
        {
            for (int i = 0; i < ARMURE.Length; i++)
            {
                ARMURE[i].SetActive(true);
            }
        }

        else if (!ArmureEquipee)
            for (int i = 0; i < ARMURE.Length; i++)
            {
                ARMURE[i].SetActive(false);
            }
    }
}

Avant de lancer le jeu pour m’assurer que le script fonctionne, je n’oublie pas de remplir mon tableau avec les éléments de l’armure (par de simples glisser-déposer).

Je lance alors le jeu et – ô magie – Arthur se retrouve en short ! Preuve que le script fonctionne.

4 – Exporter une pose ou une animation de Daz 3D

En théorie, vous pouvez tout à fait rajouter des poses et animations dans le modèle Daz 3D, l’enregistrer avec et les utiliser dans Unity. En pratique, je préfère les exporter individuellement, ce qui simplifie leur gestion et permet de les réutiliser entre plusieurs personnages. Je retourne donc dans Daz 3D et applique une pose à Arthur.

J’exporte à nouveau en FBX, mais cette-fois je ne sélectionne que la figure et la pose; je donne un nom temporaire (Pose_001) et enregistre dans le même dossier que Arthur_001.

De retour dans Unity, en affichant le contenu de Pose_001, je constate la présence d’une animation (pour Daz/Unity, une pose et une animation sont plus ou moins la même chose).

Pour récupérer cette animation, il suffit de cliquer dessus et d’utiliser le raccourci clavier « Ctrl+D »; une copie est alors créée dans le dossier, à l’extérieur de Pose_001 qui peut être effacé sans ménagement !

5 – Appliquer la pose ou animation dans Unity

RAPPEL : ce qui est expliqué ci-après fonctionne exactement de la même façon pour une animation.

Pour appliquer la pose (renommée « AnimArthur001@Salut » et déplacée dans un dossier ad hoc, on ne se refait pas !), il est nécessaire de créer un « Animation Controller » et de l’affecter à l’élément « Animator » d’Arthur. Dans la fenêtre « Animator » (qu’il faut aller chercher dans le menu Window->Animation->Animator pour l’afficher, car elle ne l’est pas par défaut), il suffit ensuite de glisser-déposer la pose, qui va se connecter immédiatement à l’événement « Entry », car il n’y a pas d’autre pose ou animation. En clair, Arthur prendra cette pose dès que le jeu sera lancé.

Il est temps de transformer Arthur en prefab. Je glisse alors deux prefab Arthur_001 sur la scène, le premier avec armure activée, l’autre avec armure désactivée. Si tout se passe comme prévu, lorsque je lancerai le jeu, les deux Arthur prendront la pose de salut, l’un en armure, l’autre en caleçon. Je me lance…

Victoire ! Maintenant que je sais afficher et masquer les éléments d’équipement d’Arthur et lui faire prendre une pose – et que son maquillage gothique n’est plus qu’un lointain souvenir – je peux considérer que l’importation de mon personnage est terminée, et commencer le développement concret du jeu ! J’espère que ce petit tutoriel, que j’ai essayé de rendre le plus clair possible, vous sera utile. Bon code !

Bob Dupneu

Par ailleurs

L’E3, c’est fini, sauf grosse surprise dans les années à venir. L’annulation de l’édition 2023, après celles de 2022 et 2020, entrecoupées par une édition digitale sans saveur en 2021 et précédée par une édition 2019 décevante (note en bas de page), est actée depuis quelques jours. Le salon, dont les heures de gloire ont une quinzaine d’années désormais, ne devrait pas revenir, délaissé par des éditeurs qui disposent désormais des moyens nécessaires pour assurer seuls leur promotion. Et comme le salon ne s’est jamais vraiment ouvert au grand public, la désertion des professionnels signifie la fin de l’aventure. Pas la fin des salons dédiés aux jeux vidéo, car d’autres salons (Gamescon de Cologne, Tokyo Game Show ou dans une moindre mesure Paris Games Week) fonctionnent encore correctement. Mais alors que l’E3 avait basé sa légende sur les annonces fracassantes et les surprises, les salons encore existant se contentent de laisser le public essayer des jeux déjà annoncés, et attendus. Une différence de philosophie.

Il faut avouer que l’E3 pouvait s’avérer risqué pour les éditeurs, tant une annonce ratée pouvait avoir des conséquences catastrophiques, tandis que la surenchère obligatoire à chaque nouvelle édition n’était plus tenable à terme. L’E3, salon réservé aux professionnels, c’était également le salon des journalistes du microcosme vidéoludique, qui en retiraient un pouvoir phénoménal avant l’Internet 2.0 : il s’agissait de séduire les rédactions, seules à même d’assurer une communication de masse auprès des joueurs. La disparition de l’E3 va de pair avec celle du journalisme vidéoludique, l’un comme l’autre n’étant plus utiles aux industries du secteur. Il restera de l’E3 quelques moments d’anthologie, les souvenirs des reportages écrits ou télévisuels qui parlaient presque autant des aventures des journalistes à L.A. que du salon lui-même, et l’excitation à l’approche de cet événement, annonciateur de rêves – parfois déçus – et des vacances d’été – parfois pluvieuses.

Leave a Reply

Votre adresse de messagerie ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.