Spaces:
Sleeping
Sleeping
| import pdb | |
| import torch | |
| import tqlt.mesh as tmesh | |
| import trimesh | |
| from core.opt import MeshOptimizer | |
| from core.remesh import calc_vertex_normals | |
| from einops import repeat | |
| from tqdm import tqdm | |
| from util.func import ( | |
| load_obj, | |
| make_sphere, | |
| make_star_cameras, | |
| normalize_vertices, | |
| save_images, | |
| save_obj, | |
| ) | |
| from util.render import NormalsRenderer | |
| 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) | |
| alpha = repeat(target_images[..., 3:], "b h w 1 -> b h w 3") | |
| save_images(target_images[..., :3], "./out/target_images/") | |
| save_images(alpha, "./out/target_alpha/") | |
| mesh = tmesh.Mesh.load("./smpl.obj") | |
| mesh.v[..., 1] = -mesh.v[..., 1] | |
| vertices = mesh.v | |
| faces = mesh.f.long() | |
| # vertices, faces = make_sphere(level=2, radius=0.5) | |
| opt = MeshOptimizer(vertices, faces) | |
| vertices = opt.vertices | |
| for i in tqdm(range(steps)): | |
| 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() | |
| print(vertices.shape) | |
| 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) | |