GPU-based simple verlet integration simulator for Unity.
[SerializeField] ComputeShader compute; // GPUVerletSimulator.compute
GPUVerletSimulator simulator;
void Start() {
const float edgeLength = 0.5f;
// define nodes and edges.
var nodes = new GPUNode[nodesCount];
for(int i = 0; i < nodesCount; i++)
{
var n = nodes[i];
var p = new Vector3(Random.value - 0.5f, i * edgeLength, Random.value - 0.5f);
n.position = n.prev = p;
n.decay = 1f;
nodes[i] = n;
}
var edgesCount = nodesCount - 1;
var edges = new GPUEdge[edgesCount];
for(int i = 0; i < edgesCount; i++)
{
var e = edges[i];
e.a = i;
e.b = i + 1;
e.length = edgeLength;
edges[i] = e;
}
// create simulator instance.
simulator = new GPUVerletSimulator(nodes, edges);
}
void Update() {
const int iterations = 8;
// simulate
simulator.Step(compute);
for(int i = 0; i < iterations; i++)
{
simulator.Solve(compute);
}
}
- Advanced Character Physics - http://web.archive.org/web/20080410171619/http://www.teknikus.dk/tj/gdc2001.htm
tested on Unity 2018.2.4f, windows10 (GTX 1060).