Problem
The in-shader Sobel kernel (8 taps) approximates normals but can't fully eliminate specular aliasing at all resolutions.
Proposed change
Add a blurDensity FBO (same dimensions as density). Run two separable Gaussian blur passes (horizontal + vertical, ~5 taps each) once per frame before the display pass. Bind the blurred texture as the source for normal computation only — the raw density FBO still drives color and alpha.
Acceptance criteria
Cost: 2 extra render passes per frame, ~10 texture taps total.
Files likely touched: src/core/shaders.ts, src/core/wgsl-shaders.ts, src/core/simulation.ts
Problem
The in-shader Sobel kernel (8 taps) approximates normals but can't fully eliminate specular aliasing at all resolutions.
Proposed change
Add a
blurDensityFBO (same dimensions as density). Run two separable Gaussian blur passes (horizontal + vertical, ~5 taps each) once per frame before the display pass. Bind the blurred texture as the source for normal computation only — the raw density FBO still drives color and alpha.Acceptance criteria
blurDensityFBO created, same dimensions as density FBOCost: 2 extra render passes per frame, ~10 texture taps total.
Files likely touched:
src/core/shaders.ts,src/core/wgsl-shaders.ts,src/core/simulation.ts