Orden interno del calculo de constraints

Quel - 20/09/2005 17:08
Buenas a todos. Hoy vengo con una duda, seré breve porque no tengo tiempo. (Primero, miramos la imagen adjunta). Ahora os identifico cada cosa.
null1 y null2 : son dos nulls animados, se mueven y tal y cual.
imp : es un implicito cubo con un 2 points constraint balanceado a 50%. Teniendo como objetivos a null1[/i] y null2[/i]. Este constraint solo afecta a la posición de imp[/i], pero no a su orientación.
root : pues eso, el root de una cadena de huesos de 1 solo hueso.
ef : el efector de dicha cadena. Con un position constraint a
imp[/i].
bone : es el hueso. La longitud del cual, es equivalente a la distancia entre root[/i] y imp[/i] (se puede decir, que es un hueso elástico). Bone es el padre de imp[/i], de esta forma, imp mantiene siempre la misma orientación respecto bone[/i].
¿Todo bien por ahora? Supongo que ya os imagináis cómo funciona eso, ¿verdad?
Pues no, no funciona, al menos, a veces. Tengo una docena de jerarquías identicas a esa. De las cuales, 2 o 3, siempre fallan. Y no tiene por qué ser las mismas, ni la misma cantidad. A veces es solo 1, y otras 4.

Lo curioso es que el problema creo que se viene dado al orden en los que XSI calcula los constraints de 2 points y position. Lo que ocurre, es que el ef[/i], que en teoría debería estar siempre en la misma posición que imp[/i]. Aparece siempre en la posición del frame anterior, bueno, para liar más la marrana, cuando digo anterior, me refiero en donde estaba instantes antes. Osea, cuando el time line avanza, [i]ef [/i]en el frame 45 está en la posición que tenía imp en el frame 44. Si el time line retrocede, ef en el frame 93, está en la posocion de imp en el frame 94.

Parece como si primero calculase el constarint de posición de ef y después el del imp, sin volver a actualizar ef, que queda desfasado.

Puedo prosegir con los expedientes-x.

Si arreglo una de esas jerarquías (borro y creo de nuevo el constraint de posición de ef), el 95% de las veces, se arregla en ese ef, pero peta automáticamente otra jerarquía que hasta el momento funcionaba correctamente.

Qué más puedo decir, la verdad es que ya no se ni cual es mi duda. Solo digo que aceptaría todo tipo de comentarios, sugerencias o ayudas que hagan avanzar mi maldito setup. Que es muy frustrante atascarse con misterios como ese. Gracias de antemano.

-- IMÁGENES ADJUNTAS --

🖼️

Estamos trabajando para mostrar las imágenes del foro

Adjunto #19906

Rashek - 20/09/2005 20:43
Vaya, los misterios de los softwares, entiendo lo que te pasa, pero en teoría debería funcionar, a no ser que algún componente lo tengas enlazado con otro sin querer o algo así. Comprueva la expresión de longitud del hueso. Lo estas usando para simular algún musculo? Por experiencia te digo, que a veces, cuando creas un setup, no por ser más enrevesado funciona mejor, yo intentaría simplificar la cosa porque si haces una gran combinación de constrains, jerarquías y expresiones es muy probable que en algún punto falles o que al prog se le valla la olla. Si estas simulando músculos intenta probar con el addon de músculos que hay en xsibase, com. Ánimo.
promineo - 20/09/2005 21:04
Quel, yo no uso XSI, pero me imagino que será igual que max, prueba a hacer lo siguiente: En vez de hacer hijo el root al imp, haz una cosa, ¿supuestamente ef y imp están exactamente en la misma posición y rotación ¿no?
Métele un look at constraint a root dirigido a ef(en vez de vincularlo directamente). Creo que así debe solucionarse tu problema. Saludos.
blast2003 - 20/09/2005 21:47

