MaterialX / glTF Texture Procedurals  0.0.1
Utilities for interoperability between MaterialX and glTF Texture Procedurals
Loading...
Searching...
No Matches
gltf_to_materialx.py
Go to the documentation of this file.
1'''
2@file gltf_to_materialx.py
3Command line utility to convert from glTF Texture Procedurals documents to MaterialX documents".
4'''
5import os, argparse
6import json
7import MaterialX as mx
8import logging as lg
9import converter as MxGLTFPT
10import utilities as MxGLTFPTUtil
11
12def main():
13 parser = argparse.ArgumentParser(description="Converter from glTF Texture Procedurals to MaterialX")
14 parser.add_argument(dest="input", help="Input file/folder.")
15 parser.add_argument("-o", "--output", help="Output file/folder. Default is current folder.")
16 parser.add_argument("-a", "--addAssetInfo", type=bool, default=False, help="Add glTF asset information to generated MaterialX files.")
17 opts = parser.parse_args()
18
19 logger = lg.getLogger('gltfCmd')
20 lg.basicConfig(level=lg.INFO)
21
22 fileList = []
23 extension = '.gltf'
24 if os.path.isdir(opts.input):
25 fileList = MxGLTFPTUtil.getFiles(opts.input, extension)
26 else:
27 extension = os.path.splitext(opts.input)[1]
28 if extension not in ['.gltf']:
29 logger.warning(f'Invalid file extension: {extension}. Extension must be .gltf.')
30 return
31 fileList.append(opts.input)
32
33 if not fileList:
34 logger.warning(f'No glTF files found: {opts.input}')
35 return
36
37 stdlib, libFiles = MxGLTFPTUtil.load_standard_libraries()
38
39 converter = MxGLTFPT.glTFMaterialXConverter()
40
41 # Check for output folder option
42 outputFolder = '.'
43 if opts.output:
44 outputFolder = opts.output
45 if not os.path.exists(outputFolder):
46 os.makedirs(outputFolder)
47
48 logger.info(f'Add glTF asset information: {opts.addAssetInfo}')
49 converter.set_add_asset_info(opts.addAssetInfo)
50
51 for inputFile in fileList:
52 logger.info(f'Processing: {inputFile}')
53 jsonString = MxGLTFPTUtil.load_json_file(inputFile)
54 if jsonString:
55 mtlxdoc = converter.gltf_string_to_materialX(jsonString, stdlib)
56 # Validate
57 valid, status = MxGLTFPTUtil.validate_document(mtlxdoc)
58 mtlxString = MxGLTFPTUtil.materialX_doc_to_string(mtlxdoc)
59
60 if not valid:
61 logger.warning(f'Created invalid MaterialX document. Error: {status}')
62 outputFileMtlx = inputFile.replace('.gltf', '_fromgltf.mtlx')
63 with open(outputFileMtlx, 'w') as f:
64 logger.info(f'Writing re-converted mtlx: {outputFileMtlx}')
65 f.write(mtlxString)
66 else:
67 logger.warning(f'Unable to load glTF file: {inputFile}')
68
69if __name__ == '__main__':
70 main()