(scalp_path)
| 677 | |
| 678 | @staticmethod |
| 679 | def compute_scalp_data(scalp_path): |
| 680 | scalp_mesh = trimesh.load(scalp_path) |
| 681 | scalp_mesh_data={} |
| 682 | scalp_v, scalp_f, scalp_uv = mesh_to_data(scalp_mesh) |
| 683 | scalp_v_tangents, scalp_v_bitangents, scalp_v_normals = compute_vertex_tbn(scalp_v, scalp_uv, scalp_f.astype(np.int32)) |
| 684 | scalp_mesh_data["verts"]=scalp_v |
| 685 | scalp_mesh_data["faces"]=scalp_f |
| 686 | scalp_mesh_data["uv"]=scalp_uv |
| 687 | scalp_mesh_data["v_tangents"]=scalp_v_tangents |
| 688 | scalp_mesh_data["v_bitangents"]=scalp_v_bitangents |
| 689 | scalp_mesh_data["v_normals"]=scalp_v_normals |
| 690 | # #have it also on gpu to avoid too many transfers between cpu and gpu |
| 691 | # self.scalp_mesh_data_gpu={} |
| 692 | # self.scalp_mesh_data_gpu["verts"]=torch.from_numpy(scalp_v).cuda() |
| 693 | # self.scalp_mesh_data_gpu["faces"]=torch.from_numpy(scalp_f).cuda() |
| 694 | # self.scalp_mesh_data_gpu["uv"]=torch.from_numpy(scalp_uv).cuda() |
| 695 | #get also tbn for each vertex of the mesh |
| 696 | |
| 697 | #compute also a rasterized map of barycentric coordinates and face indices |
| 698 | scalp_uv_maps_size=512 |
| 699 | scalp_index_map, scalp_vertex_idxs_map, scalp_bary_map= compute_uv_space_data(torch.from_numpy(scalp_uv), torch.from_numpy(scalp_f.astype(np.int32)), scalp_uv_maps_size) |
| 700 | scalp_mesh_data["index_map"]=scalp_index_map |
| 701 | scalp_mesh_data["vertex_idxs_map"]=scalp_vertex_idxs_map |
| 702 | scalp_mesh_data["bary_map"]=scalp_bary_map |
| 703 | |
| 704 | return scalp_mesh, scalp_mesh_data |
| 705 | |
| 706 | |
| 707 |
no test coverage detected