Personajes personalizados

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

Puedes importar mallas personalizadas para crear todo, desde NPCs hasta una tela animada de un velero. Usamos la configuración personalizada del Importador para traer personajes personalizados más exóticos, como las misteriosas criaturas de agujero negro y los amistosos, aunque desinformados, droides de servicio.

Las siguientes secciones explican cómo usamos rigging y skinning, PBR (apariencia superficial), y VFX para construir uno de nuestros personajes más complicados que llamamos el "Criatura". Queríamos que brillara, emitiera luz, tuviera estelas de humo de partículas y un movimiento fluido que implicaba skinning un rig con suficientes articulaciones para crear las olas convincentes de sus tentáculos.

Banner de Criatura

Rig

Cuando estábamos riggeando la Criatura, encontramos que era mejor modelar el personaje en una pose neutral, porque esa pose es la más adecuada para doblarse en múltiples direcciones. Si hubiéramos modelado la Criatura con sus tentáculos ya enrollados, habría llevado a estiramientos si animábamos los tentáculos para doblarse en la dirección opuesta. Las siguientes capturas de pantalla muestran a la Criatura en su estado natural:

Desde una pose neutral, añadimos articulaciones de manera económica, enfocándonos en las áreas que necesitaban más movimiento. Cuantas menos articulaciones, mejor, porque tendrás que gestionarlas cuando skinnings tu personaje, y tendrás menos que controlar cuando los animes. En las capturas de pantalla anteriores, la Criatura parece tener muchas articulaciones en el centro, pero el cuerpo principal solo tiene una articulación.

La mayoría de las otras articulaciones están hacia los tentáculos y las mandíbulas. Con los tentáculos, queríamos mucho movimiento secundario, o movimiento que es en capas, para crear un efecto convincente de que todos se están moviendo por su cuenta. Sin embargo, la masa central de tentáculos estaba tan cerca uno del otro que parecía desperdiciado hacer articulaciones para todos ellos, tanto en rendimiento como en esfuerzo para animar. Así que en su lugar, tratamos la masa central como un solo tentáculo grande con "colas" más pequeñas donde las puntas salían de la masa central.

Criatura Frontal, Maya

Encontramos útiles las siguientes pautas, para que la malla del personaje se importe correctamente en Studio:

  • Las articulaciones y huesos individuales deben tener nombres únicos.
  • Las mallas no deben tener el mismo nombre que las articulaciones y huesos.
  • Las mallas no deben tener transformaciones antes del skinning/vinculación; en otras palabras, las transformaciones deben ser 0 y las escalas deben ser 1.
  • Los normales de la malla deben apuntar hacia afuera (el modelo no debería verse al revés).
  • Los esqueletos no deben tener ningún factor de escala; todas las articulaciones deben ser [1, 1, 1].

Skin

Cuando terminamos el esqueleto de la Criatura, el siguiente paso fue skinner la malla. El skinning puede ser una tarea ardua, así que para facilitar las cosas, es mejor estar familiarizado con los diferentes ajustes de skinning inicial de tu aplicación DCC para encontrar el que te gusta. Dado que este es un personaje orgánico, lo skinneamos con un buen nivel de caída en cada articulación y superposición entre ellas. De esta manera, la flexión se siente suave y no abrupta. Las siguientes capturas de pantalla muestran un mal skinning y un skinning suave, respectivamente:

Mal Skinning
Skinning Suave

Encontramos que las siguientes pautas produjeron los mejores resultados para el skinning:

  • Las influencias de skinning (lo que significa que afectan una parte del modelo cuando se mueven) deben ser un máximo de 4 influencias por vértice.
  • Los nombres de las articulaciones y mallas necesitan ser únicos, tanto entre ellas como entre sí.
  • Cualquier articulación que quieras importar a Studio debe tener alguna influencia en el skinning del modelo; de lo contrario, el motor no la importará. Siempre que sea posible, skinner tu modelo en su pose original o de "vínculo".

Importar la malla a Studio

Importar tus personajes personalizados a Studio es una de las partes más emocionantes del proceso, porque puedes ver tus creaciones en la experiencia que estás construyendo!

Para importar la malla a Studio:

  1. Exporta el personaje desde la aplicación DCC y asegúrate de lo siguiente:

    • Todos los normales, escalas y nombres son correctos.
    • El personaje tiene toda la jerarquía de articulaciones y huesos y todas las mallas.
    • Las mallas tienen todas menos de 10,000 triángulos para cada parte de la malla.
    • El tamaño total de la malla no excede 2000 unidades en ningún eje.
    • Consulta los Requisitos de Malla para obtener una lista completa de las especificaciones del modelo.
    Criatura en Herramienta DCC
  2. En el Importador, importa el archivo personalizado .fbx o .obj.

    Criatura Importada en Studio

