Source SDK

Source SDK

Not enough ratings
Animación Flex (Motor Source)
By Oitnemood
una versión en español de Flex_animation para los interesados de la guía oficial de valve, junto a algunas aclaraciones extras que dejo.

guía original
https://developer.valvesoftware.com/wiki/Flex_animation#Faceposer
   
Award
Favorite
Favorited
Unfavorite
Animación Flex
¿Buscabas ayuda para el Faceposer?

La animación flexible (también llamada animación de vértices y shapekeys) es la manipulación directa de los vértices sin la participación de un esqueleto. Generalmente se utiliza para crear expresiones faciales y sincronización de labios, pero puede aplicarse en cualquier parte del modelo; los infectados de Left 4 Dead 2 pueden tener toda la forma de la cabeza cambiada mediante flexiones.



Formas de flexión "Flex". Los caracteres TF2 tienen dos versiones, expresiones pre-autorizadas (modelos regulares) y el conjunto de formas HWM (hardware morph). Los caracteres de Half-Life 2 están basados en el FACS, Facial Action Coding System

Limitaciones
Flex tiene algunas limitaciones importantes en el motor source
- Cada flex sólo puede mover vértices en líneas rectas
- La animación Flex no puede alterar los modelos de colisión
- No se pueden flexionar más de 10.000 vértices por malla
El SMD tiene estos límites adicionales:
- La animación Flex con el formato VTA no es compatible con $scale ("animaciones de vértices sin igual").
- Los vértices no pueden moverse más de 8 unidades (en cualquiera o todos los ejes)DMX has these:
- Si el nombre de una forma contiene subrayados, esa forma se convierte en correctiva. No pongas subrayados en las flexiones que quieres exponer a los animadores.
VTA format
El formato .VTA almacena las shapekeys de la morfología separadas de la malla misma. Fue usado por Valve hasta en la orange box. En los juegos más nuevos de Valve, la animación facial está completamente definida dentro del archivo .DMX de la malla. No hay equivalente en la notación .QC para algunas de las reglas que tienen lugar allí. Refiérase a la sección .DMX de la página para ver lo que se ha descubierto hasta ahora.
(el archivo se crea automática después de terminar y exportar el modelo en formato smd con las shapekeys de las animaciones faciales estará junto a su archivo .vta)
esto funciona con -> Maya, Blender, 3DS Max y XSI
Valve standard flex
Si estás creando un nuevo personaje humanoide, lo mejor es usar las mismas reglas de animación flex que Valve. Estas implementan el Sistema de Codificación de Acción Facial, un método de larga data y ampliamente utilizado para describir toda la gama de expresiones humanas.

La sincronización de los labios requiere un conjunto de flexiones FACS. Puedes encontrar los guiones en sourcesdk_content/hl2/modelsrc/humans_sdk/Male_sdk/. Hay dos: standardflex_xsi.qci and facerules_xsi.qci. (bodyrules_xsi.qci es relacionado, pero como su nombre indica no afecta a la cara).

Para que los guiones funcionen, debe haber creado y exportado estas shapekeys estándar en el orden indicado. Entonces usa esta plantilla QC:

$definevariable expressions "MyShapes.vta"
$definevariable headBone "ValveBiped.Bip01_Head1"

$eyeposition 0 0 70

$attachment "eyes" $headBone$ 0.043 -4.2197 67.5554 absolute
$attachment "mouth" $headBone$ 1.00 -6.30 0.00 rotate 0 -80 -90


$model facs_example "modelo.smd" {
eyeball righteye $headBone$ -1.2711 -4.2197 67.5593 "eyeball_r" 1 4 "pupil_r" 0.63
eyeball lefteye $headBone$ 1.3572 -4.2197 67.5514 "eyeball_l" 1 -4 "pupil_l" 0.63

eyelid upper_right $expressions$ lowerer 1 -0.2621 neutral 0 0.1287 raiser 2 0.2467 split 0.1 eyeball righteye
eyelid lower_right $expressions$ lowerer 3 -0.3409 neutral 0 -0.2156 raiser 4 -0.0736 split 0.1 eyeball righteye
eyelid upper_left $expressions$ lowerer 1 -0.2621 neutral 0 0.1287 raiser 2 0.2467 split -0.1 eyeball lefteye
eyelid lower_left $expressions$ lowerer 3 -0.3409 neutral 0 -0.2156 raiser 4 -0.0736 split -0.1 eyeball lefteye

mouth 0 "mouth" $headBone$ 0 1 0 // mouth illumination

flexfile $expressions$ {
$include "../standardflex_xsi.qci"
}

$include "../facerules_xsi.qci"
// $include "../bodyrules_xsi.qci"

}

Compilación
Deberías tener un VTA exportado y un SMD de referencia de tu paquete de modelación.

