I've been trying to come up with why there is a toe in some tonemapping operators. Specifically a filmic type.
What I mean by this is that typically the film response starts off slowly, then becomes a close to linear response in the the middle and and then tails off at the shoulder.
I can understand the reasoning for why the shoulder happens. In the case of film the chance of a photon hitting a non exposed film element tails off as more of it is already exposed. In the case of a digital sensor then again the number of discharged CCD elements gets larger the higher the exposure.
However I cannot understand why this would happen for the toe. I would expect film to behave like a Reinhard operator which is virtually linear at the bottom
Think of film this way: You have some reaction that is sensitive to light, and we measure how much of that reaction happened. Even in a complete absence of light there will be some base level (I believe it's called "fog density") of that reaction happening. As you add light you make the reaction more likely, but for small amounts of light, you don't have much of an effect.
That's not very precise, but it's enough to convince me that the presence of a toe is not much of a surprise.
A film curve has a toe and shoulder because film is specifically designed to have that response.They do it because it enhances perceived contrast and "colorfulness". I'd recommend reading through this presentation.
I can understand the reasons for the toe and shoulder. I have implemented this as part of the tonemapping operator for many games at the request of the AD however I was trying to understand the physiological reasons why this happens to film stock. In fact does this toe exist on the negative at all or is it created during the development of the negative?
One answer I though of is maybe it takes many photons of light before a halide on film is exposed. So if a low number of photons are hitting the film then maybe they don't cross the threshold for a chemical reaction to occur?? I'm thinking of writing a simulation to test this out to see what curve I get back.