Personnages personnalisés

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Vous pouvez importer des maillages personnalisés pour créer tout, des PNJ à un tissu animé d'un voilier. Nous avons utilisé le paramètre personnalisé de l'Importateur pour intégrer des personnages personnalisés plus exotiques, comme les mystérieuses créatures de trou noir et les droïdes de service amicaux, bien qu'inconscients.

Les sections suivantes expliquent comment nous avons utilisé le rigging et le skinning, le PBR (apparence de surface), et les VFX pour construire l'un de nos personnages les plus compliqués que nous avons nommé "Créature". Nous voulions qu'il brille, émette de la lumière, ait des traînées de fumée de particules, et un mouvement fluide qui impliquait de skinner un rig avec suffisamment de joints pour créer les vagues convaincantes de ses tentacules.

Bannière de la Créature

Rig

Lorsque nous avons riggé la Créature, nous avons trouvé qu'il était préférable de modéliser le personnage dans une pose neutre, car cette pose est la mieux adaptée pour se plier dans plusieurs directions. Si nous avions modélisé la Créature avec ses tentacules déjà enroulés, cela aurait conduit à un étirement si nous avions animé les tentacules pour se plier dans la direction opposée. Les captures d'écran suivantes montrent la Créature dans son état naturel :

À partir d'une pose neutre, nous avons ajouté des joints de manière économique, en nous concentrant sur les zones qui nécessitaient le plus de mouvement. Moins il y a de joints, mieux c'est, car vous devrez les gérer lors du skinning de votre personnage, et vous aurez moins à contrôler lorsque vous les animerez. Dans les captures d'écran précédentes, la Créature semble avoir beaucoup de joints au centre, mais le corps principal n'a qu'un seul joint.

La plupart des autres joints se trouvent vers les tentacules et les mandibules. Avec les tentacules, nous voulions beaucoup de mouvement secondaire, ou mouvement superposé, pour créer un effet convaincant qu'ils se déplacent tous seuls. Cependant, la masse centrale des tentacules était si proche les unes des autres qu'il semblait inutile de créer des joints pour toutes, tant en termes de performance que d'effort pour les animer. Nous avons donc traité la masse centrale comme un seul grand tentacule avec de plus petites "queues" là où les pointes quittaient la masse centrale.

Créature de Face, Maya

Nous avons trouvé les directives suivantes utiles, afin que le maillage du personnage s'importe correctement dans Studio :

  • Les joints et os individuels doivent avoir des noms uniques.
  • Les maillages ne doivent pas avoir le même nom que les joints et os.
  • Les maillages ne doivent avoir aucune transformation avant le skinning/liaison ; en d'autres termes, les transformations doivent être 0 et les échelles doivent être 1.
  • Les normales des maillages doivent faire face vers l'extérieur (le modèle ne doit pas avoir l'air à l'envers).
  • Les squelettes ne doivent avoir aucun facteur d'échelle ; tous les joints doivent être [1, 1, 1].

Skin

Lorsque nous avons terminé le squelette de la Créature, l'étape suivante était de skinner le maillage. Le skinning peut être une tâche ardue, donc pour faciliter les choses, il est préférable d'être familier avec les différents paramètres de skinning initiaux de votre application DCC pour trouver celui que vous aimez. Étant donné qu'il s'agit d'un personnage organique, nous l'avons skinné avec beaucoup de dégradé sur chaque joint et un chevauchement entre eux. De cette façon, la flexion semble fluide et non aigüe. Les captures d'écran suivantes montrent un mauvais skinning et un bon skinning respectivement :

Mauvais Skinning
Bon Skinning

Nous avons trouvé que les directives suivantes produisaient les meilleurs résultats pour le skinning :

  • Les influences de skinning (c'est-à-dire celles qui affectent une partie du modèle lorsqu'elles sont déplacées) doivent être au maximum de 4 influences par vertex.
  • Les noms des joints et des maillages doivent être uniques, tant les uns par rapport aux autres qu'entre eux.
  • Tout joint que vous souhaitez importer dans Studio doit avoir une certaine influence sur le skinning du modèle, sinon le moteur ne l'importera pas. Chaque fois que possible, skinner votre modèle dans sa pose originale ou de "liaison".

