Page MenuHome

Remove-Doubles (modifier)
Closed, ResolvedPublicDESIGN

Authored By
"Burninate" token, awarded by joe_daniels."Burninate" token, awarded by EitanSomething."Burninate" token, awarded by mazigh."Love" token, awarded by dpdp."Love" token, awarded by 1to3fall5."Burninate" token, awarded by Kubo_Wu."Heartbreak" token, awarded by DreamIncubator."Love" token, awarded by brilliant_ape."Love" token, awarded by lcs_cavalheiro."Like" token, awarded by Fracture128."Love" token, awarded by NoahTheAnimator."Like" token, awarded by YAFU."Love" token, awarded by michaelknubben."Love" token, awarded by mantissa."Love" token, awarded by Zuorion."Love" token, awarded by Tetone."Love" token, awarded by aliasguru."Love" token, awarded by ogierm."Love" token, awarded by szap."Love" token, awarded by fiendish55.


Starting this design task because the possibility of a remove doubles modifier was suggested (in replies to D443).

The current design of the modifier stack creates an entire new mesh for each modifier, this means its not well suited to having small (fine-grained) editing operations as modifiers.

Which is why we don't already have many basic operations as modifiers.

So for this design task I like to gather some good use cases where a remove-doubles modifier would be used, to consider if its worth adding.


  • Merging could use a boundary only option, since in many cases you want to zip up two boundaries (will be faster too).
  • Merging 2x solid edges (result of solidify modifier for example), will create internal faces, we could have an option to remove duplicate faces (which are likely to be internal).
  • ... Further, merging overlapping faces isn't likely to give useful results (it can pick first face but not make a useful choice).

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes

In this .blend, a simple deform modifier doing a bend is the starting point of modifier stack.
At the bottom, you see the result if we could add a Remove Doubles modifier just after it.

in this .blend, a simple sphere has a horn define by a curve modifier.
A shapekey was created to animate disappearing of the horn.
With a Remove Doubles modifier, result would be a perfectly smooth sphere

Just removed discussion about a bisect modifier, @ronan ducluzeau (zeauro) - please stay on topic.

Copied from D443, added a few comments. Hopefully it works just as i had imagined:

Have experimented with some ideas.
Main purpose i have found in operations where you want to

  • tear
  • pluck
  • peel
  • break
  • cut
  • (and so on)

geometry, and of course the other way around.

Benefits i see are especially for animation and deform on smooth meshes. With a "merge"-modifier you could assign overlapping edges to 2 or more different vertexgroups and move them with bones or curves asunder.

Rough example. The crack or whatever can be handled by Edge Split very good, but i dont know a good possibility to go any further.
My idea for a "merge"-modifier is to create two or more parts with overlapping verts and edges and hide the dividing line with the modifier.
Moving the parts beyond the merge limit splits the mesh.

Fracture could have an extra layer when combined with Edge Split.

A merge option for meshobject + meshobject (like target object) could handle more - Linked Duplicates with Mask would be responsible for more fragments, so you have only one mesh to work on.
Also comes in place where two sets of modifiers should not affect eachother (Solidify/Array always take whole mesh) and 2 objects are needed, but result object shall appear as connected.
A little like Array cap settings without modifier dependencies. I dont know if this is feasible.

The banana shows no cuts/is not peeled when not deformed, providing the merge is activ.
This can also be done with Array merge, but it dont allows to animate seperate banana peels, or to texture it as a whole.
In theory you could display every fruit outside and inside with a single mesh (after cutting it, suitable for animations).

Last one is Skin modifier (maybe not an ideal example). Skin should be generally not bad to use, because you can set higher merge limits and stick how you like.
Also its very organic - a bit like metaballs when combined with a "merge"-modifier + Subsurf. > same method as in @ronan ducluzeau (zeauro)´s SphereHorn-File. You could collect connected vertices on one point and they merge to a single vertice with the modifier. Then move the vertices to different locations and you get a larger and still connected mesh. (for waterdrops, growing plants or something like that)
Only problem i see is the radius and root after merge operation.

It's interresting to see, in these examples that the effect of the "remove doubles" may be usefull not only after (after in terms of time not of stack order) other modifiers have acted, but also before, that is to say mesh parts are glued and merged to start with, then because of various modifiers they are torn appart, double vertices get separated and the "double modifier" ceases to operate.

