What a scene does

The boundary belongs to the quadrature

The directional solver stops at a roughness of about 0.15, and below that its answers are not imprecise but unphysical. The boundary is where the lobe stops being resolved by the sampling, so it belongs to the discretisation rather than to the room — and moving it is a purchase. Measured across six quadratures the reachable roughness falls as the cost to the power of a third, so a finish twice as glossy costs seven times the work and a polished varnish costs two hundred and thirty-six times.

Assumes Two ways to put a lobe on a wall, Thirty unknowns instead of six and A model is a claim about what can be known.

Two ways to put a lobe on a wall ended on a boundary rather than on a result: a patch stops being a point when the lobe is narrower than the cone it subtends, and below that the answers are not imprecise but unphysical. The first version of that solver returned a chroma of thirty-four thousand and a negative lightness at a roughness of 0.05, which is what an unresolved lobe looks like rather than what a glossy room looks like.

The boundary is quoted at a roughness of 0.15, against a patch subtending a cone of 25.8 degrees. Both numbers belong to the discretisation, and neither has been varied.

The glossiest finish the solver can report, against what it costs to report it. Six quadratures, each with the roughness at which its answer stops being stable, on logarithmic axes. The line is a fit and its slope is -0.350: the reachable roughness falls as the cost to the power of about a third, so reaching a finish twice as glossy costs about 7 times the work. The solver used here sits at 108 directions and reports down to a roughness of 0.145, which is where its own note put the boundary by inspection.
Fig. 1 Six quadratures, each with the roughness at which its answer stops being stable under refinement, on logarithmic axes.

A purchase, and an expensive one

The boundary is where the quadrature stops resolving the lobe, so refining the quadrature moves it — and the reachable roughness falls as the cost to the power of a third, which makes a high-gloss finish unreachable rather than merely expensive.

  • Six quadratures from 24 to 1,008 directions move the boundary from a roughness of 0.279 to 0.067, a factor of 4.2 for a factor of 42 in cost.
  • The fitted exponent is −0.350: the reachable roughness falls as the cost to the power of a third, so halving it costs about seven times the work.
  • Reaching a roughness of 0.01 — a polished varnish — would cost about 236 times the finest quadrature here, a quarter of a million directions.
  • The boundary is the cone’s. At the quadrature used here the answer is stable until the lobe is 8.3 degrees against a cone of 25.8 — so the rule that a lobe narrower than the cone is unresolved is conservative by about a factor of three.
  • The movement it is read off is a real movement: the coarsest quadrature moves the answer by 6.0 colour differences at a roughness of 0.1 and by thousandths at a matt finish.

What is being measured, and why it is not the answer

A solver that has stopped converging does not announce it. The answer it returns is a number of the right shape, and reading whether it is trustworthy from the number itself is exactly what cannot be done.

What can be done is to refine and look. A roughness whose answer moves when the sampling is refined is a roughness the model cannot report, whatever the answer happens to be — and one whose answer does not move is one where the sampling is not the limiting thing. That is a statement about the method rather than about the room, and it is why the quantity plotted throughout is a movement rather than a colour.

How far the answer moves when the quadrature is refined. The floor's colour recomputed with a finer sampling of directions, and how far it moves, against the roughness of the walls, on a logarithmic scale. A roughness whose answer moves is a roughness the model cannot report, whatever the answer happens to be. At a matt finish every quadrature is stable to thousandths; at a roughness of 0.04 the coarsest moves by 73.6 colour differences. The dashed line is the tolerance the boundary is read off, and where each curve crosses it is where that quadrature stops.
Fig. 2 The floor’s colour recomputed with a finer sampling of directions, and how far it moves, against the roughness of the walls, on a logarithmic scale.

At a matt finish every quadrature is stable to thousandths of a colour difference. At a roughness of 0.04 the coarsest moves by several units. The curves fall steeply and then flatten, and where each crosses the tolerance drawn across it is where that quadrature stops.

The tolerance is a fifth of a colour difference, which is a choice and is stated as one. It is below what a reader could see and above the solver’s own arithmetic noise, and moving it moves every boundary together rather than changing the exponent — which is the quantity the rest of this rests on.

