mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-10-16 20:31:14 +00:00
ChromaStack: the colour model, and transmission distance per filament
A picture is reproduced on one face by stacking thin layers of a few filaments, swapping filament at fixed layer boundaries, and varying how high each pixel is built up. Filament is translucent, so a column that stops part-way through a run shows a blend of that run's filament and what is under it - which is where the colours come from, far more of them than there are filaments loaded. libslic3r/ChromaStack.hpp holds the whole model, free of the GUI. A stack is a list of bands (a filament and its layer count, bottom-up) on a base of solid backing. chroma_palette() turns it into the colour shown at every column height, by Beer-Lambert absorption with each filament's transmission distance; chroma_solve() maps every pixel to the height whose colour is closest in CIELAB, optionally diffusing the rounding error, and returns the 8-bit height map and the colours it predicts. Beer-Lambert is the only model that stays consistent applied per layer, so the palette does not depend on how the stack was cut into bands, and a test asserts it. chroma_layers_to_opaque() and chroma_distinct_levels() are what make a stack's behaviour legible: how many layers a filament needs to hide what is under it, and how many of a picture's layers change the colour at all. chroma_ranges() turns the bands into object height ranges, which is how the slicer is told to print a Z band in another filament. Transmission distance is a property of the material, so it is a filament preset option: filament_transmission_distance, with no effect on slicing.
This commit is contained in:
@@ -226,6 +226,7 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n
|
||||
"filament_diameter",
|
||||
"volumetric_speed_coefficients",
|
||||
"filament_density",
|
||||
"filament_transmission_distance",
|
||||
"filament_cost",
|
||||
"filament_notes",
|
||||
"outer_wall_acceleration",
|
||||
|
||||
Reference in New Issue
Block a user