Você pode importar malhas personalizadas para criar tudo, desde NPCs até um tecido animado de um barco à vela. Usamos a configuração personalizada do Importador para trazer personagens personalizados mais exóticos, como as misteriosas criaturas de buraco negro e os droides de serviço amigáveis, embora desatentos.
As seções a seguir abordam como usamos rigging e skinning, PBR (aparência de superfície) e VFX para construir um de nossos personagens mais complicados, que chamamos de "Criatura". Queríamos que ela brilhasse, emitisse alguma luz, tivesse trilhas de fumaça de partículas e um movimento fluido que envolvesse o skinning de um rig com articulações suficientes para criar as ondas convincentes de seus tentáculos.

Rig
Quando estávamos rigging a Criatura, achamos melhor modelar o personagem em uma pose neutra, porque essa pose é mais adequada para se curvar em várias direções. Se tivéssemos modelado a Criatura com seus tentáculos já enrolados, isso teria levado a estiramentos se animássemos os tentáculos para se curvarem na direção oposta. As seguintes capturas de tela mostram a Criatura em seu estado natural:


A partir de uma pose neutra, adicionamos articulações de forma econômica, focando nas áreas que precisavam de mais movimento. Quanto menos articulações, melhor, porque você terá que gerenciá-las ao fazer o skinning do seu personagem, e terá menos para controlar ao animá-las. Nas capturas de tela anteriores, a Criatura parece ter muitas articulações no centro, mas o corpo principal tem apenas uma articulação.
A maioria das outras articulações está voltada para os tentáculos e mandíbulas. Com os tentáculos, queríamos muito movimento secundário, ou movimento que é em camadas, para criar um efeito convincente de que todos estão se movendo sozinhos. No entanto, a massa central dos tentáculos estava tão próxima que parecia desperdício fazer articulações para todos eles, tanto em termos de desempenho quanto de esforço para animar. Então, em vez disso, tratamos a massa central como um único tentáculo grande com "caudas" menores onde as pontas deixavam a massa central.

Achamos as seguintes diretrizes úteis para que a malha do personagem seja importada corretamente para o Studio:
- Articulações e ossos individuais devem ter nomes únicos.
- Malhas não devem ter o mesmo nome que articulações e ossos.
- Malhas não devem ter transformações antes do skinning/vinculação; em outras palavras, as transformações devem ser 0 e as escalas devem ser 1.
- Normais da malha devem estar voltadas para fora (o modelo não deve parecer do avesso).
- Esqueletos não devem ter nenhum fator de escala; todas as articulações devem ser [1, 1, 1].
Skin
Quando terminamos o esqueleto da Criatura, o próximo passo foi fazer o skinning da malha. O skinning pode ser uma tarefa árdua, então, para facilitar, é melhor estar familiarizado com as diferentes configurações iniciais de skinning do seu aplicativo DCC para encontrar a que você gosta. Como este é um personagem orgânico, fizemos o skinning com bastante queda em cada articulação e sobreposição entre elas. Dessa forma, a curvatura parece suave e não abrupta. As seguintes capturas de tela mostram um mau skinning e um skinning suave, respectivamente:


Achamos que as seguintes diretrizes produzem os melhores resultados para o skinning:
- As influências de skinning (o que significa que afetam uma parte do modelo quando movidas) devem ter um máximo de 4 influências por vértice.
- Nomes de articulações e malhas precisam ser únicos, tanto entre si quanto entre si.
- Qualquer articulação que você deseja importar para o Studio deve ter alguma influência no skinning do modelo, caso contrário, o motor não a importa. Sempre que possível, faça o skinning do seu modelo em sua pose original ou "de vinculação".
Importar a malha para o Studio
Importar seus personagens personalizados para o Studio é uma das partes mais emocionantes do processo, porque você pode ver suas criações no jogo que está construindo!
Para importar a malha para o Studio:
Exporte o personagem do aplicativo DCC e certifique-se do seguinte:
- Todas as normais, escalas e nomes estão corretos.
- O personagem tem toda a hierarquia de articulações e ossos e todas as malhas.
- As malhas têm menos de 10.000 triângulos para cada parte da malha.
- O tamanho total da malha não ultrapassa 2000 unidades em nenhum eixo.
- Veja Requisitos de Malha para uma lista completa de especificações do modelo.

No Importador, importe o arquivo personalizado .fbx ou .obj.

