Rename species to generation

This commit is contained in:
Andras Schmelczer 2023-05-21 13:53:06 +01:00
parent 3414f38c3a
commit f3f2547724
No known key found for this signature in database
GPG key ID: FC8F2C3D3D1A718C
10 changed files with 31 additions and 31 deletions

View file

@ -76,8 +76,8 @@ const main = async () => {
const updateCounters = () => {
elements.counters.innerHTML = `FPS: ${deltaTimeCalculator.fps.toFixed(2)}
Gen1: ${game?.aliveAgentCounts.currentGenerationCount ?? 0}
Gen2: ${game?.aliveAgentCounts.nextGenerationCount ?? 0}`;
current gen: ${game?.aliveAgentCounts.currentGenerationCount ?? 0}
next gen: ${game?.aliveAgentCounts.nextGenerationCount ?? 0}`;
window.requestAnimationFrame(updateCounters);
};
updateCounters();

View file

@ -13,7 +13,7 @@ fn main(@builtin(global_invocation_id) global_id: vec3<u32>) {
return;
}
if agents[id].species % 2 == 0 {
if agents[id].generation % 2 == 0 {
atomicAdd(&counters.evenGenerationAlive, 1);
} else {
atomicAdd(&counters.oddGenerationAlive, 1);

View file

@ -15,6 +15,6 @@ fn main(@builtin(global_invocation_id) global_id: vec3<u32>) {
}
if length(settings.center - agents[id].position) < settings.radius {
agents[id].species = settings.nextGenerationId;
agents[id].generation = settings.nextGenerationId;
}
}

View file

@ -1,7 +1,7 @@
struct Agent {
position: vec2<f32>,
angle: f32,
species: f32,
generation: f32,
}
@group(1) @binding(1) var<storage, read_write> agents: array<Agent>;

View file

@ -3,7 +3,7 @@ import { vec2 } from 'gl-matrix';
export interface Agent {
position: vec2;
angle: number;
species: number;
generation: number;
}
export const AGENT_SIZE_IN_BYTES = 4 * Float32Array.BYTES_PER_ELEMENT;

View file

@ -31,7 +31,7 @@ fn main(@builtin(global_invocation_id) global_id: vec3<u32>) {
// even generation id -> red channel
// odd generation id -> green channel
let isFromEvenGeneration = agent.species % 2 == 0;
let isFromEvenGeneration = agent.generation % 2 == 0;
let trailForward = sense(agent.position, agent.angle, settings.sensorOffset, 0);
let trailLeft = sense(agent.position, agent.angle, settings.sensorOffset, settings.sensorAngle);
@ -81,18 +81,18 @@ fn main(@builtin(global_invocation_id) global_id: vec3<u32>) {
if(isFromEvenGeneration) {
if next.r < next.g {
if agent.species == settings.nextGenerationId {
// agent.species -= 1;
if agent.generation == settings.nextGenerationId {
// agent.generation -= 1;
} else {
agent.species += 1;
agent.generation += 1;
}
}
} else {
if next.g < next.r {
if agent.species == settings.nextGenerationId {
// agent.species -= 1;
if agent.generation == settings.nextGenerationId {
// agent.generation -= 1;
} else {
agent.species += 1;
agent.generation += 1;
}
}
}

View file

@ -53,8 +53,8 @@ export class RenderPipeline {
public setParameters({
brushColor,
speciesAColor,
speciesBColor,
evenGenerationColor,
oddGenerationColor,
clarity,
}: RenderSettings) {
this.device.queue.writeBuffer(
@ -63,9 +63,9 @@ export class RenderPipeline {
new Float32Array([
...brushColor,
0, //padding
...speciesAColor,
...evenGenerationColor,
0, //padding
...speciesBColor,
...oddGenerationColor,
clarity,
])
);

View file

@ -2,7 +2,7 @@ import { vec3 } from 'gl-matrix';
export interface RenderSettings {
brushColor: vec3;
speciesAColor: vec3;
speciesBColor: vec3;
evenGenerationColor: vec3;
oddGenerationColor: vec3;
clarity: number;
}

View file

@ -1,7 +1,7 @@
struct Settings {
brushColor: vec3<f32>,
speciesAColor: vec3<f32>,
speciesBColor: vec3<f32>,
evenGenerationColor: vec3<f32>,
oddGenerationColor: vec3<f32>,
clarity: f32,
};
@ -16,12 +16,12 @@ fn fragment(@location(0) uv: vec2<f32>) -> @location(0) vec4<f32> {
let backgroundColor = vec3(0.9) + 0.075 * random.r;
let speciesAStrength = clamp(pow(traces.r, settings.clarity), 0, 1);
let speciesBStrength = clamp(pow(traces.g, settings.clarity), 0, 1);
let evenGenerationStrength = clamp(pow(traces.r, settings.clarity), 0, 1);
let oddGenerationStrength = clamp(pow(traces.g, settings.clarity), 0, 1);
let brushStrength = traces.a;
let agentColor = step(speciesAStrength, speciesBStrength) * settings.speciesBColor * speciesBStrength + step(speciesBStrength, speciesAStrength) * settings.speciesAColor * speciesAStrength;
let agentStrength = speciesAStrength + speciesBStrength;
let agentColor = step(evenGenerationStrength, oddGenerationStrength) * settings.oddGenerationColor * oddGenerationStrength + step(oddGenerationStrength, evenGenerationStrength) * settings.evenGenerationColor * evenGenerationStrength;
let agentStrength = evenGenerationStrength + oddGenerationStrength;
let rgbColor = sqrt(
mix(agentColor, settings.brushColor * brushStrength, clamp(brushStrength - agentStrength, 0, 1))

View file

@ -20,12 +20,12 @@ export const settings: GameLoopSettings &
DiffusionSettings &
RenderSettings = {
agentCount: 4_000_000, // requires restart
initialDeadRatio: 0.2, // requires restart
aggressionFactor: 0.5, // requires restart
nextGenerationSpawnRadius: 50,
nextGenerationSpawnRadius: 1,
nextGenerationSpawnInterval: 2,
renderSpeed: 5,
renderSpeed: 10,
simulatedDelayMs: 0,
brushWidth: 20,
@ -43,7 +43,7 @@ export const settings: GameLoopSettings &
decayRateBrush: 0.995, // inverse
brushColor: palette.blue,
speciesAColor: palette.yellow,
speciesBColor: palette.purple,
clarity: 3,
evenGenerationColor: palette.yellow,
oddGenerationColor: palette.purple,
clarity: 1,
};