def visualize_garment(garment_path, with_tex=True): # Load SMPL body for the garment path = split(garment_path)[0] garment_org_body = load_smpl_from_file(join(path, 'registration.pkl')) garment_org_body = Mesh(garment_org_body.v, garment_org_body.f) # Load unposed garment garment_unposed = Mesh(filename=gar_dict[garment_type][index]) garment_unposed.set_texture_image(join(path, 'multi_tex.jpg')) # Pose garments dat = pkl.load(open(join(path, 'registration.pkl'))) dat['gender'] = 'neutral' garment_posed = pose_garment(garment_unposed, vert_indices[garment_type], dat) garment_posed = remove_interpenetration_fast(garment_posed, garment_org_body) if with_tex: garment_posed.vt = garment_unposed.vt garment_posed.ft = garment_unposed.ft garment_posed.set_texture_image(join(path, 'multi_tex.jpg')) mvs = MeshViewers((1, 3), keepalive=True) mvs[0][2].set_background_color(np.array([1, 1, 1])) mvs[0][1].set_background_color(np.array([1, 1, 1])) mvs[0][0].set_background_color(np.array([1, 1, 1])) mvs[0][1].set_static_meshes([garment_org_body]) mvs[0][2].set_static_meshes([garment_org_body, garment_posed]) mvs[0][0].set_static_meshes([garment_unposed]) return
def dress(smpl_tgt, body_src, garment, vert_inds, garment_tex=None): ''' :param smpl: SMPL in the output pose :param garment: garment mesh in t-pose :param body_src: garment body in t-pose :param garment_tex: texture file :param vert_inds: vertex association b/w smpl and garment :return: To use texture files, garments must have vt, ft ''' tgt_params = { 'pose': np.array(smpl_tgt.pose.r), 'trans': np.array(smpl_tgt.trans.r), 'betas': np.array(smpl_tgt.betas.r), 'gender': 'neutral' } smpl_tgt.pose[:] = 0 body_tgt = Mesh(smpl_tgt.r, smpl_tgt.f) ## Re-target ret = retarget(garment, body_src, body_tgt) ## Re-pose ret_posed = pose_garment(ret, vert_inds, tgt_params) body_tgt_posed = pose_garment(body_tgt, list(range(len(body_tgt.v))), tgt_params) ## Remove intersections ret_posed_interp = remove_interpenetration_fast(ret_posed, body_tgt_posed) ret_posed_interp.vt = garment.vt ret_posed_interp.ft = garment.ft ret_posed_interp.set_texture_image(garment_tex) return ret_posed_interp
garment_unposed_upper = Mesh( filename='./Multi-Garment_dataset/125611499279708/TShirtNoCoat.obj') garment_unposed_upper.set_texture_image(join(path_upper, 'multi_tex.jpg')) garment_unposed_lower = Mesh( filename='./Multi-Garment_dataset/125611499279708/ShortPants.obj') garment_unposed_lower.set_texture_image(join(path_lower, 'multi_tex.jpg')) # Pose garments # upper dat_upper = pkl.load(open(join(path_upper, 'registration.pkl'), "rb"), encoding="latin1") dat_upper['gender'] = 'neutral' garment_posed_upper = pose_garment(garment_unposed_upper, vert_indices[type_upper], dat_upper) garment_posed_upper = remove_interpenetration_fast(garment_posed_upper, upper_garment_org_body) # loading textures on posed garments garment_posed_upper.vt = garment_unposed_upper.vt garment_posed_upper.ft = garment_unposed_upper.ft garment_posed_upper.set_texture_image(join(path_upper, 'multi_tex.jpg')) # lower dat_lower = pkl.load(open(join(path_lower, 'registration.pkl'), "rb"), encoding="latin1") dat_lower['gender'] = 'neutral' garment_posed_lower = pose_garment(garment_unposed_lower, vert_indices[type_lower], dat_lower) garment_posed_lower = remove_interpenetration_fast(garment_posed_lower, lower_garment_org_body) # loading textures on posed garments garment_posed_lower.vt = garment_unposed_lower.vt