Nieuwe versie 3D Bag triangulated

De vorige versie van de postgres dump van 3D Bag was triangulated. Ik begrijp dat dat voor veel applicaties onhandig was.
Voor mijn applicatie (unity, de game engine) was dit echter ideaal. Ik kon de triangles van de gebouwen direct omzetten naar een mesh. Unity heeft geen mogelijkheid voor het weergeven van n-gons.

Hoe kan ik de polygonen in de nieuwe versie van 3D Bag weer versimpelen naar triangles?

Dit heb ik geprobeerd in postgis:

CREATE OR REPLACE FUNCTION tesselate_to_multipolygon(
geometry)
RETURNS geometry AS
$BODY$
SELECT ST_Collect(geom) AS geom
FROM (
     SELECT ST_MakePolygon(ST_ExteriorRing((ST_Dump(ST_Tesselate($1))).geom)) AS geom) as geom_item;
$BODY$
LANGUAGE sql

select b.fid, tesselate_to_multipolygon(b.geometrie) as geom
from bag3d.lod22_3d b where fid = 17147742;

Wat resulteert in deze fout:

[XX000] ERROR: MultiPolygon is invalid : Polygon 1631 is invalid: points don't lie in the same plane : MULTIPOLYGON(((...

In mijn ervaring is dat lastig David. De functie ST_Tesselate moet dat in theorie kunnen maar is erg traag en klaagt snel. Ik gebruik zelf altijd ST_ConstrainedDelaunayTriangles maar dat werkt alleen op polygonen die niet-verticaal staan, anders krijg je dezelfde foutmelding. De kunst is dus om alle muren eruit te filteren en die naderhand met de hand op te splitsen in driehoeken. Dit kan omdat (naar mijn weten) alle muren in de 3D Bag bestaan uit rechthoeken waarvan een triangulatie met de hand te doen is.

Best wel een klusje dus.

Andere optie is om in Unity zelf een triangulatie te doen met behulp van wat libraries, maar dat is nu juist wat je probeert te vermijden natuurlijk :-/

1 like

De tirangulaties zijn nite aangepast in de obj files.
Blijkbaar kan je in Unity cityjson of een van de andere GIS formaten inlezen, begrijp ik dat goed?
Veel CAD applicaties kunnen enkel iets met .obj. Maar ook met conversie en omwegen.

afbeelding

In mijn ervaring is dat lastig David.

Daar was ik al bang voor.
Ik zal het met ConstrainedDelauneyTriangles proberen.

Andere optie is om in Unity zelf een triangulatie te doen met behulp van wat libraries, maar dat is nu juist wat je probeert te vermijden natuurlijk :-/

Ja inderdaad. Dit is hoe ik het nu aanpak. Op zich doe ik al een hele stap over de data heen voor normals en texture coordinates. Maar het maken van de triangulation kost ver uit de meeste rekenkracht.

I also recommend to use the .obj files if you can. If you also need the attributes on the models, you could triangulate the cityjson files with cjio’s triangulate operator (new in v0.7.0 https://github.com/cityjson/cjio/blob/master/CHANGELOG.md#070---2021-12-01).

1 like

Hi Balazs

This plugin comes from the opensource bim community.
Does a pretty nice job although the roofs seem to disappear in ifc
What is the reason to reconment .obj ?
IFC has advantage its the metadata in bim files…
Also, ifc has much more support and development.
I think the majority of bim users never touch .obj.

Hans

afbeelding

Does it have anything to do with this warning? :slight_smile:

afbeelding

Oh yes, you are right. I just didn’t remember about the plugin when I typed my response. However, with this plugin one would import a CityJSON file, and the CityJSON files of the 3D BAG are not triangulated.
If I understand correctly, the original question was about how to get triangulated models of the 3D BAG so they can be used in Unity.

By recommending .obj I focused on getting the already triangulated geometries as we write them, so there is no need to do a triangulation on your own.