Problem
Normals are computed at a fixed Sobel spread. Large spread = smooth but loses detail; small spread = detailed but aliased. Ideal spread depends on local density.
Proposed change
Weight the Sobel spread by a function of local density. Simplest form:
```glsl
float spread = 1.0 + (1.0 - density) * k;
```
Kernel expands as density fades — less specular detail where fluid is thin.
Acceptance criteria
Files likely touched: src/core/shaders.ts, src/core/wgsl-shaders.ts
Problem
Normals are computed at a fixed Sobel spread. Large spread = smooth but loses detail; small spread = detailed but aliased. Ideal spread depends on local density.
Proposed change
Weight the Sobel spread by a function of local density. Simplest form:
```glsl
float spread = 1.0 + (1.0 - density) * k;
```
Kernel expands as density fades — less specular detail where fluid is thin.
Acceptance criteria
Files likely touched:
src/core/shaders.ts,src/core/wgsl-shaders.ts