Press ESC to exit any scene. Use WASD to move freecam, and hold RMB to look around. All windows with a blue title bar are draggable.
Features
High performance Verlet rope physics
Runs entirely on the GPU
Simulate hundreds of ropes at once
Fresh AABBs for each rope are available on the CPU every frame
Updates to specific rope points may be sent to GPU every frame
Collision resolution
Supports SphereCollider, CapsuleCollider, and BoxCollider with no extra effort
Supports mesh collisions by baking a mesh distance field
In scenes where this occurs, you may notice hitching
Cloth Simulation
Also runs on GPU, sharing much the same code as the rope
Every collider type that rope supports is also supported by cloth
Each point is constrained with its eight (four cardinal, four shear) neighbors
Supports 32x32 (max thread group size) resolution
Higher resolutions produce artifacts, for now
Updates a vertex and index buffer every frame, keeping the cloth mesh up to date
Test Scenes
Pachinko
Move your mouse to wrap the rope around pins.
Cloth
Freely modify the position and simulation parameters of cloth.
Watch cloth collide with various shapes.
Performance Benchmark
No actual benchmark yet - just spawn a bunch of GPU simulated ropes.
To see collisions, click the < and > arrows to change from "None" to "Sphere" or "Terry"
Mesh Distance Fields
This is very buggy and slow right now - I need to do a few fixes and some cleanup.
Generate mesh distance fields from a curated selection of models, and see how they collide with ropes.
Click on a voxel to open a window that will allow you to view each slice and texel of its volume texture.
Each octree leaf contains a volume texture that includes a gradient to the nearest triangle in the RGB channels, and a signed distance (after conversion) in the A channel.
Known Issues
There is a crash to desktop bug that seems somewhat random.
It's difficult to reproduce, and might not actually be happening anymore.
Collision resolution performance vs. meshes is poor
Too many unlikely colliders are being tested.
Mesh distance field build issues:
Performance tanks with high vertex counts
Build jobs are blocking the main thread more than is necessary
There are still large seams and cavities in many models
Post-Contest Plans
Library
Easy to use VerletRope and VerletCloth components
Allow different segments of rope to connect with each other
Run rope simulation in the editor window
Bake initial rope positions
Rope Physics
Rope points may have mass
Allow some points to be flagged as accessible on CPU
Mesh Distance Fields
Allow volume textures to represent an arbitrary size in worldspace.
Currently each volume texture is just 16^3 world units.
Optimize in-game bake process
The current solution scales very poorly with triangle count.
Cache large mesh distance fields to disk
Allow baking in editor, shipping prebaked mesh distance fields