MaterialXMaterials 1.39.5
Utilities for retrieving materials from remote servers
Loading...
Searching...
No Matches
ambientCGLoaderCmd.py
1#/usr/bin/env python3
2'''
3@brief Command to download ambientCG MaterialX materials'''
4
5import os, argparse, sys, logging
6import ambientCGLoader as acg
7import MaterialX as mx
8
10 '''
11 Utility to download ambientCG MaterialX materials
12 '''
13 logger = logging.getLogger('ACG_CMD')
14 logging.basicConfig(level=logging.INFO)
15
16 parser = argparse.ArgumentParser(description='Get materials information and material package from ambientCG.'
17 ' By default the materials will be downloaded and a named and index material'
18 ' package will be extracted.')
19
20 parser.add_argument('--loadMaterials', type=str, default='',
21 help='Load JSON file containing list of materials that can be downloaded.')
22 parser.add_argument('--downloadMaterials', type=bool, default=None,
23 help='Download JSON file containing list of materials that can be downloaded.'
24 ' Has no effect if --loadMaterials is set')
25
26 # Material names query
27 parser.add_argument('--materialNames', type=bool, default=None,
28 help='Return material names. Default is False')
29
30 # Save download information for all materials or a specific one
31 # based on asset identifier
32 parser.add_argument('-sms', '--saveMaterials', type=bool, default=None,
33 help='Save material lists. Default is None.'
34 ' Has no effect if --loadMaterials is set')
35 parser.add_argument('-sm', '--saveMaterial', type=str, default='',
36 help='Save material download information in JSON format')
37
38 # Asset download options
39 parser.add_argument('-m', '--downloadMaterial', type=str, default='',
40 help='Download zip package for a materials which match a given string. Default is a sample material')
41 parser.add_argument('-f', '--downloadmageFormat', type=str, default='PNG',
42 help='Download image format. Valid values include PNG and JPEG. Default is PNG')
43 parser.add_argument('-r', '--downloadResolution', type=str, default='1',
44 help='Download image resulution. Valid values include 1,2,4,8 to indicate 1K to 8K.')
45
46 # Download full database iformation for material assets
47 parser.add_argument('-dd', '--downloadDatabase', type=bool, default=None,
48 help='Download information database')
49 parser.add_argument('-sd', '--saveDatabase', type=str, default='ambientCG_database.json',
50 help='Save information database')
51
52 # Output options
53 parser.add_argument('--output', type=str, default='',
54 help='Output folder for data files. Default location is the current execution folder.')
55 opts = parser.parse_args()
56
57 loader = acg.AmbientCGLoader(mx, None)
58
59 # Set output folder. Default is current folder
60 outputFolder = '.'
61 if opts.output:
62 outputFolder = opts.output
63 if not os.path.exists(outputFolder):
64 # Create output folder if it doesn't exist
65 logger.info(f'Creating output folder: {outputFolder}')
66 os.makedirs(outputFolder)
67
68 # Get materials list which contains download information
69 loadMaterials = opts.loadMaterials
70 downloadMaterials = opts.downloadMaterials or opts.saveMaterials
71 if loadMaterials or downloadMaterials:
72 materialsList = None
73 if len(loadMaterials) > 0:
74 materialsList = loader.loadMaterialsList(loadMaterials)
75 elif downloadMaterials:
76 materialsList = loader.downloadMaterialsList()
77 # Save materials list if specified. Only do so for download case
78 if opts.saveMaterials:
79 output_path = os.path.join(outputFolder,'ambientCG_materialsList.json')
80 logger.info(f'Saving materials list to {output_path}')
81 loader.writeMaterialList(materialsList, output_path)
82
83 # Check if the list of materials is asked to be returned
84 if opts.materialNames:
85 materialNames = loader.getMaterialNames()
86 print(f'{materialNames}')
87
88 # Check if a material asset is specified to downloaded
89 materialName = opts.downloadMaterial
90 if len(materialName) > 0:
91 result = loader.findMaterial(materialName)
92 if result:
93 fileName = loader.downloadMaterialAsset(materialName, opts.downloadmageFormat, opts.downloadResolution)
94 if len(fileName) > 0:
95 loader.writeDownloadedMaterialToFile(outputFolder)
96 else:
97 logger.info(f'Material not found: {materialName}')
98
99 # Check if material database is specified for download
100 databaseFileName = opts.saveDatabase
101 haveDatabaseFileName = len(databaseFileName) > 0
102 downloadDatabase = opts.downloadDatabase and haveDatabaseFileName
103 if downloadDatabase:
104 loader.downloadAssetDatabase()
105 if haveDatabaseFileName:
106 logger.info(f'Download database: {databaseFileName}')
107 path = os.path.join(outputFolder, databaseFileName)
108 loader.writeDatabaseToFile(path)
109 else:
110 logger.info('No database download requested or no output file name specified. Skipping database download.')
111
112if __name__ == '__main__':
ambientCgLoaderCmd()
Utility to download ambientCG MaterialX materials.