Daemons - Filter

This daemon provides a very convenient way to swap particles from one emitter to another. Before this daemon was introduced this was a pure scripting task. Now you can do this much faster with built-in functions, though there might be moments where you have to use the scripted approach. The "Filter" daemon requires two emitters: a source emitter and a target. You can choose any emitter as a target. Even though you are adding more particles to the target emitter, the fluid remains stable. Even other physical properties, like “Density” or “Int Pressure”, can be different. For an easy workflow, it is best to use the "Container" emitter. This is nothing but an empty bin which gathers the swapped particles from the source.




Source Emitters

Define the particle source by choosing an existing emitter from a list. The parameter accepts multi-selections and you can use more than one emitter as a source.

Target Emitter (True)

Ideally this would be a "Container emitter", but you can use any other available type as well. “Target Emitter (True)” is the emitter where the particles will be moved to when the adjusted condition is true. This field does not necessarily need an entry and can be left blank to delete the particles. 

Filter When False

“Yes”. If the condition of the emitter is fulfilled, the particle will be sent to the emitter, specified under “Target Emitter (True)”; otherwise it will be moved to the emitter from “@ Target Emitter (False)”. With “No”, nothing will happen as long as there are not any particles which fulfil the given condition.

@ Target Emitter (False)

In contrast to the previous emitter, this one is used when the condition is not fulfilled (= false). The default workflow is to use the same emitter for “Source Emitter” and “Target Emitter (False)”. Please keep in mind that every source particle will be evaluated and finally be assigned to one of the target emitters. The usage of three different emitters for source and targets is the most common source of errors and should be avoided. This field does not necessarily need an entry and can be left blank.


You can select the desired condition by simply choosing one of the predefined options. The daemon provides a total of 8 conditions. These conditions tell RealFlow when a particle has to be transferred – once the selected condition is fulfilled, the particle will be attached to the target emitter and removed from the source. It is even possible to define an expression to define your own condition. A very special case is called “In Range” or “Out of Range”. By activating these options, the fields “@ Min Value” and “@ Max Value” are unlocked. You can then define a range with a minimum and a maximum value which will be used for this condition.

@ Attribute

When you are shifting particles you also need an attribute to be compared. If the condition of the comparison is fulfilled, the particle is swapped. The attribute, of course, needs a certain value for the comparison, e.g. “If Speed is greater than 2.0 then shift the particle from the source to the target emitter”. In this case, “@Attribute” is “Speed”, the value is 2.0 and the condition is “greater than”. You can choose from many different attributes like position, velocity, pressure, age, density and much more.

@ Value

This is the trigger value for the condition. Simply enter the desired value. Please note that this field is inactive with “Condition” set to “In Range”, “Out of Range” and “Expression”.

@ Min/Max Value

With “Condition” set to “In Range” or “Out of Range”, these fields become unlocked, giving you the possibility to define a range between these two settings. 

@ Expression

You can enter any valid expression here that serves as a given condition. This tool is surely the most complex filter, but also offers a wide variety of possibilities. “@ Expression” offers a long list of available keywords. These are used to address certain features of a particle. RealFlow constantly checks against these attributes during a simulation and decides whether the condition is fulfilled or not. This is a very effective and fast way to create flexible conditions and is suited to many applications.



Expression keyword


particle.speed, particle.velocity.x, particle.velocity.y, particle.velocity.z, particle.vel.x, particle.vel.y, particle.vel.z


particle.pos.x, particle.vel.y, particle.vel.z, particle.position.x, particle.position.y, particle.position.z


particle.vorticity.mod, particle.vorticity.x, particle.vorticity.y, particle.vorticity.z


particle.normal.x, particle.normal.y, particle.normal.z


particle.nv, particle.neighbors, particle.neighbours


particle.texture.u, particle.texture.v, particle.texture.w


particle.age, particle.isolation
















particle.force.mod, particle.force.x, particle.force.y, particle.force.z, particle.f.mod, particle.f.x, particle.f.y, particle.f.z


This feature should already be known from other RealFlow daemons, for example "k Collision". When set to “Yes”, RealFlow will create more particles based on the number of children, given in the following parameter. This feature is perfect for spawning foam particles.

@ # child

This settings is only available with “Split = “Yes” and you can specify the number of child particles here when a certain condition is fulfilled. You should start with moderate “@ # child” values first, because the amount of generated particles can become really huge within a short time.


With this option it is possible to restrict the filter daemon to a certain volume. It is closely connected to the “@ Filter Inside” parameter. When both options are set to “Yes”, the daemon will only test and affect particles inside the box; if it is set to “No” only particles outside the box will considered.

@ Filter inside

This option performs an inside/outside check when the daemon is bounded. For more information, please have a look at the “Bounded” option directly above.

Override Target (True/False)

By default, both options are set to “No”. This feature is needed when you have to work with emitters in cache mode, "Binary Loader" or "NBinary Loader". These “emitters” are cleared with each frame and load new particles from already saved BIN files. So, using them as source emitters would lead to instabilities, because the particles will not be moved, but simply copied. If you also clear the target emitters with each step, you can avoid these problems. Please note that the result with this mode might slightly differ from the original simulation of the source emitter.