Hacer que la criatura brille

Una vez que el modelo de la Criatura era estable y no requería más importaciones inmediatas a Studio, comenzamos a reunir los objetos de SurfaceAppearance, luces y efectos visuales. Hicimos esto para asegurarnos de que la calidad del modelo era lo suficientemente buena antes de proceder a colocar y editar cualquier aspecto de él.

Ejemplo de Criatura Brillante

Sabíamos que queríamos que la Criatura fuera oscura, y que los puntos focales fueran los ojos y sus tentáculos "agarradores". Los altos contrastes tienden a atraer atención, por lo que tener algunos fuertes asegura que el espectador sepa en qué enfocarse. Studio admite materiales de neón que se auto-iluminan, así que al principio separamos los ojos para que pudieran ser su propio material del resto del personaje. Hicimos algo similar para los tentáculos, de modo que solo brillaran en sus puntas.

Ojos de Criatura en Studio

El material de neón no emite luz real, así que tras algunas pruebas, agregamos partes separadas para controlar la colocación y dirección de la emisión de luz. Esto aseguró que la iluminación estaba dirigida de una manera para realzar el brillo de los ojos y también proyectar su propia fuente de luz.

Luz Puntual en Studio

Nota que los SpotLights añaden un destello visual a la Criatura cerca de otras superficies o un jugador.

Ejemplo de Luz de Criatura

Además, queríamos que los tentáculos de la Criatura emitieran algunas partículas, para que dejaran un rastro de humo cuando se movía. Debido a que los tentáculos son muy largos, añadir el ParticleEmitter a todo el tentáculo haría que las partículas se emitieran desde todo el tentáculo en lugar de la punta. Para combatir esto, utilizamos una pequeña parte posicionada cerca del extremo del tentáculo, de modo que pudiéramos controlar el tamaño de emisión, colocación y dirección de las partículas.

Ejemplo de Partículas

Hacer que los VFX sigan al personaje

Las posiciones de la malla del personaje que ha sido skinned no se actualizan cuando la Criatura anima, así que necesitábamos un método para asegurarnos de que los VFX, SFX, y luces siguieran a la Criatura correctamente. Para lograr esto, creamos un script de controlador de VFX y usamos CollectionService para informar las partes que contenían los VFX donde estaban los huesos de la Criatura y para seguirlos.

  1. Colocamos el siguiente LocalScript en StarterPlayerStarterPlayerScripts. Esto esencialmente ejecuta la función de actualización de VFX.

    Script Local

    -- Agrega este fragmento a un script local existente que hace conexiones de PreSimulation
    local RunService = game:GetService("RunService")
    local vfx = require(workspace.VfxUpdateModule)
    RunService.PreSimulation:Connect(vfx.updateVfx)
    Script de Módulo

    -- Este módulo adjunta partes a las animaciones para que se actualicen a medida que
    -- la animación se reproduce. Es una solución temporal para las limitaciones actuales
    -- con Joints y Bones y no siempre será necesario.
    --
    -- Prereqs:
    -- Para ser incluido, los modelos necesitan tener la etiqueta "AnimatedVfxModel", y una carpeta
    -- de todas las partes que quieras sincronizar con la animación. Cada parte necesita
    -- un atributo llamado "AttachedBoneName" que se refiere al nombre del
    -- hueso al que deseas adjuntarlo. Las partes también deberían estar ya en sus
    -- posiciones correctas relativas al hueso deseado.
    --
    -- Para Usar:
    -- Un LocalScript debería requerir este módulo, luego conectar
    -- VfxUpdateModule.updateVfx al evento RunService.PreSimulation.
    local VfxUpdateModule = {}
    local CollectionService = game:GetService("CollectionService")
    -- CONFIGURACIÓN - esto debería ejecutarse una vez en cada cliente.
    -- Recopila todos los modelos con la etiqueta
    local vfxModels = CollectionService:GetTagged("AnimatedVfxModel")
    local vfxTable = {} -- donde almacenaremos todas las partes y offset
    -- Asigna una tabla a cada modelo que contendrá todas las partes de vfx y offset
    for _, model in vfxModels do
    vfxTable[model] = {}
    local vfxParts = model:FindFirstChild("VFX"):GetChildren() -- Encuentra la carpeta VFX
    -- Encuentra el hueso a través del atributo y calcula el 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("La parte de Vfx se refiere a un hueso que no se pudo encontrar.")
    end
    end
    end
    print(vfxTable)
    -- ACTUALIZAR - Esto debería estar vinculado al RunService.PreSimulation de cada cliente
    -- Recorre todos los modelos y luego actualiza todas las partes del modelo para que coincidan con el cframe del hueso.
    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. Creamos un VFXUpdateModule ModuleScript para decir a cualquier objeto etiquetado apropiadamente con AnimatedVfxModel que se actualice en un evento de reproducción.

  3. Etiquetamos los grupos de modelos necesarios con AnimatedVfxModel usando la sección de Etiquetas de sus propiedades. Usar etiquetas permite que el VFXUpdateModule sepa qué objeto buscar como el primer hijo de VFX y aplicar la actualización.

    Ejemplo de VFX en Studio
  4. Finalmente, añadimos un atributo personalizado AttachedBoneName a la parte que queríamos animar y agregamos el nombre preciso de la articulación que queríamos que siguiera.

