© 2016-2019 Danny Barnhart | All Rights Reserved.

Wave Deformer

Last Update: 11•15•2017

Tool Proposal:
As a member of the crew for the student film
Liminal, directed by Meredith O’Malley, I am going to create a tool for use in the final scene of the film. The final scene involves a very large-scale tidal wave, and we do not have the time or resources to run a simulation for the entire wave. Therefore, I will be making a wave deformer tool that replicates the look of a tidal wave, without costly simulation and rendering. Small amounts of particles may still be used for foam or small details to sell the effect. A custom shader may also be required to achieve a production-grade look.


I. Wave Position: Changes the position of the point that is the center of the effect
II. Wave Orientation: Changes the orientation of the point that is the center of the effect
III. Wave Scale: Changes the scale of the effect in along the X, Y, and Z axes

IV. X Bias: Changes the dip before the raised portion of the wave

V. Y Bias: Changes the thickness of the raised portion of the wave

VI. Z Bias: Changes the width of the wave within the grid
VII. Wave Curl: Changes the degree to which the wave is curled on itself
VIII. Overall Curve: Changes the amount of the grid being pulled in by the wave curve


The deformed geometry is achieved by establishing a manipulator at the origin that will act as the starting center point of the deformation. The tool finds the difference between the point location of the grid, and the location of the effect’s origin. The vector location is converted to floats to be manipulated, and is multiplied by a user-defined “z-bias” for a range of effect on the deformation. Those floats are then converted back to vectors, and the length is found. The length is divided by the user-defined “range” to set the range of the effect. The user input “angle” is converted to radians to be altered by the “range”, then converted back to degrees. The geometry is rotated around a matrix that is partially made up of the user input, this is done by multiplying the difference of the point locations and the effect origin location with the rotation matrix. The alterations are applied to the geometry point positions at the end.

Due to the transformation of the grid by the tool, the standard ocean displacement shader was stretched and could not be used for foam or rendering. The majority of research for this project went into developing a work-around for detecting the cusps of the waves that had been deformed. I tried a variety of methods including getting velocity from a trail node, running a flip sim over the ocean grid, using the deformed geo as a suction force, and converting the ocean grid to VDBs to drive the whitewater. I ended up adding a measure node after my deformer tool, and used the curvature parameter to isolate the cusps. I used an attribute VOP with a fit to control the areas isolated, and assigned those isolations to color. I then scattered points based on the isolated color areas. Those points were then used to create the whitewater.