20 parser = argparse.ArgumentParser(description=
"Conveter from MaterialX to glTF Texture Procedurals.")
21 parser.add_argument(dest=
"input", help=
"Input file/folder.")
22 parser.add_argument(
"-o",
"--output", help=
"Output file/folder. The default is current folder.")
23 parser.add_argument(
'-s',
'--schema', default=
None, help=
'Schema file to use for validation. The default is None.')
24 opts = parser.parse_args()
26 logger = lg.getLogger(
'gltfCmd')
27 lg.basicConfig(level=lg.INFO)
29 if not MxGLTFPTUtil.have_version(1, 39, 1):
30 logger.error(
"MaterialX version 1.39.1 or higher is required.")
35 if os.path.isdir(opts.input):
36 file_list = MxGLTFPT.get_files(opts.input, extension)
38 extension = os.path.splitext(opts.input)[1]
39 if extension
not in [
'.mtlx']:
40 logger.error(f
'Invalid file extension: {extension}. Extension must be .mtlx.')
42 file_list.append(opts.input)
45 logger.warning(f
'No MaterialX files found in: {opts.input}')
48 stdlib, libFiles = MxGLTFPTUtil.load_standard_libraries()
50 converter = MxGLTFPT.glTFMaterialXConverter()
55 output_folder = opts.output
56 if not os.path.exists(output_folder):
57 os.makedirs(output_folder)
61 schema_file = opts.schema
62 if schema_file
and os.path.exists(schema_file):
63 with open(schema_file,
'r')
as f:
65 logger.info(f
'Loaded schema file: {schema_file}')
67 for input_file
in file_list:
68 logger.info(f
'Processing: {input_file}')
69 mxdoc = MxGLTFPTUtil.create_working_document([stdlib])
70 MxGLTFPTUtil.read_materialX_document(mxdoc, input_file)
71 valid, errors = MxGLTFPTUtil.validate_document(mxdoc)
74 logger.warning(f
'MaterialX document: {input_file} is invalid. Erors: {errors}')
78 json_string, status = converter.materialX_to_glTF(mxdoc)
81 json_data = json.loads(json_string)
83 json_validate(instance=json_data, schema=schema)
84 logger.info(
'- JSON validation successful')
85 except jsonschema.exceptions.ValidationError
as e:
86 logger.info(
'- JSON validation errors, ' + e)
89 outputFile = os.path.join(output_folder, os.path.basename(input_file).replace(
'.mtlx',
'.gltf'))
90 with open(outputFile,
'w')
as f:
91 logger.info(f
'Writing glTF: {outputFile}')
95 logger.warning(f
'Error: {status}')