XSIforum.com

Offset entre shapes?

0 Usuarios y 2 Visitantes están viendo este tema.

Offset entre shapes?
« en: 12 Junio 2011, 23:27:08 »
¿Como podría hacer que un Shape/controlador maneje otro shape, y que este se pueda seguir controlando? Es decir, como cuando se hace un offset con un null que tiene un padre que lo mueve, pero éste se puedo seguir manejando y con sus coordenadas locales a 0.


Básicamente lo que quiero hacer es, en el parpadeo de un ojo (hecho con shape), hacer un controlador para llevar los dos shapes (párpado superior e inferior) a 0, independientemente de donde estén, pero no lo consigo.


PD. otro opción sería hacer el parpadeo por deformadores, pero ya puestos prefiero hacer así. Que además seguro que busco más posibilidades  :D

Re: Offset entre shapes?
« Respuesta #1 en: 13 Junio 2011, 00:03:40 »
No sé si he entendido bien ¿quieres que el weight de un shape esté controlado por 2 controles en jerarquía?

Si suponemos que lo que mueve al shape es posy y ambos controles están en pose neutra/normalizada con una simple suma+clamp (-1 ~ 1) puede valer, algo como esto:

MIN(1, MAX(-1, parent.kine.local.posy + child.kine.local.posy) )

¿Tiene sentido? ¿Lo he entendido bien?

Un saludo O0

Re: Offset entre shapes?
« Respuesta #2 en: 13 Junio 2011, 00:51:57 »
Parece que es exactamente eso.
Me suena de cuando me lo explicaron en Maya, que se hacía así. Pero me lo explicaron con nodos (por eso no me quedé con la copla xD), además que desconocía la expresión.


¿Como funciona esto exactamente? Así mirandolo no lo entiendo bien.

Mañana lo pruebo. A ver si me sale.

Re: Offset entre shapes?
« Respuesta #3 en: 13 Junio 2011, 01:31:29 »
La expresión en lenguaje humano sería algo como: dame la posición en y del padre + la posición en y del hijo limitada en un rango de -1 a 1.

Es decir:
- Si subes el padre al máximo el valor del shape será 1
- Si subes el hijo al máximo el valor del shape será 1
- Si subes el padre al máximo y bajas el hijo al mínimo el valor del shape será 1 +(-1) = 0
- Si subes el padre a la mitad y el hijo a la mitad el valor del shape será 0.5 + 0.5 = 1
etc...

No sé, conceptualmente es muy sencillo y por eso preguntaba si esa realmente era la pregunta, lo mismo me estoy "pasando de listo" y no la he entendido bien.

Un saludo

Re: Offset entre shapes?
« Respuesta #4 en: 13 Junio 2011, 15:32:45 »
Uff, no me ha salido xD.
Aver, me he puesto y me he dado cuenta que no sabía que donde debía meter la expresión. Iba pensando que sería a los shape "hijos", pero claro, si le meto una expresión a un shape este ya no lo puedo controlar.

Ahí me he quedado, que mal me veo últimamente xD.

PD. Entiendo lo que hace César, lo que no se es como utilizarlo. Tanto minimus como maximus me pide dos valores ¿que es cada valor? ¿usando MIN por ejemplo marcaría por dos mínimos distintos?

Re: Offset entre shapes?
« Respuesta #5 en: 13 Junio 2011, 17:23:15 »
MIN(A,B) se queda con el valor menor entre A y B
MAX(A,B) se queda con el valor mayor entre A y B

Por ejemplo...

MIN(58, 4) = 4
MAX(32, 12) = 32

Usando la expresión anterior pero con constantes (en negritas) para que quede más claro...

MIN(1, MAX(-1, -2.5) ) = MIN(1, -1) = -1
MIN(1, MAX(-1, 4) ) = MIN(1, 4) = 1

En definitiva, el uso del MIN y MAX anidados te permiten establecer límites en la expresión, un clamp de toda la vida :)

Re: Offset entre shapes?
« Respuesta #6 en: 14 Junio 2011, 23:44:37 »
Vale, vale. Ahora sí, ya lo tengo.