$model flextest "myreference.smd" { // debe usar $model, no $body, y "{" debe estar en la misma línea
flexfile "myflexanim.vta" { // animaciones de vértices source
defaultflex frame 0 // posición relajada
flex "llave1" nombre1 //nombres de las animaciones flex, fíjate en sus nombres de shapekeys
flex "llave2" nombre2
}
flexcontroller my_group "Flex1" "Flex2" // define los controladores que aparecerán en Faceposer etc.
%Frame1 = Flex1 // asigna un controlador a un flex
%Frame2 = Flex2
}

Esto define dos flex y los asigna directamente a dos controladores.

Bug: HLMV's las cajas deslizantes flexibles se pueblan de derecha a izquierda. Tendrás que cambiar el tamaño de la ventana para verlas todas.
Definir las flexiones
Los flex en bruto se extraen de los cuadros VTA y admiten cierto preprocesamiento. No son expuestos por el modelo (los controladores de flexión, a continuación, sí).

flexcontroller <group name> [range <normal> <normal>] <nombre del controlador> [<nombre del controlador> ... ]

Se utiliza dentro de un bloque "flexfile" para definir una forma única. Puede haber hasta 1024.
nombre
Nombre interno del flex.
marco
El marco VTA al que se refiere la flexión.
posición
La posición del controlador de la flexión "( see also flexcontroller::range)")" en la que esta flexión alcanzará su máxima intensidad.
split
Hace que la flexión sólo lea los vértices de un lado del origen Y de la malla. El valor es el número de unidades (positivas o negativas) sobre las que se alisa la división. 0 desactiva.
decadencia
Lo carnoso que se ve la flexión al animar. La velocidad del vértice es un factor de la distancia recorrida: con el valor por defecto de 1 los que se mueven más lo hacen al instante, mientras que los que se mueven menos tardan 0,7 segundos en asentarse completamente.
A 0, no hay retraso ni siquiera en los movimientos más pequeños. A más de 1, los vértices que se mueven más lejos comienzan a retrasarse también.
flexpair <name> <int> frame <int> [<flex options>]
Igual que la flexión, pero crea automáticamente dos flexiones con la "L" y la "R" añadidas a sus nombres. El número entero sin etiquetar es el equivalente al comando "split" (se ignora el "split").defaultflex frame <int> [<flex options>]
Define la posición relajada del modelo. La flexión creada se llama "default".
Definición de los controladores
flexcontroller <group name> [range <normal> <normal>] <nombre del controlador> [<nombre del controlador> ... ]

Una entrada en el modelo, utilizada para crear animaciones. Toma la forma de un control deslizante. Puede haber hasta 96.
<nombre del grupo>
Visto con valores como párpados, cejas, nariz, boca y fonema. Requerido, pero no tiene ningún efecto aparente.

range

Define los valores bajos y altos del deslizador (por defecto 0 y 1). Esto no afecta al flex en sí mismo, pero puede utilizarse junto con el valor de posición del flex. Invertir los valores hace que el deslizador se invierta, no el flex.

<nombre del controlador>

Tantos nombres de pantalla como sean necesarios. Se creará un controlador para cada uno.
Asignación de flexiones a los controladores
Puede ser muy sencillo:

%myflex = myflexcontroller

O puede ser muy complejo:

%upper_right_raiser = right_lid_raiser * (1 - right_lid_droop * 0.8) * (1 - right_lid_closer) * (1 - blink)
%brow_mid_raiser = max(min(brow_left_raiser, brow_right_raiser), max(brow_left_raiser, brow_right_raiser) * 0.5)

Se admiten los siguientes operadores:

- Multiplicación (*)
- División (/)
- Suma (+)
- Sustracción (-)
- Tomando el más bajo de dos valores (min(val1,val2))
- Tomando el más alto de dos valores (max(val1,val2))
En todos los ca.
sos, se pueden utilizar tanto números estáticos como nombres de variables/flex/controladores. Las flexiones nunca excederán su valor de posición

Nota: La asignación se hace fuera del bloque del archivo flexible, pero aún dentro $model.

  • Bug: ¡Los valores negativos harán que el motor tenga problemas!

Tip:localvar <name> puede ser usado para almacenar los resultados de una ecuación para su reutilización posterior. Una vez que has definido una, sólo tienes que hacer %mylocalvar = val.
%mouth
Esta es una variable especial que es leída por el sombreador de boca mout Cuando es 1, el interior de la boca está completamente iluminado.
LOD
Para desactivar la flexión, añada nofacial a un bloque $lod.

No es necesario crear formas para sus mallas LOD; crowbar las transferirá desde la malla de referencia según corresponda.
Stereo flexes (un deslizador con control L/R)
Para poder combinarse en un único deslizador "estéreo" con controles izquierda/derecha en Source Filmmaker o Faceposer, las flexiones deben seguir una convención de nomenclatura particular; deben comenzar con izquierda_ y derecha_. Aquí hay un ejemplo:

