@@ -25,23 +25,21 @@ kernel void drawMetaballs(texture2d<float, access::write> outTexture[[texture(0)
27 for (i = 1, x = 0; i < metaballArraySize; i += 2, x += 1) {
27 for (i = 1, x = 0; i < metaballArraySize; i += 2, x += 1) {
28+ float value1 = 2048 / (metaballDistances[x] + 1);
29+ float2 direction1 = metaballDirections[x];
28 for (j = i + 2, y = x + 1; j < metaballArraySize; j += 2, y += 1) {
31 for (j = i + 2, y = x + 1; j < metaballArraySize; j += 2, y += 1) {
29− float value1 = 2048 / (metaballDistances[x] + 1);
32+
30 float value2 = 2048 / (metaballDistances[y] + 1);
33 float value2 = 2048 / (metaballDistances[y] + 1);
34+ float2 direction2 = metaballDirections[y];
32 float v = value1 + value2;
36 float v = value1 + value2;
34 float weightedValue = 0.5 * v;
37 float weightedValue = 0.5 * v;
36 char edgeIndex = y * numberOfMetaballs + x;
39 char edgeIndex = y * numberOfMetaballs + x;
37 float edgeWeight = edgesBuffer[edgeIndex];
40 float edgeWeight = edgesBuffer[edgeIndex];
38− float2 direction1 = metaballDirections[x];
39− float2 direction2 = metaballDirections[y];
41 float cosine = dot(direction1, direction2);
41 float cosine = dot(direction1, direction2);
43 float link = pow(((1 - cosine) * 0.5), 100);
42 float link = pow(((1 - cosine) * 0.5), 100);
45 float weightedLink = 0.6 * link * edgeWeight;
43 float weightedLink = 0.6 * link * edgeWeight;
47 sum += step(0.5, weightedValue + weightedLink);
45 sum += step(0.5, weightedValue + weightedLink);