Buenas a todos.
ef : el efector de dicha cadena. Con un position constraint a [i]imp[/i].
[.

Hacer un constraint de un efector con otro objeto que a su vez tiene constrains es una peligrosa carambola. El efector siempre hace caso al hueso antes que cualquier cosa, yo he seguido tus pasos y la longuitud del hueso no cambia, (la manera de cambiar la longuitud del hueso que yo conozco es Control +). Podrías publicar la escena tan simple como la describes para que te intentemos ayudar, es una idea, en cualquier caso, no me hago a la idea del problema que quieres solucionar con esta combinación. Desde luego XSI tiene expedientes x a patadas, pero creo que es más bien que el programa es más grueso de lo que parece a priori, quiero decir, mírate la línea de comandos que ejecuta cuando quieres alargar un hueso porque a lo mejor lo que necesitas es un script. Saludos.
Quel - 20/09/2005 22:34
Blast2003, si la longitud del hueso no te cambia, será que no tienes metida correctamente la expresión que calcula la distancia entre el root y el implicito. Osea que nada de scripts ni cosas por el estilo, una expresión (distance center todo center) de toda la vida y de lujo, oiga.

Nota : si usas la expresión de distancia entre el root i el efector directamente, creas un círculo de dependencias, por eso hay el implicito que hace de intermediario. Para romprer el círculo.
blast2003 - 21/09/2005 00:00
Yo lo que digo es que, si ese hueso pesa algo y cambiar de longitud puede hacer un descojono importante, por algo lo llamron Bones ¿no? Y los programaron como Bones ¿no? Y si le preguntas al que lo programó como Bones te dirá de lujo no, de piel de cojón de pato, oiga.

No uses un bone para lo que no es, ¿no?
Rashek - 21/09/2005 02:32
Blast, los Bones son para todo los que los puedas usar, principalmente deformar mallas, y hacer un bone elástico es muy usado para simular tendones o simplemente para hacer setups avanzados donde puedas aplicar quik stretch.

Quel, he estado haciendo pruebas y según tu configuración, a mí me va de lujo, no sé porque se ralla.
Quel - 21/09/2005 07:27
Optare por cambiar esas piezas de setup completamente. No serán más simples ni más complejas, pero si diferentes, a fer si hay suerte.
larryvm - 21/09/2005 11:34
No se las peculiaridades de XSI, pero creo que si en la posición inicial emparentas el ef a imp directamente no debería de darte problemas, eliminas un constraint y ef seguiría siempre a imp.

Otra cosa seria en lugar de un efector orientar directamente el hueso con un constraint look at al imp, así no entraría en el cálculo de la cinemática inversa y seria todo por constraints, o hacerle los constraints directamente a ef.
Klópes - 21/09/2005 11:58

Lo curioso es que el problema creo que se viene dado al orden en los que XSI calcula los constraints de 2 points y position. Lo que ocurre, es que el ef, que en teoría debería estar siempre en la misma posición que imp. Aparece siempre en la posición del frame anterior.

Bueno, para liar más la marrana, cuando digo anterior, me refiero en donde estaba instantes antes. Osea, cuando el time line avanza, ef en el frame 45 está en la posición que tenía imp en el frame 44. Si el time line retrocede, ef en el frame 93, está en la posocion de imp en el frame 94.

Por lo que cuentas, parece claro que lo haces bien, de hecho, la cosa no parece tener mucho misterio. Me da la impresión de que si actualizas el frame, o simplemente si redibujas el interfaz, el hueso mejorara su posición y se irá adaptando a la correcta.

Yo uso Blender y estas cosas suelen pasar cuando la IK se complica, pero sólo sucede en tiempo de trabajo: durante el render la cosa se pone derecha y lo hace bien. Igual es una pregunta estúpida, pero ¿cómo se ve si renderizas?
Quel - 21/09/2005 12:10

No se las peculiaridades de XSI, pero creo que si en la posición inicial emparentas el ef a imp directamente no debería de darte problemas, eliminas un constraint y ef seguiría siempre a imp.

Primera particularidad de las cadenas de huesos en XSI.

Tanto el bone como el ef, son hijos de root. Y es una jerarquía que no conviene rompre. Por eso el propio XSI te sugiere usar constraint sobre el ef antes de romper si vinculo familiar son su papaito.

Klópes, lo probaré, a ver qué tal.
Rashek - 21/09/2005 13:02
Al lo mejor el constraint de orientation como dice Larry te puede funcionar.
Quel - 21/09/2005 19:40
Nada, ya está arreglado he borrado todo lo que daba problemas y lo he rehecho diferente. No es ni más ni menos complejo que antes, pero ahora es sutilmente distinto y funciona igual. Por ahora, parece no dar problemas, aún que ya veremos, el sistema anterior, no dio problemas hasta después de varios días.
Quel - 21/09/2005 19:56
Nada, ya está arreglado he borrado todo lo que daba problemas y lo he rehecho diferente. No es ni más ni menos complejo que antes, pero ahora es sutilmente distinto y funciona igual. Por ahora, parece no dar problemas, aún que ya veremos, el sistema anterior, no dio problemas hasta después de varios días.
Rashek - 21/09/2005 21:48
Y como lo has rehecho?
Quel - 22/09/2005 11:47
Es lo mismo, pero con solo null1 y cambiando el 2 point constraint por un position constraint. Los huesos no quedan donde quería en un principio, pero una vez pesado, no se nota si el hueso esta aquí o 2 centímetros a la derecha.

Posdata : por si alguien se lo pregunta, estoy invetigando e indagando en los misterios de los setups faciales.
Quel - 22/09/2005 19:47
La maldita jererquia se puede ver en trabajos en proceso.