Dear author,
Thanks for sharing such a great benchmark. I meet some issue when trying to use the part-level data. I randomly loaded some sample from the downloaded mesh, however, when I tried to use the following code:
import numpy as np
import io
import os
import trimesh
Load npz file
npz_path = "path/to/mesh.npz"
output_dir = "path/to/output"
os.makedirs(output_dir, exist_ok=True)
data = np.load(npz_path)
print(f"Keys: {list(data.keys())}")
Extract and save each mesh as PLY file
for key in data.keys():
# Convert bytes array to trimesh object
ply_bytes = data[key].tobytes()
mesh = trimesh.load(io.BytesIO(ply_bytes), file_type='ply')
print(f" - {key}: vertices={len(mesh.vertices)}, faces={len(mesh.faces)}")
# Save as PLY file
save_path = os.path.join(output_dir, key)
mesh.export(save_path)
to load the mesh and check the watertight property.
The output is like following:
[NOT watertight] 0028965bd9f7e03eea6979c5cd784846af3d573071da1900c5f829f35b0373da.npz
- full.ply: vertices=440417, faces=883094, NOT watertight
- part_0.ply: vertices=218286, faces=437340, NOT watertight
- part_1.ply: vertices=198967, faces=398744, NOT watertight
- part_2.ply: vertices=188646, faces=378038, NOT watertight
- part_3.ply: vertices=241089, faces=483146, NOT watertight
[NOT watertight] 003efd23e5acbd446374ead3c63bb0c173b3f4afaf1f44ce93b0bc485cbafa9d.npz
- full.ply: vertices=237261, faces=475272, NOT watertight
- part_0.ply: vertices=30901, faces=61896, NOT watertight
- part_1.ply: vertices=36600, faces=73308, watertight
- part_2.ply: vertices=20648, faces=41404, NOT watertight
- part_3.ply: vertices=26236, faces=52556, NOT watertight
- part_4.ply: vertices=6322, faces=12650, watertight
- part_5.ply: vertices=3220, faces=6448, watertight
- part_6.ply: vertices=18615, faces=37320, NOT watertight
- part_7.ply: vertices=11141, faces=22330, NOT watertight
- part_8.ply: vertices=9047, faces=18128, NOT watertight
- part_9.ply: vertices=3285, faces=6578, watertight
- part_10.ply: vertices=2788, faces=5580, watertight
- part_11.ply: vertices=11141, faces=22318, NOT watertight
- part_12.ply: vertices=9051, faces=18140, watertight
- part_13.ply: vertices=3290, faces=6590, watertight
- part_14.ply: vertices=2789, faces=5578, watertight
- part_15.ply: vertices=6323, faces=12660, watertight
- part_16.ply: vertices=3222, faces=6450, watertight
- part_17.ply: vertices=18610, faces=37286, NOT watertight
- part_18.ply: vertices=26235, faces=52564, NOT watertight
- part_19.ply: vertices=24906, faces=50014, NOT watertight
- part_20.ply: vertices=11316, faces=22694, NOT watertight
- part_21.ply: vertices=11901, faces=23842, NOT watertight
- part_22.ply: vertices=18365, faces=36864, NOT watertight
- part_23.ply: vertices=3948, faces=7934, NOT watertight
- part_24.ply: vertices=3947, faces=7914, NOT watertight
- part_25.ply: vertices=4332, faces=8702, watertight
- part_26.ply: vertices=2790, faces=5590, NOT watertight
- part_27.ply: vertices=2904, faces=5812, watertight
- part_28.ply: vertices=2790, faces=5594, watertight
- part_29.ply: vertices=2903, faces=5806, watertight
- part_30.ply: vertices=6045, faces=12108, NOT watertight
- part_31.ply: vertices=6045, faces=12146, NOT watertight
- part_32.ply: vertices=2254, faces=4526, NOT watertight
- part_33.ply: vertices=2254, faces=4524, NOT watertight
There are still many parts which are not watertight. Could you please give me some suggestions about how to fix this issue?
Dear author,
Thanks for sharing such a great benchmark. I meet some issue when trying to use the part-level data. I randomly loaded some sample from the downloaded mesh, however, when I tried to use the following code:
import numpy as np
import io
import os
import trimesh
Load npz file
npz_path = "path/to/mesh.npz"
output_dir = "path/to/output"
os.makedirs(output_dir, exist_ok=True)
data = np.load(npz_path)
print(f"Keys: {list(data.keys())}")
Extract and save each mesh as PLY file
for key in data.keys():
# Convert bytes array to trimesh object
ply_bytes = data[key].tobytes()
mesh = trimesh.load(io.BytesIO(ply_bytes), file_type='ply')
print(f" - {key}: vertices={len(mesh.vertices)}, faces={len(mesh.faces)}")
to load the mesh and check the watertight property.
The output is like following:
[NOT watertight] 0028965bd9f7e03eea6979c5cd784846af3d573071da1900c5f829f35b0373da.npz
[NOT watertight] 003efd23e5acbd446374ead3c63bb0c173b3f4afaf1f44ce93b0bc485cbafa9d.npz
There are still many parts which are not watertight. Could you please give me some suggestions about how to fix this issue?