Phriction Documentation Mutable Mutable for Unreal Engine User Documentation Basic Concepts History Version 10 vs 51
Version 10 vs 51
Version 10 vs 51
Content Changes
Content Changes
= Assets, Actors and Editors
{F101999, size=full}
The diagram above shows the different concepts used for character customization and their relation. The system main concepts are CustomizableObject assets, CustomizableObjectInstance assets, and Unreal Actors with special components using these assets.
== Customizable Object
This is a new type of asset added to Unreal Engine. It represents an object that can be customized. It includes all the possible variations that can be applied to it, and defines the parameters that can be controlled at run-time (by the player or by game code), and how they affect the final objects.
== Parameters ==
A Customizable Object will define several parameters. The parameters are what the game or application (so probably the player) will be able to modify at runtime. There are several types of parameters, and they can be created by several nodes:
* Slider parameters: numeric parameters with decimals, ranging between 0.0 and 1.0. These are usually created explicitely by a Float Parameter Node, and used for continuous effects like texture effects, or mesh morphs.
* Enumeration parameters: they represent an option in a predefined set of options. These are created by Object Group Node, to select a child object.
* Checkbox parameters: they only have two possibilities (enabled or disabled). These are created by Object Group Node when the group type is "Toggle Each".
* Projecto parameters: they represent a projector with a position that will be modified at runtime. They are created with the Projector Parameter Node.
== Customizable Object Instance
This is a new type of asset added to Unreal Engine. It represents an instance of a CustomizableObject: a set of parameter values to apply to a CustomizableObject in order to obtain a "customized" object. For instance, if you have a CustomizableObject for Bandits, each unique bandit you want to create from it will be a CustomizableObjectInstance.
= Editors
== Customizable Object Editor
There is a special tool called Customizable Object Editor inside the Unreal Editor to show and edit this kind of asset. You can create CustomizableObjects from the Content Browser **Add New** menu:
{F102004, size=full}
To open it, just double-click on any CustomizableObject asset in the Content Browser. These assets look like this in the browser:
{F102006, size=full}
The main UI of the editor looks like this:
{F102002, size=full}
The main panels of this interface are:
* **Source Graph** : It contains the diagram of nodes that define this CustomizableObject structure, including its LODs, materials, meshes, textures, parameters and effects that connect them all.
* **Object Properties** : This panel has the general properties of the object.
* **Node Properties** : When a node is selected in the //Source Graph// its properties are displayed here.
* **Preview Instance Viewport** : When an objects is open and compiled, this panel will show the 3D preview. See the article [[ /w/mutable/unreal-engine-4/user-documentation/preview-object/| Tuning the Preview Of An Object ]] for details.
* **Preview Instance Parameters** : This panel shows the current parameters for the preview object. They can be directly modified here. It can also "Bake" the current instance into a set of standard Unreal Engine assets. See this article for details on [[ w/mutable/unreal-engine-4/user-documentation/baking-instances/ | baking objects ]].
The editor contains its own tool bar with the following elements:
{F102014, size=full}
* ** Save** Saves the current object.
* ** Compile ** Compile the current object with all of its children and update the preview. This is necessary to reflect changes in the graph. Find out more about the compilation options in the [[ /w/mutable/unreal-engine-4/technical/#performance | Performance Tuning ]] documentation.
* ** Compile Only Selected ** Compile the current object, and only the children that are currently in use in the preview. This is useful for faster iteration when the customizable object is very big.
* ** Export ** {icon exclamation-triangle} //Advanced// Is used for debugging and troubleshooting. This is only necessary when we request issue reproduction data from Anticto.
* ** Stress Test ** {icon exclamation-triangle} //Advanced// It is used to benchmark an object. It will build many instances internally and output the results in the //Output Log// of the Unreal Editor. Find out more in the [[ /w/mutable/unreal-engine-4/technical/#performance | Performance Tuning ]] documentation.
* ** Version ** The current plugin version number, and an indicator stating if the engine modifications required by the Mutable plugin have been correctly applied.
== Customizable Object Instance Editor
This is the editor used to view and modify CustomizableObjectInstances. It has only two panels that mimic the Preview panels in the Customizable Object Editor above.
{F102018}
== Actions
Save, Compile, Stress test, Bake...
== Source Graph
== Graph Node Properties
== Object Propertes
== Preview Instance Viewport
== Preview Instance Properties
= Hierarchy
== Objects
== Groups
== Multiple Assets
= Object Interactions
= Texture Layouts
{anchor #texture-layout-concept}
(IMPORTANT) The space that the materials added with extend material nodes will use at the final mesh layout depends on their relative block sizes. The root customizable object layout defines what a block cell resolution is. Artists will have more control on the final look if they take this into account when creating textures for extend material nodes.
Example: **TODO: Add images showing this in detail, as it may be hard to grasp without visualization of the case and the consequences.**
A parent object mesh with a layout of 2x2, with one bloc 1x2 and one 1x1. Only one image in the material, of dimensions 256x256.
A child object mesh with a layout of 1x1 and one block 1x1 added to the parent mesh, using an extend material node. Only one image in the material, of dimensions 256x256.
The final mesh with this child active will have a layout of 2x2 with one 1x2 block and two 1x1 blocks, one of them the one added by the active child. The final image size is 256x256, which means that the child object has had its resolution **halved**, as it now uses only a quarter of the space, a bloc of 1x1 which has an image size of 128x128.
The artist would have controlled the exact appearence of the child object material by making it 128x128 from the beginning.
= Assets, Actors and Editors
{F101999, size=full}
The diagram above shows the different concepts used for character customization and their relation. The system main concepts are CustomizableObject assets, CustomizableObjectInstance assets, and Unreal Actors with special components using these assets.
{anchor #customizable-object}
== Customizable Object
This is a new type of asset added to Unreal Engine. It represents an object that can be customized. It includes all the possible variations that can be applied to it, and defines the parameters that can be controlled at run-time (by the player or by game code), and how they affect the final objects.
You can create CustomizableObjects from the Content Browser **Add New** menu:
{F102004, size=full}
== Parameters ==
A Customizable Object will define several parameters. The parameters are what the game or application (so probably the player) will be able to modify at runtime. There are several types of parameters, and they can be created by several nodes:
* Slider parameters: numeric parameters with decimals, ranging between 0.0 and 1.0. These are usually created explicitely by a [[ mutable/unreal-engine-4/user-documentation/nodes/float-parameter | Float Parameter Node ]], and used for continuous effects like texture effects, or mesh morphs.
* Enumeration parameters: they represent an option in a predefined set of options. These are created by [[ mutable/unreal-engine-4/user-documentation/nodes/object-group | Object Group Node ]], to select a child object, or by the [[mutable/unreal-engine-4/user-documentation/nodes/enum/|Enum Parameter Node]], to choose one option of one or multiple [[mutable/unreal-engine-4/user-documentation/nodes/switch/|Switch Nodes]]. An Enumeration Parameter is created by a Object Group Node only when the group type is set to "One or None" or "At least one Option".
* Checkbox parameters: they only have two possibilities (enabled or disabled). These are created by [[ mutable/unreal-engine-4/user-documentation/nodes/object-group | Object Group Node ]] when the group type is "Toggle Each".
* Color parameters: they represent a color with alpha channel, in essence a vector of four numeric decimals, ranging between 0.0 and 1.0. These are created by the [[mutable/unreal-engine-4/user-documentation/nodes/color-parameter/|Color Parameter Node]].
* Projector parameters: they represent a projector with a position that will be modified at runtime. They are created with the [[ mutable/unreal-engine-4/user-documentation/nodes/projector-parameter/ | Projector Parameter Node ]].
{anchor #customizable-object-instance}
== Customizable Object Instance
This is a new type of asset added to Unreal Engine. It represents an instance of a CustomizableObject: a set of parameter values to apply to a CustomizableObject in order to obtain a "customized" object. For instance, if you have a CustomizableObject for Bandits, each unique bandit you want to create from it will be a CustomizableObjectInstance.
To create an instance from a Customizable Object, you can right-click the Customizable Object in the Content Browser and select 'Create New Instance'.
{F102020, size=full}
= Editors
== Customizable Object Editor
There is a special tool called Customizable Object Editor inside the Unreal Editor to show and edit this kind of asset.
To open it, just double-click on any CustomizableObject asset in the Content Browser. These assets look like this in the browser:
{F102006, size=full}
The main UI of the editor looks like this:
{F102002, size=full}
The main panels of this interface are:
* **Source Graph** : It contains the diagram of nodes that define this CustomizableObject structure, including its LODs, materials, meshes, textures, parameters and effects that connect them all.
* **Object Properties** : This panel has the general properties of the object.
* **Node Properties** : When a node is selected in the //Source Graph// its properties are displayed here.
* **Preview Instance Viewport** : When an objects is open and compiled, this panel will show the 3D preview. See the article [[ mutable/unreal-engine-4/user-documentation/preview-object/| Tuning the Preview Of An Object ]] for details.
* **Preview Instance Parameters** : This panel shows the current parameters for the preview object. They can be directly modified here. It can also "Bake" the current instance into a set of standard Unreal Engine assets. See this article for details on [[ mutable/unreal-engine-4/user-documentation/baking-instances/ | baking objects ]].
The editor contains its own tool bar with the following elements:
{F102014, size=full}
* ** Save** Saves the current object.
* ** Compile ** Compile the current object with all of its children and update the preview. This is necessary to reflect changes in the graph. Find out more about the compilation options in the [[ mutable/unreal-engine-4/technical/#performance | Performance Tuning ]] documentation.
* ** Compile Only Selected ** Compile the current object, and only the children that are currently in use in the preview. This is useful for faster iteration when the customizable object is very big.
* ** Export ** {icon exclamation-triangle} //Advanced// Is used for debugging and troubleshooting. This is only necessary when we request issue reproduction data from Anticto.
* ** Stress Test ** {icon exclamation-triangle} //Advanced// It is used to benchmark an object. It will build many instances internally and output the results in the //Output Log// of the Unreal Editor. Find out more in the [[ mutable/unreal-engine-4/technical/#performance | Performance Tuning ]] documentation.
* ** Version ** The current plugin version number, and an indicator stating if the engine modifications required by the Mutable plugin have been correctly applied.
== Customizable Object Instance Editor
This is the editor used to view and modify CustomizableObjectInstances. It has only two panels that mimic the Preview panels in the Customizable Object Editor above.
{F102018, size=full}
= Reference Skeletal Mesh
All CustomizableObjects have a property called **Reference Skeletal Mesh**. This property is defined in the **Object Properties** panel of the root CustomizableObject asset. This is a standard Unreal Engine SkeletalMesh and it is used for several reasons:
* All the SkeletalMeshes generated for this CustomizableObject instances will use the Reference Skeletal Mesh properties for everything that Mutable doesn't create or modify. This includes data like LOD distances, Physics properties, Bounding Volumes, Skeleton, etc.
* While a CustomizableObject instance is being created for the first time, and in some situation with lots of objects this may require some seconds, the Reference Skeletal Mesh is used for the actor. This works as a better solution than the alternative of not showing anything, although this can be disabled with the function "SetReplaceDiscardedWithReferenceMeshEnabled" from the class CustomizableObjectSystem ([[ mutable/unreal-engine-4/technical/#performance | See the c++ section on how to call the CustomizableObjectSystem]]).
For this reason, projects usually use a simple or generic SkeletalMesh as ReferenceSkeletalMesh. One good option is to replace the Reference Skeletal Mesh with a Baked Skeletal Mesh generated in the editor, with the desired //generic// appearence. This can be done with the **Bake** button in the editor preview panels. See [[ mutable/unreal-engine-4/user-documentation/baking-instances/ | this section ]] for more information.
{F103386, size=full}
= Object Hierarchy
== Objects
Mutable organizes the data for each Customizable Object in a hierarchy of parts. Each object has a root object node that can define a base mesh and materials with some parameters. This object can have any number of child objects that can:
- add new mesh fragments (materials) to the final object
- extend the mesh used by a material already present in a parent object
- remove part of the mesh in the parent object
- patch the textures of a material in the parent object
- activate user-defined Tags that can be used in sibling objects to apply different effects.
At the same time, child objects can have their own child objects in an unlimited hierarchy.
== Groups
The children of an object can be organized in Groups. The Groups define the logic between the object and its parent in regard of how are the children activated. For instance, all t-shirt children can be grouped with an object parameter that only lets the users select one of them at a time or none.
Two child objects directly connected to the parent (they are not a selectable option in the Preview Instance Viewport):
{F370179, size=full}
Two child objects connected through a Group:
{F370177, size=full}
Each Group has a Group Type which can be one of the followings:
- **Toggle:** the child objects appear as toggleable options.
{F370167}
- **At least one Option:** a single child object has to be selected.
{F370173}
- **None or One:** a single child object can be selected.
{F370171}
- **All options:** all the objects child objects are active all the time. Behaves as if the children where connected directly to the parent.
{anchor #multiple-assets}
== Multiple Assets
A big CustomizableObject can be split into several assets. This is very important when multiple users work in the same data and also for version control. There are 2 features to assist with this:
- Child Objects can select as parent an Object Group in a different asset, instead of directly connecting them in a graph. See the [[ mutable/unreal-engine-4/user-documentation/nodes/object-group/ | Object Group ]] and [[ mutable/unreal-engine-4/user-documentation/nodes/child-object/| Child Object ]] node reference for details.
- There are special diagram nodes to [[ mutable/unreal-engine-4/user-documentation/nodes/export-pin/ | export ]] and [[ mutable/unreal-engine-4/user-documentation/nodes/import-pin/ | import ]] connections from the graph in other assets.
This is useful for editor data, but it has nothing to do with data streaming in packaged games. Data streaming for packaged games will happen regardless of whether the CustomizableObject is split into multiple assets or not.
= Object Interactions
Mutable has several features to handle object interactions. The most basic one is the Object Groups, which create instance parameters that select only one child object from a set, so it is not possible to add more than one of them. An example of this is a group for character hats, that will let you select one hat or none, but never two hats.
Additionally, Mutable has a system to create different variations of an object based on what other objects are added to an instance. For example, you may have a character with several hair styles, and optionally hats. You may want to create variations for some of the hairstyles to be used when a type of hat is also present in the character. You can use the Material Variations for this.
Another example of object interaction is the selective removal of mesh fragments. This can be seen in the section [[ mutable/unreal-engine-4/user-documentation/remove-unseen-parts/|Remove unseen mesh parts]].
These two types of object interactions use the Tag system. You can define your own Tags and they are enabled when an object is active in an instance. The Material Node is the place where you can add the tags which are just text labels. Then, there are several nodes that will act differently based on what tags are enabled in a particular instance, like the Material Variation Node, or the Clip Mesh With Mesh Node.
= Texture Layouts
{anchor #texture-layout-concept}
Mutable can merge material meshes from several objects into a single material. It can also remove mesh fragments from existing materials. When doing this, it can modify the texture UV layouts to optimize memory usage, and minimize rendering commands. This is achieved with the [[ mutable/unreal-engine-4/user-documentation/nodes/mesh-layout/ | texture layout ]] concept, which creates texture blocks. These blocks can later be referenced in several other nodes.
(WARNING) Several usage examples of this can be found in the [[ mutable/unreal-engine-4/user-documentation/texture-layouts/ | Texture Layout ]] page in the [[ mutable/unreal-engine-4/user-documentation/ | User Documentation ]] section.
= States
States are an optimization feature of Mutable which allow to optimize the instances updates. A State represents a specific use case in the game (like in-game, cloth customization, facial customization, etc.) and can be configured with a set of parameters that Mutable is going to optimize. See the [[ mutable/unreal-engine-4/user-documentation/states/ | Sates ]] page for more information.
= Assets, Actors and Editors
{F101999, size=full}
The diagram above shows the different concepts used for character customization and their relation. The system main concepts are CustomizableObject assets, CustomizableObjectInstance assets, and Unreal Actors with special components using these assets.
{anchor #customizable-object}
== Customizable Object
This is a new type of asset added to Unreal Engine. It represents an object that can be customized. It includes all the possible variations that can be applied to it, and defines the parameters that can be controlled at run-time (by the player or by game code), and how they affect the final objects.
You can create CustomizableObjects from the Content Browser **Add New** menu:
{F102004, size=full}
== Parameters ==
A Customizable Object will define several parameters. The parameters are what the game or application (so probably the player) will be able to modify at runtime. There are several types of parameters, and they can be created by several nodes:
* Slider parameters: numeric parameters with decimals, ranging between 0.0 and 1.0. These are usually created explicitely by a [[ mutable/unreal-engine-4/user-documentation/nodes/float-parameter | Float Parameter Node ]], and used for continuous effects like texture effects, or mesh morphs.
* Enumeration parameters: they represent an option in a predefined set of options. These are created by [[ mutable/unreal-engine-4/user-documentation/nodes/object-group | Object Group Node ]], to select a child object, or by the [[mutable/unreal-engine-4/user-documentation/nodes/enum/|Enum Parameter Node]], to choose one option of one or multiple [[mutable/unreal-engine-4/user-documentation/nodes/switch/|Switch Nodes]]. or mesh morphsAn Enumeration Parameter is created by a Object Group Node only when the group type is set to "One or None" or "At least one Option".
* Enumeration* Checkbox parameters: they represent an option in a predefined set of options. These are created by Object Group Node,only have two possibilities (enabled or disabled). to select a child objectThese are created by [[ mutable/unreal-engine-4/user-documentation/nodes/object-group | Object Group Node ]] when the group type is "Toggle Each".
* Checkbox parameters: they only have two possibilities (enabled or disabled)olor parameters: they represent a color with alpha channel, in essence a vector of four numeric decimals, ranging between 0.0 and 1.0. These are created by Object Group Node when the group type is "Toggle Each"the [[mutable/unreal-engine-4/user-documentation/nodes/color-parameter/|Color Parameter Node]].
* Projector parameters: they represent a projector with a position that will be modified at runtime. They are created with the [[ mutable/unreal-engine-4/user-documentation/nodes/projector-parameter/ | Projector Parameter Node ]].
{anchor #customizable-object-instance}
== Customizable Object Instance
This is a new type of asset added to Unreal Engine. It represents an instance of a CustomizableObject: a set of parameter values to apply to a CustomizableObject in order to obtain a "customized" object. For instance, if you have a CustomizableObject for Bandits, each unique bandit you want to create from it will be a CustomizableObjectInstance.
= EditorsTo create an instance from a Customizable Object, you can right-click the Customizable Object in the Content Browser and select 'Create New Instance'.
== Customizable Object Editor{F102020, size=full}
There is a special tool called Customizable Object Editor inside the Unreal Editor to show and edit this kind of asset. You can create CustomizableObjects from the Content Browser **Add New** menu:= Editors
{F102004, size=full}== Customizable Object Editor
There is a special tool called Customizable Object Editor inside the Unreal Editor to show and edit this kind of asset.
To open it, just double-click on any CustomizableObject asset in the Content Browser. These assets look like this in the browser:
{F102006, size=full}
The main UI of the editor looks like this:
{F102002, size=full}
The main panels of this interface are:
* **Source Graph** : It contains the diagram of nodes that define this CustomizableObject structure, including its LODs, materials, meshes, textures, parameters and effects that connect them all.
* **Object Properties** : This panel has the general properties of the object.
* **Node Properties** : When a node is selected in the //Source Graph// its properties are displayed here.
* **Preview Instance Viewport** : When an objects is open and compiled, this panel will show the 3D preview. See the article [[ /w/mutable/unreal-engine-4/user-documentation/preview-object/| Tuning the Preview Of An Object ]] for details.
* **Preview Instance Parameters** : This panel shows the current parameters for the preview object. They can be directly modified here. It can also "Bake" the current instance into a set of standard Unreal Engine assets. See this article for details on [[ w/mutable/unreal-engine-4/user-documentation/baking-instances/ | baking objects ]].
The editor contains its own tool bar with the following elements:
{F102014, size=full}
* ** Save** Saves the current object.
* ** Compile ** Compile the current object with all of its children and update the preview. This is necessary to reflect changes in the graph. Find out more about the compilation options in the [[ /w/mutable/unreal-engine-4/technical/#performance | Performance Tuning ]] documentation.
* ** Compile Only Selected ** Compile the current object, and only the children that are currently in use in the preview. This is useful for faster iteration when the customizable object is very big.
* ** Export ** {icon exclamation-triangle} //Advanced// Is used for debugging and troubleshooting. This is only necessary when we request issue reproduction data from Anticto.
* ** Stress Test ** {icon exclamation-triangle} //Advanced// It is used to benchmark an object. It will build many instances internally and output the results in the //Output Log// of the Unreal Editor. Find out more in the [[ /w/mutable/unreal-engine-4/technical/#performance | Performance Tuning ]] documentation.
* ** Version ** The current plugin version number, and an indicator stating if the engine modifications required by the Mutable plugin have been correctly applied.
== Customizable Object Instance Editor
This is the editor used to view and modify CustomizableObjectInstances. It has only two panels that mimic the Preview panels in the Customizable Object Editor above.
{F102018}{F102018, size=full}
= Reference Skeletal Mesh
All CustomizableObjects have a property called **Reference Skeletal Mesh**. This property is defined in the **Object Properties** panel of the root CustomizableObject asset. This is a standard Unreal Engine SkeletalMesh and it is used for several reasons:
* All the SkeletalMeshes generated for this CustomizableObject instances will use the Reference Skeletal Mesh properties for everything that Mutable doesn't create or modify. This includes data like LOD distances, Physics properties, Bounding Volumes, Skeleton, etc.
* While a CustomizableObject instance is being created for the first time, and in some situation with lots of objects this may require some seconds, the Reference Skeletal Mesh is used for the actor. This works as a better solution than the alternative of not showing anything, although this can be disabled with the function "SetReplaceDiscardedWithReferenceMeshEnabled" from the class CustomizableObjectSystem ([[ mutable/unreal-engine-4/technical/#performance | See the c++ section on how to call the CustomizableObjectSystem]]).
For this reason, projects usually use a simple or generic SkeletalMesh as ReferenceSkeletalMesh. One good option is to replace the Reference Skeletal Mesh with a Baked Skeletal Mesh generated in the editor, with the desired //generic// appearence. This can be done with the **Bake** button in the editor preview panels. See [[ mutable/unreal-engine-4/user-documentation/baking-instances/ | this section ]] for more information.
{F103386, size=full}
== Actions Object Hierarchy
== Objects
Mutable organizes the data for each Customizable Object in a hierarchy of parts. Each object has a root object node that can define a base mesh and materials with some parameters. This object can have any number of child objects that can:
- add new mesh fragments (materials) to the final object
Save, Compile, Stress test, Bake... - extend the mesh used by a material already present in a parent object
== Source Graph - remove part of the mesh in the parent object
- patch the textures of a material in the parent object
- activate user-defined Tags that can be used in sibling objects to apply different effects.
At the same time, child objects can have their own child objects in an unlimited hierarchy.
== Groups
The children of an object can be organized in Groups. The Groups define the logic between the object and its parent in regard of how are the children activated. For instance, all t-shirt children can be grouped with an object parameter that only lets the users select one of them at a time or none.
Two child objects directly connected to the parent (they are not a selectable option in the Preview Instance Viewport):
== Graph Node Properties{F370179, size=full}
Two child objects connected through a Group:
== Object Propertes{F370177, size=full}
Each Group has a Group Type which can be one of the followings:
== Preview Instance Viewport- **Toggle:** the child objects appear as toggleable options.
== Preview Instance Properties {F370167}
= Hierarchy- **At least one Option:** a single child object has to be selected.
== O {F370173}
- **None or One:** a single child objects can be selected.
== Groups {F370171}
- **All options:** all the objects child objects are active all the time. Behaves as if the children where connected directly to the parent.
{anchor #multiple-assets}
== Multiple Assets
A big CustomizableObject can be split into several assets. This is very important when multiple users work in the same data and also for version control. There are 2 features to assist with this:
- Child Objects can select as parent an Object Group in a different asset, instead of directly connecting them in a graph. See the [[ mutable/unreal-engine-4/user-documentation/nodes/object-group/ | Object Group ]] and [[ mutable/unreal-engine-4/user-documentation/nodes/child-object/| Child Object ]] node reference for details.
- There are special diagram nodes to [[ mutable/unreal-engine-4/user-documentation/nodes/export-pin/ | export ]] and [[ mutable/unreal-engine-4/user-documentation/nodes/import-pin/ | import ]] connections from the graph in other assets.
This is useful for editor data, but it has nothing to do with data streaming in packaged games. Data streaming for packaged games will happen regardless of whether the CustomizableObject is split into multiple assets or not.
= Object Interactions
Mutable has several features to handle object interactions. The most basic one is the Object Groups, which create instance parameters that select only one child object from a set, so it is not possible to add more than one of them. An example of this is a group for character hats, that will let you select one hat or none, but never two hats.
Additionally, Mutable has a system to create different variations of an object based on what other objects are added to an instance. For example, you may have a character with several hair styles, and optionally hats. You may want to create variations for some of the hairstyles to be used when a type of hat is also present in the character. You can use the Material Variations for this.
Another example of object interaction is the selective removal of mesh fragments. This can be seen in the section [[ mutable/unreal-engine-4/user-documentation/remove-unseen-parts/|Remove unseen mesh parts]].
These two types of object interactions use the Tag system. You can define your own Tags and they are enabled when an object is active in an instance. The Material Node is the place where you can add the tags which are just text labels. Then, there are several nodes that will act differently based on what tags are enabled in a particular instance, like the Material Variation Node, or the Clip Mesh With Mesh Node.
= Texture Layouts
{anchor #texture-layout-concept}
(IMPORTANT) The space that the materials added with extend material nodes will use at the final mesh layout depends on their relative block sizes. The root customizable object layout defines what a block cell resolution is. Artists will have more control on the final look if they take this into account when creating textures for extend material nodes.
Example: **TODO: Add images showing this in detail, as it may be hard to grasp without visualization of the case and the consequences.**
A parent object mesh with a layout of 2x2, with one bloc 1x2 and one 1x1. Only one image in the material, of dimensions 256x256.
A child object mesh with a layout of 1x1 and one block 1x1 added to the parent mesh,Mutable can merge material meshes from several objects into a single material. using an extendIt can also remove mesh fragments from existing material nodes. Only one image in the materialWhen doing this, of dimensions 256x256.
The final mesh with this child active will have ait can modify the texture UV layout of 2x2 with one 1x2 block and two 1x1 blockss to optimize memory usage, one of them the one added by the active childand minimize rendering commands. The final image size is 256x256This is achieved with the [[ mutable/unreal-engine-4/user-documentation/nodes/mesh-layout/ | texture layout ]] concept, which means that the child object has had its resolution **halved**,creates texture blocks. as it now uses only a quarter of the space, a bloc of 1x1 which has an image size of 128x128.
The artist would have controlled the exact appearence of the child object material by making it 128x128 from the beginning.These blocks can later be referenced in several other nodes.
(WARNING) Several usage examples of this can be found in the [[ mutable/unreal-engine-4/user-documentation/texture-layouts/ | Texture Layout ]] page in the [[ mutable/unreal-engine-4/user-documentation/ | User Documentation ]] section.
= States
States are an optimization feature of Mutable which allow to optimize the instances updates. A State represents a specific use case in the game (like in-game, cloth customization, facial customization, etc.) and can be configured with a set of parameters that Mutable is going to optimize. See the [[ mutable/unreal-engine-4/user-documentation/states/ | Sates ]] page for more information.