My Works ! Most of the videos are made with Houdini.

Cause Sharing is for the greater common benefit.

This a part of my R&D, I hope that will be usefull ! 🙂

Pyhton Tools

Add OUT nodes

A basic tool allow you to create a node called ‘OUT_node_name’ above each selected nodes.

selected_nodes = hou.selectedNodes()
for node in selected_nodes:
    parent = node.parent()
    name_node_selected = node.name()
    null = parent.createNode('null','OUT_' +
        name_node_selected)
    null.setInput(0,node)
    macolo = hou.Color((0.4,1,0.4))
    null.setColor(macolo)
    pos = node.position()
    null.setPosition(pos)
    null.move([0,-1])
    #flags
    null.setSelected(True,True)
    null.setDisplayFlag(True)
    null.setRenderFlag(True)

Select by type

This tool allow you to select nodes that have same types than selected node.

selected_nodes = hou.selectedNodes()
for node in selected_nodes:
    type = node.type()
    parent = node.parent()
    for child_node in parent.children():
        if child_node.type() == type:
            child_node.setSelected(True)

Helix

Create a basic helix setup.

node = hou.node("/obj").createNode("geo","Helix")
children = node.children()
for child in children:
    child.destroy()

#nodeCreation
line = node.createNode("line","BaseLine")
pointNode = line.createOutputNode("point","linePoint")
parm = pointNode.parmTuple("t").deleteAllKeyframes()
control = pointNode.createOutputNode('null','ControlHelix')
macolo = hou.Color((0.1,0.1,0.1))
control.setColor(macolo)

#hide null default parameter
control.parm("copyinput").hide(True)
control.parm("cacheinput").hide(True)

#add and set paremeters to ControlHelix
nbPoints = hou.IntParmTemplate("nbPoints","nombre de Point",1,(50,0,0),1,500)
freq = hou.FloatParmTemplate("freq","Frequency",1,(750.0,0.0,0.0),0.0,1500.0)
amp = hou.FloatParmTemplate("amp","Amplitude",1,(1.0,0.0,0.0),0,2)
length = hou.FloatParmTemplate("len","Length",1,(2.0,0.0,0.0),0,4)
ramp = hou.RampParmTemplate("radius","Radius",hou.rampParmType.Float)
control.addSpareParmTuple(nbPoints)
control.addSpareParmTuple(freq)
control.addSpareParmTuple(amp)
control.addSpareParmTuple(length)
control.addSpareParmTuple(ramp)

#setExpressionToPointNode
pointNode.parm('tx').setExpression("cos($PT/$NPT *ch('../ControlHelix/freq'))*ch('../ControlHelix/amp')*chramp('../ControlHelix/radius',$PT/$NPT,0)")
pointNode.parm('ty').setExpression("$PT/$NPT*ch('../ControlHelix/len')")
pointNode.parm('tz').setExpression("sin($PT/$NPT *ch('../ControlHelix/freq'))*ch('../ControlHelix/amp')*chramp('../ControlHelix/radius',$PT/$NPT,0)")

##setExpressionToline
line.parm("points").setExpression("ch('../ControlHelix/nbPoints')")

#Dislpay
control.setSelected(True,True)
control.setDisplayFlag(True)
control.setRenderFlag(True)

#add NetworkBox
network = control.parent().createNetworkBox("Helix")
netColor = hou.Color((0.4,0.2,0.2))
network.setColor(netColor)
network.addNode(control)
network.addNode(line)
network.addNode(pointNode)

#move NetworkBox
network.fitAroundContents()
posNet = network.position()
network.move(-posNet)

Convert to Slash

Convert the backslash of your path to slash and copy text in clipboard.

import os

def addToClipBoard(text):
    command = 'echo ' + text.strip() + '| clip'
    os.system(command)

#create input
button = ("Convert !",)
window = hou.ui.readInput("enter text to convert",button)
text = window[1]    
new_text = text.replace("\\","/")
addToClipBoard(new_text)

#display Message
hou.ui.displayMessage("copied on clipboard")

Little Alembic Manager

This Tool allow you to import all editable alembic geometries from an archive to a new object :

  1. By turning parm « polysoup »of all sub-children into « No poly Soup Primitives » in order to edit géometries.
  2. And creating a new objet,  within all alambic geometries merged.
import toolutils

pathNodeAbc = hou.ui.selectNode()
nodeAbc = hou.node(pathNodeAbc)
listofNode = []
for child in nodeAbc.allSubChildren():
    if child.type().description() == "Alembic":
        child.parm("polysoup").set(0)
        listofNode.append(child.path())
