Labelisation
1. Labelisation of the mesh
One of the objectives of the application is to keep the informations of the mesh that can come from a IFC Files.The feelpp toolbox [1] for example use Surface Label to store characteristics about the surface such as the coefficient of heat diffusion that can be use during a simulation. Example:
"Materials":
{
,
"internal-walls":
{
"markers":"internal-walls",
"k":"0.25"
},
"internal-doors":
{
"markers":"internal-doors",
"k":"0.13"
}
}
So our goal would be to be able to take the informations of the Surfaces and keep it after passing them through the Kinetic algorithm.
First when we read the paper link: Repairing geometric errors in 3D urban models with kinetic data structures by Mulin Yu, Florent Lafarge, Sven Oesau, Bruno Hilaire[inria.hal.science/hal-03767910/document]
there is a section about labeling (part 4.3) every polyhedrall shape of the partition,with an extensible list of semantic class : " L = {slab, space, wall, roof, door, window, outside} in case of IFC models. These label sets were used for our experiments, but can freely be extended to further labels.
" .
It explains that labeling the partition is not a trivial operations to do as some shapes and surfaces from the partition are not the same than the original meshes
but they come up with a energy minimization method.
C is the set of polyhedrall cells, \(x_{i}\) the label , i∼j the pair of adjacents cells, \(D_{i}\) mesure the constistency between the semantic class assigned and the differenent semantic properties of facets and \(V_{i~j}\) penalize the complexity of the geometric configuration or if the configuration is semantically improbable.The goal was to minimize U.
2. Issue encountered
As we could earlier we had good hope of the labelisation of surfaces being able with the CGAL algorithms, as Inria titane team succeed in making it,But The version on CGAL is not the same as they have at Inria.They implemented the version about CityGML format.So the energy minimization method is not implemented in the CGAL version in fact, even the IFC files format is not supported.
So we have to think of a way to generate the labelisation.The first idea I considered was to assign labels to all points in the point cloud. So initially we need to:
-
Import the mesh with label on the surfaces (MSH import)
-
Convert the mesh into point cloud but keep the labeling
-
Find a way to keep the labeling while generating point clouds through isotropic remeshing.
-
In the Kinetic algorithm, modify the solver so that when generating a face, it examines the points within the face, identifies the most frequent label, and assigns this label to the surface.
But the issue is modifying the solver may be too hard for the limited time we have,and it would probably need assistance for someone with deeper knowledge about CGAL coding.
As a result, we decided against trying to preserve all labels for every face and opted for a simpler approach.The main idea was to look at the input mesh given to KSR with marker on each faces and compare the position of the labeled faces with the faces on the output and for each faces in the output we compare the positions of the labeled faces in the input mesh with the faces in the output and assign the label from the closest face in the input mesh to the output faces. As a result we have our output mesh labeled with markers from the input mesh, but with less precision on the markers and the number of marker are less numerous.
To do that we utilize the 3D Fast Intersection and Distance Computation(AABB tree)
[2],
this package allows us to calculate the intersection or the distance between different object, with this package we could locate the id of the nearest triangle
from the input mesh to the faces we wanted to label.
Exemple results :
Input mesh with marker |
Output from KSR |
As we can see, we lost most of the label in the output, but the label for each face of the block are here with some outgrowth to fullfill the wall insice the block. But as we have at least a label on each face. We could try remeshing the KSR to produce smaller triangles for better comparison with the input mesh and have a better precision but more execution time
Ksr remesh with marker |
And with the remesh using isotropic remeshing when we compare with the input mesh to get the marker, we have a good representation of the initial mesh,we get the marker on the windows,wall,door.
Here is another example with the ACJasmin mesh :
Input Mesh |
Output Mesh |
Next Metric