Post 103

Lights With Actual Shapes

Area lights stop pretending to be points: rectangles, disks, spheres, and tubes now integrate their real geometry, ported straight from the canonical LTC reference. IES photometric profiles finally shape beams like the fixture datasheet says. Also the case of a rectangle and a sphere that rendered pixel-identically for months.

Lux has had five area light types in the node browser for a while. A diagnostic render put a rectangle and a sphere side by side and measured the difference between them: zero. Not small, zero, to the pixel. Every area light was secretly the same point light wearing a different name tag, with an effective range of about one metre, which for stage lighting is less a range than a personal-space radius. IES fixtures uploaded their photometric curves to a GPU pool that no shader had ever read. The lighting rig was a cast list with one actor.

This release gives every light its own body. Rectangles, disks, spheres, and tubes are now shaded with Linearly Transformed Cosines, the technique behind area lights in most modern engines. We did not reimplement the paper from memory; the evaluators are ported line by line from the authors’ reference code, and the fitted lookup tables are the reference’s own binary tables vendored byte for byte, with a unit test that fails if a single texel ever drifts from the published data. When the test suite disagrees with Heitz, the suite is wrong by definition.

What changes on the floor

A four-metre LED batten now throws a four-metre stripe of light, elongated along its axis, with the specular streak stretching across glossy floors the way it does in every product demo of every engine that does this properly. A sphere throws a perfectly round highlight that widens with its true subtended solid angle. A rectangle and a disk of the same size finally disagree with each other, politely, at the corners. And the falloff is the real inverse-square family that comes out of the geometry, not a clamped window: a light three metres up actually reaches the floor, which audiences tend to expect.

IES profiles work end to end now. Feed an IesLight node a fixture file and the candela curve gates the beam: a hard 34-degree cone lights a crisp circle and nothing else, while the same fixture with a uniform profile washes the whole floor. The test for this renders both and checks that the only difference is the profile, which is the kind of sentence that should always have been true.

The fine print

The whole thing rides the cluster-light loop, so two hundred shaped lights bin and shade like two hundred of anything else. Elliptical disks with two different radii currently average them (the packed layout carries one radius); use a rectangle if your emitter is dramatically oblong. Shadows from area lights remain a future episode: /devlog/every-light-pulls-its-weight/ covered points and spots, and soft area shadows are queued behind them.

What it buys you

Build a light rig out of shapes instead of points. Softboxes read as soft, battens read as bars, bulbs read as bulbs, and the fixture file you got from the manufacturer behaves like the photometric diagram on page two of its PDF.

← All posts