Personagens personalizados

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

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.

Banner da Criatura

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.

Criatura Frontal, Maya

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:

Mau Skinning
Skinning Suave

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:

  1. 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.
    Criatura na Ferramenta DCC
  2. No Importador, importe o arquivo personalizado .fbx ou .obj.

    Criatura Importada Para o Studio

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.

Exemplo de Criatura Brilhante

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.

Olhos da Criatura no Studio

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.

Luz Pontual no Studio

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

Exemplo de Luz da Criatura

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.

Exemplo de Partícula

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.

  1. Colocamos o seguinte LocalScript em StarterPlayerStarterPlayerScripts. 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 PreSimulation
    local 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 tag
    local 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 offset
    for _, model in vfxModels do
    vfxTable[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 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("A parte Vfx refere-se a um osso que não pôde ser encontrado.")
    end
    end
    end
    print(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 do
    for part, bone in vfxParts do
    part.CFrame = bone[1].TransformedWorldCFrame * bone[2]
    end
    end
    end
    return VfxUpdateModule
  2. Criamos um VFXUpdateModule ModuleScript para informar a qualquer objeto marcado adequadamente com AnimatedVfxModel para atualizar em um evento de reprodução.

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

    Exemplo de VFX no Studio
  4. 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.

Comparação de Texturização da Criatura

Aqui está como criamos os mapas de textura de aparência de superfície:

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

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

    Exemplo de Iluminação

    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:

Exemplo de Animação da Criatura

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:

  1. Na guia Avatar da barra de ferramentas, clique em Editor de Clipes.

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

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

    Exemplo de Importação de Animação 2
  4. 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:

    Exemplo de Script de Animação
    local animationId = "SEU_ID_DE_ANIMAÇÃO"
    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)

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!

Renderização Final da Criatura
©2026 Roblox Corporation, Roblox, o logotipo Roblox e Powering Imagination estão entre nossas marcas registradas e não registradas nos EUA e em outros países.