XSIforum.com

Foros 3D => 3D-2D => Challenges => Mensaje iniciado por: Cesar Saez en 05 Marzo 2010, 20:53:28

Título: Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: Cesar Saez en 05 Marzo 2010, 20:53:28
Edito para rescatar un videillo con el resultado de esto y que la gente no tenga que recorrer todo el hilo para entender de que va el rollo.

http://vimeo.com/85901976
https://vimeo.com/85901976 (https://vimeo.com/85901976)

00:00 - Intro
01:00 - Rig overview
03:00 - Init
05:22 - Multipose setup
09:05 - Main setup
10:30 - Spine setup
12:35 - Head setup
15:00 - Left leg setup
22:55 - Right leg (via template)
25:35 - Left arm setup
31:25 - Right arm (via template)
33:50 - Closing

----

Hola,

Ya se que este desafío lleva un buen tiempo dormido/acabado pero en estos días he estado pensando seriamente en hacer un nuevo autorig (el 4to, ufff) utilizando las lecciones aprendidas de los anteriores, creo que este desafío es una buena oportunidad para volcarlo en un personaje libre de contratos de confidencialidad y restricciones por el estilo. También sé que pronto implementarán soporte para escribir Kinematics en ICE y quizás no merece la pena ponerse ahora con esto pero como no hay deadline que cumplir me lo pretendo tomar con calma y disfrutar del proceso :)

El enfoque inicial del reto no se adapta exactamente a lo que pretendo lograr, quiero hacer un rig modular y la base deformable quizás no es tan intercambiable como en un rig "tradicional", de todas formas intentaré cubrir todas las áreas del personaje propuesto (afortunadamente es sencillo) y que salga algo animable de todo esto.

Por que hacer un WIP del proyecto?
Porque me encantaría recibir vuestros concejos y sugerencias, ya sea desde un punto técnico como desde el punto de vista del animador y sus necesidades, todos los comentarios son y serán bienvenidos.

Por ahora no llevo nada, sólo las ganas de hacerlo, en cuanto monte un poco la base del sistema ya les iré mostrando avances y quien sabe si al final de todo esto tenemos un nuevo rig gratuito que tanta falta le hace a la comunidad de XSI :)


Por cierto, pretendo desarrollar el autorig y las herramientas que rodeen al rig en python, pyQT es una muy buena alternativa para la GUI pero por temas de portabilidad usaré el soporte nativo.
Título: Re: Challenge Nº3: "Rig"
Publicado por: Cesar Saez en 05 Marzo 2010, 21:15:16
Propuesta para la convención de nombres.

MODELS/SUBMODELS (4 campos)

tipo_nombre_descriptor_terminador

donde...
- tipo: "C" (character)
- nombre: nombre del personaje
- descriptor: descripción del contenido del model (mesh, faceRig, defRig, animRig, etc).
- terminador: "X", es para mantener el nombre único de los models ante múltiples instancias.

OBJETOS/COMPONENTES (4 campos)

lado_parte numerador_descriptor_tipo uso

donde...
- lado: "L", "M", "R" (esto no lo tengo tan claro, bastará con 1 caracter?)
- parte: sección a la que pertenece (leg, arm, spine, head, tail, etc)
- numerador: usaré nombres genéricos para fácil categorización posterior, acá irá la numeración
- descriptor: breve descripción de la función del objeto
- tipo: "D" (dummies), "S"(shapes), "B"(bones)
- uso: "H" (hidde), "F" (frozen), "A" (animated), "D" (deformer)

La convención es levemente diferente a la que acostumbro usar y necesito comentarios y sugerencias, seguro que me estoy dejando mil cosas (clusters por ejemplo) pero de momento es una primera propuesta.

Que les parece?
Gracias :)
Título: Re: Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: Sumatra en 06 Marzo 2010, 00:07:11
Que les parece?
Que tengo ganas de animar un rig tuyo :D
A estas alturas retiro mi propuesta de challenge que inicié en su día y me ofrezco como tester de los rigs que vayais haciendo las mentes pensantes.

Lo de los nombres no me molesta ni me importa, pero llegado el momento te sugeriré cosas con las que me encuentro agusto cuando animo, por si las quieres usar en tu construcción del rig.
Título: Re: Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: Kinght en 06 Marzo 2010, 15:33:19
 Habrá que estar atento .. ánimo Cesar :)
