Getting Started
Required Assets
Before we begin building our UBF project, youâll need a few assets to work with. For this tutorial, weâll be using a range of 3D models and textures for both the Party Bear and his wardrobe. You can download the starter asset pack from the Asset Creator Pack Additionally, ensure you have installed compatible versions of UBF Studio and UBF Previewer. For installation instructions, see the Installation and Setup sections for the respective apps:Creating a UBF Project
Letâs again begin by launching UBF Studio and creating a brand new project. Select âCreate Projectâ in the welcome screen, then navigate to a suitable location on your drive and create a new folder to store your project. You can name it whatever you prefer, but for this tutorial, weâll use âUBF - Bear Necessities.â Once the folder is created, navigate into it and select âCreate Projectâ to initialize your UBF workspace.Project Setup & Importing Assets
In Bear Necessities, weâll be dealing with a broader range of assets than in our previous starter project. To keep everything neat and easy to navigate, letâs begin by organizing our workspace right from the start. Firstly, download and unzip the Bear Necessities Starter Pack into your newly created project folder. This ensures that all the relevant 3D models and textures are placed directly within your UBF Project. After extracting, return to UBF Studio and open or refresh your project. You should now see a folder hierarchy resembling the one below:Build-A-BearâLaying the Foundations
Itâs time to bring our Party Bear to life! Before we start on any accessories, we first need to establish a solid foundation. In this section, weâll walk through the process of creating and configuring our base bear blueprint. Weâll break this into three key stages: first, prepping our blueprint and wiring up some reusable logic; second, spawning our bear and giving him a glorious fur coat; and finally, bringing him to life with a pair of expressive, customizable eyes.Bear BonesâCreating Our Blueprint Structure
- Creating the Bear Blueprint
- Creating a Scene Node

- Storing the Scene Node in a Blueprint Variable
- Set the Variable Type to SceneNode.
- Give it any name you like, we will choose BearSceneNode.


- Drag it directly from the Variables Menu in the Blueprint Inspector into the viewport.
- Alternatively, you can open the Create Node menu and search for Get BearSceneNode.
- Leveraging Mesh Configs
InjectedMeshConfig
. Once this input is created, we can incorporate a simple check in our blueprintâs execution flow to see whether the caller has provided a MeshConfig.
Now that our InjectedMeshConfig input is in place, we need to handle the scenario where it is not provided (i.e., itâs null
). To accomplish this, weâll introduce a Branch node that checks whether a valid MeshConfig has been passed into the blueprint.
First, spawn a Branch node in your graph, connecting it to the next step in your blueprintâs flow. The Branch node evaluates a boolean condition, then routes the execution to True or False pins based on the result.


- Locking in the MeshConfig

- A Mesh Resource, which serves as the basis for generating the default configuration. We can set this to our
PB_Body_Standard
mesh. - A config override key, used to retrieve a specialized configuration in the executing experience. This key plays a crucial role in injecting gameplay-specific functionality into a UBF-spawned character.

Fur RealâSpawning the Body and Applying a Custom Material
- Creating a Body Blueprint
BP_SpawnBody
. This blueprint will be responsible for spawning and configuring our bearâs body mesh and applying the stylized fur material that brings it to life.
- Spawning the Body Mesh
SpawnMesh
node to make this happen. This node requires three key inputs: a mesh resource, a parent SceneNode, and a MeshConfig.
For the mesh resource, weâll directly reference the PB_Body_Standard.glb
file, as the bearâs body mesh will remain consistent across all use cases and doesnât require runtime variability.
Now, regarding the Parent (SceneNode
) and Config (MeshConfig
) inputsâwhile weâve already created these in our main Bear blueprint, they donât exist within this new BP_SpawnFur
blueprint. Since sub-blueprints do not have access to their parentâs internal variables, we need to explicitly define them as inputs to our BP_SpawnBody
blueprint so they can be passed down when executed.
To do this, navigate to the Blueprint Inputs panel of BP_SpawnFur
and create the following:
- An input of type
SceneNode
, namedBear-SceneNode
- An input of type
MeshConfig
, namedBear-MeshConfig
SpawnMesh
node.