Importer le maillage dans Studio

Importer vos personnages personnalisés dans Studio est l'une des parties les plus excitantes du processus, car vous pouvez voir vos créations dans le jeu que vous construisez !

Pour importer le maillage dans Studio :

  1. Exportez le personnage depuis l'application DCC et assurez-vous des éléments suivants :

    • Toutes les normales, échelles et noms sont corrects.
    • Le personnage a toute la hiérarchie des joints et des os ainsi que tous les maillages.
    • Les maillages sont tous en dessous de 10 000 triangles pour chaque partie du maillage.
    • La taille totale du maillage ne dépasse pas 2000 unités sur un axe.
    • Voir Exigences de Maillage pour une liste complète des spécifications du modèle.
    Créature dans l'outil DCC
  2. Dans l'Importateur, importez le fichier .fbx ou .obj personnalisé.

    Créature Importée Dans Studio

Faire briller la créature

Une fois que le modèle de la Créature était stable et ne nécessitait plus d'importation immédiate dans Studio, nous avons commencé à assembler les objets SurfaceAppearance, les lumières et les effets visuels. Nous avons fait cela pour nous assurer que la qualité du modèle était suffisamment bonne avant de procéder à la mise en place et à l'édition de tout aspect de celui-ci.

Exemple de Créature Lumineuse

Nous savions que nous voulions que la Créature soit sombre, et que les points focaux soient les yeux et ses tentacules "attrapants". Les points de contraste élevés ont tendance à attirer l'attention, donc avoir quelques-uns forts garantit que le spectateur sait sur quoi se concentrer. Studio prend en charge les matériaux néon qui s'auto-illuminent, donc au début, nous avons séparé les yeux afin qu'ils puissent être leur propre matériau par rapport au reste du personnage. Nous avons fait quelque chose de similaire pour les tentacules, afin qu'ils brillent uniquement sur leurs pointes.

Yeux de la Créature dans Studio

Le matériau néon n'émet pas de lumière réelle, donc après quelques tests, nous avons ajouté des parties séparées pour contrôler le placement et la direction de l'émission de lumière. Cela a assuré que l'éclairage était dirigé de manière à améliorer la brillance des yeux et à projeter sa propre source de lumière.

Lumière de Point dans Studio

Remarquez que les SpotLights ajoutent un éclat visuel à la Créature près d'autres surfaces ou d'un joueur.

Exemple de Lumière de la Créature

De plus, nous voulions que les tentacules de la Créature émettent des particules, afin qu'il laisse derrière lui une traînée de fumée lorsqu'il se déplace. Étant donné que les tentacules sont très longs, ajouter le ParticleEmitter à l'ensemble du tentacule ferait en sorte que les particules s'émettent de l'ensemble du tentacule au lieu de la pointe. Pour contrer cela, nous avons utilisé une petite partie positionnée près de l'extrémité du tentacule, afin que nous puissions contrôler la taille, le placement et la direction de l'émission des particules.

Exemple de Particule

Faire suivre les VFX au personnage

