From 81526052f229e7072eb0304913ad66be60b0794d Mon Sep 17 00:00:00 2001 From: Jared Miller Date: Thu, 12 Mar 2026 20:14:54 -0400 Subject: [PATCH] Try to fix the ant problem --- src/Renderer.ts | 5 +++++ src/materials/registry.ts | 2 +- src/scenes/ScreenScene.ts | 4 +++- src/shaders/screenWorld.frag | 2 +- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Renderer.ts b/src/Renderer.ts index f1cf488..ddd974a 100644 --- a/src/Renderer.ts +++ b/src/Renderer.ts @@ -47,6 +47,10 @@ export default class Renderer { constructor(public canvas: HTMLCanvasElement) { this.renderer = new THREE.WebGLRenderer({ canvas }); + // clear alpha must be 0: UnsignedByte render targets (antsDiscreteRT) retain + // the clear value in pixels not covered by instanced draws. alpha=1 produces + // byte 255, which world.frag misinterprets as depositMatId=255. + this.renderer.setClearColor(0x000000, 0); this.initResources(); @@ -181,6 +185,7 @@ export default class Renderer { ); scenes.sandPhysics.material.uniforms.uFrame.value = this.frameCounter; this.renderer.render(scenes.sandPhysics, scenes.sandPhysics.camera); + this.frameCounter++; this.setViewportFromRT(this.resources.worldBlurredRenderTarget); diff --git a/src/materials/registry.ts b/src/materials/registry.ts index 4398cd2..3db51ad 100644 --- a/src/materials/registry.ts +++ b/src/materials/registry.ts @@ -11,7 +11,7 @@ const BUILTIN_MATERIALS: Material[] = [ name: "air", behavior: BEHAVIOR_GAS, density: 0, - color: [0, 0, 0, 0], + color: [0.53, 0.81, 0.92, 1.0], hardness: 0, angleOfRepose: 0, }, diff --git a/src/scenes/ScreenScene.ts b/src/scenes/ScreenScene.ts index 4566b67..d9fcb8e 100644 --- a/src/scenes/ScreenScene.ts +++ b/src/scenes/ScreenScene.ts @@ -56,6 +56,8 @@ export default class ScreenScene extends AbstractScene { constructor(renderer: Renderer) { super(renderer); + const groundDefines = this.renderer.getCommonMaterialDefines(); + const ground = new THREE.Mesh( new THREE.PlaneGeometry(1, 1), new THREE.ShaderMaterial({ @@ -70,7 +72,7 @@ export default class ScreenScene extends AbstractScene { }, vertexShader: vertexShaderGround, fragmentShader: fragmentShaderGround, - defines: this.renderer.getCommonMaterialDefines(), + defines: groundDefines, glslVersion: THREE.GLSL3, }), ); diff --git a/src/shaders/screenWorld.frag b/src/shaders/screenWorld.frag index f61da39..f69a3fb 100644 --- a/src/shaders/screenWorld.frag +++ b/src/shaders/screenWorld.frag @@ -31,7 +31,7 @@ void main() { if (a == 0.) t = vec3(0); - vec3 color = mix(vec3(1, 1, 1), t, a * 0.7); + vec3 color = mix(vec3(0.53, 0.81, 0.92), t, a * 0.7); // non-air cells use material color as base, with pheromone tint if (materialId != MAT_AIR) {