flexfile "this_is_an_example.vta" {
flex "eyebrowClench" frame 1
flexpair "eyebrowRaise" 1.0 frame 2
flexpair "eyebrowFurrow" 1.0 frame 3
flexpair "outerEyebrowRaise" 1.0 frame 4
}

flexcontroller brow eyebrowClench "range" 0.000 1.000
flexcontroller brow right_eyebrowRaise left_eyebrowRaise "range" 0.000 1.000
flexcontroller brow right_eyebrowFurrow left_eyebrowFurrow "range" 0.000 1.000
flexcontroller brow right_outerEyebrowRaise left_outerEyebrowRaise "range" 0.000 1.000

%eyebrowClench = eyebrowClench
%eyebrowRaiseL = left_eyebrowRaise
%eyebrowRaiseR = right_eyebrowRaise
%eyebrowFurrowL = left_eyebrowFurrow
%eyebrowFurrowR = right_eyebrowFurrow
%outerEyebrowRaiseL = left_outerEyebrowRaise
%outerEyebrowRaiseR = right_outerEyebrowRaise

Aquí, eyebrowClench es un flexo "mono", mientras que eyebrowRaise, eyebrowFurrow, y outerEyebrowRaise serán "stereo".
  • Advertencia:
Sus controladores de flexión deben ser declarados con derecha/izquierda, no con izquierda/derecha, o de lo contrario los flexos estéreo serán desplazados uno hacia adelante en la lista de todos los flexos, produciendo resultados bastante extraños.
formato .DMX
Los modelos DMX almacenan datos de forma y definiciones de controlador flex en el mismo archivo que la malla de referencia.
1. Actualmente hay cuatro exportadores con soporte flexible DMX: el plugin maya BlenderSourceTools[steamreview.org] las herramientas de Wall Worm Model Tools las herramientas SMD/DMX de GameZombie (actualmente el único conjunto de herramientas para 3DS Max con soporte de importación).
2. Consulte controladores DMX model#Flex para obtener una descripción técnica del formato del controlador flexible.
3. Abra uno de los archivos de origen TF2 DMX "_high" en un editor de texto para ver cómo Valve los configura.
Hay cuatro componentes clave de los controladores flexibles DMX:
DmeCombinationInputControl
Un controlador flexible expuesto a animadores.
DmeCombinationDominationRule
Se utiliza para definir formas que se desvanecen cuando otras formas están activas.
por ejemplo, la "mandíbula abierta" podría dominar las "mejillas hinchadas", ya que es imposible hacer ambas cosas a la vez.
DmeFlexRuleExpression
Preprocesador de shapekeys que aceptan una ecuación simple. Las reglas de dominación son una alternativa más simple.
DmeFlexRulePassThrough
Si se utilizan reglas flexibles, todas las formas deben tener una. En este escenario, este tipo se puede usar en formas que no necesitan ningún procesamiento previo.
DMX soporta 128 controladores flexibles y un número desconocido (pero mucho mayor) de formas.
Formas correctivas "Corrective shapes"
Las teclas de forma denominadas "[nombre de forma 1]_[nombre de forma 2]_[etc]" se desvanecerán cuando las shapes que llevan su nombre estén activas al mismo tiempo. Por ejemplo, "openJaw_openLips" se desvanecerá siempre que las formas "openJaw" y "openLips" estén activas.

Selección de formas correctivas

  • Formas activas "Active shapes"
    a + b
    a + b + c

  • Formas correctivas aplicadas "Corrective shapes applied"
    a_b
    a_b + a_c + b_c + a_b_c

  • No. formas activas "No. active shapes"
    3
    7

Al crear formas correctivas asegúrese de tener todas las formas relevantes activas antes de empezar a esculpir.

Tip:Las formas correctivas no necesitan ser hechas para combinaciones evitadas por una dominación rule.
Tip: Las formas correctivas pueden tener el mismo flexión "maestra" especificada más de una vez como conductor (por ejemplo "[shape1]_[shape1]") lo que permite que la flexión correctiva tenga una respuesta cuadrática, cúbica o incluso cuarteada a la flexión maestra. Este método puede permitir que aparezca un único controlador de flexión para mover los vértices a lo largo de un trayecto curvo (en lugar de sólo las líneas rectas) mediante el desvanecimiento de varias formas diferentes (que se combinan para crear la forma objetivo global) a diferentes velocidades.
TF2's HWM ("hardware morph") los modelos utilizan un conjunto estándar de 50 formas y 35 controladores y alrededor de 100 (!!) formas correctivas hechas en base a "si lo ves romperse".
Dmxedit
Dmxedit es la herramienta utilizada por Valve para postprocesar las shapekey DMX y crear controladores flexibles.
1 Comments
Xarti55 6 Mar, 2021 @ 4:49am 
Por favor dale un vistazo a mi guia, me costó mucho hacerla
https://gtm.steamproxy.vip/sharedfiles/filedetails/?id=2411686243