Main entry point for generating MaterialX definitions using OCIO.
29def main():
30 """
31 Main entry point for generating MaterialX definitions using OCIO.
32 """
33 parser = argparse.ArgumentParser(description="Create Materialx definitions using OCIO.")
34 parser.add_argument('--graph', dest='graph', help='Generate a node graph implementations instead of source code.', action='store_true')
35 parser.add_argument('--outputPath', dest='outputPath', help='File path to output material files to.')
36
37 opts = parser.parse_args()
38 outputPath = mx.FilePath("./data/")
39 if opts.outputPath:
40 outputPath = mx.FilePath(opts.outputPath)
41
42
43 ver = OCIO.GetVersion()
44 ocioVersion = ver.split('.')
45 if len(ocioVersion) < 2:
46 print('OCIO version is not in the expected format.')
47 return
48 if int(ocioVersion[0]) < 2 or int(ocioVersion[1]) < 2:
49 print('OCIO version 2.2 or greater is required.')
50 return
51
52 print('OCIO version:', ver)
53 print('MaterialX version:', mx.getVersionString())
54
55
56
57 generator = mxocio.OCIOMaterialaxGenerator()
58 configs, aconfig = generator.getBuiltinConfigs()
59 md = generator.printConfigs(configs)
60
61 if not os.path.exists(outputPath.asString()):
62 os.makedirs(outputPath.asString())
63 configInfoFile = outputPath / mx.FilePath('OCIO_configurations.md')
64 print('Write out OCIO configurations to: ' + configInfoFile.asString())
65 f = open(configInfoFile.asString(), 'w')
66 f.write(md)
67
68 sourceColorSpace = "acescg"
69 targetColorSpace = 'lin_rec709'
70
71
72
73 IN_PIXEL_STRING = 'in'
74
75
76
77 for c in configs:
78 config = configs[c][0]
79 for colorSpace in config.getColorSpaces():
80 aliases = colorSpace.getAliases()
81 trySource = ''
82 for alias in aliases:
83
84 if ' ' not in alias:
85 trySource = alias
86 if not trySource:
87 trySource = colorSpace.getName()
88 if trySource:
89 sourceColorSpace = trySource
90
91
92 if sourceColorSpace == targetColorSpace:
93 continue
94
95 print('--- Generate transform for source color space:', trySource, '---')
96
97
98 if not opts.graph:
99 definitionDoc = mx.createDocument()
100 implDoc = mx.createDocument()
101
102 definition, transformName, code, extension, target = generator.generateOCIO(aconfig, definitionDoc, implDoc, sourceColorSpace, targetColorSpace, 'color4')
103
104
105 if definition:
106
107 filename = outputPath / mx.FilePath(definition.getName() + '.' + 'mtlx')
108 print('Write MaterialX definition file:', filename.asString())
109 mx.writeToXmlFile(definitionDoc, filename)
110
111
112 implFileName = outputPath / mx.FilePath('IM_' + transformName + '.' + 'mtlx')
113 print('Write MaterialX implementation file:', implFileName.asString())
114 result = mx.writeToXmlFile(implDoc, implFileName)
115
116 generator.writeShaderCode(outputPath, code, transformName, extension, target)
117 else:
118
119 outputType = 'color3'
120 graphDoc = generator.generateOCIOGraph(aconfig, sourceColorSpace, targetColorSpace, outputType)
121 if graphDoc:
122 transformName = generator.createTransformName(sourceColorSpace, targetColorSpace, outputType, 'mxgraph_')
123 filename = outputPath / mx.FilePath(transformName + '.' + 'mtlx')
124 print('Write MaterialX node graph definition file:', filename.asString())
125 mx.writeToXmlFile(graphDoc, filename)
126
127 else:
128 print('Could not find suitable color space name to use: ', colorSpace.getName())
129
130