After going through the exercise of creating lens profiles to corect the vignetting inherent in wide-angle pinhole photos, I thought I'd offer some feedback on the data model. Not a complaint, just an observation.
The model requires the vignette to be represented as the coefficients for 2nd, 4th, and 6th degree terms in a polynomial. This representation offers a very close approximation of real falloff for moderate ƒ/Dmax ratios, but cannot represent the *actual* falloff and the approximation gets increasingly poor as the ratio shrinks.
Here's a graph of the actual falloff as expressed by the function y = 1/(((d/ƒ)^2)+1) graphed against the representations created by the Lens Profile Creator, which offers a handy tool for fitting the curve (click it to see it bigger):
The first curve is a hypothetical 6x6cm frame with a "normal" 80mm focal length, as if one converted an old 6x6 film camera to pinhole. The approximation here is fantastic.
The second is my 6x12cm pinhole camera with a 40mm focal length. This is fairly common; both my $480 Zero 612F and the $50 Holga 120WPC use this combination. The fit here is pretty good, but it's a good thing the frame isn't any wider.
The last is a relatively common large-format pinhole ratio, with a 25mm focal length on 4x5" film. The Zero 25B uses this combination.. As you can see, the model is quite poor at representing this curve.
Since the actual falloff due to distance can be expressed by the simple formula above, it's too bad it can't be represented precisely. Maybe if someday there's a v2 of this specification...
That would help, but not nearly as much as a hybrid approach -- allow all photos to get corrected using a mathematically proper model following the 1/(((d/ƒ)^2)+1) formula, *in addition* to a polynomial correction to account for other vignetting factors.
All photos taken with a flat sensor or film have a falloff curve that matches that formula, though in the "normal" case the effect is quite small. (Does it get screwed up at large apertures or with funky lens designs like retrofocus lenses? I'm not enough of an optics guy to figure that out without devoting some serious mental energy, and it's too late at night for that right now.)
No additional tags would be needed in the profile -- in most cases you already know the focal length and frame size, which is all you need to calculate it. You could have a boolean tag for whether to perform that correction or not I suppose...
I've been experimenting with fitted polynomial curves on the worst of those three curves in the original post. I've found that a 6th-degree polynomial fits almost perfectly (R^2 = 0.99999) if you include the 1st, 3rd, and 5th degree terms, rather than limiting it to the 2nd, 4th, and 6th as the model does today. Just adding an 8th degree term doesn't help nearly as much.
Ultimately we will probably just need a list of data points describing the falloff in the profile, then have the engine construct the vignette (and corresponding compensation gain) dynamically at runtime. One of the issues with a smooth continuous model is that it cannot model discontinuities well (and these can happen in practice due to different physical mechanisms of vignetting).