id: film_sim order: 190 # What this node is *about* is not written here, and cannot be: a `rust:` node # publishes its own descriptor, so `attributes:` in this file would be read, # validated and then ignored. See `Attribute::Effect` on `FilmSim`'s descriptor # in `../src/ops/film_sim.rs`. rust: FilmSim why_rust: | It carries a stock's measured tables — an exposure matrix, three characteristic curves and a density lookup — which are not parameters and which no `uniforms:` expression could produce. Its neutral is "no stock loaded" rather than a set of values, and it is the one node that declares `Operation::renders`, so while a stock is loaded the composer emits it in the view transform's place instead of the default sigmoid. placement: | Last, in the view transform's place (D19, FR-DEV-3j), after every other operation and after the detail stage. Before D19 it sat at order 25, after white balance and exposure, and every decision below it acted on the film's output, as though the frame had been scanned and then worked on. That put a display-referred rendering in the middle of the chain, which is what D19 removes: every operation is now handed the scene, and the film is the last thing that happens to the picture — an edit is a decision about the exposure the negative receives. `Stage::View` is what puts it there; this number only places it in the panel's order.