1#usda 1.0
2(
3    colorManagementSystem = "ocio"
4    customLayerData = {
5        string colorSpace = "acescg"
6    }
7)
8
9def "MaterialX"
10{
11    def "Materials"
12    {
13        def Material "Msimple" (
14            prepend variantSets = "vs_simple_srf"
15        )
16        {
17            color3f inputs:diffColor
18            color3f inputs:otherColor1
19            color3f inputs:otherColor2
20            color3f inputs:otherColor3
21            color3f inputs:specColor
22            float inputs:specRoughness
23            token outputs:mtlx:surface.connect = </MaterialX/Materials/Msimple/shader1.outputs:surface>
24            token outputs:mtlx:volume.connect = </MaterialX/Materials/Msimple/shader2.outputs:volume>
25
26            def Shader "shader1" (
27                prepend references = </MaterialX/Shaders/shader1>
28            )
29            {
30                color3f inputs:diffColor.connect = </MaterialX/Materials/Msimple.inputs:diffColor>
31                color3f inputs:otherColor1.connect = </MaterialX/Materials/Msimple.inputs:otherColor1>
32                color3f inputs:otherColor2.connect = </MaterialX/Materials/Msimple.inputs:otherColor2>
33                color3f inputs:otherColor3.connect = </MaterialX/Materials/Msimple.inputs:otherColor3>
34                color3f inputs:specColor.connect = </MaterialX/Materials/Msimple.inputs:specColor>
35                float inputs:specRoughness.connect = </MaterialX/Materials/Msimple.inputs:specRoughness>
36            }
37
38            def Shader "shader2" (
39                prepend references = </MaterialX/Shaders/shader2>
40            )
41            {
42                color3f inputs:diffColor.connect = </MaterialX/Materials/Msimple.inputs:diffColor>
43                color3f inputs:specColor.connect = </MaterialX/Materials/Msimple.inputs:specColor>
44                float inputs:specRoughness.connect = </MaterialX/Materials/Msimple.inputs:specRoughness>
45            }
46            variantSet "vs_simple_srf" = {
47                "metal1" {
48                    color3f inputs:diffColor = (0.001, 0.001, 0.001)
49                    color3f inputs:specColor = (0.671, 0.676, 0.667)
50                    float inputs:specRoughness = 0.005
51
52                }
53                "metal2" {
54                    color3f inputs:diffColor = (0.049, 0.043, 0.033)
55                    color3f inputs:specColor = (0.115, 0.091, 0.064)
56                    float inputs:specRoughness = 0.35
57
58                }
59                "plastic1" {
60                    color3f inputs:diffColor = (0.134, 0.13, 0.125)
61                    color3f inputs:otherColor4 = (0.1, 0.1, 0.1)
62                    color3f inputs:otherColor5 = (0.1, 0.1, 0.1)
63                    color3f inputs:otherColor6 = (0.1, 0.1, 0.1) (
64                        colorSpace = "lin_rec709"
65                    )
66                    color3f inputs:specColor = (0.114, 0.114, 0.114)
67                    float inputs:specRoughness = 0.38
68
69                }
70                "plastic2" {
71                    color3f inputs:diffColor = (0.17, 0.26, 0.23)
72                    float inputs:specRoughness = 0.24
73
74                }
75            }
76        }
77
78        def Material "Msimple2" (
79            prepend variantSets = "vs_simple_srf"
80        )
81        {
82            color3f inputs:diffColor
83            color3f inputs:otherColor1
84            color3f inputs:otherColor2
85            color3f inputs:otherColor3
86            color3f inputs:specColor
87            float inputs:specRoughness
88            token outputs:mtlx:surface.connect = </MaterialX/Materials/Msimple2/shader1.outputs:surface>
89
90            def Shader "shader1" (
91                prepend references = </MaterialX/Shaders/shader1>
92            )
93            {
94                color3f inputs:diffColor.connect = </MaterialX/Materials/Msimple2.inputs:diffColor>
95                color3f inputs:otherColor1.connect = </MaterialX/Materials/Msimple2.inputs:otherColor1>
96                color3f inputs:otherColor2.connect = </MaterialX/Materials/Msimple2.inputs:otherColor2>
97                color3f inputs:otherColor3.connect = </MaterialX/Materials/Msimple2.inputs:otherColor3>
98                color3f inputs:specColor.connect = </MaterialX/Materials/Msimple2.inputs:specColor>
99                float inputs:specRoughness.connect = </MaterialX/Materials/Msimple2.inputs:specRoughness>
100            }
101            variantSet "vs_simple_srf" = {
102                "plastic2" {
103                    color3f inputs:diffColor = (0.17, 0.26, 0.23)
104                    float inputs:specRoughness = 0.24
105
106                }
107            }
108        }
109
110        def Material "mheadlight"
111        {
112            token inputs:custom (
113                renderType = "customtype"
114            )
115            asset inputs:emissionmap
116            float inputs:gain = 500 (
117                doc = "This is a bound param"
118            )
119            token outputs:light.connect = </MaterialX/Materials/mheadlight/nd_headlight1.outputs:light>
120
121            def Shader "nd_headlight1" (
122                prepend references = </MaterialX/Shaders/nd_headlight1>
123            )
124            {
125                token inputs:custom (
126                    renderType = "customtype"
127                )
128                token inputs:custom.connect = </MaterialX/Materials/mheadlight.inputs:custom>
129                asset inputs:emissionmap.connect = </MaterialX/Materials/mheadlight.inputs:emissionmap>
130                float inputs:gain.connect = </MaterialX/Materials/mheadlight.inputs:gain>
131            }
132        }
133
134        def Material "mheadlight1"
135        {
136            token inputs:custom (
137                renderType = "customtype"
138            )
139            float inputs:gain = 100
140            float inputs:gain.timeSamples = {
141                11: 110,
142                12: 220,
143                13: 300,
144                14: 480,
145                15: 500,
146            }
147            token outputs:light.connect = </MaterialX/Materials/mheadlight1/nd_headlight0.outputs:light>
148            string primvars:mumble = "shout"
149
150            def Shader "nd_headlight0" (
151                prepend references = </MaterialX/Shaders/nd_headlight0>
152            )
153            {
154                token inputs:custom (
155                    renderType = "customtype"
156                )
157                token inputs:custom.connect = </MaterialX/Materials/mheadlight1.inputs:custom>
158                float inputs:gain.connect = </MaterialX/Materials/mheadlight1.inputs:gain>
159            }
160        }
161
162        def Material "mheadlight2"
163        {
164            token inputs:custom (
165                renderType = "customtype"
166            )
167            asset inputs:emissionmap
168            float inputs:gain
169            token outputs:light.connect = </MaterialX/Materials/mheadlight2/nd_headlight1.outputs:light>
170
171            def Shader "nd_headlight1" (
172                prepend references = </MaterialX/Shaders/nd_headlight1>
173            )
174            {
175                token inputs:custom (
176                    renderType = "customtype"
177                )
178                token inputs:custom.connect = </MaterialX/Materials/mheadlight2.inputs:custom>
179                asset inputs:emissionmap.connect = </MaterialX/Materials/mheadlight2.inputs:emissionmap>
180                float inputs:gain.connect = </MaterialX/Materials/mheadlight2.inputs:gain>
181            }
182        }
183
184        def Material "m_vn"
185        {
186            token outputs:mtlx:surface.connect = </MaterialX/Materials/m_vn/nd_vn_2.outputs:surface>
187
188            def Shader "nd_vn_2" (
189                prepend references = </MaterialX/Shaders/nd_vn_2>
190            )
191            {
192            }
193        }
194
195        def Material "m_vn_1_0"
196        {
197            token outputs:mtlx:surface.connect = </MaterialX/Materials/m_vn_1_0/nd_vn_1_0.outputs:surface>
198
199            def Shader "nd_vn_1_0" (
200                prepend references = </MaterialX/Shaders/nd_vn_1_0>
201            )
202            {
203            }
204        }
205
206        def Material "m_vn_nd_1_0"
207        {
208            token outputs:mtlx:surface.connect = </MaterialX/Materials/m_vn_nd_1_0/nd_vn_1_0.outputs:surface>
209
210            def Shader "nd_vn_1_0" (
211                prepend references = </MaterialX/Shaders/nd_vn_1_0>
212            )
213            {
214            }
215        }
216
217        def Material "m_vn_2_0"
218        {
219            token outputs:mtlx:surface.connect = </MaterialX/Materials/m_vn_2_0/nd_vn_2.outputs:surface>
220
221            def Shader "nd_vn_2" (
222                prepend references = </MaterialX/Shaders/nd_vn_2>
223            )
224            {
225            }
226        }
227
228        def Material "m_vn_2_1"
229        {
230            token outputs:mtlx:surface.connect = </MaterialX/Materials/m_vn_2_1/nd_vn_2_1.outputs:surface>
231
232            def Shader "nd_vn_2_1" (
233                prepend references = </MaterialX/Shaders/nd_vn_2_1>
234            )
235            {
236            }
237        }
238
239        def Material "m_vn_nd_2x"
240        {
241            token outputs:mtlx:surface.connect = </MaterialX/Materials/m_vn_nd_2x/nd_vn_2.outputs:surface>
242
243            def Shader "nd_vn_2" (
244                prepend references = </MaterialX/Shaders/nd_vn_2>
245            )
246            {
247            }
248        }
249    }
250
251    def "Shaders"
252    {
253        def Shader "shader1"
254        {
255            uniform token info:id = "shader1"
256            token outputs:surface
257        }
258
259        def Shader "shader2"
260        {
261            uniform token info:id = "shader2"
262            token outputs:volume
263        }
264
265        def Shader "nd_headlight1"
266        {
267            uniform token info:id = "nd_headlight1"
268            token outputs:light
269        }
270
271        def Shader "nd_headlight0"
272        {
273            uniform token info:id = "nd_headlight0"
274            token outputs:light
275        }
276
277        def Shader "nd_vn_2"
278        {
279            uniform token info:id = "nd_vn_2"
280            token outputs:surface
281        }
282
283        def Shader "nd_vn_1_0"
284        {
285            uniform token info:id = "nd_vn_1_0"
286            token outputs:surface
287        }
288
289        def Shader "nd_vn_2_1"
290        {
291            uniform token info:id = "nd_vn_2_1"
292            token outputs:surface
293        }
294    }
295
296    def "Collections" (
297        prepend apiSchemas = ["CollectionAPI:c_plastic", "CollectionAPI:c_metal", "CollectionAPI:c_lamphouse", "CollectionAPI:c_setgeom", "CollectionAPI:geom_1", "CollectionAPI:geom_2"]
298    )
299    {
300        prepend rel collection:c_lamphouse:includes = </MaterialX/Collections.collection:c_metal>
301        rel collection:c_metal:includes (
302            doc = "This is a collection"
303        )
304        prepend rel collection:c_metal:includes = [
305            </MaterialX/Collections/X/Y/a/g3>,
306            </MaterialX/Collections/X/Y/a/g4>,
307        ]
308        prepend rel collection:c_plastic:excludes = [
309            </MaterialX/Collections/X/Y/a/g3>,
310            </MaterialX/Collections/X/Y/a/g5>,
311        ]
312        prepend rel collection:c_plastic:includes = [
313            </MaterialX/Collections/X/Y/a/g1>,
314            </MaterialX/Collections/X/Y/a/g2>,
315            </MaterialX/Collections/X/Y/a/g5>,
316        ]
317        rel collection:c_setgeom:includes
318        prepend rel collection:geom_1:includes = </MaterialX/Collections/X/Y/a/b/headlight>
319        prepend rel collection:geom_2:includes = [
320            </MaterialX/Collections/U/V/a/g3>,
321            </MaterialX/Collections/U/V/a/g5>,
322            </MaterialX/Collections/U/V/a/g6>,
323        ]
324    }
325
326    def "Looks"
327    {
328        def "lookA" (
329            prepend apiSchemas = ["MaterialBindingAPI"]
330            doc = "Look A"
331            prepend references = </MaterialX/Collections>
332        )
333        {
334            reorder properties = ["material:binding:collection:ma1", "material:binding:collection:ma2", "material:binding:collection:ma3"]
335            rel material:binding:collection:ma1 = [
336                </MaterialX/Looks/lookA.collection:c_plastic>,
337                </MaterialX/Looks/lookA/Materials/ma1>,
338            ]
339            rel material:binding:collection:ma2 = [
340                </MaterialX/Looks/lookA.collection:c_metal>,
341                </MaterialX/Looks/lookA/Materials/ma2>,
342            ]
343            rel material:binding:collection:ma3 = [
344                </MaterialX/Looks/lookA.collection:geom_1>,
345                </MaterialX/Looks/lookA/Materials/ma3>,
346            ]
347
348            def "Materials"
349            {
350                def "ma1" (
351                    doc = "Plastic 1"
352                    prepend references = </MaterialX/Materials/Msimple>
353                    variants = {
354                        string vs_simple_srf = "plastic1"
355                    }
356                )
357                {
358                }
359
360                def "ma2" (
361                    doc = "Metal 1"
362                    prepend references = </MaterialX/Materials/Msimple>
363                    variants = {
364                        string vs_simple_srf = "metal1"
365                    }
366                )
367                {
368                }
369
370                def "ma3" (
371                    prepend references = </MaterialX/Materials/mheadlight>
372                )
373                {
374                }
375            }
376        }
377
378        def "lookB" (
379            prepend apiSchemas = ["MaterialBindingAPI"]
380            doc = "Look B"
381            prepend references = </MaterialX/Collections>
382        )
383        {
384            reorder properties = ["material:binding:collection:ma4", "material:binding:collection:ma5"]
385            rel material:binding:collection:ma4 = [
386                </MaterialX/Looks/lookB.collection:geom_2>,
387                </MaterialX/Looks/lookB/Materials/ma4>,
388            ]
389            rel material:binding:collection:ma5 = [
390                </MaterialX/Looks/lookB.collection:c_metal>,
391                </MaterialX/Looks/lookB/Materials/ma5>,
392            ]
393
394            def "Materials"
395            {
396                def "ma4" (
397                    prepend references = </MaterialX/Materials/Msimple>
398                    variants = {
399                        string vs_simple_srf = "plastic2"
400                    }
401                )
402                {
403                }
404
405                def "ma5" (
406                    prepend references = </MaterialX/Materials/Msimple>
407                    variants = {
408                        string vs_simple_srf = "metal2"
409                    }
410                )
411                {
412                }
413            }
414        }
415
416        def "lookC" (
417            prepend apiSchemas = ["MaterialBindingAPI"]
418            doc = "Look C"
419            prepend references = [
420                </MaterialX/Looks/lookA>,
421                </MaterialX/Collections>
422            ]
423        )
424        {
425            reorder properties = ["material:binding:collection:ma1_1", "material:binding:collection:ma1", "material:binding:collection:ma2", "material:binding:collection:ma3"]
426            rel material:binding:collection:ma1_1 = [
427                </MaterialX/Looks/lookC.collection:c_plastic>,
428                </MaterialX/Looks/lookC/Materials/ma1_1>,
429            ]
430
431            over "Materials"
432            {
433                def "ma1_1" (
434                    doc = "Plastic 2"
435                    prepend references = </MaterialX/Materials/Msimple2>
436                    variants = {
437                        string vs_simple_srf = "plastic2"
438                    }
439                )
440                {
441                }
442            }
443        }
444
445        def "lookD" (
446            prepend apiSchemas = ["MaterialBindingAPI"]
447            prepend references = </MaterialX/Collections>
448        )
449        {
450            rel material:binding = </MaterialX/Looks/lookD/Materials/ma1>
451
452            def "Materials"
453            {
454                def "ma1" (
455                    prepend references = </MaterialX/Materials/Msimple2>
456                )
457                {
458                }
459            }
460        }
461    }
462}
463
464def "ModelRoot" (
465    prepend variantSets = "LookVariant"
466)
467{
468    variantSet "LookVariant" = {
469        "lookA" (
470            prepend references = </MaterialX/Looks/lookA>
471        ) {
472
473        }
474        "lookB" (
475            prepend references = </MaterialX/Looks/lookB>
476        ) {
477
478        }
479        "lookC" (
480            prepend references = </MaterialX/Looks/lookC>
481        ) {
482
483        }
484        "lookD" (
485            prepend references = </MaterialX/Looks/lookD>
486        ) {
487
488        }
489    }
490}
491
492