The algorithm goes thusly:
- Run a first order differential equation to grow silver crystals and consume developer. The rates are controlled by the developer concentration.
- Blur (diffuse) the developer laterally within the active layer. This is a 100-200 pixel standard deviation blur. Film area controls the radius: stuff diffuses farther relative to the image size on smaller film sizes.
- Diffuse between an inactive reservoir and the active layer.
- Repeat (default 12 times); halfway through, mix all of the developer to simulate agitation.
We tried to downsample before blurring in the hopes it would be faster than our original method, iterated box blurs at full resolution, which it was, but at the expense of quality the more the advantage was. However, in the end we switched to infinite impulse response two pass filters which are even faster and more accurate.