The other reading of the same numbers

The boundary is one thing the sweep measures and the movement is another, and the movement carries a warning the boundary does not.

How far the answer moves when the quadrature is refined. The floor's colour recomputed with a finer sampling of directions, and how far it moves, against the roughness of the walls, on a logarithmic scale. A roughness whose answer moves is a roughness the model cannot report, whatever the answer happens to be. At a matt finish every quadrature is stable to thousandths; at a roughness of 0.04 the coarsest moves by 73.6 colour differences. The dashed line is the tolerance the boundary is read off, and where each curve crosses it is where that quadrature stops.
Fig. 3 The same movement curves, read for their sizes rather than for where they cross. At a roughness of 0.04 the coarsest quadrature’s answer is six colour differences away from the refined one, and the answer it returns looks like an answer.

A solver past its boundary does not return a large number or a flagged one. At a roughness of 0.1 the coarsest quadrature returns a colour that is six colour differences from the converged one, and it is a perfectly ordinary colour: a lightness in range, a chroma in range, a hue that means something. The only way to know is to refine and compare, and the only reason the boundary is known to exist here is that an early version of the solver went far enough past it to return a chroma of thirty-four thousand.

That is a bad way to find a boundary and it is the usual way. A model fails visibly at some distance past where it stops being right, and everything between the two is an answer nobody questions. The measurement here is the cheap version of the same discovery — one extra solve per roughness, done once — and it says the visible failure at 0.05 was the tail of a failure that began at 0.145.

A model is a claim about what can be known sets out why a stated limit belongs to a model. What this adds is that the limit has to be measured rather than noticed, because the region between “wrong” and “obviously wrong” is wide.

Where the boundary falls, and what moves it

With the boundary located by bisection rather than by inspection, it can be put against what each quadrature costs.

Twenty-four directions reach a roughness of 0.279; 32 reach 0.203; 108 reach 0.145; 256 reach 0.111; 500 reach 0.090; 1,008 reach 0.067. The solver used here evaluates 108 directions and reaches 0.145, which is where its own note put the boundary by inspection — so the inspection was right, and it was right about a number that belongs to the sampling.

Plotted on logarithmic axes the six sit on a line of slope −0.350. The reachable roughness falls as the cost to the power of about a third, which is the useful form: each halving of the roughness costs a factor of 2^(1/0.35) — about seven — in directions evaluated.

That exponent has a reason. A microfacet lobe of roughness a is about a radians wide, so resolving it needs a sampling spacing of order a; a two-dimensional quadrature over a hemisphere at spacing a needs of order a⁻² directions. That would give an exponent of −0.5, and the measured −0.35 is shallower — the quadrature is doing better than a uniform grid would, which is what a refinement scheme concentrated near the specular direction is for.

The boundary is the cone’s, and the rule is conservative

The rule the solver’s note gives is that a patch stops being a point when the lobe is narrower than the cone it subtends. That is the right rule and it is not tight.

The lobe's width at the boundary, against the cone a patch subtends. For each quadrature, how wide the microfacet lobe is at the roughness where that quadrature stops being stable, with the cone an opposite face subtends drawn across. The cone is 25.8 degrees and every boundary sits below it — from 16.0 degrees at the coarsest to 3.8 at the finest. The solver's own note says a patch stops being a point when the lobe is narrower than the cone, and that rule is conservative by about a factor of three at the quadrature actually used: the answer is stable until the lobe is a third of the cone. The boundary is still the cone's, and where in the cone it falls is the quadrature's.
Fig. 4 For each quadrature, how wide the microfacet lobe is at the roughness where that quadrature stops being stable, with the cone an opposite face subtends drawn across.

Every boundary sits below the cone — from 16.0 degrees at the coarsest quadrature to 3.8 at the finest, against a cone of 25.8. A corner is not a wall is where the cone a patch subtends first mattered in this collection, for a different reason. At the quadrature actually used the lobe is 8.3 degrees, which is a third of the cone.

