Several questions about joining vertices

2 replies [Last post]
wangyang
Offline
Joined: 01/12/2015

Hi, I've been working on joining vertices that are close to each other, and got some questions...

1. A vertex could be joined to another, only when it is located on at least one surface boundary. Is is true? I could not join very close vertices, unless they have surface boundaries.
2. Why it is far more slower when joining vertices with error 1% comparing to joining with 0.0001%?
3. What algorithm is Balancer using, like clustering? According to the test, the result of joining two close vertices is the average value of the two coordinates. (While optimizing always result in vertices that already exist in the original mesh)

Thanks.

wangyang
Offline
Joined: 01/12/2015

Any help...? Please? Big smile

JackJack
JackJack's picture
Offline
Joined: 04/18/2009

Hi Wangyang,

Sorry for the delay. Shy

1. Most of the vertices are joined if they are on the boundaries. In some cases vertices that are not on the boundaries can be joined. This happens when one surface intersect another (say at 90 degrees) and both the surfaces have vertices at the line of their intersection. The line of intersection is not the surface boundary before joining, but will become a boundary after joining, creating a non-manifold surface. The angle on surface intersection can be controlled in
Preferences | Joining | Don't join vertices if their normals diverge by less than X degrees.

If you have two different surfaces that are very close to each other (almost coincide and locally parallel), their vertices will not be joined.

2. Joining speed does indeed depends on the threshold. If there are many (thousands) vertices close to each other that will be joined to a single vertex, Balancer can be slow. To overcome this you can start with a small threshold and than increase to your required threshold. We will improve this in the future with even more adaptive clustering.

3. We use a sort of an octree-based clustering. We first decide what vertices to join, and then pick the joined vertex position. As you correctly noted, the resulting joined vertex position is the average. While during simplification we remove vertices one by one, so their positions do not change.