An interactive computer-vision based installation that explores forces and attraction.
produced by: Danny Keig
Fixative Forces explores forces of pull and attraction through interactions between virtual shapes and a body translated onto the canvas. In four different modes, the program creates varying behaviours for these shapes as they are pulled into certain points on the body’s outline, or are impacted by new forces created by optical flow data.
Concept and background research
I was initially inspired to a create a work exploring forces through an interest in magnetic fields, and the patterns and behaviours associated with iron fillings near magnets. I had planned to explore angles generated by magnetic fields, and using computer vision as an input, manipulate these with movement of the body. I wanted to create a magnetic relationship between the body, as displayed on screen, and a collection of shapes or particles. While my project has strayed away from magnetic fields in a scientific sense, I remained focused on creating various interactive states between the body as captured through computer vision, and shapes which cling to it. I have developed a set of four different states of attraction, all of which have specific properties and directions on how these shapes should interact with the user.
The project consists of 4 states of behaviour. All states use the Kinect as an input, utilising the greyscale depth image to isolate the body. Using the contour finder, the program scans for large ‘blobs’ on screen and stores these vertices. It then transfers all of these points into a vector of polylines, after which the largest ‘blob’ is identified and used for all further calculations. A particle system consisting of jagged semi random shapes find points on this polyline to interact with. The polyline is also converted into an ofPath structure, which allows for the blob to be drawn on screen as the body with filled in colour information.
In the first state, each shape is assigned a point on the body, calculated as the length of the perimeter divided by the number of shapes. The shapes are strongly attracted to these points and there is a rigidity in their positioning. They will attempt to rearrange themselves quickly after sudden movements by the user. The second mode of play sends all of the shapes to the centroid of the body blob. They try to cling to this position but are also impacted by gravitational forces which change over time. In the third mode, the leading shape in the system follows a moving point along the body outline using the getPointAtPercent() function. All other shapes accelerate towards the shape that is in front of them, the result being a spiralling trail. In the last state, they each accelerate towards their given coordinate but sometimes they overshoot. In this state they are highly sensitive to optical flow information, which displaces them in the direction of movement (making use of a smoothing function to set them off slowly).
In line with my original inspiration regarding iron filings, the piece could definitely benefit from the addition of a flowfield, in which the angles are calculated based on the position of the user’s outline. It could also be interesting to move into the 3D space using the Kinect point cloud image and make these angles very pronounced. Along with the addition of trails for the shapes, this could create some rich textures displaying the movement and the forces at play. Adding more modes of play, especially those containing forces which repel the shapes away from the body would be entertaining and could result in surprising experiences for the user. I would like to develop the piece further so that it could be seen as an artistic tool as well as an interactive playable experience, whereby the user manipulates the forces and shapes using their body to leave long-lasting marks on the canvas.
The original idea called for graphics which could recreate magnetic fields. While the end product is playful and loosely based on the idea of attracting forces, I would have liked to explore magnetic fields more in the piece, creating a deeper sense of interaction between forces that attract and repel, as well as implementing some real world physics. I did not reach one of my goals, which involved tracking both hands of the user and placing a force that attracts on one and a force that repels on the other. After attempting to add these features as well as a calculating angles in a flowfield, I cut my losses and decided to create a more playful animated experience. I am pleased with the work as it stands, but know that there is plenty of room for future development.
Programming references and help:
Optical Flow example from WCC class
Transfering ofPolyline to ofPath = https://forum.openframeworks.cc/t/fill-polyline/10800
Particle System help from the Kadenze course Creative Programming for Audiovisual Art (Memo Akten guest lecture)
Parameter Smoother class - original code from https://www.youtube.com/watch?v=BdJRSqgEqPQ, adapted to accept ofPoint
Daniel Shiffman's Nature of Code - Forces chapter - http://natureofcode.com/book/chapter-2-forces/