Les positions du maillage du personnage skinné ne sont pas mises à jour lorsque la Créature s'anime, donc nous avions besoin d'une méthode pour nous assurer que les VFX, SFX et lumières suivaient tous correctement la Créature. Pour ce faire, nous avons créé un script de contrôleur VFX et utilisé CollectionService pour informer les parties contenant les VFX où se trouvaient les os de la créature et pour les suivre.

  1. Nous avons placé le LocalScript suivant dans StarterPlayerStarterPlayerScripts. Cela exécute essentiellement la fonction de mise à jour des VFX.

    Script Local
    -- Ajoutez ce snippet à un script local existant qui fait des connexions PreSimulation
    local RunService = game:GetService("RunService")
    local vfx = require(workspace.VfxUpdateModule)
    RunService.PreSimulation:Connect(vfx.updateVfx)
    Script de Module
    -- Ce module attache des parties aux animations afin qu'elles soient mises à jour au fur et à mesure que
    -- l'animation se joue. C'est une solution de contournement pour les limitations actuelles
    -- avec les Joints et les Os et ne sera pas toujours nécessaire.
    --
    -- Prérequis :
    -- Pour être inclus, les modèles doivent avoir le tag "AnimatedVfxModel", et un dossier
    -- de toutes les parties que vous souhaitez synchroniser avec l'animation. Chaque partie doit
    -- avoir un attribut appelé "AttachedBoneName" qui fait référence au nom de l'os que vous souhaitez attacher. Les parties doivent également déjà être dans leurs
    -- positions correctes par rapport à l'os souhaité.
    --
    -- À utiliser :
    -- Un LocalScript doit requérir ce module, puis connecter
    -- VfxUpdateModule.updateVfx à l'événement RunService.PreSimulation.
    local VfxUpdateModule = {}
    local CollectionService = game:GetService("CollectionService")
    -- CONFIGURATION - cela doit s'exécuter une fois sur chaque client.
    -- Collectez tous les modèles avec le tag
    local vfxModels = CollectionService:GetTagged("AnimatedVfxModel")
    local vfxTable = {} -- où nous stockerons toutes les parties et décalages
    -- Assignez une table à chaque modèle qui contiendra toutes les parties vfx et décalage
    for _, model in vfxModels do
    vfxTable[model] = {}
    local vfxParts = model:FindFirstChild("VFX"):GetChildren() -- Trouvez le dossier VFX
    -- Trouvez l'os via l'attribut et calculez le décalage pour chaque partie.
    for _,part in vfxParts do
    local name = part:GetAttribute("AttachedBoneName")
    local bone = model:FindFirstChild(name, true)
    if bone then
    local offset = (bone.TransformedWorldCFrame:inverse() * part.CFrame)
    vfxTable[model][part] = {bone, offset}
    else
    warn("La partie Vfx fait référence à un os qui n'a pas pu être trouvé.")
    end
    end
    end
    print(vfxTable)
    -- MISE À JOUR - Cela doit être lié à chaque RunService.PreSimulation du client
    -- Parcourez tous les modèles, puis mettez à jour toutes les parties du modèle pour correspondre au bonecframe.
    function VfxUpdateModule.updateVfx()
    for model, vfxParts in vfxTable do
    for part, bone in vfxParts do
    part.CFrame = bone[1].TransformedWorldCFrame * bone[2]
    end
    end
    end
    return VfxUpdateModule
  2. Nous avons créé un VFXUpdateModule ModuleScript pour dire à tous les objets tagués correctement avec AnimatedVfxModel de se mettre à jour lors d'un événement de jeu.

  3. Nous avons tagué les groupes de modèles nécessaires avec AnimatedVfxModel en utilisant la section Tags de ses propriétés. L'utilisation de tags permet au VFXUpdateModule de savoir quel objet rechercher comme premier enfant VFX et d'appliquer la mise à jour.

    VFX Dans l'Exemple de Studio
  4. Enfin, nous avons ajouté un attribut personnalisé AttachedBoneName à la partie que nous voulions animer et ajouté le nom précis du joint que nous voulions qu'il suive.

Texturer la créature

Ensuite, nous avons configuré les cartes de texture PBR (Physically Based Rendered). Ces puissants bitmaps donnent à la créature le brillant varié et les variations de surface pour lui donner l'apparence d'avoir beaucoup de petites bosses et imperfections. Cet effet visuel aide à vendre l'apparence de la Créature lorsqu'elle est plus proche du joueur.

Comparaison de Texturation de la Créature