Ahora me surge otra duda.
Esto está ya hecho, pero en el mismo ejemplo del párpado, si el superior por ejemplo está abierto, y el inferior casi cerrado, al hacer el blink, los dos llevan una velocidad digamos lineal (normal porque lo que hace es sumarle el valor de otro parámetro), entonces hace el parpadeo escalado, uno llega antes que otro.

¿Se podría conseguir que ambos shapes lleguen a la vez a 1?


PD. gracias por todo César ^^


Re: Offset entre shapes?
« Respuesta #7 en: 15 Junio 2011, 18:41:23 »
A ver, recapitulando que me lio...
Tienes 1 shape para el párpado superior y otro para el párpado inferior (0=cerrado, 1=abierto), y quieres tener control para los párpados de forma independiente pero además otro control adicional para hacer el blink sin que entre ellos se neutralicen... ¿Es eso?

En ese caso es tan simple como multiplicar el valor del control correspondiente con el control de blink, de esa forma con blink = 0 siempre tendrás los párpados cerrados (parpado * 0 = cero -> cerrado) y con blink=1 tendrás el valor de los controles (parpado * 1 = parpado).

¿Se entiende?

Re: Offset entre shapes?
« Respuesta #8 en: 15 Junio 2011, 19:46:04 »
Que lío xD. A ver, es lo que comentas pero te has quedado atrás, eso que comentas ya está solucionado. Empiezo de nuevo.

Yo abrí el hilo porque teniendo 2 shapes (cierre párpado superior e inferior), y quiero poder hacer un blink (cerrar ambos párpados) con un sólo controlador, pero manteniendo la posibilidad de seguir manejando cada párpado de manera individual.
HASTA AQUÍ HECHO.
Al final lo solucioné creando 3 parámetros (cierre parpadoSUP, cierre INF, blink), además de los 2 shapes. De tal manera que cada shape tiene esta expresión:
MIN(1, MAX(-1, parametroSUP/INF + parametroblink))
Así manejo cada párpado de manera individual, y puedo hacer blink.


AHORA MI NUEVA DUDA.
La expresión de los shapess hace que se sume al valor del controlador (parámetro) de cada shape, el valor del blink. Así que si el parámetro blink está 1, los dos shapes estan-> 1 (cerrados), y si está a 0, los dos shapes se manejan de manera independiente con sus correspondientes parámetros.

Bien, pues lo que me pasa es que al hacer blink, los dos párpados NO llegan a la vez a 1, es decir.
- Párpado SUP está a más de 0 (0,5 por ejemplo), párpadoINF está a 0 -> cierra primero el SUP y después el INF
- Párp.SUP está 0, y INF a más de 0 -> cierra primero el INF después el sup.

Es decir, que sólo cierran a la vez, si los shapes SUP e INF tienen el mismo valor, sino un párpado llega a 1 antes que otro.


A ver si ahora.
Si puedo hago un escena para veas como está montado.


EDITO
Escena rápido Softimage 2011, por si no se entiende
http://download121.mediafire.com/no25lgd8filg/lkku4hxjee8bmdq/Blink.scn
« Última modificación: 15 Junio 2011, 20:02:10 por Chelos »

Re: Offset entre shapes?
« Respuesta #9 en: 15 Junio 2011, 22:43:51 »
Vaaaale, deberíamos haber empezado por aquí :D

No tengo Softi 2011 pero si ejecutas este script sobre la escena (es una chapuza, no le hagas mucho caso al código) debería setear las expresiones para que funcionen como me has descrito, en el fondo no es más que sumar y multiplicar parámetros entre si :)

Código: (python) [Seleccionar]
get = lambda p_sName: Application.Dictionary.GetObject(p_sName)
dParams = { "ParpadoSUP": get("Mixer.Mixer_Shape_Track.Shape_ClusterClip.Mixer_Shape_Track1.Shape_ParpSUP_Clip.actionclip.weight"),
"ParpadoINF": get("Mixer.Mixer_Shape_Track.Shape_ClusterClip.Mixer_Shape_Track2.Shape_ParpINF_Clip.actionclip.weight")}
oProp = Application.ActiveSceneRoot.Properties("paremetros")
for k, v in dParams.iteritems():
sExpr = "1 - ((1 - %s) * (1 - %s))" % (oProp.Parameters("Blink"), oProp.Parameters(k).FullName)
v.AddExpression(sExpr)