Título: Re: Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: Cesar Saez en 07 Marzo 2010, 18:45:40
Muchas gracias por los ánimos :)

A falta de comentarios técnicos sobre la convención de nombres (ya le preguntaré a Ángel el martes en el curro) me he puesto con la guía, de momento estará pensada/implementada para bípedos, los cuadrúpedos están dentro de los planes pero aún no lo implementaré.

En cuanto a programación he organizado la guía como un objeto en si mismo que contiene subobjetos que corresponden a las partes del bípedo. El Objeto de la guía tiene métodos para simetrizar los puntos de control, control de visibilidad y tal mientras que los subobjetos/partes tienen un "estado" que luego pretendo utilizar para deducir que debe crear el autorig. Me falta por hacer el exportador e importador a XML (para salvar/cargar presets).

Sobre los nombres tengo una pregunta técnica... convendría hacerme una API de nombres antes de seguir no? como debería enfocarla?

Dejo una capturilla de la guía, no es gran cosa pero al menos así parece que esto se mueve :)

Un saludo
Título: Re: Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: Ángel Sánchez en 08 Marzo 2010, 05:21:30
Me parece un gran proyecto César, pero creo que por mi parte al menos, lo único que puedo hacer es leer y aprender, mi nivel no alcanza como para ayudar en esto... Así que seguiré mucho este proyecto (me interesa muchisimo) y esperaré ver tus avances. :)
Título: Re: Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: Rchals en 08 Marzo 2010, 09:32:55
Un proyecto muy muy interesante. Intentaré ayudarte en lo que pueda, aunque mis conocimientos de python todavía no están a tu altura. :-P
Título: Re: Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: agedito en 09 Marzo 2010, 16:54:24
Bueno, ya le he soltado todo el tostón a Cesar sobre los nombres. Más o menos resumiendo...

Con los nombres siempre hay que buscar un equilibrio entre uso y mantenimiento. Por ejemplo, convenio de nombres con campos opcionales es muy versatil para el usuario, pero luego la API de nombres se complica... Es más facil descomponer un nombre si sabemos cuantos y que campos tienen que si no.

Una restricción que le he sugerido es que el campo parte no termine en número, así facilmente podemos separar la parte del numerador sin tener que fijar un número de cifras fijo para el cardinal.

Respecto a la API, le he sugerido tener el convenio de nombres separado de la API en sí, de esa forma se pueden cargar distintos convenios de nombre para por ejemplo renombrar de un convenio antiguo a otro.

Hemos estado un buen rato hablando y alguna nueva me ha dado Cesar bastante interesante...

Título: Re: Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: Cesar Saez en 09 Marzo 2010, 17:08:42
Gracias, ha sido una interesante charla :)

Ya tengo entretención para estrenar el nuevo cacharro ;)
Título: Re: Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: Ángel Sánchez en 23 Abril 2010, 06:21:03
Novedades César? o en kandor no te dejan respirar?:P
Título: Re: Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: KeyAllBoy en 23 Abril 2010, 10:50:34
Interesante propuesta! Me ofrezco para animarlo y sugerir cosas si fuese necesario.
Título: Re: Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: Cesar Saez en 23 Abril 2010, 12:26:10
Lo tengo pendiente, algo he hecho en casa pero no lo suficiente como para subir un avance (lo cierto es que toda la movida de la api de nombres me ha tirado un poco para atrás).

En cuanto tenga algo mostrable lo subo y pido feedback :)
Título: Re: Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: Cesar Saez en 23 Junio 2010, 21:18:00
No tengo nada mostrable pero sigo con esto, me auto-dejo un recordatorio para subir cosas.

Con la salida de softimage 2011 y la posibilidad de escribir kinematics mediante ICE el enfoque de todo esto ha cambiado bastante para mi, haré una guía mucho más dinámica con previews en tiempo real basados en ICE (partículas y representaciones openGL) y luego usando python usaré esas partículas para crear los deformers y controles para el rig (ICE Kinematics) de forma que todo será mucho más procedural que lo que pensaba al principio. La idea es usar esto como una forma de crear mi propio mini pipeline y a la vez probar metodologías para hacer rigs basados en ICE Kinematics, es toda una revolución en la forma de hacer rigging y este ejercicio me parece perfecto para investigar como afrontarlo.

----------------------------------
Actualmente y a raíz de la nueva guía estoy buscando la forma de calcular la posición de los deformers (y representarla en ICE) interpolando con longitud de arco constante a través de una bezier de 4 puntos.

