Hide a photo inside a clear 3D print. Shine a light through and it lands on your wall.
Solved on this device. Nothing is uploaded.
Figures 1 to 7 are not separate demonstrations. They are seven views of one object, and the six controls below are what define that object, so changing any one of them redraws all seven. The single exception is the lamp in Fig. 7: it moves the light and leaves the object alone.
Nothing is solved again, so these three move as fast as you can drag them.
How far the wall is from the body. Further away needs deeper bumps, because each ray has to be aimed by a smaller angle.
How big the printed square is. This is the size of the object, not the size of the picture on the wall.
What you will print it in. Materials that bend light harder need shallower bumps to do the same job.
Each of these changes the question, so the solver runs from the start. If the projection looks softer than your picture, softening and grid are the two that decide it.
How dark the darkest part is allowed to ask to be. The object does not block light, it only moves it, so a truly black region would mean shoving every last ray somewhere else. Ask for less black and the fit improves.
Blurs the request before solving it. Turn it down for a sharper picture and a worse fit; turn it to zero and the solver usually gives up. Measured on a hard two-tone target: 23% error at zero, 9% at one cell, 7% at two.
The resolution the picture is solved at, and the hard ceiling on how much detail can survive. It stops at 128 on purpose: measured, a 256 grid was less accurate, 15% against 9%, and took twenty-five times as long, because finer grids resolve steeper local slopes than the design approximation can carry.
Every figure above assumes the light arrives in parallel rays, as sunlight does. This one does not: it starts with a real lamp a short way behind the body, which is why its wall already disagrees with Fig. 3. Drag the lamp down to move it further away and up to bring it closer, where the picture swells and smears; drag sideways to slide it off axis. The dashed rail shows the travel, and the button below returns to parallel light. Nothing here changes the object, so no other figure moves. This is the single most common reason a print disappoints in the hand.
Or drag the lamp up and down the figure, which drives this same value. It starts part way along on purpose, so there is travel in both directions. The very top stop is parallel light, which is what sunlight is and what the whole derivation assumes.
The cost is this lamp scored against parallel light on an otherwise identical trace, so it isolates the lamp and nothing else. A lamp moved sideways throws a trapezoid, and there is no honest way to score a trapezoid against a square picture, so the figure is withheld rather than guessed.
What the verdict in the corner of Fig. 3 means. It is the first number in this list, sorted into three bands. Under 12% off is within tolerance: the picture is there. Up to 25% is marginal. Above that, or if light is flying off the wall, it reads out of tolerance, which is a refusal rather than a score. A shape would still be produced, and it would still look plausible, and it would not throw your picture, so it is not offered. Softening set to zero lands here most of the time, and that is the physics being honest rather than a fault.
Why the projection is softer than the picture you dropped in. Three reasons, in order of size. The object redistributes a fixed amount of light rather than blocking any, so a bright region has to borrow from its neighbours, and borrowing is smooth: no single smooth surface can make a hard edge. The picture is then reduced to the solve grid, at most 128 cells across, which is the detail ceiling. And softening is applied deliberately on top, because a hard-edged request measurably fails. A cat's whiskers are finer than any of those three limits and will not survive; the shape of its head will.
How the two numbers differ. The body is designed with a thin-element approximation, then checked by tracing exact refraction through the surface that approximation produced. Agreement is the second number. The gap between them is what the approximation costs, and it is printed rather than hidden. An earlier build had the deflection sign inverted, and the approximate check agreed with itself to 1.6% while 40% of the light flew off the wall.
Why this is not a lithophane. It is the nearest familiar thing and the mechanism is the opposite. A lithophane blocks light: it is opaque material of varying thickness, thick regions transmit less, and the picture is a shadow cast by absorption, which is why it comes out dim and why holding one up shows you the picture. This bends light instead. The material is clear, the thickness barely changes, and the whole picture is carried by the slope of one surface steering each ray sideways to where it is needed. Nothing is absorbed, so the bright parts end up brighter than the beam that went in, because light was moved into them rather than removed from around them. The price is that a hard edge is unreachable, and that it needs a small bright source rather than any lamp.
What it needs to work in the hand. A small bright source: a phone torch, a spotlight, direct sun. A broad or diffuse lamp produces a blur, not a picture, because the derivation assumes rays arriving parallel. Print in a clear material, keep the flat face toward the light, and set the body at the throw distance above.
Four ways of looking at the same solved body, in the conventions a workshop drawing uses. Skip this section freely; nothing here is needed to download the file.
Solver, verification suite and the derivation are in this repository. Every check runs on exact answers where exact answers exist, including the Poisson operator against a closed-form solution at second order, and every surface is re-traced by exact Snell refraction rather than by the approximation it was designed with. Figures 1 to 7 are computed live in this tab.
Solver, page and drawings. Built in the open, and every measured number on this sheet is reproducible from the repository.
Opened times