#hide alembic node
nodeAbc.setDisplayFlag(False)
# new geometry creation
root = hou.node("/obj")
nodeGeo = root.createNode("geo","Alembic_Geo")
pos = nodeAbc.position()
nodeGeo.setPosition(pos)
nodeGeo.move([0,-1])
nodeGeo.children()[0].destroy()
mergeNode = nodeGeo.createNode('merge', 'mergeAll')
#objectMerge node Creation
for index in range(len(listofNode)):
    node = nodeGeo.createNode('object_merge',"Geo"+ str(index +1))
    node.parm('objpath1').set(listofNode[index])
    node.parm('xformtype').set(1)
    mergeNode.setInput(index,node)
   
#display
nodeGeo.layoutChildren()
#out node
null = nodeGeo.createNode('null','OUT')
null.setInput(0,mergeNode)
macolo = hou.Color((0,1,0.5))
null.setColor(macolo)
pos_merge = mergeNode.position()
null.setPosition(pos_merge)
null.move([0,-1])
null.setSelected(True,True)
null.setDisplayFlag(True)
null.setRenderFlag(True)

Vex Tools

Golden ration Scattering

Create points parsed by Golden ratio.

( don’t forget to create automatic parms templates )

int count = chi("count");
float global_radius = chf("global_radius");
float tau = 3.14159268 *2;
vector pol_to_car(float theta; float radius;) {
    return set(cos(theta)*radius, 0, sin(theta)*radius);
}
float phi = (1 + sqrt(5)) / 2; 
// calculate the golden angle in radians
float golden_angle = tau * (2 - phi);

float radius;
float theta = 0;
vector pos;

int n = 0;
while(n < count){
    radius = global_radius * pow((float(n) / float(count)), chf("radius_falloff"));
    theta += golden_angle * chf("angle");
    float ramp = chramp("distance",(float(n)/float(count)));
    pos = pol_to_car(theta, radius)* ramp;
    addpoint(geoself(), pos);
    n += 1;
}

Bbox data

Create all vars depending of bbox

// get data
vector min = {0,0,0};
vector max = {0,0,0};
getbbox(0,min,max);
vector bbox = relbbox(0,@P);

//min,max vars
float xmin = min.x;
float xmax = max.x;
float ymin = min.y;
float ymax = max.y;
float zmin = min.z;
float zmax = max.z;

//size vars
float xsize = xmax - xmin;
float ysize = ymax - ymin;
float zsize = zmax - zmin;

// relative point values
float bbx = bbox.x;
float bby = bbox.y;
float bbz = bbox.z;

OneLightning :

Create one full details lightning from start point to end point

Quaternion and Matrix for Fish :

It's just a test to get a better understanding of Quaternion and Matrix.
In this file, fishes are replaced by box, but you can set your own fishes

Rotate Bird Setup

I tried to add some more natural behaviour at birds copied on points

Sparkles Setup

It's a basic setup, but it works !

Flocking Birds

It's the whole scene with downloaded geometries.

RABBIT Trail

It's the whole scene with geometries.

check Volume Res

A Basic setup to check the good res for simualtion

Houdini Edge Displacement

This is a new way to build displacement on geometry.
I spent a lot of time to create this new way, I hope it will be usefull.

Destruct the Samurai

( with geometry )

About:

My name is Florian Bard but everyone calls me "FlooZ". For now,I 'm living in south of france , I 'm 26, weight 77 kg and
my favorite color is green !!
I am a Visual Effects Artist based in France, specialized in Fluids, Particles and Dynamics.
I did my studies in France, in a little 3D graphic design school during 3 years, called "Aries",
but this training wasn't efficient enough to make beautiful visual effects. So I started to learn on my own side the great and wonderful Houdini software.
This tool totaly changed my "creation" way and my though about 3D.
I worked for a company called Forge Animation, during 4 years.
Sadly the compagny closed, so I decided to take 1 year to increase my skills in Python programmation, Vex Code and all my knowledges about Houdini, in order to more easily create visual effects and to apply for a Houdini FX Artist position.


https://www.linkedin.com/in/flooz

Personality:

I love understand !
I'm a quiet and friendly person and I can adapt myself to many situations!
Also I developed good analytical skills ( due to some important events in my life ), That allow me to orient my life on different way.
Also, I would like to work all around the world in order to discover new things !

Contact

Powered by themekiller.com watchanimeonline.co