| | 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() |
| |
|
| | |
| |
|
| | 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) |
| |
|