Me explico, la ecuación clásica de una bezier está expresada en función de un parámetro que va de 0 a 1 (como quien dice la U de una curva nurbs), el problema es que ese parámetro tiene que ver con las tensiones y no con longitud de arco por lo que no asegura una uniformidad y no me sirve.

Según he repasado en mis apuntes para lograr la longitud de arco de una línea continua debemos integrar la raíz cuadrada de 1 más la derivada al cuadrado de su ecuación (que mal queda por escrito), pongo un ejemplo:

f(x) = x                                     ---> ecuación de una línea recta desviada 45 grados
f'(x) = 1                                    ---> derivada de f(x)
S = ∫ sqrt(1 + 1^2) == ∫ 2^1/2
S = 2^1/2 * x                            ---> ecuación de la longitud de arco

De esta forma la longitud de arco entre los límites 0 e 1 en el eje x sería:
S = 2^1/2 * 1 + 2^1/2 * 0 = 2^1/2 = 1.4142...

Lo cual funciona perfectamente en este caso, el problema con la ecuación de la bezier es que es bastante más compleja y si no me equivoco con algún número llegamos a una ecuación no integrable por lo que no se podría resolver de forma empírica.

f(x) = A*(1-x)^3 + 3*B*x(1-x)^2 + 3*C*x^2(1-x) + D*x^3
donde A, B, C y D son los 4 puntos de control

f'(x) = 3*x^2*D + (6*x-9*x^2)*C + (9*x^2-12*x+3)*B + (-3*x^2+6*x-3)*A

S = ∫ sqrt( 1 + ( 3*x^2*D+(6*x-9*x^2)*C+(9*x^2-12*x+3)*B+(-3*x^2+6*x-3)*A ) ^ 2 ) -> no integrable :(

He estado buscando alternativas y tengo una solución que medio funciona donde por medio de iteraciones sobre la bezier calculo la longitud de arco e interpolo la posición en base a ello, aún tengo que refinar la forma de interpolar las posiciones de los segmentos pero no descarto usar alguna forma más elegante de resolverlo (por ejemplo descomponiendo la bezier de forma que llegue a una ecuación integrable). En definitiva aún no doy con la tecla pero estoy en ello.

Si alguien tiene una sugerencia es bienvenida, parece una tontería de hacer cuando se piensa sólo en el resultado final pero es bastante más difícil (y divertido) de lo que parece.

Pronto más!
Título: Re: Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: Cesar Saez en 24 Junio 2010, 00:17:49
Sigo con mi monólogo :)

Se me ha ocurrido una forma de hacerlo mediante aproximación que por fin me convence, de hecho creo que es la misma forma que usa internamente softimage (exactamente el mismo resultado), lo interesante es que lo calculo de forma paralela sin recaer en múltiples ejecuciones y es bastante más limpio/rápido de lo que tenía, con esto ya tengo mi distribución uniforme y puedo seguir, dentro de poco trataré de subir alguna captura o algo.

Como mola ICE :)
Título: Re: Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: siru en 25 Junio 2010, 12:15:42
Joder si te empanas de todo eso.... Animo tengo ganas de ver algo!
Título: Re:Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: Cesar Saez en 27 Enero 2014, 22:44:53
Hola a todos,

Aunque no lo creáis lo que comentaba al principio del hilo no ha quedado en el olvido y estoy trabajando en ello desde hace 1 año o asi (en mi tiempo libre), no quiero daros la chapa con todo el rollo del framework y tal (que por cierto, le he llamado riglab) pero si alguien quiere saber más al respecto hay un preview (de hace 1 año) y algunas entradas técnicas relacionadas en mi blog.

Al lio, revivo este hilo porque he retomado el personaje de este challenge como conejillo de indias y he pensado que lo mínimo que puedo hacer es primero dar las gracias a quien lo ha cedido y en segundo lugar compartir los timelapses del proceso, probablemente más adelante los edite añadiendo un voice over y tal pero por ahora simplemente grabaré el proceso con tal de revisar el workflow.

Asi que nada, os dejo el primer vídeo con el timelapse del esqueleto (4x) y ya iré actualizando a medida que afronte el resto.
https://www.dropbox.com/s/a7wp2sfgoasve7d/00_skeleton.mp4

