Add differentiated rendering
This commit is contained in:
parent
15836f2876
commit
1578c8796a
7 changed files with 59 additions and 23 deletions
|
|
@ -53,11 +53,7 @@ fn main(@builtin(global_invocation_id) global_id: vec3<u32>) {
|
|||
agent.angle += 3.14159265359 + random - 0.5;
|
||||
}
|
||||
|
||||
textureStore(
|
||||
TrailMapOut,
|
||||
vec2<i32>(newPos * settings.size),
|
||||
vec4(1)
|
||||
);
|
||||
textureStore(TrailMapOut, vec2<i32>(newPos * settings.size), vec4(1, 0, 0, 0));
|
||||
|
||||
agent.position = newPos;
|
||||
agents[id] = agent;
|
||||
|
|
@ -67,7 +63,7 @@ fn sense(agent: Agent, sensorAngleOffset: f32) -> f32 {
|
|||
let sensorAngle: f32 = agent.angle + sensorAngleOffset;
|
||||
let sensorDir: vec2<f32> = vec2(cos(sensorAngle), sin(sensorAngle)) / normalize(settings.size);
|
||||
let sensorPos: vec2<f32> = agent.position + sensorDir * settings.sensorOffsetDst;
|
||||
return textureLoad(TrailMapIn, vec2<i32>(sensorPos * settings.size), 0).x;
|
||||
return length(textureLoad(TrailMapIn, vec2<i32>(sensorPos * settings.size), 0));
|
||||
}
|
||||
|
||||
fn random(state0: u32) -> f32 {
|
||||
|
|
|
|||
|
|
@ -75,11 +75,15 @@ export class BrushPipeline {
|
|||
format: 'rgba16float',
|
||||
blend: {
|
||||
color: {
|
||||
operation: 'add',
|
||||
srcFactor: 'zero',
|
||||
dstFactor: 'one',
|
||||
},
|
||||
alpha: {
|
||||
operation: 'max',
|
||||
srcFactor: 'one',
|
||||
dstFactor: 'one',
|
||||
},
|
||||
alpha: {},
|
||||
},
|
||||
},
|
||||
],
|
||||
|
|
|
|||
|
|
@ -45,5 +45,6 @@ fn fragment(
|
|||
discard;
|
||||
}
|
||||
|
||||
return vec4(clamp((settings.brushWidth - distance) / settings.brushBlurWidth, 0, 1));
|
||||
let strength = clamp((settings.brushWidth - distance) / settings.brushBlurWidth, 0, 1);
|
||||
return vec4(0, 0, 0, strength);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import { RenderSettings } from './render-settings';
|
|||
import shader from './render.wgsl';
|
||||
|
||||
export class RenderPipeline {
|
||||
private static readonly UNIFORM_COUNT = 4;
|
||||
private static readonly UNIFORM_COUNT = 16;
|
||||
|
||||
private readonly pipeline: GPURenderPipeline;
|
||||
private readonly uniforms: GPUBuffer;
|
||||
|
|
@ -48,11 +48,24 @@ export class RenderPipeline {
|
|||
canvasSize,
|
||||
deltaTime,
|
||||
time,
|
||||
brushColor,
|
||||
speciesColorA,
|
||||
speciesColorB,
|
||||
}: CommonParameters & RenderSettings) {
|
||||
this.device.queue.writeBuffer(
|
||||
this.uniforms,
|
||||
0,
|
||||
new Float32Array([...canvasSize, deltaTime, time])
|
||||
new Float32Array([
|
||||
...canvasSize,
|
||||
deltaTime,
|
||||
time,
|
||||
...brushColor,
|
||||
0, //padding
|
||||
...speciesColorA,
|
||||
0, //padding
|
||||
...speciesColorB,
|
||||
0, //padding
|
||||
])
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +1,7 @@
|
|||
export interface RenderSettings {}
|
||||
import { vec3 } from 'gl-matrix';
|
||||
|
||||
export interface RenderSettings {
|
||||
brushColor: vec3;
|
||||
speciesColorA: vec3;
|
||||
speciesColorB: vec3;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,9 @@ struct Settings {
|
|||
size: vec2<f32>,
|
||||
deltaTime: f32,
|
||||
time: f32,
|
||||
brushColor: vec3<f32>,
|
||||
speciesColorA: vec3<f32>,
|
||||
speciesColorB: vec3<f32>,
|
||||
};
|
||||
|
||||
@group(0) @binding(0) var<uniform> settings: Settings;
|
||||
|
|
@ -10,6 +13,15 @@ struct Settings {
|
|||
|
||||
@fragment
|
||||
fn fragment(@location(0) uv: vec2<f32>) -> @location(0) vec4<f32> {
|
||||
return vec4(textureSample(TargetTexture, mySampler, uv).rgb, 1.0);
|
||||
return vec4(0, settings.deltaTime * 0.0, 0.0, 1.0);
|
||||
let traces = textureSample(TargetTexture, mySampler, uv);
|
||||
|
||||
let speciesAStrength = traces.r;
|
||||
let speciesBStrength = traces.g;
|
||||
let brushStrength = traces.a;
|
||||
return vec4(
|
||||
settings.speciesColorA * speciesAStrength +
|
||||
settings.speciesColorB * speciesBStrength +
|
||||
settings.brushColor * brushStrength,
|
||||
1
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,15 @@ import { DiffusionSettings } from './pipelines/diffusion/diffusion-settings';
|
|||
import { RenderSettings } from './pipelines/render/render-settings';
|
||||
import { rgb255 } from './utils/colors/rgb255';
|
||||
|
||||
const palette = {
|
||||
blue: rgb255(0, 110, 202),
|
||||
red: rgb255(232, 141, 122),
|
||||
green: rgb255(90, 188, 94),
|
||||
purple: rgb255(161, 90, 188),
|
||||
yellow: rgb255(255, 204, 0),
|
||||
beige: rgb255(229, 204, 175),
|
||||
};
|
||||
|
||||
export const settings: GameLoopSettings &
|
||||
AgentSettings &
|
||||
BrushSettings &
|
||||
|
|
@ -23,15 +32,10 @@ export const settings: GameLoopSettings &
|
|||
sensorAngleDegrees: 30,
|
||||
sensorOffsetDst: 0.025,
|
||||
|
||||
decayRate: 0.01,
|
||||
diffusionRate: 0.8,
|
||||
};
|
||||
decayRate: 0.005,
|
||||
diffusionRate: 0.9,
|
||||
|
||||
const paletteMap = {
|
||||
blue: rgb255(0, 110, 202),
|
||||
red: rgb255(232, 141, 122),
|
||||
green: rgb255(90, 188, 94),
|
||||
purple: rgb255(161, 90, 188),
|
||||
yellow: rgb255(255, 204, 0),
|
||||
beige: rgb255(229, 204, 175),
|
||||
brushColor: palette.beige,
|
||||
speciesColorA: palette.yellow,
|
||||
speciesColorB: palette.green,
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue