Experiment with cancer cells

This commit is contained in:
Andras Schmelczer 2023-04-29 22:24:15 +01:00
parent 1578c8796a
commit 42d87fc2a3
No known key found for this signature in database
GPG key ID: FC8F2C3D3D1A718C
6 changed files with 87 additions and 31 deletions

View file

@ -3,8 +3,10 @@ struct Settings {
deltaTime: f32,
time: f32,
diffusionRate: f32,
decayRate: f32,
diffusionRateTrails: f32,
decayRateTrails: f32,
diffusionRateBrush: f32,
decayRateBrush: f32,
};
@group(0) @binding(0) var<uniform> settings: Settings;
@ -22,11 +24,17 @@ fn fragment(@location(0) uv: vec2<f32>) -> @location(0) vec4<f32> {
+ textureSample(trailMap, Sampler, uv + vec2<f32>(1, 0) / settings.size)
) / 4;
let mixed = mix(
current,
neighbours,
settings.diffusionRate
) * (1.0 - settings.decayRate);
let mixedTrails = mix(
current.rgb,
neighbours.rgb,
settings.diffusionRateTrails
) * (1.0 - settings.decayRateTrails);
return clamp(mixed, vec4(0), vec4(1));
let mixedBrush = mix(
current.a,
neighbours.a,
settings.diffusionRateBrush
) * (1.0 - settings.decayRateBrush);
return clamp(vec4(mixedTrails, mixedBrush), vec4(0), vec4(1));
}

View file

@ -5,7 +5,7 @@ import shader from './diffuse.wgsl';
import { DiffusionSettings } from './diffusion-settings';
export class DiffusionPipeline {
private static readonly UNIFORM_COUNT = 16;
private static readonly UNIFORM_COUNT = 18;
private readonly pipeline: GPURenderPipeline;
private readonly uniforms: GPUBuffer;
@ -45,8 +45,10 @@ export class DiffusionPipeline {
canvasSize,
deltaTime,
time,
diffusionRate,
decayRate,
diffusionRateTrails,
decayRateTrails,
diffusionRateBrush,
decayRateBrush,
}: CommonParameters & DiffusionSettings) {
this.device.queue.writeBuffer(
this.uniforms,
@ -56,8 +58,10 @@ export class DiffusionPipeline {
canvasSize[1],
deltaTime,
time,
diffusionRate,
decayRate,
diffusionRateTrails,
decayRateTrails,
diffusionRateBrush,
decayRateBrush,
])
);
}

View file

@ -1,4 +1,6 @@
export interface DiffusionSettings {
diffusionRate: number;
decayRate: number;
diffusionRateTrails: number;
decayRateTrails: number;
diffusionRateBrush: number;
decayRateBrush: number;
}