So the rule is conservative by about a factor of three at the working quadrature, and by less at a coarse one and more at a fine one. That is the sense in which the boundary is the cone’s and its exact position is the quadrature’s: the cone sets the scale — a lobe much wider than it is certainly resolved and one much narrower is certainly not — and where in between the answer stops being stable is decided by how the solver samples.

The ratio’s own trend says which half is which. If the boundary were the cone’s alone the ratio would be constant; if it were the quadrature’s alone the cone would not appear in it. It rises from 1.6 to 6.8 across the six, so both are present and neither is the whole story — which is the honest form of a limit that has a geometric cause and a computational position.

Both halves matter for reading the earlier result. The geometry is what makes a boundary exist at all, and no amount of sampling removes it, because a patch that subtends a cone cannot distinguish directions inside that cone. The sampling is what decides where it falls, and refining it buys real ground.

The lobe's width at the boundary, against the cone a patch subtends. For each quadrature, how wide the microfacet lobe is at the roughness where that quadrature stops being stable, with the cone an opposite face subtends drawn across. The cone is 25.8 degrees and every boundary sits below it — from 16.0 degrees at the coarsest to 3.8 at the finest. The solver's own note says a patch stops being a point when the lobe is narrower than the cone, and that rule is conservative by about a factor of three at the quadrature actually used: the answer is stable until the lobe is a third of the cone. The boundary is still the cone's, and where in the cone it falls is the quadrature's.
Fig. 5 The lobe’s width at each quadrature’s boundary against the cone, read as a ratio: 1.6 at the coarsest, 3.1 at the working one, 6.8 at the finest. The rule gets more conservative as the sampling gets better, which is what a rule about geometry does when the thing it bounds is a sampling.

What a glossier finish would cost

The exponent turns the question of reachability into arithmetic.

What it would cost to report a glossier finish. Four target roughnesses, with the quadrature each would need as a multiple of the finest one measured here — 1008 directions reaching a roughness of 0.067. The scale is logarithmic. An eggshell finish is already inside; a satin one costs a few times more; a roughness of 0.01, which is a polished varnish, costs about 236 times the solve. The extrapolation is from the fitted exponent and is an order of magnitude rather than a figure, which is all it needs to be: the conclusion is that the finish is out of reach rather than that it costs a particular amount.
Fig. 6 Four target roughnesses, with the quadrature each would need as a multiple of the finest measured here.

A roughness of 0.1 is already inside the finest quadrature measured. 0.05 costs about twice it; 0.02 costs 33 times; 0.01 costs 236 times — about a quarter of a million directions, against the 108 the working solver evaluates.

The extrapolation is from the fitted exponent and it is labelled as one. It is an order of magnitude rather than a figure, and that is all it needs to be: the conclusion is that a polished varnish is out of reach rather than that it costs a particular amount.

So the honest statement about this model’s ceiling is not “gloss is expensive”. Matt, eggshell and satin finishes sit comfortably inside; a semi-gloss is reachable at a cost; a high-gloss paint or a varnish is not, and would need a different method rather than a bigger budget — one that treats the specular direction analytically instead of sampling it, which is what every renderer written for mirrors does and which this solver’s whole construction forbids, since it solves for a radiance per pair of faces. A tenth of the return arriving white is the part of the lobe that survives the restriction.

What this means for the results the solver has published

Every scene computed here with the directional solver sits at a roughness of 0.15 or above — the essay that found every scene matt is where that range was chosen — and this measurement says that was the right place to stop with 108 directions. Two things follow.

The published results are safe and the stopping point was not arbitrary. A roughness of 0.15 is 0.005 above the working quadrature’s measured boundary of 0.145, which is closer than the original inspection could have known and is on the right side.

A patch is not a scene is the neighbouring caution about a model whose unit is the wrong size; this is the same caution about a model whose sampling is.

And the ceiling can be raised for a price that is now known. Thirty unknowns instead of six established what the directional solver costs against the radiosity one it replaced; this says what a further factor buys. A room at a roughness of 0.09 — a semi-gloss — is a 500-direction solve, about five times the present one, which is an afternoon rather than a project.

