#usda 1.0 ( "WARNING: THIS FILE IS GENERATED. DO NOT EDIT." customLayerData = { string[] appliedAPISchemas = ["MaterialBindingAPI"] dictionary multipleApplyAPISchemas = { } } ) class NodeGraph "NodeGraph" ( doc = '''A node-graph is a container for shading nodes, as well as other node-graphs. It has a public input interface and provides a list of public outputs. Node Graph Interfaces One of the most important functions of a node-graph is to host the "interface" with which clients of already-built shading networks will interact. Please see "Interface Inputs" for a detailed explanation of what the interface provides, and how to construct and use it, to effectively share/instance shader networks. Node Graph Outputs These behave like outputs on a shader and are typically connected to an output on a shader inside the node-graph. ''' ) { } class Material "Material" ( doc = """A Material provides a container into which multiple \"render targets\" can add data that defines a \"shading material\" for a renderer. Typically this consists of one or more UsdRelationship properties that target other prims of type Shader - though a target/client is free to add any data that is suitable. We strongly advise that all targets adopt the convention that all properties be prefixed with a namespace that identifies the target, e.g. \"rel ri:surface = \". ## Binding Materials In the UsdShading model, geometry expresses a binding to a single Material or to a set of Materials partitioned by UsdGeomSubsets defined beneath the geometry; it is legal to bind a Material at the root (or other sub-prim) of a model, and then bind a different Material to individual gprims, but the meaning of inheritance and \"ancestral overriding\" of Material bindings is left to each render-target to determine. Since UsdGeom has no concept of shading, we provide the API for binding and unbinding geometry on the API schema UsdShadeMaterialBindingAPI. ## Material Variation The entire power of USD VariantSets and all the other composition operators can leveraged when encoding shading variation. UsdShadeMaterial provides facilities for a particular way of building \"Material variants\" in which neither the identity of the Materials themselves nor the geometry Material-bindings need to change - instead we vary the targeted networks, interface values, and even parameter values within a single variantSet. See \"Authoring Material Variations\" for more details. ## Materials Encapsulate their Networks in Namespace UsdShade requires that all of the shaders that \"belong\" to the Material live under the Material in namespace. This supports powerful, easy reuse of Materials, because it allows us to *reference* a Material from one asset (the asset might be a library of Materials) into another asset: USD references compose all descendant prims of the reference target into the referencer's namespace, which means that all of the referenced Material's shader networks will come along with the Material. When referenced in this way, Materials can also be [instanced](http://openusd.org/docs/USD-Glossary.html#USDGlossary-Instancing), for ease of deduplication and compactness. Finally, Material encapsulation also allows us to \"specialize\" child materials from parent materials. """ ) { token outputs:displacement ( displayGroup = "Outputs" doc = '''Represents the universal "displacement" output terminal of a material.''' ) token outputs:surface ( displayGroup = "Outputs" doc = '''Represents the universal "surface" output terminal of a material.''' ) token outputs:volume ( displayGroup = "Outputs" doc = '''Represents the universal "volume" output terminal of a material.''' ) } class Shader "Shader" ( doc = '''Base class for all USD shaders. Shaders are the building blocks of shading networks. While UsdShadeShader objects are not target specific, each renderer or application target may derive its own renderer-specific shader object types from this base, if needed. Objects of this class generally represent a single shading object, whether it exists in the target renderer or not. For example, a texture, a fractal, or a mix node. The main property of this class is the info:id token, which uniquely identifies the type of this node. The id resolution into a renderable shader target is deferred to the consuming application. The purpose of representing them in Usd is two-fold: - To represent, via "connections" the topology of the shading network that must be reconstructed in the renderer. Facilities for authoring and manipulating connections are encapsulated in the Has-A schema UsdShadeConnectableAPI. - To present a (partial or full) interface of typed input parameters whose values can be set and overridden in Usd, to be provided later at render-time as parameter values to the actual render shader objects. Shader input parameters are encapsulated in the property schema UsdShadeInput. ''' ) { uniform token info:id ( doc = """The id is an identifier for the type or purpose of the shader. E.g.: Texture or FractalFloat. The use of this id will depend on the render target: some will turn it into an actual shader path, some will use it to generate shader source code dynamically. \\sa SetShaderId() """ ) uniform token info:implementationSource = "id" ( allowedTokens = ["id", "sourceAsset", "sourceCode"] doc = """Specifies the attribute that should be consulted to get the shader's implementation or its source code. * If set to \"id\", the \"info:id\" attribute's value is used to determine the shader source from the shader registry. * If set to \"sourceAsset\", the resolved value of the \"info:sourceAsset\" attribute corresponding to the desired implementation (or source-type) is used to locate the shader source. A source asset file may also specify multiple shader definitions, so there is an optional attribute \"info:sourceAsset:subIdentifier\" whose value should be used to indicate a particular shader definition from a source asset file. * If set to \"sourceCode\", the value of \"info:sourceCode\" attribute corresponding to the desired implementation (or source type) is used as the shader source. """ ) } class "ConnectableAPI" ( doc = """UsdShadeConnectableAPI is an API schema that provides a common interface for creating outputs and making connections between shading parameters and outputs. The interface is common to all UsdShade schemas that support Inputs and Outputs, which currently includes UsdShadeShader, UsdShadeNodeGraph, and UsdShadeMaterial . One can construct a UsdShadeConnectableAPI directly from a UsdPrim, or from objects of any of the schema classes listed above. If it seems onerous to need to construct a secondary schema object to interact with Inputs and Outputs, keep in mind that any function whose purpose is either to walk material/shader networks via their connections, or to create such networks, can typically be written entirely in terms of UsdShadeConnectableAPI objects, without needing to care what the underlying prim type is. Additionally, the most common UsdShadeConnectableAPI behaviors (creating Inputs and Outputs, and making connections) are wrapped as convenience methods on the prim schema classes (creation) and UsdShadeInput and UsdShadeOutput. """ ) { } class "MaterialBindingAPI" ( doc = """UsdShadeMaterialBindingAPI is an API schema that provides an interface for binding materials to prims or collections of prims (represented by UsdCollectionAPI objects). In the USD shading model, each renderable gprim computes a single resolved Material that will be used to shade the gprim (exceptions, of course, for gprims that possess UsdGeomSubsets, as each subset can be shaded by a different Material). A gprim and each of its ancestor prims can possess, through the MaterialBindingAPI, both a direct binding to a Material, and any number of collection-based bindings to Materials; each binding can be generic or declared for a particular purpose, and given a specific binding strength. It is the process of \"material resolution\" (see that examines all of these bindings, and selects the one Material that best matches the client's needs. The intent of purpose is that each gprim should be able to resolve a Material for any given purpose, which implies it can have differently bound materials for different purposes. There are two special values of purpose defined in UsdShade, although the API fully supports specifying arbitrary values for it, for the sake of extensibility: A binding can also have no specific purpose at all, in which case, it is considered to be the fallback or all-purpose binding (denoted by the empty-valued token UsdShadeTokens->allPurpose). The purpose of a material binding is encoded in the name of the binding relationship. Note: Both bindingName and purpose must be non-namespaced tokens. This allows us to know the role of a binding relationship simply from the number of tokens in it. A binding-strength value is used to specify whether a binding authored on a prim should be weaker or stronger than bindings that appear lower in namespace. We encode the binding strength with as token-valued metadata 'bindMaterialAs' for future flexibility, even though for now, there are only two possible values: UsdShadeTokens->weakerThanDescendants and UsdShadeTokens->strongerThanDescendants. When binding-strength is not authored (i.e. empty) on a binding-relationship, the default behavior matches UsdShadeTokens->weakerThanDescendants. \\note If a material binding relationship is a built-in property defined as part of a typed prim's schema, a fallback value should not be provided for it. This is because the \"material resolution\" algorithm only conisders authored properties. """ ) { } class "CoordSysAPI" ( doc = '''UsdShadeCoordSysAPI provides a way to designate, name, and discover coordinate systems. Coordinate systems are implicitly established by UsdGeomXformable prims, using their local space. That coordinate system may be bound (i.e., named) from another prim. The binding is encoded as a single-target relationship in the "coordSys:" namespace. Coordinate system bindings apply to descendants of the prim where the binding is expressed, but names may be re-bound by descendant prims. Named coordinate systems are useful in shading workflows. An example is projection paint, which projects a texture from a certain view (the paint coordinate system). Using the paint coordinate frame avoids the need to assign a UV set to the object, and can be a concise way to project paint across a collection of objects with a single shared paint coordinate system. This is a non-applied API schema. ''' ) { }