Kindred Dance - Synopsis

The exploration of the rythmic nature of marine life. This piece emphasises on the interplay between marine life and their environment. Strong emphasis will be placed on light and it's reaction to the rapid movement of elements with varying surfaces. Throughout the journey, the viewer is taken from tranquility to hostility, then back again.

Kindred Dance is an ongoing project, first conceived for my Visual Effects Concepts class and now continued through my Studio I class. I anticipate finishing it over the next year. Technically, my main focus in this project is the dynamics and procedural animation. My main tool will be Sidefx Houdini.

Class 1 September 15 Class 2 September 17
Class 3 September 22 Class 4 September 24
Class 5 September 29 Class 6 October 1
Class 7 October 6 Class 8 October 8
Class 9 October 13 Class 10 October 15
Class 11 October 20 Class 12 October 22
Class 13 October 27 Class 14 October 29
Class 15 November 2 Class 16 November 4
Class 17 November 9 Class 18 November 11
Class 19 November 16 Class 20 November 18

Timeline of Events

Class 1 September 15

During this time, the Entire Idea of Kindred Dance was pitched. This video shows diferent footages from a documentary called Planet Earth, stiched together in a sequence that will approximately match the timing of the final product. The music is not included in this piece, however it is timed according to music.

The first shots in the piece shows a massive Kelp Forest, which is what I will be focusing on re-creating for this class. In addition to the HD version of the Planet Earth DVD, here are some images that I will be using as reference.

img 1 img2
img 3 img 4
img 5 img 6
img 7 img8

<<back to top>>

Class 2 September 17

Since i'll be doing almost all of my work in Houdini, I took the approach of modelling a completely customizable digital asset for one kelp branch. This way, I can create an entire forest of unique kelp from one asset. Not only is this more efficient, but may produce very interesting results. As of today, the asset has the following controls:

Orientation - Aligns a kelp branch either horizontal or vertical. (may also add transform controls)
Bend Points - Sets the number of points that defines the bend angle of the branch. Less Points means less distortion in the branch.
Bend Seed - Gives different random variations for the current Bend Points.
Vine Distortion - This is the Bend Weight. It controls how much influence the Bend Points has on the original shape of the vine.
Vine Radius - controls the width of the vine.
Length - Controls the Length of the overall vine. More Leaves may be added to compensate for new length.
Leaf Points - This parameter is used to add new leaves by adding points along the vine to instance leaf geometry onto.
Leaf Dist. Seed - Introduces random distributions for the leaves.
Leaf Size - Global scale for the leaves
Geometry - When adding many Bend Points, NURBS geometry may show pinching. With this option, you can then switch to Polygons to add more detail via the last option.
Poly Detail - This becomes available with Polygons selected. Allows the introduction of more detail for the kelp vine.

Currently, the kelp has proxy leaves just for testing purposes. I hope to add options for leaf style as well as shape controls for completely random leaves. Check the images below for a look at the asset in action.

img 1 img2

<<back to top>>

Class 3 September 22

I've been behind on the site updates, but have been getting some work done on the kelp asset behind the scenes. I've added more parameters for increased functionality and flexibility. Currently, the kelp leaves are low rez randomly generated polygons instanced onto some NURBS wires. Each leaf is completely random in shape, form and width. These random attributes can further be controled by these parameters:

Leaf Twist - Add twist to the leaves. Can be random or explicit. Can also be controlled with time based functions.
Leaf Dist. Points - Before, this parameter was called Leaf Points. It adds leaves to the main vine and distributes them randomly.
Leaf Length - Controls the length of all randomly generated leaves. The explicit value entered here is added onto the randomly generated length for each leaf.
Leaf Points - This value now controls how many points make up the initial NURBS curve of the leaf. More points will send a smoother curve through DOPs (Dynamics), which also takes more time to solve.
Leaf Width - A line copied onto each Leaf Point controls the width of each leaf. The width of each line is randomly generated and encapsulated within a sine function. This result is then added to the explicit value entered within the Leaf Width parameter.

Below shows the first test of the kelp asset driven by a number of forces.

<<back to top>>

Class 4 September 24