What it does not buy is the case a reader would most like. A mirror-finished wall is not a hard case for this solver; it is outside it, and saying so is the honest answer rather than an apology. A model is a claim about what can be known is the standing statement of why a stated limit is part of a model rather than a defect in it.

How the boundary was located

The room is the unit cube the directional work uses throughout: a lamp in the ceiling emitting D65, two opposite walls painted with a Gaussian reflectance band, the others a neutral grey, every face carrying a microfacet lobe of the stated roughness, solved directionally in eighty-one bands.

A quadrature is a ring count and a refinement level, and its cost is taken as the ring count times the square of the refinement, which is the number of directions the solver evaluates. The movement at a roughness is the colour difference between the floor’s colour computed at that quadrature and at one half again as fine in ring and one level deeper in refinement.

The boundary is found by bisection on the roughness against a tolerance of a fifth of a colour difference, in twelve steps, with a bracket from 0.02 to 0.6; a quadrature stable at the bottom of the bracket or unstable at the top is reported as such rather than as a boundary at an end. The exponent is a least-squares fit of the log of the boundary against the log of the cost.

What this leaves out

The cone is the cube’s. A room of a different shape subtends different cones, and a long room’s end walls subtend small ones — so the same quadrature would stop at a different roughness there, and the boundary would have to be located again. What transfers is the method rather than the number.

The tolerance is a fifth of a colour difference. A tighter one moves every boundary to a rougher finish and a looser one the other way; the exponent is what the argument uses and it is insensitive to the choice, because moving the tolerance moves every point on the line together.

And the extrapolation is a power law fitted over a factor of forty in cost. Extrapolating it by another factor of two hundred is an estimate of an order of magnitude and nothing more, and it would be surprising if the exponent held exactly that far — a quadrature refined enough eventually hits the floor set by the spectral sampling and the linear solve, neither of which this measurement varies.

Still open: whether the specular direction can be taken out analytically

The exponent says sampling cannot reach a polished finish, and the way past a sampling limit is usually to stop sampling the hard part.

A microfacet lobe at low roughness is a narrow peak around the mirror direction with a broad, weak tail. The tail is what the quadrature is good at and the peak is what it is not — so a solver could integrate the peak analytically, using the fact that the reflected direction of a known incoming direction is known exactly, and sample only the remainder. That is the standard arrangement in a renderer and it has never been tried here, because this solver’s unknown is a radiance per pair of faces rather than a field, and a peak that lands between two faces has nowhere to go.

The question is whether the peak can be attributed to face pairs without sampling. For a box it probably can, because the mirror direction of one face towards another is computable in closed form and the peak’s footprint on the receiving face is an ellipse whose area is a function of the roughness. Whether the resulting split is consistent — whether the analytic peak and the sampled tail add to the same energy the full quadrature converges to — is the test, and it is the same test this essay uses: refine and watch.

If it works the ceiling moves from a roughness of 0.07 to wherever the tail’s sampling stops mattering, which is much lower. If it does not, the honest statement is that a box with faces as its unknowns cannot hold a mirror, and the next model would have to subdivide.

A limit is either the world’s or the method’s

The habit is about a number that marks where a model stops.

Such a number always has two candidate owners. It can belong to the thing being modelled — a real threshold, a physical scale, a place where the phenomenon genuinely changes — or it can belong to the model: a grid spacing, a sampling rate, a convergence tolerance. The two are reported identically, as a value and a caution, and they behave completely differently under investment.

The move is to vary the model and watch the limit. A limit that does not move is the world’s and should be stated as a result; one that moves is a purchase, and the useful thing to publish is its exponent — because an exponent turns “this model stops here” into “reaching there costs this much”, which a reader can act on.

The failure mode is to report a limit without saying which kind it is. A roughness of 0.15 read as a fact about gloss is a discouraging result about what can be modelled; read as a fact about 108 directions it is a price list.

Named alongside this one

Essays reaching for the same objects. Nobody chose these; they are what the index of named objects makes visible.

What links here

Every essay whose body links to this one.

The objects this essay names

Each one links to every other essay that touches it.

Bidirectional reflectanceConvergenceGlossInterreflectionMicrofacetModel complexityModelling assumptionQuadratureRadiositySpecular