Re: Offset entre shapes?
« Respuesta #10 en: 20 Junio 2011, 23:14:13 »
¿Finalmente era lo que querías? ¿Entendiste las expresiones que setea el mini-script sobre la escena?

Re: Offset entre shapes?
« Respuesta #11 en: 21 Junio 2011, 02:08:26 »
Perdona César aún no lo he podido probar, mucho curro estos días.

De todas maneras suponiendo que el resultado sea lo que busco (que supongo que sí), me vendría mejor saber como hacerlo directamente (antes que el script). Porque la escena que puse es no con la que trabajo (así que nombres y demás no coinciden), y lo que tenía pensado tampoco es completamente igual porque quería meter más componentes (parar meter en el blink por ejemplo movimiento de párpados + mejilla + ceja), no sólo los párpados.
Además si sale como quiero es algo que le daré bastante uso, y es preferible no tener que depender de un script.

Así que si no es mucha molestia explicar por encima como son y que hacen las expresiones  :angel:

PD. y mañana lo pruebo sin falta, aunque me quede sin comer O0 :2funny:

Re: Offset entre shapes?
« Respuesta #12 en: 22 Junio 2011, 19:24:05 »
Vale, en realidad lo del script es porque no tengo la misma versión de softimage y no te puedo pasar algo que puedas abrir, así si lo ejecutas en la escena de muestra puedes ver si realmente es eso lo que querías o te he malinterpretado.

Si fuese eso te explico un poco la expresión O0

---
Lo que tienes en la escena es:
blink: parámetro donde 0 es inactivo y 1 es párpado cerrado
eyelid: parámetro donde 0 es abierto y 1 es cerrado

---
Lo que necesitamos:
tenemos que encontrar una relación entre blink y eyelid donde:

blink 0 -> eyelid "valor slider" (0 abierto, 1 cerrado):
(1 - eyelid) * (1 - blink)

blink 1 -> eyelid 1 (párpado cerrado)
1 - lo_anterior
1 - ((1 - eyelid) * (1 - blink))

---
Con eso ya estaría, es complicado de explicar... más que aprender una fórmula para hacerlo necesitas algo de ingenio para encontrar las relaciones, si son relaciones lineales lo suyo es comparar extremos y buscar el modelo matemático que se adapte mejor (ecuación de la recta).

Suerte! :D

Re: Offset entre shapes?
« Respuesta #13 en: 22 Junio 2011, 23:03:58 »
De acuerdo, creo que lo he pillado más o menos. En cuanto pueda lo miro y pruebo como plantearlo, creo que tengo una idea de como meter la expresión.

Sobre el script que me pasastes, lo probé esta mañana y no pude meterlo, me daba error. Estuve comprobando los nombres, y todo parecía estar bien, no tengo idea de donde podía fallar, pero no importa, si consigo montar la expresión estará perfecto así.


Ya te cuento conforme hago algo, gracias tío! :D

Re:Offset entre shapes?
« Respuesta #14 en: 02 Agosto 2011, 12:28:10 »
Hola, soy practicamente nuevo en el foro, pero viendo lo complicado que parece hacer lo que quieres Chelos, yo de ti haria un nuevo Shape que haga exactamente lo que pretendes y ale, caso resuelto. Igual estoy diciendo una tonteria pero creo que es lo que yo haria.

En cuanto a la ayuda de Cesar, buah!  Es un Crack!

Con gente como el da gusto entrar en el foro.

Un saludo a los dos.


Re:Offset entre shapes?
« Respuesta #15 en: 05 Agosto 2011, 17:43:08 »
Si te entendido bien James, de la manera que comentas no podría conseguir lo que quiero. Eso me podría servir si en el parpadeo el inicio está en 1 o 0, pero si lo tiene en un valor intermedio no me serviría, no se si me he explicado.

Gracias de todas maneras :P

Un saludo.

PD. a ver si (ya después de agosto) retomo esto y lo remato de una vez.