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.

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.

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:


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

En el Importador, importa el archivo personalizado .fbx o .obj.

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.

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.

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.

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

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.

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.
Colocamos el siguiente LocalScript en StarterPlayer → StarterPlayerScripts. 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 PreSimulationlocal 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 etiquetalocal 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 offsetfor _, model in vfxModels dovfxTable[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 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("La parte de Vfx se refiere a un hueso que no se pudo encontrar.")endendendprint(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 dofor part, bone in vfxParts dopart.CFrame = bone[1].TransformedWorldCFrame * bone[2]endendendreturn VfxUpdateModuleCreamos un VFXUpdateModule ModuleScript para decir a cualquier objeto etiquetado apropiadamente con AnimatedVfxModel que se actualice en un evento de reproducción.
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.

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.

Así es como creamos los mapas de textura de apariencia superficial:
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.




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.

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í:

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:
En la pestaña Avatar de la barra de herramientas, haz clic en Editor de Clips.
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.
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.

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