From 9e93c6f47734eae4f8e960fce51ac0b1acd03a71 Mon Sep 17 00:00:00 2001 From: Hunor Laczko Date: Mon, 3 Jul 2023 22:57:54 +0200 Subject: [PATCH] generate normals figure --- utils/generate_figures.py | 47 ++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/utils/generate_figures.py b/utils/generate_figures.py index b08abbf..1a31b7b 100644 --- a/utils/generate_figures.py +++ b/utils/generate_figures.py @@ -3,6 +3,9 @@ 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 @@ -12,24 +15,6 @@ import plotly.graph_objects as go from plotly.subplots import make_subplots -def remove_long_edges(vertices, faces): - # Compute edge lengths - edges = np.vstack((faces[:,[0,1]], faces[:,[1,2]], faces[:,[2,0]])) - edge_lengths = np.linalg.norm(vertices[edges[:,0]] - vertices[edges[:,1]], axis=1) - - # Find edges longer than 0.1 - long_edges = edges[edge_lengths > 0.1] - - # Find vertices that are part of long edges - vertices_to_remove = np.unique(long_edges) - - # Remove vertices and update faces - mask = np.ones(vertices.shape[0], dtype=bool) - mask[vertices_to_remove] = False - new_vertices = vertices[mask] - - - return new_vertices, mask def plot_unposing_example(): @@ -87,7 +72,7 @@ def plot_normals_example(): # 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 = np.load(os.path.join(folder_test, 'uv_normals', f'{frame.id}_{frame.frame_nr}_{frame.garment}.npz')) F = np.load('smpl/smpl_faces.npy') _, faces = _maskFaces(np.zeros((14475, 3)), F, mesh_mask) @@ -101,12 +86,13 @@ def plot_normals_example(): 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'}]]) + 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.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 = 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]), @@ -114,11 +100,22 @@ def plot_normals_example(): 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() + + + + pass + if __name__ == '__main__': folder_train = '/data-local/127/cloth3d_processed' - folder_test = '/data-local/127/cloth3d_processed_test' + folder_test = '/data-local/127_2/cloth3d_processed_test' # plot_unposing_example() plot_normals_example()