-
Notifications
You must be signed in to change notification settings - Fork 26
Expand file tree
/
Copy pathdilating_grids.py
More file actions
69 lines (52 loc) · 1.71 KB
/
Copy pathdilating_grids.py
File metadata and controls
69 lines (52 loc) · 1.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# Copyright Contributors to the OpenVDB Project
# SPDX-License-Identifier: Apache-2.0
#
import time
from typing import List
import fvdb.viz as fviz
import numpy as np
import torch
import viser
from fvdb.utils.examples import load_dragon_mesh
from fvdb import Grid
class Viewer:
def __init__(self):
self.server = viser.ViserServer()
self.scene: viser.SceneApi = self.server.scene
def plot_grid_edges(self, name: str, grid: Grid, color: List[float]):
gv, ge = fviz.grid_edge_network(grid)
segments = torch.stack(
[
gv[ge[:, 0], :], # [N, 3]
gv[ge[:, 1], :], # [N, 3]
],
dim=1,
)
self.scene.add_line_segments(
name=f"/{name}/grid",
points=segments.cpu().numpy(),
colors=np.array([color])[None, :],
)
def show(self):
while True:
time.sleep(10.0)
def main():
# Load mesh
vertices_t, faces_t = load_dragon_mesh(mode="vf")
vertices = vertices_t.cpu().numpy()
faces = faces_t.cpu().numpy()
print(vertices.min(0), vertices.max(0))
print(f"Loaded mesh with {vertices.shape} vertices, {faces.shape} faces")
vox_size = 0.25
grid = Grid.from_mesh(
mesh_vertices=vertices_t.cuda(), mesh_faces=faces_t.cuda(), voxel_size=vox_size, origin=[0.0] * 3
)
print(f"Grid has {grid.num_voxels} voxels")
grid_dilated = grid.dilated_grid(3)
print(f"Grid has {grid_dilated.num_voxels} voxels")
viewer = Viewer()
viewer.plot_grid_edges("base_grid", grid, [1.0, 0.0, 0.0])
viewer.plot_grid_edges("dilated_grid", grid_dilated, [0.0, 0.0, 1.0])
viewer.show()
if __name__ == "__main__":
main()