Walking Table

Creating the table:

The table character is created from a 10 sided polygonal circle. These 10 points are sent to a ForEach SOP where they’re connected by a line to the closest point of the geometry connected to the 2nd input of the ForEach SOP. In this case, the 2nd input is a set of points scattered on the floor. The lines being created in the ForEach SOP act as legs – when the table moves around they snap to other points on the ground. This gives the appearance that the table is walking. The legs are then given thickness using the Poly Wire SOP. The thickness of the legs is adjusted procedurally according to the line’s length (the length of the line is calculated inside the ForEach SOP and stored in a point attribute) so that a shorter line is thicker than a longer line – this is done to simulate a squash and stretch effect. Using an Attribute SOP, the line length attribute (“l”) is deleted, this is done to avoid an attribute mismatch when the legs are merged with the table top.
In a separate stream the table circle outline is scaled up so that the legs aren’t connecting directly to it’s edge. The table outline is then extruded, to give it thickness (up to this point the table top was a 2D outline consisting of only 10 points).
At the end of the network the table top is merged with the table legs to form the final table character.

Pictured below is the ForEach network which creates the table legs:

Within this network, each point of the first input (the table top outline) is evaluated. During each iteration a single point is considered from the first input using the “keep_source_point” Delete SOP with a stamp expression. The “keep_closest_point” Delete SOP uses a nearpoint expression to delete all the points of the 2nd input geometry except the one closest to the point from the 1st input geometry which is currently being evaluated. This leaves two points remaining (one in each Delete SOP) which are the endpoints of a single leg. Using an Add SOP a line is created by referencing the position of the point in both of the Delete SOPs. Finally the length of the current line or leg is calculated through a distance expression and stored as a point attribute using the Attribute Create SOP.

Recording the table motion:

Almost all the animation in this project is generated from mouse movement, the position of the camera is the only thing that isn’t. Doing this allowed multiple takes to be rapidly recorded and evaluated, it also provided easy to use controls that anyone could operate or perform while receiving real-time results.

The CHOP network used for recording and processing the mouse movement is pictured below:

The recorded mouse data, before any post-processing or filtering is applied:

The table position channels:

The rotation of the table (this causes the table to tilt in the direction of movement):

The camera look-at position:

Below, both the table position (green) and camera look-at (yellow) curves are displayed. The additional filtering and amount of lag applied to the camera look-at curve create the feel of a human operated camera, this gives the camera a delayed reaction to the movement of the table character.

Download: WalkingTable_v015.hipnc