Cosas que rescataría (que lo mismo al estar tan acelerado no se entiende):
- Herramienta para dibujar curvas dentro de la geometría.
- Herramientas para pasar de curvas a cadenas de nulls y viceversa (con orientaciones consistentes).
- Posibilidad de re-alinear la selección de acuerdo a una curva.
¿Porque curvas?
Limpieza, no tenemos que lidiar con orientaciones, compatible con todos los deformadores de softimage (por ejemplo se puede hacer control de versiones mediante shapes, re-proyectar cambios de la geometría mediante gator, usar lattices, etc), el manipulador de softimage a nivel de componentes brinda posibilidades muy chulas (pivotes temporales, escalado, etc).

Como lo veis? Tiene sentido?
Título: Re:Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: Ángel Sánchez en 27 Enero 2014, 22:51:55
Vamos que esto debería estar ya acabado!!:P Dale caña que la cosa pinta bien, a ver si mañana puedo echarle un ojo que no lo he probado. Animo crack!
Título: Re:Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: Cesar Saez en 27 Enero 2014, 23:51:23
Jejeje
Riglab no es un auto-rigger y probablemente es diferente a lo que la mayoría de la gente espera de un sistema para hacer rigs, pero creo que tiene sus ventajas. Me encantaría conocer tu opinión a medida que os enseñe cosas más interesantes, ya me dirás :)

El siguiente vídeo tiene que ver con la inicialización del rig, se crea un rig en el editor de riglab, se le asocia un esqueleto + geometrías y como paso opcional se puede definir una pose neutra para el proceso de rigging, de esta forma aseguramos que luego las curvas de animación tengas ejes limpios y 'normalizamos' la pose que viene de modelado sin perder las ventajas de una pose creada para favorecer deformaciones (que no necesariamente es la más favorable para animación).
https://www.dropbox.com/s/t0p84npsygfdmk9/01_init.mp4

Por cierto, la compresión del preview de dropbox destroza la calidad del video, la versión descargable se ve mucho mejor.
Título: Re:Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: xuanprada en 28 Enero 2014, 11:05:48
Muy interesante Cesar!
Título: Re:Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: Cesar Saez en 29 Enero 2014, 06:45:48
Buenas!
Es algo tarde pero no quería dejar pasar el día sin subir algo del proceso, en el siguiente vídeo se puede ver como se pueden asignar distintos comportamientos a partes del esqueleto, agrupándolos en un stack (como los operadores de softimage) y permitiendo controlar el estado de cada solver o de todo el grupo mediante presets (para generar rigs multicapas, ik/fk y todo el rollo).
https://www.dropbox.com/s/1b9v152ddtt9f37/02_leg-solvers.mp4

Una cosa interesante de riglab es que no abarca solo la creación sino que todas las operaciones son persistentes entre sesiones, por lo que se puede interrumpir/retomar el trabajo en el rig sin problemas, se puede explorar rigs existentes de forma muy visual y/o interactuar con ellos mediante python (donde obtienes exactamente la misma instancia que durante el proceso de creación, creación y edición comparten una api única) :)
Título: Re:Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: povmaniaco en 29 Enero 2014, 07:15:41
Caray Cesar.. Pero el teorema de Fermat no estaba ya resuelto??  :)
Te voy a tener que contratar una temporada. Yo tambien ando peleandome con formulitas parecidas a esas tuyas.
Estare atento a este post..
Título: Re:Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: Cesar Saez en 29 Enero 2014, 14:16:21
Gracias povmaniaco :)

Otro... Todo manipulador en riglab permite múltiples espacios (space switching), en el siguiente vídeo relaciono los comportamientos del vídeo anterior utilizando esta característica para montar el 'reverse foot roll'.
https://www.dropbox.com/s/g4dee4x8qt1l0xh/03_leg-spaces.mp4
Título: Re:Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: Cesar Saez en 01 Febrero 2014, 01:40:40
Hablemos sobre plantillas!

En el siguiente video hago un repaso al rig resultante de los vídeos anteriores (principalmente para enseñar el snap entre estados), y a continuación creo una plantilla del grupo existente y se lo aplico a los 'huesos' de la pierna derecha replicando el rig.
Las plantillas guardan la definición mínima del grupo por lo que nos permite reconstruir cualquier combinación que creemos en riglab (incluyendo estados y espacios) sobre esqueletos de cualquier proporción/orientación, auto-rigs for free! :D

