Guide
Designing a camera triplet, start to finish
Modernizing an 1896 patent triplet into a 100 mm f/4.5 camera lens: the merit function, the optimizer, the failures, and a build yield you can hold a shop to. Ten steps, every number computed in Ray-Optics Designer, including the ones we had to throw away.
What you get at the end
- A 100 mm f/4.5 air-spaced triplet covering a 0 to 20° half-field at three wavelengths, in three catalog glasses, with every airspace, center and edge thickness buildable — and the edge requirement held by the merit function, not by hope.
- Its fabrication budget: tolerances a shop can hold, and the predicted yield at them — 98.0 %, pooled over four 2000-trial Monte Carlo runs you can reproduce exactly.
- The design as a share link and as a .zmx file you can send to anyone.
The job
A 100 mm lens for an instrument camera. Nothing exotic; that is the point. The exercise is the workflow: how a requirement becomes a merit function, how an optimizer is steered, and how a design earns the word "buildable."
| Item | Value |
|---|---|
| Focal length | 100.0 mm ± 1 % |
| Aperture | f/4.5 (entrance pupil 22.22 mm) |
| Field | 0 to 20° half-field |
| Wavelengths | d, F, C (587.6 / 486.1 / 656.3 nm) |
| Image quality | tolerance criterion C ≤ 0.060 mm as built, yield ≥ 90 % |
| Total track | ≤ 115 mm, front vertex to image |
| Buildability | center ≥ 2.0 mm glass / ≥ 0.5 mm air, edge ≥ 1.0 mm |
| Glasses | catalog, mainstream (n_d 1.5 to 1.85; crowns V_d 50 to 65, flint 25 to 45) |
Every one of those limits is ours, and we will say so again where it matters. A real customer hands you some of these and forgets the rest. But the two that bite in this guide are on the list — we wrote them down ourselves, and then failed to tell the optimizer. That gap, between the spec you hold and the merit you type, is what this guide is secretly about. The image-quality line deserves one note now: C is the tool's own tolerancing criterion, an RMS spot radius combined over the field and wavelength set, which means the spec is machine-checkable by the same engine that will check the build yield later. A spec your tools cannot evaluate is a wish.
What C is
the tolerancer traces a bundle of rays for every field and wavelength combination, takes each bundle's mean squared spot radius about its own centroid, averages across bundles, and takes the square root. One number, in millimeters, for the whole system. It is deliberately the same quantity the optimizer's spot operands minimize, so the design merit and the build spec live on the same scale.
Glass words, all four at once
Optical glasses live on a map with refractive index n_d on one axis and the Abbe number V_d on the other. V_d measures dispersion, how much the index changes across the visible; HIGHER V_d means LESS color spread. Glasses on the high-V_d side are called crowns, the strongly dispersive ones are flints, and a color-corrected lens almost always pairs the two so their color errors cancel. The requirement table's "crowns V_d 50 to 65, flint 25 to 45" is a box drawn on that map.
Step 1
Start from a patent, not a blank table
In 1896 Harold Dennis Taylor patented the air-spaced triplet: two crown elements with a flint between them, arranged so that the primary aberrations can all be corrected with just three pieces of glass. US Patent 568,052 prints the full prescription — radii, thicknesses, airspaces, glass indices and dispersions — and it loads in the tool as the Cooke Triplet (Taylor 1896 patent, rated f/6.5) preset.
Starting from a patent is not cheating. It is how lens design has actually worked for a century: a starting point of the right type, then optimization toward your requirement. The optimizer we are about to use is a local method; it descends from where you put it, and where you put it decides which lens you get. A patent start puts you inside the right valley. We will see what happens when you wander out of it.
One sentence of physics: every surface adds its own share to each of the five primary aberrations and the shares simply add, so a triplet is three pieces of glass arranged to make five columns cancel. Full treatment: the Seidel ledger of a real lens, which starts from this same 1896 patent.
Reading old patents
Taylor's tables print radii by convexity ("+ means convex"), not by direction. Modern software signs a radius by which side its center of curvature sits on, so the rear surfaces flip sign on conversion. The preset has this settled, but if you ever transcribe a patent yourself, check the printed focal length reproduces before trusting the signs.
Step 2
What f/4.5 asks of an 1896 lens
The patent rates the lens at f/6.5, focal length 98.27 mm, designed for one wavelength alone. Our job is f/4.5 at three wavelengths, and the aperture change is the violent one: opening from f/6.5 to f/4.5 more than doubles the light, and the blur grows faster still, because the ray heights that drive the aberrations grow with the aperture and the aberrations grow faster than the heights.
One sentence of physics: the primary aberrations scale with powers of the aperture up to its cube, which is why one stop of speed can turn a sharp lens into a soft one. Full treatment: spherical aberration, and how it scales with the aperture.
The analysis panel puts numbers on it. At the patent's own aperture the spot panel reads a combined RMS spot radius of about 128 µm over our field set. Open the pupil to 22.22 mm and it reads 275 µm, with the 20° bundle at 361 µm — and the panel reports something else too. At the patent's aperture, all 381 rays of the panel's grid reach the image; at f/4.5, 101 of the 381 never arrive, clipped at the surface apertures on the way. A quarter-millimeter of blur, measured after the worst rays were thrown away, is not a camera lens. That distance, 275 µm down to a few tens, is what the optimizer has to cross.
Step 3
The merit function: what you actually tell the optimizer
An optimizer does not know what a lens is for. It knows a list of operands, each a number with a target and a weight, and it moves whatever you flagged as variable to shrink the weighted sum of squared errors. Everything that goes right or wrong from here is in that list.
Open the Optimize tab and pick the Achromat recipe. It builds the list for you: one spot-size operand per field, an axial-color operand, and a focal-length anchor seeded with the design's own value. Retype the anchor's target to 100. Then flag variables: all six curvatures. The image distance is already flagged; the tool does that by default, and the note below says why.
Here is the list, in full — this is the entire merit function the first run minimizes:
| Operand | Evaluated at | Target | Weight |
|---|---|---|---|
| RMS spot size | 0° field, d (587.6 nm), 19 rays | 0 | 1.0 |
| RMS spot size | 14° field, d, 19 rays | 0 | 1.0 |
| RMS spot size | 20° field, d, 19 rays | 0 | 1.0 |
| Axial color | F−C focus shift, on axis | 0 mm | 0.3 |
| Focal length | d | 100 mm | 0.05 |
Five rows. The weighted sum of their squared errors is one number, and on the patent start that number is 0.870 — the value the widget below shows before you touch anything, and the first point of step 4's convergence. When step 4 makes the run honest, the three spot rows become nine (the same three fields at F and C as well); when step 6 finds the lens you cannot build, three edge rows join. Everything the optimizer does in this guide is done to this list.
Why the image distance is a variable
with the focus frozen, the optimizer buys back defocus the only way it can, by bending curvatures — you get a worse lens standing at a plane nobody asked for. Leaving the last gap free costs nothing and lets every other variable do its real job. The same rule holds when you evaluate a design by hand: measure spots at the design's own image plane, not at the textbook focal point.
Try to delete the focal-length anchor and the panel refuses to run, telling you the optimizer would shrink the lens. Believe it. Aberrations scale with size, so a spot-only merit is minimized by making the lens smaller forever. Every merit needs one operand that pins the scale. This is the first of several places the tool declines to let you make a classic mistake; the interesting mistakes remain fully available.
The optimizer and the tolerancer run on our servers and are part of Ray-Optics Design Pro; the analysis panels are not, though they need a free account. Every number either one produces is printed in this guide.
Before you run it, drag the three sliders below and watch the number the optimizer will descend.
Step 4
The first optimization run, and a lesson about metrics
Run it. Thirty-five iterations, merit 0.870 down to 0.0193, and the convergence plot flattens: the one-wavelength design. Focal length 100.09 mm. The spot panel now reads 28 / 61 / 90 µm across the field, combined 65 µm. From 275 µm, one click and thirty seconds of server time.
Now make it honest: the requirement is three wavelengths, not one. Duplicate the spot rows for F and C (nine bundles), and free the two airspaces as well, and run again. Merit 2.56 down to 0.0253 — and the spot panel reads 41 / 82 / 116 µm, combined 85 µm. The three-wavelength design looks worse on screen than the one-wavelength design it replaced? Score both designs both ways and the puzzle is the lesson:
| Design | Its own nine-bundle merit (server) | Spot panel, combined (on screen) |
|---|---|---|
| One-wavelength run | 0.0320 | 65 µm |
| Three-wavelength run | 0.0253 | 85 µm |
Each column crowns a different winner, and neither is lying; they are answers to different questions, asked with different rays through different glass. The merit judged the design at all three wavelengths through the model glasses the run carried on the wire. The panel is drawing the patent preset's fixed-index media, which carry no dispersion at all — the chromatic error the second run spent real blur correcting is invisible on screen, and stays invisible until actual catalog glasses land in the prescription, which is exactly what the next step does. A merit and a design are one object: you compare designs on the metric you optimized, and you judge the job on the spec criterion you fixed in the requirement table — which is why we fixed it first.
One sentence of method: a merit function measures what you asked, not what you meant — the same lesson the coating guide hits when a merit yield and a spec yield diverge. Full treatment: the AR coating guide.
Step 5
Let the glasses move, and watch what greed does
The patent's glasses are 1896 glasses. The tool lets glass become a variable through a model glass: a fictitious material described by its index and dispersion that the optimizer can slide across the glass map — the n_d-versus-V_d plane every real glass lives on — snapped to the nearest real catalog glass when the run ends.
First, do it greedily: free the index and dispersion of all three elements with no limits. The result is spectacular garbage. The optimizer runs all three glasses to the same exotic corner of the map, the snap lands all three elements on the same glass, one airspace comes back at −3.0 mm (the elements overlap in space), and the two-number snap report reads: model-glass merit 0.0039, snapped-catalog merit 0.118. The fictitious lens was thirty times better than anything real, and the real version is nearly five times worse than the design we started the run with.
Read that report the way the tool means it. The first number sells a lens nobody can build; the second is the lens you would actually get. A model glass is a direction to search, not a destination, and a variable with no bounds is an invitation the optimizer always accepts.
Now do it properly. Put floors under the airspaces (0.5 mm). Box the glasses onto the mainstream map: crowns between V_d 50 and 65, the flint between 25 and 45, indices 1.5 to 1.85. Run again from the step-4 design. The snap lands three real, boring, buildable glasses: N-PSK53 and TAF1 for the crowns, LLF1 for the flint, and the report reads model 0.0080 / catalog 0.0173, a design better than its start even after paying the snap. One polish run at finer pupil sampling settles it.
One sentence of physics: a glass's index varies with wavelength because electrons in the material resonate at ultraviolet frequencies, and the Abbe number is the one-number summary of that curve. Full treatment: Refractive Index and the Sellmeier Equation.
One honest wrinkle
the box bounds the model variable, not the snap. LLF1's true V_d is 45.75, a hair outside our 45 flint limit, and the snap picked it anyway because it was nearest on the map. The tool warns that the box rows are dropped once glasses freeze to catalog values. If the box were a hard requirement rather than a search region, you would reject the snap and re-run; ours is a search region.
Step 6
Edge thickness, and the lens you cannot build
The design converges, every number is green, and it is not a lens. This step is why.
Free the center thicknesses (the last structural freedom) with 2.0 mm floors and re-run. Two things happen that deserve calm. First, the starting merit displays as 1521: the patent thicknesses sit below the new floors, and bound penalties are enormous until the optimizer walks the violations off, which it does. Second, the run stops at the iteration cap saying completed, not converged; run it once more from where it stopped and it converges in one iteration. It was done; now you know.
The result: merit improved, all thicknesses sitting politely on their floors. And now the audit. A lens element is a disc. Its center thickness is what the prescription states, but its edge thickness is the center minus the front sag plus the rear sag — the sag being how deep each curved surface bows at the clear semi-diameter — and sag grows fast on steep surfaces. Do the three-line calculation at each element's clear semi-diameter and the front element of our converged design has an edge thickness of −2.43 mm. Minus. The two surfaces cross inside the glass. No operand complained because no operand was watching: rays trace through the mathematical surfaces without objection, and center-thickness floors say nothing about edges.
The optimizer satisfies the merit you wrote, not the lens you meant.
You could patch this by hand: compute the sag deficit, raise each center floor to cover it, re-run. We tried, and it is worth knowing that it almost works and exactly how it fails: the floor you derive is frozen at today's curvatures, and the optimizer keeps moving the curvatures, so the guarantee silently expires while the merit keeps improving. Doing exactly that, we watched a design come back 22 µm shy of its own edge spec — with every floor it had been given satisfied.
The right fix is to state the requirement where the optimizer can see it. Add a Minimum edge thickness operand per element: the glass gap, the minimum edge, and the clear semi-diameter to measure it at, which the tool seeds from the design's own traced rays. The sag is now evaluated at every iteration, so the constraint moves with the curvatures instead of trailing them. Concretely, three rows join step 3's list — minimum edge 1.0 mm per element, measured at the traced semi-diameters 12.238 / 11.1379 / 15.5956 mm — alongside the nine spot rows, the color and focal-length anchors, and the airspace and thickness floors already in place. That full list, not any panel number, is what the optimizer is minimizing from here to the finished design. One thing to know: the seeded semi-diameter freezes when the run starts, and the clear aperture itself moves as the design does — so after the run converges, read the new clear apertures and check the edges once more at those. Ours held with margin; if yours does not, re-seed and run again.
One sentence of physics: sag is the depth of a sphere at a given radius, R − √(R² − h²) for height h, and every edge-thickness question is two of them and the center thickness. Full treatment: edge thickness, in the Ray-Optics Designer manual.
The sag audit, for checking any design by hand
for a spherical surface of radius R at semi-diameter h, sag = R − sign(R)·√(R² − h²). Edge thickness = center − sag_front + sag_rear. The clear semi-diameter (the widget calls it the clear aperture, CA) comes from the real rays: the largest ray height on the surface across every field and wavelength, which the tool reports. Thirty seconds, and it would have caught this lens.
Step 7
Total track, the requirement you forgot to state
One more escape attempt, because the optimizer had one more waiting. With the edges now governed, the next run improved the merit by stretching the rear airspace to 54 mm — a 137 mm-long lens against the 115 mm line in our own requirement table. It was in our table and it was not in the merit, and the merit is the only document the optimizer reads. "The customer obviously wants it short" weighs exactly zero. And this is not the optimizer misbehaving: we checked whether it had been thrown there by the bound penalties by re-running the identical problem from a clean, feasible start — every thickness hand-set onto its floor first, so no penalty was active at the first step — and it returns to the same stretched design to the last digit. That long lens genuinely is the unconstrained optimum. It just is not the job.
Cap the airspaces (6 mm front, 16 mm rear), state the edge rows, run to convergence, and the design comes home: track 114.9 mm, with 0.07 mm of the requirement to spare; focal length 100.13 mm; combined RMS about 52 µm on the spot panel. Compactness cost roughly 10 µm of spot against the stretched lens, and now you know the price of the requirement instead of suspecting it.
One last exploration before freezing: re-open the glass choice inside the final geometry, in case a better triple exists here. The run limps to the iteration cap and snaps to a catalog design more than twice as bad. Reject it and keep what you have. A returned design is an offer, not a decision; some runs exist to be thrown away, and the run counter does not distinguish the ones you keep.
The final design:
| # | R (mm) | t (mm) | Glass |
|---|---|---|---|
| 1 | 27.5968 | 5.2086 | N-PSK53 |
| 2 | −56.2808 | 0.5000 | air |
| 3 | −46.4520 | 2.0000 | LLF1 |
| 4 (stop) | 25.0483 | 15.9994 | air |
| 5 | −367.6079 | 8.9995 | TAF1 |
| 6 | −70.7354 | 82.2185 | air (to image) |
R is each surface's radius of curvature; t is the distance from it to the next surface, so the last t is the distance to the image; the stop is the aperture that limits the beam.
Edge thicknesses at the traced clear apertures: 1.06 / 6.00 / 7.28 mm — the front element sits just above the 1.0 mm line the operand was told to hold, and the rear element went thick and nearly flat, which is the operand and the airspace cap negotiating in public. Note where the front airspace ended: on its 0.5 mm floor. Remember that; it comes back in step 9.
No airspace cap
track 136.8 mm — 21.8 mm over the requirement
Airspaces capped
track 114.9 mm — 0.07 mm of the requirement to spare
Step 8
Reading the spot diagrams and the compromise
Before tolerancing, look at what the analysis panels say about the finished design, because the shop will.
The spot grid: 36 / 40 / 71 µm RMS at d across the three field points 0, 14 and 20°, combined 52 µm over the full grid. The image plane the optimizer chose sits 0.35 mm inside the axial best focus, which is the field-curvature compromise in person: it gives away axial sharpness (21 µm was available on axis) to hold the field edge, exactly what an equal-weight merit asks for. The per-field best-focus offsets tell the same story as a list: +0.35 / −0.18 / −0.38 mm from axis to edge. Axial color, F focus to C focus, is −0.26 mm, the classic residual of a V_d 63 / 46 / 50 glass triple.
One sentence of physics: with astigmatism corrected the sharp image still lies on a curved surface set by the glass alone, so a flat sensor trades the center against the corners. Full treatment: field curvature and the Petzval surface.
Two panels this step leans on
a ray fan plots each ray's landing error against where it crossed the pupil, one curve per field, so the shape of the curve names the aberration; the Seidel table splits the third-order blur into its five classical contributions per surface, so you can see which surface causes what. Both are in the tool on the share link below, and both tell this same compromise story in more detail.
A designer who reads the compromise can re-weight the merit and move it; a designer who reads one summary number cannot.
For scale: the diffraction-limited spot radius at f/4.5 is about 3 µm. A three-element lens covering a 20° half-field does not go there, at this speed, with spherical surfaces; that is what four-element designs and aspheres are for, and the tool will happily take you there another day.
| Line | 0° | 14° | 20° |
|---|---|---|---|
| d | 36 µm | 40 µm | 71 µm |
| F | 33 µm | 40 µm | 72 µm |
| C | 41 µm | 39 µm | 69 µm |
Step 9
Tolerancing: the budget conversation
A design is a claim about one perfect lens. A shop builds a distribution of imperfect ones, and the spec we wrote in the requirement table (C ≤ 0.060 mm, yield ≥ 90 %) is a claim about that distribution. Time to test it.
Open the Tolerance tab and enter a first budget of round, plausible shop numbers across all 35 rows: 5 fringes on every radius, ±0.1 mm on every thickness and airspace, ±0.001 on index, ±1 % on V_d, ±2 arcminutes on tilts, ±0.02 / 0.05 mm on surface and element decenters. Run sensitivity first: the engine evaluates the criterion at plus and minus the full tolerance, row by row, with the refocus compensator on, and ranks what hurts.
What a shop hears when you say "5 fringes"
a fringe is half a wavelength of surface-height error read on a test glass, here at the 546.07 nm test line, so 5 fringes is a radius allowed to deviate by about 1.4 µm of sag over the test aperture — a routine polish. An arcminute is 1/60 of a degree of tilt. Decenter is sideways displacement: surface decenter means one surface slid off axis (a polishing/mounting error), element decenter means the whole lens slid (a seating error). The two are different physical mistakes and get separate rows.
The table is a rout. One row dominates everything: the front airspace, nominal 0.50 mm — the one the optimizer parked on its floor — where ±0.1 mm doubles the criterion; the next-worst row moves it a quarter as far. The optimization packed leverage into the tightest gap it was allowed, and the tolerance table is the design process talking back, telling you which of the optimizer's choices you will pay for on the bench. The top of the ranking:
| Row (± the full tolerance) | ΔC, compensated, worse sign |
|---|---|
| Front airspace, ±0.1 mm | +0.055 mm |
| L2 element decenter, ±0.05 mm | +0.013 mm |
| L1 element decenter, ±0.05 mm | +0.011 mm |
| L2 element tilt, ±2 arcmin | +0.0050 mm |
| L2 front-surface tilt, ±2 arcmin | +0.0047 mm |
The compensator
every perturbed lens is refocused (the image distance re-solved) before scoring, because every real assembly gets a focus adjustment. Compensated results are compared against the refocused nominal, not the raw prescription. The tool reports both baselines; comparing a compensated distribution to an uncompensated nominal is how you accidentally report that errors improve a lens.
Now Monte Carlo, 2000 seeded trials, every row drawn at once: yield 35.6 % at C ≤ 0.060. The median build fails. First budgets are supposed to do this; their job is to be argued with, row by row, at prices a shop recognizes. Tighten only the hot row, the front airspace, to ±0.02 mm: yield 63.4 %. Tighten the assembly family (tilts to ±1 arcminute, decenters to ±0.01 / 0.02 mm): yield 98.0 %, and the 90th-percentile build sits at C = 0.056, inside spec with margin. Then re-run the final budget at three more seeds before believing it — a yield from one random draw is an anecdote: 98.1, 98.1 and 98.0, pooling to 98.0 % over four independent 2000-trial runs. The seeds are printed in the widget, so you can reproduce every trial of every one.
What did the spec cost? Radii and glass stayed at catalog-commodity grade; the money went to two lines: one airspace at ±0.02 mm and element seating at 1 arcminute / 20 µm. That sentence is the deliverable of tolerancing, and no single sensitivity number could have written it.
Step 10
What you hand off
Three artifacts leave this page with you.
The design in the tool: one share link opens the finished triplet, rays traced, in Ray-Optics Designer, where the analysis panels this guide read — layout, spots, ray fans, the Seidel table, chromatic shift — are yours to repeat, and the prescription is yours to edit.
The .zmx file: one click exports as .zmx, the format Zemax OpticStudio and other sequential design tools read — catalog glasses named, ready for whoever asks "can you send me the lens?"
The fabrication data: the prescription table and the final tolerance budget, which together are the technical core of a shop drawing. What this guide's tables do not carry, a real print must: clear apertures per surface, chamfers, coatings, cosmetics, and the mechanical datum scheme that gives "±1 arcminute of element tilt" a physical meaning. Fringes here follow ISO 10110-5 convention at the 546.07 nm test line.
What this guide did not model
Distortion never entered the merit; at a 20° half-field this design carries a few percent, fine for an instrument camera, unexamined here because no operand watched it. No vignetting: the tool traces the full aperture at every field, so the 20° spots are, if anything, pessimistic against a real mount that clips the rim. Ghost reflections have their own tab in the tool, and coating design is its own discipline with its own tool — the Thin-Film Coating Simulator — and its own guide. And of the two constraints this guide handled by hand and by cap: edge thickness is now an operand in the tool precisely because this design demanded it, and total track still lives as airspace caps, a habit worth keeping anyway.
References
- H. D. Taylor, "Lens," US Patent 568,052 (1896). The starting prescription, radii, thicknesses and glass data. Sign convention for reading its tables per US Patent 540,122.
- P. Rudolph, US Patent 721,240 (1902), the Tessar, the other classic this tool ships as a preset and the natural next study.
- ISO 10110-5 / ISO 7944: surface form tolerances in fringes; the tolerancer's fringe rows follow this convention at the 546.07 nm e-line.
Open the finished design in Ray-Optics Designer — load it from the share link above, break it, and re-run the steps with your own requirement in the table. Every panel, operand and tolerance row this guide used is written up in the Ray-Optics Designer manual. Every optimization and tolerance run in this guide is replayed digit for digit on the benchmark page.