Clean up
This commit is contained in:
parent
ea0304356f
commit
7c70f15e49
65 changed files with 1127 additions and 1911 deletions
|
|
@ -3,9 +3,9 @@ struct Settings {
|
|||
decayRateTrails: f32,
|
||||
inverseDiffusionRateBrush: f32,
|
||||
decayRateBrush: f32,
|
||||
diffusionNeighborDivisor: f32,
|
||||
brushDecayAlphaOffset: f32,
|
||||
padding0: f32,
|
||||
diffusionNeighborScale: f32,
|
||||
brushDecayAlphaMultiplier: f32,
|
||||
brushDecayAlphaSubtract: f32,
|
||||
padding1: f32,
|
||||
};
|
||||
|
||||
|
|
@ -60,8 +60,26 @@ fn main(
|
|||
let centerTileIndex = centerTilePosition.y * TILE_SIZE_X + centerTilePosition.x;
|
||||
var current = tile[centerTileIndex];
|
||||
let random = random_from_pixel(pixel);
|
||||
let trailWeight = diffusion_weight(random, settings.inverseDiffusionRateTrails);
|
||||
let brushWeight = diffusion_weight(random, settings.inverseDiffusionRateBrush);
|
||||
let r2 = random * random;
|
||||
let r4 = r2 * r2;
|
||||
let r8 = r4 * r4;
|
||||
let r16 = r8 * r8;
|
||||
let trailWeight = diffusion_weight(
|
||||
random,
|
||||
r2,
|
||||
r4,
|
||||
r8,
|
||||
r16,
|
||||
settings.inverseDiffusionRateTrails
|
||||
);
|
||||
let brushWeight = diffusion_weight(
|
||||
random,
|
||||
r2,
|
||||
r4,
|
||||
r8,
|
||||
r16,
|
||||
settings.inverseDiffusionRateBrush
|
||||
);
|
||||
|
||||
current += (
|
||||
propagate(centerTileIndex, -1, -1, current, trailWeight, brushWeight)
|
||||
|
|
@ -73,11 +91,11 @@ fn main(
|
|||
+ propagate(centerTileIndex, 0, -1, current, trailWeight, brushWeight)
|
||||
+ propagate(centerTileIndex, 1, 0, current, trailWeight, brushWeight)
|
||||
+ propagate(centerTileIndex, 0, 1, current, trailWeight, brushWeight)
|
||||
) / max(1.0, settings.diffusionNeighborDivisor);
|
||||
) * settings.diffusionNeighborScale;
|
||||
|
||||
let decayed = clamp(vec4(
|
||||
current.rgb * settings.decayRateTrails,
|
||||
max(0, current.a + (current.a - settings.brushDecayAlphaOffset) * settings.decayRateBrush)
|
||||
max(0, current.a * settings.brushDecayAlphaMultiplier - settings.brushDecayAlphaSubtract)
|
||||
), vec4(0), vec4(1));
|
||||
|
||||
textureStore(trailMapOut, pixel, decayed);
|
||||
|
|
@ -110,9 +128,14 @@ fn random_from_pixel(pixel: vec2<i32>) -> f32 {
|
|||
return f32(hash) * 2.3283064365386963e-10;
|
||||
}
|
||||
|
||||
fn diffusion_weight(random: f32, inverseRate: f32) -> f32 {
|
||||
let r = clamp(random, 0.0, 1.0);
|
||||
|
||||
fn diffusion_weight(
|
||||
r: f32,
|
||||
r2: f32,
|
||||
r4: f32,
|
||||
r8: f32,
|
||||
r16: f32,
|
||||
inverseRate: f32
|
||||
) -> f32 {
|
||||
if inverseRate < 1.0 {
|
||||
let rootApproximation = r / max(0.5 + r * 0.5, 0.0001);
|
||||
return mix(
|
||||
|
|
@ -122,22 +145,18 @@ fn diffusion_weight(random: f32, inverseRate: f32) -> f32 {
|
|||
);
|
||||
}
|
||||
|
||||
let r2 = r * r;
|
||||
if inverseRate < 2.0 {
|
||||
return mix(r, r2, inverseRate - 1.0);
|
||||
}
|
||||
|
||||
let r4 = r2 * r2;
|
||||
if inverseRate < 4.0 {
|
||||
return mix(r2, r4, (inverseRate - 2.0) * 0.5);
|
||||
}
|
||||
|
||||
let r8 = r4 * r4;
|
||||
if inverseRate < 8.0 {
|
||||
return mix(r4, r8, (inverseRate - 4.0) * 0.25);
|
||||
}
|
||||
|
||||
let r16 = r8 * r8;
|
||||
return mix(r8, r16, clamp((inverseRate - 8.0) * 0.125, 0.0, 1.0))
|
||||
* min(1.0, 16.0 / inverseRate);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue