Page MenuHomeAnticto

Mutable for Unreal Engine | Basic Concepts
Updated 736 Days AgoPublic

Version 11 of 58: You are viewing an older version of this document, as it appeared on May 20 2020, 5:23 PM.

Assets, Actors and Editors

Diagrama.jpg (866×1 px, 280 KB)

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.

You can create CustomizableObjects from the Content Browser Add New menu:

create.jpg (353×216 px, 59 KB)


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.

To create an instance from a Customizable Object, you can right-click the Customizable Object in the Content Browser and select 'Create New Instance'.

03.jpg (526×352 px, 104 KB)


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:

customizableobjectasset.jpg (40×189 px, 16 KB)

The main UI of the editor looks like this:

mutableEditor.jpg (1×1 px, 873 KB)

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 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 baking objects.

The editor contains its own tool bar with the following elements:

imatge.png (86×1 px, 21 KB)

  • 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 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 Advanced Is used for debugging and troubleshooting. This is only necessary when we request issue reproduction data from Anticto.
  • Stress Test 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 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.

instanceEditor.jpg (1×1 px, 815 KB)

Object Hierarchy

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 materials to the final object
  • extend the mesh used by a material in the 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 use in sibling objects to apply different effects.

At the same time, child objects can chave thier own child objects in an unlimited hierarchy.



Multiple Assets

Object Interactions

Texture Layouts

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.

Last Author
Last Edited
May 20 2020, 5:23 PM

Event Timeline

ricard published a new version of this document.Mar 30 2020, 3:59 PM
jordi edited the content of this document. (Show Details)
jordi changed the visibility from "All Users" to "Public (No Login Required)".May 26 2020, 12:03 PM
jordi published a new version of this document.
marc edited the content of this document. (Show Details)
ricard edited the content of this document. (Show Details)
gerard edited the content of this document. (Show Details)
gerard edited the content of this document. (Show Details)
gerard published a new version of this document.
ricard edited the content of this document. (Show Details)
daniel edited the content of this document. (Show Details)
ricard published a new version of this document.