11 may. 2014

Orugas y ruedas que interaccionen con el terreno en Blender 2.70

Con este tutorial estaría completando un poco más nuestra oruga interactiva y el tema de hacer girar ruedas siguiendo la traslación de un objeto. Ahora intentaremos hacer que nuestras ruedas y orugas interaccionen con los accidentes del terreno y también simular la tensión de la oruga al ponerse en movimiento el artefacto y rodar. Como la explicación de los Modificadores y Constraint es bastante larga, se pueden consultar las dos entradas anteriores:
De todas maneras, siempre está la sección de comentarios por si no se entiende algo o me haya explicado mal, lo que es altamente probable.
Entonces, en este nuevo tutorial agregaremos modificadores a las ruedas y a las orugas para que reaccionen a las imperfecciones del terreno como me sugirió Juan Carlos en uno de los comentarios.

Oruga y ruedas interacciona con el terreno
Lo primero que haremos será modificar nuestro círculo Bezier que maneja las orugas agregándole más nodos. Originalmente tenía 4, ahora lo subdividiremos 2 veces para que tenga 16 nodos. Cuantos más nodos tenga, más realista será pero el trabajo se nos multiplicará de manera exponencial (literalmente). De forma que con 16 estaría bien la cosa.
Agregando nodos a la curva Bezier
Luego a cada uno de esos nodos de la oruga le agregaremos Modifier Hook asociado a un Empty. Para hacerlo más rápido no lo haremos desde la pestaña de modificadores sino presionando CTRL + H y eligiendo la opción Hook To New Object. De esta manera, cada uno de los nodos de la curva Bezier tendrá un Empty asociado o, como dice más o menos el modificador, enganchado:

Modificador Hook en Blender 2.70

De manera que hora, si en modo objeto movemos uno de los Emptys, la curva se deformará en esa parte siguiéndolo.
Acto seguido colocamos el segmento de oruga en esta nueva curva y a la misma la emparentamos como hija al cubo manejador del sistema, al que denominamos Cubo Padre. Si se parte de cero no habrá problemas, pero en caso de que quede la oruga invertida, habrá que girarla 180º y no habría problemas. Todos los Emptys irán también emparentados con el cubo padre. De manera que si ahora movemos el artefacto, seguiría realizando todas las acciones que tiene asociada como se aprendió en el tutorial anterior.
Con ambas orugas hacemos lo mismo. En el supuesto de que la cosa se vaya de las manos por rotaciones inesperadas o desajustes, lo mejor es hacer individualmente cada oruga, agregando manualmente los Hook a cada punto de las curvas y demás.


Animación de las colisiones de las orugas

Ahora es el momento de crear un suelo con imperfecciones y a cada uno de los Emptys que tocan el suelo (son 7 de cada lado) le agregamos una Constraint Shrinkwrap con la opción Project en +Z y en Target ponemos el nombre del plano rugoso que será el suelo:


Puede ocurrir y de hecho lo hará casi con seguridad, que los objetos se oculten demasiado en el suelo. Eso lo podemos cambiar separando el Empty Hook del nodo asociado. En modo Edit se puede reposicionar el nodo separándolo del Empty. Luego moviendo el Empty volvemos a colocar la cadena en su sitio pero ya estarán separados. Otra forma más exacta de hacerlo es buscar el Empty en el grupo de Hook asociados y eliminarlo. A continuación moverlo a la posición deseada y volver a asignarlo:



Y una vez colocados correctamente, todo funcionará.

Orugas se adaptan a terreno.

Animación de las colisiones de las ruedas

