top of page

Clock - Expressions Animation

For this project, I was given the task of creating an expression animation in Houdini.

 

As stated by Professor Deborah Fowler:

 

"The goal of this project is to learn how to use procedural methods to model and animate geometry. Specifically, to use expressions and functions to generate cyclical motion as realtes to real world objects. You should complete the assignment with a base knowledge of the use of sin, cos, noise, rand, smooth and abs functions. In addition, you should understand the use of the logical operaters and the use of the if function as well as use of the ch() function."

 

For more information about Houdini FX, visit Side Effects.

Final Animation

First Take

Inspiration

I started searching Google for the insides of a Grandfather clock, and I found these clocks created by Clayton Boyer. I browsed through his clocks and came across the "Galileo's Bicycle" and wanted to recreate it. On the "Galileo's Bicycle" web page, you can also view the video of the clock in motion. You can visit the page by clicking the corresponding image and you can see all Clayton Boyer's clocks, here.

Still Images

See under Final Renders for the redo images.

Process

Once I knew I wanted to do the "Galileo's Bicycle", I began to model. I started do the "arms", the three curves with the two horizontal pieces. It was really easy to model, just using the curve tool and then moving around the points. Once most of it was modeled, I started to figure out the expressions to make it move. I went to the Global Expression Variable page and found out the variable inputs for frame number.

 

When you first open Houdini, the default number of frames is 240. With this in mind, I knew for my "arms" motion, I needed it to rotate 360 degrees in one direction and then 360 degrees in the opposite direction. All in the 240 frame range.

 

So my first expression came out to be:

 

if($FF < ($NFRAMES / 2), ($FF * 1.5), ($FF * -1.5))

 

Or if the frame range is less than half of the of total number of frames divided by two, give me the frame number multiplied by 1.5, if not, give me the frame number multiplied by -1.5. The 1.5 is the number that gives that tells the arms how fast to spin. It just so happened that 1.5 made the arms spin all the way around one time.

 

I used that $NFRAMES / 2 expression for the rest of moving objects, as well.

 

Here is an animation that shows the 240 frame range. Note*: This was rendered with low quality and procedural shaders.

Problems

I encountered my first problem when I changed the frame range to 1008. I chose to have 1008 because on further viewing of the video of the clock in motion, I realized that the clock makes 2 full turns, once to the left and once to the right, in 14 seconds. I did the math and found out the I can include three 14 second turns in the 1008 frames.

 

By changing the frame range, my expressions became invalid. They would basically repeating the same motion, like the arms would continously spin the same direction until the half way point came.

 

Here is a video of 504 frames showing the error. Note*: The was rendered with low quality and procedural shaders.

Fixing the Problems

Figuring out how to fix the problem was very hard and time consuming. I knew that my frame range had to be broken up into six different segments to get each rotation. Professor Fowler suggested for me to do an if statement that had "frame ranges". I did not understand how to do this, so she started me off, basically:

 

if ($FF > 168 && $FF > 336 ... what would happen?

 

At first, I was writing it wrong. I forgot the $FF of the second number.

 

After many failed attempts, I finally ended up with the correct expression.

 

if ($FF > 168 && $FF < 336, -1, if($FF > 504 && $FF < 672, -1, if($FF > 840 && $FF < 1008, -1, 1))) * $FF * 1.5

 

It was here that I noticed, it wasn't quite correct. When I played the animation, I noticed that my arms would jump every time the changed direction. I found out that this was due to the -1, 1, and 1.5.

 

The final, correct version of the expression is:

 

if ($FF > 168 && $FF < 336, -1.105, if($FF > 504 && $FF < 672, -1.107, if($FF > 840 && $FF < 1008, -1.105, 1.067))) * $FF * 2.3

 

The 2.3 allowed the arms to complete one full spin, and the -1.105, -1.107, and 1.067 are the numbers that made the jumping less noticable. I'm sure that there is an easier way to do this, but this is the way that I came out with to correct the problem.

Other Expressions

For my other expression gone wrong, I had to use the sin function to correct them.

 

For the right "S" curve:

 

(sin($FF % 1008) * 20)

 

For the spiral and the string:

 

In the spiral transform:

     Rotate y: 180 + if($FF < ($NFRAMES % 1008), ($FF * -3), ($FF * 3))

     Translate Z: (sin($FF % 1008) * 3) + 6

 

In the string transform:

     Scale Z: (sin($FF % 1008) * 3) + 4

 

For the scissor curve:

     Top curve - Rotate y: (sin($FF % 1008) * 30) + 25

     Bottom curve - Rotate y: -45 + (-1 * (sin($FF % 1008) * 30) + 25)

 

For the star gear with teeth:

     This expression follows the three arms expression:

     Rotate y: if ($FF > 336 && $FF < 672, 1, if($FF > 1000, 3, if ($FF < 336,0,2)))

 

For the bell:

     This expression follows the three arms expression:

     Translate Z: (if ($FF > 336 && $FF < 672, 1.1, if($FF > 1000, 1.3, if ($FF < 336,1,1.2))) * 1.42)

 

 

Textures

For most of my textures, I used the procedural textures built in Houdini. For the clock paint, I used a mantra surface and added a wood bump map that you can see below. For the metal, I used the chrome texture in Houdini. Lastly, for the walls and string, I used another mantra surface with color and a noise bump map.

Final Renders

After getting feedback from my professor and peers, I changed a few aspects of my final animation. Here are some still of my final clock animation.

Conclusion

For my final animation, I noticed had some slight errors with my clock. For some reason, the texture is moving on the clock, but that is due to the UV Project being below the transformation node. My camera movement is not the best in the word, and I can see the small jump at the end of the animation. I ended up fixing it when I redid my final animation.

 

In the end, I really enjoyed this project. Figuring out the expression and problem solving gave me great joy and pride in my work. Throughout this whole process, I have the ability to work in Houdini. I can model, light, texture, and animate in a program I have never used before this class. I feel like this was a great achievement in my path of becoming a Visual Effects artist.

  • Facebook Square
  • Pinterest Square

© 2015 by AMBER EVANS

 Proudly made by Wix.com

bottom of page