In an effort to meet maximum amount of flexibility, I have added alot more parameters on the kelp asset. One of the major change made was to use NURBS for the leaves instead of Polygons. Nurbs interpolate between Leaf Points and naturally gives a smoother final result while minimizing overall geometry weight. Here are the new parameters:

Nurbs Points & Nurbs Order - These values enable the user to increase the quality of both U and V coordinates of the geometry.
Leaf Geo Rand. - Controls the roughness of the leaf edges. The lower this value is, the smoother the leaf edge looks.
Rand seed - Random seed for the look of each leaf. Generates a wide range of unique looks.
Distortion Expression - Professor Joe Pasquale reccomended that I add extra dynamics for the subtle movement of the main kelp vine. The result is this parameter. A time based expression can be entered to manipulate the movement of the vine. The constantly changing value of this parameter is added onto the value of the "Vine Distortion" parameter.

I've also added a series of File and Simulation operators that really saves time when using this asset. Their main function is to write geometry from simulation and read that geometry from disk for real time playback. Significantly increases my efficiency as I populate the kelp forest for Shot 3:

Simulation - Two choices: "File" and "DOPs". "File" reads geometry from disk for real-time playback. "DOPs" solves the simulation through the wire solver and various forces. With this option, the "Render" button becomes available. With this option you can then specify frame range and path to render out solved geometry to disk.


First Kelp Dynamics using NURBS surfaces

Bend Dynamics Test

 

New Asset Controls

<<back to top>>

Class 5 September 29

For class 5 I presented a completed camera move for what I call "shot 3." I also spent some time implementing a camera rig that closely simulates the subtle dynamics of an underwater camera. I plan to complete atleast 3 more shots for this film. At this point, it is very easy to populate a scene with kelp assets and do a camera move. This shot was rendered out from the viewport with wireframe enabled, so I could inspect the geometry for interpenetration. There is not much I could do in the event of interpenetration, since it would take too long to solve using the dynamics system. I would just have to find creative ways to cover it up using lighting. Here is the completed and approved camera move for shot 3:

<<back to top>>

Class 6 October 1

Knowing that I may have to do a few custom shaders for specific needs, it was important that I do early shading tests to know what was available to me and what their shortcomings were. Here, I used a Vex Lit fog shader with atmosphere, and a Sphere primitive turned into volume smoke. The fog and smoke adds for a nice effect closely simulating most of what I would like for the final render. With a bit more customizing, it should be suitable enough for use. I then proceeded to try transparency solutions available within houdini on the kelp. It did not work quite well and may need more extensive customization for the look I would want. Here is the first test showing a translucency "grass" shader:

This was rendered with a grass opacity map, just to see how it would look. Opacity maps gave the best result, especially with displacement. However, because every leaf on the kelp is completely randomized, an opacity map may not be the best way to go. I need to come up with a solution that gives accurate transparency from the actual geometry. Here is a screenshot without transparency:

So now I know what to focus on more when it comes to the shading. In the meantime, I will go ahead and focus on populating kelp for the other shots.

<<back to top>>

Class 7 October 6

I have completed the camera move for shot #2 and am working on lighting and optimal geometry placement. Here, I did extensive testing on caustics and light rays as seen underwater. This is really important for shot #2 because the camera is going closer to the surface.

First of all, for this shot, I need to do some work on the placement of geometry to hide certain artifacs. The second thing is the issue with the light rays from the caustic maps. One can clearly observe the jaggedness of the rays. This result is inherited from the aliasing of my projection map, and can be fixed by anti-aliasing the map.

Aliased Projection Map

 

Smoothed Projection Map

<<back to top>>

Class 8 October 8

Translucency....

I have worked out a shader in Houdini VOPs that triggers translucency on the geometry. It works by reversing Normalized surface normals. The reversed normals are piped into a lambertian lighting model and then into a ramp, which gives me control over surface color variation based on intensity of light hitting the current microPolygon. Adding another ramp to that model and plugging it into "apparent opacity" output gives me control over surface opacity based on light intensity. Here is the result.

