Where a patch stops being a point
Assumes Thirty unknowns instead of six, The audit that changed the object and How far a quadratic can be believed.
Every model has a boundary and most of them are described rather than measured. This one is measured, and the measurement is a good deal more useful than the description would have been.
The claim
A directional solver whose patches are points cannot resolve a lobe narrower than the cone a patch subtends, and the boundary is at roughness 0.15 for a cube — measured, not asserted.
- A patch in a cube subtends 25.8° of angular radius at the face opposite, computed from the form factor rather than from the geometry.
- A microfacet lobe of roughness
ais aboutaradians wide, so roughness 0.15 is about eight and a half degrees and roughness 0.05 is under three. - Refining the quadrature moves the answer by 23.3 ΔE₀₀ at roughness 0.05 and by 0.03 at roughness 0.3, and the boundary is read off that sequence.
- Below it the answers are unphysical rather than imprecise. The first version of this solver returned a chroma of thirty-four thousand and a negative lightness, which is the honest failure mode and is the one that gets noticed — unlike an answer that is merely wrong by a plausible amount.
The mistake, first
The obvious reading of “a patch is a point” is to evaluate the bidirectional distribution at the two centre directions: the direction light arrives from and the direction it leaves towards, both taken between patch centres.
That is a one-point quadrature of a function that can vary by orders of magnitude across the cone being integrated. Two patch centres in a cube happen to sit near a mirror direction for several pairs, and a microfacet distribution near a mirror direction goes as the inverse square of the roughness — so at roughness 0.02 the sampled value is enormous, the transport takes it as though the whole patch were that bright, and the linear system solves for something with no physical interpretation.
The symptoms were unmistakable once looked at: chroma 261 at roughness 0.1, chroma thirty-four thousand and lightness minus nineteen thousand at 0.05. Neither is a large error; both are answers to no question.
A one-point quadrature is a modelling decision disguised as a discretisation, and whether it is acceptable depends entirely on what is being integrated, which is a property of the integrand rather than of the geometry.
The repair is a cone average, and it moves the boundary rather than removing it. The repair is to average the lobe over the cone each patch actually subtends, in both the incoming and the outgoing direction.
The cone’s solid angle is read off the form factor rather than computed from the geometry, and that is worth noting: κ_ik = π F_ik is the cosine-weighted solid angle patch k occupies at i, so Ω = κ / cos θ and the cone’s angular radius follows. The solver already had the number.
The cone is then sampled at its centre plus three rings of twelve, giving thirty-seven directions in each of the two cones and about thirteen hundred bidirectional evaluations per patch triple. That is enough for a lobe comparable with the cone and not enough for one much narrower, because no finite quadrature resolves a feature far below its own spacing.
So the repair moves the boundary rather than removing it, and the honest thing is to find out where the boundary now is.
Measuring the boundary
The measurement is to compute the same answer at two quadrature refinements and see how far it moves. A roughness whose answer is stable under refinement is one the model can report; one whose answer moves is not.
| wall roughness | movement under refinement |
|---|---|
| 0.05 | 23.27 ΔE₀₀ |
| 0.10 | 2.806 |
| 0.15 | 0.722 |
| 0.20 | 0.234 |
| 0.30 | 0.0335 |
| 0.45 | 0.0105 |
The sequence falls by roughly a factor of three per step, which is what a quadrature error should do as the integrand becomes smoother relative to the sampling. Nothing about it is surprising and the value of it is that it puts a number where a judgement would have been.
The boundary is chosen at 0.15, where the movement is 0.72 ΔE₀₀ — comparable with the smallest departure the solver is being used to measure, which is 0.97 at nearly matt. Below that the movement exceeds what is being reported and the model is measuring its own quadrature.
That choice is a judgement and it is a judgement about a measured sequence rather than about a geometry, which is the difference this essay is about.
Why the boundary is a real limit rather than a tuning parameter
A reader might reasonably ask why the quadrature is not simply refined further, and the answer is that it can be and it does not help much.
The cone’s angular radius is fixed by the geometry: 25.8° for opposite faces in a cube, and similar for the adjacent ones. Resolving a three-degree lobe inside a 25.8° cone needs an angular resolution of about a degree, which is roughly seven hundred directions per cone and half a million bidirectional evaluations per patch triple — a factor of four hundred over the current cost.
That is affordable and it would still not be right, because the model’s commitment is not only about the quadrature. A patch is being treated as a point, and a real patch at roughness 0.05 has a spatially varying return across its own extent — the near end of a wall sees the mirror direction and the far end does not. Averaging the lobe over the cone approximates that and does not capture it.
The limit is the patch discretisation rather than the angular one, and the repair for it is more patches, which is a different solver. That is why the boundary is stated as where the method stops rather than as a setting.
Everything this round publishes about scenes lies to the right of the boundary, and the figures are drawn so that the left-hand end of every roughness axis is 0.15 rather than zero. That is a small editorial decision with a purpose: an axis that began at zero would invite a reader to extrapolate into the region the model cannot report, and extrapolating a curve that rises steeply towards a boundary is exactly the wrong thing to do.
The published range is also where nearly all architectural coatings sit, so the restriction costs less than it might. What it costs is the case where the effect would be largest, which is the shape of every restriction in this collection: the boundary of a method tends to sit exactly where the phenomenon becomes interesting.
What is inside the boundary and what is not
The range from 0.15 to 0.8 covers most architectural and industrial coatings. A flat wall paint is around 0.6 to 0.8; an eggshell or satin finish is 0.15 to 0.3; a semi-gloss is around 0.1.
Outside it are the finishes anybody would call glossy: a gloss enamel at 0.05, a varnish at 0.02 to 0.04, a polished metal or a mirror at effectively zero. Those are exactly the surfaces where the effect would be largest, and this model cannot report them.
That is a real limitation and it is worth being blunt about which way it cuts. Every number in this round’s scene work is a lower bound, because the surfaces the model cannot reach are the ones with the strongest lobes. A room with gloss-painted joinery or a lacquered table has a departure from the Lambertian answer larger than anything measured here, and how much larger is not known.
Why the reduction check does not catch it
The reduction check is exact and it is silent about this boundary, which is worth understanding because it is a general property of limit checks.
Setting the lobe to zero removes the thing the quadrature was failing to resolve, so the check passes at every roughness — it is not a check on the lobe at all, it is a check on the geometry and the linear algebra. A solver could reduce perfectly and still be nonsense at every non-zero roughness.
That is why two checks are needed and why they are different in kind. The reduction verifies the machinery against a known answer; the refinement verifies that the machinery’s new degrees of freedom are being computed rather than guessed. Passing one and not the other is a specific and common failure.
The general form: a limit check tests the model at the point where the new feature is absent, which is the one place the new feature cannot be wrong. It is necessary and it is never sufficient.
The same shape, twice before
This collection has now made the same mistake three times, in three different quadratures, and the pattern is worth naming.
The hemisphere quadrature was passing its convergence check by luck: forty by ninety-six and ninety-six by two hundred and fifty-six agreed to a part in ten thousand on the sharpest lobe in the file, and both were sampling that lobe at a node. Rotating the light moved the answer by two and a half per cent.
A quadratic was believed further than it could be: a local expansion checked at points near its centre and used at points far from it.
And here a one-point quadrature was applied to an integrand that varies by orders of magnitude across its cell.
The common element is that a convergence check tests the parameter it refines and nothing else. In the first case refining the grid and not rotating the light; in the second, checking near the centre and not far from it; in the third, refining nothing at all because a single point has no refinement. Each time the fix was to vary something the answer should not depend on.
That figure is worth putting beside the resolution one because it shows what a check on the wrong quantity would have concluded. The lobe’s albedo is a smooth, gently-varying function of roughness all the way down to 0.02, computed by a hemispherical quadrature that resolves it perfectly well — so a solver that checked its lobe by integrating it would find nothing wrong at any roughness.
The failure is not in the lobe. It is in the transport, where the lobe is evaluated between two specific directions rather than integrated over a hemisphere, and a quantity can be perfectly integrable and badly point-samplable at the same time.
A component can pass its own checks and fail inside the assembly, which is why the refinement test is run on the solver’s output rather than on its parts.
What was computed, and how
The two refinements are eight directions per ring with two rings, and sixteen directions per ring with five rings — so thirty-three against eighty-one sample directions per cone, and roughly a sixfold difference in the number of bidirectional evaluations.
The comparison is the colour of the floor’s return towards the front of the room, which is the same quantity every other figure in this family reports, so the movement is directly comparable with the departures being measured.
The assertion the figure carries requires the movement to fall monotonically as the lobe widens. That is a shape claim rather than a tolerance and it could fail — a solver with a bug in its cone construction would very likely produce a non-monotone sequence.
A stated boundary is worth more than a described one. There is a case for measuring a boundary rather than describing one that goes beyond tidiness, and it is about what a reader can do.
A described boundary — this model is unsuitable for very glossy surfaces — leaves every judgement to the reader and gives them nothing to judge with. Is a semi-gloss paint very glossy? Is a satin finish? The description cannot say, and a reader who guesses wrong gets an answer with no warning attached.
A measured boundary is a number the reader can compare against their own case. Roughness 0.15 is a stated place on a stated scale, the sequence approaching it is published, and anybody with a coating specification can decide whether they are inside it.
The cost of measuring it was one extra run of a solver that already existed. That ratio — a large gain in usability for a small addition of work — is why this collection tries to put a number on every limitation it states, and why an unmeasured caveat is treated as an unfinished one.
Where the model stops
This essay is where the model stops, and the remaining limits are the ones stated in the solver’s own account: patches are points, the room is a cube of six flat faces, the lobe is isotropic, dielectric and single-scattering.
The boundary is measured for a cube. A room of different proportions has different form factors and therefore different cone radii, so the boundary moves — a long thin room has smaller cones between its distant faces and a lower usable roughness, and a nearly cubical one has the boundary computed here.
And the boundary is measured on one quantity, the floor’s return towards the front. Another quantity might be more or less sensitive, and no survey of that has been done.
One consequence for how the round’s scene numbers should be read follows directly and it is the reason this essay sits where it does. Every departure reported in the scene work is measured at a roughness the solver can resolve, so every one of them is a lower bound on what a glossier surface would give — and the curve rises steeply towards the boundary, so the bound is not a tight one.
That is stated in each essay’s own limits section and it is worth having in one place: the departure at eggshell is 4.89 ΔE₀₀, the curve is still rising at the left-hand end of the axis, and what a gloss enamel would give is unknown rather than small. The lobe’s share reaches half on a dark sample, which is where the largest effects would be.
The generalisation
The habit is about knowing what a discretisation integrates over.
Replacing an extended object by a point is a quadrature of one node, and its accuracy depends on how much the integrand varies across the object. That variation is a property of the physics being modelled rather than of the mesh, so the same mesh can be perfectly adequate for one material and catastrophic for another — which is exactly what happened here, where a Lambertian wall and a glossy one differ only in a parameter.
The move is to measure the boundary rather than to argue about it. Refine the discretisation, watch the answer, and report the roughness at which the movement exceeds what is being reported. It costs one extra run and it converts a caveat into a number.
The failure mode is to state the limitation in prose and let the reader judge. A limitation without a number is a limitation nobody can act on, and it is usually stated because measuring it looked like more work than it is.
Who found it, and when
Quadrature error in radiosity form factors has been studied since the method arrived in graphics, and the standard treatments are about the geometric term rather than about the reflectance — the same distinction between a form factor and what it multiplies that this collection had to make when the form factors were written. Directional methods have the problem this essay is about and the graphics literature’s answer was to move to path tracing, where a lobe is importance-sampled rather than integrated over a fixed grid.
Importance sampling is the right answer and it is not available here, because the solver’s unknowns are indexed by patch pairs and there is no path to sample along. A method whose discretisation is fixed by its unknown has to resolve everything with that discretisation, which is the structural reason directional radiosity was abandoned.
Where the ladder goes next
The solver’s boundary is measured and its results stand inside it. What remains is to say how small the driving quantity is: a tenth of the return arriving white is enough to move a room by five colour differences, and that ratio is worth understanding on its own.
Named alongside this one
Essays reaching for the same objects. Nobody chose these; they are what the index of named objects makes visible.
- The boundary belongs to the quadrature bidirectional reflectance · convergence · modelling assumption · quadrature · radiosity · specular
- The endpoint term has a name audit · convergence · falsification · measurement error · quadrature
- A finer reading of a coarser table convergence · measurement error · modelling assumption · quadrature
- A lobe takes colour out of a bounce bidirectional reflectance · modelling assumption · radiosity · specular
- A room is not a sphere bidirectional reflectance · quadrature · radiosity · specular
- Every scene in this collection was matt audit · modelling assumption · radiosity · specular
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.
AuditBidirectional reflectanceConvergenceFalsificationForm factorMeasurement errorModelling assumptionQuadratureRadiositySpecular