http://www.dropbox.com/s/ocf7imbq0i3au64/04_leg-template.mp4

Un saludo
Título: Re:Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: Cesar Saez en 01 Febrero 2014, 19:32:12
Una pruebecilla rápida con todas las partes :)
Título: Re:Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: agedito en 01 Febrero 2014, 20:28:32
Paco está en buenas manos ;) esperando ver más cosas
Título: Re:Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: Cesar Saez en 04 Febrero 2014, 06:08:50
Gracias Ángel

Sigo en ello! Desde el último vídeo he añadido tipos de espacios (parent y orient) para poder hacer cosas como isolar la orientaciones de FKs y tal, me he montado una paranoia que no veas con el gráfico de dependencias para poder deducir el orden correcto de los behaviours al cambiar estados, he unificado la cache interna para evitar que cada tool tenga que re-instanciar el rig/behaviour/manipulator y alguna cosilla más. He aprovechado también para hacer una prueba de "animación" (ya sabéis, programmer-art) con el personaje para ver si después de tanto rollo los FPS son aceptables y me he sorprendido gratamente al ver 60+ al pie del viewport :D

A ver si mañana cambio un par de cosillas de la GUI (añadir progress bar y alguna cosilla más) y subo un vídeo en condiciones a vimeo con mis súper comentarios en inglés de los montes xD. El rollo timelapse creo que no funciona, va todo muy rápido y probablemente no se entiende muy bien que es lo que estoy intentando explicar/enseñar (es eso o que el proyecto no despierta demasiado interés... que también puede ser, jeje).

Lo que estoy aprendiendo desarrollando esto no tiene precio, seguro que dentro de unos meses miro hacia atrás y encuentro mil cosas que podría haber hecho mejor, pero creo que estoy dando un paso importante para mi, es por mucho el proyecto más ambicioso que he hecho nunca (casi 10k sloc + dependencias y contando) y mola mucho llegar a ese punto donde las ideas iniciales se aterrizan, las piezas comienzan encajar y la arquitectura no colapsa.

Mañana más, palabra de boy scout :)
Título: Re:Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: povmaniaco en 04 Febrero 2014, 07:51:04
No es que haya poco interes por el tema.. es que como habeis apuntado en el post que he puesto sobre las matematicas, son mayoria los que curran en la parte 'grafica' del 3D ( en este foro ) y muy pocos, los que tocan programación.
Saludos.
Título: Re:Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: xuanprada en 05 Febrero 2014, 11:55:05
Esta todo genial, un trabajo envidiable!
Sigue con ello Cesar!
Título: Re:Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: Cesar Saez en 05 Febrero 2014, 14:32:08
Gracias Xuan.
Pues anoche antes de ir a dormir he hecho 'una locura' y he grabado/comentado todo el proceso, si tenéis un momento y os molaría una explicación gráfica echadle un vistazo ;)

http://vimeo.com/85901976
https://vimeo.com/85901976 (https://vimeo.com/85901976)

00:00 - Intro
01:00 - Rig overview
03:00 - Init
05:22 - Multipose setup
09:05 - Main setup
10:30 - Spine setup
12:35 - Head setup
15:00 - Left leg setup
22:55 - Right leg (via template)
25:35 - Left arm setup
31:25 - Right arm (via template)
33:50 - Closing
Título: Re:Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: povmaniaco en 05 Febrero 2014, 19:44:38
Aprovechare para bajarmelo por la noche que es cuando mejor va mi conexion, y echarle un ojo. Supongo que el trasfondo matematico de este trabajo,  deber ser digno de estudio :)
Título: Re:Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: Rchals en 05 Febrero 2014, 21:00:41
¡veo que la cosa ya va cogiendo mucha forma! ¡Genial como siempre, César!
Título: Re:Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: agedito en 05 Febrero 2014, 22:40:43
Muy buena pinta, me gusta sobre todo la interfaz y el concepto. Ya te he preguntado por chat mis dudas sobre spaces y behaviors, pero buena pinta. Me bajo el código para destriparlo :p
Lo que sí haría, porque no es costoso y te agilizaría desde ya el proceso, sería crearte comandos para ejecutarlos desde el lanzador (crear grupos, simetrías, aparent spaces...)

Muy buen trabajo
Título: Re:Challenge Nº3: "Rig conjunto" WIP César Sáez
Publicado por: Cesar Saez en 05 Febrero 2014, 23:00:53
Gracias! :)