# Simulation Nodes Changes
## UI Changes
* Theme option for simulation zone background.
* Operator to add simulation zone.
* New simulation category in node add menu.
* Operators and panel to change simulation items.
* Copy/Remove node operators modify simulation zones as a whole.
* New panel in physics tab for simulation baking.
* New simulation input and output node.
* Bake operator bakes all selected objects at once.
* Baking stores data in a folder next to the .blend file.
* Packing the baked data into the .blend file is not yet supported.
* Timeline shows which frames are currently cached/baked.
* Simulation zone is drawn as a convex hull around the nodes that are within the zone.
* It's not allowed to link from the inside of the zone to the outside. Linking from the outside to the inside is ok.
## Details
* Simulation input and output nodes don't propagate anonymous attributes.
* Attributes in the simulation input/output nodes are stored on the preceding geometry (this may change in the future).
* Baking file format:
* Meta data is contained in `.json` files:
* Contains e.g. the set of attributes, number of vertices, etc.
* References binary data stored in separate files.
* Additional binary data is contained in `.bdata` files:
* Those contain blobs of memory that can be referenced by meta data.
* Multiple meta data files can reference the same binary blobs.
* Baking supports skipping to save unchanged attributes in different frames.
* Baked data is loaded from disk lazily after opening a file, but for now it is not freed automatically when the RAM is getting full.
* The simulation state can contain geometry, attributes on the geometry and primitive values (e.g. single floats).
* Volumes are not yet supported, instances are.
* Materials are lost currently, but can be restored by name in theory.
## Internal changes
* `GeometrySet.ensure_owns_all_data`.
* Node toposort takes implicit links between simulation input/output nodes into account.
* Field inferencing allows for cyclic dependencies.
* The set of zones and their corresponding nodes are cached on the node tree.
* New `SubFrame` class that encapsulates an integer frame and a float subframe between 0 and 1.
* `RNA_enum_value_from_identifier`
* `LazyFunctionForSimulationInputsUsage`
## Blocking Todos:
## Non-blocking Todos:
* Timeline cache theme colors?
* Subframe mixing.
* Calculate to frame operator
* Cancel baking button
* Skip frames during in simulation