Fazer a criatura brilhar
Uma vez que o modelo da Criatura estava estável e não exigia mais importações imediatas para o Studio, começamos a montar os objetos SurfaceAppearance, luzes e efeitos visuais. Fizemos isso para garantir que a qualidade do modelo fosse boa o suficiente antes de prosseguir para colocar e editar qualquer aspecto dele.

Sabíamos que queríamos que a Criatura fosse escura, e os pontos focais fossem os olhos e seus tentáculos "agarradores". Pontos altos de contraste tendem a atrair atenção, então ter alguns fortes garante que o espectador saiba onde focar. O Studio suporta materiais neon que se auto-iluminam, então, no início, separamos os olhos para que pudessem ser seu próprio material, separado do resto do personagem. Fizemos algo semelhante para os tentáculos, para que eles brilhassem apenas nas pontas.

O material neon não emite luz real, então, após alguns testes, adicionamos partes separadas para controlar a colocação e direção da emissão de luz. Isso garantiu que a iluminação fosse direcionada de uma maneira que realçasse o brilho dos olhos e também projetasse sua própria fonte de luz.

Note que os SpotLights adicionam um efeito visual à Criatura próximo a outras superfícies ou a um jogador.

Além disso, queríamos que os tentáculos da Criatura emitissem algumas partículas, para que deixassem um rastro de fumaça quando se movessem. Como os tentáculos são muito longos, adicionar o ParticleEmitter ao tentáculo inteiro faria com que as partículas fossem emitidas de todo o tentáculo em vez da ponta. Para combater isso, usamos uma pequena parte posicionada perto da extremidade do tentáculo, para que pudéssemos controlar o tamanho, a colocação e a direção da emissão das partículas.

Fazer o VFX seguir o personagem
As posições da malha do personagem com skin não são atualizadas quando a Criatura anima, então precisávamos de um método para garantir que o VFX, SFX e luzes seguissem a Criatura corretamente. Para isso, criamos um script controlador de VFX e usamos o CollectionService para informar as partes que continham o VFX onde estavam os ossos da criatura e para segui-los.
Colocamos o seguinte LocalScript em StarterPlayer → StarterPlayerScripts. Isso basicamente executa a função de atualização do VFX.
Script Local-- Adicione este trecho a um script local existente que faz conexões de PreSimulationlocal RunService = game:GetService("RunService")local vfx = require(workspace.VfxUpdateModule)RunService.PreSimulation:Connect(vfx.updateVfx)Script de Módulo-- Este módulo anexa partes a animações para que sejam atualizadas à medida que-- a animação é reproduzida. É uma solução alternativa para as limitações atuais-- com Joints e Bones e não será sempre necessário.---- Pré-requisitos:-- Para ser incluído, os modelos precisam da tag "AnimatedVfxModel" e uma pasta-- de todas as partes que você deseja sincronizar com a animação. Cada parte precisa-- de um atributo chamado "AttachedBoneName" que se refere ao nome do-- osso que você deseja anexar. As partes também devem já estar em suas-- posições corretas em relação ao osso desejado.---- Para Usar:-- Um LocalScript deve requerer este módulo, então conectar-- VfxUpdateModule.updateVfx ao evento RunService.PreSimulation.local VfxUpdateModule = {}local CollectionService = game:GetService("CollectionService")-- CONFIGURAÇÃO - isso deve ser executado uma vez em cada cliente.-- Coletar todos os modelos com a taglocal vfxModels = CollectionService:GetTagged("AnimatedVfxModel")local vfxTable = {} -- onde armazenaremos todas as partes e offsets-- Atribuir uma tabela a cada modelo que conterá todas as partes vfx e offsetfor _, model in vfxModels dovfxTable[model] = {}local vfxParts = model:FindFirstChild("VFX"):GetChildren() -- Encontrar a pasta VFX-- Encontrar o osso via atributo e calcular o offset para cada parte.for _,part in vfxParts dolocal name = part:GetAttribute("AttachedBoneName")local bone = model:FindFirstChild(name, true)if bone thenlocal offset = (bone.TransformedWorldCFrame:inverse() * part.CFrame)vfxTable[model][part] = {bone, offset}elsewarn("A parte Vfx refere-se a um osso que não pôde ser encontrado.")endendendprint(vfxTable)-- ATUALIZAÇÃO - Isso deve ser vinculado ao RunService.PreSimulation de cada cliente-- Percorra todos os modelos e, em seguida, atualize todas as partes do modelo para corresponder ao bonecframe.function VfxUpdateModule.updateVfx()for model, vfxParts in vfxTable dofor part, bone in vfxParts dopart.CFrame = bone[1].TransformedWorldCFrame * bone[2]endendendreturn VfxUpdateModuleCriamos um VFXUpdateModule ModuleScript para informar a qualquer objeto marcado adequadamente com AnimatedVfxModel para atualizar em um evento de reprodução.
Marcamos os grupos de modelos necessários com AnimatedVfxModel usando a seção Tags de suas propriedades. Usar tags permite que o VFXUpdateModule saiba qual objeto procurar como o primeiro filho VFX e aplicar a atualização.

