MaterialXMaterials 1.39.5
Utilities for retrieving materials from remote servers
Loading...
Searching...
No Matches
materialxMaterials.GPUOpenLoaderCmd Namespace Reference

Command to download GPUOpen MaterialX materials. More...

Functions

 GPUOpenLoaderCmd ()
 Command to download GPUOpen materials.

Detailed Description

Command to download GPUOpen MaterialX materials.

Function Documentation

◆ GPUOpenLoaderCmd()

materialxMaterials.GPUOpenLoaderCmd.GPUOpenLoaderCmd ( )

Command to download GPUOpen materials.

Definition at line 8 of file GPUOpenLoaderCmd.py.

8def GPUOpenLoaderCmd():
9 '''
10 @brief Command to download GPUOpen materials
11 '''
12 logger = logging.getLogger('GPUO_CMD')
13 logging.basicConfig(level=logging.INFO)
14
15 parser = argparse.ArgumentParser(description='Get materials information and material package from AMD GPUOpen.'
16 ' By default the materials will be downloaded and a named and index material'
17 ' package will be extracted.')
18 parser.add_argument('--materialNames', type=bool, default=None,
19 help='Return material names. Default is False')
20 parser.add_argument('--loadFromPackage', type=bool, default=None,
21 help='Load materials from a package. Default is True. If false, materials will be downloaded.')
22 parser.add_argument('--loadMaterials', type=str, default='',
23 help='Folder to load materials from. All JSON files with post-fix _#.json are loaded. Default is false'
24 ' meaning to download materials')
25 parser.add_argument('--saveMaterials', type=bool, default=None,
26 help='Save material lists. Default is None.'
27 ' Has no effect if --loadMaterials is set')
28 parser.add_argument('--extractExpression', type=str, default='Oliana Blue Painted Wood',
29 help='Extract out a package for a materials which match a given expression. Default is a sample material'
30 )
31 parser.add_argument('--extractIndices', type=str, default='',
32 help='Extract out a package for a materials which match a given material list, material index, and package index.'
33 ' Default is empty. Format is: <materialList>,<materialIndex>,<materialPackage>')
34 parser.add_argument('--output', type=str, default='',
35 help='Output folder for data files. Default location is GPUOpenMaterialX.')
36 parser.add_argument('--unzip', type=bool, default=None,
37 help='Unzip the downloaded package. Default is None.')
38 opts = parser.parse_args()
39
40 loader = gpuo.GPUOpenMaterialLoader()
41 materials = None
42
43 if opts.loadFromPackage:
44 logger.info(f'> Load materials from package')
45 materials = loader.readPackageFiles()
46 else:
47 if opts.loadMaterials:
48 filePaths = loader.getMaterialFileNames(opts.loadMaterials)
49 if len(filePaths) == 0:
50 logger.error(f'Error: No files found in folder: {opts.loadMaterials}')
51 sys.exit(1)
52
53 logger.info(f'> Load materials from files: {filePaths}')
54 materials = loader.readMaterialFiles(filePaths)
55 else:
56 # Download materials
57 logger.info(f'> Download materials from GPUOpen')
58 materials = loader.getMaterials()
59 # Download renders
60 renders = loader.getRenders(force=True)
61 loader.getMaterialPreviews()
62
63 outputFolder = 'GPUOpenMaterialX'
64 if opts.output:
65 if not os.path.exists(opts.output):
66 logger.error(f'Error: Output directory does not exist: {opts.output}')
67 sys.exit(1)
68 else:
69 outputFolder = opts.output
70
71 materialNames = loader.getMaterialNames()
72 materialCount = len(materialNames)
73 previewCount = len(loader.getMaterialPreviews())
74 rendersCount = len(loader.getRenders(force=False)['renders'])
75 logger.info(f'Have {materialCount} materials and {previewCount} previews, and {rendersCount} renders.')
76 if opts.saveMaterials:
77 loader.writeMaterialFiles(outputFolder, 'GPUOpenMaterialX')
78 loader.writeRenderFiles(outputFolder, 'GPUOpenMaterialX_Renders')
79 loader.writeMaterialPreviewFile(outputFolder, 'GPUOpenMaterialX_Previews')
80
81 # Create a test expression
82 searchExpr = ''
83 if opts.extractExpression:
84 searchExpr = opts.extractExpression
85 if len(searchExpr) == 0:
86 logger.info(f'> No search expression given.')
87 else:
88 dataItems = loader.downloadPackageByExpression(searchExpr, 0)
89 toMB = 1.0 / (1024.0 * 1024.0)
90 unzipFile = opts.unzip if opts.unzip else False
91 for dataItem in dataItems:
92 data = dataItem[0]
93 title = dataItem[1]
94 url = dataItem[2]
95 logger.info(f'Write package data to file: {title}, Data size: {len(data)*toMB:.2f} MB')
96 loader.writePackageDataToFile(data, outputFolder, title, url, unzipFile=unzipFile)
97
98 extractIndices = opts.extractIndices
99 if len(extractIndices) > 0:
100 indices = extractIndices.split(',')
101 if len(indices) != 3:
102 logger.error(f'Error: Invalid indices given: {extractIndices}')
103 sys.exit(1)
104
105 materialList = int(indices[0])
106 materialIndex = int(indices[1])
107 materialPackage = int(indices[2])
108 [data, title, url] = loader.downloadPackage(materialList, materialIndex, materialPackage)
109 logger.info(f'> Download material: {title} List: {materialList}. Index: {materialIndex}. Package: {materialPackage}. Preview URL:{url}')
110 if data:
111 loader.writePackageDataToFile(data, outputFolder, title, url)
112
113 if opts.materialNames:
114 materialNamesFile = os.path.join(outputFolder, 'GPUOpenMaterialX_Names.json')
115 logger.info(f'> Save materials names to file: {materialNamesFile}')
116 sorted = True
117 loader.writeMaterialNamesToFile(materialNamesFile, sorted)
118