ExecuteBlueprint2
node to run our newly created BP_SpawnBody
. Once added, select BP_SpawnBody
from the dropdown in the node, and youâll see the input fields update to match the ones we defined earlierâautomatically exposing the Bear-SceneNode
and Bear-MeshConfig
inputs.
Now wire up the execution flow so that both paths from the earlier Branch
node lead into this ExecuteBlueprint2
call. This ensures that regardless of whether we created a new MeshConfig or used an injected one, we always proceed to spawn the bearâs body.
Lastly, connect the two variables we previously createdâBearSceneNode
and MeshConfig
âinto the corresponding inputs on the ExecuteBlueprint2
node.


- Applying the Fur Material
First
node, allows us to yield the first (and in our case, only) mesh renderer, which we can then feed into the Apply Material node.

- Set the render mode to UseDiffuse, since we want to apply a diffuse texture to color the fur.
- To keep things flexible and allow customization in future instances, letâs create a Blueprint Input of type
Resource<Texture>
for the diffuse texture. Give your new input a name and a default textureâwe will use the nameFur-DiffuseTexture
and give it the default valueT_PB_Fur_RaspberryRipple_1024.png
. - This diffuse / base color texture needs to have sRGB enabled, we can ensure this by leveraging a Set Texture Settings node. This node can take in the input texture, enable sRGB and output the texture with the correct settings appliedâ then we can connect this into the diffuse texture slot on our material node.

- Next, weâll add normal, ORM, height, and ID maps to enhance realism. For each of these textures, you can use Set Texture Settings again to ensure sRGB is disabled, then feed them into the corresponding inputs on the MakeFurMaterial node. We do not expect instances to change these textures so we can reference them directly in our set texture settings. Set the different texture inputs as follows:
- Normal Tex:
T_PB_Body_Standard_LOD0_NR_1024
- ORM:
T_PB_Body_Standard_LOD0_ORM_1024
- Height Map:
T_PB_Body_Standard_LOD0_H_1024
- ID Map:
T_PB_Body_Standard_LOD0_CSTM_1024
- Normal Tex:
- Lastly, letâs adjust some of the primitive parameters to finish off the materialâs appearance:
- Set Occlusion to 1.
- Set Roughness to 0.5.
- Set Metallic to 0.5.
- Ensure Use Normal Map is enabled.
- Ensure Use ORM is enabled.


BP_SpawnBody
blueprint, allowing it to be overridden by a parent blueprint or defaulting to the value we set earlier. However, our main Bear blueprintâthe one from which weâll eventually create instancesâdoesnât yet expose this input itself. To ensure we can control the fur texture (and thus the color) from our instances later on, letâs add a matching input to the Bear blueprint with the same default value. Once added, simply pass that input down into the BP_SpawnBody
execution, wiring it to the corresponding input to maintain consistency.

Eye on the Prize â Adding Customizable Eyes
- Creating the Spawn Eye Blueprint
BP_SpawnEye
. This blueprint will handle all the logic for spawning and configuring a single eye. Then, within our BP_SpawnBody
blueprint, weâll simply call BP_SpawnEye
twiceâonce for each eyeâpassing in the appropriate mesh and texture for the left and right sides respectively.
Letâs go ahead and create that new blueprint now.
- Spawning the Eye Mesh
SpawnMesh
node to bring our eyes into the scene. As a quick refresher, this node requires three key inputs: a Mesh Resource, a Parent SceneNode, and a MeshConfig.
Unlike our previous body blueprint where the mesh resource was fixed, the eye blueprint will need all three values to be passed in from the outside. This ensures it remains flexible and reusableâallowing us to use the same blueprint for both the left and right eye, with different inputs for each.
Letâs go ahead and define the inputs in our blueprint now:
- A
Resource<Mesh>
input with nameEye-MeshResource
- A
SceneNode
input with nameBear-SceneNode
- A
MeshConfig
input with nameBear-MeshConfig
SpawnMesh
node.

BP_SpawnBody
blueprint, we can now follow on from spawning the bearâs body and applying its fur by executing our newly created BP_SpawnEye
blueprintâtwice, once for each eye. Just like before, weâll use the ExecuteBlueprint2
node to call the eye blueprint and pass in the necessary inputs.
For both calls, weâll connect the existing Bear-SceneNode
and Bear-MeshConfig
variables to their respective inputs on the node. The only thing that changes between the two executions is the mesh resource we provide to the EyeResource
input.
- For the left eye, use the resource:
SK_PB_Standard_EyeLeft_LOD0
- For the right eye, use the resource:
SK_PB_Standard_EyeRight_LOD0


- Applying the Eye Material
BP_SpawnEye
blueprint, letâs continue from where we left off after spawning the mesh by applying a materialâjust as we usually doâusing the Apply Material node.
As always, we can leave the Index input of the Apply Material node at 0
(targeting the first material slot). For the Renderer input, weâll use the first (and only) renderer returned from the SpawnMesh outputs. To retrieve it, we can use the First node from the array.

true
, then connect the texture output to the Diffuse Texture input of the Make PBR Material node.
Now for the actual texture resourceâwe want to make this customizable, so letâs create an input in our graph of type Resource<Texture>
and name it Eye-DiffuseTexture
. We can give this a default value for testing, feel free to use any of the included eye BC textures:
T_PB_Eyes_Green_BC_1024
T_PB_Eyes_Purple_BC_1024
T_PB_Eyes_Red_BC_1024

false
this time. Since these textures wonât change, we can directly reference them. The textures to use are included in your resources and map to:
- Normal:
T_PB_Eyes_NR_1024
- ORM:
T_PB_Eyes_ORM_16
- RenderMode:
UseDiffuse
- Opacity:
1
- Occlusion:
1
- Roughness:
0.5
- Metallic:
0.5
- Use Normal Map:
true
- Use ORM:
true


- Making the Eyes Customizable
Eye-DiffuseTexture
is an input to the BP_SpawnEye
blueprint, which means it can be set within the BP_SpawnBody
blueprint that calls it. However, to make customization even more accessible, we want to expose this input at the top level in our BP_Bear
blueprint.
To do this, weâll add a new input to the BP_SpawnBody
blueprint and link it to the existing input when executing BP_SpawnEye
.

BP_Bear
blueprintâadding a new input and connecting it to the ExecuteBlueprint2
node for BP_SpawnBody
.

All Eyes on Me â Binding the Eyes to the Body
With the eye meshes now spawned and in place, the next step is to ensure they remain properly aligned and animated with the characterâs body. Without this connection, the eyes would stay static whenever the character moves. To handle this, we need to bind the eye meshes to the bodyâs skeletonâbut only if a valid reference to that skeleton is available. Start by adding a new input to your blueprint, naming it something likeIn-BodySkeleton
, and setting its type to MeshRenderer.
After spawning the eye mesh and applying a material, insert a Branch node. Use the getter for your In-BodySkeleton
input and connect it to an IsNull node. The output of that node will control the condition of your branch, determining whether or not we proceed with binding.
Now, on the FALSE path (meaning the skeleton is valid), drop in a Bind Meshes node. This is what links the eyes to the bodyâs rig so they animate together naturally.
The Bind Meshes node expects two inputs:
- Meshes: An array of mesh renderers to bind. Youâll connect this directly from the output of the node that spawns your eye meshes.
- Skeleton: This is the source mesh rendererâthe rigâthat the other meshes will follow. Simply drag the âIn-Skeletonâ blueprint input into this input.

BP_SpawnBody
blueprint. For now, the Spawn Eye blueprint setup is complete.
Bear-y Unique â Crafting Custom Bear Instances
With that, our Party Bearâs base blueprint is complete, and we now have the ability to render a Party Bear. This base bear blueprint acts as the template or foundational recipeâit defines how to render any bear, while allowing us to configure the colors of the eyes and fur through its inputs. Essentially, itâs like having a flexible character template that can be customized at runtime. Instead of duplicating this entire blueprint for every variation we might want (which would be cumbersome and prone to errors), we can leverage blueprint instances. Think of a blueprint instance as a customized version of the base blueprintâa way to define specific configurations without modifying the original. For example, one instance might render a bear with blue fur and green eyes, while another could render a bear with red fur and yellow eyesâall while keeping the underlying logic of the base blueprint intact. This approach makes it incredibly efficient and easy to manage multiple variations without duplicating code. To create some instances, navigate to our main BP_Bear blueprint and, in the inspector panel on the left, select the Instances menu. From here, select Create Blueprint Instance. This will immediately generate an instance of the blueprint, allowing you to customize any of the exposed inputs. In our case, these inputs are the Fur and Eye Diffuse textures. Change these values to whatever you like, and then save your instance in the Bear folder with a suitable nameâweâll use BPI_SimpleBear (using BPI to denote a blueprint instance).

Thread by Thread â Building Our Accessory Arsenal
Now that our Party Bear is fully formed and sporting a great look, itâs time to take his style to the next level with clothing and accessories! In this section, weâll focus on creating and managing these accessory blueprintsâranging from hats to jackets, and eyewear.Creating the Base Accessory Blueprint
To maintain the same modular philosophy we used for the bearâs body and eyes, weâll start by creating a base accessory blueprint that can handle spawning any generic accessory. Each unique hat, jacket, or pair of glasses will then become an instance of this blueprintâmuch like the approach we used for the bear. You will notice some similarities to sections of the main Bear blueprint we set up initially, the reason for this is that it allows us to set up our accessories in such a way that they remain fully independent, allowing them to be viewed and configured on their own, while also making it easy to attach them to a parent (like our Party Bear).- Setting Up the Parent Scene Node
BP_Accessory
. This blueprint will resemble much of the logic from the main bear blueprint but focused on accessories instead of a full character.
In the Blueprint Inputs panel, add a new input of type SceneNode
, naming it something like In-Parent
. This input will determine where in the scene the accessory is attached; if a valid scene node is passed in, the accessory will become a child of that node. If not, it remains independent.
Inside the blueprint, place a CreateSceneNode node. Drag In-Parent
from your variables into the graph and connect it to the Parent pin of CreateSceneNode. This ensures that, if provided, the accessoryâs newly created scene node will be a child of the passed-in parent. For the Name, feel free to use something like âAccessoryâ.
Next, add a private variable of type SceneNode
âcall it Parent
to differentiate it from In-Parent
. Spawn a Set Parent node, linking it to the output of CreateSceneNode. This variable will be used later to anchor any meshes we spawn.

- Handling the MeshConfig
MeshConfig
âweâll call it In-MeshConfig
. This will allow the accessory to either use an existing config provided by a parent blueprint or create its own if nothing is passed.
Drag In-MeshConfig
into the graph and feed it into an IsNull node, then add a Branch node. Wire the boolean output of IsNull to the Condition input of the Branch, splitting the logic based on whether a valid MeshConfig has been provided.
With this branch node in place we can split the execution into two flows:
- True Path (Null): If
In-MeshConfig
is null, weâll create a new MeshConfig. First, add an input of typeResource<Mesh>
âcall itIn-Mesh
âso that we can specify which mesh this accessory will use. Next, spawn a CreateMeshConfig node and connectIn-Mesh
to its Resource pin. - False Path (Not Null): If
In-MeshConfig
is valid, weâll just reuse it.
MeshConfig
âletâs call it MeshConfig
âand place Set MeshConfig nodes in each path of the Branch. In the true path, set it to the output of CreateMeshConfig, and in the false path, set it to In-MeshConfig
. This way, the rest of the blueprint can access a âfinalâ MeshConfig variable, regardless of whether we created it or inherited it.

- Spawning the Mesh(es)
- For the Resource input, connect your
In-Mesh
input. - For the Parent input, hook up the
Parent
variable, which holds the scene node we created earlier. - For the Config input, connect the
MeshConfig
variable, which now holds either the inherited or newly created configuration.

- Binding the Mesh(es)
In-Skeleton
of type MeshRenderer
. This will be the rig that the accessory meshes follow.
After spawning the accessory meshes, insert a Branch node to check whether a valid skeleton has been passed in. You can do this by using the getter for In-Skeleton
, hooking it up to an IsNull node, and feeding that result into the condition input of the branch.
On the FALSE path (meaning the skeleton is valid) drop in a Bind Meshes node to connect the accessory meshes to the skeleton. Just like before, this node needs two inputs:
- Meshes: Connect this to the output from the accessory spawning node.
- Skeleton: Use the In-Skeleton blueprint input here.

- Applying Material(s)
Renderers
output from the SpawnMesh node into its Array
input. Youâll notice that the Array Element
type automatically updates to match the type of the input arrayâin this case, MeshRenderer
. This loop will give us access to each individual mesh renderer, one at a time.
The ForEach node provides two execution outputs:
- Loop Body: Executes once for each element in the array.
- Exec: Executes once after the loop has finished iterating through all elements.
Array Element
pin from the ForEach loopâthis ensures that each mesh renderer receives the material application.

- Creating a Dynamic PBR Material

