Note
Go to the end to download the full example as a Python script or as a Jupyter notebook.
Surface with multiple textures#
This example demonstrates one possible method for displaying a 3D surface with multiple textures.
Thanks to Emmanuel Reynaud and Luis Gutierrez for providing the gorgeous coral model for this demo. You can find the data on FigShare: https://zenodo.org/records/13380203
More information on the methods used to generate this model can be found in L. Gutierrez-Heredia, C. Keogh, E. G. Reynaud, Assessing the Capabilities of Additive Manufacturing Technologies for Coral Studies, Education, and Monitoring. Front. Mar. Sci. 5 (2018), doi:10.3389/fmars.2018.00278.
A bit about 3D models#
A standard way to define a 3D model (mesh, or Surface in napari) is by listing vertices (3D point coordinates) and faces (triplets of vertex indices - each face is a triangle in 3D space). Meshes are often stored in “Wavefront” (.obj) files, which may have companion material (.mtl) files that describe some shading properties (base color, shinyness, etc.) for different parts of the model.
In some cases, the color of a vertex is given by a single point value that is then colormapped on the fly (vertex_values). In other cases, each vertex or face may be assigned a specific color (vertex_colors). These methods are demonstrated in Surface with texture and vertex_colors.
In the case of “photorealistic” models, the color of each vertex is instead determined by mapping a vertex to a point in an image called a texture using 2D texture coordinates in the range [0, 1]. The color of each individual pixel is smoothly interpolated (sampled) on the fly from the texture (the GPU makes this interpolation very fast).
Napari does not (yet) support models with multiple textures or materials. If the textures don’t overlap, you can display them on separate meshes as shown in this demo. If the textures do overlap, you may instead be able to combine the textures as images. This relies on textures having the same texture coordinates, and may require resizing the textures to match each other.
Download the model#
download = pooch.DOIDownloader(progressbar=True)
doi = '10.5281/zenodo.13380203'
tmp_dir = pooch.os_cache('napari-surface-texture-example')
os.makedirs(tmp_dir, exist_ok=True)
data_files = {
'mesh': 'PocilloporaDamicornisSkin.obj',
# "materials": "PocilloporaVerrugosaSkinCrop.mtl", # not yet supported
'Texture_0': 'PocilloporaDamicornisSkin_Texture_0.jpg',
'GeneratedMat2': 'PocilloporaDamicornisSkin_GeneratedMat2.png',
}
print(f'downloading data into {tmp_dir}')
for file_name in data_files.values():
if not (tmp_dir / file_name).exists():
print(f'downloading {file_name}')
download(
f'doi:{doi}/{file_name}',
output_file=tmp_dir / file_name,
pooch=None,
)
else:
print(f'using cached {tmp_dir / file_name}')
downloading data into /home/runner/.cache/napari-surface-texture-example
downloading PocilloporaDamicornisSkin.obj
0%| | 0.00/93.8M [00:00<?, ?B/s]
0%| | 14.3k/93.8M [00:00<13:18, 117kB/s]
0%| | 79.9k/93.8M [00:00<03:49, 407kB/s]
0%| | 136k/93.8M [00:00<03:41, 423kB/s]
0%| | 224k/93.8M [00:00<02:39, 586kB/s]
0%|▏ | 333k/93.8M [00:00<02:03, 754kB/s]
0%|▏ | 426k/93.8M [00:00<01:54, 812kB/s]
1%|▏ | 510k/93.8M [00:00<01:53, 820kB/s]
1%|▎ | 634k/93.8M [00:00<01:38, 950kB/s]
1%|▎ | 794k/93.8M [00:00<01:20, 1.15MB/s]
1%|▎ | 911k/93.8M [00:01<01:20, 1.16MB/s]
1%|▍ | 1.03M/93.8M [00:01<01:19, 1.16MB/s]
1%|▍ | 1.14M/93.8M [00:01<01:43, 895kB/s]
1%|▌ | 1.28M/93.8M [00:01<01:32, 998kB/s]
1%|▌ | 1.39M/93.8M [00:01<01:30, 1.02MB/s]
2%|▌ | 1.50M/93.8M [00:01<01:28, 1.04MB/s]
2%|▋ | 1.60M/93.8M [00:01<01:27, 1.06MB/s]
2%|▋ | 1.71M/93.8M [00:01<01:26, 1.07MB/s]
2%|▋ | 1.82M/93.8M [00:01<01:25, 1.07MB/s]
2%|▊ | 1.98M/93.8M [00:02<01:37, 941kB/s]
2%|▊ | 2.08M/93.8M [00:02<01:35, 955kB/s]
2%|▉ | 2.18M/93.8M [00:02<01:34, 966kB/s]
2%|▉ | 2.32M/93.8M [00:02<01:24, 1.09MB/s]
3%|▉ | 2.43M/93.8M [00:02<01:23, 1.10MB/s]
3%|█ | 2.55M/93.8M [00:02<01:22, 1.10MB/s]
3%|█ | 2.66M/93.8M [00:02<01:22, 1.11MB/s]
3%|█ | 2.77M/93.8M [00:02<01:45, 865kB/s]
3%|█▏ | 2.87M/93.8M [00:03<01:42, 888kB/s]
3%|█▏ | 2.97M/93.8M [00:03<01:37, 934kB/s]
3%|█▏ | 3.08M/93.8M [00:03<01:34, 958kB/s]
3%|█▎ | 3.18M/93.8M [00:03<01:33, 970kB/s]
4%|█▎ | 3.30M/93.8M [00:03<01:25, 1.05MB/s]
4%|█▎ | 3.43M/93.8M [00:03<01:20, 1.12MB/s]
4%|█▍ | 3.57M/93.8M [00:03<01:15, 1.20MB/s]
4%|█▍ | 3.70M/93.8M [00:03<01:36, 937kB/s]
4%|█▌ | 3.80M/93.8M [00:03<01:33, 962kB/s]
4%|█▌ | 3.92M/93.8M [00:04<01:26, 1.04MB/s]
4%|█▌ | 4.04M/93.8M [00:04<01:25, 1.05MB/s]
4%|█▋ | 4.17M/93.8M [00:04<01:19, 1.13MB/s]
5%|█▋ | 4.29M/93.8M [00:04<01:18, 1.14MB/s]
5%|█▋ | 4.41M/93.8M [00:04<01:17, 1.15MB/s]
5%|█▊ | 4.55M/93.8M [00:04<01:11, 1.24MB/s]
5%|█▊ | 4.69M/93.8M [00:04<01:10, 1.27MB/s]
5%|█▉ | 4.84M/93.8M [00:04<01:06, 1.34MB/s]
5%|█▉ | 4.97M/93.8M [00:04<01:06, 1.34MB/s]
5%|██ | 5.11M/93.8M [00:05<01:25, 1.04MB/s]
6%|██ | 5.22M/93.8M [00:05<01:23, 1.06MB/s]
6%|██ | 5.38M/93.8M [00:05<01:14, 1.19MB/s]
6%|██▏ | 5.50M/93.8M [00:05<01:12, 1.21MB/s]
6%|██▎ | 5.63M/93.8M [00:05<01:31, 961kB/s]
6%|██▎ | 5.74M/93.8M [00:05<01:28, 990kB/s]
6%|██▎ | 5.86M/93.8M [00:05<01:24, 1.04MB/s]
6%|██▍ | 5.97M/93.8M [00:05<01:44, 841kB/s]
7%|██▍ | 6.12M/93.8M [00:06<01:29, 985kB/s]
7%|██▍ | 6.26M/93.8M [00:06<01:19, 1.10MB/s]
7%|██▌ | 6.41M/93.8M [00:06<01:13, 1.20MB/s]
7%|██▌ | 6.59M/93.8M [00:06<01:04, 1.36MB/s]
7%|██▋ | 6.73M/93.8M [00:06<01:03, 1.38MB/s]
7%|██▋ | 6.88M/93.8M [00:06<01:02, 1.40MB/s]
7%|██▊ | 7.02M/93.8M [00:06<01:01, 1.40MB/s]
8%|██▊ | 7.17M/93.8M [00:06<01:01, 1.41MB/s]
8%|██▉ | 7.31M/93.8M [00:06<01:01, 1.42MB/s]
8%|██▉ | 7.45M/93.8M [00:07<01:18, 1.10MB/s]
8%|██▉ | 7.58M/93.8M [00:07<01:16, 1.13MB/s]
8%|███ | 7.72M/93.8M [00:07<01:11, 1.20MB/s]
8%|███ | 7.84M/93.8M [00:07<01:10, 1.22MB/s]
9%|███▏ | 8.01M/93.8M [00:07<01:03, 1.35MB/s]
9%|███▏ | 8.15M/93.8M [00:07<01:20, 1.07MB/s]
9%|███▎ | 8.27M/93.8M [00:07<01:17, 1.10MB/s]
9%|███▎ | 8.40M/93.8M [00:07<01:14, 1.15MB/s]
9%|███▍ | 8.53M/93.8M [00:08<01:32, 925kB/s]
9%|███▍ | 8.63M/93.8M [00:08<01:28, 962kB/s]
9%|███▍ | 8.78M/93.8M [00:08<01:18, 1.09MB/s]
9%|███▌ | 8.90M/93.8M [00:08<01:16, 1.11MB/s]
10%|███▌ | 9.03M/93.8M [00:08<01:13, 1.16MB/s]
10%|███▋ | 9.19M/93.8M [00:08<01:06, 1.28MB/s]
10%|███▋ | 9.32M/93.8M [00:08<01:05, 1.30MB/s]
10%|███▋ | 9.45M/93.8M [00:08<01:23, 1.01MB/s]
10%|███▊ | 9.57M/93.8M [00:08<01:20, 1.04MB/s]
10%|███▊ | 9.73M/93.8M [00:09<01:09, 1.20MB/s]
11%|███▉ | 9.86M/93.8M [00:09<01:08, 1.22MB/s]
11%|███▉ | 10.1M/93.8M [00:09<01:10, 1.19MB/s]
11%|████ | 10.2M/93.8M [00:09<01:09, 1.20MB/s]
11%|████ | 10.4M/93.8M [00:09<01:05, 1.28MB/s]
11%|████▏ | 10.5M/93.8M [00:09<01:01, 1.34MB/s]
11%|████▏ | 10.7M/93.8M [00:09<01:01, 1.36MB/s]
12%|████▎ | 10.8M/93.8M [00:09<01:00, 1.37MB/s]
12%|████▎ | 10.9M/93.8M [00:09<01:00, 1.37MB/s]
12%|████▎ | 11.1M/93.8M [00:10<01:19, 1.04MB/s]
12%|████▍ | 11.2M/93.8M [00:10<01:17, 1.07MB/s]
12%|████▍ | 11.3M/93.8M [00:10<01:14, 1.11MB/s]
12%|████▌ | 11.4M/93.8M [00:10<01:12, 1.14MB/s]
12%|████▌ | 11.6M/93.8M [00:10<01:05, 1.25MB/s]
13%|████▋ | 11.7M/93.8M [00:10<01:04, 1.27MB/s]
13%|████▊ | 11.9M/93.8M [00:10<01:22, 995kB/s]
13%|████▋ | 12.0M/93.8M [00:10<01:19, 1.02MB/s]
13%|████▊ | 12.1M/93.8M [00:11<01:18, 1.04MB/s]
13%|████▊ | 12.2M/93.8M [00:11<01:16, 1.06MB/s]
13%|████▊ | 12.3M/93.8M [00:11<01:15, 1.08MB/s]
13%|████▉ | 12.4M/93.8M [00:11<01:14, 1.10MB/s]
13%|████▉ | 12.5M/93.8M [00:11<01:13, 1.11MB/s]
13%|█████ | 12.6M/93.8M [00:11<01:34, 863kB/s]
14%|█████▏ | 12.8M/93.8M [00:11<01:22, 982kB/s]
14%|█████ | 12.9M/93.8M [00:11<01:19, 1.01MB/s]
14%|█████▏ | 13.0M/93.8M [00:11<01:17, 1.04MB/s]
14%|█████▏ | 13.1M/93.8M [00:12<01:12, 1.11MB/s]
14%|█████▎ | 13.2M/93.8M [00:12<01:31, 879kB/s]
14%|█████▍ | 13.3M/93.8M [00:12<01:29, 901kB/s]
14%|█████▎ | 13.5M/93.8M [00:12<01:19, 1.01MB/s]
14%|█████▎ | 13.6M/93.8M [00:12<01:18, 1.03MB/s]
15%|█████▍ | 13.8M/93.8M [00:12<01:02, 1.27MB/s]
15%|█████▍ | 13.9M/93.8M [00:12<01:18, 1.01MB/s]
15%|█████▌ | 14.0M/93.8M [00:12<01:12, 1.09MB/s]
15%|█████▋ | 14.2M/93.8M [00:13<01:28, 895kB/s]
15%|█████▊ | 14.3M/93.8M [00:13<01:24, 940kB/s]
15%|█████▋ | 14.4M/93.8M [00:13<01:14, 1.07MB/s]
16%|█████▋ | 14.5M/93.8M [00:13<01:12, 1.10MB/s]
16%|█████▊ | 14.7M/93.8M [00:13<01:10, 1.12MB/s]
16%|█████▊ | 14.8M/93.8M [00:13<01:05, 1.20MB/s]
16%|█████▉ | 14.9M/93.8M [00:13<01:05, 1.21MB/s]
16%|█████▉ | 15.0M/93.8M [00:13<01:04, 1.22MB/s]
16%|█████▉ | 15.2M/93.8M [00:13<01:04, 1.23MB/s]
16%|██████▏ | 15.3M/93.8M [00:14<01:22, 956kB/s]
16%|██████▏ | 15.4M/93.8M [00:14<01:19, 982kB/s]
17%|██████▏ | 15.6M/93.8M [00:14<01:08, 1.13MB/s]
17%|██████▏ | 15.7M/93.8M [00:14<01:04, 1.22MB/s]
17%|██████▍ | 15.8M/93.8M [00:14<01:20, 971kB/s]
17%|██████▎ | 15.9M/93.8M [00:14<01:17, 1.00MB/s]
17%|██████▎ | 16.1M/93.8M [00:14<01:16, 1.02MB/s]
17%|██████▍ | 16.2M/93.8M [00:14<01:09, 1.11MB/s]
17%|██████▌ | 16.3M/93.8M [00:15<01:27, 889kB/s]
18%|██████▋ | 16.4M/93.8M [00:15<01:18, 986kB/s]
18%|██████▌ | 16.6M/93.8M [00:15<01:15, 1.02MB/s]
18%|██████▌ | 16.7M/93.8M [00:15<01:13, 1.05MB/s]
18%|██████▌ | 16.8M/93.8M [00:15<01:10, 1.09MB/s]
18%|██████▋ | 16.9M/93.8M [00:15<01:09, 1.11MB/s]
18%|██████▉ | 17.0M/93.8M [00:15<01:25, 894kB/s]
18%|██████▉ | 17.1M/93.8M [00:15<01:23, 918kB/s]
18%|██████▊ | 17.3M/93.8M [00:16<01:14, 1.03MB/s]
19%|██████▊ | 17.4M/93.8M [00:16<01:13, 1.04MB/s]
19%|███████ | 17.5M/93.8M [00:16<01:30, 843kB/s]
19%|███████▏ | 17.6M/93.8M [00:16<01:22, 925kB/s]
19%|███████▏ | 17.7M/93.8M [00:16<01:17, 979kB/s]
19%|███████ | 17.8M/93.8M [00:16<01:14, 1.02MB/s]
19%|███████ | 18.0M/93.8M [00:16<01:07, 1.13MB/s]
19%|███████▎ | 18.1M/93.8M [00:16<01:24, 891kB/s]
19%|███████▍ | 18.2M/93.8M [00:17<01:19, 951kB/s]
20%|███████▍ | 18.3M/93.8M [00:17<01:16, 985kB/s]
20%|███████▎ | 18.4M/93.8M [00:17<01:11, 1.05MB/s]
20%|███████▎ | 18.6M/93.8M [00:17<01:05, 1.15MB/s]
20%|███████▍ | 18.7M/93.8M [00:17<01:02, 1.20MB/s]
20%|███████▍ | 18.8M/93.8M [00:17<01:01, 1.22MB/s]
20%|███████▋ | 19.0M/93.8M [00:17<01:16, 975kB/s]
20%|███████▋ | 19.1M/93.8M [00:17<01:15, 996kB/s]
20%|███████▌ | 19.2M/93.8M [00:17<01:09, 1.07MB/s]
21%|███████▌ | 19.3M/93.8M [00:18<01:08, 1.09MB/s]
21%|███████▋ | 19.4M/93.8M [00:18<01:07, 1.10MB/s]
21%|███████▋ | 19.6M/93.8M [00:18<01:06, 1.12MB/s]
21%|███████▊ | 19.7M/93.8M [00:18<01:04, 1.14MB/s]
21%|████████ | 19.8M/93.8M [00:18<01:16, 967kB/s]
21%|███████▊ | 19.9M/93.8M [00:18<01:13, 1.01MB/s]
21%|███████▉ | 20.0M/93.8M [00:18<01:10, 1.04MB/s]
22%|███████▉ | 20.2M/93.8M [00:18<00:57, 1.29MB/s]
22%|████████ | 20.4M/93.8M [00:18<00:56, 1.30MB/s]
22%|████████ | 20.5M/93.8M [00:19<00:55, 1.32MB/s]
22%|████████▏ | 20.6M/93.8M [00:19<00:55, 1.32MB/s]
22%|████████▏ | 20.8M/93.8M [00:19<01:10, 1.03MB/s]
22%|████████▏ | 20.9M/93.8M [00:19<01:08, 1.06MB/s]
22%|████████▎ | 21.0M/93.8M [00:19<01:04, 1.13MB/s]
23%|████████▎ | 21.2M/93.8M [00:19<01:02, 1.16MB/s]
23%|████████▌ | 21.3M/93.8M [00:19<01:18, 926kB/s]
23%|████████▍ | 21.4M/93.8M [00:19<01:12, 1.00MB/s]
23%|████████▍ | 21.5M/93.8M [00:20<01:10, 1.03MB/s]
23%|████████▌ | 21.7M/93.8M [00:20<01:04, 1.11MB/s]
23%|████████▌ | 21.8M/93.8M [00:20<01:02, 1.14MB/s]
23%|████████▋ | 21.9M/93.8M [00:20<01:01, 1.17MB/s]
23%|████████▉ | 22.0M/93.8M [00:20<01:18, 911kB/s]
24%|████████▋ | 22.2M/93.8M [00:20<01:09, 1.03MB/s]
24%|████████▊ | 22.3M/93.8M [00:20<01:07, 1.06MB/s]
24%|████████▊ | 22.4M/93.8M [00:20<01:06, 1.08MB/s]
24%|████████▉ | 22.5M/93.8M [00:20<01:05, 1.09MB/s]
24%|████████▉ | 22.6M/93.8M [00:21<01:04, 1.11MB/s]
24%|████████▉ | 22.7M/93.8M [00:21<01:00, 1.16MB/s]
24%|█████████▎ | 22.9M/93.8M [00:21<01:17, 911kB/s]
25%|█████████▎ | 23.0M/93.8M [00:21<01:13, 963kB/s]
25%|█████████▎ | 23.1M/93.8M [00:21<01:11, 984kB/s]
25%|█████████▏ | 23.2M/93.8M [00:21<01:10, 1.00MB/s]
25%|█████████▏ | 23.3M/93.8M [00:21<01:04, 1.09MB/s]
25%|█████████▍ | 23.4M/93.8M [00:21<01:22, 858kB/s]
25%|█████████▌ | 23.6M/93.8M [00:22<01:11, 977kB/s]
25%|█████████▎ | 23.7M/93.8M [00:22<01:09, 1.00MB/s]
25%|█████████▍ | 23.8M/93.8M [00:22<01:04, 1.09MB/s]
26%|█████████▍ | 23.9M/93.8M [00:22<01:03, 1.11MB/s]
26%|█████████▍ | 24.1M/93.8M [00:22<00:59, 1.16MB/s]
26%|█████████▊ | 24.2M/93.8M [00:22<01:15, 916kB/s]
26%|█████████▌ | 24.3M/93.8M [00:22<01:08, 1.01MB/s]
26%|█████████▋ | 24.4M/93.8M [00:22<01:07, 1.03MB/s]
26%|█████████▋ | 24.6M/93.8M [00:22<00:59, 1.16MB/s]
26%|██████████ | 24.7M/93.8M [00:23<01:14, 924kB/s]
26%|██████████ | 24.8M/93.8M [00:23<01:12, 952kB/s]
27%|██████████ | 24.9M/93.8M [00:23<01:10, 975kB/s]
27%|█████████▊ | 25.0M/93.8M [00:23<01:08, 1.00MB/s]
27%|█████████▉ | 25.1M/93.8M [00:23<01:05, 1.04MB/s]
27%|█████████▉ | 25.2M/93.8M [00:23<01:05, 1.05MB/s]
27%|██████████ | 25.4M/93.8M [00:23<00:58, 1.17MB/s]
27%|██████████▎ | 25.5M/93.8M [00:23<01:14, 916kB/s]
27%|██████████ | 25.6M/93.8M [00:24<01:07, 1.01MB/s]
28%|██████████▏ | 25.8M/93.8M [00:24<00:55, 1.22MB/s]
28%|██████████▏ | 26.0M/93.8M [00:24<00:52, 1.28MB/s]
28%|██████████▎ | 26.1M/93.8M [00:24<00:51, 1.30MB/s]
28%|██████████▎ | 26.2M/93.8M [00:24<00:51, 1.32MB/s]
28%|██████████▍ | 26.4M/93.8M [00:24<01:05, 1.04MB/s]
28%|██████████▍ | 26.5M/93.8M [00:24<00:59, 1.12MB/s]
28%|██████████▌ | 26.6M/93.8M [00:24<00:58, 1.15MB/s]
29%|██████████▌ | 26.7M/93.8M [00:24<00:56, 1.18MB/s]
29%|██████████▉ | 26.9M/93.8M [00:25<01:11, 938kB/s]
29%|██████████▉ | 27.0M/93.8M [00:25<01:09, 965kB/s]
29%|██████████▋ | 27.2M/93.8M [00:25<00:56, 1.17MB/s]
29%|██████████▊ | 27.3M/93.8M [00:25<00:50, 1.30MB/s]
29%|██████████▊ | 27.5M/93.8M [00:25<01:03, 1.05MB/s]
29%|██████████▉ | 27.6M/93.8M [00:25<00:53, 1.23MB/s]
30%|██████████▉ | 27.8M/93.8M [00:25<00:52, 1.27MB/s]
30%|███████████ | 27.9M/93.8M [00:25<00:50, 1.30MB/s]
30%|███████████ | 28.1M/93.8M [00:26<01:03, 1.04MB/s]
30%|███████████▏ | 28.2M/93.8M [00:26<00:57, 1.15MB/s]
30%|███████████▏ | 28.3M/93.8M [00:26<00:55, 1.18MB/s]
30%|███████████▏ | 28.5M/93.8M [00:26<00:54, 1.20MB/s]
30%|███████████▎ | 28.6M/93.8M [00:26<00:53, 1.22MB/s]
31%|███████████▋ | 28.7M/93.8M [00:26<01:06, 971kB/s]
31%|███████████▋ | 28.8M/93.8M [00:26<01:05, 995kB/s]
31%|███████████▍ | 29.0M/93.8M [00:26<01:00, 1.08MB/s]
31%|███████████▍ | 29.1M/93.8M [00:27<00:55, 1.16MB/s]
31%|███████████▊ | 29.2M/93.8M [00:27<01:07, 955kB/s]
31%|███████████▌ | 29.4M/93.8M [00:27<01:04, 1.00MB/s]
31%|███████████▋ | 29.5M/93.8M [00:27<01:02, 1.04MB/s]
32%|███████████▋ | 29.7M/93.8M [00:27<00:50, 1.28MB/s]
32%|███████████▊ | 29.8M/93.8M [00:27<00:48, 1.31MB/s]
32%|███████████▊ | 29.9M/93.8M [00:27<00:48, 1.32MB/s]
32%|███████████▊ | 30.1M/93.8M [00:27<00:47, 1.34MB/s]
32%|███████████▉ | 30.3M/93.8M [00:28<00:56, 1.13MB/s]
32%|███████████▉ | 30.4M/93.8M [00:28<00:54, 1.15MB/s]
33%|████████████ | 30.5M/93.8M [00:28<00:54, 1.17MB/s]
33%|████████████ | 30.6M/93.8M [00:28<00:53, 1.18MB/s]
33%|████████████▏ | 30.7M/93.8M [00:28<00:52, 1.20MB/s]
33%|████████████▏ | 30.9M/93.8M [00:28<00:43, 1.43MB/s]
33%|████████████▎ | 31.1M/93.8M [00:28<00:43, 1.44MB/s]
33%|████████████▎ | 31.2M/93.8M [00:28<00:43, 1.44MB/s]
33%|████████████▍ | 31.4M/93.8M [00:28<00:55, 1.12MB/s]
34%|████████████▍ | 31.5M/93.8M [00:29<00:53, 1.15MB/s]
34%|████████████▊ | 31.6M/93.8M [00:29<01:06, 939kB/s]
34%|████████████▊ | 31.7M/93.8M [00:29<01:04, 967kB/s]
34%|████████████▌ | 31.9M/93.8M [00:29<00:55, 1.11MB/s]
34%|████████████▋ | 32.0M/93.8M [00:29<00:52, 1.18MB/s]
34%|████████████▋ | 32.2M/93.8M [00:29<00:50, 1.22MB/s]
34%|█████████████ | 32.3M/93.8M [00:29<01:03, 968kB/s]
35%|████████████▊ | 32.4M/93.8M [00:29<01:00, 1.02MB/s]
35%|████████████▊ | 32.6M/93.8M [00:30<00:54, 1.12MB/s]
35%|█████████████▏ | 32.7M/93.8M [00:30<01:07, 906kB/s]
35%|█████████████▎ | 32.8M/93.8M [00:30<01:02, 969kB/s]
35%|█████████████▎ | 32.9M/93.8M [00:30<01:01, 995kB/s]
35%|█████████████ | 33.0M/93.8M [00:30<00:59, 1.02MB/s]
35%|█████████████ | 33.1M/93.8M [00:30<00:58, 1.04MB/s]
35%|█████████████ | 33.2M/93.8M [00:30<00:57, 1.05MB/s]
36%|█████████████▌ | 33.3M/93.8M [00:30<01:13, 827kB/s]
36%|█████████████▌ | 33.5M/93.8M [00:31<01:05, 923kB/s]
36%|█████████████▌ | 33.6M/93.8M [00:31<01:01, 981kB/s]
36%|█████████████▎ | 33.7M/93.8M [00:31<00:59, 1.01MB/s]
36%|█████████████▎ | 33.8M/93.8M [00:31<00:58, 1.02MB/s]
36%|█████████████▎ | 33.9M/93.8M [00:31<00:57, 1.03MB/s]
36%|█████████████▍ | 34.1M/93.8M [00:31<00:45, 1.30MB/s]
36%|█████████████▌ | 34.2M/93.8M [00:31<00:45, 1.31MB/s]
37%|█████████████▌ | 34.4M/93.8M [00:31<00:58, 1.02MB/s]
37%|█████████████▌ | 34.5M/93.8M [00:31<00:56, 1.05MB/s]
37%|█████████████▋ | 34.6M/93.8M [00:32<00:53, 1.11MB/s]
37%|██████████████ | 34.7M/93.8M [00:32<01:06, 893kB/s]
37%|██████████████ | 34.8M/93.8M [00:32<01:01, 952kB/s]
37%|██████████████▏ | 34.9M/93.8M [00:32<00:59, 983kB/s]
37%|█████████████▊ | 35.1M/93.8M [00:32<00:53, 1.10MB/s]
38%|█████████████▉ | 35.2M/93.8M [00:32<00:52, 1.12MB/s]
38%|█████████████▉ | 35.3M/93.8M [00:32<00:49, 1.18MB/s]
38%|█████████████▉ | 35.5M/93.8M [00:32<00:49, 1.19MB/s]
38%|██████████████▍ | 35.6M/93.8M [00:33<01:01, 942kB/s]
38%|██████████████▍ | 35.7M/93.8M [00:33<01:00, 966kB/s]
38%|██████████████▏ | 35.8M/93.8M [00:33<00:55, 1.04MB/s]
38%|██████████████▏ | 35.9M/93.8M [00:33<00:54, 1.06MB/s]
38%|██████████████▏ | 36.0M/93.8M [00:33<00:52, 1.09MB/s]
39%|██████████████▎ | 36.2M/93.8M [00:33<00:52, 1.10MB/s]
39%|██████████████▎ | 36.3M/93.8M [00:33<00:51, 1.11MB/s]
39%|██████████████▎ | 36.4M/93.8M [00:33<00:51, 1.12MB/s]
39%|██████████████▍ | 36.5M/93.8M [00:33<00:50, 1.13MB/s]
39%|██████████████▍ | 36.6M/93.8M [00:33<00:47, 1.19MB/s]
39%|██████████████▌ | 36.8M/93.8M [00:34<00:47, 1.20MB/s]
39%|██████████████▌ | 36.9M/93.8M [00:34<00:47, 1.20MB/s]
39%|██████████████▌ | 37.0M/93.8M [00:34<00:44, 1.27MB/s]
40%|██████████████▋ | 37.2M/93.8M [00:34<00:50, 1.12MB/s]
40%|██████████████▋ | 37.3M/93.8M [00:34<00:46, 1.21MB/s]
40%|██████████████▊ | 37.5M/93.8M [00:34<00:44, 1.27MB/s]
40%|██████████████▊ | 37.6M/93.8M [00:34<00:42, 1.32MB/s]
40%|██████████████▉ | 37.8M/93.8M [00:34<00:42, 1.33MB/s]
40%|██████████████▉ | 37.9M/93.8M [00:34<00:41, 1.35MB/s]
41%|███████████████ | 38.1M/93.8M [00:35<00:41, 1.36MB/s]
41%|███████████████ | 38.2M/93.8M [00:35<00:40, 1.36MB/s]
41%|███████████████▏ | 38.4M/93.8M [00:35<00:32, 1.68MB/s]
41%|███████████████▎ | 38.7M/93.8M [00:35<00:30, 1.81MB/s]
41%|███████████████▎ | 38.8M/93.8M [00:35<00:39, 1.41MB/s]
42%|███████████████▍ | 39.0M/93.8M [00:35<00:37, 1.44MB/s]
42%|███████████████▍ | 39.2M/93.8M [00:35<00:37, 1.47MB/s]
42%|███████████████▌ | 39.3M/93.8M [00:35<00:36, 1.50MB/s]
42%|███████████████▌ | 39.5M/93.8M [00:35<00:35, 1.52MB/s]
42%|███████████████▋ | 39.6M/93.8M [00:36<00:45, 1.19MB/s]
42%|███████████████▋ | 39.8M/93.8M [00:36<00:44, 1.23MB/s]
43%|███████████████▋ | 39.9M/93.8M [00:36<00:43, 1.25MB/s]
43%|███████████████▊ | 40.0M/93.8M [00:36<00:42, 1.27MB/s]
43%|███████████████▊ | 40.2M/93.8M [00:36<00:41, 1.29MB/s]
43%|███████████████▉ | 40.3M/93.8M [00:36<00:42, 1.27MB/s]
43%|███████████████▉ | 40.4M/93.8M [00:36<00:41, 1.29MB/s]
43%|████████████████ | 40.6M/93.8M [00:36<00:52, 1.01MB/s]
43%|████████████████ | 40.7M/93.8M [00:37<00:51, 1.04MB/s]
44%|████████████████ | 40.8M/93.8M [00:37<00:44, 1.19MB/s]
44%|████████████████▏ | 41.0M/93.8M [00:37<00:43, 1.21MB/s]
44%|████████████████▏ | 41.1M/93.8M [00:37<00:42, 1.23MB/s]
44%|████████████████▎ | 41.2M/93.8M [00:37<00:42, 1.24MB/s]
44%|████████████████▎ | 41.4M/93.8M [00:37<00:36, 1.42MB/s]
44%|████████████████▍ | 41.5M/93.8M [00:37<00:36, 1.43MB/s]
45%|████████████████▍ | 41.8M/93.8M [00:37<00:31, 1.65MB/s]
45%|████████████████▌ | 41.9M/93.8M [00:37<00:31, 1.65MB/s]
45%|████████████████▌ | 42.1M/93.8M [00:37<00:31, 1.65MB/s]
45%|████████████████▋ | 42.3M/93.8M [00:38<00:40, 1.27MB/s]
45%|████████████████▊ | 42.5M/93.8M [00:38<00:33, 1.54MB/s]
46%|████████████████▊ | 42.7M/93.8M [00:38<00:32, 1.58MB/s]
46%|████████████████▉ | 42.8M/93.8M [00:38<00:31, 1.61MB/s]
46%|████████████████▉ | 43.0M/93.8M [00:38<00:39, 1.28MB/s]
46%|█████████████████ | 43.2M/93.8M [00:38<00:38, 1.32MB/s]
46%|█████████████████ | 43.3M/93.8M [00:38<00:37, 1.34MB/s]
46%|█████████████████▏ | 43.5M/93.8M [00:38<00:33, 1.51MB/s]
47%|█████████████████▏ | 43.7M/93.8M [00:39<00:41, 1.20MB/s]
47%|█████████████████▎ | 43.8M/93.8M [00:39<00:40, 1.24MB/s]
47%|█████████████████▎ | 43.9M/93.8M [00:39<00:39, 1.27MB/s]
47%|█████████████████▍ | 44.1M/93.8M [00:39<00:38, 1.30MB/s]
47%|█████████████████▍ | 44.2M/93.8M [00:39<00:37, 1.32MB/s]
47%|█████████████████▍ | 44.3M/93.8M [00:39<00:37, 1.33MB/s]
47%|█████████████████▌ | 44.5M/93.8M [00:39<00:34, 1.42MB/s]
48%|█████████████████▌ | 44.7M/93.8M [00:39<00:33, 1.47MB/s]
48%|█████████████████▋ | 44.8M/93.8M [00:39<00:32, 1.51MB/s]
48%|█████████████████▋ | 45.0M/93.8M [00:40<00:32, 1.52MB/s]
48%|█████████████████▊ | 45.1M/93.8M [00:40<00:39, 1.22MB/s]
48%|█████████████████▊ | 45.3M/93.8M [00:40<00:37, 1.28MB/s]
48%|█████████████████▉ | 45.4M/93.8M [00:40<00:37, 1.30MB/s]
49%|█████████████████▉ | 45.6M/93.8M [00:40<00:36, 1.31MB/s]
49%|██████████████████ | 45.7M/93.8M [00:40<00:36, 1.33MB/s]
49%|██████████████████ | 45.8M/93.8M [00:40<00:35, 1.33MB/s]
49%|██████████████████▏ | 46.0M/93.8M [00:40<00:45, 1.05MB/s]
49%|██████████████████▏ | 46.1M/93.8M [00:41<00:44, 1.08MB/s]
49%|██████████████████▎ | 46.3M/93.8M [00:41<00:39, 1.22MB/s]
49%|██████████████████▎ | 46.4M/93.8M [00:41<00:38, 1.24MB/s]
50%|██████████████████▎ | 46.5M/93.8M [00:41<00:37, 1.26MB/s]
50%|██████████████████▍ | 46.7M/93.8M [00:41<00:33, 1.41MB/s]
50%|██████████████████▍ | 46.8M/93.8M [00:41<00:33, 1.42MB/s]
50%|██████████████████▌ | 47.1M/93.8M [00:41<00:28, 1.63MB/s]
50%|██████████████████▋ | 47.2M/93.8M [00:41<00:28, 1.63MB/s]
51%|██████████████████▋ | 47.4M/93.8M [00:41<00:28, 1.64MB/s]
51%|██████████████████▊ | 47.6M/93.8M [00:42<00:28, 1.64MB/s]
51%|██████████████████▊ | 47.7M/93.8M [00:42<00:36, 1.27MB/s]
51%|██████████████████▉ | 47.9M/93.8M [00:42<00:35, 1.29MB/s]
51%|██████████████████▉ | 48.0M/93.8M [00:42<00:34, 1.32MB/s]
51%|██████████████████▉ | 48.1M/93.8M [00:42<00:33, 1.34MB/s]
52%|███████████████████ | 48.3M/93.8M [00:42<00:30, 1.48MB/s]
52%|███████████████████▏ | 48.5M/93.8M [00:42<00:30, 1.49MB/s]
52%|███████████████████▏ | 48.7M/93.8M [00:42<00:26, 1.69MB/s]
52%|███████████████████▎ | 48.9M/93.8M [00:42<00:26, 1.69MB/s]
52%|███████████████████▎ | 49.0M/93.8M [00:43<00:26, 1.70MB/s]
52%|███████████████████▍ | 49.2M/93.8M [00:43<00:33, 1.32MB/s]
53%|███████████████████▍ | 49.4M/93.8M [00:43<00:32, 1.35MB/s]
53%|███████████████████▌ | 49.6M/93.8M [00:43<00:27, 1.60MB/s]
53%|███████████████████▋ | 49.8M/93.8M [00:43<00:26, 1.63MB/s]
53%|███████████████████▋ | 49.9M/93.8M [00:43<00:33, 1.30MB/s]
53%|███████████████████▊ | 50.1M/93.8M [00:43<00:32, 1.33MB/s]
54%|███████████████████▊ | 50.2M/93.8M [00:43<00:31, 1.39MB/s]
54%|███████████████████▉ | 50.4M/93.8M [00:44<00:30, 1.41MB/s]
54%|███████████████████▉ | 50.5M/93.8M [00:44<00:38, 1.13MB/s]
54%|███████████████████▉ | 50.7M/93.8M [00:44<00:37, 1.16MB/s]
54%|████████████████████ | 50.8M/93.8M [00:44<00:35, 1.19MB/s]
54%|████████████████████ | 50.9M/93.8M [00:44<00:33, 1.27MB/s]
55%|████████████████████▏ | 51.2M/93.8M [00:44<00:27, 1.55MB/s]
55%|████████████████████▎ | 51.5M/93.8M [00:44<00:19, 2.16MB/s]
55%|████████████████████▍ | 51.8M/93.8M [00:44<00:18, 2.26MB/s]
55%|████████████████████▌ | 52.0M/93.8M [00:45<00:23, 1.77MB/s]
56%|████████████████████▌ | 52.2M/93.8M [00:45<00:22, 1.81MB/s]
56%|████████████████████▋ | 52.4M/93.8M [00:45<00:22, 1.85MB/s]
56%|████████████████████▊ | 52.6M/93.8M [00:45<00:21, 1.88MB/s]
56%|████████████████████▊ | 52.8M/93.8M [00:45<00:20, 1.97MB/s]
57%|████████████████████▉ | 53.0M/93.8M [00:45<00:20, 1.99MB/s]
57%|█████████████████████ | 53.3M/93.8M [00:45<00:19, 2.05MB/s]
57%|█████████████████████ | 53.5M/93.8M [00:45<00:19, 2.06MB/s]
57%|█████████████████████▏ | 53.8M/93.8M [00:45<00:20, 1.95MB/s]
58%|█████████████████████▎ | 54.0M/93.8M [00:46<00:20, 1.96MB/s]
58%|█████████████████████▍ | 54.3M/93.8M [00:46<00:19, 2.03MB/s]
58%|█████████████████████▌ | 54.5M/93.8M [00:46<00:18, 2.13MB/s]
58%|█████████████████████▌ | 54.7M/93.8M [00:46<00:18, 2.14MB/s]
59%|█████████████████████▋ | 54.9M/93.8M [00:46<00:18, 2.14MB/s]
59%|█████████████████████▊ | 55.4M/93.8M [00:46<00:12, 2.96MB/s]
59%|█████████████████████▉ | 55.7M/93.8M [00:46<00:16, 2.30MB/s]
60%|██████████████████████ | 56.0M/93.8M [00:46<00:19, 1.90MB/s]
60%|██████████████████████▏ | 56.2M/93.8M [00:47<00:19, 1.96MB/s]
60%|██████████████████████▎ | 56.4M/93.8M [00:47<00:22, 1.63MB/s]
60%|██████████████████████▎ | 56.6M/93.8M [00:47<00:22, 1.67MB/s]
61%|██████████████████████▍ | 56.8M/93.8M [00:47<00:21, 1.71MB/s]
61%|██████████████████████▍ | 57.0M/93.8M [00:47<00:21, 1.74MB/s]
61%|██████████████████████▌ | 57.2M/93.8M [00:47<00:19, 1.86MB/s]
61%|██████████████████████▋ | 57.4M/93.8M [00:47<00:18, 1.93MB/s]
61%|██████████████████████▋ | 57.6M/93.8M [00:47<00:23, 1.52MB/s]
62%|██████████████████████▊ | 57.8M/93.8M [00:48<00:22, 1.60MB/s]
62%|██████████████████████▉ | 58.0M/93.8M [00:48<00:20, 1.72MB/s]
62%|██████████████████████▉ | 58.2M/93.8M [00:48<00:19, 1.78MB/s]
62%|███████████████████████ | 58.4M/93.8M [00:48<00:18, 1.92MB/s]
63%|███████████████████████▏ | 58.6M/93.8M [00:48<00:18, 1.93MB/s]
63%|███████████████████████▏ | 58.8M/93.8M [00:48<00:17, 1.95MB/s]
63%|███████████████████████▎ | 59.0M/93.8M [00:48<00:22, 1.52MB/s]
63%|███████████████████████▍ | 59.3M/93.8M [00:48<00:19, 1.73MB/s]
63%|███████████████████████▍ | 59.5M/93.8M [00:48<00:19, 1.77MB/s]
64%|███████████████████████▌ | 59.6M/93.8M [00:49<00:23, 1.42MB/s]
64%|███████████████████████▌ | 59.8M/93.8M [00:49<00:23, 1.46MB/s]
64%|███████████████████████▋ | 60.0M/93.8M [00:49<00:22, 1.50MB/s]
64%|███████████████████████▋ | 60.1M/93.8M [00:49<00:21, 1.55MB/s]
64%|███████████████████████▊ | 60.3M/93.8M [00:49<00:27, 1.24MB/s]
64%|███████████████████████▊ | 60.4M/93.8M [00:49<00:26, 1.27MB/s]
65%|███████████████████████▉ | 60.7M/93.8M [00:49<00:21, 1.52MB/s]
65%|████████████████████████ | 60.8M/93.8M [00:49<00:20, 1.59MB/s]
65%|████████████████████████ | 61.0M/93.8M [00:50<00:19, 1.69MB/s]
65%|████████████████████████▏ | 61.2M/93.8M [00:50<00:19, 1.71MB/s]
66%|████████████████████████▏ | 61.4M/93.8M [00:50<00:17, 1.83MB/s]
66%|████████████████████████▎ | 61.6M/93.8M [00:50<00:17, 1.84MB/s]
66%|████████████████████████▍ | 61.8M/93.8M [00:50<00:17, 1.85MB/s]
66%|████████████████████████▍ | 62.0M/93.8M [00:50<00:17, 1.85MB/s]
66%|████████████████████████▌ | 62.2M/93.8M [00:50<00:21, 1.44MB/s]
66%|████████████████████████▌ | 62.3M/93.8M [00:50<00:21, 1.48MB/s]
67%|████████████████████████▋ | 62.5M/93.8M [00:50<00:20, 1.53MB/s]
67%|████████████████████████▋ | 62.7M/93.8M [00:51<00:19, 1.56MB/s]
67%|████████████████████████▊ | 62.9M/93.8M [00:51<00:17, 1.72MB/s]
67%|████████████████████████▉ | 63.1M/93.8M [00:51<00:16, 1.88MB/s]
68%|████████████████████████▉ | 63.3M/93.8M [00:51<00:15, 1.95MB/s]
68%|█████████████████████████ | 63.6M/93.8M [00:51<00:13, 2.19MB/s]
68%|█████████████████████████▏ | 63.9M/93.8M [00:51<00:13, 2.26MB/s]
68%|█████████████████████████▎ | 64.1M/93.8M [00:51<00:13, 2.27MB/s]
69%|█████████████████████████▍ | 64.3M/93.8M [00:51<00:12, 2.27MB/s]
69%|█████████████████████████▍ | 64.5M/93.8M [00:51<00:12, 2.27MB/s]
69%|█████████████████████████▌ | 64.8M/93.8M [00:51<00:12, 2.27MB/s]
69%|█████████████████████████▋ | 65.0M/93.8M [00:52<00:15, 1.83MB/s]
70%|█████████████████████████▋ | 65.2M/93.8M [00:52<00:15, 1.87MB/s]
70%|█████████████████████████▊ | 65.5M/93.8M [00:52<00:16, 1.74MB/s]
70%|█████████████████████████▉ | 65.8M/93.8M [00:52<00:13, 2.01MB/s]
70%|██████████████████████████ | 66.1M/93.8M [00:52<00:13, 2.05MB/s]
71%|██████████████████████████▏ | 66.4M/93.8M [00:52<00:10, 2.52MB/s]
71%|██████████████████████████▎ | 66.7M/93.8M [00:53<00:16, 1.67MB/s]
71%|██████████████████████████▍ | 66.9M/93.8M [00:53<00:15, 1.77MB/s]
72%|██████████████████████████▍ | 67.1M/93.8M [00:53<00:14, 1.86MB/s]
72%|██████████████████████████▌ | 67.4M/93.8M [00:53<00:13, 1.93MB/s]
72%|██████████████████████████▋ | 67.6M/93.8M [00:53<00:13, 1.99MB/s]
72%|██████████████████████████▋ | 67.8M/93.8M [00:53<00:16, 1.61MB/s]
72%|██████████████████████████▊ | 68.0M/93.8M [00:53<00:15, 1.66MB/s]
73%|██████████████████████████▉ | 68.2M/93.8M [00:53<00:14, 1.77MB/s]
73%|██████████████████████████▉ | 68.4M/93.8M [00:53<00:13, 1.92MB/s]
73%|███████████████████████████ | 68.6M/93.8M [00:54<00:12, 1.99MB/s]
73%|███████████████████████████▏ | 68.8M/93.8M [00:54<00:12, 2.01MB/s]
74%|███████████████████████████▏ | 69.1M/93.8M [00:54<00:12, 2.03MB/s]
74%|███████████████████████████▎ | 69.3M/93.8M [00:54<00:11, 2.07MB/s]
74%|███████████████████████████▍ | 69.5M/93.8M [00:54<00:11, 2.08MB/s]
74%|███████████████████████████▌ | 69.7M/93.8M [00:54<00:14, 1.62MB/s]
75%|███████████████████████████▌ | 69.9M/93.8M [00:54<00:14, 1.66MB/s]
75%|███████████████████████████▋ | 70.1M/93.8M [00:54<00:17, 1.34MB/s]
75%|███████████████████████████▋ | 70.3M/93.8M [00:55<00:14, 1.62MB/s]
75%|███████████████████████████▊ | 70.5M/93.8M [00:55<00:13, 1.75MB/s]
75%|███████████████████████████▉ | 70.7M/93.8M [00:55<00:12, 1.80MB/s]
76%|████████████████████████████ | 71.0M/93.8M [00:55<00:11, 1.97MB/s]
76%|████████████████████████████ | 71.2M/93.8M [00:55<00:11, 2.00MB/s]
76%|████████████████████████████▏ | 71.4M/93.8M [00:55<00:11, 2.02MB/s]
76%|████████████████████████████▎ | 71.6M/93.8M [00:55<00:14, 1.58MB/s]
77%|████████████████████████████▎ | 71.8M/93.8M [00:55<00:13, 1.62MB/s]
77%|████████████████████████████▍ | 72.0M/93.8M [00:55<00:11, 1.89MB/s]
77%|████████████████████████████▌ | 72.2M/93.8M [00:56<00:11, 1.92MB/s]
77%|████████████████████████████▌ | 72.4M/93.8M [00:56<00:10, 1.95MB/s]
78%|████████████████████████████▋ | 72.7M/93.8M [00:56<00:09, 2.13MB/s]
78%|████████████████████████████▊ | 72.9M/93.8M [00:56<00:09, 2.15MB/s]
78%|████████████████████████████▊ | 73.1M/93.8M [00:56<00:09, 2.16MB/s]
78%|████████████████████████████▉ | 73.4M/93.8M [00:56<00:14, 1.38MB/s]
78%|█████████████████████████████ | 73.6M/93.8M [00:56<00:12, 1.56MB/s]
79%|█████████████████████████████ | 73.8M/93.8M [00:56<00:12, 1.63MB/s]
79%|█████████████████████████████▏ | 74.0M/93.8M [00:57<00:11, 1.70MB/s]
79%|█████████████████████████████▎ | 74.2M/93.8M [00:57<00:14, 1.39MB/s]
79%|█████████████████████████████▎ | 74.3M/93.8M [00:57<00:13, 1.44MB/s]
79%|█████████████████████████████▍ | 74.5M/93.8M [00:57<00:12, 1.49MB/s]
80%|█████████████████████████████▍ | 74.6M/93.8M [00:57<00:12, 1.52MB/s]
80%|█████████████████████████████▌ | 74.8M/93.8M [00:57<00:12, 1.54MB/s]
80%|█████████████████████████████▌ | 75.0M/93.8M [00:57<00:15, 1.23MB/s]
80%|█████████████████████████████▋ | 75.1M/93.8M [00:57<00:14, 1.26MB/s]
80%|█████████████████████████████▋ | 75.2M/93.8M [00:58<00:14, 1.29MB/s]
80%|█████████████████████████████▊ | 75.4M/93.8M [00:58<00:12, 1.49MB/s]
81%|█████████████████████████████▊ | 75.6M/93.8M [00:58<00:11, 1.52MB/s]
81%|█████████████████████████████▉ | 75.8M/93.8M [00:58<00:11, 1.54MB/s]
81%|█████████████████████████████▉ | 76.0M/93.8M [00:58<00:13, 1.29MB/s]
81%|██████████████████████████████ | 76.1M/93.8M [00:58<00:13, 1.31MB/s]
81%|██████████████████████████████ | 76.3M/93.8M [00:58<00:11, 1.54MB/s]
82%|██████████████████████████████▏ | 76.5M/93.8M [00:58<00:09, 1.74MB/s]
82%|██████████████████████████████▎ | 76.8M/93.8M [00:58<00:09, 1.84MB/s]
82%|██████████████████████████████▎ | 77.0M/93.8M [00:59<00:08, 1.87MB/s]
82%|██████████████████████████████▍ | 77.1M/93.8M [00:59<00:08, 1.89MB/s]
82%|██████████████████████████████▌ | 77.3M/93.8M [00:59<00:08, 1.90MB/s]
83%|██████████████████████████████▌ | 77.5M/93.8M [00:59<00:08, 1.90MB/s]
83%|██████████████████████████████▋ | 77.7M/93.8M [00:59<00:08, 1.90MB/s]
83%|██████████████████████████████▊ | 78.0M/93.8M [00:59<00:07, 2.00MB/s]
83%|██████████████████████████████▊ | 78.2M/93.8M [00:59<00:07, 2.09MB/s]
84%|██████████████████████████████▉ | 78.4M/93.8M [00:59<00:07, 2.10MB/s]
84%|███████████████████████████████ | 78.6M/93.8M [00:59<00:07, 2.09MB/s]
84%|███████████████████████████████ | 78.8M/93.8M [01:00<00:09, 1.61MB/s]
84%|███████████████████████████████▏ | 79.0M/93.8M [01:00<00:08, 1.65MB/s]
84%|███████████████████████████████▏ | 79.2M/93.8M [01:00<00:08, 1.68MB/s]
85%|███████████████████████████████▎ | 79.4M/93.8M [01:00<00:07, 1.87MB/s]
85%|███████████████████████████████▍ | 79.6M/93.8M [01:00<00:07, 1.89MB/s]
85%|███████████████████████████████▌ | 79.9M/93.8M [01:00<00:06, 2.11MB/s]
85%|███████████████████████████████▌ | 80.1M/93.8M [01:00<00:08, 1.66MB/s]
86%|███████████████████████████████▋ | 80.3M/93.8M [01:00<00:07, 1.76MB/s]
86%|███████████████████████████████▊ | 80.5M/93.8M [01:00<00:07, 1.79MB/s]
86%|███████████████████████████████▊ | 80.7M/93.8M [01:01<00:06, 2.00MB/s]
86%|███████████████████████████████▉ | 81.0M/93.8M [01:01<00:08, 1.59MB/s]
87%|████████████████████████████████ | 81.2M/93.8M [01:01<00:07, 1.77MB/s]
87%|████████████████████████████████ | 81.4M/93.8M [01:01<00:08, 1.46MB/s]
87%|████████████████████████████████▏ | 81.6M/93.8M [01:01<00:07, 1.56MB/s]
87%|████████████████████████████████▎ | 81.8M/93.8M [01:01<00:07, 1.61MB/s]
87%|████████████████████████████████▎ | 81.9M/93.8M [01:01<00:09, 1.31MB/s]
88%|████████████████████████████████▍ | 82.1M/93.8M [01:02<00:08, 1.35MB/s]
88%|████████████████████████████████▍ | 82.3M/93.8M [01:02<00:07, 1.49MB/s]
88%|████████████████████████████████▌ | 82.5M/93.8M [01:02<00:07, 1.57MB/s]
88%|████████████████████████████████▌ | 82.7M/93.8M [01:02<00:06, 1.75MB/s]
88%|████████████████████████████████▋ | 82.9M/93.8M [01:02<00:06, 1.77MB/s]
89%|████████████████████████████████▊ | 83.0M/93.8M [01:02<00:05, 1.79MB/s]
89%|████████████████████████████████▊ | 83.3M/93.8M [01:02<00:05, 1.95MB/s]
89%|████████████████████████████████▉ | 83.5M/93.8M [01:02<00:04, 2.10MB/s]
89%|█████████████████████████████████ | 83.7M/93.8M [01:02<00:06, 1.63MB/s]
89%|█████████████████████████████████ | 83.9M/93.8M [01:03<00:05, 1.67MB/s]
90%|█████████████████████████████████▏ | 84.1M/93.8M [01:03<00:05, 1.72MB/s]
90%|█████████████████████████████████▎ | 84.3M/93.8M [01:03<00:05, 1.74MB/s]
90%|█████████████████████████████████▎ | 84.5M/93.8M [01:03<00:05, 1.76MB/s]
90%|█████████████████████████████████▍ | 84.7M/93.8M [01:03<00:06, 1.39MB/s]
90%|█████████████████████████████████▍ | 84.8M/93.8M [01:03<00:05, 1.51MB/s]
91%|█████████████████████████████████▌ | 85.0M/93.8M [01:03<00:05, 1.61MB/s]
91%|█████████████████████████████████▋ | 85.2M/93.8M [01:03<00:04, 1.75MB/s]
91%|█████████████████████████████████▋ | 85.4M/93.8M [01:03<00:04, 1.80MB/s]
91%|█████████████████████████████████▊ | 85.6M/93.8M [01:04<00:04, 1.82MB/s]
92%|█████████████████████████████████▊ | 85.8M/93.8M [01:04<00:04, 1.83MB/s]
92%|█████████████████████████████████▉ | 86.0M/93.8M [01:04<00:04, 1.84MB/s]
92%|██████████████████████████████████ | 86.2M/93.8M [01:04<00:03, 1.95MB/s]
92%|██████████████████████████████████ | 86.4M/93.8M [01:04<00:03, 2.01MB/s]
92%|██████████████████████████████████▏ | 86.6M/93.8M [01:04<00:04, 1.56MB/s]
93%|██████████████████████████████████▎ | 86.8M/93.8M [01:04<00:05, 1.28MB/s]
93%|██████████████████████████████████▎ | 87.0M/93.8M [01:04<00:05, 1.32MB/s]
93%|██████████████████████████████████▍ | 87.1M/93.8M [01:05<00:04, 1.44MB/s]
93%|██████████████████████████████████▍ | 87.4M/93.8M [01:05<00:03, 1.80MB/s]
93%|██████████████████████████████████▌ | 87.6M/93.8M [01:05<00:03, 1.86MB/s]
94%|██████████████████████████████████▋ | 87.8M/93.8M [01:05<00:04, 1.48MB/s]
94%|██████████████████████████████████▋ | 88.0M/93.8M [01:05<00:03, 1.59MB/s]
94%|██████████████████████████████████▊ | 88.3M/93.8M [01:05<00:03, 1.80MB/s]
94%|██████████████████████████████████▉ | 88.5M/93.8M [01:05<00:02, 1.84MB/s]
95%|███████████████████████████████████ | 88.7M/93.8M [01:05<00:02, 2.00MB/s]
95%|███████████████████████████████████ | 88.9M/93.8M [01:05<00:02, 2.09MB/s]
95%|███████████████████████████████████▏ | 89.3M/93.8M [01:06<00:01, 2.38MB/s]
95%|███████████████████████████████████▎ | 89.5M/93.8M [01:06<00:01, 2.44MB/s]
96%|███████████████████████████████████▍ | 89.8M/93.8M [01:06<00:01, 2.45MB/s]
96%|███████████████████████████████████▌ | 90.0M/93.8M [01:06<00:01, 2.45MB/s]
96%|███████████████████████████████████▌ | 90.3M/93.8M [01:06<00:01, 2.46MB/s]
97%|███████████████████████████████████▋ | 90.5M/93.8M [01:06<00:01, 1.90MB/s]
97%|███████████████████████████████████▊ | 90.7M/93.8M [01:06<00:01, 1.57MB/s]
97%|███████████████████████████████████▊ | 90.9M/93.8M [01:06<00:01, 1.62MB/s]
97%|███████████████████████████████████▉ | 91.1M/93.8M [01:07<00:01, 1.66MB/s]
97%|████████████████████████████████████ | 91.3M/93.8M [01:07<00:01, 1.69MB/s]
98%|████████████████████████████████████ | 91.5M/93.8M [01:07<00:01, 1.94MB/s]
98%|████████████████████████████████████▏| 91.7M/93.8M [01:07<00:01, 1.97MB/s]
98%|████████████████████████████████████▎| 91.9M/93.8M [01:07<00:01, 1.56MB/s]
98%|████████████████████████████████████▎| 92.1M/93.8M [01:07<00:01, 1.60MB/s]
98%|████████████████████████████████████▍| 92.3M/93.8M [01:07<00:01, 1.31MB/s]
99%|████████████████████████████████████▌| 92.5M/93.8M [01:07<00:00, 1.53MB/s]
99%|████████████████████████████████████▌| 92.7M/93.8M [01:08<00:00, 1.59MB/s]
99%|████████████████████████████████████▋| 92.9M/93.8M [01:08<00:00, 1.77MB/s]
99%|████████████████████████████████████▋| 93.1M/93.8M [01:08<00:00, 1.80MB/s]
99%|████████████████████████████████████▊| 93.3M/93.8M [01:08<00:00, 1.42MB/s]
100%|████████████████████████████████████▉| 93.6M/93.8M [01:08<00:00, 1.88MB/s]
0%| | 0.00/93.8M [00:00<?, ?B/s]
100%|██████████████████████████████████████| 93.8M/93.8M [00:00<00:00, 487GB/s]
downloading PocilloporaDamicornisSkin_Texture_0.jpg
0%| | 0.00/17.3M [00:00<?, ?B/s]
0%| | 15.4k/17.3M [00:00<02:22, 121kB/s]
0%|▏ | 85.0k/17.3M [00:00<00:50, 339kB/s]
1%|▌ | 222k/17.3M [00:00<00:24, 703kB/s]
2%|▋ | 313k/17.3M [00:00<00:28, 606kB/s]
3%|█▏ | 513k/17.3M [00:00<00:21, 785kB/s]
4%|█▋ | 741k/17.3M [00:00<00:17, 933kB/s]
6%|██▏ | 954k/17.3M [00:01<00:16, 990kB/s]
7%|██▌ | 1.20M/17.3M [00:01<00:14, 1.08MB/s]
8%|██▉ | 1.40M/17.3M [00:01<00:15, 1.06MB/s]
9%|███▎ | 1.58M/17.3M [00:01<00:15, 1.02MB/s]
10%|███▊ | 1.77M/17.3M [00:01<00:15, 1.01MB/s]
12%|████▍ | 2.08M/17.3M [00:02<00:10, 1.40MB/s]
13%|████▊ | 2.25M/17.3M [00:02<00:12, 1.22MB/s]
14%|█████▎ | 2.48M/17.3M [00:02<00:12, 1.20MB/s]
15%|█████▋ | 2.64M/17.3M [00:02<00:11, 1.29MB/s]
16%|█████▉ | 2.80M/17.3M [00:02<00:12, 1.13MB/s]
19%|██████▉ | 3.26M/17.3M [00:02<00:09, 1.54MB/s]
20%|███████▍ | 3.46M/17.3M [00:03<00:10, 1.37MB/s]
21%|███████▉ | 3.69M/17.3M [00:03<00:10, 1.31MB/s]
22%|████████▎ | 3.86M/17.3M [00:03<00:11, 1.19MB/s]
24%|████████▉ | 4.16M/17.3M [00:03<00:08, 1.52MB/s]
25%|█████████▎ | 4.33M/17.3M [00:03<00:09, 1.30MB/s]
27%|█████████▊ | 4.60M/17.3M [00:03<00:09, 1.33MB/s]
28%|██████████▍ | 4.89M/17.3M [00:04<00:07, 1.63MB/s]
29%|██████████▊ | 5.08M/17.3M [00:04<00:08, 1.40MB/s]
31%|███████████▎ | 5.30M/17.3M [00:04<00:09, 1.32MB/s]
33%|████████████ | 5.66M/17.3M [00:04<00:06, 1.76MB/s]
34%|████████████▌ | 5.87M/17.3M [00:04<00:07, 1.52MB/s]
35%|████████████▉ | 6.06M/17.3M [00:04<00:08, 1.34MB/s]
36%|█████████████▍ | 6.30M/17.3M [00:05<00:08, 1.31MB/s]
38%|██████████████ | 6.55M/17.3M [00:05<00:08, 1.30MB/s]
39%|██████████████▌ | 6.82M/17.3M [00:05<00:07, 1.34MB/s]
41%|███████████████▏ | 7.12M/17.3M [00:05<00:07, 1.39MB/s]
42%|███████████████▋ | 7.35M/17.3M [00:05<00:07, 1.33MB/s]
44%|████████████████▎ | 7.63M/17.3M [00:06<00:07, 1.36MB/s]
45%|████████████████▊ | 7.86M/17.3M [00:06<00:07, 1.30MB/s]
47%|█████████████████▎ | 8.12M/17.3M [00:06<00:06, 1.31MB/s]
49%|█████████████████▉ | 8.39M/17.3M [00:06<00:06, 1.35MB/s]
50%|██████████████████▌ | 8.66M/17.3M [00:06<00:06, 1.35MB/s]
52%|███████████████████▏ | 8.97M/17.3M [00:06<00:05, 1.67MB/s]
53%|███████████████████▌ | 9.16M/17.3M [00:07<00:05, 1.44MB/s]
54%|████████████████████ | 9.39M/17.3M [00:07<00:05, 1.37MB/s]
56%|████████████████████▋ | 9.69M/17.3M [00:07<00:04, 1.69MB/s]
57%|█████████████████████▏ | 9.89M/17.3M [00:07<00:05, 1.45MB/s]
58%|█████████████████████▋ | 10.1M/17.3M [00:07<00:05, 1.35MB/s]
60%|██████████████████████▏ | 10.4M/17.3M [00:08<00:05, 1.35MB/s]
62%|██████████████████████▉ | 10.7M/17.3M [00:08<00:04, 1.45MB/s]
63%|███████████████████████▎ | 10.9M/17.3M [00:08<00:04, 1.34MB/s]
65%|████████████████████████ | 11.2M/17.3M [00:08<00:04, 1.42MB/s]
67%|████████████████████████▋ | 11.5M/17.3M [00:08<00:03, 1.70MB/s]
68%|█████████████████████████ | 11.7M/17.3M [00:08<00:03, 1.46MB/s]
69%|█████████████████████████▍ | 11.9M/17.3M [00:09<00:04, 1.30MB/s]
70%|█████████████████████████▉ | 12.1M/17.3M [00:09<00:04, 1.26MB/s]
71%|██████████████████████████▍ | 12.4M/17.3M [00:09<00:04, 1.23MB/s]
73%|██████████████████████████▉ | 12.6M/17.3M [00:09<00:03, 1.22MB/s]
74%|███████████████████████████▍ | 12.8M/17.3M [00:09<00:03, 1.20MB/s]
76%|███████████████████████████▉ | 13.1M/17.3M [00:10<00:03, 1.27MB/s]
77%|████████████████████████████▌ | 13.4M/17.3M [00:10<00:02, 1.32MB/s]
78%|████████████████████████████▉ | 13.5M/17.3M [00:10<00:02, 1.35MB/s]
80%|█████████████████████████████▍ | 13.8M/17.3M [00:10<00:02, 1.32MB/s]
81%|█████████████████████████████▉ | 14.0M/17.3M [00:10<00:02, 1.59MB/s]
83%|██████████████████████████████▌ | 14.3M/17.3M [00:10<00:01, 1.55MB/s]
84%|███████████████████████████████ | 14.5M/17.3M [00:11<00:01, 1.40MB/s]
85%|███████████████████████████████▌ | 14.8M/17.3M [00:11<00:01, 1.32MB/s]
87%|████████████████████████████████▏ | 15.1M/17.3M [00:11<00:01, 1.41MB/s]
89%|████████████████████████████████▊ | 15.3M/17.3M [00:11<00:01, 1.36MB/s]
90%|█████████████████████████████████▎ | 15.6M/17.3M [00:11<00:01, 1.33MB/s]
92%|█████████████████████████████████▉ | 15.9M/17.3M [00:11<00:00, 1.67MB/s]
93%|██████████████████████████████████▍ | 16.1M/17.3M [00:12<00:00, 1.50MB/s]
95%|███████████████████████████████████ | 16.4M/17.3M [00:12<00:00, 1.47MB/s]
97%|███████████████████████████████████▊ | 16.7M/17.3M [00:12<00:00, 1.85MB/s]
98%|████████████████████████████████████▏| 16.9M/17.3M [00:12<00:00, 1.60MB/s]
99%|████████████████████████████████████▌| 17.1M/17.3M [00:12<00:00, 1.38MB/s]
0%| | 0.00/17.3M [00:00<?, ?B/s]
100%|█████████████████████████████████████| 17.3M/17.3M [00:00<00:00, 59.8GB/s]
downloading PocilloporaDamicornisSkin_GeneratedMat2.png
0%| | 0.00/120k [00:00<?, ?B/s]
32%|████████████▋ | 38.9k/120k [00:00<00:00, 205kB/s]
85%|██████████████████████████████████ | 102k/120k [00:00<00:00, 390kB/s]
0%| | 0.00/120k [00:00<?, ?B/s]
100%|████████████████████████████████████████| 120k/120k [00:00<00:00, 479MB/s]
Load the model#
Next, read the model data from the .obj file. Currently napari/vispy do not support reading material properties (.mtl files) nor separate texture and vertex indices (i.e. repeated vertices). Normal vectors read from the file are also ignored and re-calculated from the faces.
Notice reading .OBJ: material properties are ignored.
Load the textures#
This model comes with two textures: Texture_0 is generated from photogrammetry of the actual object, and GeneratedMat2 is a generated material to fill in parts of the model lacking photographic texture.
photo_texture = imread(tmp_dir / data_files['Texture_0'])
generated_texture = imread(tmp_dir / data_files['GeneratedMat2'])
This is what the texture images look like in 2D:
fig, axs = plt.subplots(1, 2)
axs[0].set_title(f'Texture_0 {photo_texture.shape}')
axs[0].imshow(photo_texture)
axs[0].set_xticks((0, photo_texture.shape[1]), labels=(0.0, 1.0))
axs[0].set_yticks((0, photo_texture.shape[0]), labels=(0.0, 1.0))
axs[1].set_title(f'GeneratedMat2 {generated_texture.shape}')
axs[1].imshow(generated_texture)
axs[1].set_xticks((0, generated_texture.shape[1]), labels=(0.0, 1.0))
axs[1].set_yticks((0, generated_texture.shape[0]), labels=(0.0, 1.0))
fig.show()

Create the napari layers#
Next create two separate layers with the same mesh - once with each texture. In this example the texture coordinates happen to be the same for each texture, but this is not a strict requirement.
photo_texture_layer = napari.layers.Surface(
(vertices, faces),
texture=photo_texture,
texcoords=texcoords,
name='Texture_0',
)
generated_texture_layer = napari.layers.Surface(
(vertices, faces),
texture=generated_texture,
texcoords=texcoords,
name='GeneratedMat2',
)
Add the layers to a viewer#
Finally, create the viewer and add the Surface layers. sphinx_gallery_thumbnail_number = 2
viewer = napari.Viewer(ndisplay=3)
viewer.add_layer(photo_texture_layer)
viewer.add_layer(generated_texture_layer)
viewer.camera.angles = (90.0, 0.0, -75.0)
viewer.camera.zoom = 75
if __name__ == '__main__':
napari.run()

Total running time of the script: (1 minutes 45.432 seconds)