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%| | 2.05k/93.8M [00:00<1:59:20, 13.1kB/s]
0%| | 38.9k/93.8M [00:00<11:29, 136kB/s]
0%| | 78.8k/93.8M [00:00<08:18, 188kB/s]
0%| | 156k/93.8M [00:00<05:18, 294kB/s]
0%| | 241k/93.8M [00:00<04:10, 373kB/s]
0%|▏ | 305k/93.8M [00:00<04:06, 379kB/s]
0%|▏ | 380k/93.8M [00:01<03:52, 402kB/s]
1%|▏ | 527k/93.8M [00:01<02:47, 557kB/s]
1%|▎ | 625k/93.8M [00:01<02:44, 567kB/s]
1%|▎ | 707k/93.8M [00:01<02:50, 545kB/s]
1%|▎ | 805k/93.8M [00:01<02:46, 560kB/s]
1%|▍ | 936k/93.8M [00:01<02:27, 630kB/s]
1%|▍ | 1.03M/93.8M [00:02<02:29, 618kB/s]
1%|▍ | 1.12M/93.8M [00:02<02:39, 581kB/s]
1%|▍ | 1.23M/93.8M [00:02<02:31, 612kB/s]
1%|▌ | 1.31M/93.8M [00:02<02:40, 576kB/s]
1%|▌ | 1.39M/93.8M [00:02<02:47, 551kB/s]
2%|▌ | 1.49M/93.8M [00:02<02:43, 563kB/s]
2%|▋ | 1.59M/93.8M [00:03<02:41, 572kB/s]
2%|▋ | 1.67M/93.8M [00:03<02:48, 546kB/s]
2%|▋ | 1.84M/93.8M [00:03<02:15, 678kB/s]
2%|▊ | 1.92M/93.8M [00:03<02:27, 623kB/s]
2%|▊ | 2.02M/93.8M [00:03<02:29, 614kB/s]
2%|▊ | 2.11M/93.8M [00:03<02:30, 607kB/s]
2%|▉ | 2.20M/93.8M [00:04<02:39, 574kB/s]
2%|▉ | 2.28M/93.8M [00:04<02:46, 549kB/s]
3%|▉ | 2.36M/93.8M [00:04<02:51, 532kB/s]
3%|█ | 2.51M/93.8M [00:04<02:22, 639kB/s]
3%|█ | 2.59M/93.8M [00:04<02:33, 595kB/s]
3%|█ | 2.67M/93.8M [00:04<02:41, 565kB/s]
3%|█ | 2.77M/93.8M [00:05<02:39, 572kB/s]
3%|█▏ | 2.85M/93.8M [00:05<02:45, 548kB/s]
3%|█▏ | 2.96M/93.8M [00:05<02:33, 591kB/s]
3%|█▎ | 3.11M/93.8M [00:05<02:13, 679kB/s]
3%|█▎ | 3.26M/93.8M [00:05<02:01, 742kB/s]
4%|█▎ | 3.39M/93.8M [00:05<01:59, 754kB/s]
4%|█▍ | 3.49M/93.8M [00:06<02:07, 706kB/s]
4%|█▍ | 3.57M/93.8M [00:06<02:20, 642kB/s]
4%|█▍ | 3.65M/93.8M [00:06<02:30, 598kB/s]
4%|█▌ | 3.75M/93.8M [00:06<02:30, 597kB/s]
4%|█▌ | 3.83M/93.8M [00:06<02:39, 564kB/s]
4%|█▌ | 3.93M/93.8M [00:06<02:37, 571kB/s]
4%|█▋ | 4.06M/93.8M [00:07<02:20, 637kB/s]
4%|█▋ | 4.16M/93.8M [00:07<02:23, 623kB/s]
5%|█▋ | 4.24M/93.8M [00:07<02:33, 584kB/s]
5%|█▊ | 4.34M/93.8M [00:07<02:32, 585kB/s]
5%|█▊ | 4.42M/93.8M [00:07<02:40, 557kB/s]
5%|█▊ | 4.50M/93.8M [00:07<02:45, 538kB/s]
5%|█▊ | 4.58M/93.8M [00:08<02:49, 525kB/s]
5%|█▉ | 4.66M/93.8M [00:08<02:52, 516kB/s]
5%|█▉ | 4.76M/93.8M [00:08<02:45, 538kB/s]
5%|█▉ | 4.84M/93.8M [00:08<02:50, 523kB/s]
5%|█▉ | 4.93M/93.8M [00:08<02:57, 501kB/s]
5%|██ | 5.02M/93.8M [00:08<02:48, 527kB/s]
5%|██ | 5.15M/93.8M [00:09<02:26, 605kB/s]
6%|██ | 5.24M/93.8M [00:09<02:34, 572kB/s]
6%|██▏ | 5.38M/93.8M [00:09<02:12, 665kB/s]
6%|██▏ | 5.48M/93.8M [00:09<02:17, 641kB/s]
6%|██▎ | 5.63M/93.8M [00:09<02:03, 715kB/s]
6%|██▎ | 5.71M/93.8M [00:09<02:15, 649kB/s]
6%|██▎ | 5.81M/93.8M [00:10<02:19, 632kB/s]
6%|██▍ | 5.94M/93.8M [00:10<02:09, 677kB/s]
6%|██▍ | 6.04M/93.8M [00:10<02:14, 652kB/s]
7%|██▍ | 6.14M/93.8M [00:10<02:18, 634kB/s]
7%|██▌ | 6.22M/93.8M [00:10<02:27, 592kB/s]
7%|██▌ | 6.37M/93.8M [00:10<02:08, 681kB/s]
7%|██▋ | 6.50M/93.8M [00:11<02:02, 712kB/s]
7%|██▋ | 6.59M/93.8M [00:11<02:08, 676kB/s]
7%|██▋ | 6.69M/93.8M [00:11<02:13, 651kB/s]
7%|██▊ | 6.84M/93.8M [00:11<02:00, 721kB/s]
7%|██▊ | 6.91M/93.8M [00:11<02:16, 637kB/s]
7%|██▊ | 6.99M/93.8M [00:11<02:29, 579kB/s]
8%|██▉ | 7.10M/93.8M [00:12<02:21, 613kB/s]
8%|██▉ | 7.18M/93.8M [00:12<02:29, 578kB/s]
8%|██▉ | 7.26M/93.8M [00:12<02:36, 551kB/s]
8%|██▉ | 7.36M/93.8M [00:12<02:33, 564kB/s]
8%|███ | 7.44M/93.8M [00:12<02:39, 543kB/s]
8%|███ | 7.53M/93.8M [00:12<02:43, 526kB/s]
8%|███ | 7.62M/93.8M [00:13<02:37, 546kB/s]
8%|███ | 7.71M/93.8M [00:13<02:42, 530kB/s]
8%|███▏ | 7.84M/93.8M [00:13<02:21, 608kB/s]
8%|███▏ | 7.93M/93.8M [00:13<02:22, 604kB/s]
9%|███▎ | 8.08M/93.8M [00:13<02:04, 688kB/s]
9%|███▎ | 8.18M/93.8M [00:13<02:09, 659kB/s]
9%|███▎ | 8.31M/93.8M [00:14<02:02, 698kB/s]
9%|███▍ | 8.43M/93.8M [00:14<02:02, 695kB/s]
9%|███▍ | 8.51M/93.8M [00:14<02:14, 635kB/s]
9%|███▌ | 8.64M/93.8M [00:14<02:05, 679kB/s]
9%|███▌ | 8.74M/93.8M [00:14<02:10, 653kB/s]
9%|███▌ | 8.83M/93.8M [00:14<02:13, 634kB/s]
10%|███▌ | 8.93M/93.8M [00:15<02:16, 622kB/s]
10%|███▋ | 9.06M/93.8M [00:15<02:05, 672kB/s]
10%|███▋ | 9.16M/93.8M [00:15<02:10, 647kB/s]
10%|███▊ | 9.26M/93.8M [00:15<02:14, 630kB/s]
10%|███▊ | 9.34M/93.8M [00:15<02:23, 589kB/s]
10%|███▊ | 9.50M/93.8M [00:15<01:58, 709kB/s]
10%|███▉ | 9.59M/93.8M [00:16<02:10, 645kB/s]
10%|███▉ | 9.67M/93.8M [00:16<02:20, 598kB/s]
10%|███▉ | 9.75M/93.8M [00:16<02:28, 567kB/s]
11%|███▉ | 9.85M/93.8M [00:16<02:25, 575kB/s]
11%|████ | 9.93M/93.8M [00:16<02:32, 550kB/s]
11%|████ | 10.0M/93.8M [00:16<02:28, 563kB/s]
11%|████ | 10.2M/93.8M [00:17<02:12, 629kB/s]
11%|████▏ | 10.2M/93.8M [00:17<02:21, 588kB/s]
11%|████▏ | 10.4M/93.8M [00:17<02:14, 619kB/s]
11%|████▎ | 10.5M/93.8M [00:17<01:59, 700kB/s]
11%|████▎ | 10.6M/93.8M [00:17<01:59, 697kB/s]
12%|████▍ | 10.8M/93.8M [00:17<01:38, 840kB/s]
12%|████▍ | 10.9M/93.8M [00:18<01:51, 741kB/s]
12%|████▍ | 11.0M/93.8M [00:18<02:04, 662kB/s]
12%|████▍ | 11.1M/93.8M [00:18<02:15, 612kB/s]
12%|████▌ | 11.1M/93.8M [00:18<02:23, 577kB/s]
12%|████▌ | 11.2M/93.8M [00:18<02:22, 580kB/s]
12%|████▌ | 11.4M/93.8M [00:18<02:08, 643kB/s]
12%|████▋ | 11.5M/93.8M [00:19<02:11, 628kB/s]
12%|████▋ | 11.5M/93.8M [00:19<02:19, 588kB/s]
12%|████▋ | 11.6M/93.8M [00:19<02:19, 589kB/s]
13%|████▊ | 11.8M/93.8M [00:19<02:01, 677kB/s]
13%|████▊ | 11.9M/93.8M [00:19<02:11, 622kB/s]
13%|████▊ | 12.0M/93.8M [00:19<02:13, 613kB/s]
13%|████▉ | 12.1M/93.8M [00:20<02:21, 577kB/s]
13%|████▉ | 12.2M/93.8M [00:20<02:20, 582kB/s]
13%|████▉ | 12.3M/93.8M [00:20<02:13, 613kB/s]
13%|█████ | 12.4M/93.8M [00:20<02:02, 666kB/s]
13%|█████ | 12.5M/93.8M [00:20<02:06, 644kB/s]
13%|█████ | 12.6M/93.8M [00:20<01:53, 717kB/s]
14%|█████▏ | 12.8M/93.8M [00:21<01:54, 710kB/s]
14%|█████▏ | 12.9M/93.8M [00:21<01:46, 761kB/s]
14%|█████▎ | 13.0M/93.8M [00:21<02:00, 671kB/s]
14%|█████▎ | 13.1M/93.8M [00:21<02:08, 628kB/s]
14%|█████▎ | 13.2M/93.8M [00:21<02:18, 580kB/s]
14%|█████▎ | 13.2M/93.8M [00:21<02:17, 584kB/s]
14%|█████▍ | 13.3M/93.8M [00:22<02:24, 556kB/s]
14%|█████▍ | 13.4M/93.8M [00:22<02:14, 596kB/s]
14%|█████▍ | 13.5M/93.8M [00:22<02:14, 595kB/s]
15%|█████▌ | 13.6M/93.8M [00:22<02:14, 594kB/s]
15%|█████▌ | 13.7M/93.8M [00:22<02:21, 564kB/s]
15%|█████▌ | 13.8M/93.8M [00:22<02:19, 573kB/s]
15%|█████▋ | 13.9M/93.8M [00:23<02:25, 547kB/s]
15%|█████▋ | 14.0M/93.8M [00:23<02:30, 531kB/s]
15%|█████▋ | 14.1M/93.8M [00:23<02:33, 519kB/s]
15%|█████▋ | 14.1M/93.8M [00:23<02:35, 511kB/s]
15%|█████▊ | 14.3M/93.8M [00:23<01:51, 713kB/s]
15%|█████▊ | 14.4M/93.8M [00:23<02:03, 645kB/s]
16%|█████▉ | 14.6M/93.8M [00:24<01:50, 718kB/s]
16%|█████▉ | 14.7M/93.8M [00:24<01:42, 768kB/s]
16%|█████▉ | 14.8M/93.8M [00:24<01:55, 686kB/s]
16%|██████ | 14.9M/93.8M [00:24<01:45, 745kB/s]
16%|██████ | 15.0M/93.8M [00:24<01:57, 670kB/s]
16%|██████▏ | 15.1M/93.8M [00:24<02:01, 646kB/s]
16%|██████▏ | 15.2M/93.8M [00:25<02:10, 601kB/s]
16%|██████▏ | 15.3M/93.8M [00:25<02:11, 598kB/s]
16%|██████▏ | 15.4M/93.8M [00:25<02:18, 567kB/s]
17%|██████▎ | 15.5M/93.8M [00:25<02:24, 543kB/s]
17%|██████▎ | 15.6M/93.8M [00:25<02:28, 528kB/s]
17%|██████▎ | 15.7M/93.8M [00:25<02:22, 547kB/s]
17%|██████▍ | 15.8M/93.8M [00:26<02:19, 561kB/s]
17%|██████▍ | 15.8M/93.8M [00:26<02:23, 542kB/s]
17%|██████▍ | 15.9M/93.8M [00:26<02:19, 557kB/s]
17%|██████▌ | 16.1M/93.8M [00:26<01:58, 655kB/s]
17%|██████▌ | 16.2M/93.8M [00:26<02:08, 606kB/s]
17%|██████▌ | 16.3M/93.8M [00:26<02:02, 631kB/s]
17%|██████▋ | 16.4M/93.8M [00:27<02:11, 588kB/s]
18%|██████▋ | 16.5M/93.8M [00:27<02:11, 589kB/s]
18%|██████▋ | 16.5M/93.8M [00:27<02:18, 559kB/s]
18%|██████▋ | 16.6M/93.8M [00:27<02:15, 569kB/s]
18%|██████▊ | 16.7M/93.8M [00:27<02:21, 546kB/s]
18%|██████▊ | 16.8M/93.8M [00:27<02:10, 589kB/s]
18%|██████▊ | 16.9M/93.8M [00:28<02:10, 590kB/s]
18%|██████▉ | 17.0M/93.8M [00:28<02:17, 559kB/s]
18%|██████▉ | 17.1M/93.8M [00:28<02:14, 569kB/s]
18%|██████▉ | 17.2M/93.8M [00:28<02:00, 635kB/s]
18%|███████ | 17.3M/93.8M [00:28<02:02, 623kB/s]
19%|███████ | 17.4M/93.8M [00:28<02:17, 555kB/s]
19%|███████ | 17.5M/93.8M [00:29<02:30, 508kB/s]
19%|███████ | 17.6M/93.8M [00:29<02:23, 531kB/s]
19%|███████▏ | 17.7M/93.8M [00:29<01:59, 638kB/s]
19%|███████▏ | 17.8M/93.8M [00:29<02:07, 596kB/s]
19%|███████▎ | 17.9M/93.8M [00:29<02:07, 595kB/s]
19%|███████▎ | 18.0M/93.8M [00:29<02:07, 595kB/s]
19%|███████▎ | 18.1M/93.8M [00:30<02:21, 534kB/s]
19%|███████▎ | 18.2M/93.8M [00:30<02:17, 550kB/s]
19%|███████▍ | 18.2M/93.8M [00:30<02:21, 534kB/s]
20%|███████▍ | 18.4M/93.8M [00:30<01:57, 640kB/s]
20%|███████▌ | 18.5M/93.8M [00:30<01:50, 684kB/s]
20%|███████▌ | 18.6M/93.8M [00:30<01:45, 714kB/s]
20%|███████▌ | 18.7M/93.8M [00:31<01:55, 648kB/s]
20%|███████▋ | 18.8M/93.8M [00:31<01:58, 631kB/s]
20%|███████▋ | 19.0M/93.8M [00:31<01:50, 678kB/s]
20%|███████▋ | 19.0M/93.8M [00:31<01:59, 623kB/s]
20%|███████▊ | 19.2M/93.8M [00:31<01:46, 701kB/s]
21%|███████▊ | 19.3M/93.8M [00:31<01:46, 697kB/s]
21%|███████▊ | 19.4M/93.8M [00:32<01:42, 725kB/s]
21%|███████▉ | 19.5M/93.8M [00:32<01:53, 656kB/s]
21%|███████▉ | 19.7M/93.8M [00:32<01:42, 724kB/s]
21%|████████ | 19.8M/93.8M [00:32<01:48, 684kB/s]
21%|████████ | 19.9M/93.8M [00:32<01:52, 657kB/s]
21%|████████ | 19.9M/93.8M [00:32<02:01, 608kB/s]
21%|████████▏ | 20.1M/93.8M [00:33<01:46, 692kB/s]
22%|████████▏ | 20.2M/93.8M [00:33<01:56, 632kB/s]
22%|████████▏ | 20.2M/93.8M [00:33<02:04, 589kB/s]
22%|████████▎ | 20.4M/93.8M [00:33<01:58, 619kB/s]
22%|████████▎ | 20.5M/93.8M [00:33<02:00, 610kB/s]
22%|████████▎ | 20.6M/93.8M [00:33<02:01, 604kB/s]
22%|████████▎ | 20.7M/93.8M [00:34<02:01, 601kB/s]
22%|████████▍ | 20.7M/93.8M [00:34<02:08, 567kB/s]
22%|████████▍ | 20.8M/93.8M [00:34<02:13, 546kB/s]
22%|████████▍ | 20.9M/93.8M [00:34<02:17, 530kB/s]
22%|████████▌ | 21.0M/93.8M [00:34<02:12, 549kB/s]
23%|████████▌ | 21.1M/93.8M [00:34<02:02, 591kB/s]
23%|████████▌ | 21.2M/93.8M [00:35<02:02, 591kB/s]
23%|████████▋ | 21.3M/93.8M [00:35<01:57, 619kB/s]
23%|████████▋ | 21.5M/93.8M [00:35<01:43, 700kB/s]
23%|████████▋ | 21.6M/93.8M [00:35<01:53, 638kB/s]
23%|████████▊ | 21.6M/93.8M [00:35<02:01, 594kB/s]
23%|████████▊ | 21.7M/93.8M [00:35<02:01, 593kB/s]
23%|████████▊ | 21.9M/93.8M [00:36<01:45, 680kB/s]
23%|████████▉ | 22.0M/93.8M [00:36<01:54, 625kB/s]
24%|████████▉ | 22.0M/93.8M [00:36<02:02, 585kB/s]
24%|████████▉ | 22.1M/93.8M [00:36<02:08, 558kB/s]
24%|█████████ | 22.2M/93.8M [00:36<02:12, 539kB/s]
24%|█████████ | 22.3M/93.8M [00:36<02:09, 554kB/s]
24%|█████████ | 22.4M/93.8M [00:37<02:06, 565kB/s]
24%|█████████ | 22.5M/93.8M [00:37<02:10, 544kB/s]
24%|█████████▏ | 22.6M/93.8M [00:37<02:00, 589kB/s]
24%|█████████▏ | 22.7M/93.8M [00:37<02:00, 589kB/s]
24%|█████████▎ | 22.9M/93.8M [00:37<01:36, 736kB/s]
25%|█████████▎ | 23.0M/93.8M [00:37<01:38, 720kB/s]
25%|█████████▎ | 23.1M/93.8M [00:38<01:35, 740kB/s]
25%|█████████▍ | 23.2M/93.8M [00:38<01:37, 725kB/s]
25%|█████████▍ | 23.3M/93.8M [00:38<01:47, 656kB/s]
25%|█████████▍ | 23.4M/93.8M [00:38<01:56, 605kB/s]
25%|█████████▌ | 23.5M/93.8M [00:38<02:02, 572kB/s]
25%|█████████▌ | 23.6M/93.8M [00:38<02:01, 579kB/s]
25%|█████████▌ | 23.7M/93.8M [00:39<02:06, 553kB/s]
25%|█████████▌ | 23.7M/93.8M [00:39<02:10, 536kB/s]
25%|█████████▋ | 23.8M/93.8M [00:39<02:13, 524kB/s]
25%|█████████▋ | 23.9M/93.8M [00:39<02:16, 513kB/s]
26%|█████████▋ | 24.0M/93.8M [00:39<02:09, 537kB/s]
26%|█████████▊ | 24.1M/93.8M [00:39<02:05, 554kB/s]
26%|█████████▊ | 24.2M/93.8M [00:40<02:03, 565kB/s]
26%|█████████▊ | 24.3M/93.8M [00:40<02:01, 573kB/s]
26%|█████████▉ | 24.4M/93.8M [00:40<01:59, 578kB/s]
26%|█████████▊ | 24.8M/93.8M [00:40<00:58, 1.18MB/s]
27%|█████████▉ | 25.3M/93.8M [00:40<00:41, 1.66MB/s]
29%|██████████▌ | 26.7M/93.8M [00:40<00:17, 3.80MB/s]
30%|██████████▉ | 27.7M/93.8M [00:41<00:15, 4.38MB/s]
31%|███████████▎ | 28.7M/93.8M [00:41<00:13, 4.82MB/s]
32%|███████████▋ | 29.6M/93.8M [00:41<00:12, 5.17MB/s]
33%|████████████ | 30.6M/93.8M [00:41<00:11, 5.45MB/s]
34%|████████████▍ | 31.7M/93.8M [00:41<00:10, 5.69MB/s]
35%|████████████▊ | 32.4M/93.8M [00:41<00:11, 5.17MB/s]
35%|█████████████ | 33.0M/93.8M [00:42<00:12, 4.74MB/s]
36%|█████████████▎ | 33.7M/93.8M [00:42<00:13, 4.62MB/s]
37%|█████████████▌ | 34.4M/93.8M [00:42<00:13, 4.55MB/s]
37%|█████████████▊ | 35.2M/93.8M [00:42<00:13, 4.48MB/s]
38%|██████████████▏ | 35.9M/93.8M [00:42<00:12, 4.49MB/s]
39%|██████████████▍ | 36.7M/93.8M [00:42<00:12, 4.48MB/s]
40%|██████████████▋ | 37.3M/93.8M [00:43<00:12, 4.38MB/s]
41%|███████████████ | 38.0M/93.8M [00:43<00:13, 4.29MB/s]
41%|███████████████▎ | 38.7M/93.8M [00:43<00:11, 4.71MB/s]
43%|███████████████▋ | 39.9M/93.8M [00:43<00:10, 5.30MB/s]
44%|████████████████▏ | 41.1M/93.8M [00:43<00:08, 5.88MB/s]
45%|████████████████▋ | 42.3M/93.8M [00:43<00:08, 6.28MB/s]
46%|█████████████████▏ | 43.5M/93.8M [00:43<00:07, 6.64MB/s]
48%|█████████████████▋ | 44.7M/93.8M [00:44<00:07, 6.88MB/s]
49%|██████████████████ | 45.9M/93.8M [00:44<00:06, 7.04MB/s]
50%|██████████████████▌ | 47.2M/93.8M [00:44<00:06, 7.18MB/s]
52%|███████████████████ | 48.4M/93.8M [00:44<00:06, 7.31MB/s]
52%|███████████████████▍ | 49.2M/93.8M [00:44<00:06, 6.38MB/s]
53%|███████████████████▋ | 49.8M/93.8M [00:45<00:10, 4.35MB/s]
54%|███████████████████▊ | 50.3M/93.8M [00:45<00:10, 4.03MB/s]
54%|████████████████████ | 50.8M/93.8M [00:45<00:11, 3.68MB/s]
55%|████████████████████▏ | 51.2M/93.8M [00:45<00:12, 3.43MB/s]
55%|████████████████████▎ | 51.6M/93.8M [00:45<00:13, 3.07MB/s]
55%|████████████████████▍ | 51.9M/93.8M [00:45<00:14, 2.82MB/s]
56%|████████████████████▋ | 52.5M/93.8M [00:46<00:14, 2.94MB/s]
56%|████████████████████▉ | 53.0M/93.8M [00:46<00:13, 2.94MB/s]
57%|█████████████████████ | 53.5M/93.8M [00:47<00:40, 1.01MB/s]
57%|█████████████████████▏ | 53.7M/93.8M [00:47<00:38, 1.04MB/s]
57%|█████████████████████▎ | 53.9M/93.8M [00:47<00:35, 1.11MB/s]
58%|█████████████████████▍ | 54.4M/93.8M [00:48<00:28, 1.38MB/s]
58%|█████████████████████▋ | 54.8M/93.8M [00:48<00:23, 1.63MB/s]
59%|█████████████████████▊ | 55.3M/93.8M [00:48<00:19, 1.93MB/s]
59%|██████████████████████ | 55.8M/93.8M [00:48<00:17, 2.16MB/s]
60%|██████████████████████▏ | 56.3M/93.8M [00:48<00:15, 2.37MB/s]
61%|██████████████████████▍ | 56.7M/93.8M [00:48<00:14, 2.50MB/s]
61%|██████████████████████▌ | 57.1M/93.8M [00:49<00:14, 2.48MB/s]
61%|██████████████████████▋ | 57.5M/93.8M [00:49<00:15, 2.36MB/s]
62%|██████████████████████▉ | 58.0M/93.8M [00:49<00:14, 2.53MB/s]
62%|██████████████████████▉ | 58.3M/93.8M [00:49<00:15, 2.31MB/s]
63%|███████████████████████▏ | 58.8M/93.8M [00:49<00:13, 2.50MB/s]
63%|███████████████████████▍ | 59.2M/93.8M [00:49<00:13, 2.61MB/s]
64%|███████████████████████▌ | 59.7M/93.8M [00:50<00:13, 2.62MB/s]
64%|███████████████████████▋ | 60.1M/93.8M [00:50<00:12, 2.63MB/s]
65%|███████████████████████▉ | 60.6M/93.8M [00:50<00:12, 2.75MB/s]
65%|████████████████████████ | 60.9M/93.8M [00:50<00:13, 2.46MB/s]
65%|████████████████████████▏ | 61.4M/93.8M [00:50<00:12, 2.61MB/s]
66%|████████████████████████▍ | 61.9M/93.8M [00:50<00:11, 2.77MB/s]
67%|████████████████████████▋ | 62.4M/93.8M [00:51<00:11, 2.79MB/s]
67%|████████████████████████▊ | 62.8M/93.8M [00:51<00:11, 2.69MB/s]
68%|█████████████████████████ | 63.4M/93.8M [00:51<00:10, 2.86MB/s]
68%|█████████████████████████▏ | 63.9M/93.8M [00:51<00:10, 2.97MB/s]
69%|█████████████████████████▍ | 64.4M/93.8M [00:51<00:09, 2.96MB/s]
69%|█████████████████████████▌ | 64.9M/93.8M [00:51<00:09, 2.99MB/s]
70%|█████████████████████████▊ | 65.4M/93.8M [00:52<00:09, 3.00MB/s]
70%|█████████████████████████▉ | 65.9M/93.8M [00:52<00:09, 2.93MB/s]
71%|██████████████████████████▏ | 66.3M/93.8M [00:52<00:09, 2.90MB/s]
71%|██████████████████████████▍ | 66.8M/93.8M [00:52<00:09, 2.95MB/s]
72%|██████████████████████████▌ | 67.2M/93.8M [00:52<00:09, 2.74MB/s]
72%|██████████████████████████▋ | 67.5M/93.8M [00:52<00:10, 2.51MB/s]
73%|██████████████████████████▊ | 68.0M/93.8M [00:53<00:09, 2.64MB/s]
73%|███████████████████████████ | 68.5M/93.8M [00:53<00:09, 2.68MB/s]
73%|███████████████████████████▏ | 68.9M/93.8M [00:53<00:09, 2.58MB/s]
74%|███████████████████████████▍ | 69.4M/93.8M [00:53<00:08, 2.72MB/s]
75%|███████████████████████████▌ | 69.9M/93.8M [00:53<00:08, 2.81MB/s]
75%|███████████████████████████▊ | 70.4M/93.8M [00:53<00:08, 2.82MB/s]
76%|███████████████████████████▉ | 70.9M/93.8M [00:54<00:07, 2.95MB/s]
76%|████████████████████████████ | 71.3M/93.8M [00:54<00:08, 2.71MB/s]
77%|████████████████████████████▎ | 71.8M/93.8M [00:54<00:07, 2.87MB/s]
77%|████████████████████████████▍ | 72.2M/93.8M [00:54<00:08, 2.69MB/s]
77%|████████████████████████████▋ | 72.7M/93.8M [00:54<00:07, 2.74MB/s]
78%|████████████████████████████▊ | 73.1M/93.8M [00:54<00:07, 2.75MB/s]
78%|█████████████████████████████ | 73.6M/93.8M [00:55<00:07, 2.75MB/s]
79%|█████████████████████████████▏ | 74.1M/93.8M [00:55<00:07, 2.81MB/s]
80%|█████████████████████████████▍ | 74.6M/93.8M [00:55<00:06, 2.85MB/s]
80%|█████████████████████████████▌ | 75.1M/93.8M [00:55<00:06, 2.90MB/s]
81%|█████████████████████████████▉ | 76.0M/93.8M [00:55<00:04, 3.75MB/s]
82%|██████████████████████████████▍ | 77.3M/93.8M [00:55<00:03, 4.90MB/s]
84%|███████████████████████████████ | 78.6M/93.8M [00:56<00:02, 5.85MB/s]
85%|███████████████████████████████▌ | 80.0M/93.8M [00:56<00:02, 6.59MB/s]
87%|████████████████████████████████ | 81.4M/93.8M [00:56<00:01, 7.14MB/s]
88%|████████████████████████████████▋ | 82.8M/93.8M [00:56<00:01, 7.53MB/s]
90%|█████████████████████████████████▏ | 84.2M/93.8M [00:56<00:01, 7.82MB/s]
91%|█████████████████████████████████▋ | 85.4M/93.8M [00:56<00:01, 7.60MB/s]
92%|█████████████████████████████████▉ | 86.1M/93.8M [00:57<00:01, 6.65MB/s]
93%|██████████████████████████████████▏ | 86.8M/93.8M [00:57<00:01, 5.85MB/s]
93%|██████████████████████████████████▍ | 87.4M/93.8M [00:57<00:01, 5.15MB/s]
94%|██████████████████████████████████▋ | 87.9M/93.8M [00:57<00:01, 3.52MB/s]
94%|██████████████████████████████████▊ | 88.3M/93.8M [00:57<00:01, 3.26MB/s]
96%|███████████████████████████████████▍ | 89.7M/93.8M [00:58<00:00, 4.59MB/s]
96%|███████████████████████████████████▋ | 90.5M/93.8M [00:58<00:00, 3.63MB/s]
98%|████████████████████████████████████▎| 91.9M/93.8M [00:58<00:00, 4.74MB/s]
100%|████████████████████████████████████▊| 93.4M/93.8M [00:58<00:00, 5.79MB/s]
0%| | 0.00/93.8M [00:00<?, ?B/s]
100%|██████████████████████████████████████| 93.8M/93.8M [00:00<00:00, 437GB/s]
downloading PocilloporaDamicornisSkin_Texture_0.jpg
0%| | 0.00/17.3M [00:00<?, ?B/s]
0%| | 9.22k/17.3M [00:00<06:03, 47.6kB/s]
0%| | 32.8k/17.3M [00:00<02:18, 124kB/s]
0%|▏ | 77.8k/17.3M [00:00<01:25, 202kB/s]
1%|▎ | 166k/17.3M [00:00<00:55, 306kB/s]
2%|▌ | 269k/17.3M [00:00<00:40, 425kB/s]
2%|▊ | 366k/17.3M [00:00<00:34, 484kB/s]
3%|█▏ | 513k/17.3M [00:01<00:26, 627kB/s]
3%|█▎ | 595k/17.3M [00:01<00:28, 591kB/s]
4%|█▌ | 693k/17.3M [00:01<00:27, 600kB/s]
4%|█▋ | 775k/17.3M [00:01<00:28, 575kB/s]
5%|██ | 922k/17.3M [00:01<00:24, 681kB/s]
6%|██▎ | 1.04M/17.3M [00:01<00:23, 694kB/s]
6%|██▍ | 1.12M/17.3M [00:02<00:25, 641kB/s]
7%|██▋ | 1.20M/17.3M [00:02<00:26, 604kB/s]
8%|██▊ | 1.30M/17.3M [00:02<00:26, 609kB/s]
8%|███▏ | 1.44M/17.3M [00:02<00:22, 703kB/s]
9%|███▍ | 1.54M/17.3M [00:02<00:23, 678kB/s]
9%|███▌ | 1.63M/17.3M [00:02<00:24, 630kB/s]
10%|███▋ | 1.71M/17.3M [00:03<00:26, 596kB/s]
10%|███▉ | 1.79M/17.3M [00:03<00:27, 573kB/s]
11%|████▏ | 1.89M/17.3M [00:03<00:26, 587kB/s]
11%|████▎ | 1.95M/17.3M [00:03<00:28, 533kB/s]
12%|████▌ | 2.10M/17.3M [00:03<00:23, 653kB/s]
13%|████▊ | 2.18M/17.3M [00:03<00:24, 612kB/s]
13%|█████ | 2.33M/17.3M [00:03<00:21, 703kB/s]
14%|█████▎ | 2.41M/17.3M [00:04<00:23, 647kB/s]
15%|█████▌ | 2.54M/17.3M [00:04<00:21, 675kB/s]
16%|█████▉ | 2.69M/17.3M [00:04<00:19, 748kB/s]
16%|██████ | 2.79M/17.3M [00:04<00:20, 711kB/s]
17%|██████▎ | 2.87M/17.3M [00:04<00:22, 654kB/s]
17%|██████▌ | 2.97M/17.3M [00:04<00:22, 644kB/s]
18%|██████▋ | 3.05M/17.3M [00:05<00:23, 605kB/s]
18%|███████ | 3.19M/17.3M [00:05<00:20, 701kB/s]
19%|███████▏ | 3.29M/17.3M [00:05<00:20, 677kB/s]
20%|███████▍ | 3.38M/17.3M [00:05<00:22, 630kB/s]
20%|███████▋ | 3.47M/17.3M [00:05<00:22, 626kB/s]
21%|███████▊ | 3.55M/17.3M [00:05<00:23, 591kB/s]
21%|████████ | 3.69M/17.3M [00:06<00:20, 662kB/s]
22%|████████▎ | 3.78M/17.3M [00:06<00:20, 650kB/s]
22%|████████▍ | 3.87M/17.3M [00:06<00:22, 611kB/s]
23%|████████▋ | 3.95M/17.3M [00:06<00:22, 583kB/s]
23%|████████▉ | 4.05M/17.3M [00:06<00:22, 593kB/s]
24%|█████████ | 4.13M/17.3M [00:06<00:23, 569kB/s]
24%|█████████▎ | 4.23M/17.3M [00:07<00:22, 584kB/s]
25%|█████████▍ | 4.32M/17.3M [00:07<00:21, 596kB/s]
25%|█████████▋ | 4.41M/17.3M [00:07<00:22, 573kB/s]
26%|█████████▊ | 4.49M/17.3M [00:07<00:23, 556kB/s]
26%|██████████ | 4.57M/17.3M [00:07<00:23, 544kB/s]
27%|██████████▎ | 4.68M/17.3M [00:07<00:21, 596kB/s]
28%|██████████▍ | 4.76M/17.3M [00:07<00:21, 573kB/s]
28%|██████████▋ | 4.85M/17.3M [00:08<00:22, 556kB/s]
28%|██████████▊ | 4.93M/17.3M [00:08<00:22, 544kB/s]
29%|███████████ | 5.01M/17.3M [00:08<00:22, 536kB/s]
29%|███████████▏ | 5.09M/17.3M [00:08<00:23, 531kB/s]
30%|███████████▍ | 5.19M/17.3M [00:08<00:21, 556kB/s]
30%|███████████▌ | 5.27M/17.3M [00:08<00:22, 544kB/s]
31%|███████████▊ | 5.40M/17.3M [00:09<00:18, 629kB/s]
32%|████████████▏ | 5.55M/17.3M [00:09<00:16, 720kB/s]
33%|████████████▎ | 5.63M/17.3M [00:09<00:17, 657kB/s]
33%|████████████▌ | 5.73M/17.3M [00:09<00:17, 647kB/s]
34%|████████████▊ | 5.81M/17.3M [00:09<00:18, 608kB/s]
34%|█████████████ | 5.93M/17.3M [00:09<00:17, 643kB/s]
35%|█████████████▏ | 6.02M/17.3M [00:10<00:17, 636kB/s]
35%|█████████████▍ | 6.11M/17.3M [00:10<00:18, 601kB/s]
36%|█████████████▋ | 6.22M/17.3M [00:10<00:17, 636kB/s]
37%|█████████████▉ | 6.32M/17.3M [00:10<00:17, 632kB/s]
37%|██████████████▏ | 6.45M/17.3M [00:10<00:15, 691kB/s]
38%|██████████████▍ | 6.55M/17.3M [00:10<00:16, 670kB/s]
38%|██████████████▌ | 6.65M/17.3M [00:10<00:16, 655kB/s]
39%|██████████████▊ | 6.73M/17.3M [00:11<00:17, 611kB/s]
40%|███████████████▎ | 6.96M/17.3M [00:11<00:12, 861kB/s]
41%|███████████████▍ | 7.04M/17.3M [00:11<00:13, 769kB/s]
41%|███████████████▋ | 7.12M/17.3M [00:11<00:14, 684kB/s]
42%|███████████████▉ | 7.27M/17.3M [00:11<00:13, 756kB/s]
42%|████████████████▏ | 7.35M/17.3M [00:11<00:14, 684kB/s]
43%|████████████████▍ | 7.50M/17.3M [00:12<00:12, 758kB/s]
44%|████████████████▊ | 7.64M/17.3M [00:12<00:11, 810kB/s]
45%|████████████████▉ | 7.73M/17.3M [00:12<00:13, 719kB/s]
45%|█████████████████▏ | 7.81M/17.3M [00:12<00:14, 657kB/s]
46%|█████████████████▍ | 7.94M/17.3M [00:12<00:13, 708kB/s]
46%|█████████████████▌ | 8.02M/17.3M [00:12<00:14, 651kB/s]
47%|██████████████████ | 8.22M/17.3M [00:13<00:10, 828kB/s]
48%|██████████████████▏ | 8.30M/17.3M [00:13<00:12, 737kB/s]
49%|██████████████████▍ | 8.39M/17.3M [00:13<00:12, 697kB/s]
49%|██████████████████▌ | 8.48M/17.3M [00:13<00:13, 642kB/s]
50%|██████████████████▊ | 8.59M/17.3M [00:13<00:13, 667kB/s]
51%|███████████████████▏ | 8.74M/17.3M [00:13<00:11, 746kB/s]
51%|███████████████████▍ | 8.84M/17.3M [00:13<00:11, 707kB/s]
52%|███████████████████▋ | 8.93M/17.3M [00:14<00:12, 681kB/s]
52%|███████████████████▉ | 9.05M/17.3M [00:14<00:11, 694kB/s]
53%|████████████████████ | 9.13M/17.3M [00:14<00:12, 641kB/s]
54%|████████████████████▍ | 9.28M/17.3M [00:14<00:11, 728kB/s]
54%|████████████████████▋ | 9.42M/17.3M [00:14<00:10, 787kB/s]
55%|████████████████████▉ | 9.52M/17.3M [00:14<00:10, 737kB/s]
56%|█████████████████████ | 9.61M/17.3M [00:15<00:11, 671kB/s]
56%|█████████████████████▎ | 9.70M/17.3M [00:15<00:11, 656kB/s]
57%|█████████████████████▌ | 9.82M/17.3M [00:15<00:11, 677kB/s]
57%|█████████████████████▊ | 9.92M/17.3M [00:15<00:11, 658kB/s]
58%|█████████████████████▉ | 10.0M/17.3M [00:15<00:11, 616kB/s]
58%|██████████████████████▏ | 10.1M/17.3M [00:15<00:11, 617kB/s]
59%|██████████████████████▍ | 10.2M/17.3M [00:16<00:10, 650kB/s]
59%|██████████████████████▌ | 10.3M/17.3M [00:16<00:11, 610kB/s]
60%|██████████████████████▊ | 10.4M/17.3M [00:16<00:11, 580kB/s]
61%|███████████████████████ | 10.5M/17.3M [00:16<00:10, 654kB/s]
62%|███████████████████████▍ | 10.7M/17.3M [00:16<00:09, 737kB/s]
62%|███████████████████████▌ | 10.7M/17.3M [00:16<00:09, 671kB/s]
63%|███████████████████████▊ | 10.8M/17.3M [00:17<00:10, 625kB/s]
63%|███████████████████████▉ | 10.9M/17.3M [00:17<00:10, 622kB/s]
64%|████████████████████████▏ | 11.0M/17.3M [00:17<00:10, 591kB/s]
64%|████████████████████████▍ | 11.1M/17.3M [00:17<00:08, 693kB/s]
65%|████████████████████████▋ | 11.2M/17.3M [00:17<00:09, 640kB/s]
65%|████████████████████████▊ | 11.3M/17.3M [00:17<00:09, 634kB/s]
66%|█████████████████████████ | 11.4M/17.3M [00:17<00:09, 630kB/s]
66%|█████████████████████████▎ | 11.5M/17.3M [00:18<00:09, 595kB/s]
67%|█████████████████████████▍ | 11.6M/17.3M [00:18<00:09, 572kB/s]
68%|█████████████████████████▋ | 11.7M/17.3M [00:18<00:09, 587kB/s]
68%|█████████████████████████▉ | 11.8M/17.3M [00:18<00:09, 597kB/s]
69%|██████████████████████████▏ | 11.9M/17.3M [00:18<00:08, 635kB/s]
69%|██████████████████████████▎ | 12.0M/17.3M [00:18<00:08, 629kB/s]
70%|██████████████████████████▋ | 12.1M/17.3M [00:19<00:07, 720kB/s]
71%|██████████████████████████▉ | 12.3M/17.3M [00:19<00:06, 752kB/s]
72%|███████████████████████████▏ | 12.4M/17.3M [00:19<00:06, 713kB/s]
72%|███████████████████████████▍ | 12.5M/17.3M [00:19<00:07, 685kB/s]
73%|███████████████████████████▌ | 12.5M/17.3M [00:19<00:07, 633kB/s]
73%|███████████████████████████▋ | 12.6M/17.3M [00:19<00:07, 598kB/s]
74%|████████████████████████████ | 12.8M/17.3M [00:20<00:06, 698kB/s]
74%|████████████████████████████▎ | 12.9M/17.3M [00:20<00:06, 675kB/s]
75%|████████████████████████████▍ | 13.0M/17.3M [00:20<00:06, 628kB/s]
75%|████████████████████████████▋ | 13.1M/17.3M [00:20<00:06, 624kB/s]
76%|████████████████████████████▉ | 13.2M/17.3M [00:20<00:06, 623kB/s]
77%|█████████████████████████████▏ | 13.3M/17.3M [00:20<00:06, 654kB/s]
78%|█████████████████████████████▍ | 13.4M/17.3M [00:20<00:05, 737kB/s]
78%|█████████████████████████████▋ | 13.5M/17.3M [00:21<00:05, 671kB/s]
79%|█████████████████████████████▊ | 13.6M/17.3M [00:21<00:05, 655kB/s]
79%|██████████████████████████████ | 13.7M/17.3M [00:21<00:05, 644kB/s]
80%|██████████████████████████████▎ | 13.8M/17.3M [00:21<00:05, 637kB/s]
80%|██████████████████████████████▍ | 13.9M/17.3M [00:21<00:05, 602kB/s]
81%|██████████████████████████████▋ | 14.0M/17.3M [00:21<00:05, 608kB/s]
81%|██████████████████████████████▊ | 14.1M/17.3M [00:22<00:05, 581kB/s]
82%|███████████████████████████████ | 14.2M/17.3M [00:22<00:05, 591kB/s]
82%|███████████████████████████████▎ | 14.2M/17.3M [00:22<00:05, 569kB/s]
83%|███████████████████████████████▍ | 14.3M/17.3M [00:22<00:05, 554kB/s]
83%|███████████████████████████████▋ | 14.4M/17.3M [00:22<00:05, 543kB/s]
84%|███████████████████████████████▊ | 14.5M/17.3M [00:22<00:04, 567kB/s]
84%|████████████████████████████████ | 14.6M/17.3M [00:23<00:04, 552kB/s]
85%|████████████████████████████████▏ | 14.7M/17.3M [00:23<00:04, 571kB/s]
85%|████████████████████████████████▍ | 14.8M/17.3M [00:23<00:04, 586kB/s]
86%|████████████████████████████████▋ | 14.9M/17.3M [00:23<00:04, 566kB/s]
86%|████████████████████████████████▊ | 15.0M/17.3M [00:23<00:04, 582kB/s]
87%|█████████████████████████████████ | 15.0M/17.3M [00:23<00:04, 562kB/s]
88%|█████████████████████████████████▎ | 15.1M/17.3M [00:23<00:03, 609kB/s]
88%|█████████████████████████████████▌ | 15.3M/17.3M [00:24<00:03, 644kB/s]
89%|█████████████████████████████████▋ | 15.4M/17.3M [00:24<00:03, 637kB/s]
89%|█████████████████████████████████▉ | 15.5M/17.3M [00:24<00:02, 632kB/s]
90%|██████████████████████████████████▎ | 15.6M/17.3M [00:24<00:02, 722kB/s]
91%|██████████████████████████████████▋ | 15.8M/17.3M [00:24<00:01, 843kB/s]
92%|███████████████████████████████████ | 15.9M/17.3M [00:24<00:01, 900kB/s]
93%|███████████████████████████████████▎ | 16.1M/17.3M [00:25<00:01, 847kB/s]
93%|███████████████████████████████████▍ | 16.1M/17.3M [00:25<00:01, 754kB/s]
94%|███████████████████████████████████▋ | 16.2M/17.3M [00:25<00:01, 707kB/s]
94%|███████████████████████████████████▊ | 16.3M/17.3M [00:25<00:01, 650kB/s]
95%|████████████████████████████████████ | 16.4M/17.3M [00:25<00:01, 610kB/s]
96%|████████████████████████████████████▎ | 16.5M/17.3M [00:25<00:01, 676kB/s]
96%|████████████████████████████████████▌ | 16.6M/17.3M [00:26<00:01, 628kB/s]
97%|████████████████████████████████████▊ | 16.8M/17.3M [00:26<00:00, 749kB/s]
98%|█████████████████████████████████████▏| 16.9M/17.3M [00:26<00:00, 773kB/s]
99%|█████████████████████████████████████▍| 17.1M/17.3M [00:26<00:00, 821kB/s]
99%|█████████████████████████████████████▋| 17.2M/17.3M [00:26<00:00, 761kB/s]
100%|█████████████████████████████████████▉| 17.2M/17.3M [00:26<00:00, 687kB/s]
0%| | 0.00/17.3M [00:00<?, ?B/s]
100%|█████████████████████████████████████| 17.3M/17.3M [00:00<00:00, 95.8GB/s]
downloading PocilloporaDamicornisSkin_GeneratedMat2.png
0%| | 0.00/120k [00:00<?, ?B/s]
12%|████▌ | 14.3k/120k [00:00<00:01, 76.9kB/s]
35%|█████████████▋ | 42.0k/120k [00:00<00:00, 131kB/s]
88%|███████████████████████████████████▏ | 105k/120k [00:00<00:00, 251kB/s]
0%| | 0.00/120k [00:00<?, ?B/s]
100%|████████████████████████████████████████| 120k/120k [00:00<00:00, 543MB/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 52.198 seconds)