- Spawn a Make PBR Material node into your blueprint.
-
Render Mode
Set the Render Mode to
UseDiffuse
, as weâll always want to use a diffuse texture for visual definition. -
Alpha Texture
Create an input into the blueprint named
In-AlphaTexture
of typeResource<Texture>
. Route this through a SetTextureSettings node to disable sRGB, and connect the output into theAlphaTex
input on the PBR material node. Then, enableUseAlphaTex
by setting that checkbox totrue
. -
Diffuse Texture
Repeat the process for the diffuse texture:
- Create an input named
In-DiffuseTexture
of typeResource<Texture>
. - Pass it through a SetTextureSettings node, this time with sRGB enabled.
- Connect it to the
DiffuseTex
input of the PBR material.
- Create an input named
-
Base Color
Leave the
BaseColor
input at its default. -
Use Alpha
The
UseAlpha
input should only be enabled if an alpha texture has actually been provided. To achieve this:- Drag a pin from the previously created
Get In-AlphaTexture
node. - Pipe it into an IsNull node, then invert the result using a Not node.
- Connect the result to the
UseAlpha
input.
- Drag a pin from the previously created
-
Fresnel IOR
Set this to
0
. -
Opacity
Set this to
1
for full visibility. -
Emission
To support emissive elements:
- Create an input called
In-EmissionTexture
of typeResource<Texture>
. - Use a SetTextureSettings node to disable sRGB.
- Connect the result to the
EmissiveTex
input. - As before, check if the texture is null, use a Not node, and connect the result to the
UseEmission
boolean input. - Set
EmissionColorBoost
andEmissionTintBoost
to1
. - Leave the
UseEmissionTint
andEmissionTintColor
settings at their defaults.
- Create an input called
- Normal Map and ORM Textures
- Create inputs
In-NormalTexture
andIn-ORMTexture
of typeResource<Texture>
. - Pipe each through SetTextureSettings with sRGB disabled.
- Use IsNull â Not logic to control
UseNormalMap
andUseORM
, respectively. - Connect the textures and booleans to their respective PBR material inputs.
- Final Float Properties
- Set
Occlusion
to1
- Set
Roughness
to0.5
- Set
Metallic
to0.5
Apply Material
node you created earlier in the ForEach loop.
And with that, your base accessory blueprint is completeâflexible, modular, and fully customizable from the outside! All that is left is to start creating some accessories!
Creating the Accessory Instances using Blueprint Instances
With our base accessory blueprint now complete, weâre ready to start bringing some actual accessories to life! In this step, weâll create individual Blueprint Instances for each specific accessoryâstarting with a cozy beanie to keep our Party Bear warm.- Beanie â Cozy, Warm, and Stylish
Accessories
folder in the Project Explorer, right-click and select New Blueprint Instance. Name this instance something descriptive; weâll go with BPI_Accessory_Head_Beanie
. Youâll be prompted to select a base blueprintâchoose the BP_Accessory
blueprint we just finished setting up.
Once your instance is created, head over to the Inspector panel on the left side and open the Overrides section. This is where youâll find all the configurable inputs that we exposed in the base accessory blueprint. Letâs go ahead and provide the correct values for our beanie accessory:
In-Mesh
:PB_Head_Beanie.glb
In-DiffuseTexture
:T_PB_Beanie_Head_BC_1024.png
In-NormalTexture
:T_PB_Beanie_Head_NR_1024.png
In-ORMTexture
:T_PB_Beanie_Head_ORM_64.png

- Crown â Fit for a King
BP_Accessory
. This time, however, weâll use the following overrides to configure our crown:
In-Mesh
:PB_Head_Crown.glb
In-DiffuseTexture
:T_PB_Crown_Head_BC_1024.png
In-NormalTexture
:T_PB_Crown_Head_NR_1024.png
In-ORMTexture
:T_PB_Crown_Head_ORM_1024.png

- Space Suit â Ready for Lift Off
BP_Accessory
blueprint. Create a new blueprint instance and name it something like BPI_Accessory_Clothing_SpaceSuit
. When prompted, select BP_Accessory
as the base blueprint.
In the overrides section of the instance, plug in the following values:
In-Mesh
:PB_Clothing_SpaceSuit.glb
In-DiffuseTexture
:T_PB_SpaceSuit_Clothing_BC_1024.png
In-NormalTexture
:T_PB_SpaceSuit_Clothing_NR_1024.png
In-ORMTexture
:T_PB_SpaceSuit_Clothing_ORM_1024.png

