+
+
+| Token | Description |
+|---|---|
+|`{asset_name}` | Asset name |
+|`{asset_type}` | Asset type |
+|`{subset}` | Subset name |
+|`{family}` | Subset family |
+
+
+
+
+The namespace field can contain a single group of '#' number tokens to indicate where the namespace's unique index should go. The amount of tokens defines the zero padding of the number, e.g ### turns into 001.
+
+Warning: Note that a namespace will always be prefixed with a _ if it starts with a digit.
+
+Example:
+
+
+
### Extract GPU Cache

@@ -169,6 +200,17 @@ Most settings to override in the viewport are self explanatory and can be found
These options are set on the camera shape when publishing the review. They correspond to attributes on the Maya camera shape node.

+## Include/exclude handles by task type
+You can include or exclude handles, globally or by task type.
+
+The "Include handles by default" defines whether by default handles are included. Additionally you can add a per task type override whether you want to include or exclude handles.
+
+For example, in this image you can see that handles are included by default in all task types, except for the 'Lighting' task, where the toggle is disabled.
+
+
+And here you can see that the handles are disabled by default, except in 'Animation' task where it's enabled.
+
+
## Custom Menu
You can add your custom tools menu into Maya by extending definitions in **Maya -> Scripts Menu Definition**.
@@ -232,3 +274,14 @@ Fill in the necessary fields (the optional fields are regex filters)
- Build your workfile

