import os import sys sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..') import numpy as np import cmapy as cm from utils import remove_long_edges from custom_utils.custom_utils import save_stl, write_obj from data.cloth3d_io import readPC2Frame from data.utils import Frame from custom_utils.custom_utils import _maskFaces import plotly.graph_objects as go import plotly.express as ex from plotly.subplots import make_subplots def plot_unposing_example(): frame = Frame('00438', 146, 'Jumpsuit') mesh_static = np.load(f'{folder_test}/mesh_static/{frame.id}_{frame.garment}.npy') mesh_mask = np.load(f'{folder_test}/mesh_mask/{frame.id}_{frame.garment}.npy') mesh_posed = readPC2Frame(os.path.join(folder_test, 'mesh_posed_no_orient', f'{frame.id}_{frame.garment}.pc16'), frame.frame_nr, True) mesh_unposed = readPC2Frame(os.path.join(folder_test, 'mesh_unposed_no_shape', f'{frame.id}_{frame.garment}.pc16'), frame.frame_nr, True) mesh_unposed_shaped = readPC2Frame(os.path.join('temp', f'{frame.id}_{frame.garment}_unposed_shaped.pc16'), frame.frame_nr, True)[mesh_mask] F = np.load('smpl/smpl_faces.npy') _, faces = _maskFaces(np.zeros((14475, 3)), F, mesh_mask) mesh_static, v_mask = remove_long_edges(mesh_static, faces.astype(np.int32)) mesh_posed = mesh_posed[v_mask] mesh_unposed = mesh_unposed[v_mask] mesh_unposed_shaped = mesh_unposed_shaped[v_mask] new_mask = np.zeros_like(mesh_mask) new_mask[mesh_mask] = v_mask _, faces = _maskFaces(np.zeros((14475, 3)), F, new_mask) fig = make_subplots(rows=1, cols=4, specs=[[{'type': 'mesh3d'}, {'type': 'mesh3d'}, {'type': 'mesh3d'}, {'type': 'mesh3d'}]]) fig.add_trace(go.Mesh3d(x=mesh_static[:,0], y=mesh_static[:,2], z=mesh_static[:,1], i=faces[:,0], j=faces[:,1], k=faces[:,2], color='lightpink', opacity=1), row=1, col=1) fig.add_trace(go.Mesh3d(x=mesh_posed[:,0], y=mesh_posed[:,2], z=mesh_posed[:,1], i=faces[:,0], j=faces[:,1], k=faces[:,2], color='lightblue', opacity=1), row=1, col=2) fig.add_trace(go.Mesh3d(x=mesh_unposed_shaped[:,0], y=mesh_unposed_shaped[:,2], z=mesh_unposed_shaped[:,1], i=faces[:,0], j=faces[:,1], k=faces[:,2], color='lightgreen', opacity=1), row=1, col=3) fig.add_trace(go.Mesh3d(x=mesh_unposed[:,0], y=mesh_unposed[:,2], z=mesh_unposed[:,1], i=faces[:,0], j=faces[:,1], k=faces[:,2], color='lightyellow', opacity=1), row=1, col=4) fig.update_layout(scene=dict( xaxis=dict(range=[-1, 1]), yaxis=dict(range=[-1, 1]), zaxis=dict(range=[-1, 1]), ), scene_aspectmode='cube') # fig.show() faces = faces.astype(np.uint32) save_stl(f'temp/unposing_plots/{frame.id}_{frame.frame_nr}_{frame.garment}_mesh_static.stl', mesh_static, faces) save_stl(f'temp/unposing_plots/{frame.id}_{frame.frame_nr}_{frame.garment}_mesh_posed.stl', mesh_posed, faces) save_stl(f'temp/unposing_plots/{frame.id}_{frame.frame_nr}_{frame.garment}_mesh_unposed.stl', mesh_unposed, faces) save_stl(f'temp/unposing_plots/{frame.id}_{frame.frame_nr}_{frame.garment}_mesh_unposed_shaped.stl', mesh_unposed_shaped, faces) pass def plot_normals_example(): frame = Frame('00438', 146, 'Jumpsuit') mesh_static = np.load(f'{folder_test}/mesh_static/{frame.id}_{frame.garment}.npy') mesh_mask = np.load(f'{folder_test}/mesh_mask/{frame.id}_{frame.garment}.npy') mesh_posed = readPC2Frame(os.path.join(folder_test, 'mesh_posed_no_orient', f'{frame.id}_{frame.garment}.pc16'), frame.frame_nr, True) # mesh_unposed = readPC2Frame(os.path.join(folder_test, 'mesh_unposed_no_shape', f'{frame.id}_{frame.garment}.pc16'), frame.frame_nr, True) # mesh_unposed_shaped = readPC2Frame(os.path.join('temp', f'{frame.id}_{frame.garment}_unposed_shaped.pc16'), frame.frame_nr, True)[mesh_mask] mesh_normals = readPC2Frame(os.path.join(folder_test, 'mesh_normals', f'{frame.id}_{frame.garment}.pc16'), frame.frame_nr, True) uv_normals = np.load(os.path.join(folder_test, 'uv_normals', f'{frame.id}_{frame.frame_nr}_{frame.garment}.npz'))['uv_normals'] F = np.load('smpl/smpl_faces.npy') _, faces = _maskFaces(np.zeros((14475, 3)), F, mesh_mask) mesh_static, v_mask = remove_long_edges(mesh_static, faces.astype(np.int32)) mesh_posed = mesh_posed[v_mask] # mesh_unposed = mesh_unposed[v_mask] # mesh_unposed_shaped = mesh_unposed_shaped[v_mask] new_mask = np.zeros_like(mesh_mask) new_mask[mesh_mask] = v_mask _, faces = _maskFaces(np.zeros((14475, 3)), F, new_mask) v_colors = (mesh_normals + 1.4) / 2.8 v_colors = v_colors[v_mask] # v_colors = (v_colors - v_colors.min()) / (v_colors.max() - v_colors.min()) fig = go.Figure() fig.add_trace(go.Mesh3d(x=mesh_posed[:,0], y=mesh_posed[:,2], z=mesh_posed[:,1], i=faces[:,0], j=faces[:,1], k=faces[:,2], vertexcolor=v_colors, opacity=1),) fig.update_layout(scene=dict( xaxis=dict(range=[-1, 1]), yaxis=dict(range=[-1, 1]), zaxis=dict(range=[-1, 1]), ), scene_aspectmode='cube') helper = dict(xaxis = dict(range=[-1,1], showbackground=False, showticklabels=False, showaxeslabels=False, showspikes=False, visible=False), yaxis = dict(range=[-1,1], showbackground=False, showticklabels=False, showaxeslabels=False, showspikes=False, visible=False), zaxis = dict(range=[-1,1], showbackground=False, showticklabels=False, showaxeslabels=False, showspikes=False, visible=False),) fig.update_layout(scene = helper) # fig.show() uv_normals = (uv_normals + 1.4) / 2.8 uv_normals = np.concatenate((uv_normals[:256], uv_normals[256:]), axis=1) # flip uv_normals along y axis uv_normals = uv_normals[:,::-1,:] ex.imshow(uv_normals).show() pass if __name__ == '__main__': folder_train = '/data-local/127/cloth3d_processed' folder_test = '/data-local/127_2/cloth3d_processed_test' # plot_unposing_example() plot_normals_example() pass