Copied from D443 : We must keep in mind that although we call it "remove doubles", (as in "fix a problem"), the operation is really "remove near vertices". In that sense, even though few modifiers would actually create true doubles, many could generate very close vertices. The array modifier would do this simply if using scaling (through a scaled empty object), then each instance gets smaller and smaller, and vertices get nearer. Shrinkwrap modifier could also quite often yield vertices that are very close to each other and could be simplified by a "remove doubles".

A merge option for meshobject + meshobject (like target object) could handle more - Linked Duplicates (...), so you have only one mesh to work on.
Also comes in place where (...) 2 objects are needed or would be helpful, but result object shall appear as connected. (...)

An example:
You could duplicate (AltD-link) fingers and scale+place the objects in right position to the hand, before merging them to the character mesh with the modifier.
Thus you can edit finger & vertexgroups on a single mesh, without having to duplicateX5 and reassigning vertexgroups on every finger after changes.
The way is that linked fingers get the merge modifier with target "character mesh" and vertexgroups have to be renamed only one time for every duplicate.

For the Array: This could be used where you want to "skip" repeating parts of the mesh, for example on snake models.

  • Add a linked duplicate of the head mesh.
  • Give it a mask modifier and mask the repeating part.
  • Mask the head mesh aswell (opposite).
  • Array the repeating object.
  • Use merge modifier and head mesh as target > mesh closed.

As mentioned above, its like Array merge in this example, but end & start of the arrayed mesh can be modified better.
Nevertheless, this is highly theoretical and maybe there are better methods to handle this specific example, but it should work for lot of models.

Would be nice if this gets considered.
I like to suggest not to see this as another function, rather than a main feature of the modifier in terms of possible use cases.

Here is an example where merge is not only handy, but even necessary.

The belt mesh got a curve modifier and follows a curve circle (white line) with Stretch & Bounds Clamp options enabled.
As you can see, the ends could use a good merger.
Or you apply the curve modifier instead, but this means you cant use curve any more for animation or pose corrections.

The idea is to place a Merge modifier after Curve modifier.
Therefore you dont have to apply the modifier and dont have to lose curve control, and of course, its still very easy to make changes on the mesh.

This may be a similar situation to what @Karja Krähwald (karja) said above, but particularly when modelling wheels/tire tread it is necessary to merge the beginning and end of the tire to create a complete circle.

Currently, it is necessary to apply both the array and whatever deform modifier you have used to bend it into a circle (commonly curve or simple deform set to bend) and then remove doubles in edit mode. The obvious disadvantage is that should you want to later change, say, the design of the tire tread it is necessary to have access to the original un-modified mesh and then repeat the apply, remove doubles process.

A remove doubles modifier could simply sit at the end of the modifier stack and allow the underlying mesh to be altered at any point while still forming a seamless circle.

Updated task with findings section.

If there was a "remove double" modifier, then it would be simple to add settings based on vertex groups. (1) limit the merge to a vertex group, but also (2), limit with given source group onto given target group.
I believe in lightweight modifiers with limited features, used as legos. If and when some node based modifier scheme is introduced, then we would probably use more atomic feature nodes assembled at will. When this comes, it is likely the current modifiers will not be trashed, but simply ported to nodes. In that perspective, it does make sense to introduce such light or atomic modifiers, later to be turned into nodes.

That being said, I did mention earlier that when doubles removal is bundled with a modifier, it can be made more efficient, because it only acts on the vertices that were created. In order to split the work in (A) mesh generation, followed by (B) doubles removal, we would need the (A) node to output not just a mesh, but also vertex groups that identify the newly created vertices. This vertex group node-output would then be pluged into the remove doubles node inputs.

+1 I think is a modifier that would be worth adding even if it were only for pure modeling purposes.
There are many occasions where I would rather work procedurally (via a curve) but then have to turn it into a mesh because there is a seam.

user:karja has me convinced this is a really good idea. Normally for some of the things shown in his(her) posts, people tend to use a stand-in object that is complete and seamless while the breakable object is invisible. Then the object is made to "brake" by reversing the visibility of everything at a certain keyframe, it works but this idea for a Remove Doubles modifier seems neater and would be very easy to setup and maintain.

