The article title is a bit misleading, I was expecting actual simulation of film stock processing and rendering in Python. Here this is more about 3D LUTs usage, not much to do with film simulation itself.
For what it's worth, I've updated the post and put a disclaimer up front:
Disclaimer: The post is more about understanding LUTs and HaldCLUTs and writing methods from scratch to apply these LUTs to an image rather than coming up with CLUTs themselves from scratch.
Well, not really, 3D LUTs are just 3D LUTs, they are typically just a mean to represent expensive functions from a performance standpoint with a fast alternative, or a way to obfuscate proprietary functions with a single table. Whether they are used to carry a film look is entirely dependent on what the 3D LUT models, and certainly not every single one of them is a film look. Disclaimer: I work in the industry and produces 3D LUTs as part of my job.
well if you're referring to 3D LUTs as the objective of the excercise, it's probably helpful to start with a LUT volume capable of doing realistic color transformations. 33 by 33 by 33 matrices are the standard used for broadcast color and it's only recently LUTS have been used for "color timing" features because the effectiveness and effective precision of a 3D LUT is extremely depending on your work flow and working color space and the details of your gamma and so on. OpenEXR is a floating point format for many reasons including handling of color.
my point about the work flow involved is particularly relevant in consideration of emulating celluloid film stock because the bandwidth of film is concentrated in the high values of the channels. Silicon sensors struggle with highlights fundamentally even before the encoding. Photons hitting a piece of film are scattered throughout multiple layers (Fujifilm famously sold 4 layer negative film in retail volumes with enough success to turn Kodak, who held virtually every important patent for digital cameras, into a schizophrenic jelly mess.) and in comparison with the reflectivity of a silicon sensor, even allowing a layer of sophisticated precision lenses on top, channeling the light, film is incredibly accommodating to absorb excess light without the loss of detail. Sensors not only put lenses up front to corral the light rays but of course the next obstacles are the color matrix layers and IR/UV cut filters, and you can sometimes see online amateur photography forums panicking at the sight of a overloaded sensor flaring to show geometric patterns of diffraction caused by the sensor silicon itself. The route available for a photon meeting with a camera sensor is a utterly constrained path compared with the photon partying through the celluloid structure enjoyed by trendier EM radiation; this is why the BSI back side illumination tech reflecting photons back into the sensor wells has been so effective. The sad case Brit in me took some time to get used to Back Side Illuminated Sensors, meaning of course the sun shines out of the Sony high megapixel fanny...
Comments
The article title is a bit misleading, I was expecting actual simulation of film stock processing and rendering in Python. Here this is more about 3D LUTs usage, not much to do with film simulation itself.
For what it's worth, I've updated the post and put a disclaimer up front:
Misnomer or not, 3D LUTs are what the industry means when they say film simulation, maybe with some grain effects sprinkled on top.
Well, not really, 3D LUTs are just 3D LUTs, they are typically just a mean to represent expensive functions from a performance standpoint with a fast alternative, or a way to obfuscate proprietary functions with a single table. Whether they are used to carry a film look is entirely dependent on what the 3D LUT models, and certainly not every single one of them is a film look. Disclaimer: I work in the industry and produces 3D LUTs as part of my job.
well if you're referring to 3D LUTs as the objective of the excercise, it's probably helpful to start with a LUT volume capable of doing realistic color transformations. 33 by 33 by 33 matrices are the standard used for broadcast color and it's only recently LUTS have been used for "color timing" features because the effectiveness and effective precision of a 3D LUT is extremely depending on your work flow and working color space and the details of your gamma and so on. OpenEXR is a floating point format for many reasons including handling of color.
my point about the work flow involved is particularly relevant in consideration of emulating celluloid film stock because the bandwidth of film is concentrated in the high values of the channels. Silicon sensors struggle with highlights fundamentally even before the encoding. Photons hitting a piece of film are scattered throughout multiple layers (Fujifilm famously sold 4 layer negative film in retail volumes with enough success to turn Kodak, who held virtually every important patent for digital cameras, into a schizophrenic jelly mess.) and in comparison with the reflectivity of a silicon sensor, even allowing a layer of sophisticated precision lenses on top, channeling the light, film is incredibly accommodating to absorb excess light without the loss of detail. Sensors not only put lenses up front to corral the light rays but of course the next obstacles are the color matrix layers and IR/UV cut filters, and you can sometimes see online amateur photography forums panicking at the sight of a overloaded sensor flaring to show geometric patterns of diffraction caused by the sensor silicon itself. The route available for a photon meeting with a camera sensor is a utterly constrained path compared with the photon partying through the celluloid structure enjoyed by trendier EM radiation; this is why the BSI back side illumination tech reflecting photons back into the sensor wells has been so effective. The sad case Brit in me took some time to get used to Back Side Illuminated Sensors, meaning of course the sun shines out of the Sony high megapixel fanny...
Only my photo editor Filmulator does that, to my knowledge.