Voici comment nous avons créé les cartes de texture d'apparence de surface :

  1. Les cartes de texture pour ce personnage étaient toutes sur une "feuille" par carte. Cela a rendu la créature plus efficace et a signifié que nous devions gérer moins de cartes de texture ou d'objets SurfaceAppearance.

  2. Pour les zones qui devaient briller ou être auto-illuminées, comme les "tentacules attrapants", nous avons également utilisé de la transparence sur le SurfaceAppearance pour se fondre avec ces parties.

    Exemple d'Illumination

    Nous avons trouvé utile de suivre ces directives lors de la création de cartes de texture d'apparence de surface :

    • Assurez-vous que vos cartes ne sont pas plus grandes que 1024×1024.
    • Votre canal vert peut avoir besoin d'être inversé selon l'application avec laquelle vous avez travaillé.

Animer la créature

L'animation est très subjective et a un style personnel. Les options incluent la capture de mouvement, l'animation manuelle "key frame" dans votre application DCC, ou l'utilisation du puissant Éditeur d'Animation de Studio.

Comme nous l'avons mentionné plus tôt, nous voulions nous assurer d'avoir suffisamment de joints pour un mouvement fluide ainsi que suffisamment de membres, afin que l'animation de la créature semble naturelle et "superposée". La superposition, également connue sous le nom de mouvement secondaire, est quelque chose que vous voyez dans la vie quotidienne — lorsque vous lancez votre bras, chaque joint réagit à l'impulsion initiale de votre bras supérieur, et chaque joint de votre corps ne se déplace pas ou ne se repose pas en même temps.

Nous avons utilisé cette technique pour animer la Créature afin qu'elle ait l'impression que les membres réagissaient au mouvement entraîné par son corps comme montré ici :

Exemple d'Animation de la Créature

Si vous utilisez une application DCC externe pour l'animation, nous avons trouvé que les directives suivantes fonctionnent le mieux :

  • Réglez les taux de trame à au moins 30 FPS.
  • Créez vos animations avec le même personnage auquel vous les appliquez.
  • Exportez vos données d'animation en tant que fichier .fbx séparé.

Parce que nous avons animé le personnage en dehors de Studio, nous devions utiliser l'Éditeur d'Animation pour importer le fichier d'animation .fbx. L'éditeur vous permet de sélectionner n'importe quel avatar avec des joints ou des moteurs et de les animer via des points dans la chronologie.

Pour importer une animation :

  1. Dans l'onglet Avatar de la barre d'outils, cliquez sur Éditeur de Clip.

  2. Sélectionnez le personnage riggé que vous souhaitez animer dans Roblox. Le personnage doit être le même que celui que vous riggez dans votre application DCC externe.

  3. Cliquez sur le bouton dans la section supérieure gauche de la fenêtre de l'éditeur, sélectionnez Importer depuis l'Animation FBX, et localisez votre fichier d'animation .fbx exporté.

    Exemple d'Importation d'Animation 2
  4. Lorsque vous êtes satisfait de votre animation, vous pouvez l'exporter pour découvrir l'ID d'animation, que vous pouvez ensuite utiliser dans les scripts Roblox pour les exécuter. Par exemple, vous pouvez ajouter un Script au groupe de modèles du personnage importé et utiliser le code suivant pour exécuter l'animation :

    Exemple de Script d'Animation
    local animationId = "VOTRE_ID_ANIMATION"
    local char = script.Parent
    local animController = char:FindFirstChildWhichIsA("Humanoid") or char:FindFirstChildOfClass("AnimationController")
    local animation = Instance.new("Animation")
    animation.AnimationId = "rbxassetid://" .. tostring(animationId)
    local animTrack = animController:LoadAnimation(animation)
    animTrack:Play(0, 1, 1)

Résultats finaux

Après quelques ajustements finaux des couleurs, des intensités lumineuses, et quelques effets de particules supplémentaires pour donner un effet de halo plus fort devant les fenêtres, voici le résultat final dans la station spatiale !

Rendu Final de la Créature
©2026 Société Roblox. Roblox, le logo Roblox et Powering Imagination font partie de nos marques déposées aux États-Unis et dans d'autres pays.