Skip to content

Commit fbf2e2c

Browse files
committed
premultiply in update loop
1 parent 12abf37 commit fbf2e2c

File tree

1 file changed

+8
-11
lines changed

1 file changed

+8
-11
lines changed

src/pages/particle-life-gpu/update.wgsl

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,10 @@ fn update(
5757
let half_width = config.width / 2.0;
5858
let half_height = config.height / 2.0;
5959

60-
// var total_count = 0u;
60+
let repulsion_range = config.repulsionRange;
61+
let pre_mult_repulsion_strength = config.repulsionStrength * dt / repulsion_range;
62+
let pre_mult_attraction_strength = config.attractionStrength * dt;
63+
let pre_mult_inv_attraction_range = 1 / config.attractionRange;
6164

6265
for (var bin_x = min_bin_x; bin_x <= max_bin_x; bin_x++) {
6366
let wrapped_bin_x = (bin_x + wd) % wd;
@@ -92,24 +95,18 @@ fn update(
9295

9396
let dist = length(offset);
9497

95-
if (dist < config.repulsionRange) {
98+
if (dist < repulsion_range) {
9699
// Repulsion
97-
let strength = (config.repulsionRange - dist) / config.repulsionRange * config.repulsionStrength * dt;
100+
let strength = (repulsion_range - dist) * pre_mult_repulsion_strength;
98101
velocity -= normalize(offset) * strength;
99102
} else if (dist < range) {
100103
// Attraction
101104
let other_color = particleColors[other_index];
102105
let interaction_index = color * COLOR_COUNT + other_color;
103106
let interaction_strength = interactions[interaction_index];
104-
// if (interaction_strength > 0.0) {
105-
// total_count += 1u;
106-
// }
107-
let normalized_distance = (config.attractionRange - (dist - config.repulsionRange)) / config.attractionRange;
107+
let normalized_distance = 1 - (dist - repulsion_range) * pre_mult_inv_attraction_range;
108108
let symmetric_distance = 1.0 - abs(normalized_distance * 2.0 - 1.0);
109-
let strength = symmetric_distance * interaction_strength * config.attractionStrength * dt;
110-
// if (total_count > 200u) {
111-
// strength = strength * (200.0 / f32(total_count));
112-
// }
109+
let strength = symmetric_distance * interaction_strength * pre_mult_attraction_strength;
113110
velocity += normalize(offset) * strength;
114111
}
115112
}

0 commit comments

Comments
 (0)