pdfblur - generate views for depth-of-field blurring
pdfblur aperture nsamp viewfile
Pdfblur takes the given viewfile and computes nsamp views based on an aperture diameter of aperture (in world coordinate units) and a focal distance equal to the length of the -vd view direction vector. When rendered and averaged together, these views will result in a picture with the specified depth of field. Either pinterp(1) or rpict(1) may be called to do the actual work. (The given viewfile must also be passed on the command line to the chosen renderer, since pdfblur provides supplemental view specifications only.)
For pinterp, feed the output of pdfblur to the standard input of pinterp and apply the -B option to blur views together. In most cases, a single picture with z-buffer is all that is required to get a satisfactory result, though the perfectionist may wish to apply three pictures arranged in a triangle about the aperature, or alternatively apply the -ff option together with the -fr option of pinterp. (The latter may actually work out to be faster, since rendering three views takes three times as long as a single view, and the -fr option will end up recomputing relatively few pixels by comparison.)
To use pdfblur with rpict, apply the -S option to indicate a rendering sequence, and set the -o option with a formatted file name to save multiple output pictures. When all the renderings are finished, combine them with the pcomb(1) program, using appropriate scalefactors to achieve an average. Note that using rpict is MUCH more expensive than using pinterp, and it is only recommended if the scene and application absolutely demand it (e.g. there is prominent refraction that must be modeled accurately).
For both pinterp and rpict, the computation time will be proportional to the number of views from pdfblur. We have found a nsamp setting somewhere between 5 and 10 to be adequate for most images. Relatively larger values are appropriate for larger aperatures.
The -pd option of rpict may be used instead or in combination with or instead of pdfblur to blur depth-of-field. If used in combination, it is best to set the -pd option to the overall aperture divided by nsamp to minimize ghosting in the output.
To simulate a particular camera’s aperture, divide the focal length of the lens by the f-number, then convert to the corresponding world coordinate units. For example, if you wish to simulate a 50mm lens at f/2.0 in a scene modeled in meters, then you divide 50mm by 2.0 to get 25mm, which corresponds to an effective aperture of 0.025 meters.
To use pinterp to simulate an aperture of 0.5 inches on a lens focused at a distance of 57 inches:
rpict -vf myview -x 640 -y 480 -z orig.zbf scene.oct > orig.hdr
pdfblur 0.5 57 8 orig.hdr | pinterp -B -vf orig.hdr -x 640 -y 480 orig.hdr orig.zbf > blurry.hdr
To use rpict exclusively to do the same:
pdfblur .5 57 5 myview | rpict -S 1 -vf myview -x 640 -y 480 -o view%d.hdr scene.oct
pcomb -s .2 view1.hdr -s .2 view2.hdr -s .2 view3.hdr -s .2 view4.hdr -s .2 view5.hdr > blurry.hdr
This program really only works with perspective views.
pcomb(1), pinterp(1), pmblur(1), pmdblur(1), rcalc(1), rpict(1), vwright(1)