Nuevo Tipo de Columna - Tarea 05

Moderadores: David, Tutores

Responder
AlbertoFdez
Junior
Junior
Mensajes: 27
Registrado: Lun Abr 04, 2011 7:36 pm

Nuevo Tipo de Columna - Tarea 05

Mensaje por AlbertoFdez »

Hola gente.
Bueno, todo esto empieza cuando veo que Iker dice que el hacer una columna FK con Offsets(el segundo tipo) se pierde la habilidad de rotar la cadera desde, digamos, el centro de masas, el ombligo.
Y yo digo: esto no puede ser, tiene que haber alguna manera de tener lo mejor de cada mundo, Offsets y rotacion de columna como Dios manda.

Y después de decirlo, pues me puse a hacerlo, y esto que adjunto es el resultado.

Si la abris y punto puede parecer un poco caótico, así que en lugar de escribir una parrafada sobre su construcción he decidido hacer un FOTOTUTORIAL paso a paso.

Aqui el Scriptillo que se le añade al contrlador de la cadera

Código: Seleccionar todo

   addModifier $ (EmptyModifier ()) ui:on
   -- renombramos nuestro modificador
   $.modifiers[1].name = "HipControl" -- [1] es el modificador de más arriba
   -- refrescamos(max tiene problemas de refresco automático)
   max create mode
   max modify mode
      
   ATH = attributes HipControl

	(

		rollout HipSnap "HipSnap"
		(
			--Nombres genéricos, renombrar segun los objetos reales en escena
			local HipHlpStart = $Rig_SnapHelpStart
			local HipHlpEnd =$Rig_SnapHelpEnd
			local HipStart = $Rig_Cadera_RotCenter
			local HipEnd = $Rig_Cadera_RotEndRef
			Local HipOffset = $Rig_CaderaOffSet
			local HipCTR = $CTR_Cadera
			local HipCTRorigin = $Rig_HipCtrOigin
			local HipEndOrigin = $Rig_SnapHelpEndOrigin
			local HipStartOrigin = $Rig_SnapHelpStartOrigin
			local HipRefAlign = $Rig_CaderaOffSetRefAlign
			local OffSpine01 = $CTR_SpineOffSet_01
			
			button SnapHIP "Align Controllers" Width:120 Height:30 tooltip:"Mantiene la posición de los huesos; Reajusta el Rig para que las transformaciones funcionen"
			on SnapHIP pressed do
			(
				HipHlpEnd.position = HipRefAlign.position
				HipStart.position = HipHlpStart.position
				HipEnd.position  = HipHlpEnd.position
				HipCTR.position = HipCTRorigin.position
			)
			
			button ResetHIP "Initial Pose" Width:120 Height:30 tooltip:"Devuelve la Cadera a su posicion Inicial"
			on ResetHIP pressed do
			(
				in coordsys HipCTRorigin HipCTR.rotation = eulerangles 0 0 0

				HipCTR.position 		= HipCTRorigin.position
				
				OffSpine01.position 	= HipStartOrigin.position
				HipHlpStart.position 	= HipStartOrigin.position
				HipStart.position 		= HipStartOrigin.position
				OffSpine01.position 	= HipStartOrigin.position

				HipHlpEnd.position 	= HipEndOrigin.position
				HipEnd.position 		= HipEndOrigin.position				
			)
		)
	)
