Personally, I use the same workflow you are trying to achieve. I let the tool run for as long as it needs (even a few days). And if it works, I use a custom Python script to find all OBJ files in all subfolders and copy them to one folder. And yes, the exported OBJ files do not have absolute coordinates – they have reduced coordinates (the reduction values are different for each file). The Python script has to correct this when copying (OBJ and JSON are text files, so it's not impossible). I tested this on a 6000-feature Multipatch dataset and it worked.
If I then need to merge the files, I import them into Blender and export them as a single OBJ file (Blender can also be controlled by Python). With your hardware, it should be a piece of cake.
That's quite a convenient procedure for such expensive and advanced Esri software, isn't it? (sarcasm)
Alternatively, you could try merging all Multipatch geometry into a single feature before exporting:
– GP tool Layer 3D to Feature Class (with the Grouping Field set correctly)
OR
– Merge editing tool (select objects and merge)
– Then the classic workflow Add 3D Formats to Multipatch —> Export 3D Objects (this time the Multipatch layer contains only one feature, so the folder structure will not be that complex and the tool may be much faster).
BUT:
– The Layer 3D to Feature Class (with Grouping Field) and Merge (Editing) tools also run extremely slow for large number of Multipatch features (often unable to complete the process). This can be partially solved by processing smaller chunks (but this means more manual work). So this may not solve your problem, but it's an idea to try...
Regarding your questions:
1. As for coordinate reduction (the possible Merge button), I have a separate thread about it, you can give it a thumbs up.
2. I can't think of any reason why it shouldn't work on another subset, sounds like a random error to me...
Thank you vojtastic_p for the detailed explanation! I gave a thumb-up to the thread.
I tried running a Python script to read only the first 50 subfolders in the Export 3D Objects folder. (from my earlier 'export 3D' attempt that I had to abort - which made 76,000 folders with OBJ and JSON)
I do understand schematically what needs to happen, but I'm not that good at coding, so I instructed ChatGPT to write a script. I do acknowledge that the .JSON file contained a huge value for coordinates - perhaps meaning that it is marking a global location. So - I specified the script to use the location of the bldg in the first folder as an origin and all the other bldg to be relatively located. I was able to run the script, no errors, it merged 50 obj files into one obj file (via text only), and I was able to import that .obj file into Rhino3D which is what I normally use.
However, the script fails to locate the buildings correctly. It seems to cluster the buildings in a strange manner, sort of along X axis. Intuitively, it seems to either lack the Y axis offset information or using a different scale for Y axis. (screenshot below)
I feel like if I can correctly understand each field of the json file and figure out the way to translate it correctly, this might work. I'm wondering if you could (1) spare some time to discuss it directly with me (pls. email me: yishida@gmail.com), or (2) share part of your python script showing how it handles the location conversion...
In the meantime I think I'll re-run the export3D for a few days, but I want to get this workflow right, since this might be my only option...
Thank you for your attention!
Yasushi
P.S.
One of the JSON file looks like this (city name has been changed):
{"attributes":{"OBJECTID_1":10174,"ObjectId":null,"GlobalID":"{0914D5FB-8419-46DB-87BC-B10C1ED58CAA}","Source":"UndisclosedCity Buildings 2 AGOL ArcGIS Urban","BuildingFID":"Building_10_2","Id":null,"BldgID":null,"TopElev3d":null,"BaseElev3d":null,"ROOFTYPE":null,"MERGE_SRC_1":null,"Status_Update":null,"Description":null,"Z_Min":1,"Z_Max":1.9664000000047963,"Z_Mean":1.4832000000023982,"ESRI3DO_TYPE":"3D_shapebuffer","ESRI3DO_SHASH":"9d36778866ac11dad31119c9d9a7db90a39486c14cce3e940f6a60d8a37b7bd9","ESRI3DO_OX":-157.85239313128949,"ESRI3DO_OY":21.30046874142166,"ESRI3DO_OZ":1,"ESRI3DO_TX":0,"ESRI3DO_TY":0,"ESRI3DO_TZ":0,"ESRI3DO_SX":1,"ESRI3DO_SY":1,"ESRI3DO_SZ":1,"ESRI3DO_RX":0,"ESRI3DO_RY":1,"ESRI3DO_RZ":0,"ESRI3DO_RDEG":0}}