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 un tejido animado 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 amigables, aunque inconscientes, droides de servicio.

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

Banner de la 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, agregamos articulaciones de manera económica, enfocándonos en las áreas que necesitaban más movimiento. Cuantas menos articulaciones, mejor, porque tendrás que gestionarlas al hacer el skinning de tu personaje, y tendrás menos que controlar cuando las 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 mandíbulas. Con los tentáculos, queríamos mucho movimiento secundario, o movimiento que está en capas, para crear un efecto convincente de que todos se mueven por su cuenta. Sin embargo, la masa central de tentáculos estaba tan cerca que parecía un desperdicio 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.
  • Las normales de la malla deben mirar hacia afuera (el modelo no debe 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 hacer el skin de la malla. Hacer el skin puede ser una tarea ardua, así que para facilitar las cosas, es mejor estar familiarizado con las diferentes configuraciones iniciales de skinning de tu aplicación DCC para encontrar la que te guste. Dado que este es un personaje orgánico, lo hicimos con mucho desvanecimiento en cada articulación y superposición entre ellas. De esta manera, la flexión se siente suave y no aguda. 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 (es decir, 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 deben ser únicos, tanto entre sí como entre ellos.
  • Cualquier articulación que desees importar a Studio debe tener alguna influencia en el skinning del modelo, de lo contrario, el motor no la importará. Siempre que sea posible, haz el skin de tu modelo en su pose original o de "vinculación".

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 el juego 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:

    • Todas las normales, escalas y nombres son correctos.
    • El personaje tiene toda la jerarquía de articulaciones y huesos y todas las mallas.
    • Las mallas tienen menos de 10,000 triángulos para cada parte de la malla.
    • El tamaño total de la malla no supera los 2000 unidades en ningún eje.
    • Consulta los Requisitos de Malla para obtener una lista completa de 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 estaba 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 fuera 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 puntos altos de contraste tienden a atraer la atención, así que tener algunos fuertes asegura que el espectador sepa en qué enfocarse. Studio admite materiales neón que se autoiluminan, 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, para que solo brillaran en sus puntas.

Ojos de la Criatura en Studio

El material neón no emite luz real, así que después de 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 se dirigiera de manera que realzara el brillo de los ojos y también proyectara su propia fuente de luz.

Luz Puntual en Studio

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

Ejemplo de Luz de la Criatura

Además, queríamos que los tentáculos de la Criatura emitieran algunas partículas, para que dejaran atrás una estela de humo cuando se movía. Debido a que los tentáculos son muy largos, agregar 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, usamos una pequeña parte posicionada cerca del final del tentáculo, para 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 riggeado 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 controlador de VFX y usamos CollectionService para informar a las partes que contenían los VFX dónde estaban los huesos de la criatura y 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 animaciones para que se actualicen a medida que
    -- se reproduce la animación. Es una solución para las limitaciones actuales
    -- con Joints y Bones y no siempre será necesario.
    --
    -- Requisitos previos:
    -- Para ser incluido, los modelos necesitan la etiqueta "AnimatedVfxModel", y una carpeta
    -- de todas las partes que deseas 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 deben estar ya en sus
    -- posiciones correctas en relación con el hueso deseado.
    --
    -- Para Usar:
    -- Un LocalScript debe requerir este módulo, luego conectar
    -- VfxUpdateModule.updateVfx al evento RunService.PreSimulation.
    local VfxUpdateModule = {}
    local CollectionService = game:GetService("CollectionService")
    -- CONFIGURACIÓN - esto debe ejecutarse una vez en cada cliente.
    -- Recoge todos los modelos con la etiqueta
    local vfxModels = CollectionService:GetTagged("AnimatedVfxModel")
    local vfxTable = {} -- donde almacenaremos todas las partes y desplazamientos
    -- Asigna una tabla a cada modelo que contendrá todas las partes de vfx y desplazamiento
    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 desplazamiento 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 debe estar vinculado a cada RunService.PreSimulation del cliente
    -- Recorre todos los modelos, 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 indicar 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 utilizando 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, agregamos un atributo personalizado AttachedBoneName a la parte que queríamos animar y añadimos el nombre preciso de la articulación que queríamos que siguiera.

Texturizar la criatura

A continuación, configuramos los mapas de textura PBR (Renderizado Basado en Física). Estos potentes mapas de bits le dan a la criatura el brillo variado y las variaciones de superficie para hacer que parezca que tiene muchos pequeños bultos 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 la Criatura

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

  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 teníamos que lidiar con menos mapas de textura o objetos SurfaceAppearance.

  2. Para las áreas que necesitaban brillar o ser autoiluminadas, 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 de superficie:

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

Animar la criatura

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

Como mencionamos anteriormente, queríamos asegurarnos de tener suficientes articulaciones para un movimiento fluido, así como suficientes extremidades, para que la animación de la criatura se sintiera natural y "en capas". El apilamiento, también conocido como movimiento secundario, es algo que ves en la vida cotidiana: cuando lanzas tu 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 para que sintiera que las extremidades estaban reaccionando al movimiento impulsado por su cuerpo, como se muestra aquí:

Ejemplo de Animación de la Criatura

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

  • Establece las tasas de fotogramas a al menos 30 FPS.
  • Crea tus animaciones con el mismo personaje al que se las aplicas.
  • Exporta tus datos de animación como un archivo .fbx separado.

Debido a que animamos el 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 Clip Editor.

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

  3. Haz clic en el botón en la sección 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 satisfecho 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 agregar 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 algunos ajustes finales en colores, brillo de luces y algunos efectos de partículas más para darle un efecto de halo más fuerte frente a las ventanas, aquí está el resultado final en la estación espacial!

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