Comunidad Hispana de Houdini
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
06 de Septiembre de 2010, 18:39:32

 
 
Houdini Forum  |  Houdini  |  Documentación  |  Tutoriales  |  Tema: Lorenz Attractor. Introducción al Python OP

« anterior próximo »
Páginas: [1]
Imprimir
Autor Tema: Lorenz Attractor. Introducción al Python OP  (Leído 452 veces)
0 Usuarios y 1 Visitante están viendo este tema.
hmaster
Administrador
Apprentice
*****
Desconectado Desconectado

Mensajes: 43



Ver Perfil
« : 31 de Marzo de 2008, 22:35:05 »

En este documento se explica el uso del nuevo operador de Python en Houdini 9.
Crearemos un nuevo SOP que modificará los puntos de una geometría generada para conformar un Lorenz Attractor.

¿Qué es un atractor?



Preparación

Abrimos Houdini 9 y guardamos el archivo en un directorio.
Creamos un nodo de geometría. Para ello pulsamos [TAB] y escribimos ge. Pulsamos [ENTER] para confirmar.


Con el nodo Geo1 seleccionado pulsamos [ENTER] o [ i ] para entrar en el nodo y borramos el nodo file1.

Creamos un lineSOP y lo conectamos a un resampleOP.
Para hacer esto, pulsamos primeramente [TAB], escribimos line y pulsamos [ENTER]. Con el puntero seleccioando el output del nodo, pulsamos Shift+RMB y escribimos resa; pulsamos [ENTER] para añadir el resampleOP. Debemos tener un arbol como el de la imagen.


Ponemos la linea con unos 10000 puntos: desactivamos la opción Maximum Segmente Length y activamos Maximum Segments. Entonces en la casilla Segments escribimos 10000.


Con esto, ya tenemos la base de nuestro Lorenz Attractor. Guardamos el archivo.



El operador Python.

Para comenzar necesitamos crear un nuevo operador Python: File > New Operator Type ...
Seleccionamos Python Type y nombramos el OP. Por ejemplo le damos un Operator Name rdg_lorenz_attractor y en Operator Label, RDG Lorenz Attractor. Lo guardamos en un nuevo OTL, con la opción Save To Library.


Aparece la ventana para editar propiedades del operador.
Creamos cuatro parametros de tipo float y uno de tipo float vector 3.
Nombramos los float con val_h, val_a, val_b, y val_c. Nombramos el float vector 3 con startpos. Etiquetamos los paramemtros con h, a, b, c, y Start Position respectivamente.


Vamos a la pestaña Channels y establecemos los siguientes valores en el Defaults de los parametros que acabamos de crear:
val_h = 0.01
val_a = 10
val_b = 28
val_c = 2.6667
startpos = (2, 1, 0)


Pulsamos Apply para guardar nuestro operador. Dejamos abierto el Edit Operator Type Properties, ya que lo necesitaremos de nuevo.

El operado ahora está instalado y podemos crear una instancia: Pulsamos [TAB] en el visor de nodos y escribimos rd; pulsamos ENTER dos veces para añadir el nodo. Conectamos el resampleOP al RDG Lorenz Attraktor. Para hacer esto, hacemos click en el output del resampleOP para sacar un conector y lo conectamos al input del RDG Lorenz Attractor.
Actualizamos el visor haciendo click en el boton azul del nodo:



Ya tenemos todo listo para introducir el script.
Volvemos al Edit Operator Type Properties que tenemos abierto, y vamos a la pestaña Code, donde introducimos ese bloque de código:
Código:
# This code is called when instances of this SOP cook.
geo = hou.pwd().geometry()
# Add code to modify the contents of geo.

# read the parameters of the node
 startpos = hou.Node.evalParmTuple(hou.pwd(), "startpos")
 h = hou.Node.evalParm(hou.pwd(), "val_h")
 a = hou.Node.evalParm(hou.pwd(), "val_a")
 b = hou.Node.evalParm(hou.pwd(), "val_b")
 c = hou.Node.evalParm(hou.pwd(), "val_c")

 # init some xyz
 x1 = 0.
 y1 = 0.
 z1 = 0.

 oldp = startpos

 # loop through the point of the SOP
 for pt in geo.points():
    # do the lorenz attraktor
    x1 = oldp[0] + h * a * (oldp[1] - oldp[0])
    y1 = oldp[1] + h * (oldp[0] * (b - oldp[2]) - oldp[1])
    z1 = oldp[2] + h * (oldp[0] * oldp[1] - c * oldp[2])
    newpos = (x1, y1, z1)
    # assign the new point position
    pt.setPosition(newpos)
    # save the position for recursive action
    oldp = newpos



Presionamos Apply de nuevo. Miramos en el Scene Viewer y presionamos [SPACE] y a, para encuadrar en el atractor. Deberíamos ver algo como esto:



Podemos jugar con los parametros para modificar el atractor y buscar rangos de valores validos. Podemos cambiar esto en las pestaña Parameter del Edit Operator Type Properties.



Conclusion

Esto ha sido simplemente una rápida introducción sobre como modificar geometría con Python, y el nuevo Python Operator de Houdini 9. Puede servir para añadir iconos, ser de ayuda en cualquier otro contenido digital, y crear algunos nuevos SOPs.




Citar
Este tutorial es una traducción del tutorial original escrito por Geor Dümlein




« Última modificación: 31 de Marzo de 2008, 22:43:20 por hmaster » En línea
Páginas: [1]
Imprimir

« anterior próximo »
Houdini Forum  |  Houdini  |  Documentación  |  Tutoriales  |  Tema: Lorenz Attractor. Introducción al Python OP
Ir a:  

 
Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC
Valid XHTML 1.0 Transitional Valid CSS 3.0