I guess that's all obvious now from all the posts made but I just wanted to add to the use cases for this. -> Breaking glass. The broken mesh could be shown the whole time instead of replacing an unbroken one at the time of breakage.

The subtle tearing that would come from the merge threshold being broken by various vertices at different times may actually enhance the illusion.(if anyone's eyes can even track that fast :)

you need something like this to be able to use 'pointiness' on text and curve objects, as caps are disconected from bevel

+1 Worth adding IMO, taking into account the cases already described.

Today I've found myself in the Array+Curve situation, at it was frustrating.

At first I was confused by the "first/last" merge options in the Array Modifier, it took me a while to realize it doesn't work with a curve modifier on top.
So, for that particular case, unless a merge first/last option is implemented for the Curve Modifier (which would be also nice), a Remove Doubles modifier really makes sense.


Two more examples to show the importance of this feature:

A pac-man:

A plane to sphere morphing:

As shown in the image, I have to subdivide the mesh a lot to have the closed seam less noticable, and of course, smooth shading is helpless in those cases.

I'm sure it's already been covered above, but this would be really nice for keeping contiguous shading on characters that are split into multiple objects (arms, legs, torso, head, etc.) for the sake of external texturing tools that don't support Blender's UV sets.

When modeling with the screw modifier, a remove doubles modifier would be awesome as well! I have been longing for this for a long time now.

This would be a very good addition, I came across this causing me problems when doing a deformed torus made from bends/twists etc. In Cinema4D, there is the Connect object that takes the whole stack and has the weld/merge functionality in it. This is very similar concept and would be invaluable.

I'd love this because I work a lot with the Mirror modifier and run not rarely into the problem that I want to merge some portions along the Mirror axis but not all of them.

So my first idea was to propose an addition to the Mirror modifier to supply it with a vertex group similar to how the Mask modifier uses one which then defines where merging would occur (or not). Optionally with the weight being used as a multiplier for the threshold.

This idea however is much more versatile if said vertex group selection for what can and can not be merged would be added.

This would be so useful for maxed out 100% Bevels to create a more controlled subdivision

This is one of the most needed modifiers for blender modelling, it would make life so much easier in so many cases and don't we all want easy life I bet you do.

paul szajner (szap) rescinded a token.
paul szajner (szap) awarded a token.
paul szajner (szap) rescinded a token.
paul szajner (szap) awarded a token.
ogierm (ogierm) rescinded a token.
ogierm (ogierm) awarded a token.

Also from our side at the studio a very much longed for modifier! Are there plans to go ahead with this proposal?

@Rainer Trummer (aliasguru)
The dev who started this thread also unassigned and unsubscribed himself from the topic almost 3 years ago.

I'm the one who started this thread, and as @Rainer Trummer (aliasguru) says, I am not a blender developper anymore. Back in 2014, it seemed any work on new modifiers was prohibited because a change of paradigm towards node-based modifiers was envisaged. I had built a 'randomizer' modifier that was trashed for that reason.

In case anyone starts working on this again, I have some thoughts to share regarding the remove double algorithm, whether its part of a standalone modifier or embedded in other modifiers such as the array modifier. The current algorithm builds a list of all vertices, sorted on s = x+y+z, then scans this list. It looks like a 3 dimensional problem has been magically transformed into a one dimensional problem, but this is a total illusion: you might just as well sort all vertices on x, then scan the list. Working on the sum has merely changed the main axis through which vertices are compared for distance. In the end, for each value of s (or of x), you need to loop through all vertices that are within epsilon of s. It is not far from o(N^2).

The algorithm I had in mind back then was very different, and I believe it could be much faster when the number of vertices is large. It goes like this. You divide the whole space in little cubes of size epsilon. For each vertex, you determine to which little cube it belongs and you build a hashmap where the key is made of the coordinates of the cube, and the value is a list of vertices that are inside this cube. So for N vertices, this is o(N). Then you do another scan of vertices and for each vertex, you will retrieve the vertices that are in the same cube or in one of the 27-1 adjacent cubes. You will compare the distance for each of these candidate doubles.

If someone wants to start work on this, I hope this can help.

Yo !
Any hope to see this done one day ?

Henrik Dick (weasel) closed this task as Resolved.Jan 11 2020, 3:27 PM
Henrik Dick (weasel) claimed this task.

This is now implemented in Blender with the new Weld Modifier.