Esfera haciendo recorrido en un plano
Bueno busque en el foro y no encontré algo como esto me imagino que, por ser básico, pero, sin embargo, yo estoy recién empezando con lo de animación.
Bueno estoy intentando hacer que una bola (esfera) recorra en un plano (como una canica) pero obviamente que gire en su eje igual como lo hace una esfera al friccionar con el plano. Ahora a esta esfera le quiero agregar un recorrido y que se detenga en un punto x.
Teóricamente creo que esto se hace con reactor, pero en esto soy nulo. ¿Alguno de usted me podría orientar en esto que herramientas debo usar?
Trabajo con 3ds Max 2008.
Bueno quizás no se use reactor, ya que indagando vi que existían otras formas y otras herramientas en 3dsmax, pero el inglés me deja pillo help me por favor.
Esfera haciendo recorrido en un plano
Aquí hay un excelente tutorial para hacer un Rig con ese comportamiento: Cuneyt Ozdas tutoriales - max script.
Es algo avanzado ya que utilizan scripts controladores, pero espero que puedas encontrarle utilidad.
Esfera haciendo recorrido en un plano
Vaya por lo que veo me sirve, pero me explicas un poco cómo funciona ya que por lo visto le agregas el comportamiento cuando ya tienes listo el recorrido, alguna ayuda ¿cómo funciona?
Posdata sigo con la duda de cómo funciona el point to Path to constraint que en este caso creo que hace lo mismo que este script.
Se me olvida, no entiendo nada de Maxscript a no ser los autómatas que generan menús.
Bueno creo que el asunto aquí es lo siguiente:
Creo que con el motor reactor debería poder hacerse. Pero lamentablemente la ayuda y lo manuales que tengo no hablan de eso.
1.- tengo mi bolla y mi plano el cual funcionan bien ya que la bolla cae por el plano.
2.- ahora esa caída que se genera quiero que tenga un recorrido (no entiendo cómo funciona el reactor point to Path constraints).
3.- luego que me funcione lo del recorrido puedo volver el plano a ángulo 0 y agregarle una fuerza de empuje para que la bola se desplace por mi recorrido.
-------------------------------------------
Intenté lo del script, pero simplemente no sé cómo hacerle, como insertarlo donde insertarlo solo entendí que toca cambiar el tiempo ajustándolo a la escena de uno y el nombre del objeto a animar.
Esfera haciendo recorrido en un plano
Hay varias formas de hacerlo, yo hace no mucho hice algo muy parecido a lo del tutorial salvo que en mi caso no es un controller sino que bakea directamente la rotación en un rango de frames determinados, si hubiera visto el tutorial hace unas semanas me hubiera ahorrado muchos dolores de cabeza.
La lógica detrás del script básicamente es calcular el Vector del desplazamiento con respecto al frame anterior y la distancia recorrida. Luego determina el Vector de rotación (producto cruz entre el Vector de desplazamiento y el perpendicular al plano) y suma a la rotación actual (en cuaternión para evitar Gimbal Loock) los grados necesarios en función de su radio y la distancia recorrida.
La forma de implementar lo del tutorial es simplemente meterlo un controlador Rotation script del objeto que quieres que gire automáticamente y animar tu esfera a gusto (en el tutorial funciona sólo en horizontal ya que definió el Vector perpendicular al piso como una constante, [0, 0, 1]).
Esfera haciendo recorrido en un plano
Si capto que toca agregarlo como controller script de Rotation, pero ¿cómo? Podrías orientarme mucho más por favor. Unas capturas me vendrían de lujo ya que he buscado información, pero no hay nada paso a paso (recuerde que no todos comprenden esto de los scripts).
Esfera haciendo recorrido en un plano
Seleccionas el controlador de rotación (el de los 3 ejes) y asignas un nuevo controlador llamado Rotation script. En el tutorial pone capturas y todo hombre (él lo hace desde el Track View), que eso no tiene nada que ver con el código del script.
Esfera haciendo recorrido en un plano
Ya, ¿le coloco Rotation script y que más? Te digo que no entiendo de lo que hablamos. Donde ingreso el script que sale más abajo ya que el manual dice
Código:
here is the final script we come up with. As i said you ned to change the obj definition to math with your object name. Alos you may ned to change the timeres value which defines the time steps in which the movement assumed to be linear. We could avoid the Rotation axis calculations by turning the follow option in Path constraint on, but i wanted to make it compatible with key framed (and even procedural) Animations to.
-- you ned to change the below assingment.
-- if the name of the object you are assigning this controller.
-- is ball, then convert the line to.
-- obj = $ball.
-----------------------------------------
Obj = $sphere01 - change this.
Timeres = 1f - time resolution.
-----------------------------------------
Fn getrot te =
(.
If t<=0f then return quat 0 0 0 1 - t=0 => no Rotation.
T0 = t-timeres - previous frame time.
T1 = t - current time.
Rot0 = getrot(t0) - previous Rotation:
P0 = at time t0 (*.obj), position-- previous position.
P1 = at time t1 (*.obj), position-- current position.
If(p0==p1) then return rot0 - no distance is traveled.
Dif = p1-p0 - diference in positions.
Leen = length(dif) - distance that traveled.
Vec = dif / leen - normalized movement Vector.
R0 = at time t0 (*.obj), radius - previous radius.
R1 = at time t1 (*.obj), radius - current radius.
Rotax = cross Vec [0, 0, 1] - Rotation axis.
Angle = 360*len/((r0+r1)*pi)-- Rotation amount (in degs).
Rotdif = quat angle rotax - Rotation from t0 to t1.
Rot1 = rot0 + rotdif - total Rotation).
Getrot(currenttime).
Click evaluate and if no error is shot, click close in the script Rotation dialog box.
Esto donde lo coloco no entiendo, la verdad comprendo que me tratas de ayudar, pero tendrías que hacer un paso a paso.
Agrego el controller script Rotation y saldrá obviamente en blanco ya que tengo que agregar yo los valores y el script. Como sea agrega, donde se agrega y que se agrega.
Esfera haciendo recorrido en un plano
A pesar de quedar como un simple. ¿Esto no lo puedes hacer animando sin tener que recurrir a automatismos? Desplazar bola, rotar bola.
Esfera haciendo recorrido en un plano
Cita:
Ya, le coloco Rotation script ¿y que más? Te digo que no entiendo de lo que hablamos.
esto donde lo coloco no entiendo, la verdad comprendo que me tratas de ayudar, pero tendrías que hacer un paso a paso.
Agrego el controller script Rotation y saldrá obviamente en blanco ya que tengo que agregar yo los valores y el script. Como sea agrega, donde se agrega y que se agrega.
Control + c y Control + v?
Tranquilidad ante todo, hago lo que puedo al tratar de explicarme. Debes pegar el script en el único espacio en blanco dentro del controlador Rotation script, ese recuadro grande dónde puedes escribir dentro de la ventana que te sale cuando asignas el controlador.
Deberías pegar esto:
Código:
-- you ned to change the below assingment.
-- if the name of the object you are assigning this controller.
-- is ball, then convert the line to.
-- obj = $ball.
-----------------------------------------
Obj = $sphere01 - change this.
Timeres = 1f - time resolution.
-----------------------------------------
Fn getrot te =
(.
If t<=0f then return quat 0 0 0 1 - t=0 => no Rotation.
T0 = t-timeres - previous frame time.
T1 = t - current time.
Rot0 = getrot(t0) - previous Rotation:
P0 = at time t0 (*.obj), position-- previous position.
P1 = at time t1 (*.obj), position-- current position.
If(p0==p1) then return rot0 - no distance is traveled.
Dif = p1-p0 - diference in positions.
Leen = length(dif) - distance that traveled.
Vec = dif / leen - normalized movement Vector.
R0 = at time t0 (*.obj), radius - previous radius.
R1 = at time t1 (*.obj), radius - current radius.
Rotax = cross Vec [0, 0, 1] - Rotation axis.
Angle = 360*len/((r0+r1)*pi)-- Rotation amount (in degs).
Rotdif = quat angle rotax - Rotation from t0 to t1.
Rot1 = rot0 + rotdif - total Rotation).
Getrot(currenttime).
Cambiando el $sphere01 por $nombre_de_mi_esfera.
Esfera haciendo recorrido en un plano
Me hago entender, a la tarde te pongo las capturas de mi pantalla para ver si lo voy haciendo bien por lo demás sobre el código, no sé si lo saque en el lado correcto (es decir extraje desde el punto correcto y lo termine en el punto correcto) ¿le echas una revisada? Intentaré pegarlo, pero no sale nada en blanco para pegar salen más como casillas con letras o algo así.
Más tarde pongo el caps.
Aunque tendré que colgar un hilo sobre reactor para point to Path constraints porque no me puedo quedar con la duda.
Esfera haciendo recorrido en un plano
Bueno me sale eso donde lo pongo y por favor revisa el código y me dices desde dónde tengo que poner hasta dónde exactamente.
Esfera haciendo recorrido en un plano
Debes poner lo que puse en mí último mensaje en el cuadro que marcaste como 2, apretar Evaluate y luego cerrarlo. Yo no tengo ningún problema en ayudarte, pero llevas 2 días con una duda que si consultabas la ayuda de 3dsmax te la sacabas al instante y resolvías el problema, seguro que en alguna parte explica cuál es el destino de cada recuadro de esa ventana (y no estoy hablando de Maxscript, me refiero a la interfaz). Saludos.
Esfera haciendo recorrido en un plano
El problema es que hay algunas cosas que el inglés se me va.
Esfera haciendo recorrido en un plano
Creo que lo primero debería ser crear el recorrido con una spline. Después con la bola seleccionada click en animation\constraints\Path constraint, de la bola sale una línea discontinua que tienes que dirigir a la Spline y a partir de ahí en el Track View le das el giro a la bola.
Espero que te sea de utilidad.