- Hawaiian Shirt â Ready for the Tropics
BP_Accessory
blueprint as the foundation.
Create a new blueprint instance in the appropriate folder and name it something like BPI_Accessory_Clothing_HawaiianShirt
. When prompted, set its base to BP_Accessory
.
In the overrides section, set the following values:
In-Mesh
:PB_Clothing_HawaiianShirt.glb
In-DiffuseTexture
:T_PB_HawaiianShirt_Clothing_BC_1024.png
In-NormalTexture
:T_PB_HawaiianShirt_Clothing_NR_1024.png
In-ORMTexture
:T_PB_HawaiianShirt_Clothing_ORM_1024.png

- Cyclops Glasses â One Lens to Rule Them All
BPI_Accessory_Eyes_CyclopsGlasses
, based on the BP_Accessory
blueprint.
In the overrides panel, set the following:
In-Mesh
:PB_Eyewear_CyclopsGlasses.glb
In-DiffuseTexture
:T_PB_CyclopsGlasses_Eyewear_BC_1024.png
In-NormalTexture
:T_PB_CyclopsGlasses_Eyewear_NR_1024.png
In-ORMTexture
:T_PB_CyclopsGlasses_Eyewear_ORM_1024.png

- Eye Patch â A Bear with a Past
BPI_Accessory_Eyes_EyePatch
using BP_Accessory
as the base.
Apply the following input overrides:
In-Mesh
:PB_Eyewear_EyePatch.glb
In-DiffuseTexture
:T_PB_EyePatch_Eyewear_BC_1024.png
In-NormalTexture
:T_PB_EyePatch_Eyewear_NR_1024.png
In-ORMTexture
:T_PB_EyePatch_Eyewear_ORM_1024.png

Dressed to Impress â Equipping Our Bear with Accessories
Weâre almost thereâour Party Bear is fully built, and weâve put together a wardrobe of stylish accessories. Now, itâs time to teach our bear how to wear those accessories by wiring them into our mainBP_Bear
blueprint.
Leveraging our Bearâs Skeleton
Before we start making use of our accessory blueprint instances, remember that both our accessories and our eyes need a skeleton to bind to. Specifically, each of these blueprints expects an input calledIn-Skeleton
, which refers to the MeshRenderer of the bearâs body. This allows the meshes to animate correctly in sync with the bearâs movements.
Now hereâs the catch: the bearâs body mesh is actually spawned inside the BP_SpawnBody
blueprintânot directly within BP_Bear
. So we need a way to pass the MeshRenderer
back up to the parent blueprint so it can be forwarded to the accessory blueprints.
To do this, weâll use a Blueprint Output.
Head into the BP_SpawnBody
blueprint and open the Blueprint Outputs section in the inspector. Create a new output of type MeshRenderer
and call it Out-BodySkeleton
.
You may recall that right after spawning the body, we stored the first MeshRenderer
in a variable called BodySkeleton
. All we need to do now is expose that as an output. At the end of the graph, add a SetOutputs
node. This node allows you to specify what values to return to the parent blueprint. Connect the BodySkeleton
variable to the Out-BodySkeleton
input pin.

BP_SpawnBody
itself, you should also make sure to connect the BodySkeleton variable to the In-Skeleton input on both of your BP_SpawnEye
blueprint calls.

BP_Bear
blueprint, youâll now notice that the ExecuteBlueprint2
node calling BP_SpawnBody
now exposes an output pin for Out-BodySkeleton
. Letâs store this value in a new variable named BodySkeleton
of type MeshRenderer
. We can then use this variable to feed the In-Skeleton
input of our clothing accessory node.

Equipping our First Accessory
Time to make use of our created Accessory Blueprint Instances. To do that, weâll now add a newExecuteBlueprint2
node and tack it on to the end of our execution logic.
When working with the ExecuteBlueprint2
node, you can select a specific blueprint or blueprint instance directly from the dropdown. Once selected, UBF Studio automatically populates the nodeâs inputs and outputs to match the selected blueprintâs interface. You can try this now by selecting one of the accessory blueprint instances we created earlierâsuch as BPI_Accessory_Clothing_HawaiianShirt
âand youâll see all of the exposed inputs appear:

