Instructions
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
- Raymarched debug visualization