5import os, argparse, sys, logging
11 Utility to download ambientCG MaterialX materials
13 logger = logging.getLogger(
'ACG_CMD')
14 logging.basicConfig(level=logging.INFO)
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.')
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')
27 parser.add_argument(
'--materialNames', type=bool, default=
None,
28 help=
'Return material names. Default is False')
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')
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.')
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')
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()
57 loader = acg.AmbientCGLoader(mx,
None)
62 outputFolder = opts.output
63 if not os.path.exists(outputFolder):
65 logger.info(f
'Creating output folder: {outputFolder}')
66 os.makedirs(outputFolder)
69 loadMaterials = opts.loadMaterials
70 downloadMaterials = opts.downloadMaterials
or opts.saveMaterials
71 if loadMaterials
or downloadMaterials:
73 if len(loadMaterials) > 0:
74 materialsList = loader.loadMaterialsList(loadMaterials)
75 elif downloadMaterials:
76 materialsList = loader.downloadMaterialsList()
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)
84 if opts.materialNames:
85 materialNames = loader.getMaterialNames()
86 print(f
'{materialNames}')
89 materialName = opts.downloadMaterial
90 if len(materialName) > 0:
91 result = loader.findMaterial(materialName)
93 fileName = loader.downloadMaterialAsset(materialName, opts.downloadmageFormat, opts.downloadResolution)
95 loader.writeDownloadedMaterialToFile(outputFolder)
97 logger.info(f
'Material not found: {materialName}')
100 databaseFileName = opts.saveDatabase
101 haveDatabaseFileName = len(databaseFileName) > 0
102 downloadDatabase = opts.downloadDatabase
and haveDatabaseFileName
104 loader.downloadAssetDatabase()
105 if haveDatabaseFileName:
106 logger.info(f
'Download database: {databaseFileName}')
107 path = os.path.join(outputFolder, databaseFileName)
108 loader.writeDatabaseToFile(path)
110 logger.info(
'No database download requested or no output file name specified. Skipping database download.')