Mariam-Elz commited on
Commit
5fdafe5
·
verified ·
1 Parent(s): ab72e0c

Upload util/renderer.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. util/renderer.py +49 -0
util/renderer.py ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import torch
3
+ import torch.nn as nn
4
+ import nvdiffrast.torch as dr
5
+ from util.flexicubes_geometry import FlexiCubesGeometry
6
+
7
+ class Renderer(nn.Module):
8
+ def __init__(self, tet_grid_size, camera_angle_num, scale, geo_type):
9
+ super().__init__()
10
+
11
+ self.tet_grid_size = tet_grid_size
12
+ self.camera_angle_num = camera_angle_num
13
+ self.scale = scale
14
+ self.geo_type = geo_type
15
+ # self.glctx = dr.RasterizeCudaContext()
16
+
17
+ if self.geo_type == "flex":
18
+ self.flexicubes = FlexiCubesGeometry(grid_res = self.tet_grid_size)
19
+
20
+ def forward(self, data, sdf, deform, verts, tets, training=False, weight = None):
21
+
22
+ results = {}
23
+
24
+ deform = torch.tanh(deform) / self.tet_grid_size * self.scale / 0.95
25
+ if self.geo_type == "flex":
26
+ deform = deform *0.5
27
+
28
+ v_deformed = verts + deform
29
+
30
+ verts_list = []
31
+ faces_list = []
32
+ reg_list = []
33
+ n_shape = verts.shape[0]
34
+ for i in range(n_shape):
35
+ verts_i, faces_i, reg_i = self.flexicubes.get_mesh(v_deformed[i], sdf[i].squeeze(dim=-1),
36
+ with_uv=False, indices=tets, weight_n=weight[i], is_training=training)
37
+
38
+ verts_list.append(verts_i)
39
+ faces_list.append(faces_i)
40
+ reg_list.append(reg_i)
41
+ verts = verts_list
42
+ faces = faces_list
43
+
44
+ flexicubes_surface_reg = torch.cat(reg_list).mean()
45
+ flexicubes_weight_reg = (weight ** 2).mean()
46
+ results["flex_surf_loss"] = flexicubes_surface_reg
47
+ results["flex_weight_loss"] = flexicubes_weight_reg
48
+
49
+ return results, verts, faces