Texturizar la criatura

A continuación, configuramos las texturas de PBR (Renderizado Basado en Física). Estos potentes mapas de bits dan a la criatura el brillo variado y las variaciones de superficie que la hacen lucir como si tuviera muchas pequeñas protuberancias e imperfecciones. Este efecto visual ayuda a vender la apariencia de la Criatura cuando está más cerca del jugador.

Comparación de Texturización de Criatura

Así es como creamos los mapas de textura de apariencia superficial:

  1. Los mapas de textura para este personaje estaban todos en una "hoja" por mapa. Esto hizo que la criatura fuera más eficiente y significó que tuvimos que lidiar con menos mapas de textura o objetos SurfaceAppearance.

  2. Para áreas que necesitaban brillar o ser auto-iluminadas, como los "tentáculos agarradores", también usamos transparencia en el SurfaceAppearance para mezclar con esas partes.

    Ejemplo de Iluminación

    Encontramos útil seguir estas pautas al crear mapas de textura de apariencia superficial:

    • Asegúrate de que tus mapas no sean más grandes de 1024×1024.
    • Tu canal verde puede necesitar ser volteado dependiendo de la aplicación en la que trabajaste.

Animar a la criatura

La animación es muy subjetiva y tiene un estilo personal. Las opciones incluyen captura de movimiento, animación manual de "key frame" en tu aplicación DCC, o usar el potente Editor de Animaciones de Studio.

Como mencionamos antes, queríamos asegurar que teníamos suficientes articulaciones para un movimiento fluido, así como suficientes extremidades, para que la animación de la criatura se sintiera natural y "en capas". La superposición, también conocida como movimiento secundario, es algo que ves en la vida cotidiana: cuando extiendes el brazo, cada articulación reacciona al impulso inicial de tu brazo superior, y cada articulación de tu cuerpo no se mueve o descansa al mismo tiempo.

Usamos esta técnica para animar a la Criatura de manera que las extremidades reaccionaran al movimiento impulsado por su cuerpo como se muestra aquí:

Ejemplo de Animación de Criatura

Si utilizas una aplicación DCC externa para la animación, encontramos que las siguientes pautas funcionan mejor:

  • Configura las tasas de fotogramas a al menos 30 FPS.
  • Crea tus animaciones con el mismo personaje al que les estás aplicando.
  • Exporta tus datos de animación como un archivo separado .fbx.

Dado que animamos al personaje fuera de Studio, necesitábamos usar el Editor de Animaciones para importar el archivo de animación .fbx. El editor te permite seleccionar cualquier avatar con articulaciones o motores y controlarlos a través de puntos en la línea de tiempo.

Para importar una animación:

  1. En la pestaña Avatar de la barra de herramientas, haz clic en Editor de Clips.

  2. Selecciona el personaje riggeado que deseas animar en Roblox. El personaje debería ser el mismo que estás riggeando en tu aplicación DCC externa.

  3. Haz clic en el botón en la parte superior izquierda de la ventana del editor, selecciona Importar desde FBX Animation, y localiza tu archivo de animación exportado .fbx.

    Ejemplo de Importación de Animación 2
  4. Cuando estés contento con tu animación, puedes exportarla para descubrir el ID de animación, que luego puedes usar en scripts de Roblox para ejecutarlas. Por ejemplo, puedes añadir un Script al grupo de modelos del personaje importado y usar el siguiente código para ejecutar la animación:

    Ejemplo de Script de Animación

    local animationId = "YOUR_ANIMATION_ID"
    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 finales

Después de unos últimos ajustes en colores, brillo de luces y algunos efectos de partículas más para dar un efecto de halo más fuerte frente a las ventanas, aquí está el resultado final en la estación espacial!

Renderización Final de la Criatura
©2026 Roblox Corporation. Roblox, el logotipo de Roblox y "Powering Imagination" son algunas de nuestras marcas registradas y no registradas en los Estados Unidos y otros países.