Puedes importar mallas personalizadas para crear todo, desde los NPC a una tela animada de un barco de vela. Usamos la configuración personalizada del Avatar Importer (ahora el importador 3D ) para traer en más personajes exóticos, como las criaturas del misterioso agujero negro y los androides amigables, si no estás familiarizado.
Las siguientes secciones explican cómo usamos rigging y skinning, PBR (aspecto, lookla superficie) y VFX para construir uno de nuestros personajes más complicados que nombramos "Creature". Queríamos que brillara, emitiera algo de luz, tuviera rastros de humo de partículas y un movimiento de flujo que implicaba ajustar un rig con suficientes articulaciones para crear las olas convincentes de sus tentáculos.
Rigging
Cuando estábamos armando a la criatura, encontramos que era mejor modelar el personaje en una postura neutral, porque esa postura es mejor para doblarse en múltiples direcciones. Si modelamos a la criatura con sus tentáculos ya doblados, tendría que haber llenado si animamos los tentáculos para doblarse en la dirección opuesta. Las siguientes capturas de pantalla muestran el personaje en su estado natural:
De una postura neutral, agregamos articulaciones de forma económica, centrándonos en las áreas que necesitan la mayoría de los movimientos. Cuantas menos articulaciones tengas, mejor, porque tendrás que administrarlas cuando pieles tu personaje, y tendrás menos que controlar cuando animas a tus personajes. En las siguientes capturas de pantalla, 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 los mandíbulos. Con los tentáculos, queríamos mucho de la movilidad secundaria, o la movilidad que está en capas, para crear un efecto convincente de que todos están moviéndose por sí en posesión. Sin embargo, la masa central de los tentáculos era tan cercana uno al otro que se sintió malgastar crear articulaciones para todos ellos
Encontramos las siguientes guías útiles, para que la malla de personaje se importe correctamente en Studio:
- Las articulaciones y los huesos individuales deben tener nombres únicos.
- Las meshes no deben tener el mismo nombre que las articulaciones y los huesos.
- Las meshes no deben tener transformaciones antes de aplicar pieles/vincular; en otras palabras, las transformaciones deben ser 0 y las escalas deben ser 1.
- Las normales de malla deben mirar hacia afuera (el modelo no debe mirar dentro-fuera).
- Los esqueletos no deberían tener ningún factor de escala; todos los articulos deben ser [1, 1, 1].
Skinning
Cuando terminamos el esqueleto de la criatura, el siguiente paso fue pielar el malla. Pielar puede ser una tarea laboriosa, por lo que para hacer las cosas más fáciles, es mejor familiarizarse con las diferentes configuraciones de piel inicial de su aplicación DCC para encontrar la que te gusta. Dado que esta es una criatura de carácter orgánico, lo pielamos con mucho fallo en cada articulación
Encontramos las siguientes pautas que produjeron los mejores resultados para skinning:
- Los efectos de skinning (que afectan una parte del modelo cuando se mueve) deberían ser un máximo de 4 efectos por vértice.
- Nombres de joint y malla deben ser únicos, tanto dentro como entre sí.
- Cualquier interfaz que desee importar en Studio debe tener algo de influencia en la skinning del aplicación de modelado, de lo contrario, el motor no la importará. Siempre que sea posible, skin su modelo en su posición original o "enlazar".
Importando la Malla a Studio
Importar tus personajes personalizados en Studio es una de las partes más emocionantes del proceso, ¡porque puedes ver tus creaciones en la experiencia que estás construcción!
Para importar el modelo en Studio:
Exportar el personaje de la aplicación DCC y asegurarse de lo siguiendo:
- Todos los normal, escalas y nombres son correctos.
- El personaje tiene toda la jerarquía de caracteres y todos los mallas.
- Las rejillas están todas debajo de 10,000 triángulos para cada parte de la malla.
- El tamaño total de la malla no supera los 2000 unidades en cualquier eje.
- Vea Requisitos de malla para una lista completa de especificaciones del modelo.
En el importador 3D, importa el archivo personalizado .fbx o .obj .
Haciendo que la criatura brille
Una vez que el modelo de la criatura fue estable y no requería ningún importe inmediato en Studio, comenzamos a combinar los objetos de SuperficieAppearance, 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 los puntos focales para ser los ojos y sus "grabby" tentáculos. Los puntos de contraste altos tienden a atraer la atención, así que teniendo algunos fuertes garantiza que el espectador sepa en qué fijarse. Studio soporta materiales neón que se iluminan por sí mismos, así que al principio separamos los ojos para que pudieran ser su propio material del
El material de neón no emite luz real, por lo que después de algunas pruebas, añadimos partes separadas para controlar la posición y la dirección de la emisión de luz. Esto aseguró que la iluminación estuviera dirigida de una manera para mejorar el brillo de los ojos y también proyectar su propia fuente de luz.
Nota que los SpotLights añaden visuales de destellos a la Creatura cerca de otras superficies o un jugador.
Además, queríamos que los tentáculos de la criatura emiten algunas partículas, por lo que cuando se movía dejaba un rastro de humo detrás. Debido a que los tentáculos son muy largos, agregar el ParticleEmitter a todo el tentáculo haría que las partículas emitan desde el extremo del tentáculo en lugar del extremo del extremo del extremo. Para combatir esto, usamos una pequeña parte
Haciendo que los efectos sigan al personaje
Las posiciones de malla del personaje con piel no se actualizan cuando se animan las criaturas, por lo que necesitábamos un método para asegurarnos de que los efectos, las SFX y las luces siguieran a la criatura correctamente. Para lograr esto, creamos un script de controlador de efectos VFX y usamos CollectionService para informar a las partes que contenían los efectos donde se encontraban los huesos de la criatura y para seguirlas.
Colocamos el siguiente LocalScript en StarterPlayer → StarterPlayerScripts . Esto ejecuta básicamente la función de actualización de VFX.
Script local-- Agregue este fragmento a un script local existente que hace PreSimulation-- conexioneslocal RunService = game:GetService("RunService")local vfx = require(workspace.VfxUpdateModule)RunService.PreSimulation:Connect(vfx.updateVfx)Script de módulo-- Este módulo añadió partes a las animaciones para que se actualicen como-- juega animaciones. Es una solución de trabajo para las limitaciones actuales-- con Artículos y Huesos y no siempre será necesario.---- Requisitos previos:-- Para ser incluido, los modelos necesitan la etiqueta "AnimatedVfxModel" y una carpeta-- de todas las partes que quieres sincronizar con la animaciones. Cada parte necesita-- una atributo llamado "AttachedBoneName" que se refiere al nombre de la-- 骨头 que quieres unir. Las partes también deben estar en su-- posiciones correctas en relación con el hueso deseado.---- Para usar:-- Un LocalScript debe requerir este módulo, luego conectar-- VfxUpdateModule.updateVfx a la RunService.PreSimulation event.local VfxUpdateModule = {}local CollectionService = game:GetService("CollectionService")-- CONFIGURACIÓN - esto debería ejecutarse una vez en cada cliente.-- Recoge todos los modelos con la etiquetalocal vfxModels = CollectionService:GetTagged("AnimatedVfxModel")local vfxTable = {} -- donde almacenaremos todas las partes y desplazamientos-- Asigna una tabla a cada modelo que albergará todas las partes de efectos y desplazamientofor _, model in vfxModels dovfxTable[model] = {}local vfxParts = model:FindFirstChild("VFX"):GetChildren() -- Encuentra la carpeta VFX-- Encuentra el hueso a través de la atributo y calcula el desplazamiento 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("Vfx part refers to bone that could not be found.")endendendprint(vfxTable)-- ACTUALIZACIÓN - Esto debería estar vinculado a cada servicio de cliente.PreSimulation-- Ve a través de todos los modelos, luego actualiza todas las partes en el modelo para que coinciden con el marco 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 adecuadamente con AnimatedVfxModel para actualizar en un evento de juego.
Etiquetamos los grupos de modelos necesarios con el AnimatedVfxModel , accesible desde la pestaña vista. El uso de etiquetas permite que el VFXUpdateModule sepa qué objeto buscar como el primer hijo de VFX y aplicar la actualización.
Por último, agregamos un atributo personalizado de Nombre de hueso adherido a la parte que queríamos animar y agregamos el nombre preciso del joint que queríamos que seguir.
Texturando la criatura
A continuación, configuramos los mapas de textura PBR (Physically Based Rendered). Estos potentes bitmap le dan a la criatura el brillo y las variaciones de superficie para hacer que se vea como tiene muchos pequeños golpes y defectos. Este efecto visual ayuda a vender la apariencia de la criatura cuando está más cerca del jugador.
Aquí es cómo creamos los mapas de textura de la superficie:
Los mapas de textura para este personaje estaban todos en una "hoja" por mapa. Esto hizo que la criatura fuera más eficiente y significaba que teníamos que lidiar con menos mapas de textura o SurfaceAppearance objetos.
Para áreas que necesitaban brillar o ser autosuficientes, como los "tentáculos de agarre", también usamos transparencia en el SurfaceAppearance para mezclarse con esas partes.
Encontramos que fue útil seguir estas guías al crear mapas de apariencia de superficie:
- Asegúrese de que sus mapas no sean más grandes que 1024×1024.
- Su canal verde puede necesitar ser flipped dependiendo de la aplicación en la que trabajó.
Animando a la criatura
La animación es muy subjetiva y tiene un estilo personal. Las opciones incluyen la capturarde movimiento, la animación de "key frame" de mano en tu aplicación DCC, o la utilización del poderoso Editor de Animación de Studio.
Como mencionamos anteriormente, queríamos asegurarnos de que teníamos suficientes articulaciones para el movimiento de fluido, así como suficientes limbos, para que la animación de la criatura se sintiera natural y "layered". La capa, también conocida como movimiento secundario, es algo que ves en la vida real — cuando lanzas tu brazo, cada articulación reacciona al impulso inicial de tu brazo superior y cada articulación en tu cuerpo no se mueve o descansa al mismo tiempo.
Usamos esta técnica para animar a la criatura para que se sintiera como si los miembros reaccionaran a la movilidad impulsada por su cuerpo como se muestra aquí:
Si se está utilizando una aplicación de DCC externa para la animaciones, encontramos que las siguientes guías funcionan mejor:
- Establezca una tasa de marco de al menos 30 FPS.
- Crea tus animaciones con el mismo personaje al que 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 Animación para importar el archivo de animación .fbx. El editor le permite seleccionar cualquier avatar con articulaciones o motores y conducirlo a través de puntos en el tiempo.
Para importar una animaciones:
En la pestaña Plugins, seleccione el Editor de Animación.
Selecciona el personaje enrejado que quieres animar en Roblox. El personaje debe ser el mismo que estás enrejando en tu aplicación DCC externa.
Haga clic en el botón en la sección superior izquierda de la ventana del editor, seleccione Importar desde la animación FBX y localice su archivo de animación exportado.
Cuando estés contento con tu animaciones, puedes exportarla para descubrir la ID de la animación, que luego puedes usar en los scripts de Roblox para ejecutarla. Por ejemplo, puedes agregar un Script al grupo de modelos del personaje importado y usar el siguiente código para ejecutar la animaciones:
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 algunos ajustes finales de colores, brillo de luz y algunos efectos de partículas para darle un efecto de halo más fuerte frente a las ventanas, ¡aquí está el resultado final en la estación espacial!