-
Notifications
You must be signed in to change notification settings - Fork 27
/
Copy pathexample.py
50 lines (40 loc) · 1.47 KB
/
example.py
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
from core.remesh import calc_vertex_normals
from core.opt import MeshOptimizer
from util.func import load_obj, make_sphere,make_star_cameras, normalize_vertices, save_obj, save_images
from util.render import NormalsRenderer
from tqdm import tqdm
from util.snapshot import snapshot
try:
from util.view import show
except:
show = None
fname = 'data/lucy.obj'
steps = 100
snapshot_step = 1
mv,proj = make_star_cameras(4,4)
renderer = NormalsRenderer(mv,proj,[512,512])
target_vertices,target_faces = load_obj(fname)
target_vertices = normalize_vertices(target_vertices)
target_normals = calc_vertex_normals(target_vertices,target_faces)
target_images = renderer.render(target_vertices,target_normals,target_faces)
save_images(target_images[...,:3], './out/target_images/')
save_images(target_images[...,3:], './out/target_alpha/')
vertices,faces = make_sphere(level=2,radius=.5)
opt = MeshOptimizer(vertices,faces)
vertices = opt.vertices
snapshots = []
for i in tqdm(range(steps)):
opt.zero_grad()
normals = calc_vertex_normals(vertices,faces)
images = renderer.render(vertices,normals,faces)
loss = (images-target_images).abs().mean()
loss.backward()
opt.step()
if show and i%snapshot_step==0:
snapshots.append(snapshot(opt))
vertices,faces = opt.remesh()
save_obj(vertices,faces,'./out/result.obj')
save_images(images[...,:3], './out/images/')
save_images(images[...,3:], './out/alpha/')
if show:
show(target_vertices,target_faces,snapshots)