+
+## Explicit Plugins Loading
+You can define which plugins to load on launch of Maya here; `project_settings/maya/explicit_plugins_loading`. This can help improve Maya's launch speed, if you know which plugins are needed.
+
+By default only the required plugins are enabled. You can also add any plugin to the list to enable on launch.
+
+:::note technical
+When enabling this feature, the workfile will be launched post initialization no matter the setting on `project_settings/maya/open_workfile_post_initialization`. This is to avoid any issues with references needing plugins.
+
+Renderfarm integration is not supported for this feature.
+:::
diff --git a/website/docs/artist_concepts.md b/website/docs/artist_concepts.md
index 7582540811..1e55c8139d 100644
--- a/website/docs/artist_concepts.md
+++ b/website/docs/artist_concepts.md
@@ -14,17 +14,29 @@ OpenPype has a limitation regarding duplicated names. Name of assets must be uni
### Subset
-Usually, an asset needs to be created in multiple *'flavours'*. A character might have multiple different looks, model needs to be published in different resolutions, a standard animation rig might not be usable in a crowd system and so on. 'Subsets' are here to accommodate all this variety that might be needed within a single asset. A model might have subset: *'main'*, *'proxy'*, *'sculpt'*, while data of *'look'* family could have subsets *'main'*, *'dirty'*, *'damaged'*. Subsets have some recommendations for their names, but ultimately it's up to the artist to use them for separation of publishes when needed.
+A published output from an asset results in a subset.
+
+The subset type is referred to as [family](#family), for example a rig, pointcache, look.
+A single asset can have many subsets, even of a single family, named [variants](#variant).
+By default a subset is named as a combination of family + variant, sometimes prefixed with the task name (like workfile).
+
+### Variant
+
+Usually, an asset needs to be created in multiple *'flavours'*. A character might have multiple different looks, model needs to be published in different resolutions, a standard animation rig might not be usable in a crowd system and so on. 'Variants' are here to accommodate all this variety that might be needed within a single asset. A model might have variant: *'main'*, *'proxy'*, *'sculpt'*, while data of *'look'* family could have subsets *'main'*, *'dirty'*, *'damaged'*. Variants have some recommendations for their names, but ultimately it's up to the artist to use them for separation of publishes when needed.
### Version
-A numbered iteration of a given subset. Each version contains at least one [representation][daa74ebf].
+A numbered iteration of a given subset. Each version contains at least one [representation](#representation).
- [daa74ebf]: #representation "representation"
+#### Hero version
+
+A hero version is a version that is always the latest published version. When a new publish is generated its written over the previous hero version replacing it in-place as opposed to regular versions where each new publish is a higher version number.
+
+This is an optional feature. The generation of hero versions can be completely disabled in OpenPype by an admin through the Studio Settings.
### Representation
-Each published variant can come out of the software in multiple representations. All of them hold exactly the same data, but in different formats. A model, for example, might be saved as `.OBJ`, Alembic, Maya geometry or as all of them, to be ready for pickup in any other applications supporting these formats.
+Each published subset version can come out of the software in multiple representations. All of them hold exactly the same data, but in different formats. A model, for example, might be saved as `.OBJ`, Alembic, Maya geometry or as all of them, to be ready for pickup in any other applications supporting these formats.
#### Naming convention
@@ -33,18 +45,22 @@ At this moment names of assets, tasks, subsets or representations can contain on
### Family
-Each published [subset][3b89d8e0] can have exactly one family assigned to it. Family determines the type of data that the subset holds. Family doesn't dictate the file type, but can enforce certain technical specifications. For example OpenPype default configuration expects `model` family to only contain geometry without any shaders or joints when it is published.
+Each published [subset](#subset) can have exactly one family assigned to it. Family determines the type of data that the subset holds. Family doesn't dictate the file type, but can enforce certain technical specifications. For example OpenPype default configuration expects `model` family to only contain geometry without any shaders or joints when it is published.
+### Task
- [3b89d8e0]: #subset "subset"
+A task defines a work area for an asset where an artist can work in. For example asset *characterA* can have tasks named *modeling* and *rigging*. Tasks also have types. Multiple tasks of the same type may exist on an asset. A task with type `fx` could for example appear twice as *fx_fire* and *fx_cloth*.
+Without a task you cannot launch a host application.
+### Workfile
+
+The source scene file an artist works in within their task. These are versioned scene files and can be loaded and saved (automatically named) through the [workfiles tool](artist_tools_workfiles.md).
### Host
General term for Software or Application supported by OpenPype and Avalon. These are usually DCC applications like Maya, Houdini or Nuke, but can also be a web based service like Ftrack or Clockify.
-
### Tool
Small piece of software usually dedicated to a particular purpose. Most of OpenPype and Avalon tools have GUI, but some are command line only.
@@ -54,6 +70,10 @@ Small piece of software usually dedicated to a particular purpose. Most of OpenP
Process of exporting data from your work scene to versioned, immutable file that can be used by other artists in the studio.
+#### (Publish) Instance
+
+A publish instance is a single entry which defines a publish output. Publish instances persist within the workfile. This way we can expect that a publish from a newer workfile will produce similar consistent versioned outputs.
+
### Load
Process of importing previously published subsets into your current scene, using any of the OpenPype tools.
diff --git a/website/docs/artist_hosts_houdini.md b/website/docs/artist_hosts_houdini.md
index f2b128ffc6..8874a0b5cf 100644
--- a/website/docs/artist_hosts_houdini.md
+++ b/website/docs/artist_hosts_houdini.md
@@ -14,20 +14,29 @@ sidebar_label: Houdini
- [Library Loader](artist_tools_library-loader)
## Publishing Alembic Cameras
-You can publish baked camera in Alembic format. Select your camera and go **OpenPype -> Create** and select **Camera (abc)**.
+You can publish baked camera in Alembic format.
+
+Select your camera and go **OpenPype -> Create** and select **Camera (abc)**.
This will create Alembic ROP in **out** with path and frame range already set. This node will have a name you've
assigned in the **Creator** menu. For example if you name the subset `Default`, output Alembic Driver will be named
`cameraDefault`. After that, you can **OpenPype -> Publish** and after some validations your camera will be published
to `abc` file.
## Publishing Composites - Image Sequences
-You can publish image sequence directly from Houdini. You can use any `cop` network you have and publish image
-sequence generated from it. For example I've created simple **cop** graph to generate some noise:
+You can publish image sequences directly from Houdini's image COP networks.
+
+You can use any COP node and publish the image sequence generated from it. For example this simple graph to generate some noise:
+

-If I want to publish it, I'll select node I like - in this case `radialblur1` and go **OpenPype -> Create** and
-select **Composite (Image Sequence)**. This will create `/out/imagesequenceNoise` Composite ROP (I've named my subset
-*Noise*) with frame range set. When you hit **Publish** it will render image sequence from selected node.
+To publish the output of the `radialblur1` go to **OpenPype -> Create** and
+select **Composite (Image Sequence)**. If you name the variant *Noise* this will create the `/out/imagesequenceNoise` Composite ROP with the frame range set.
+
+When you hit **Publish** it will render image sequence from selected node.
+
+:::info Use selection
+With *Use selection* is enabled on create the node you have selected when creating will be the node used for published. (It set the Composite ROP node's COP path to it). If you don't do this you'll have to manually set the path as needed on e.g. `/out/imagesequenceNoise` to ensure it outputs what you want.
+:::
## Publishing Point Caches (alembic)
Publishing point caches in alembic format is pretty straightforward, but it is by default enforcing better compatibility
@@ -46,6 +55,16 @@ you handle `path` attribute is up to you, this is just an example.*
Now select the `output0` node and go **OpenPype -> Create** and select **Point Cache**. It will create
Alembic ROP `/out/pointcacheStrange`
+## Publishing Reviews (OpenGL)
+To generate a review output from Houdini you need to create a **review** instance.
+Go to **OpenPype -> Create** and select **Review**.
+
+
+
+On create, with the **Use Selection** checkbox enabled it will set up the first
+camera found in your selection as the camera for the OpenGL ROP node and other
+non-cameras are set in **Force Objects**. It will then render those even if
+their display flag is disabled in your scene.
## Redshift
:::note Work in progress
diff --git a/website/docs/artist_hosts_maya_xgen.md b/website/docs/artist_hosts_maya_xgen.md
index ec5f2ed921..db7bbd0557 100644
--- a/website/docs/artist_hosts_maya_xgen.md
+++ b/website/docs/artist_hosts_maya_xgen.md
@@ -43,6 +43,10 @@ Create an Xgen instance to publish. This needs to contain only **one Xgen collec
You can create multiple Xgen instances if you have multiple collections to publish.
+:::note
+The Xgen publishing requires a namespace on the Xgen collection (palette) and the geometry used.
+:::
+
### Publish
The publishing process will grab geometry used for Xgen along with any external files used in the collection's descriptions. This creates an isolated Maya file with just the Xgen collection's dependencies, so you can use any nested geometry when creating the Xgen description. An Xgen version will consist of:
diff --git a/website/docs/assets/houdini_review_create_attrs.png b/website/docs/assets/houdini_review_create_attrs.png
new file mode 100644
index 0000000000..8735e79914
Binary files /dev/null and b/website/docs/assets/houdini_review_create_attrs.png differ
diff --git a/website/docs/assets/maya-admin_custom_namespace.png b/website/docs/assets/maya-admin_custom_namespace.png
new file mode 100644
index 0000000000..80707ea727
Binary files /dev/null and b/website/docs/assets/maya-admin_custom_namespace.png differ
diff --git a/website/docs/assets/maya-admin_exclude_handles.png b/website/docs/assets/maya-admin_exclude_handles.png
new file mode 100644
index 0000000000..9a50f2c287
Binary files /dev/null and b/website/docs/assets/maya-admin_exclude_handles.png differ
diff --git a/website/docs/assets/maya-admin_include_handles.png b/website/docs/assets/maya-admin_include_handles.png
new file mode 100644
index 0000000000..88d2270ddc
Binary files /dev/null and b/website/docs/assets/maya-admin_include_handles.png differ
diff --git a/website/docs/project_settings/settings_project_global.md b/website/docs/project_settings/settings_project_global.md
index 2de9038f3f..c17f707830 100644
--- a/website/docs/project_settings/settings_project_global.md
+++ b/website/docs/project_settings/settings_project_global.md
@@ -255,7 +255,7 @@ suffix is **"client"** then the final suffix is **"h264_client"**.
| resolution_height | Resolution height. |
| fps | Fps of an output. |
| timecode | Timecode by frame start and fps. |
- | focalLength | **Only available in Maya**