# 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