viernes, 31 de marzo de 2017

Fence Digital Asset v0.1

El objetivo con este ejercicio es crear un Digital Asset, en este caso es una Valla procedural que permite editar la forma del perímetro, la altura, grosor y densidad de columnas.



Las Columnas



La Columna está siempre sobre el limite superior de la Base pues su posición en Y esta dada por esta expresión:

bbox("../YMAX", D_YMAX)
Que nos devuelve el valor máximo en Y del bounding box de la Base.

Base y Top comparten el mismo valor de Height, el cual será expuesto para el usuario, al igual que el valor de Height de la Columna.


La Forma del Perímetro



Al perímetro se le da forma usando una curva (MainCurve) y se puede variar la densidad de points que tiene usando un Resample, de aquí sale la cantidad de columnas que tendrá la Valla.

Las columnas son copiadas a cada punto de la curva usando el nodo Copy1 (Copy Stamp)


Las Filas (Rows)

Para crear las filas, usé un nodo Line (Rows) para generar puntos de forma vertical y asi copiar a cada punto la misma MainCurve, la cantidad de puntos en la linea determinan la cantidad de filas que tendrá la Valla.

El nodo top_of_base1 me permite posicionar la linea (Rows) sobre Base y el Length de la linea es igual a el Height de la Columna. 
  • circle1 es la geometría que sera extruida sobre la curva usando el nodo sweep1.
  • polybevel1 me permite darle curvas suaves a MainCurve.

Pregunta: Como evito que el copytopoints1 haga una copia en el primer y último punto de la linea ?

Con un Group SOP y usando esta expresión en Base Group
0 `chs("../Rows/points")-1` 
0 siempre es el primer punto, y la única forma que encontré para seleccionar el último punto es copiando la referencia de Length del Line (Rows) y restandole 1, ya que si tengo 7 puntos en la linea, empieza en 0 y el último es 6.

Lo siguiente fue invertir la selección de puntos usando un Group Combine, donde el Grupo anterior se iguala a todos menos el mismo grupo, osea todos lo demás puntos.

Tuve problemas al decirle al Copy to Points SOP cual grupo copiar, pero simplemente este grupo se asigna en el campo: Target Points.









miércoles, 29 de marzo de 2017

Transformaciones Procedurales

Objetivo: Que box2 siempre esté sobre box1, sin importar sus cambios de tamaño.

La expresión $YMAX en Translate Y del nodo transform1 aplicado al nodo box1, me permite mantener la caja sobre la grilla.
Estas variables globales representan el máximo o mínimo volumen del objeto en el eje especificado. De esta forma, $YMAX es el máximo volumen del objeto en Y.  Así mismo hay $XMAX, $XMIN, $ZMAX y $ZMIN.



Ahora en box2:

  • transform2 mantiene el $YMAX en Translate Y.
  • transform3 en Translate Y tiene: bbox("../transform1/", D_YMAX)

    bbox es una expresión que devuelve información sobre el bounding box, que es una caja que describe los valores máximos y mínimos en cada eje de coordenadas de la geometría especificada.

    D_YMAX es una expresión que retorna el YMAX de el bbox en cuestion.
De esta manera, al asignar el D_YMAX del bbox del transform1, la segunda caja se mantendra siempre sobre la primera, sin clipearse y sin importar los cambios de tamaño de box1.





Tutorial: http://www.gametutor.com/live/tutorials/houdini/intro-to-procedural-modeling/
2. Procedural Transformations

lunes, 27 de marzo de 2017

Aprendiendo Houdini

Estoy aprendiendo Houdini y creé este blog para registrar los tutoriales y ejercicios que haga, con el fin de entender mejor y tener un registro de lo que voy haciendo, para futura referencia a quien se encuentre esto y le sirva!

Fence Digital Asset v0.1

El objetivo con este ejercicio es crear un Digital Asset, en este caso es una Valla procedural que permite editar la forma del perímetro, l...