custAttributes.add $.modifiers[#HipControl] ATH-- esto es para añadir estos parametros al modificador recien creado
Cuando lo Comprobeis vereis que su funcionamiento es algo engorroso, el control funciona, pero el rig internamente se "desajusta", con este script y la ayuda de un buen puñado de helpers consigo que cuando pulsamos el boton, los huesos mantengan la posicion y rotacion que le hemos dado. lo Ideal es que cada vez, antes de usar ese controlador(que se puede rotar y mover) se pulse el boton.
Ahora vuene la pregunta mágica Iker, se podría conseguir que lo que hace ese boton estuviese continuamente ejecutandose?
Por lo demás ¿le veis algun otro problema que yo he pasado por alto?
Adjuntos
SpineFKCaderaInvertida.rar
(26.68 KiB) Descargado 431 veces
Spine FK&offset INVERSE HIP 01.jpg
Spine FK&offset INVERSE HIP 02.jpg
Spine FK&offset INVERSE HIP 03.jpg
Spine FK&offset INVERSE HIP 04 .jpg
Spine FK&offset INVERSE HIP 05.jpg
Spine FK&offset INVERSE HIP 06.jpg

gmendieta
Junior
Junior
Mensajes: 44
Registrado: Jue Oct 08, 2009 10:47 am
Alumno: SI

Re: Nuevo Tipo de Columna - Tarea 05

Mensaje por gmendieta »

Esto es para conseguir que la columna gire desde el punto de pivote superior como en el tipo 1 de columna?

Yo lo que he hecho ha sido poner un punto alineado con el primero de abajo de la columna. Y ese punto tiene LOOKAT al 2º punto. Y las piernas linkados a este segundo punto. De esta manera consigo automáticamente la rotación que molaba del primero.

Un saludo

AlbertoFdez
Junior
Junior
Mensajes: 27
Registrado: Lun Abr 04, 2011 7:36 pm

Re: Nuevo Tipo de Columna - Tarea 05

Mensaje por AlbertoFdez »

Bueno, siguiendo la corrección de IKER sobre lo de mantener una función activa en un Expression Script he intentado cambiar el funcionamiento de esta columna que he hecho, para que en lugar de tener que refrescar manualmente, el rig se ajuste automáticamente.
mi problema es que no se qué escribir en el script para que no me cree claves de animación en TODO el timeline.

esto lo que quiero que se ejecute constantemente

Código: Seleccionar todo

HipHlpStart = $Rig_SnapHelpStart
HipHlpEnd =$Rig_SnapHelpEnd
HipStart = $Rig_Cadera_RotCenter
HipEnd = $Rig_Cadera_RotEndRef
HipOffset = $Rig_CaderaOffSet
HipCTR = $CTR_Cadera
HipCTRorigin = $Rig_HipCtrOigin
HipEndOrigin = $Rig_SnapHelpEndOrigin
HipStartOrigin = $Rig_SnapHelpStartOrigin
HipRefAlign = $Rig_CaderaOffSetRefAlign
OffSpine01 = $CTR_SpineOffSet_01


HipHlpEnd.position = HipRefAlign.position
HipStart.position = HipHlpStart.position
HipEnd.position  = HipHlpEnd.position
HipCTR.position = HipCTRorigin.position
Se lo he puesto al control central, dentro de una checkbox vacía que he creado con Parameter Editor.
NEcesito algo que le indique que esa operación tiene que hacerla solo para el fotograma actual sin poner keys en todos lados.
hay unos cuantos comandos que he probado; como "currenttime", pero no se me ocurre como aprovecharme de ellos para conseguir lo que quiero
¡¿ayuda?!

ikerJ
Miembro Vip
Miembro Vip
Mensajes: 212
Registrado: Mar Jun 15, 2010 9:21 pm

Re: Nuevo Tipo de Columna - Tarea 05

Mensaje por ikerJ »

Buenas,

Tiene buena pinta lo que muestras, Alberto. ¿Vas a implementarlo en tu personaje? Lo que interesa sobre todo es probarlo durante la animación. Vamos a ver si me puedo explicar...

Lo primero, creo que no vendría nada mal englobar lo que tienes dentro del código de cada botón dentro de una sentencia 'with undo on()'. De ese modo, si el usuario alinea o vuelve a la pose inicial y quiere deshacer el comando tiene esa posibilidad.

Luego, puedes usar un 'change handler' para alinear. Realmente, lo que queremos es alinear dos objetos después de transformar el control de la cadera. Así que siguiendo lo que comentó Gorka en su día podrías hacer:

Código: Seleccionar todo

when transform $CTR_Cadera changes do
(
	local HipHlpStart = $Rig_SnapHelpStart
	local HipHlpEnd =$Rig_SnapHelpEnd
	local HipStart = $Rig_Cadera_RotCenter
	local HipEnd = $Rig_Cadera_RotEndRef
	Local HipOffset = $Rig_CaderaOffSet
	local HipCTR = $CTR_Cadera
	local HipCTRorigin = $Rig_HipCtrOigin
	local HipEndOrigin = $Rig_SnapHelpEndOrigin
	local HipStartOrigin = $Rig_SnapHelpStartOrigin
	local HipRefAlign = $Rig_CaderaOffSetRefAlign
	local OffSpine01 = $CTR_SpineOffSet_01

	with undo on
	(
		HipHlpEnd.position = HipRefAlign.position
		HipStart.position = HipHlpStart.position
		HipEnd.position  = HipHlpEnd.position
		HipCTR.position = HipCTRorigin.position
	)
)
Esto es un 'callback' (un evento que se ejecuta constantemente y que está a la espera de recibir órdenes), con lo que habría que prestar especial atención a su gestión/encendido/apagado.

==============================================================================================================

Pero observa que cuando empiezas a animar, y a rotar y a mover el control de la cadera (como un animador haría), como las alineaciones ('snaps') se producen en fotogramas clave y por defecto se está interpolando entre estos claves, ocurre esto:

http://somosposmodernos.com/liveOnLine/albertoSpine.swf
[swf]http://somosposmodernos.com/liveOnLine/albertoSpine.swf[/swf]
*para el 'alineado' automático he usado el código que he puesto arriba.

¿Maneras de solucionarlo? Pues se me ocurre que poner más 'keys', para que los objetos que se alinean no interpolen. Pero ahora vamos al centro de la cuestión: si esos objetos están ocultos, y están animados (hemos puesto 'keys' en ellos para que el sistema funcione), ¿qué ocurre cuando un animador cambia su animación y desplaza las 'keys' de su control de un punto a otro en la línea de tiempo? El invento deja de funcionar, a no ser que hagamos nosotros la gestión automática de esas 'keys'... con lo cual empezamos a añadir dificultad a una tarea aparentemente sencilla como es manipular la columna de un personaje.

Por eso en la mayoría de los casos se suele ir a lo más sencillo, aunque implique tener que elegir entre todas las soluciones disponibles. Prueba lo que te digo a ver si se te ocurre alguna manera de saltarnos ese problema :)

Responder

Volver a “Rig de Personajes”