(self, res=8, clean_mesh=False, map_states=None)
| 438 | |
| 439 | @torch.no_grad() |
| 440 | def extract_mesh(self, res=8, clean_mesh=False, map_states=None): |
| 441 | sdf_network = self.decoder |
| 442 | sdf_network.eval() |
| 443 | vertexes = map_states["voxel_vertex_idx"] |
| 444 | voxels = map_states["voxels"] |
| 445 | |
| 446 | index = vertexes.eq(-1).any(-1) # remove no smallest voxel |
| 447 | voxels = voxels[~index.cpu(), :] |
| 448 | vertexes = vertexes[~index.cpu(), :] |
| 449 | centres = (voxels[:, :3] + voxels[:, -1:] / 2) * self.voxel_size |
| 450 | |
| 451 | encoder_states = {} |
| 452 | encoder_states["voxel_vertex_idx"] = vertexes.cuda() |
| 453 | encoder_states["voxel_center_xyz"] = centres.cuda() |
| 454 | encoder_states["sdf_priors"] = self.sdf_priors |
| 455 | |
| 456 | mesh = self.mesher.create_mesh( |
| 457 | self.decoder, encoder_states, self.voxel_size, voxels, |
| 458 | frame_poses=None, depth_maps=None, |
| 459 | clean_mseh=clean_mesh, require_color=True, offset=-self.offset, res=res) |
| 460 | return mesh |
| 461 | |
| 462 | @torch.no_grad() |
| 463 | def extract_voxels(self, map_states=None): |
no test coverage detected