Skip to main content
Solved

SurfaceDissolver behaviour


mhab
Contributor
Forum|alt.badge.img+10
  • Contributor

I want to put some things to discussion I ran across while testing SurfaceDissolver.

I am using it on data coming from a PointCloud, which I send through a TINGenerator in order to get as view surfaces as possible. My sample data is relatively simple, representing the roof of a small house. The PointCloud data have point distance ~20cm and seem to be accurate in z to ~5-10cm.

Remark: Before I started with TINGenerator I was not very successful with PointCloudSurfaceBuilder combined with MeshSimplifier. The mesh just didn't get simple enough :-(

 

SurfaceDissolver:

First I tried different settings for "Normal Tolerance" and "Offset Tolerance" and I was not really satisfied with the amount of simplification achieved. I ended up using Normal Tolerance=30 degress and Offset Tolerance=1m

Finally I tried to use SurfaceDissolver repeatedly (with identical settings) and that really improved the result.

example: starting with 129 surfaces

  • run 1: 129 -> 65 surfaces
  • run 2: 65 -> 32 surfaces
  • run 3: 32 -> 24 surfaces
  • run 4: 24 -> 12 surfaces

 

Then I tried to do these iterations within a Looping Custom Transformer only to learn that SurfaceDissolver is a blocking transformer without Group By. :-(

 

Q1: How come SurfaceDissolver doesn't do it's best from the start ?

Q2: Any particular reason why it doesn't support Group By ?

 

 

 

 

Best answer by jovitaatsafe

Hi @mhab,

 

 

Thanks for your question! If you're looking to simplify your mesh coming from a point cloud, I believe thinning the point cloud before building the mesh may yield better results. You can do that using the PointCloudThinner transformer, or the PointCloudSpatialThinner from the Hub. There's also an article that demonstrates the PointCloudThinner in action here.

 

 

By thinning the point cloud first, there will be fewer triangles in the mesh, and so less work needs to be done in the MeshSimplifier or the SurfaceDissolver.

 

 

For Q1: How come SurfaceDissolver doesn't do it's best from the start?

 

I checked in with out development team and there's a very complex technical limitation in there to do with the coding of the transformer. Itt's something to do with how the SurfaceDissolver works, in searching for coplanar regions, it doesn't quite work as a mesh is how I understood it. Thinning the point cloud before generating the mesh for simplification will reduce the complexity in the mesh before further simplification.

 

 

Q2: Any particular reason why it doesn't support Group By?

 

It looks like as of FME 2019.1 a Group By parameter has been added to the transformer, you can find this version available in the latest beta here. If you're opening up a workspace authored in an older version, remember to go to the Upgradeable Transformers in the Navigator to right click and upgrade the transformer to see the latest version containing the Group By parameter.

About the transformer acting as a blocking transformer, take a look at the Dissolve Inputs Separately section in the SurfaceDissolver documentation. When set to No, it operates in blocking mode, and when set to yes it should operate in a non-blocking mode.

Hope that helps!

View original
Did this help you find an answer to your question?

2 replies

jovitaatsafe
Safer
Forum|alt.badge.img+11
  • Safer
  • Best Answer
  • June 26, 2019

Hi @mhab,

 

 

Thanks for your question! If you're looking to simplify your mesh coming from a point cloud, I believe thinning the point cloud before building the mesh may yield better results. You can do that using the PointCloudThinner transformer, or the PointCloudSpatialThinner from the Hub. There's also an article that demonstrates the PointCloudThinner in action here.

 

 

By thinning the point cloud first, there will be fewer triangles in the mesh, and so less work needs to be done in the MeshSimplifier or the SurfaceDissolver.

 

 

For Q1: How come SurfaceDissolver doesn't do it's best from the start?

 

I checked in with out development team and there's a very complex technical limitation in there to do with the coding of the transformer. Itt's something to do with how the SurfaceDissolver works, in searching for coplanar regions, it doesn't quite work as a mesh is how I understood it. Thinning the point cloud before generating the mesh for simplification will reduce the complexity in the mesh before further simplification.

 

 

Q2: Any particular reason why it doesn't support Group By?

 

It looks like as of FME 2019.1 a Group By parameter has been added to the transformer, you can find this version available in the latest beta here. If you're opening up a workspace authored in an older version, remember to go to the Upgradeable Transformers in the Navigator to right click and upgrade the transformer to see the latest version containing the Group By parameter.

About the transformer acting as a blocking transformer, take a look at the Dissolve Inputs Separately section in the SurfaceDissolver documentation. When set to No, it operates in blocking mode, and when set to yes it should operate in a non-blocking mode.

Hope that helps!


mhab
Contributor
Forum|alt.badge.img+10
  • Author
  • Contributor
  • June 27, 2019

Thanks for the complete answer.

Small addition: If I use the non-blocking variant (Dissolve Inputs Seperately: yes) the repetition of SurfaceDissolver is without effect.


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings