El ratón sigue sin parpadear
Por Oleg Sidorkin, CTO y cofundador de Cinevva
Hemos trabajado mucho en las herramientas que dan vida a tus modelos en Cinevva: crear sus rigs, aplicarles animaciones y corregir los detalles extraños que aparecen cuando empiezan a moverse. Ese trabajo nos ha llevado por patas que no se doblan, transferencia de animaciones y colas sin huesos que las controlen.
Ahora quiero darles algo de emoción a esos personajes. Un personaje debería poder parecer sorprendido, molesto o contento, además de caminar por una escena. Eso significa hacer que la cara se mueva: párpados, cejas, mejillas y una boca capaz de hacer algo más que mantener su pose de reposo.
Hemos empezado a estudiar investigaciones recientes sobre rigging facial para ver hasta dónde podemos llegar desde una malla existente hasta obtener expresiones utilizables. Este es el primer relato de ese trabajo: qué pudimos ejecutar realmente, cómo preparamos el personaje y qué ocurrió cuando lo probamos.
Nuestro sujeto de prueba fue el ratón del trabajo sobre la cola. Ya tenía un rig corporal y seis clips de animación. Podía caminar, saltar y esprintar, pero su cara permanecía inmóvil en todos ellos.
Probamos NFR, una implementación de investigación que transfiere expresiones a una malla facial proporcionada. El primer resultado fue una lámina de poses etiquetadas como mandíbula abierta, sonrisa, parpadeo, labios fruncidos y cejas levantadas. No pude ver mucha animación útil. La mandíbula había deformado el hocico; la mayoría de las demás imágenes parecían casi iguales.
Había un problema de preparación que merecía la pena corregir antes de evaluar el resultado. Al preparar la malla de entrada, habíamos recortado gran parte de los bordes de los ojos del ratón. Así que repetimos el recorte, volvimos a ejecutar el proceso y renderizamos ambos intentos en movimiento. Aquí están.
Qué introdujimos en NFR
El personaje completo tiene 22.744 vértices exportados y 30 articulaciones, pero no tiene blendshapes faciales ni huesos específicos para la mandíbula y los ojos. Necesitábamos añadir controles faciales sin alterar el rig existente.
Los requisitos de entrada de NFR explican por qué no podíamos entregarle directamente el GLB. Espera una superficie facial con aberturas recortadas para los ojos y la boca, sin estructuras internas ni globos oculares, y con la malla aproximadamente alineada con sus ejemplos. Eliminamos la parte posterior de la cabeza, las orejas y el cuello, creamos las aberturas y conservamos la pieza conectada más grande. Quedaron 777 vértices y 1.296 triángulos.
Cada vértice de este recorte seguía correspondiendo a una posición del personaje original. Tras la inferencia, restamos la cara neutra predicha de cada expresión predicha, convertimos los desplazamientos de nuevo a la escala del ratón y los aplicamos a los vértices originales correspondientes. El movimiento se atenuaba cerca del borde del recorte para que no se detuviera bruscamente donde la cara se unía al resto de la cabeza.
Esto nos dio nueve blendshapes: desplazamientos de vértices almacenados que un control deslizante puede mezclar con la malla neutra. Al poner todos los controles a cero, se restauraba el ratón original. Conservamos su esqueleto, sus texturas y sus seis clips corporales, y luego añadimos un clip de prueba independiente para cada expresión.
La inferencia propiamente dicha tardó unos siete segundos en una T4 una vez cargados el checkpoint y la entrada. Conseguir una expresión utilizable iba a llevar más tiempo.
Habíamos recortado justo las partes que necesitábamos
Nuestros primeros recortes para los ojos eran elipses anchas. En esta cara, eliminaron gran parte del borde que rodeaba cada ojo. El recorte de la boca estaba por debajo de la línea visible de los labios. Ninguno de esos errores resultaba evidente a partir de los números que describían la malla: tenía coordenadas finitas, ningún triángulo degenerado y ningún borde no múltiple.
Sin embargo, al observar el recorte, el problema resulta bastante claro. Estábamos pidiendo movimiento de los párpados después de descartar gran parte de la superficie que podría proporcionarlo.
Para la segunda pasada, renderizamos la cabeza desde el frente y desde dos ángulos oblicuos. Utilicé la comprensión de imágenes del asistente para ayudar a marcar las aberturas y los bordes de los ojos, la línea de la boca, el hocico, la nariz, las cejas y los bigotes. Esos contornos se proyectaron sobre los triángulos visibles de la malla original. Conservar la proyección y los identificadores de los triángulos nos permitió comprobar qué partes reales de la cara sobrevivían a cada recorte.

