Operators

tyFlow operators are what create and drive particles in a simulation.

Click an operator name in the sidebar to find more information about a particular operator.


Operator Activation

After an operator has been added to a flow, it can be enabled/disabled by clicking on its icon.


Operator Settings

The settings for a particular operator can be accessed in the subrollout on the right hand side of the tyFlow editor. An operator must be selected before its settings will be revealed.


Common Settings

Many operators contain common settings. These settings pertain to operator timing controls, as well as test condition controls.


Filters Rollout

The Filters rollout allows you to control which particles will be affected by an operator.

  • Enable filters: controls whether particle filtering will be enabled for the operator.

  • AND/OR: controls the test condition for multiple filters. “And” means that a particle must pass all filters in order to be affected by the operator. “Or” means that a particle must pass any filter in order to be affected by the operator.

  • Filter list: the list of filters that will be used to test particle properties.

  • Enabled: controls whether the selected filter will be enabled.

  • Property Type: the property that the selected filter will test.

  • Test TRUE if property is: the property test condition.

Test Value
  • Absolute/Custom Float: controls whether the test value will be an absolute value, or a value derived from a custom float data channel of the particle being tested.

  • Value: the absolute test value.

  • Channel: the custom float data channel from which to derive the test value.

  • Variation %: the per-particle percentage of variation to apply.
Custom Float
  • Channel: the custom float data channel from which to derive the property value.
Simulation Groups
  • Simulation Groups: controls which particle simulation groups will be used as the property test.

Uniqueness

  • Seed: the seed value for all varied parameters.

  • Seed by time: the seed value will be incremented with the current time in ticks.

Keyframes Rollout

The Keyframes rollout allows to control how animated spinner values will be synchronized - either to the current time or to particle ages.

Keyframe synchronization

Absolute: spinner parameters will be synced to the current time, regardless of particle age.

Event Age: spinner parameters will be synced to particle event ages. For example, a particle that has been in an event for 5 frames, will query animated spinner values at frame 5.

Particle Age: spinner parameters will be synced to particle ages. For example, a particle that has an age of 5 frames, will query animated spinner values at frame 5.

  • Offset: the per-particle frame offset to apply to the sync method.

  • Variation: the per-particle variation to apply to the sync method.

  • Speed %: the rate at which to synchronize keyframes. Lower values will slow animation.

  • Variation %: the per-particle percentage of variation to apply.

Uniqueness

  • Seed: the seed value for all varied parameters.

Timing Rollout

The Timing rollout controls when particles will be affected by an operator.

  • Timing type: controls the timing type of the operator.

On Event Entry: particles will only be affected by the operator when they first enter the event.

On Event Entry (Interval): particles will only be affected by the operator if they enter the event within a specified range of frames.

Continuous: particles will be continually affected by the operator as long as they stay in the event.

Event Age: particles will be continually affected by the operator as long as their lifetime within the event is within a specified range of values.

Particle Age: particles will be continually affected by the operator as long as their lifetime within the simulation is within a specified range of values.

Frames: particles will be continually affected by the operator as long as the current frame is within a specified range of values.

  • Range: the range of values which will affect various timing types.
Variation: the per-particle amount of variation to apply.
Misc
  • Treat post-step particles as new: When enabled, particles born at the end of a time step (after all normal operators have been evaluated) will be treated as new (ie, treated as if their event age is 0) at the start of the next time step.

Some parts of a simulation (ex: the tearing solver) can generate new particles after all normal operators have already finished processing existing particles. This means that those new particles will not be processed by any normal operators until the next time step. However, since those new particles’ event age will be greater than 0 at the start of the next time step, trying to catch them “on entry” will fail, because particles are only treated as new in an event when their event age is 0. Enabling this setting will artificially treat them as new at the beginning of the next time step, allowing you to catch them with operators whose timing is set to affect particles on entry. NOTE: this used to happen automatically, but situations were discovered where this functionality needed to be disabled, so now this setting has been added in order to give users full control over the process.

Uniqueness
  • Seed: the seed value for all varied parameters.
Frame exclusions
  • Enable frame exclusions: controls whether the list of frames to exclude will be processed by the operator.

  • Frame exclusion list: the list of frames to exclude from the operator’s affect.

The list may contain multiple frames or frame ranges. Separate frames with commas, and denote ranges of frames with dashes. A valid list may look something like: “0, 10, 20, 35-50, 100” (without quotations).

Frame skipping

The frame skipping parameters allow you to control whether an operator will be activated on certain frames, using a modulus operation to easily skip every other frame, or every 3rd frame, etc.

  • Activate every Nth: controls the divisor of the modulus operation, which takes the form of: if (frame % divisor == 0) {…do work…}. In other words, if the current frame is not evenly divisible by this value, then operator activation on this frame will be disabled. So if you set the value to 2, only every other frame will be activated. If you set it to 3, only every 3rd frame will be activated, etc.

  • Offset: allows you to offset the time value of the modulus operation. An activation value of 2 and an offset value of 0 will activate these frames: 0, 2, 4, 6, 8…etc. An activation value of 2 and an offset value of -1 will activate these frame: 1, 3, 5, 7, 9…etc.

An activation value of 0 means every whole frame and every substep (that also satisfy the other Timing rollout conditions) will be evaluated. An activation value of 1 means only whole frames will be evaluated (subframes will not be evaluated). An activation value greater than 1 means only every Nth whole frame (where N is the activation value) will be evaluated (subframes will not be evaluated).

You can speed up the overall evaluation of your flow by using these settings to limit the activation of certain operators. Many operators do not need to evaluate on every timestep or subframe in order to maintain the fidelity of your flow. Using these settings to control frame activation can greatly increase performance in certain situations.


Test Action Rollout

The Test Action rollout controls what will happen to particles that satisfy a conditional test within an operator.

  • Send Out: controls whether particles that satisfy the test condition of an operator will be sent to the next event (if the operator has a valid output connection).

  • Increment custom float: controls whether particles that satisfy the test condition of an operator will have the value of one of their custom data channels incremented.

  • Channel: the channel whose value will be incremented.

Sometimes you may want a particle to satisfy the test conditions of multiple operators before sending it to another event. In that case, you would set the test action of all of the relevant operators to “increment custom float”. Then, you would put a Custom Properties operator (whose timing is set to “continuous”) at the top of the event’s operator stack (and have it reset the value of the appropriate custom data channel to 0 each time step), and a Property Test at the end of the event’s operator stack which would be used to check the value of that custom data channel. The Property Test’s test action would be set to “send out” and the condition would be set to the desired value of the custom data channel. For example, if you wanted to chain three different operator’s test conditions together, you would use the Property Test to test for a custom data channel value of 3 before sending particles to the next event.

With that method in mind you can easily craft more complex test conditions within certain events.

  • Ignore: nothing will happen to particles that satisfy the test condition.

Data
  • Save all test values: saves any value of the property property to a custom float data channel, regardless of whether or not it satisfied the test condition.

Enabling the “save all test values” option is a good way to track the properties of particles within tested operators - especially the Property Test operator. You may, for example, save the number of neighbors a particle has from a Property Test, and use that value later as a filter in another operator.

  • Save test value when test TRUE: saves the value of the particle property to a custom float data channel when the value satisfies the test condition.

  • Save event age when test TRUE: saves the event age of a particle to a custom float data channel at the time when it satisfies the test condition.

  • Frames/Ticks: controls which unit of time to save the event age value in.

  • Channel: the channel where the value will be saved.