def Finalize(src_V, param_id): pyDeform.DenormalizeByTemplate(src_V, param_id.tolist())
print( 'iter=%d, loss1_forward=%.6f loss1_backward=%.6f loss2_forward=%.6f loss2_backward=%.6f' % (it, np.sqrt(loss1_forward.item() / GV1.shape[0]), np.sqrt(loss1_backward.item() / GV2.shape[0]), np.sqrt(loss2_forward.item() / GV2.shape[0]), np.sqrt(loss2_backward.item() / GV1.shape[0]))) current_loss = loss.item() if save_path != '': torch.save({'func': func, 'optim': optimizer}, save_path) GV1_deformed = func.forward(GV1_device) GV1_deformed = torch.from_numpy(GV1_deformed.data.cpu().numpy()) V1_copy = V1.clone() #Finalize(V1_copy, F1, E1, V2G1, GV1_deformed, 1.0, param_id2) pyDeform.NormalizeByTemplate(V1_copy, param_id1.tolist()) V1_origin = V1_copy.clone() #V1_copy = V1_copy.to(device) func.func = func.func.cpu() V1_copy = func.forward(V1_copy) V1_copy = torch.from_numpy(V1_copy.data.cpu().numpy()) src_to_src = torch.from_numpy( np.array([i for i in range(V1_origin.shape[0])]).astype('int32')) pyDeform.SolveLinear(V1_origin, F1, E1, src_to_src, V1_copy, 1, 1) pyDeform.DenormalizeByTemplate(V1_origin, param_id2.tolist()) pyDeform.SaveMesh(output_path, V1_origin, F1)
def Finalize(src_V, src_F, src_E, src_to_graph, graph_V, rigidity, param_id): pyDeform.NormalizeByTemplate(src_V, param_id.tolist()) pyDeform.SolveLinear(src_V, src_F, src_E, src_to_graph, graph_V, rigidity) pyDeform.DenormalizeByTemplate(src_V, param_id.tolist())
V1_copy = V1_origin.clone().to(device) if i != 0: V1_copy = func.integrate(V1_copy, 0, i * 0.04, device) V1_copy = torch.from_numpy(V1_copy.data.cpu().numpy()) src_to_src = torch.from_numpy(np.array([i for i in range(V1_origin.shape[0])]).astype('int32')) E1 = np.zeros((F1.shape[0] * 3, 2), dtype='int32') F1_numpy = F1.numpy() E1[:F1.shape[0],:] = F1_numpy[:,0:2] E1[F1.shape[0]:F1.shape[0]*2,:] = F1_numpy[:,1:3] E1[F1.shape[0]*2:,0] = F1_numpy[:,2] E1[F1.shape[0]*2:,1] = F1_numpy[:,0] E1 = torch.from_numpy(E1) pyDeform.SolveLinear(V1_deform, F1, E1, src_to_src, V1_copy, 1, 1) pyDeform.DenormalizeByTemplate(V1_deform, param_id2.tolist()) pyDeform.SaveMesh('%s/src-%02d.obj'%(output_path,i), V1_deform, F1) V2_copy = V2.clone() pyDeform.NormalizeByTemplate(V2_copy, param_id2.tolist()) V2_origin = V2_copy.clone() for i in range(26): V2_deform = V2_origin.clone() V2_copy = V2_origin.clone().to(device) if i != 25: V2_copy = func.integrate(V2_copy, 1, i * 0.04, device) V2_copy = torch.from_numpy(V2_copy.data.cpu().numpy()) src_to_src = torch.from_numpy(np.array([i for i in range(V2_origin.shape[0])]).astype('int32'))