diff --git a/src/Renderer.ts b/src/Renderer.ts index e2987fd..d6d5fcd 100644 --- a/src/Renderer.ts +++ b/src/Renderer.ts @@ -79,6 +79,17 @@ export default class Renderer { minFilter: THREE.NearestFilter, }, ), + antsPresenceRenderTarget: new THREE.WebGLRenderTarget( + Config.worldSize, + Config.worldSize, + { + format: THREE.RGBAFormat, + type: THREE.FloatType, + depthBuffer: false, + magFilter: THREE.NearestFilter, + minFilter: THREE.NearestFilter, + }, + ), }; } @@ -109,6 +120,9 @@ export default class Renderer { this.resources.worldRenderTarget.texture; this.renderer.render(scenes.worldBlur, scenes.worldBlur.camera); + this.renderer.setRenderTarget(this.resources.antsPresenceRenderTarget); + this.renderer.clear(); + this.setViewportFromRT(antsComputeTarget); this.renderer.setRenderTarget(antsComputeTarget); scenes.ants.material.uniforms.tLastState.value = @@ -117,6 +131,8 @@ export default class Renderer { antsComputeSource.textures[1]; scenes.ants.material.uniforms.tWorld.value = this.resources.worldBlurredRenderTarget.texture; + scenes.ants.material.uniforms.tPresence.value = + this.resources.antsPresenceRenderTarget.texture; this.renderer.render(scenes.ants, scenes.ants.camera); this.setViewportFromRT(this.resources.antsDiscreteRenderTarget); @@ -266,6 +282,13 @@ export default class Renderer { this.renderer.setRenderTarget(this.resources.antsDiscreteRenderTarget); this.renderer.clear(); + this.resources.antsPresenceRenderTarget.setSize( + Config.worldSize, + Config.worldSize, + ); + this.renderer.setRenderTarget(this.resources.antsPresenceRenderTarget); + this.renderer.clear(); + for (const scene of Object.values(scenes)) { scene.recompileMaterials(); } diff --git a/src/scenes/AntsComputeScene.ts b/src/scenes/AntsComputeScene.ts index 82b85e9..5234ccc 100644 --- a/src/scenes/AntsComputeScene.ts +++ b/src/scenes/AntsComputeScene.ts @@ -21,6 +21,7 @@ export default class AntsComputeScene extends AbstractScene { tLastState: { value: null }, tLastExtState: { value: null }, tWorld: { value: null }, + tPresence: { value: null }, }, vertexShader, fragmentShader, diff --git a/src/shaders/antsCompute.frag b/src/shaders/antsCompute.frag index 8635892..995733f 100644 --- a/src/shaders/antsCompute.frag +++ b/src/shaders/antsCompute.frag @@ -12,6 +12,7 @@ uniform float uTime; uniform sampler2D tLastState; uniform sampler2D tLastExtState; uniform sampler2D tWorld; +uniform sampler2D tPresence; const float sampleDistance = 20.; const float cellSize = 1. / WORLD_SIZE;