Multi Ropes: 3D ropes interact with the floor and the obstacle in a very natural way
Cloth Simulation: Other than basic implementation and tuning parameters, I also implemented an effective contact detection method using the class activity code as basis, and added a friction term so that the interaction between the object and the cloth is more natural. Furthermore, I implemented user controlled wind to the simulation. The cloth behaves naturally in the wind.
Air Drag for Cloth: I implemented the air drag term using a quad surface defined by the two cross vector of 4 adjacent nodes. The result is good.
3D Implementation & Rendering: Both my ropes implementation and cloth implementation are in 3D, with the camera class.
User Interaction: User can control the obstacle ball's position, reset system, and generate wind
Realistic Speed: I don't have a flag to check what real speed compares to my simulation. Visually it seems to be close enough.
Ripping/Tearing: I was able to render a torn flag.
Continuum Water Simulation: I implemented a 1D shallow water simulation based on the lecture. Different boundary implementation results in different simulation effects. I make it so that user can change boundary implementation and reset the system to check results.
Hailin Archer deak0007@umn.edu
https://github.com/CyberHolmes/CSCI5611/tree/master/Project2
'w': positiveMovement.z
's': negativeMovement.z
'a': negativeMovement.x
'd': positiveMovement.x
'q': positiveMovement.y
'e': negativeMovement.y
LEFT: negativeTurn.x
RIGHT: positiveTurn.x
UP: positiveTurn.y
DOWN: negativeTurn.y
j : x axis negative move (left)
l : x axis positive move (right)
i : y axis negative move (up)
k : y axis negative move (down)
u : z axis negative move (in)
o : z axis negative move (out)
b: continuous pressing turns on the wind, release the key to turn off the wind
r key: press once
key '1': periodic
key '2': free
key '3': reflective
Extended the rope implementation shown in class to support multiple independent ropes which all hang and swing freely. The ropes interact with a floor by falling naturally on the the floor. The ropes also interacts with a large moving ball which user controls. Ropes have a smooth, natural looking swinging behavior.
User can use the following keys to control the obstacle ball:
j : x axis negative move (left)
l : x axis positive move (right)
i : y axis negative move (up)
k : y axis negative move (down)
u : z axis negative move (in)
o : z axis negative move (out)
User can turn on the wind by continuously pressing 'b' key.
User can reset the system by pressing 'r' key.
https://github.com/CyberHolmes/CSCI5611/tree/master/Project2/MultiRope_v0
0:01: System resets from initial states. Each rope has a random initial position, resulting in a random swinging pattern
0:02: Rope ends drops to the floor, interacting with the floor naturally
0:08~0:24: User moves the obstacle ball around, interacting with the ropes
Implemented a cloth simulation in 3D. Rendered the cloth as an American Flag. The cloth supports one-way interaction with a large ball which can be moved around in the 3D space by users. The cloth falls naturally on the ball and moves naturally with the ball. I also implemented wind which user can turn on and off. User can view the scene from different angle by controlling the camera (implemented with the camera class provided in class)
https://github.com/CyberHolmes/CSCI5611/tree/master/Project2/Cloth3D_Checkin
00:01: System reset by user to initial state. Cloth start dropping from initial location
00:07~00:18: Obstacle ball moves through the cloth
00:31~0045: Moving camera to show a side profile of the cloth
00:50: System reset: cloth returns to initial position
00:53: Cloth falls onto the ball
01:03~01:22: Wind blows through the cloth
01:23: Wind stops, flag drops
I implemented the air drag term discussed in the class video. I used a quad surface formed by four nodes to calculate the drag force, then divided the force by 4 and applied this force to all four nodes.
0:02: Cloth resets to initial position and starts falling
Cloth falls more smoothly and naturally
0:04: Cloth resets to initial position and starts falling
Cloth is a bit too springy
I implemented detection using lines formed between nodes, on top of nodes contact detection.
0:02: Cloth resets to initial position and starts falling
0:04: Obstacle moves forward
Much smoother contact surface. Object does not'show' through the cloth
0:02: Cloth resets to initial position and starts falling
0:04: Obstacle moves forward
Rougher contact surface. Object sometimes can 'show' through the cloth.
I added a friction term for the contact handling, so that cloth does not slip off the object unnaturally.
Cloth drapes more naturally and does not slip off easily.
Cloth can sometimes move back and forth on the ball. The ball appears very 'slippery'.
I implemented a torn cloth. It interacts with an obstacle as a torn cloth would.
https://github.com/CyberHolmes/CSCI5611/tree/master/Project2/ClothWithTear3D_Checkin
In this 1D shallow water simulation, the water starts with a inverse log profile where the level is high on the left. User can switch boundary condition by pressing key '1', '2' and '3'. User can also reset the water level to the initial state by pressing 'r' key.
Code
https://github.com/CyberHolmes/CSCI5611/tree/master/Project2/MySWE_1D_v0
0:02: System starts from initial water level. Boundary formula at this time is free
0:14: System starts from initial water level. Boundary formula at this time is set to reflective by user
0:28: System starts from initial water level. Boundary formula at this time is set to periodic by user
The hitInfo class from CSCI5611 class live activites session
The 3D Camera class provided in class
java.util, javafx.util
processing.org: processing programming reference, general language tutorial
https://pixabay.com/: The American Flag image
Rendering a cloth tear turns out to be very difficult. I was only able to render a straight cut. I am not sure how to render a natural looking tear at this point.
Making a torn cloth look natural is difficult. All the parameters that worked when the cloth is whole does not work the same when the cloth is torn. Interaction with the obstacle also changed at the torn part.
Making contact detection work right took me a long time.
I attempted to implement a separate set of spring and damping between every other row/column nodes in cloth simulation. It made the simulation worse.
The water simulation can accumulate error with 'free' and 'reflective' boundary conditions, resulting in total volume change. I needed to implement a volume normalization routine so that the total volume does not change.
Rendering a nice backdrop is very costly, resulting in low frameRate. I couldn't use the Mount Rushmore background because the framerate would drop from 50+ to below 30. This may not be an issue if I have a more powerful computer. My system is an HP envy laptop.