Measured on the shipped void and the Aetheria wells at warp 60: affine warp spans, simplex cells and lattice points per span, exact-against-march cost and error per octave, high-octave variance, clamp crossings and transmittance error; plus Aetheria's triangle noise. Verdict: exact integration does not beat sampling for optical depth on either field. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
286 lines
16 KiB
Markdown
286 lines
16 KiB
Markdown
# Analytic noise integration along warped rays: feasibility probe
|
||
|
||
Campaign `cultmath-tapes`, Imagination probe, 2026-10-03. This is a measurement,
|
||
not a spec. The tape target stays parked under ruling
|
||
`cultmath-tapes:ruling:tape-target-unparks-when-asura-stable`.
|
||
|
||
**Verdict.** Exact integration of the noise does not beat sampling for optical
|
||
depth on either shipped field.
|
||
- The exact line integral of CultMath `snoise` is cheap and correct. Affine warp
|
||
spans are long, at 100 to 300 world units.
|
||
- The exact noise integral is not the optical depth, because both densities are
|
||
nonlinear in the noise.
|
||
- The void's wall profile is `pow(·, 0.40)` with two clamps.
|
||
- Aetheria's fog is clamped at zero and goes opaque within a few world units.
|
||
- Given the *exact* span mean of the noise for free, the resulting transmittance
|
||
is still 3.6x worse than the shipped march on the void and 22x worse on the
|
||
wells.
|
||
- Exact integration wins only on the linear functional `∫ n dt` of octaves the
|
||
march undersamples. That gain does not survive the density's nonlinearity.
|
||
- Aetheria's triangle noise is integrable exactly as piecewise linear, but costs
|
||
3x to 22x the march, and its shipped form does not meet the preconditions.
|
||
|
||
## Scenarios and method
|
||
|
||
- **Void:** the shipped void (`NoiseBoundTests.VoidField.Shipped()` at
|
||
`hands/cultmath-interval-ops` 2c8585bd).
|
||
- Rh 198, S 50, Rc 248, K 1/30, A 20, F0 0.01 (cells of 100 and 25 world), warp
|
||
D 10.
|
||
- The shipped orbiting camera, N = 8 tiles at f = 935, one jittered pixel ray per
|
||
tile.
|
||
- **Wells:** the test's Aetheria wells at warp D = 60 (`FogField.Wells(60)`).
|
||
- F0 1/414.2167, A 20, B 10, extinction 0.5, flow frequency 1/512, period 8.
|
||
- Like the test, this uses the snoise field shape (r1's), not Aetheria's own
|
||
triangle noise. Triangle noise is measured separately below, on the same rays.
|
||
- **Rays:** 200 per scenario, and 120 for the triangle basis.
|
||
- The wells give 147 rays with an active interval; the rest look up and miss
|
||
the fog.
|
||
- The active interval is where the envelope leaves the density to the noise.
|
||
It is cut where the true optical depth reaches 6.
|
||
- Active length per ray: void median 140 world (p10 114, p90 193); wells median
|
||
268 (p10 137, p90 623).
|
||
- **March steps:** the void's march step (LodStep, 12.5 in z) is a median 14.9
|
||
world along the ray. The wells' quadratic grid gives a median of 9.1 in the
|
||
active region.
|
||
- **Warp:** `w(p) = flow(p) · shift`, so the affine error scales exactly with
|
||
`|shift|`.
|
||
- Spans are grown at the worst phase shift, Period / 2. A span is therefore
|
||
valid at every frame's phase, for any camera that crosses the same world
|
||
segment.
|
||
- Each span is anchored at p0 with J·d from a central difference. It grows in
|
||
1-unit (void) or 2-unit (wells) steps until `|w − (w0 + J·d·Δ)| > τ`.
|
||
- **Exact simplex integral:** CultMath `snoise(float3)` has kernel radius² 0.5,
|
||
so its support never leaves the incident simplices.
|
||
- Along a line it is therefore a sum over the lattice points within √0.5 of the
|
||
line. Each point contributes `∫ (0.5 − |x|²)⁴ (g·x) dt` on its chord, a
|
||
closed-form degree-9 polynomial.
|
||
- Validation:
|
||
- The lattice sum matches `snoise` within 2e-4 (float32 rounding at
|
||
coordinates near 300).
|
||
- The segment integral matches a 5e-4-step quadrature within 2.5e-5 per
|
||
unit length.
|
||
- **Run:** probe code was in a scratch clone (probe-clone@91c8cbf1, never merged)
|
||
and ran on Yggdrasil through the verify stopgap, in a dotnet 10 container with
|
||
4 CPUs. Timings are single-threaded C# on that host and are relative.
|
||
|
||
## 1. Affine-valid span length (ray length, world units)
|
||
|
||
| τ (× coverage cell) | Void p10 / median / p90 | Wells p10 / median / p90 |
|
||
|---|---|---|
|
||
| 0.05 | 94 / 129 / 211 | 71 / 103 / 169 |
|
||
| 0.10 | 141 / 197 / 324 | 108 / 151 / 253 |
|
||
| 0.25 | 263 / 420 / 1244 | 184 / 275 / 715 |
|
||
| 0.05 × detail cell | 44 / 63 / 97 | 34 / 47 / 75 |
|
||
|
||
- One affine span at τ = 0.1 covers about 13 void march steps and about 16 wells
|
||
march steps.
|
||
- The void shell is shorter than one span. The tiled spans are clipped by the
|
||
active interval, at a median of 27 world and 2 spans per ray.
|
||
- On the wells, the tiled spans run a median of 128 world, with 2 per ray (p90 4).
|
||
- The tangent anchor is the worst affine choice. A secant or Chebyshev fit over
|
||
the span cuts the error bound by 2x to 8x, so the spans could be about 1.4x to
|
||
2.8x longer at the same τ. That was not measured.
|
||
|
||
## 2. Simplex cells per span, per octave
|
||
|
||
Octave `xm` is the coverage octave's frequency times m, warped like the coverage
|
||
octave. The shipped detail octave is x4 and is *unwarped* in both fields, so it
|
||
needs no affine span at all.
|
||
|
||
Counts are for τ = 0.1 tiled spans with both warp phases, given as the median and
|
||
then the p90. The rows are simplex cells crossed, then lattice points touched,
|
||
which is the exact work.
|
||
|
||
| Octave | Void cells | Void lattice points | Wells cells | Wells lattice points |
|
||
|---|---|---|---|---|
|
||
| x1 | 6 / 16 | 10 / 16 | 4 / 8 | 8 / 10 |
|
||
| x2 | 8 / 27 | 10 / 26 | 8 / 12 | 10 / 14 |
|
||
| x4 | 13 / 52 | 14 / 44 | 12 / 20 | 14 / 20 |
|
||
| x8 | 20 / 100 | 20 / 80 | 22 / 38 | 22 / 34 |
|
||
| x16 | 40 / 201 | 35 / 154 | 44 / 72 | 38 / 60 |
|
||
| x32 | 75 / 396 | 62 / 302 | 86 / 144 | 70 / 112 |
|
||
| x64 | 151 / 793 | 118 / 592 | 172 / 287 | 132 / 218 |
|
||
|
||
- On the same spans, the march takes a median of 2 samples per span on the void
|
||
(p90 10) and 12 on the wells (p90 25).
|
||
- A straight line touches 3.44 lattice points per noise unit.
|
||
|
||
## 3. Cost: exact against the march
|
||
|
||
- **Measured cost.**
|
||
- One snoise is 530 to 610 ns in C# on this host.
|
||
- One lattice-point integral (hash, gradient, closed-form polynomial) is
|
||
85 ns, or 0.16 snoise.
|
||
- With this probe's naive box-scan enumeration it is 1.24 snoise. That is an
|
||
upper bound; a simplex walk visits only crossed cells.
|
||
- **How the table counts.** Exact is lattice points × 0.16 + 1 snoise per span
|
||
for the Jacobian. March is 1 snoise per sample. Both sides carry the two warp
|
||
phases.
|
||
- **Tolerance.** τ is 0.1 × *that octave's own* cell, so the affine error is
|
||
comparable across octaves.
|
||
- **Columns.** The two error columns are RMS errors of the active-length mean
|
||
of one warped octave. The last error column is what replacing the octave by its
|
||
expectation of 0 costs.
|
||
|
||
| Octave | Void exact/march cost | Void err exact / march / expectation | Wells exact/march cost | Wells err exact / march / expectation |
|
||
|---|---|---|---|---|
|
||
| x1 | 0.36 | 1.1e-2 / 1.6e-3 / 0.21 | 0.11 | 1.9e-2 / 9e-5 / 0.29 |
|
||
| x2 | 0.46 | 1.0e-2 / 4.7e-3 / 0.13 | 0.15 | 1.5e-2 / 2e-4 / 0.21 |
|
||
| x4 | 0.68 | 9.0e-3 / 4.0e-2 / 0.10 | 0.23 | 1.1e-2 / 5e-4 / 0.18 |
|
||
| x8 | **1.03** | 5.8e-3 / 8.0e-2 / 0.067 | 0.36 | 7.2e-3 / 1.1e-3 / 0.10 |
|
||
| x16 | 1.64 | 4.0e-3 / 9.0e-2 / 0.050 | 0.56 | 6.4e-3 / 9.4e-3 / 0.088 |
|
||
| x32 | 2.89 | 2.8e-3 / 0.105 / 0.036 | 0.87 | 4.7e-3 / 3.3e-2 / 0.057 |
|
||
| x64 | 5.26 | 2.0e-3 / 0.095 / 0.025 | **1.44** | 3.2e-3 / 5.3e-2 / 0.040 |
|
||
|
||
- **Where exact stops paying on cost:**
|
||
- At the measured kernel cost: x8 on the void and between x32 and x64 on the
|
||
wells.
|
||
- At the brief's model of one snoise per cell crossed: about x1 to x2 on the
|
||
void and x8 on the wells, from the per-span table in the probe log.
|
||
- **Exact against the march on accuracy:**
|
||
- At the shipped step the march is *more* accurate for octaves it oversamples:
|
||
void x1 to x2, wells x1 to x8. The exact path's error floor is the affine warp
|
||
error, about 1e-2 at τ = 0.1 per cell, and it scales with τ.
|
||
- Exact is more accurate at about 0.7x the cost where the march undersamples:
|
||
void x4 to x8, wells x16 to x32.
|
||
- Above about x16 on the void, the undersampled march is worse than simply
|
||
using the expectation (0.095 against 0.025 at x64). That is a band-limiting
|
||
result, which the footprint octave weights already exploit. It is not an
|
||
exact-integration result.
|
||
|
||
## 4. High-octave variance over a span
|
||
|
||
- **Span-mean statistics.** Over straight lines of noise length ℓ, the std of
|
||
the snoise span mean, against a point std of 0.358, is:
|
||
- 0.234 at ℓ = 1;
|
||
- 0.170 at ℓ = 2;
|
||
- 0.121 at ℓ = 4;
|
||
- 0.087 at ℓ = 8;
|
||
- 0.061 at ℓ = 16;
|
||
- 0.031 at ℓ = 64.
|
||
|
||
This is about ℓ^-0.5: the high octaves average out like a random field, not
|
||
like a periodic one.
|
||
- **Detail octave replaced by its expectation of 0,** on τ = 0.1 spans, measured
|
||
as |ΔOD| per span:
|
||
- Void: median 0.000 and p90 0.091. Relative to the span's OD (OD > 0.01) the
|
||
median is 2.5% and the p90 is 7.6%. The mean detail displacement is a median
|
||
1.0 world (p90 3.6) against the ramp width S = 50.
|
||
- Wells: median 0.11 and p90 5.7 optical depths. The relative median is 72%.
|
||
- **Why the wells are so bad.** Normalised to the clamp, the density moves
|
||
A·fade/B = 2 per unit of noise, and with extinction 0.5 that is 1 optical depth
|
||
per world unit per unit of noise. The mean detail displacement of 1.5 world
|
||
(p90 3.8) is 15% to 38% of the floor blend B = 10. The wells' optical depth is
|
||
set by where the clamp boundary lies, and that is exactly what the expectation
|
||
erases.
|
||
- So the expectation is adequate for the void's detail octave and is not
|
||
adequate for the wells.
|
||
|
||
## 5. The clamp and other nonlinearity
|
||
|
||
- **Void.** 50.0% of τ = 0.1 spans cross a regime boundary: 0 (d' ≤ Rh), the
|
||
wall ramp, or K (d' ≥ Rc). 45.6% of the active length lies in the ramp, where
|
||
the density is `K max(0, 1 − 1.5 (1 − (d'/Rc)²)^0.40)`. That is not a
|
||
polynomial in n, so exact ∫n does not give ∫ρ there. Outside the ramp the
|
||
density is constant and needs no noise.
|
||
- **Wells.** 42.3% of spans cross the clamp. Only 9.8% of the active length is
|
||
unclamped, so most of the length where the noise "matters" is length where the
|
||
noise only decides whether the density is zero.
|
||
- **The decisive check: transmittance error.** This is the sup over the ray of
|
||
|T_est − T_true|, with the truth taken on a 0.5- or 1-unit grid.
|
||
|
||
| Estimator | Void median / p90 | Wells median / p90 |
|
||
|---|---|---|
|
||
| Shipped march | 0.020 / 0.038 | 0.033 / 0.155 |
|
||
| March at 4x density | 0.006 / 0.009 | 0.030 / 0.049 |
|
||
| Density of the *exact* span-mean n (τ = 0.1 spans) | 0.072 / 0.125 | 0.719 / 0.997 |
|
||
|
||
The last row is an upper bound on what any exact-mean method can deliver
|
||
without also modelling the distribution inside the span. It is the
|
||
Heitz-style correction the survey describes. It loses to the march on both
|
||
fields.
|
||
|
||
## Triangle basis (operator's addition)
|
||
|
||
The triangle noise is `triNoise3d` in Aetheria `Assets/Shaders/Volumetric.cginc`
|
||
(origin/master f1dee184).
|
||
- `tri(x) = |frac(x) − 0.5|`.
|
||
- It runs two Nimitz-style iterations. Each iterates `p += tri3(bp·2)`, scales
|
||
`bp` by 1.8 and `p` by 1.2, and adds `tri(p.z + tri(p.x + tri(p.y)))/z`.
|
||
- It makes 18 tri calls per evaluation.
|
||
|
||
As shipped, `density()` uses it as follows:
|
||
- `pow(triNoise3d(·), exponent)`, with Noise.Exponent −0.25 multiplied by a
|
||
slope `flatness` read from a texture (NOISE_SLOPE is on).
|
||
- Two phases, warped by `globalFlow`, which is
|
||
`Tri3D = cross(normalize(tri3(P)), normalize(tri3(1.618P))) × 15`.
|
||
- The fine octave at ×8 is evaluated at a `pos` whose y the coarse octave has
|
||
already displaced.
|
||
- Amplitude −36.17.
|
||
|
||
Self's reading, tested:
|
||
|
||
- **"The warped ray is an exact polyline."** This holds for the warp *inside*
|
||
`triNoise3d`. It does not hold for Aetheria's flow: `normalize` and `cross`
|
||
make the flow piecewise rational. With the normalize dropped, the cross product
|
||
of two piecewise-linear vectors is piecewise quadratic. tri composed with a
|
||
piecewise polynomial stays piecewise polynomial of the same degree, with
|
||
breakpoints at quadratic roots, so that variant is still closed-form.
|
||
Counted along the real flow at the worst shift, the kinks run 15% to 30% above
|
||
the straight-ray counts, but the pieces between them are curved.
|
||
- **"The clamp roots are linear."** This holds only if the exponent is 1. With
|
||
−0.25·flatness, each piece is `(a + bt)^e`. One such piece has a closed-form
|
||
integral, but the clamp's root on a sum of two powered phases plus the
|
||
smoothstep fade has none.
|
||
- **"Whole periods give the exact mean."** This holds for one triangle wave at
|
||
whole periods, where the mean is exactly 0.25. It fails for the composed form,
|
||
which has no period along a general line; the scales 2, 1.8 and 1.2 and the
|
||
nested warp are incommensurate.
|
||
- Measured on lines, the span-mean std of `triNoise3d` is 0.029 at ℓ = 1,
|
||
0.010 at ℓ = 8 and 0.0042 at ℓ = 64, against a point std of 0.083. That is
|
||
about ℓ^-0.47, the same random-field decay as simplex.
|
||
- Its bias against the global mean of 0.1995 is within ±0.0015, so the
|
||
expectation is unbiased. It is not exact.
|
||
- **The cost decides it.** The exact piecewise-linear walk is verified, matching
|
||
a 1e-4 quadrature within 3.4e-8. But the nest has 77.7 linear pieces per noise
|
||
unit of straight line, against 3.44 lattice points for simplex.
|
||
- One piece costs 1.38 point evaluations with a derivative carried.
|
||
- At Aetheria's scale, on the wells rays, the pieces per world unit and the
|
||
exact cost relative to the march are:
|
||
|
||
| Octave | Pieces per world unit | Exact cost / march |
|
||
|---|---|---|
|
||
| x1 | 0.20 | 2.8x |
|
||
| x2 | 0.38 | 5.5x |
|
||
| x4 | 0.76 | 11x |
|
||
| x8 (shipped fine) | 1.5 | 22x |
|
||
| x64 | 12 | 176x |
|
||
|
||
- On the void rays it is 4.1x at x1 and 29x at x8.
|
||
- At the same time the march's RMS error on the span mean is already small:
|
||
2.4e-3 at x1 and 1.7e-2 at x8.
|
||
|
||
## Per-basis verdict
|
||
|
||
| Basis | Exact line integral | Under the shipped warp | Optical depth | Verdict |
|
||
|---|---|---|---|---|
|
||
| Simplex (CultMath `snoise`) | Closed form, 0.16 snoise per lattice point, 3.44 points per noise unit; validated | Affine spans of 100 to 300 world at τ = 0.1 cell; error floor about 1e-2 | Not delivered: the void's pow profile and the wells' clamp make ρ nonlinear in n; the exact-mean transmittance loses 3.6x and 22x | **Viable kernel, wrong target.** Pays only if the density were affine in n over the span, or as a control variate for a march (survey §4, Kettunen 2021) |
|
||
| Triangle (`triNoise3d`) | Closed form per linear piece; validated | Not piecewise linear under Aetheria's normalized-cross flow or the −0.25 power; made linear by exponent 1 and a non-normalized flow | Same nonlinearity, plus 78 pieces per noise unit | **Loses.** 3x to 22x the march even where its preconditions hold |
|
||
| Gabor kernels (survey §1.2, not probed) | Closed form for any affine-transformed kernel (complex erf, at most 16 terms) | The affine warp spans above transfer directly, with each span a whitening transform | Same density-nonlinearity limit | **Candidate smooth basis for large structure**, to be measured only if the density is first made linear in the noise over a span |
|
||
|
||
## What would change the verdict
|
||
|
||
- **A density that is affine in the noise inside a span.** For example, the
|
||
void's ramp replaced by a linear ramp in d', with clamp crossings bracketed by
|
||
the interval bound. Exact simplex integration would then deliver optical depth
|
||
directly in the 54% of void length that is outside the ramp's clamps. As
|
||
measured, that 54% is constant density and needs no noise at all.
|
||
- **Exact integration as a control variate,** not a replacement. The exact mean
|
||
is cheap and unbiased for ∫n, and the march corrects the nonlinear residual.
|
||
That is the Kettunen construction. It was not measured here.
|
||
- **Wider skipping.** The operator's first idea, skipping space outside the warp
|
||
range, is already what the interval envelope does, and the probe's active
|
||
intervals are its output.
|
||
- On the void the noise matters over only about 140 world per ray.
|
||
- On the wells, opacity ends the ray within a few world units of entering the
|
||
unclamped region.
|