File size: 1,804 Bytes
e7b9fb6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#  Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
# 
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
# 
#  http://www.apache.org/licenses/LICENSE-2.0
# 
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
import numpy as np
import scipy.sparse as sp

# Load the NPZ file
data = np.load('articulation_xlv2_test.npz', allow_pickle=True)
data_list = data['arr_0']

print(f"Loaded {len(data_list)} data entries")
print(f"Data keys: {data_list[0].keys()}")
# 'vertices', 'faces', 'normals', 'joints', 'bones', 'root_index', 'uuid', 'pc_w_norm', 'joint_names', 'skinning_weights_value', 
# 'skinning_weights_row', 'skinning_weights_col', 'skinning_weights_shape'

data = data_list[0] # check the first data

vertices = data['vertices'] # (n_vertex, 3)
faces = data['faces'] # (n_faces, 3)
normals = data['normals'] # (n_vertex, 3)
joints = data['joints'] # (n_joints, 3)
bones = data['bones'] # (n_bones, 2)
pc_w_norm = data['pc_w_norm'] # (8192, 6)

# Extract the sparse skinning weights components
skinning_data = data['skinning_weights_value']
skinning_rows = data['skinning_weights_row']
skinning_cols = data['skinning_weights_col']
skinning_shape = data['skinning_weights_shape']

skinning_sparse = sp.coo_matrix((skinning_data, (skinning_rows, skinning_cols)), shape=skinning_shape)
skinning_weights = skinning_sparse.toarray()  # (n_vertex, n_joints)