Tutorial (o algo así): Python Drivers

Preguntas y respuestas relacionadas con el uso y desarrollo de scripts Python y plugins para Blender 3D
Edgard
Mensajes: 181
Registrado: Vie Feb 17, 2006 3:39 pm
Nombre:
Contactar:

Tutorial (o algo así): Python Drivers

Mensaje por Edgard » Vie Ene 28, 2011 1:02 am

Voy a explicar como utilizar una muy buena herramienta que nos ofrece Blender: Los Drivers (o Python drivers). Si bien hay varios tutoriales en la Web, encontré pocos sobre su uso en las versiones 2.5x, es por eso que he desarrollado el tutorial en la versión 2.54 además de que pronto será la versión oficial.
Vayamos al grano.
Empezaré con algo simple, pues es mi primer tutorial y no quiero complicarme mucho.Imagen Crearemos un plano y una esfera, y mediante los drivers haremos que simule la contracción que se ocasiona en la bola al acercarse a éste.
Primero empezaremos creando dichos plano(Shitf+A>>Mesh>>Plane) y bola(Shitf+A>>Mesh>>UV Sphere); los llamaremos Plano y Bola (que original) respectivamente. Nos aseguramos que ambos estén sin rotación ni escala (Alt+S y Alt+R), por la posición basta con que estén en la misma.
ImagenAhora los Drivers. Partimos nuestra área de trabajo en 2 arrastrando el triángulo de la esquina y cambiamos una zona a Graph Editor(Shift+F6). En la parte superior del Graph Editor cambiamos de F-Curve Editor a Driver y presionamos N para ver las propiedades.
Debemos elegir una propiedad de nuestro objeto, que es la que va a variar según la función(o expresión como lo llama) que escribamos. En este caso variará la escala en Z (Z Scale) del objeto Bola, pues es la que se encogerá cuando se acerque al Plano. Para esto le damos click derecho al valor de Z en Scale en el panel de propiedades del objeto (N) y seleccionamos Add Single Driver.
Observamos que aparece Z Scale en el lado izquierdo de Graph Editor, si le damos click se podrá apreciar que aparecen varias propiedades configurables a la derecha. Sólo usaremos la zona de Drivers.
ImagenPara saber si la Bola se contraerá o no, necesitamos saber qué distancia hay entre esta y el plano. Creamos una variable (ya viene una creada así que dejamos esa nomas) con Add Variable y le ponemos de nombre Dist. Cambiamos el tipo de variable de Transform Channel a Distance y observamos que nos pide dos objetos, obviamente el valor de la variable será la distancia entre estos. Entonces tenemos la variable Dist cuyo valor es la distancia entre la Bola y el Plano, perfecto. Como nuestra esfera tiene 2ub (unidades Blendereanas) de diámetro, entonces cuando esté a una distancia de 1ub del Plano estará en contacto; a menor distancia se empezara a encoger. Sin embargo, necesitamos definir que el valor no esté afectado para cuando Dist sea mayor a 1 y solo tenemos una línea para nuestra función (osea que no podemos poner nuestro if). Pero gracias a Blender tenemos la función min, por lo que nuestra expresión quedaría algo así: min(1,Dist) que devolverá el mínimo entre los valores 1 y Dist; cuando Dist sea mayor que 1 la función devolverá el valor de 1 (Scale = 1 es tamaño normal).
Probamos moviendo la Bola en el eje Z acercándola y alejándola del Plano, debería contraerse cuando choca con éste.

Espero que se haya entendido al menos, si no háganmelo saber que me ayudará mucho. He creado mecanismos algo complicados con esta herramienta, los subiré luego.
Adjuntos

[La extensión ha sido desactivada y no se mostrará en adelante]


Responder