Finalmente, adicionamos um atributo personalizado AttachedBoneName à parte que queríamos animar e adicionamos o nome preciso da articulação que queríamos que seguisse.
Texturizar a criatura
Em seguida, configuramos os mapas de textura PBR (Renderização Baseada em Física). Esses poderosos bitmaps dão à criatura o brilho variado e as variações de superfície para fazê-la parecer que tem muitas pequenas protuberâncias e imperfeições. Esse efeito visual ajuda a vender a aparência da Criatura quando está mais próxima do jogador.

Aqui está como criamos os mapas de textura de aparência de superfície:
Os mapas de textura para este personagem estavam todos em uma "folha" por mapa. Isso tornou a criatura mais eficiente e significou que tivemos que lidar com menos mapas de textura ou objetos SurfaceAppearance.




Para áreas que precisavam brilhar ou serem auto-iluminadas, como os "tentáculos agarradores", também usamos transparência no SurfaceAppearance para misturar com essas partes.

Achamos útil seguir estas diretrizes ao criar mapas de textura de aparência de superfície:
- Certifique-se de que seus mapas não sejam maiores que 1024×1024.
- Seu canal verde pode precisar ser invertido dependendo do aplicativo em que você trabalhou.
Animar a criatura
Animar é muito subjetivo e tem um estilo pessoal. As opções incluem captura de movimento, animação manual "key frame" em seu aplicativo DCC ou usar o poderoso Editor de Animação do Studio.
Como mencionamos anteriormente, queríamos ter certeza de que tínhamos articulações suficientes para um movimento fluido, bem como membros suficientes, para que a animação da criatura parecesse natural e "em camadas". O empilhamento, também conhecido como movimento secundário, é algo que você vê na vida cotidiana — quando você estende o braço, cada articulação reage ao impulso inicial do seu braço superior, e cada articulação do seu corpo não se move ou descansa ao mesmo tempo.
Usamos essa técnica para animar a Criatura para que os membros parecessem reagir ao movimento impulsionado por seu corpo, como mostrado aqui:

Se você estiver usando um aplicativo DCC externo para animação, achamos que as seguintes diretrizes funcionam melhor:
- Defina as taxas de quadros para pelo menos 30 FPS.
- Crie suas animações com o mesmo personagem ao qual você está aplicando.
- Exporte seus dados de animação como um arquivo .fbx separado.
Como animamos o personagem fora do Studio, precisávamos usar o Editor de Animação para importar o arquivo de animação .fbx. O editor permite que você selecione qualquer avatar com articulações ou motores e os controle por pontos na linha do tempo.
Para importar uma animação:
Na guia Avatar da barra de ferramentas, clique em Editor de Clipes.
Selecione o personagem rigged que você deseja animar no Roblox. O personagem deve ser o mesmo que você está rigging em seu aplicativo DCC externo.
Clique no botão ⋯ na seção superior esquerda da janela do editor, selecione Importar da Animação FBX e localize seu arquivo de animação .fbx exportado.

Quando estiver satisfeito com sua animação, você pode exportá-la para descobrir o ID da animação, que você pode usar em scripts do Roblox para executá-las. Por exemplo, você pode adicionar um Script ao grupo do modelo do personagem importado e usar o seguinte código para executar a animação:
local animationId = "SEU_ID_DE_ANIMAÇÃO"local char = script.Parentlocal 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)
Resultados finais
Após alguns ajustes finais nas cores, brilho das luzes e mais alguns efeitos de partículas para dar um efeito de halo mais forte em frente às janelas, aqui está o resultado final na estação espacial!
