DOP Merge

The Ultimate Houdini node reference

Visit the Node Bible

To learn more, please log in or sign up for free to explore the Node Bible.
Write your awesome label here.

Dop Merge

Write your awesome label here.

The DOP Merge is used for two main purposes: 

1.  To merge objects or data streams. 
2.  To imply a relationship between the things that you are merging.  

Drag to resize


    If this is your first time working with DOPS, then please visit Houdini For the New Artist II before studying this entry.  Examining the Geo Spreadsheet while inside DOPs will also be helpful to understanding this node.  The DOP Merge gets used all the time for combining object/data streams while creating relationships between them. 

    Take this scenario as an example:   Let's say that you want to create a ground plane for particles to collide against.  First, you would make a ground plane dop.  Then, you could hook that up to the main object stream with a merge node.  To see what this does, visit the Geo Spreadsheet tab and notice how the data has been changed.

    In this situation, the pop object's object stream will be added next to the ground plane's object stream.  In addition, you'll notice that the merge has been added under the "Relationships" section, the "Collide" data has been added, and the "ObjinGroup" section now contains the pop object and ground plane object names.  The solver will now have the information needed to recognize the collide relationship between the pop object and ground plane.

    Keep in mind that you can also use merges to combine data. (such as pop forces, gas solvers, etc).  If you decide to merge data, then you cannot use that merge for merging objects as well.  Likewise if you want to merge objects - in that situation, you would not be able to merge data.  So you need to choose to merge either objects or data streams.

Drag to resize

Main Parameters:


--  This turns the node on/off

Affector Relationship:

--  No Change = When combining multiple objects, they will not have any sort of relationship behavior added to them.

--  Left Inputs Affect Right Inputs =  Take a look at the order that the wires are in when they plug into the merge node.  What this is saying is that the left wires will affect the objects to the right of them but not the other way around.  As an example, lets say that a rbd object is on the left input and a pop object is on the right.  Plus, the relationship is set to collision on the merge node.  In this situation, the rbd object would be allowed to affect the particles via collision, but the particles would not be able to affect the rbd object via the collide because its input is on the left-hand side.  In practice, this may be useful for speeding up heavy simulations by only calculating the relationships that are necessary for the situation.

--  Mutual =  This tells the merge node to create relationships between all incoming objects.  This is my preferred default because it's easier to keep track of things, and I'll be less prone to error.  The downside is that it may not be as efficient as the "Left Inputs Affect Right Inputs."  What this means is that you should use Left Inputs Affect Right Inputs only when your dealing with a heavy simulation that relies on expensive relationship calculations.  Otherwise, "Mutual" will be easier to deal with because you're not thinking about the order that things are plugged in.


--  None =  No relationship will occur

--  Empty Relationship = According to the docs, "Enforces a particular solve order - affected objects will be solved after affector objects - but no other intrinsic meaning.  This is useful when SOP Solvers refer to other objects creating a dependency that isn’t visible to the DOP Engine."  This basically controls which order things will be solved, and that's the difference between this option and "None."

--  Constraint Network Relationship =  There is no documentation for this parameter, so the difference between "Constraint Network Relationship" and "Constraint" is unclear.  In general, I would advise that you use "Constraint" instead of "Contraint Network Relationship" unless you somehow know what this parameter does.  And if you do figure it out, please contact me at and I'll be happy to update this section with better information.

--  Target Relationship =  If you use the "Gas Target Force" node, then this will apply that force.

--  Constraint =  Used internally to define two objects that have a constraint between them.  In general, however, it is advised to set up constraints with the "constraint network" dop for most situations.  If you've never worked with constraints before, then check out Destruction I for more info on how to set that up.

--  Group Relationship =  According to the docs, "This gets used to make objects part of the same group."  However, this description can be rather misleading because these "group" relationships are the not the same thing as a group that gets used in sops.  It's also not the same thing as Streams in dops.  It's also not the same thing as pop groups or really any other typical scenario where you're used to using groups.  If you try to look for this group in other nodes in DOPS, you also will not find it.  This "Group" lives in the geo spreadsheet under "Relationships."  In practice, this may be useful for times when you want to make custom solvers which utilize these group affectors.  Otherwise, I wouldn't advise using this for most situations.

--   Sink Relationship =  This most often applies to fluid simulations.  Affected objects will delete their volume where it contacts the affectors.

--  Collide Relationship =  Things will collide!

--  Source Relationship =  This most often applies to fluid/smoke/pyro simulations.  Affected objects will use the affector objects as sources for operations such as creating liquid or smoke density.  In general, it is advised to primarily rely on sourcing objects from SOPs and Source Smoke/ if possible.  Otherwise, you can establish this relationship in dops here.

--  Pump Relationship =  This primarily applies to fluid objects.  The affected objects will set their local velocities to match the velocity of the source object. 

Drag to resize