Marcamos 131 triángulos visibles como pertenecientes a los bordes de los dos ojos. El primer recorte solo había conservado 25. El nuevo conservó 123. Es una mejora útil de la entrada, aunque mide la conservación respecto a nuestras propias anotaciones, no la precisión de una segmentación independiente.
También cambiamos la alineación. En lugar de igualar la extensión de referencia anterior, usamos puntos de referencia faciales correspondientes para establecer una escala uniforme y la posición. El nuevo recorte tenía 586 vértices y 952 triángulos. Seguía teniendo huecos y bordes abiertos; esta pasada seleccionó geometría existente en lugar de crear párpados nuevos o un interior para la boca.
Más movimiento, más estiramiento
La segunda ejecución utilizó los mismos pesos y los mismos nueve controles de expresión. Esta vez quería ver el movimiento completo, así que renderizamos intensidades intermedias entre el estado neutro y cada expresión completa, y después volvimos al estado neutro. El vídeo de la parte superior muestra ambas versiones con una iluminación idéntica.
Los ojos siguen abiertos. El control de la mandíbula modifica el hocico sin producir una apertura convincente de la boca. Algunos controles de la boca se mueven más que antes, especialmente el de embudo, pero la superficie se distorsiona con ellos.
Comprobamos las longitudes de las aristas para cuantificar esa distorsión. Para cada arista de la malla del personaje, dividimos su longitud con la expresión al máximo entre su longitud neutra y contamos las que aumentaban a más del doble.
| Control | Primer recorte: aristas por encima de 2× | Recorte revisado: aristas por encima de 2× | Peor estiramiento revisado |
|---|---|---|---|
| Mandíbula abierta | 13 | 44 | 5,27× |
| Sonrisa izquierda | 0 | 30 | 5,53× |
| Boca en embudo | 0 | 89 | 11,29× |
Una arista corta puede dar una proporción grande, así que no usaría esta medida por sí sola para evaluar un rig facial. En este caso, coincide con lo que muestran los renders. La boca revisada se mueve más y parte de ese movimiento es un estiramiento que no queremos.
Cambiamos tres cosas a la vez: el recorte, la alineación y la atenuación en el borde exterior. Esta comparación no puede decirnos qué cambio causó cada artefacto. Sí nos indica que la preparación revisada, en conjunto, no resolvió la cara de este personaje.
Por qué utilizamos NFR
Estudiamos otras implementaciones antes de realizar este experimento. GNM Head de Google se cargó y generó expresiones en su propia malla de cabeza humana. Llevar esas expresiones a nuestro ratón habría requerido un paso adicional de ajuste y transferencia. Example-Based Facial Rigging necesitaba ejemplos de expresiones correspondientes que nuestro personaje no tenía.
RigAnyFace y OmniFaceRig también eran relevantes, pero a fecha del 11 de septiembre de 2026 no habíamos encontrado código público de inferencia ni pesos que pudiéramos ejecutar para ninguno de los dos. El enlace al conjunto de datos de OmniFaceRig aún decía «Próximamente». NFR contaba con un checkpoint publicado y un procedimiento para mallas personalizadas, así que fue el que llevamos hasta convertirlo en un ratón animado.
No fueron cinco ejecuciones comparables. Probamos NFR con nuestra superficie facial, comprobamos GNM con su cabeza nativa y nos detuvimos ante las limitaciones de entrada o disponibilidad de los demás.
El próximo intento necesita un párpado
El recorte era deficiente y merecía la pena corregirlo. Pero conservar el borde de un ojo no le proporciona suficiente geometría ni el movimiento adecuado para cubrirlo. La boca tiene un problema similar: podemos tirar del hocico, pero este experimento no ha creado la abertura ni el interior que necesita la pose.
A continuación abordaría un parpadeo y una apertura de mandíbula. Le daría al párpado una forma que pudiera cerrarse sobre el ojo, prepararía los labios y el interior de la boca, y después ajustaría o crearía las formas correctivas para esos dos movimientos. Las comprobaría tanto de perfil como de frente antes de añadir el resto de los controles.
Conservamos ambos intentos, incluidas las predicciones sin procesar y los recortes exactos, para poder comparar ese trabajo con este resultado. Por ahora, el rig corporal y sus animaciones permanecen intactos. Las formas faciales siguen siendo un experimento; no las usaría en un personaje terminado.