31 Main entry point for generating MaterialX definitions using OCIO.
33 parser = argparse.ArgumentParser(description=
"Create Materialx definitions using OCIO.")
34 parser.add_argument(
'-g',
'--graph', dest=
'graph', help=
'Generate a node graph implementations instead of source code.', action=
'store_true')
35 parser.add_argument(
'-o',
'--outputPath', dest=
'outputPath', help=
'File path to output material files to.')
37 opts = parser.parse_args()
38 outputPath = mx.FilePath(
"./data/")
41 if not os.path.exists(opts.outputPath):
42 print(
'Creating output path: ' + opts.outputPath)
43 os.makedirs(opts.outputPath, exist_ok=
True)
44 outputPath = mx.FilePath(opts.outputPath)
47 ver = OCIO.GetVersion()
48 ocioVersion = ver.split(
'.')
49 if len(ocioVersion) < 2:
50 print(
'OCIO version is not in the expected format.')
52 if int(ocioVersion[0]) < 2
or int(ocioVersion[1]) < 2:
53 print(
'OCIO version 2.2 or greater is required.')
56 print(
'OCIO version:', ver)
57 print(
'MaterialX version:', mx.getVersionString())
61 generator = mxocio.OCIOMaterialaxGenerator()
62 configs, aconfig = generator.getBuiltinConfigs()
63 md = generator.printConfigs(configs)
65 if not os.path.exists(outputPath.asString()):
66 os.makedirs(outputPath.asString())
67 configInfoFile = outputPath / mx.FilePath(
'OCIO_configurations.md')
68 print(
'Write out OCIO configurations to: ' + configInfoFile.asString())
69 f = open(configInfoFile.asString(),
'w')
72 sourceColorSpace =
"acescg"
73 targetColorSpace =
'lin_rec709'
77 IN_PIXEL_STRING =
'in'
82 config = configs[c][0]
83 for colorSpace
in config.getColorSpaces():
84 aliases = colorSpace.getAliases()
91 trySource = colorSpace.getName()
93 sourceColorSpace = trySource
96 if sourceColorSpace == targetColorSpace:
102 definitionDoc = mx.createDocument()
103 implDoc = mx.createDocument()
105 definition, transformName, code, extension, target = generator.generateOCIO(aconfig, definitionDoc, implDoc, sourceColorSpace, targetColorSpace,
'color4')
109 valid, errors = definitionDoc.validate()
111 print(
'Generated MaterialX definition document is not valid:')
114 print(
'--- Generated shader code for source color space:', trySource,
'---')
116 filename = outputPath / mx.FilePath(definition.getName() +
'.' +
'mtlx')
117 print(
'Write MaterialX definition file:', filename.asString())
118 mx.writeToXmlFile(definitionDoc, filename)
121 implFileName = outputPath / mx.FilePath(
'IM_' + transformName +
'.' +
'mtlx')
122 print(
'Write MaterialX implementation file:', implFileName.asString())
123 result = mx.writeToXmlFile(implDoc, implFileName)
125 generator.writeShaderCode(outputPath, code, transformName, extension, target)
128 outputType =
'color3'
130 graphDoc = generator.generateOCIOGraph(aconfig, sourceColorSpace, targetColorSpace, outputType)
132 valid, errors = graphDoc.validate()
134 print(
'Generated MaterialX definition document is not valid:')
137 print(
'Generated <nodegraph> for source color space:', trySource,
'---')
138 sourceColorSpace = generator.createValidName(sourceColorSpace)
139 targetColorSpace = generator.createValidName(targetColorSpace)
141 transformName = generator.createTransformName(sourceColorSpace, targetColorSpace, outputType,
'mxgraph_')
142 filename = outputPath / mx.FilePath(transformName +
'.' +
'mtlx')
143 print(
'Write MaterialX node graph definition file:', filename.asString())
144 mx.writeToXmlFile(graphDoc, filename)
147 print(
'Could not find suitable color space name to use: ', colorSpace.getName())