The translucency shader appears to give a physically correct result when compared with my original reference. Multiple kelp bundled ontop of each other gives a darker color, as light has to go through multiple surfaces. However, some of my kelp asset make use of surface twisting, which quite abruptly switches the orientation of the surface normal. This causes what appears to be a flickering surface. This is something I will be looking out for in my further tests and trying to cover it up strategily at this point.

I chose to spend some time on shot #3 to perfect my shader and lighting workflow before moving back to shot #2. Lighting a underwater shot turns out to be quite interesting and very time consuming to get the illusion that I need. Using my reference as a guide, I began to break up the image into segments and stragegize how i'm going to shade and light each segment.

Original Reference
Original Reference Light Studies

When observing objects in the natural world, contrast can be best seen by squinting. A similar effect can be achieved through photoshop's lens blur filter. This helps me to block out the dark and light areas into geometric shapes. Using these distinct segments of light and darks, I can focus on laying out my lights in Houdini to approximately match the lighting in my reference.

In addition to this is the fact each kelp in the rendered frames above had the same translucency shader applied. For my new tests, I took a different approach by disabling the opacity effect on the kelp in the midground. For the kelp the furthest from the camera, I took the translucency shader off completely. The kelp positioned the closest to the camera has the full translucency shader applied. This creates a more accurate overall look. Here a still frame render of revised shot #3:

Shot #3 Render - Light Studies
Shot #3 Render

Comparing the blurred image with the one from the reference, I can see that I have achieved a very similar variation with a more careful placement of lights.

The more subtle variations and elements I can add to these shots, the more I can fool the eye. Making use of Houdini's Delayed Read Archive (procedural shader) helped alot in populating the background with a variety of kelp geometry. I will be making a few minor adjustments to this shot then I will post the full 400 frames.

<<back to top>>

Class 9 October 13

For Class 9 I presented my progress with this shot. The only difference with this one and the one above, was a reduction of the caustic specularity and some minor arrangements of the Kelp. I will aim to generate minor particles for the presentation on Class 10. Hopefully, after class 10, I will resume working on shot #2.

Class 10 October 15

Class 10 marked the midpoint of the quarter. I presented an almost completed shot #3. With some "Minutia" (some particles). I had been working on shot #2, but I put it on a hold to continue perfecting shot #3 and to work on my breakdowns. I will soon put up my progress for shot #2.

<<back to top>>

Class 11 October 20

For shot #3 I actually reworked the translucency shader to provide a little variation to my surfaces for the front kelp. I slowed down the particles and started the rendering process for the shot. I am actually working on my breakdowns and am hoping to finish those for the weekend. Here is a snapshot for completed shot #3. I am hoping to post an animation soon.

Shot #3 Render

<<back to top>>

Class 12 October 22

This should be my last day working on shot #3 for now. I've spent extra time trying to fine tune it and really getting all the assets organized. In terms of changes, I have added two extra lights for the front Kelp, which takes away a bit more black and accentuates the translucency element of the Kelp blades a bit more. I have also deleted some artifact-causing geomety from the front Kelp to get rid of a few of that more noticable flickering as the geometry flips. For this weekend I will be working entirely on the breakdowns.

<<back to top>>

Class 13 October 27

Today I presented corrected shot #3 for the second time along with the completed breakdowns. I got some great suggestions for the breakdowns, which I will look into later, but for now, I need to get back into shot #2 and try to see if I can get that done by the upcoming weekend. Here is Shot #3 + Breakdowns!

<<back to top>>

Class 14 October 29

Stay Tuned for an update on troublesome shot #2.

<<back to top>>

Class 15 November 2

I've fell way behind on the progress updates, but I've been working hard to get shot 2 at a good level and also to crank out shot 1 in a limited time. Shot 1 is just basically an intro shot consisting of glowing particles. It will be the last shot I work on for studio 1, since it's the easiest. From here, I'll be working on shot 1 and 2. Stay tuned for the final version as Studio 1 comes to a close.

<<back to top>>

Class 20 November 18

After a few weeks of work, the first phase of Kindred Dance is finaly done. All 3 shots were completely done using Sidefx Houdini 9.5 and rendered with Mantra. Turn up the sound and enjoy!


<<back to top>>