Pasamos a las ruedas. Para ello, vamos a crearles un Empty para cada una en la posición donde la rueda toca el suelo. Es decir, más o menos en el punto tangente a la superficie de contacto (o más bien más abajo, pues hay que recordar que es la porción metálica de la oruga la que empuja la rueda y no el suelo:


Estos Emptys irán todos emparentados como hijos del cubo padre. A todos esos Emptys también le asignamos la Constraint Shrinkwrap.
Ahora, a cada una de las ruedas le incorporamos la Constraint Transformation para que copie en Z las subidas y bajadas del Empty que copia a su vez las imperfecciones del camino. Recordemos que estas ruedas copian la rotación de la rueda madre, pero esta Constrait no interferirá con la que estamos colocando:

Como se ve en la imagen superior, dejamos todos los valores que trae por defecto esta Constraint pero en Z min / max colocamos -1 y 1 en los parámetros de ambas variables. Si colocamos valores superiores no cambiará nada, sólo que si se dan oscilaciones mayores, las ruedas las copiarán.


A esta altura ya estaríamos a punto para animar. 


Sólo falta hacer que la parte de arriba de la oruga reaccione a los tirones de las ruedas. Para ello hacemos lo siguiente.

Reacción de la parte de arriba de la oruga a las tensiones

Creamos un plano sobre la parte superior de las orugas al que le daremos propiedades de tela. A dicho plano lo subdividimos justo encima de los Emptys presentes que manejan las curvas Bezier, aquellos que actúan como ganchos y creamos al principio.

Tela para animar la oruga en la parte superior.
Marcamos los cuatro vértices y los agrupamos. Dichos vértices serán los que mantendrán a la tela en posición. Marcamos cada uno de los dos pares de vértices del extremo y le asignamos dos Emptys Hook:


A estos dos Emptys los emparentamos como hijos del cubo padre. Si queremos que la tela quede en la posición de caída, aplicamos el modificador en dicha posición fijando la tela y luego volvemos a transformar en Cloth.
Ahora tenemos que indicarle a los grupos de vértices de la tela que manejen los Emptys que tienen junto a ellos. Para esto, marcamos los Emptys y le agregamos una Constraint Copy Location. Allí le indicamos el nombre de la tela y el grupo de vértices que deseemos y en Z:


De esta manera, cuando se mueva la tela moverá el Empty que tiene asociado; éste moverá la curva Bezier y ella a la oruga.
También podemos obtener el mismo resultado o mejor, aplicando al Empty el modificador Child Of como se ve en la imagen superior.
Y con esto queda gran parte de la oruga animada e interactiva con en entorno. Como las telas tienen los dos Emptys de los extremos que las manejan, podemos estirarlas cuando el tanque arranca o relajarlas cuando frena dándole un aspecto realista. Nuevamente, cuantos más Emptys agreguemos, más sectores de la oruga podremos controlar. De todas maneras, con uno solo en el medio y con la oruga con un solo nodo en la parte superior se logra un buen efecto pero no se moverán individualmente esas especies de pastillas metálicas que posee la oruga.
El siguiente es el video de muestra. Aún no he tenido tiempo de agregarle ninguna carcaza a esas orugas, aunque ya estoy puesto a esa tarea:


Cualquier pregunta o sugerencia serán bienvenidas.

Pf. Mariano Miguel Lanzi

6 comentarios:

Anónimo dijo...

Muy buen tutorial me tarde lo veré haber si funciona correctamente

Mariano Miguel L. dijo...

Muchas gracias. Cualquier cosa me preguntas. Saludos!

Héctor Juan Martínez Guzmán dijo...

Excelente tutorial, muchas gracias por tomarte el tiempo para hacerlo y compartirlo. Que tengas un excelente día.

Mariano Miguel L. dijo...

Gracias igualmente Héctor por visitar la página y comentar. Saludos cordiales!

Roberto Resendiz dijo...

Muchas gracias por estos tutoriales me sirvieron mucho, no tenia idea de como hacer para que interactuaran con el terreno he aqui mi primer trabajo gracias a estos tutos : https://www.youtube.com/watch?v=Tu29AiVJWrI

Sigan asi ya que no hay muchos en español y es una batalla entender los de ingles como los del canal de youtube CG GEEK que estan muy buenos. Una pregunta como puedo hacer un tipo de bamboleo osea un movimiento que moviera toda la coreceria en este ejemplo el cubo padre, ya que las orugas se van derecho osea que cuando este muy inclinado que exista un limite para mover la carroceria (cubo padre) y como son varias ruedas y puede haber varias inclinaciones en los 360 grados, un cosejo u otro tuto claro cuando tengas tiempo xd como veras soy un novato en esto, en mi video puse tu pagina para que la gente interesada lo vea, gracias sigan asi. =D

Mariano Miguel L. dijo...

Me alegro mucho que haya sido de utilidad, señor Roberto Resendiz. Con respecto a su pregunta, en su momento lo resolví para una animación de un artefacto oruga pero ahora no recuerdo bien los pasos para hacer que el carro se mueva siguiendo el terreno. Voy a buscar información y en todo caso realizo un tutorial al respecto. ¡Saludos cordiales!