MeshConfig
, SceneNode
(Parent), and Skeleton
. The rest of the parametersâlike Mesh
, Textures
, and other visual elementsâshould be defined by the blueprint instance we pass in. Unfortunately, if we select a blueprint instance directly in the node, any unassigned fields are still overridden as null
âwhich unintentionally wipes out the default values inside the instance. In other words, weâre nullifying the behavior of the instance even if we leave those fields empty.
Note: This is a known limitation in the current version of UBF Studio. A future release will improve this workflow by allowing users to selectively disable overrides directly within the node interface. Until then, we can apply a simple workaround.
BP_AccessoryTemplate
.
In your Accessories
folder, create a new blueprint and name it BP_AccessoryTemplate
. Inside the Blueprint Inspector, add the following inputsâensuring the names and types match exactly with those from BP_Accessory
:
In-MeshConfig
âMeshConfig
In-Parent
âSceneNode
In-Skeleton
âMeshRenderer

BP_Bear
blueprint. In your ExecuteBlueprint2
node, select BP_AccessoryTemplate
from the dropdown. Youâll notice the node now exposes only the three inputs we care aboutâperfect for our needs.
Even though the node is configured with this template, we donât actually want to run that blueprint. At runtime, we want to dynamically execute the real blueprint instanceâlike the Hawaiian shirt. To support this, weâll create an input into BP_Bear
that allows us to specify which accessory blueprint (or blueprint instance) should be used.
Open the Blueprint Inputs section in the inspector panel and create a new input of type Resource<Blueprint>
. Name it In-ClothingBlueprint
. Then, simply drag in the new input into the blueprint and connect it to the Blueprint input pin on the ExecuteBlueprint2
node.
Finally, connect the three required input pins using the variables weâve already prepared:
MeshConfig
âIn-MeshConfig
BearSceneNode
âIn-Parent
BodySkeleton
âIn-Skeleton

BPI_SimpleBear
blueprint instance and set the In-ClothingBlueprint
field to one of your accessory instancesâletâs go with the Hawaiian shirt for that perfect summer vibe.
Save your instance, open the UBF Previewer, and hit Preview in the top-right corner of the viewport.
You should now see your fully dressed bear, complete with laid-back island styleâready to party like itâs luau season in Fluf World!

Note: When previewing, you will likely see an error log stating:
[SpawnMesh] Failed to get input 'Config'
- this is an expected log and it occurs because the Previewer does not have any built-in configs.The Full Ensemble
With the clothing slot complete, all thatâs left is to wire up the rest of the accessory slots we want to supportâHead and Eyes. Just like before, add two new inputs to yourBP_Bear
blueprint:
In-HeadBlueprint
âResource<Blueprint>
In-EyeBlueprint
âResource<Blueprint>
ExecuteBlueprint2
nodesâone for each accessory typeâand connect them in series at the end of your existing execution flow. For each node:
- Set the blueprint to
BP_AccessoryTemplate
to expose the correct input signature. - Connect your existing variables to the corresponding input pins:
MeshConfig
BearSceneNode
BodySkeleton
- Finally, override the
Blueprint
input by plugging in the matchingIn-HeadBlueprint
orIn-EyeBlueprint
input variable.

BPI_SimpleBear
blueprint instance, and you should see both In-EyeBlueprint
and In-HeadBlueprint
as available fields. Select your favorite blueprint instances for each slotâweâll go with Cyclops Glasses and the Crownâhit Preview, and there you have itâŠ
A party-ready bear with full drip, from head to toe!

Thatâs a WrapâFluf Worldâs Freshest Fit
Youâve done it! Weâve gone from a humble base blueprint to a fully modular, mix-and-match dressing system worthy of the Fluf World Fashion Show runway. With just a few reusable componentsâsmart use of nested blueprints, input parameters, and dynamic blueprint instancesâweâve given Party Bear the ultimate wardrobe. From cozy beanies to space suits, and stylish eyewear to royalty-approved crowns, your bear can now dress for any occasion⊠in real time, no patching required. Even better, this system is fully extensible. Add new accessories, create more blueprint instances, or even build an entire outfit managerâthe possibilities are endless. Whether Party Bear is headed to a beach party, outer space, or a secret pirate rave, heâll always be dressed to impress. So go ahead, hit that Preview button one last time and watch your bear shine.