AttributeConvention Prim Decorator
==================================

|sparkles| **New in Katana 7.5**

The AttributeConvention Prim Decorator allows for generic conversion of Katana attributes to USD
attributes, which may not be covered by another prim decorator.

Attributes
^^^^^^^^^^
Attributes are defined under the :code:`usd.conversion.attribute` Group Attribute.

.. list-table::
    :header-rows: 1
    :widths: 5 60 50

    - * Type
      * Attribute
      * Description

    - * :kat:type:`string`
      * :kat:attr:`usd.conversion.attribute.<id>.katanaAttrName`
      * The absolute path to the Katana Attribute name. This is a **required** attribute when the
        :code:`usd.conversion.attribute.<id>.defaultValue` attribute is not specified.

    - * :kat:type:`string`
      * :kat:attr:`usd.conversion.attribute.<id>.usdAttrName`
      * The USD attribute name. **Required**.

    - * :kat:type:`string`
      * :kat:attr:`usd.conversion.attribute.<id>.usdAttrTypeName`
      * The USD attribute type name. **Required**.

    - * :kat:type:`string`
      * :kat:attr:`usd.conversion.attribute.<id>.usdAttrVariability`
      * The USD attribute variability. Possible values are :code:`uniform` or :code:`varying`. This
        is :code:`uniform` by default.

    - * :kat:type:`int`
      * :kat:attr:`usd.conversion.attribute.<id>.isCustom`
      * Determines if the USD attribute should be written as Custom. This is :code:`0` (false) by default.

    - * :kat:type:`any`
      * :kat:attr:`usd.conversion.attribute.<id>.defaultValue`
      * If no Katana attribute is found at :code:`usd.conversion.attribute.<id>.katanaAttrName`,
        this value will be used. This is a **required** attribute when
        :code:`usd.conversion.attribute.<id>.katanaAttrName` is not specified.

    - * :kat:type:`group`
      * :kat:attr:`usd.conversion.attribute.<id>.usdMetadata`
      * A group holding attribute metadata names.

    - * :kat:type:`string`
      * :kat:attr:`usd.conversion.attribute.<id>.usdMetadata.<metadata id>.name`
      * The USD attribute metadata name. **Required**.

    - * :kat:type:`int`
      * :kat:attr:`usd.conversion.attribute.<id>.usdMetadata.<metadata id>.isCustom`
      * Determines if the metadata field should be set as :code:`customData` metadata, or not. This
        is :code:`0` (false) by default.

    - * :kat:type:`any`
      * :kat:attr:`usd.conversion.attribute.<id>.usdMetadata.<metadata id>.value`
      * The value of the USD attribute metadata. **Required**.

    - * :kat:type:`string`
      * :kat:attr:`usd.conversion.attribute.<id>.usdMetadata.<metadata id>.usdMetadataTypeName`
      * The USD metadata type name. **Required**.

Relationships
^^^^^^^^^^^^^
Relationships are defined under the :code:`usd.conversion.relationship` Group Attribute.

.. list-table::
    :header-rows: 1
    :widths: 5 50 60

    - * Type
      * Attribute
      * Description

    - * :kat:type:`string`
      * :kat:attr:`usd.conversion.relationship.<id>.katanaAttrName`
      * The absolute path to the Katana Attribute. The value of this Katana Attribute must be one or more valid locations. **Required**.

    - * :kat:type:`string`
      * :kat:attr:`usd.conversion.relationship.<id>.usdRelName`
      * The USD relationship name. **Required**.

Schemas
^^^^^^^
.. list-table::
    :header-rows: 1
    :widths: 5 40 70

    - * Type
      * Attribute
      * Description

    - * :kat:type:`string`
      * :kat:attr:`usd.conversion.usdConcreteType`
      * The concrete type schema to apply to the Prim.

    - * :kat:type:`string[]`
      * :kat:attr:`usd.conversion.usdAPISchemas`
      * A list of USD Schema names to apply to the Prim.

Specifier
^^^^^^^^^
.. list-table::
    :header-rows: 1
    :widths: 5 40 70

    - * Type
      * Attribute
      * Description

    - * :kat:type:`string`
      * :kat:attr:`usd.conversion.usdSpecifier`
      * The prim specifier to create the prim with. Possible values are :code:`def`, :code:`over` or
        :code:`class`. This is :code:`def` by default.

Metadata
^^^^^^^^
Metadata is defined under the :code:`usd.conversion.metadata` Group Attribute.

.. list-table::
    :header-rows: 1
    :widths: 5 60 50

    - * Type
      * Attribute
      * Description

    - * :kat:type:`string`
      * :kat:attr:`usd.conversion.metadata.<id>.katanaAttrName`
      * The absolute path to the Katana Attribute name. **Required**.

    - * :kat:type:`any`
      * :kat:attr:`usd.conversion.metadata.<id>.usdMetadataName`
      * The name of the metadata item. Delimiting with a :code:`:` character will place the metadata
        value within a dictionary. **Required**.

    - * :kat:type:`string`
      * :kat:attr:`usd.conversion.metadata.<id>.usdMetadataTypeName`
      * The type name of the USD metadata item. **Required**.

    - * :kat:type:`int`
      * :kat:attr:`usd.conversion.metadata.<id>.isCustom`
      * Determines if the USD attribute should be written as Custom. This is 0 (false) by default.

    - * :kat:type:`any`
      * :kat:attr:`usd.conversion.metadata.<id>.defaultValue`
      * If no Katana attribute is found at :code:`usd.conversion.metadata.<id>.katanaAttrName`,
        this value will be used. This is a **required** attribute when
        :code:`usd.conversion.metadata.<id>.katanaAttrName` is not specified.

.. |sparkles| unicode:: U+2728