# DOCUMENTATION

Documentation for Switchboard Studios Assets

Welcome! This is our documentation hub for Switchboard Studios content. Here you'll find how to implement some of our more complex packs, such as VR Hands or the Vehicle Variety Pack.


# FIRST PERSON VEHICLE INTERACTION SYSTEM

**First Person Vehicle Interaction System or FPVIS for short** is a First Person orientated character controller, world space UI system and vehicle controller system for Unreal Engine 4 + 5. Designed as an extension of the free Vehicle Variety Pack FPVIS intends to give designers the option to create believable and immersive interaction systems for Unreal Engine.

## Before We Begin

Before diving into FPVIS, check out this quick overview video below, which runs over the core design elements of the pack.

{% embed url="<https://www.youtube.com/watch?v=ykf7JswqbBI>" %}


# At a Glance

An overview of the three main components of AVIS

## First Person Character Controller

The first system of FPVIS is the First Person Character controller, modified from the standard character controller system the FPS Controller is designed to be un-obtuse and intuitive for the player.&#x20;

We believe that character movement shouldn't be overly complex - players movement is a number one priority so we designed the controller to reflect this.

Movement is designed with player freedom in mind and offer seamless movement throughout scenes - no clunky camera sway, no jarring motion anticipation. You want to move? - The controller does it.

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FCTllhNpezrjGnGzaQsEG%2FFirstPersonController_01.jpg?alt=media\&token=1b5e6a74-5d6e-49b6-b5c2-fe83eb8a18a4)

## Vehicles

Vehicles are the main element of this pack - designed around the same mindset as the First Person Character - vehicles are built to be intuitively operated and immersive in their behaviour. Worldspace UI elements for opening doors or controlling items like handbrakes and an easily modifiable blueprint system to expand it to your own vehicles.

Vehicles are made for the Chaos Vehicle Plug-in in Unreal 5, and the traditional PhysX system in Unreal 4.

Vehicles will only be supported on Unreal 4 until Unreal 5 becomes more stable and widespread.

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F34FGWEPwcm7UUc9WvToV%2FCover.jpg?alt=media\&token=1d10ed1e-0b78-4de8-bc88-842e9e47aa50)

## Worldspace User Interface

The third and final element of this pack, which brings everything together for the end user is the UI. Once again designed on the same principals as the Character Controller and Vehicles, the UI is designed around immersion. Instead of drawing the player away trying to find the correct hotkeys to press, players are encouraged to use their surroundings to control the vehicle.

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F3yisZGXgTAz6TKQCnH7K%2FUI_01.jpg?alt=media\&token=0d145d71-5ba3-4686-9ced-ca4bccdd1bc3)


# First Person Character Overview

A brief rundown of the FPS Character

*The "FirstPersonCharacter" blueprint is located under:*

*VehicleVarietyAdv -> Blueprints -> FirstPersonCharacter*

The first person character contains:

* A movement system (Including sprint)
* A camera zoom
* Physics object pickup/throw system (with weight check)
* A line trace for interacting with objects (opening doors, pressing buttons)
* A line trace for detecting UI elements
* A minimal UI for immersion

In order for users to become comfortable with how the blueprint works - most actions are not exposed as variables - this is intentional, as you can look around the blueprint and understand how they behave with the rest of the graph. These are outlined below.

## Object Pickup System + Interact

The object system works by firing a trace to detect if an asset is simulating physics, checks the asset's weight in KG and then attaches it to the 'Physics Handle' component. The player can drop the object (Interact/E) or throw it (Left Mouse Button).&#x20;

Players can also interact with non-physics elements and fire an interaction trace. This is designed for buttons, doors and other interactable elements.

The blueprint is designated into commented sections, this should allow you to understand what each section of blueprint is doing.

![Players can adjust the distance objects are picked up from by adjusting this variable](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FtSqiU7oO8Hohsu3q39va%2FFPS_Distance_01.jpg?alt=media\&token=cf2acc38-020e-4538-8a03-e55d96c9ad3a)

![The location of the held object can be adjusted by moving the "HeldObjectLocation" in the viewport](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F9LLzpIbUdmeG6AtpgbMv%2FHeldObject_01.jpg?alt=media\&token=49285f11-5671-4c07-865b-6805c0d679b4)

![The maximum weight a player can pick up can be adjusted here. This unit is in kilograms](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FjtLfGEpuPpdgtpdTCsv8%2FWeight_01.jpg?alt=media\&token=063937b8-66f6-4cb4-8279-321d078b7b64)

![If the object the player interacts with doesn't implement physics, the character controller checks to see if it implements an interface instead - this is the main component for the interaction system.](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FzEz6rQSqLUv1KdoEhWGA%2FInterface_01.jpg?alt=media\&token=e2313f76-ac8d-46f0-898f-bb2bc5be8820)

![This section at the bottom is the foundation for the UI, the trace distance can be adjusted in the same way as the object pickup. ](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FwlfToGvn9aGXl15fTdsn%2FUI_02.jpg?alt=media\&token=308623dd-d9b9-4ab0-9658-ea00d16916fb)

![Sprint Speed and Walk Speed are best adjusted in these variables](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FEqNZWoQjaxvyRPsFPfo2%2FMovement_02.jpg?alt=media\&token=9a48b49c-4eb9-4288-9f49-6c4d75a12da5)

![Character movement settings can be adjusted under the Character Movement Component ](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FhSIhXtKH4HK4ZgJnLVJr%2FMovement_01.jpg?alt=media\&token=7f9db6a9-68b3-4e1e-894c-0b72fefdab11)


# World Space User Interface

A brief rundown of how the UI elements work

*The "BP\_UIOverlap" blueprint is located under:*

*VehicleVarietyAdv -> Blueprints -> FirstPersonCharacter -> Interactables*

The UI elements are designed relatively simplistically. The code detects the FirstPersonCharacter's trace, and shows the text if it hits the "UI Detection Box" and turns it off if it is no longer hitting it.

Text is also set up to align itself to the player camera's location. This function only enables itself if the trigger box is hit, in order to save memory.

Because of the reusable nature of this asset, various elements are promoted to variables which you can edit on a per-instance basis. You can adjust:

* Text
* Text Size
* Text Location Offset (default centred)
* Trigger volume size
* Debug tickbox to help with positioning.

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FJb9odQCijlDHjZ92rHPv%2FUI_03.jpg?alt=media\&token=be67b757-9a36-4070-bf8e-934fdf50fe3a)


# Vehicles

A brief rundown of how the vehicles work

*The vehicle blueprints are located under*&#x20;

*VehicleVarietyAdv -> Blueprints -> Vehicles*

*Each vehicle has its own respective folder containing various configs such as Torque Curves, Slipgraphs and Animation Blueprints.*

Vehicles are by far the most complex and difficult system in the whole pack. Although they combine elements from the UI & First person systems the vehicles are in themselves their own unique system with multiple small adjustments that are required in order to have them function correctly. You can find a more in depth overview of the vehicles and how to implement your own from scratch in the "Vehicles" guide. This page functions as an overview of the features.

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FskTwLjJEM89vbnIikcEI%2FVehicles01.jpg?alt=media\&token=c269e88c-24cf-4115-a319-29de61b5a2f4)


# Vehicles

A guide for implementing your own vehicles

These pages will go through the steps required to implement your vehicles to our system.

{% hint style="info" %}
FOLLOW THIS GUIDE IN THE ENGINE YOU ARE WORKING IN, CONVERTING FROM UNREAL 4 TO UNREAL 5 IS AN ANNOYING PROCESS DUE TO THE SWITCH FROM PHYSX TO CHAOS. IF YOU STILL NEED TO CONVERT YOUR ASSETS, FOLLOW THE GUIDE UNDER [UNREAL 5 CONVERSION](/guides/first-person-vehicle-interaction-system/vehicles/unreal-5-conversion)

This guide is written in UE4 - the only differences are highlighted under [Vehicle Asset Setup - Config Adjustment (UE5)](/guides/first-person-vehicle-interaction-system/vehicles/vehicle-setup-config-asset-adjustment-ue5)
{% endhint %}

Resources:

* [Our Vehicle Rig](https://drive.google.com/file/d/1-fXAPqHppAxd5MPEJMz1lsexWPDn7qY5/view?usp=sharing)
* [Demonstration Hatchback (Rigged)](https://drive.google.com/file/d/1oZX02v2kMJzAdPxizEGpZy8B2N2tV_SC/view?usp=sharing)

![The demonstration vehicle we'll be using for this tutorial](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FlKevTkzyqtmeTjY56n2p%2FNissan01.jpg?alt=media\&token=a5b8f63a-594d-48ef-a430-2afbfdac71fe)

The example vehicle provided is not for commercial use and is purely for demonstration purposes.

Feel free to use it in any non-commercial project within Unreal.


# Vehicle Setup - DCC Tool

Setting up the Vehicle in your selected DCC

This page will cover how you should set up your vehicle in your Digital Content Creation Tool, in this example I will be using Maya - terms will be generic, and achievable in most programs.

This step is completed for you in our resources section - this page serves as reference for creating your own custom vehicles.

![How the vehicle should look in your DCC](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FCBlPnKJ9XH1wLltDaHrD%2FDCC_01.jpg?alt=media\&token=98306262-a534-4886-9861-70f6aebef11e)

Once you've modelled your chosen vehicle - the next step will be to rig it. For FPVIS here's a few things to note for your vehicle rig:

* Our Rig is different from the standard UE4 vehicle rig - make sure you're using the FPVIS skeleton when creating your vehicle
* Anything on a hinge should not be rigged; doors, trunks, openable devices etc
* The steering wheel should also be rigged using our vehicle skeleton
* Wheels should be rigged to their corresponding joints - the left front wheel to "Wheel\_Front\_Left"
* More engine specific notes can be found on the Unreal Engine Wiki, [Here](https://docs.unrealengine.com/4.27/en-US/InteractiveExperiences/Vehicles/VehicleContentCreation/).

For the vehicle's doors and moving items, you'll want to place the pivot in a sensible place and export them from a sensible location. The headlights are exported already positioned whereas the rear door is exported at 0,0,0. You can see examples of each asset below.

![The side door is exported with the Z-Axis already positioned. This is personal preference - you may find it better to export at 0,0,0 - like the rear door has been. Since the headlights don't move - they are exported in the exact position they'll be used in engine.](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F7JOPcVPmweyFwfEmW7IV%2FDCC_02.jpg?alt=media\&token=3f47cd41-1d9f-4700-84f3-f508ab1913df)


# Vehicle Setup - Import

Setting up your vehicle in Unreal Engine

Once your vehicle is set up and rigged, it's time to bring it into engine. Simply import ***"SK\_Hatchback\_01a"*** into unreal. Make sure you select the skeleton from the FPVIS pack -"***SK\_Vehicle\_Skeleton"*** You should now have both a physics asset and a skeleton in engine.

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FMxLZa13NTwWD2yyPTgCm%2FImport_02.jpg?alt=media\&token=e347d3b9-31de-4cd1-9cad-41299ef4fe54)

The setup for the physics asset is covered in the Unreal Documentation, however ours differs slightly.&#x20;

Open your physics asset and delete all the physics components

![This will delete all the physics data - allowing us to start from fresh with our own setup.](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FEoEZBvLLhFUuKpm3WfUt%2FImport_03.jpg?alt=media\&token=6cfb114c-99c9-4f43-932f-361666c3aaf7)

Go to options and select "Show all bones" you should see all the bones available - the ROOT, four wheels and the steering wheel.

<div align="left"><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FfdqU5Ob8gyFRrgcK58BR%2FImport_04.jpg?alt=media&amp;token=1455a030-e6f5-4b04-8cdf-ec6fd711404c" alt="Options -> Show All Bones"> <img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FQIs55XPhPFTVWyxKLQyv%2FImport_05.jpg?alt=media&amp;token=52ba8e3a-fd63-408f-859f-b581be890398" alt="The Skeleton tree after selecting this option"></div>

Select the four wheel joints and head on over to the right side of the window, there should be a "tools" tab - set your primitive type to sphere and select "Add Bodies"

![Tools -> Primitive Type -> Sphere -> Add Bodies](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FqRcRjxC4q6w6AhWStOuq%2FImport_06.jpg?alt=media\&token=7f62dae8-ec3d-4a62-92df-148f015a5d9c)

Once this is done, head on over to the details panel and set the Physics Type to "Kinematic"

![Set the wheels physics type to "Kinematic"](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FvYVxZHEUDrtr7DGhukzn%2FImport_07.jpg?alt=media\&token=cc4a5fb3-a643-4a2f-8b1b-be7e7c8c8191)

Next you'll want to generate the physics collision for the whole body - this is done for vehicle physics/balance and will not effect how the vehicle collides with things.

Select the vehicle root, head on over again to the tools panel and make the primitive type "Box"

Once the box is generated, position it how you'd like. This physics asset has an influence on the vehicle's balance - if you take a look at the box truck or campervan you can see how this asset has been adjusted to assist with the vehicle's overall handling.

![The initial collision box will likely be scaled/rotated/positioned strangely. Adjust the box to your liking - usually making it fit snugly to the vehicles proportions](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F7dGq0U4TFsJCnlTd5eVd%2FImport_08.jpg?alt=media\&token=f35782d5-3766-4edc-ad78-a92765ffc5ba)

Make sure you set the collision response on the vehicle's collision box to "Disabled"

![This will make the vehicle's main collision useful as a simulation weight only - the actual vehicle collision will be added later.](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FhdMRP9brdTj2QXZXWAmr%2FImport_09.jpg?alt=media\&token=904010c9-ff6e-4f06-85b3-aeec0e05fb64)

You can go through the standard art import process for the rest of the vehicle to add materials. We suggest using our material master shader to keep things consistent - just copy over a material instance from one of the other vehicle's materials folder and adjust it to your liking!

Make sure you set the compression type of the ORM maps to Masks (No sRGB) this ensures that the materials are all accurate.

![The vehicles imported materials/textures applied to the skeleton.](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F1FMDyI8K3635KPyLIHWG%2FImport_10.jpg?alt=media\&token=0e9ae137-eae9-4443-9170-afcc219d50ed)

You'll also want to import the vehicle's doors and any other separate objects as we'll be using these within the blueprint.

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F8q79WSKw3qxaucso4GJC%2FImport_11.jpg?alt=media\&token=77b98349-0301-4e25-b62e-206816390b9e)


# Vehicle Setup - Sockets

Adding asset locations to assist in positioning things like doors.

Once your assets are imported you might want to add sockets for assisting on positioning things like the UI, pivots and interaction elements. On static meshes this can be done in your DCC, or adjusted after import in engine. For more information see the [sockets page on the Unreal Engine Wiki](https://docs.unrealengine.com/4.27/en-US/WorkingWithContent/Types/StaticMeshes/HowTo/Sockets/)

The hatchback meshes come with sockets already positioned in Maya

In the Unreal 5 branch the vehicles have various sockets applied to static meshes


# Vehicle Setup - Config Asset Adjustments (UE4)

Setting up your config assets for use in the blueprint

Once you've gone through the vehicle setup stage you're finally in a spot where you can start to make your vehicle driveable. This page will go through using a correctly set up rig/physics asset to fit any vehicle to our system.

In order to start editing your new vehicle - head on over to the sedan section in the **"VehicleVarietyAdv -> Blueprints -> Sedan"** Folder and drag and copy the Sedan into our Hatchback folder.&#x20;

## Copying Files

![Make sure you are COPYING the file to the new location](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F5Q6AL3iLLKJXuybbTKQM%2FBlueprints_01.jpg?alt=media\&token=ceab0e38-22aa-4315-a830-705400c03816)

Now rename the blueprint to BP\_Hatchback, we're now ready to copy over the config files for the vehicle.

![Copying over Sedan\_Config to the Hatchback folder](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FzXSOEBfZMYB9EkrwTbbK%2FBlueprints_02.jpg?alt=media\&token=230be1fb-ea32-4a16-bd96-0cad877aa25d)

Make sure to rename each asset to their corresponding new owner.

![The new config files in their happy new home](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FCDx8Y5Enr9MLlirREgen%2FBlueprints_03.jpg?alt=media\&token=b8168cbe-6776-4ad5-bf82-9a4ab2fd4618)

## Animation Blueprint

Naturally these files require adjusting to match the new vehicle. Let's start with ABP\_Hatchback - open it up and in the event graph, we're going to change the cast to the sedan to cast to the new Hatchback blueprint we made in the previous steps. This blueprint is controlling wheel turning angle, as well as the steering wheel.

![The old animation blueprint, currently casting to the sedan](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FrsNpRmMDORtUcBkw9rbk%2FBlueprints_04.jpg?alt=media\&token=1c4c1756-9de9-454a-9af8-c44f1a5674ad) ![The cast has been changed to cast to the new vehicle "BP\_Hatchback" and we're now grabbing the steering angle from "BP\_Hatchback"](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FIXTBM4uRsPEinhmGi634%2FBlueprints_05.jpg?alt=media\&token=430c0dcb-6790-40bb-b3a6-fb03bbc62532) ![The new graph set up correctly. You should not have to adjust anything else in this Animation Blueprint.](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FCAGhqAZcrnIr1Lc9domt%2FBlueprints_06.jpg?alt=media\&token=a05fa6ad-3677-4c2d-b5b5-e4d4a5f041e8)

## Wheeled Vehicle Component

Now we'll adjust the values of the Vehicle Wheel class named "BP\_VW\_Hatchback"

Replace the tire config with the new Hatchback one and adjust the values of the wheel dimensions based off your measurements in your DCC. The measurements for this wheel are **31 for the Shape Radius Radius** and **19 for the Width**.

![Adjusting the values based off measurements in your DCC](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FngQZANI0UV5WcrM7CNlj%2FBlueprints_07.jpg?alt=media\&token=95fc94dd-dfb5-4323-9dfd-05e5788ec72e)

Everything should now be set up to adjust within the vehicle's blueprint.


# Vehicle Setup - Config Asset Adjustment (UE5)

Setting up your config assets for use in the blueprint

Once you've gone through the vehicle setup stage you're finally in a spot where you can start to make your vehicle driveable. This page will go through using a correctly set up rig/physics asset to fit any vehicle to our system.

In order to start editing your new vehicle - head on over to the sedan section in the **"VehicleVarietyAdv -> Blueprints -> Sedan"** Folder and drag and copy the Sedan into our Hatchback folder.&#x20;

## Copying Files

![Make sure you are COPYING the file to the new location](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FaHE6h4rBNi4gjFeW9NN0%2FCONFIG5_01.jpg?alt=media\&token=a4378cf0-ebd1-4589-a02f-9b85648d911b)

Now rename the blueprint to BP\_Hatchback, we're now ready to copy over the config files for the vehicle.

![Copying over files in Sedan\_Config to the Hatchback folder](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FH4Ueha1QuRdo8g2lzxOc%2FCONFIG5_02.jpg?alt=media\&token=3395cf78-82c0-4564-9f9f-7d0cb707780f)

Make sure to rename each asset to their corresponding new owner.

![The new config files in their happy new home](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F6EVoHlFtC2YvglB2ztuI%2FCONFIG5_03.jpg?alt=media\&token=15a5535f-3f82-4c7c-b548-bdc83f7634c6)

## Animation Blueprint

This process is the same as UE4, the images are from UE4 but the process doesn't change.

Naturally these files require adjusting to match the new vehicle. Let's start with ABP\_Hatchback - open it up and in the event graph, we're going to change the cast to the sedan to cast to the new Hatchback blueprint we made in the previous steps. This blueprint is controlling wheel turning angle, as well as the steering wheel.

![The old animation blueprint, currently casting to the sedan](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FrsNpRmMDORtUcBkw9rbk%2FBlueprints_04.jpg?alt=media\&token=1c4c1756-9de9-454a-9af8-c44f1a5674ad) ![The cast has been changed to cast to the new vehicle "BP\_Hatchback" and we're now grabbing the steering angle from "BP\_Hatchback"](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FIXTBM4uRsPEinhmGi634%2FBlueprints_05.jpg?alt=media\&token=430c0dcb-6790-40bb-b3a6-fb03bbc62532) ![The new graph set up correctly. You should not have to adjust anything else in this Animation Blueprint.](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FCAGhqAZcrnIr1Lc9domt%2FBlueprints_06.jpg?alt=media\&token=a05fa6ad-3677-4c2d-b5b5-e4d4a5f041e8)

## Chaos Wheeled Vehicle Component

Now we'll adjust the values of the Vehicle Wheel class named "BP\_Hatchback\_FrontWheel\_Chaos" and "BP\_Hatchback\_RearWheel\_Chaos"

Replace the tire config with the new Hatchback one and adjust the values of the wheel dimensions based off your measurements in your DCC. The measurements for this wheel are **31 for the Shape Radius Radius** and **19 for the Width**.

Add the slipgraph to the vehicle component, and make sure "Affected by Handbrake" is selected

Only add steering to the front wheel component

![Rear Wheel Setup](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F2AcERis0jjpuffj0tCAW%2FCONFIG5_04.jpg?alt=media\&token=6e19a386-8e5b-4b70-ade4-f8fccd188669) ![Front Wheel Setup](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FI0yKbXKoWZN5inPkHBa2%2FCONFIG5_05.jpg?alt=media\&token=11cf49c3-c4f1-40a9-9811-d10e38b313ef)

## Torque Graph

The vehicle's steering mechanics are very similar to UE4's, the only difference you need to be aware of in UE5 is that acceleration is driven by a **torque graph**

Simply add your hatchback torque graph we copied into the mechanical setup menu under the "Vehicle Movement Component" in the BP\_Hatchback asset

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FZFDg1Z2wo0hvfbaDXfaD%2FCONFIG5_06.jpg?alt=media\&token=a210c982-6236-4008-b6bf-1d686afc7cb6)

Everything should now be set up to adjust within the vehicle's blueprint.


# Vehicle Setup - Vehicle Blueprint

Adjusting locations and values within the blueprint to your custom vehicle

{% hint style="info" %}
The steps on this tutorial cover UE4 and UE5, there are slight differences - mostly the ones noted in the [Config Asset Adjustments (UE5)](/guides/first-person-vehicle-interaction-system/vehicles/vehicle-setup-config-asset-adjustment-ue5) page. If there's something that's not lining up, feel free to let us know via [Discord](https://discord.gg/J7sHaYZXrU).
{% endhint %}

Open up the BP\_Hatchback - you should see the entire vehicle graph. They should be divided up into sections highlighting what each area of the graph is doing.

![An overview of the vehicle's graph](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2Ft9Y58g6JniChn4DVjWqA%2FBlueprints_08.jpg?alt=media\&token=35c4546c-686d-4ee6-a17d-1376fbd467fd)

Firstly we're going to replace all the information the blueprint is using with our new assets. Currently the blueprint will be referencing all of the Sedan's information - we'll be swapping them out with the new Hatchback.

## Adjusting the Skeleton & Animation Blueprint

First of all, let's replace the Skeleton and Animation Blueprint. Select the "Mesh (VehicleMesh)" Component

![The vehicle pre-adjustment](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FPHoYQ8dP1jQCIMZYi32p%2FBlueprints_09.jpg?alt=media\&token=324d97c0-f1c4-4ffb-ad8e-ca0c01f62ed3)

![Replace SK\_Sedan with SK\_Hatchback](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FdSoOHUcPQPmVFvPYR27h%2FBlueprints_10.jpg?alt=media\&token=7bdab3b6-c065-4964-9892-7b2b0892854e)

![Change the vehicle's Anim Class to "ABP\_Hatchback"](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FN6KgWhAw1Mh9H7JmGto9%2FBlueprints_11.jpg?alt=media\&token=0c683ff0-cca2-42c5-b058-02be13a8a006)

At this point the vehicle should be driveable. You can test out the vehicle in the world scene and you will be able to interact with it and drive it, even with the sedan's doors in place.

The next steps will go through adjusting and replacing the sedan's doors to be in line with the hatchback.


# Object Positioning

Adjusting the location of the doors

Once you've done the previous steps you're ready to start adjusting the location of your doors. This process is fairly straightforward but has a few pitfalls that this page will go over.

## Adjusting the Camera

The most obvious component that needs quickly addressing is the camera component. This can be done by moving the SpringArm Component to the desired location. You can also adjust the camera component by selecting the camera component, it operates as a standard camera.

![Adjust the camera location using the SpringArm component](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FXZamr5OYTNzHbZnOfBLE%2FBlueprints_26.jpg?alt=media\&token=80cc873e-4c17-49b1-b2d4-6f98682c5702)

## Adjusting the Doors

The doors are a little more involved, let's start with the front left door of the hatchback. Open the hatchback blueprint and select the door, and replace the sedan's door with the new hatchback mesh, naturally - the position will incorrect&#x20;

![The sedan door replaced with the new hatchback door.](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FmHqX6VrZSQtGyFArErP0%2FBlueprints_12.jpg?alt=media\&token=84c6146c-7924-40a1-a26b-4c562e69f28c)

You can eyeball the position of the mesh, or if you know the exact coordinates from your DCC you can input them into the new location. You can also utilise sockets in this stage - but for now we'll just be setting the position manually.&#x20;

The location for this door is **84,-86,0.0**

![The door in the correct place](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FI0HHlgIOmztQf92ztvfX%2FBlueprints_13.jpg?alt=media\&token=cd5e6580-4797-4fe4-a795-7ff52bb42339)

Now if we head on over to the event graph, we need to adjust the animation for this door in the event graph's timeline. Open up the "Front Left Door" Event graph. The logic we'll be focusing on there are the start and ending locations + rotations of the door.

![The door logic in the Event graph, double click to open them](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FukeKu7cVnwkYXGvN3qgj%2FBlueprints_14.jpg?alt=media\&token=a47edb6e-bb02-408a-a99d-cc645ac1370a) ![The variables we'll be adjusting to make the door open correctly.](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FDTI6f2Sui7BOP6517Hqq%2FBlueprints_15.jpg?alt=media\&token=527f84ec-5711-49e5-8abd-cabcfffdeaeb)

In this instance the "Left Door Trans Start" and "Left Door Trans End" will be the same amount. This variable exists in the case of sliding doors, like the ones found on the box truck.

Copy and paste the location from the hatchback door into each of these variables

![You can copy and paste the exact numbers by right clicking the location transform](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FWURRaYqLz6RKMiMeUorO%2FBlueprints_16.jpg?alt=media\&token=054cd2a1-60b1-4af1-a869-56794e9d0524)

![You can paste the exact numbers by doing the same to the transform value on the variables! Remember to apply this to both the start and end variables. The scale is set incorrectly to 1.005, this can be adjusted to 1.](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FK5cMPcNrzGsil1iLMYeC%2FBlueprints_17.jpg?alt=media\&token=bec6dea5-f584-46df-9cd9-8def0d9e5643)

The rotation value can be manually adjusted in this instance. Pick a number you're comfortable with it rotating to in order to open, and set that variable on the Z-Axis. In this instance it opens 70 degrees.

![The start and end values of "Left Door Rot Start" and "Left Door Rot End"](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FDDmUveDrz5gUFkoFn1DN%2FBlueprints_18.jpg?alt=media\&token=5d96ab7c-6f4c-48e4-ac7b-2d69fe5cfe68)

Your front left door should now open and close when interacted with.&#x20;

Repeat this process on the other side, making sure to invert the scale axis accordingly and input the correct units for the corresponding doors. Many values will need inverting, including the rotation axis. Make sure you're updating the variables also!

![Remember that all values will need adjusting to match up for the opposite side - this usually involves adding a negative value here and there.](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F3tQaPHu3uJzVn2AqGrM9%2FBlueprints_19.jpg?alt=media\&token=a87c96b5-092e-4236-85c8-54845adcf21e)

If you've followed these steps correctly you should now have a front left and rear door set up to be opened when interacted with. You'll notice the UI isn't correctly placed and the two rear doors are also still there. We'll be using one of these for the trunk and and deleting the other.&#x20;

## Adding a Unique Door

Let's start with deleting the door we don't need. In this instance we'll use the rear right door&#x20;

![Delete the event graph for the right door](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FQJnXRPX1wze5Su6iBAIJ%2FBlueprints_20.jpg?alt=media\&token=c7f706d0-75fc-478c-ab49-a836502d7c5b) ![Delete the assets for the rear right door, including the UI elements and the blueprint](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2Fgr8emcJAxzrEPOVMo6Xu%2FBlueprints_21.jpg?alt=media\&token=a0670a43-a2d4-4525-bbb1-a32eb19b7bab)

Since the Hatchback has no rear doors at all, we'll be using the code for the rear left door for the trunk instead. Like in the previous steps, replace the mesh of the rear left door with the new mesh - in this instance ***SM\_HatchbackRearDoor\_01a***

You'll notice the mesh wont be correctly position, again you can adjust it by eye or grab the exact location from your DCC. These coordinates are **-140,0.0,143**

![The door in the new location - note that the UI and Interaction BP are offset in the wrong location - we will fix this later](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FCA9QoGVpGmKdEPyhj8kK%2FBlueprints_22.jpg?alt=media\&token=cfddf0b4-57e5-4226-acae-0004ece617d6)

You'll also need to adjust the animation for the door opening. If you open the **Rear Left Door** Animation graph, you can adjust these settings in the exact same way as the front two doors.

The difference with this asset is the door now rotates on the **Y-Axis** - a -80 degree adjustment from the start and end Y-Axis rotations will set this up correctly.

Remember to update the starting locations also!

![Updated start and end locations, as well as adjusting the rotation](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FsZeRP25SRKxMciXYUGeO%2FBlueprints_23.jpg?alt=media\&token=0c35bcf9-f77c-43e6-98a9-d7e2c6c5cc30)

## Adding a Unique Door To a Vehicle with More than Four Doors

You may run into the scenario that you have four openable doors and also require a trunk. Information regarding that can be found in the BP\_SUV blueprint. An extra interface action called "ExtraFunction" was added for this scenario.

Information regarding adding a completely new element can be found in the ["Extra Elements"](/guides/first-person-vehicle-interaction-system/vehicles/vehicle-setup-vehicle-blueprint/extra-elements) section.

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FNypebTRq52s1o4My9tdz%2FVehicleUI_10.jpg?alt=media\&token=5b0882df-095b-44fe-9d45-3ed989c7be54)

The UI and Interaction Blueprints will be placed in strange locations, we'll go over adjusting these in the next section.

## Exit Location

The exit location is defined by the "ExitLocation" component under the component tab

Make sure this element is off the ground to prevent clipping through the floor

Behaviour for this component can be problematic at speed or sharp angles, this will be addressed in a future update.

![The Exit Location in the blueprint. The Y-Axis determines which way the player faces when they exit the vehicle.](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FpWFVIrZj22m2TYTvJ2Ns%2FExitLocation_01.jpg?alt=media\&token=9832c7ce-2036-44aa-9e55-2b59546c54a9)

## Collisions and Headlights

Two invisible objects that need adjusting are collisions and headlights. As of right now they're still using the old sedan's meshes.

This can be corrected by simply replacing them with the correct components.

![Replacing the hatchback's collision with the correct one](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FHYOTUPHcqI0vwoZjV7ev%2FBlueprints_24.jpg?alt=media\&token=5b87b023-bc2a-4d62-ac0c-1776e207bd55) ![Replacing the hatchback's headlights with the correct one](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F6D5LaThWiJHzRzAgYdKe%2FBlueprints_25.jpg?alt=media\&token=52462aad-2367-4913-b9af-0169a9c0284a)


# UI Elements

Setting up the UI elements using both sockets and manual positioning

In the previous section, setting up the asset's locations and transforms meant that the interaction boxes and UI elements were offset in the wrong locations. This page goes over putting them in the correct places.

Once these elements are correctly set up, your vehicle is almost completely ready to be driven.

This page goes over both ways of positioning your UI elements.

The two methods are:

* Socket positioning - which can save you time if you know exactly the locations of your UI elements
* Manual positioning - Generally less efficient, but offers some flexibility in places.

## Socket Positioning

The hatchback meshes you imported should come with a few socket locations for your UI. Using the rear trunk mesh as an example, we can reposition the new UI by simply zeroing out the transforms and attaching it to the corresponding socket location

In the image below you can see the offset UI from positioning the new mesh. Not ideal and slow to reposition.

![The UI element in the incorrect position](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FAKr0affYwtS3ASWWNXBn%2FVehicleUI_01.jpg?alt=media\&token=78d42b6c-253e-4e58-a414-5c86c6ebcf35)

Zeroing out the transforms on the right wont do all the work, you also have to attach it to the correct socket location. In this instance - it's the UI\_Exterior socket.

![Attaching to the correct socket](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FN06dZQBbftO3MiL4m5Az%2FVehicleUI_02.jpg?alt=media\&token=ebba1af7-beec-40ee-a151-06a305e9ac68) ![Zeroing out the transforms](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F0g3GlY8paugS91yFmTGi%2FVehicleUI_03.jpg?alt=media\&token=6c2bb2ab-5bd8-415f-810b-9afa653ffe43)

You can do the same now with the interior UI element, and add any adjustments you'd like to on top of it.

You can also add a socket for the BP\_Interaction element, however adjusting this asset tends to required a lot of adjustments, and is best done manually.

![Positioning the interaction blueprint in a location works best.](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FRoM5Qwe4zcHUmzJtYUsS%2FVehicleUI_04.jpg?alt=media\&token=71b3b459-4f9d-42dc-ae05-764a7595a891)

For the interaction element - make sure the collision box covers the inside and outside - this ensures you can open the door from the inside and outside.

Although assets connected via socket will follow the mesh, some items wont - that's why it's best to nest all the relevant elements underneath the mesh. Both for functionality and for tidying up your component menu.

![Tidy menus are happy menus](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2Fg4Pocqde5JZPPgnQ1IwZ%2FVehicleUI_05.jpg?alt=media\&token=c3562e36-581e-463d-8071-368e7cd40b92)

You can now do the same with the front left and right doors by repeating the previous steps on them.

## Manual Positioning

If your mesh doesn't have sockets you can also position them manually. This method is slightly more cumbersome but does have a few benefits.

Although the positioning on the sedan was close - it's not quite perfect, we can simply grab and move the UI elements and place them in a position that makes sense. For the front left door the best location would be by the handle.

![Old Position](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FKnUZyME5VwTAYBPCfoGF%2FVehicleUI_06.jpg?alt=media\&token=ed8d53d1-4d8c-44da-8c81-245aa75a1e69) ![New Position](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FRk5Xh8txl8oWj1C0STfG%2FVehicleUI_07.jpg?alt=media\&token=950efefd-7e50-4493-a171-de507d074760)

You'll want to do this process for the interior UI element, as well as the BP\_Interaction element.

## Adjusting the Sizes of Each Element

There are slight differences in adjusting the UI element in comparison to the interaction element

#### BP\_Interaction Element

The interaction element is meant to be placed as quickly as possible - this means you can scale, rotate and transform it using the default transform components under the details tab

![Place it in the location you desire and that's all that's needed!](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FHXu5GOhHQ71LcJkbPrPu%2FVehicleUI_08.jpg?alt=media\&token=9577b45a-f2ac-41d3-a7ee-52700211ee43)

#### UI\_Overlap Element

For the UI elements, there are [a few variables that are exposed](/guides/first-person-vehicle-interaction-system/at-a-glance/world-space-user-interface) to help adjust you - since you might want the UI to run independently from the collision box, the UI comes as a separate element.

![Adjusting the UI element after it's been placed to increase the size of the collision box. Adjusting these values makes sure that the text doesn't get scaled/adjusted to values that would look odd.](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FgkSso3IbgZFtLaXINzYB%2FVehicleUI_09.jpg?alt=media\&token=17acd3e1-c663-4310-bab6-13e6fc618f72)

## Interior UI Elements

Inside the vehicle there are various UI/Interaction elements that need to be adjusted on a new vehicle. These are relatively straightforward to adjust. Some elements are hidden by default and will need unhiding and re-hiding to adjust.

The steering wheel can be adjusted by selecting and moving the BP\_Exit and the UI\_Exit Components.

![Default position](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FuySGaIVS78UpwC4q0hE0%2FVehicleUI_11.jpg?alt=media\&token=f45e148b-339b-47f9-a031-38de1f4ce378) ![New location (With the UI element set to visible)](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FceyS2nDtc6pLE2CHMf1e%2FVehicleUI_13.jpg?alt=media\&token=a3a3b7cb-0f92-4f05-bcf0-bd454ab41cfa)

![Once you're happy with the new location, remember to set the UI\_Exit to "Not Visible"](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F2NMB6x7ZsiqdkQdCrBiv%2FVehicleUI_12.jpg?alt=media\&token=e90d8d37-7ffa-4c46-a2b5-0aad92849851)

This process is the same for the handbrake, headlights and enter location. The only difference on the exit location is that there are two Interaction boxes - both are programmed to do the same thing.


# Extra Elements

Adding an extra element covered by the generic system

Sometimes you might want to add an extra element, such as a 5th door like the trunk. This page will help you go over what you need and how to integrate it using the already available system components.

The system currently supports up to FIVE extra vehicle functions. More can be added by request, or if you're familiar with interfaces - you can add as many as you want.

For this demonstration, I'll be adding a function which turns on a light in the trunk/boot of the hatchback.

![First off set up your pieces,  the box will be a signify the "button" in this instance.](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FKvjbcbBkBZsETGHPUz5l%2FExtra_01.jpg?alt=media\&token=ad8ceb39-add4-4156-95b5-80e5c092fbcf)

Once you have your pieces in place, it's time to set up your blueprint interaction.

Drag and drop the BP\_VehiclePart into your blueprint and position it where it most makes sense, in this instance, it's covering the entire cube button

BP\_VehiclePart can be found in **VehicleVarietyAdv -> Blueprints -> Vehicles**

![BP\_VehiclePart overlaid the cube button](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FJg1efBErRQRoMJiirKNj%2FExtra_02.jpg?alt=media\&token=e4560581-83cf-4ce8-b9ce-df8e6dcdf2af)

Next, select the BP\_VehiclePart and change the EVehicle Parts menu under the default area to "ExtraFunction01"

![Setting the vehicle part differentiates it from other parts of the vehicle](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FURqFubwSRyebJJciiZ9K%2FExtra_03.jpg?alt=media\&token=3d329ca7-4dfb-4fab-89d4-dea1712599bf)

Next, head on over to the event graph and add custom event "Event Extra Function 01"

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F8adgui6f0lfuzSGpnVqO%2FExtra_04.jpg?alt=media\&token=e03a0463-5e86-4cbf-8384-3f3b1f747839)

From here you can do absolutely anything you would normally do in a blueprint. In this instance, we'll toggle the visibility of the light on and off.

![Simple!](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FLlHdeDSR8c3FWpOuuogY%2FExtra_05.jpg?alt=media\&token=0243f00b-7573-48c0-bcd4-b518ab398fa5)

If you interact with the cube in editor now, you should be able to turn the light on and off

![One and off, exhilarating!](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2Fm2dVzxFyOMkJaFtT7J3f%2FExtra_06.jpg?alt=media\&token=a498ee10-9de0-44dc-8b5e-3102405e41e7)

Finally, you'll want to add your UI elements. The reason this is separate from the BP\_Interaction component is to add a bit more flexibility in where you place it. Simply drag and drop **BP\_UI\_Overlap** into the blueprint editor and set its general position

**BP\_UI\_Overalap** can be found under **VehicleVarietyAdv -> Blueprints -> FirstPersonCharacter -> Interactibles**

![Visibility debug enabled, custom text and positioned above the box - the UI is in an acceptable position](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FSNZKbCCMaeDIi0QM1xJm%2FExtra_07.jpg?alt=media\&token=1fa8fbf7-4c97-4bac-a4a4-5795a374c24d)

Now if you press play, the extra element should behave in exactly the same way as the rest of the interactable elements in the scene!


# Unreal 5 Conversion

If you created these vehicles in Unreal 4, and now require them in UE5 - this guide goes over that process.

{% hint style="info" %}
You don't need to start your project in Unreal 4 - if you are already in UE5 the previous guide will work exactly the same except for a few minor adjustments highlighted in [Vehicle Setup - Config Asset Adjustment (UE5)](/guides/first-person-vehicle-interaction-system/vehicles/vehicle-setup-config-asset-adjustment-ue5)
{% endhint %}

{% hint style="info" %}
This process is laborious and not recommended as the standard creation method. If you have vehicles made in PhysX that you absolutely need to convert, I recommend grabbing a nice drink and setting aside a chunk of time for this, as the process might take some time.
{% endhint %}

This process might look strange throughout - though has some logic behind it. The nesting of components and changing of actor means that information is not lost in the migration process. Chaos Physics removes a few key components when migrating that we have to ensure don't get caught up in the process.

First things first - in order to make sure your asset is safe in case of any errors, duplicate the blueprint of the vehicle and add the \_UE5 suffix

![Duplicate](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FbGikRbju4ZFRzsZwLu0H%2FUE5_01.jpg?alt=media\&token=e35653f8-7c6e-4199-8ec8-23ff3868ede7) ![Rename](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F5aag9fdr03qSbceY6Hjm%2FUE5_02.jpg?alt=media\&token=08560e8c-ea0c-46fb-8b0e-355c985eeb8f)

Before we do anything else, go into your UE5 vehicle blueprint and add a new **Skeletal Mesh Component**

![Add a new skeletal mesh](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FqFWWmekUprtU9uArxJBa%2FUE5_04.jpg?alt=media\&token=6dcb622e-2511-4e7d-b0e2-06941c60a199)

Now nest the *entire* components tab underneath the skeleton component EXCEPT the original skeletal mesh

![Attach all the components (Except the original vehicle mesh) to the new SkeletalMesh component](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2Fu6VuTWNbXjad8u0lxeGR%2FUE5_05.jpg?alt=media\&token=0881aaea-faf6-4fb1-9227-bf1232b3b432)

Now we're going to want to go into the blueprint, go to **Class Settings** and set the parent class to "Actor"

![Class Settings -> Parent Class -> Actor](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FbWs7MxqLGRkTXYLrooz4%2FUE5_06.jpg?alt=media\&token=a2a26446-d8dd-4f15-b7c3-e567cb21c4b7)

Select reparent - this will break the blueprint, but ensures the data survives the migration process.

![Select reparent. Your blueprint will break.](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F5E2EQOu8R8htr2hsuykn%2FUE5_07.jpg?alt=media\&token=26ce1d81-54e4-41f7-a178-b7bbdda4916c)

Next you'll want to migrate it to the respective UE5 content folder

![Migrate it to the CONTENT folder of the UE5 project.](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FUFQF9b6bMjbrLU1si7m6%2FUE5_03.jpg?alt=media\&token=0bd8a689-30a3-4436-8a63-011a68f9de3c)

You'll also want to migrate the Skeletons and Physics components, as changing the default class they're no longer referenced by the blueprint.

![Remember to migrate the skeletons too!](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2Ff82DChdirXrZIhNu2YhU%2FUE5_03_02.jpg?alt=media\&token=81c7ec26-30e4-4b45-a33b-00d92b29c74d)

{% hint style="info" %}
Remember to enable to UE5 Chaos Vehicles Plugin otherwise *this process will not work*
{% endhint %}

Once you've migrated everything to UE5, open up the project and the Hatchback blueprint, you'll notice lots of errors - don't worry, we'll be fixing those quickly!

![Broken!!](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FNWsbl8q88Lm1iFZB4jY8%2FUE5_08.jpg?alt=media\&token=4a6fca0d-e001-4960-8717-89fbc2412acc)

You're going to want to change your **Parent Class** under **Class Settings** to **WheeledVehiclePawn**

![Class Settings -> Parent Class -> WheeledVehiclePawn](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FHGUZ2KlIK7i9hbGpmVgl%2FUE5_09.jpg?alt=media\&token=fe84e91b-c1ab-40d2-9e1e-6cf382457f3e)

Now delete the SteeringWheel Function in Functions tab and disconnect it from the Event Tick

![Delete the function](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FbCSOgGMPyOW8OdMM5LYh%2FUE5_10.jpg?alt=media\&token=7f607f6b-505a-4bda-930a-4cabb8ac7d0f) ![Remove it from the tick and delete it](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FbaGDC5nvvmMDDbU5T6I3%2FUE5_11.jpg?alt=media\&token=ab992747-5703-41d1-9f4f-382cd3d5d383)

{% hint style="info" %}
You can also delete the SteeringWheel function in the Event Graph
{% endhint %}

Now reconnect the tick to the UI Mouseover Line Trace

![Reconnecting the UI trace](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F1wuKdVoyKZ5y1QhEyGWj%2FUE5_12.jpg?alt=media\&token=2d91674f-06aa-44f3-b5bd-7a471db4e026)

Now head on over to the components tab and select everything nested under the SkeletalMesh we nested everything under earlier.

Drag them from under the SkeletalMesh and attach them to the Mesh (VehicleMesh) component

![Drag all the components under the SkeletalMesh to the Mesh (VehicleMesh) component](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FMbKxKvo6BK6cBatIvkmA%2FUE5_13.jpg?alt=media\&token=cf0a88de-a431-4cf1-99f1-94c340261165)

Delete the old SkeletalMesh component

Now we'll rebuild the vehicle's config files

Create a new Animation Blueprint using our vehicle skeleton

![Create a new Animation Blueprint](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2Fc5Ep8yH8bBYU2m2lB97d%2FUE5_16.jpg?alt=media\&token=fc8259e5-e6b9-409e-b9b4-947313e999b9) ![Use our vehicle Skeleton](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FB78eHPFP9mPMDZ2OjrUS%2FUE5_17.jpg?alt=media\&token=b0e62019-5a86-4c1d-aa16-9fd95272a08c)

Click the **Class Settings** and set the **Parent Class** to to a **VehicleAnimationInstance**

![Class Settings -> Parent Class -> VehicleAnimationInstance](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2Fdz0GWkXC4I0BSAUw7XgJ%2FUE5_20.jpg?alt=media\&token=f52984d8-eceb-41bb-9222-63b01d512bd7)

Create a new float variable called "Steer Angle"

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FzwJiJEoupTqGVHd4qqRq%2FUE5_18.jpg?alt=media\&token=a84fcfe4-6b02-49e1-b220-7ff12d0f0b20)

Now in the **Event Graph** reproduce the graph below:

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F7ssfsuh2sLwJ8MGR2EZ9%2FUE5_19.jpg?alt=media\&token=d869c29c-9bc1-40ea-85d1-d4f53beaabd0)

Now head on over to the Animgraph and paste the code below, you should end up with a graph like this.

{% file src="/files/Q01dWwuquM1VZ6D6WdOB" %}

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FEAJNw2X1JWmvtrcS0vJY%2FUE5_21.jpg?alt=media\&token=2786e0e4-13c8-4583-81bf-18aba0ccfe82)

{% hint style="info" %}
Remember to connect "Component to Local" to the "Output Pose"!
{% endhint %}

Right click on the XYZ variables in the bottom left, and promote it to the Variable "Rotation"

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FHpkIIoa1BXibg0LkH3pN%2FUE5_22.jpg?alt=media\&token=f9897160-7034-448b-be39-07d0a242e3ed)

{% hint style="info" %}
"Create Variable 'Rotation'" might not appear if you're clicking in the wrong area. Click on the empty space, NOT the text to promote it.
{% endhint %}

Next drag and drop the 'Steer Angle' variable created earlier and 'Get' It

![Drag and drop Steer Angle and "Get Steer Angle"](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FrfCfPTp2sEODtpU7cuUX%2FUE5_23.jpg?alt=media\&token=c79bd971-8f2d-4dc3-b9e8-a7cd3171126c)

Connect it to the rest of the graph as pictured below and remember to connect 'Component To Local' to the 'Output Pose'

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FMRfcrliZtaMI6a5OuMJp%2FUE5_24.jpg?alt=media\&token=1043e764-a541-4952-ad0b-001e9ff6d49e) ![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FqezeYloPq2orYkhTOztu%2FUE5_25.jpg?alt=media\&token=3e45a4d7-cb35-467f-bfde-968c627b8177)

Compile and save and head back to the Hatchback blueprint

Now let's rebuild the vehicle! Select the Mesh (VehicleMesh) Component and drag the hatchback skeleton onto the Skeletal Mesh in the Details panel

![Bring in the hatchback mesh to the new vehicle component](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2Fh1580CKB3znxGxYyBKUP%2FUE5_15.jpg?alt=media\&token=8b67a39d-13fa-40ad-b977-bd22db53bd38)

Check that Simulate Physics is enabled

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FLM11MiPBaaGb8WIwXB5x%2FUE5_37.jpg?alt=media\&token=418e4345-3424-40c4-b07d-331aa49750d8)

{% hint style="info" %}
Make sure "Simulate Physics" is enabled!
{% endhint %}

Now add the recently created animation blueprint&#x20;

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F4eUkuXqzVmfwvsI4d4lu%2FUE5_26.jpg?alt=media\&token=e3e700de-6fab-462c-b54a-644161b44e72)

Select the Vehicle Movement Component in the details panel

![You'll be seeing a lot of this node from now on.](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FipOqvEvPYfgOQ2QbVwBf%2FUE5_27.jpg?alt=media\&token=658d142c-ea35-4ff4-b8fb-94e7614761c6)

On the right hand side, under the details panel - head on over to Wheel Setup and add **Four** new array elements to the **Wheel Setups** section

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FePZeHb9AIV2eherbeXmy%2FUE5_28.jpg?alt=media\&token=8622927e-b076-4a2c-9669-7f129d28af3d)

Now head back to your config files and create a ChaosVehicleWheel

Name it BP\_Hatchback\_Wheel\_Front

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FV3Lr3bmpEdPa02TlNRCe%2FUE5_29.jpg?alt=media\&token=d72180a9-b633-4dbc-ab3e-687c53139ed6) ![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FxfJkI10uBOJAFLKvS485%2FUE5_30.jpg?alt=media\&token=9deecd75-4c61-4970-a226-738c38054dc0)

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FsYykFrEa1AMvbI72CIu2%2FUE5_31.jpg?alt=media\&token=22cbfe76-6f16-4c9c-b980-5154799f32fd)

Open your new BP\_Hatchback\_Wheel\_Front actor and set the original dimensions for the wheel from the Wheeled Vehicle Component you set in UE4

You can find those dimensions [Here](https://switchboard-studios.gitbook.io/advanced-vehicle-interaction-system-docs/guides/vehicles/vehicle-setup-config-asset-adjustments-ue4#wheeled-vehicle-component).

Set your Axle Type to "Front" and check "Affected by Steering"

{% hint style="info" %}
Make sure you check "Affected by Steering" and set the correct Axle Type
{% endhint %}

You might notice that the original method for defining the tyres (via a Data Asset) no longer exists and has been replaced with a graph system. This gives you more power to tweak your tyres. This guide will not go through creating one, the file below is the Lateral Slip Graph we'll be using.

{% file src="/files/mBu1CHxy5h4CkHeI481T" %}

Place these .uasset files in your content folder in **WINDOWS EXPLORER.** They should appear in the engine. There is also a TQC file, which we will use later - copy this as well.

Place the Lateral Slip Graph into the External Curve section&#x20;

{% hint style="info" %}
Make sure "Affected by Handbrake" is enabled
{% endhint %}

![The final result of the front wheel's blueprint](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FaPJqND2cXsWHZ5Z4DZqK%2FUE5_32.jpg?alt=media\&token=eaafa020-6af2-4cc8-b54a-faa940ae280b)

Duplicate the tyre blueprint and name it "BP\_Hatchback\_Wheel\_Rear" Open it, set the Axle Type to Rear and uncheck "Affected by Steering"

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FKgFpo9FgOpNjBMaxv8jY%2FUE5_33.jpg?alt=media\&token=1b47d10b-f986-4076-9d3a-87a50e2a5a67)

{% hint style="info" %}
Make sure you uncheck "Affected by Steering" and change the "Axle Type" to Rear!
{% endhint %}

Head back to your vehicle blueprint and select the Vehicle Movement Component

Add your Wheeled Vehicle blueprints to the corresponding array elements, two for the front, two for the rear.

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F6ZBW1wVtTaXakadQYTxC%2FUE5_34.jpg?alt=media\&token=e93a5cc2-5955-4172-91e1-fd078bba4b8e) ![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FMtD7QZcoRVq0stS4tkaU%2FUE5_35.jpg?alt=media\&token=97544248-91e9-44f9-a926-74b7d2ad89e1)

Name the four bones for the wheels in this order:

* Wheel\_Front\_Left
* Wheel\_Front\_Right
* Wheel\_Rear\_Left
* Wheel\_Rear\_Right

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FTemhAp0eDzRMpHoqXL3v%2FUE5_36.jpg?alt=media\&token=decd3ed9-51d5-4576-8bd1-7a4d29b0a9ed)

Scroll down and now place the Torque graph you downloaded earlier into the torque curve section

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FMkO3CvacWhGQQZFNnPNn%2FUE5_43.jpg?alt=media\&token=10649704-5670-492b-9a09-6df85a733f33)

We now have to replace all the vehicle movement components with the new chaos vehicle movement component. Simply drag and drop the Vehicle Movement Component and replace all the  old ones in the graph.

![Drag the new vehicle component into the graph](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F17YZIzyGJFp3rv9MzOlI%2FUE5_38.jpg?alt=media\&token=3b08d505-f4a3-43f7-a3b4-ac24f9109dbe) ![Drag off the vehicle movement component and create a new "Set Throttle Input" Node](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FPqTg08Gbmzpl4oiJRiMC%2FUE5_39.jpg?alt=media\&token=4a9dbb63-a276-4622-b4fd-84166ee0c4fc) ![Reconnect all the old inputs to the new event.](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2Fauo9PJjvfQEA6Zs51lnL%2FUE5_40.jpg?alt=media\&token=4f46f467-34cb-43b1-b65b-78babb075034)

Do this for the rest of the vehicle movement components.

The only difference is the steering wheel's angle is now set on the MoveAxis event.

Your new graph should look like this:

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F45PFCQkvfePzq4HiKHje%2FUE5_41.jpg?alt=media\&token=544549fe-51e2-40b9-851b-86125e5a0960)

Make sure to also replace the handbrake input in the top right of the graph

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FvPtIWIL1yxDNf9pM9mk4%2FUE5_42.jpg?alt=media\&token=89378c51-743a-429e-a487-45eaea31b939)

You'll also need to update the unpossession - just refresh it with a new node "Event Unpossessed"

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FGpV7zPAKJjJJu5YA6Mx3%2FUE5_45.jpg?alt=media\&token=66cea1a3-f276-485c-9215-e13831661e78)

Now we can start to reassemble all the components for the vehicle. If your vehicle uses sockets (like the hatchback) this process is a lot more straightforward. If your vehicle doesn't - you'll have to manually reposition everything which can take some time.

Essentially we're rebuilding the same component menu from UE4. Nest the corresponding blueprints and UI elements inside the meshes and making sure their location is updated.

Drag and drop the corresponding assets to their parents and things should snap back into place.

If they don't snap, try updating the socket or manually repositioning them

Place the camera onto the SpringArm component, this will fix its location.

![Components correctly nested and repositioned](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FGEbZktRToYaqSRa51HSb%2FUE5_44.jpg?alt=media\&token=f346ef8e-64c3-4ffc-a1ce-da53b3fee541)

If you've followed all these steps, your vehicle should now be fully useable in UE5 ***\*phew\****

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FpgzmPtFGREjLe1Opqvf7%2FUE5_46.jpg?alt=media\&token=0bf461d5-ccbf-4acd-a9be-c97ceceea19b)


# ESSENTIAL VR HANDS COLLECTION


# Overview


# Integration


# Unity

Currently we only have documentation for SteamVR.

Documentation for the other plugins will be in shortly!

{% content-ref url="/spaces/2QngA3F8bJDdn2Zx0nBz/pages/sNGhHiAuDTZzPmZqyJvT" %}
[SteamVR](/essential-vr-hands-collection/integration/unity/steamvr)
{% endcontent-ref %}


# OpenXR


# SteamVR

1. Install URP
2. Install Shader graph
3. Generate Shader includes and Upgrade materials to URP
4. Import SteamVR&#x20;
5. Add the Steam VR Behaviour Skeleton component to the hand
6. Drag replace skeleton root with the root of your hand &#x20;
7. Set input source to right or left hand

<div align="left"><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2Fd8ebx1T9alklWyiOfLJn%2Fimage.png?alt=media&amp;token=ea900cdb-02ec-4b28-a496-54110ad17ee7" alt=""></div>


# VRIF

Coming Soon


# HurricaneVR

Coming Soon


# Unreal

The Unreal Essential VR Hands Collection has the ability to work out of the box with Open XR or Steam VR

{% content-ref url="/pages/8C8zVZUZjTAvyNAagFap" %}
[OpenXR](/essential-vr-hands-collection/integration/unreal/openxr)
{% endcontent-ref %}

{% content-ref url="/pages/eCqd30h3GnAmVsDH80Rs" %}
[SteamVR](/essential-vr-hands-collection/integration/unreal/steamvr)
{% endcontent-ref %}


# OpenXR

This is a quick tutorial on how get up and running using the OpenXR template in UE4 and UE5.

​NOTE: If you're using UE5 then follow this tutorial in UE4. 27 then upgrade the project to UE5. A native UE5 tutorial will come shortly!

Import Essential Hands into the OpenXR template project.

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FWj0sGU4JLtBs7ddfB7bt%2Fimport.png?alt=media\&token=66d75550-b2b5-4a2b-a364-791eddac192f)

Replace the VR Template VRPawn reference with the one provided.

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FAljWo2qY9ysONChT2YmB%2Freplace.png?alt=media\&token=01065516-7587-4968-be69-2f5d3297ef67)

**If prompted** replace Anim BP skeleton. The animations in the animation folder might also need the skeleton replaced if prompted.

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FYHVNtnJkh2TdXh41BexO%2Fchooseskeleton.png?alt=media\&token=cf7e023a-54f2-461f-8597-c91879d73b82)

If you find the hands are in an awkward position move hands into place that's more fitting.

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2Fp9leTaJCG8jQ1vTANFUi%2Fmovehands.PNG?alt=media\&token=9d56698b-fb74-4207-80b3-fb719b08735b)

Now you can change skeletal mesh to whichever hand you want!

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FKNzFNkSOasDal1WGnpiX%2Fmeshchange.PNG?alt=media\&token=aa6d0a10-26a3-42a0-b038-34f2bfc2a56d)

Done!


# SteamVR

**NOTE: It is possible this does not work as intended in UE5 as the latest SteamVR plugin is UE4.27**

Open the SteamVR Input Plugin **in 4.27 not 4.24**

<https://www.unrealengine.com/marketplace/en-US/product/steamvr-input-for-unreal?sessionInvalidated=true>

Delete the skeletons and replace the references with the original SteamVR skeletons&#x20;

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FPmruIGj3EStSEzc2mnxj%2FDeleteRig.PNG?alt=media\&token=bfacbd42-cdeb-4a25-930d-e0ad614e72e8)

Delete the blueprint and animation blueprint in the EssentialHands/Blueprints/OpenXRTemplate folder

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2Fzc2DuoKioIcH1yOS4muK%2FDeleteFolder.PNG?alt=media\&token=a621996b-7ad6-4484-8552-f977d5e02964)

Replace the hands in the SteamVR VR Pawn (either in level or in blueprint)

![](https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FWb9YMaDQQIRMOagY684s%2FReplaceHands.PNG?alt=media\&token=c672ed2b-2f24-4202-8c35-6ad89327971f)

Done!


# BYZANTINE CHURCH

## Structure

So, from the outset of this project let’s start off on the wrong foot - the structure was something I wasn’t dedicating a lot of time to doing “right”. I know how to use modular tilesets, and I find it painfully restricting. So from the outset I wanted to make it more bespoke, and figure out any sense of modularity afterwards so I could make the scene as unique as possible. I knew that I could get away with this because of Lumen, but that also come with it's own drawbacks - I knew for this project that wasn't an issue and was happy to work this way.

Let's take a look at how the church's structure is made:

<figure><img src="https://lh3.googleusercontent.com/x0urXrScSdWrCSDInmNicq2hhzC2HvsRuMoKLGLIc6T7OvpkRAjeCcorKf3_LVx3siis9slIhzo2NHCnpVv95C3tEtYSE6n1p4ucW_w9vy8IZB3ED-6SaNEP0KxpUuYoNWMIVYgBQlvDRpg5ovKtFGE" alt="" width="563"><figcaption><p>The church structure, in a singular mesh file.</p></figcaption></figure>

As you can see - it’s made in a singular piece. The experienced folk can already highlight areas to break the mesh into smaller chunks - and that was something I was aware of throughout and said to myself - “This isn’t important enough to the goals of my project to care about!”&#x20;

The benefit of this workflow is that I can have a consistent overview of the entire mesh, and work on it as a singular asset instead of 5-15 modular pieces that constantly need adjusting and re-importing and managing. I can also guarantee that the UVs are seamless across the entire mesh.&#x20;

The downside is that you end up working with a fairly large mesh asset that can’t be culled. These are all fixable problems that can be addressed further down the line, but allowing greater flexibility during the creation process was incredibly refreshing.&#x20;

Funnily enough, as I was writing this my feed was abuzz of the tools used in Source 2 to rapidly iterate in the same way - so I’ll throw my hat in with this too:

**For the love of god will major engines please update their program to have in editor level design tools.**

Eventually this project will be broken into modular pieces as it has to be sold on Marketplaces - but it was a fun perspective to approach a scene from instead of the usual snapmap stuff most games use these days (derogatory).

<figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F2Y6Q0IFXMb0bThke3ZvU%2Fimage.png?alt=media&amp;token=642166e6-8a3d-4383-86b1-ccd2864e6bdb" alt="" width="563"><figcaption><p>How some of the church could be split into modular pieces to be more manageable and adjustable.</p></figcaption></figure>

## Wall and Floor Textures

This is where a big chunk of time was dedicated to this project, and personally one of my favourite parts. I spent a few days attempting to teach myself how to sculpt rocks and bricks in zBrush, before abandoning it due to both time constraints and quality issues. I had attempted several walls in that time, but none of them got close to what I was looking for.

I’m sure I could achieve high quality sculpts eventually - but it would likely take me as long as the entire project before they would be at a quality bar I was comfortable with. It’s not a strong point of mine, but I’m happy I took a look at it.

<figure><img src="https://lh4.googleusercontent.com/Ni5G4Q6peypfWGpeCILIlLYg5SBoKnqHajtQ0hy_7sGMvDM1DVS3hzCALXewuwkOPvZuIGuMwl1I4twGZrSl8aUSO0aZNX6wkxFJ0UoBU7QjaEKPCe0YPgwuwqFgMe7w_knFkAxyCIyl7xKdEFm14PQ" alt="" width="563"><figcaption><p>It’ll have the foundations of something good, eventually.</p></figcaption></figure>

The project felt like I was banging my head against a brick wall (heh) at this point, because I’d been working on it now for quite some time and had absolutely nothing to show for it. Progress was moving at a glacial pace and something needed to change.

After realising that sculpting was going to take longer than I had, I started hunting around my local area for textures I could use that would match up. I searched far and wide for the specific type of wide brick that was both scannable and close to what I needed.&#x20;

The main issue with the brick I was looking for is that it’s incredibly thin and wide - not something that’s found in the UK. There’s a few Roman walls in London that had potential, but they were neither accessible nor big enough to get any useful data from.

Eventually I settled on using regular brick walls, and adjusting them from there.

I actually ended up doing a scan of another wall first - this didn’t make it into the final scene, but it gave me a run-through of how to do it consistently. I wasn’t happy with the results so I went back to searching for more.

<div><figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F3dRRLREi9OlbO0Tma5p2%2Fbrickwall01.png?alt=media&amp;token=c47d6ca1-eaaa-43a5-9cad-df9659a6d9c5" alt=""><figcaption><p>Photo</p></figcaption></figure> <figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FFxe6h2m4WOiB0NYQZ1j4%2Fbrickwall02.png?alt=media&amp;token=6a6e53f2-88b9-42be-91a0-d03a2194cc8c" alt=""><figcaption><p>Scan</p></figcaption></figure> <figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FYtSaJAAFoBEIGdrWkaZ5%2Fbrickwall03.png?alt=media&amp;token=aa6a2915-2d47-4bd2-928f-d01e630524a5" alt=""><figcaption><p>Mesh</p></figcaption></figure> <figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F7Z7j9TQ93B2zSwrWaRvf%2Fbrickwall04.png?alt=media&amp;token=70ace4b7-5aab-4cfd-851e-e453d2ae63d3" alt=""><figcaption><p>Final</p></figcaption></figure></div>

First attempt at the brick - you can see how different the end result is after extensive work in Photoshop.

Eventually after a long time searching I found a brick wall right next to my house that would work well enough that I could adjust.&#x20;

<figure><img src="https://lh6.googleusercontent.com/VSXW7XTj_AkjxKqBA6eBvE90HeUP_C9ZwFD5OnzMqZwKR155G3qfUFimkCZZ5ssAI79SCKHvb9ab5MfGB5Mk3H0Pdf0ZHllXPNboDwIdDuJsmdnfS24YuOP8iEWi1m4maWHlnGLyrYShEQglvECD9OU" alt="" width="563"><figcaption><p>A brick wall, how exciting.</p></figcaption></figure>

I figured if I scaled the brick sideways, doubling their horizontal width - I could get something that roughly matched with minimal distortion. I also bet if I'd never told you this you would never notice it either.

<figure><img src="https://lh3.googleusercontent.com/39_V_rIfB5XPOgDhX-tlCFhrgxwSkZ-kO1oXYZ-TE8_4JkKc1fGtxKDD59D5fSCmVoutuqHJaUDhRX5A_sBNIC3Bia8lzuFcGRi8aH-GX8AXGcRCiydRBnSZApZm8z7JWW5uQ_oMTrjEwdcAOJeb1V0" alt="" width="563"><figcaption><p>The wall in all its glory.</p></figcaption></figure>

My hypothesis had been correct. After another round of extensive editing I’d managed to find something that would work.

You might be asking at this point why and how the textures look so vastly different from the scan. The first one is easy to answer - it’s because they don’t look like the walls should. The second one is a bit harder to answer - and it involves a lot of masking and a lot of adjustment layers in photoshop, back and forth between the editor and a tonne of patience.

{% embed url="<https://drive.google.com/file/d/18pxM4ok_B_VahgOpAusTxEdG8_4DUr-O/view?usp=sharing>" %}
Photoshop layer build-up of adjustments to adjust the raw scan diffuse
{% endembed %}

<figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F2SqSc5R37zYDvdyyvqUc%2Fimage.png?alt=media&amp;token=f4f6b1f9-1723-4047-9b06-b45006eede94" alt=""><figcaption><p>The stack of adjustment layers.</p></figcaption></figure>

Once I’d managed to get the brick looking how I wanted, I took it into substance painter and made it tile using a clone stamp adjustment layer and once again - some patience. Because I had edited the raw diffuse, I was able to make the normal, height and AO map tile at the same time.

{% embed url="<https://drive.google.com/file/d/1XF2AOoXIf2O1pgD0FyPJd8aOsD-aTKnr/view?usp=sharing>" %}
Not Tiling/Tiling
{% endembed %}

By now I’d decided I’d been out of the editor for too long - and quickly got it set up in Unreal using a three way material blend, and a stucco texture I threw together using another scan that used the same techniques as the wall.

<figure><img src="https://lh4.googleusercontent.com/Dvw6tzcRBz9K5R9h-NnyaW6HJcq-NCQ3DvgalMoGpOTEiZzoKxSCIN7TQvjF_eQ0RQDGQfl49erBwNk3cvQPAUz0TvcU9e0mZv1STwqTJHTwvJ68_2f8M1tC5Cz07rJai86wSGzWo2GOWKuBk3S5vkg" alt="" width="563"><figcaption></figcaption></figure>

The wall textures when they first came in. You can see they don’t resemble the original texture and tile horrendously. Many more tweaks happen between here and the final result - the most important thing was to lay down a base to work from.

<figure><img src="https://lh5.googleusercontent.com/vhAGaUdrtF5i3viljlqd7Llagf0EeIhyNf9Vwz5MA0Zv7ZEzcraswJN__w4MOiwshelhAtmvWfdRxmA5CvsFgJ6DJYKmY9sJpRKjmMMdrWZvmbamgi0SRgzpisv7qv9syiVoDZl27YjR7QlOsI19Z6E" alt="" width="563"><figcaption><p>Early in engine tests of the walls. Things were coming together nicely.</p></figcaption></figure>

After a few more hours of back and forth between photoshop, painter and unreal - the textures were starting to resemble what I was looking for.

<figure><img src="https://lh5.googleusercontent.com/RztaA2-gi43nPL63RPvKse_enMhDD9UC_9cyWbonUnOJ2SkK_qSvvihA54FBs2OnxVG7yjD9tfA1Sj2yslx2cQIIiqjQtfMIBeJzbs0AHG8ooC6kPtl0SiYUl3IeR2Ft8jY3nQQqQFr3ov-U6d106I4" alt="" width="563"><figcaption><p>Early tests like this galvanised my determination to continue</p></figcaption></figure>

A few rounds into editing the structure, hints of the fresco were helping solidify how the brick should look, and the stucco helped break up repetition and forms.

I had an extra material slot left that was currently being left unused that I wanted to fill, as I didn’t want the scene to be made up of just one type of brick. I had noticed in my references that occasionally structures like this were built using a larger form brick on the foundations, before transitioning to a smaller one up top, or had structural failures filled in with the same smaller bricks.&#x20;

Before dedicating a large portion of time to finding textures, scanning them, processing them etc etc - I wanted to see if it would actually look good, so I grabbed a Megascans texture that was close enough to what I wanted and threw it into the scene.

<figure><img src="https://lh4.googleusercontent.com/21wxYzO8PtX0xlby8HC7c-uZa2ik8vmVRAFyWc5sSi-NdDPWJq5eUBUQ01QpAUYha3CDn8kqQ0mRYiHZjDSjbdcEZPS2x-ZQMgt0qGxFVHA-xMwxrTWX3tQNCtC2hTWb4a4cEV32li3nGOXcJ0a1QX8" alt="" width="563"><figcaption><p>Three way blend with a large form megascans brick. This was good enough for me to dedicate time to creating a new texture.</p></figcaption></figure>

I set out once again to find the perfect texture, and stumbled across one while away on a weekend trip to Surrey.

<figure><img src="https://lh5.googleusercontent.com/cF4HjvVMNHrlNuRnmJtaR_dk-3A6xmFTSQdWO-liNpR8MS2_nEYICAfuSc50zuUcDGPnuPKtgz1QoWpFK4mmGOdGtmWyA7tNdpjQFwDqmhr4TIfWK-JXDB4378vE8VHEqCrGfY3KAa0iPUP4CAoXCo4" alt="" width="563"><figcaption><p>An abandoned church conveniently located next to our AirBnB</p></figcaption></figure>

This actually wasn’t where I got the texture from, but the actual source is a wall about 100ft away from it. This church was used for some assets I’ll talk more about in the future.

<figure><img src="https://lh5.googleusercontent.com/nkCjzKmPoFjxJKHjMnK_Lj5etMq4qn1ACrRGKz7SCWdSVFe4CB_P2ruGs8UoXKiPJGK4te0FVgxdwpVcRzAzwddteoizXwn_Vs7cWEj67wJhddY73oII0l5AJj8WHtemY0a_DRh0QI5TDz_URY3NVFs" alt="" width="563"><figcaption><p>The raw photoscan in zbrush. You can see the moss and algae buildup giving it a green tint. This was something I addressed in the editing process. There’s also large black forms that would tile too aggressively in the scene that would have to be addressed.</p></figcaption></figure>

Again I baked it down extracting Diffuse, Normal, AO & Height.

<figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FpjsksPwUNcudNetSXDeo%2Fimage.png?alt=media&amp;token=876764b6-d897-4480-87eb-28479e45eb33" alt=""><figcaption><p>The material after extensive editing in the same way as the previous wall.</p></figcaption></figure>

The final texture in Marmoset, after extensive editing to look how I wanted. Almost unrecognisable from the original.

<figure><img src="https://lh5.googleusercontent.com/SxE86CP_HFXdGkEgmt179OxIBY_Oi1T5JZwDaOPSyMwtDmSrGm8HI1gZ4CY_nsou_EBOLfaP7Tim94MlQLeEFm2xEgNz6TGWjlQCkGKLtpjsocetJWfTbnU_e87jcrh0g88Wes6P72wVyFU5Cgk8he0" alt="" width="563"><figcaption><p>The three-way blend, all together in harmony. I had a ‘rule’ that in order to blend from one brick to another I would always have stucco in-between to make the transition less jarring.</p></figcaption></figure>

## Wall Corners

While creating the structure I had wanted a way to make the corners of everything less straight. This is something that’s plagued a lot of my previous scenes - razor sharp or boring corners.&#x20;

While I was out in Surrey, I noticed that the corners of the church had some beautifully detailed brick edges (how exciting) and I set to work on scanning those too.

<figure><img src="https://lh4.googleusercontent.com/PTeoG5sHO0DyWZRt2VGB3SQu9O_YT6tqq_GMTIohfsKO28agB5mvKTpu37WP7AJkgnfI1cgZYiKhC6FdmZ-WUvUxbBFOWLiy8wy75rq4Shk84GtloYEdcAHbDlepRa5oUZy12fbZ6lcbtamaDUyrILw" alt="" width="563"><figcaption><p>The raw brick scan</p></figcaption></figure>

This was a unique challenge - the bricks were conveniently laid out in a way that I could cut them out into a wall piece, but they were a different type of brick, a different colour and a different shape! Luckily with some more patience and a bit of brute force I was able to once again sculpt them into the piece I needed.&#x20;

<figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FBqLyPofRRpezYQzVHisV%2Fimage.png?alt=media&amp;token=a5dcff89-b6b4-450e-ba01-b58598bae7fd" alt="" width="563"><figcaption></figcaption></figure>

<div><figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F2jRlFgTamNIxn4r6CCVB%2Fbrickscan02.jpg?alt=media&amp;token=80ce75cd-2df1-424d-bb56-a7556d081722" alt=""><figcaption><p>Raw zBrush scan</p></figcaption></figure> <figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FHzRw8JG5PKu3AqMhu0a4%2Fbrickscan03.jpg?alt=media&amp;token=4aff3448-83ef-42db-9660-37ed8078f1f1" alt=""><figcaption><p>Cleaned up scan mesh</p></figcaption></figure> <figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FRSCGhRDg6q8rn3tagqXV%2Fbrickscan04.jpg?alt=media&amp;token=8c94b26c-ffa5-48c9-ba4f-8e556023c4d2" alt=""><figcaption><p>Baked &#x26; Edited Lowpoly</p></figcaption></figure> <figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FpCcPGEzkEeL5BBAjnRIr%2Fbrickscan05.jpg?alt=media&amp;token=f88cac59-311d-48f8-82ab-745e2691caef" alt=""><figcaption><p>Asset integrated with scene</p></figcaption></figure></div>

Once I had one of the corners in place, it was super easy to bend and tile them across the whole scene! I even had them in place along the arches in the ceiling. They don’t look too obvious, which is the point - but they do add an incredible amount of silhouette detail in places I wouldn’t otherwise consider.&#x20;

Do they match up against the brick alignment? No. Does it matter? Also no.

<div><figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FD7mXYCSCcxthtfQBsJLl%2Fbrickcorner01.jpg?alt=media&amp;token=50ad52ed-aa7b-4000-9fa1-19ae0b04b4ea" alt=""><figcaption><p>Various curved variations for the scene</p></figcaption></figure> <figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F1Y5JEYuDCMqDGKWfr8qo%2Fbrickcorner02.jpg?alt=media&amp;token=7b6bc014-18f1-4d29-a4b5-37d4c03c1aa1" alt=""><figcaption><p>The mesh in the scene</p></figcaption></figure> <figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2Fd1yVNxd9bESSjDOXOaKJ%2Fbrickcorner03.jpg?alt=media&amp;token=82f9b2e8-cb2f-42ff-b1d3-782c2dd7b54c" alt=""><figcaption><p>The brick pieces in an early version of the scene</p></figcaption></figure></div>

Alongside texturing, I would bounce between editing the structure, lighting and layout of the church. Here in the third image above, it’s all starting to come together. The promo shot angle is also in it's infancy.

Now that the structure was in place, and large elements were finalised I started looking at the fresco in more detail.

## Fresco

The fresco provided a unique challenge because originally I had intended to use something like a decal but noticed that it was completely unrealistic - especially for the complex shapes and angles that make up the ceiling. What I eventually realised is that you can apply decal materials to meshes to achieve the same effect, while also giving it exactly the right shape required.

<figure><img src="https://lh5.googleusercontent.com/8CYDyRRYRObJu4XP7nWWs1m0hRDDWbecUq7EEfaym9VW24EI9urv-pnDwus36TqvzKrw0DHvzPAHql8OU7llY3xai0SCgJo92T6CC8OEm3yAzwBd5joc99Dys921p2pc4pBVECG5G4M6_grSdblDjUo" alt="" width="563"><figcaption><p>This was about half way through the project. The scene suddenly started to feel incredibly satisfying to work on.</p></figcaption></figure>

I started by grabbing sections of the church from the original structure file and separating them out into their own individual meshes with unique UVs

<figure><img src="https://lh4.googleusercontent.com/48P5nWa0k_1DcmS4qrln4B5lk51GLz2IlFxStATsbA9l62Hl8yBeL9FpfiJ65OWfwGGDLP2n9K2IzWjyLpGXWAhkB_RLrbFFQ7E8QacztLZJH3hme4Zb8WGICKPqjEicIJuUynGnH1RFquIwfpeYjLA" alt="" width="563"><figcaption><p>Two of the fresco meshes used in a semi-modular fashion. These pieces go on the semidome and arches.</p></figcaption></figure>

I then took them into substance painter and slowly began building up their detail using a mixture of photo-textures from reference packs (Licensed) and general wear/tear in painter directly.&#x20;

<div><figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FH0EIJz6Zzq0slSHRUNkl%2Ffresco01.jpg?alt=media&amp;token=e7fea1d3-e420-4b47-8e53-e2a842ed2d3a" alt=""><figcaption><p>Arch Fresco</p></figcaption></figure> <figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FW4DrhZtoYrppGpSsae9s%2Ffresco02.jpg?alt=media&amp;token=3422cf89-7827-4ab7-8664-e7f72505118e" alt=""><figcaption><p>Dome Fresco</p></figcaption></figure></div>

I could have done a lot more detail in regards to the fresco, but felt like it struck a good balance between the detail frequencies, as I didn’t want them to seem overwhelming, or too noisy. Another benefit of them always being on the ceiling is that texel ratios could be slightly lower - giving a bit more freedom on how much I could realistically fit on them before losing out on detail.

<figure><img src="https://lh4.googleusercontent.com/uWj_NmpNV8otK3ZdOkmJh9LtDN_ZyWbWuJRaLz_tSpov0rwxe9cUt-hgLlg0lIjmTk2jfsLHgxMXi5tmhRjwy53cZVMb3cn6r1bZYf9y4k5TJNR0ARx0UAuAI2Jwck_vv4oo848PWK-tV5Bz7nqOsJQ" alt="" width="563"><figcaption><p>Dome fresco lower section, made with a single tiling trim texture.</p></figcaption></figure>

## The Floor&#x20;

After spending a few weeks working away on everything else, it dawned on me that the floor had been completely neglected. I kind of knew how I wanted it to look - so I threw down the generic unreal material and adjusted from there.

![](https://lh6.googleusercontent.com/x6j6XhOstZBEk35gEAPzihhztQdZY6zD2n_EV4IU0o_a7OTOp2k0PhwMQ3Dr81UUJOp2Hn-NNjud9pGkxna5waXxHWwNIia6Kq7EDRg4viPWvER8bixpNQ1tS8UDxEHKZcURV7hO-Aray1t4y_WgaoE)

And voila, the floor was done. Nothing more to be added.<br>

Wrong.

I knew this part was relatively easy to make manually. I literally did not want to go out and find the kind of tilework I needed - it was something I felt comfortable making myself, plus I didn’t want to go asking random churches if I could take 350 photos of their *floor*.

I actually loathe substance designer - It’s not the tool for me, I find that procedurally generating everything is a fool’s gambit. I am incredibly impressed with what people can achieve in it, but I don’t see that ever being my passion.&#x20;

So I modelled it, which is funny given how this project started.

<figure><img src="https://lh6.googleusercontent.com/d9q2d2sAbUdHfjyIpUPiblh2KDBeArDu4gXLqyZ-yBN3S2PR3_YD5XZylQT9Qd4-CNcKxTehZ2-K9hMH9W8e-KqfN13DDHHIOyIIJUFonsrJrMznTsF6oIDtMPAtbXJLAlZ_s2igW2KaVNJTSexZfeo" alt="" width="563"><figcaption><p>A 10x10 grid in maya with offset tiles. Material separation for masks</p></figcaption></figure>

That’s it. That’s literally all I did for the model. I baked out all the maps in Painter and started just hammering down layer after layer of textures and grunge and warps (Yes, I am completely aware these are all SD nodes) but it was fast, easy and had some fantastic results in my opinion. I knew what I wanted - and I got what I wanted.

<figure><img src="https://lh3.googleusercontent.com/zSNaSOCY2gZppN7gWHqJxWaWnYpSbXh2UsazC5Df1s1cCtX2NjpRZjEfVPJzfnkfcU6KnVzItTPlgs45KeegT7Pa6VUnJgm1M097kyPyH_QNsX4B070S8LgBPw47Sh4aOrhFxm4W0jkELXJANv-WMVE" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FcnGcInTB91mi9yztSqZn%2Fimage.png?alt=media&amp;token=ac058225-4c15-4f92-944f-ef9b64704438" alt="" width="207"><figcaption><p>Layer stack in substance painter. It's not unusual for me to quickly create simple textures this way.</p></figcaption></figure>

I am also aware that this isn’t a hugely complex asset to make - it’s a bunch of squares and some thinly placed dirt. But it got the job done well, and it got it done quickly.

After that it was time for some detailing. Alongside a two way blend using the same stucco texture I used on the wall (asset reuse - not lazy, I swear), this also included some stones which were small scrunchy block meshes, as well as some leaves.

## Stones

Though not huge in size (hence their tiny polycount) they do add quite a nice bit of detail in places.

The stones were actually placed using physics simulation as they were placed before I had a proper floor mesh, unlike with the leaves.

It’s an old technique I’ve been using for a while when I don’t particularly want to place hundreds of individual meshes.&#x20;

As long as your collision is set up correctly you just select all the assets you want to simulate - press enable physics and simulate the scene in the editor.&#x20;

Once you’re happy with where they’ve landed (you can further adjust them using the gizmo) press K on your keyboard and they’ll maintain their position. Just remember to turn off physics + dynamic objects after!

{% embed url="<https://drive.google.com/file/d/106FBgDb66Gka6fvqTbxSEWMutXmqVwtS/view?usp=sharing>" %}

<figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2Fo2vHF02cZu3icsijmWRJ%2Fimage.png?alt=media&amp;token=1da93b9a-5f71-442d-855a-40135b281b1a" alt=""><figcaption><p>Pressing K saves the actor's simulated state in engine</p></figcaption></figure>

<figure><img src="https://lh6.googleusercontent.com/f2zNloui4ptcjIEAHdZcJF-dmbFh3jlwm2_xg2dz4nqeHNrSjpR08QpivVypK-a7buRssZrT-cJU_9RlAT6EvxPY7S7TlRv_aHpRJ5fx0LNpv_WXVPWl1W-BdHuYYSb3UKX1Cdf94Z_JFPDkrKuKyPo" alt=""><figcaption><p>A fair bit of work for something so small. But it's the little details that count!</p></figcaption></figure>

## Leaves

The leaves were simple, I knew they weren’t particularly large in the scene, so I was quite loose with their creation.&#x20;

I grabbed a few leaves from my garden and scanned them on a rug. I used a blue background and some natural light from my house and did a quick scan from 30 images. I baked them down to a plane, edited their lighting in photoshop and bent some planes in Maya to make them look crumpled. I placed them using the foliage tool.

<div><figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FQzG2NsZjD4FH3j21dgLi%2Fleaves01.jpg?alt=media&amp;token=442d8225-fbd0-4285-9c0c-41fc0f0e9c60" alt=""><figcaption><p>Leaves on a rug in my house</p></figcaption></figure> <figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FVqYKbOAvcDXgtbaYhTyg%2Fleaves02.jpg?alt=media&amp;token=14a5821e-8295-4c32-b128-e3fcf1216a17" alt=""><figcaption><p>Leaves on a rug in my house on my computer in RealityCapture</p></figcaption></figure> <figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FXdzMc8JneJH7VXWMTC59%2Fleaves03.jpg?alt=media&amp;token=7b3ee46f-7024-49f7-ab3a-b6599a024e69" alt=""><figcaption><p>Leaves from a rug in my house on a computer in Maya</p></figcaption></figure></div>

{% embed url="<https://drive.google.com/file/d/10EqHKOETqnVHvh8rdaqjeC4q1CAR7ro-/view?usp=sharing>" %}
Demonstration of painting the leaves using the foliage tool
{% endembed %}

<figure><img src="https://lh4.googleusercontent.com/Qh0An3SPSfNz-hNyP7heFTtDKiA-PDDh4tmVBr0PB6qItpGFzycWtH7J4tzgF6PJyWMMvAQcishMMXNYkTcOlDKkyhtZW2Yf2flqvTKWA0sZa6gMPztULUfNfe-_3aS8g9MGYqUi_LOgWXLA7Qhv0L4" alt="" width="563"><figcaption><p>The floor after vertex paint, leaves, rocks and love</p></figcaption></figure>

## Pillars

As you might see in that previous image - some pillars had crept into the scene. These were handmade in zBrush with a blockout from Maya.

<figure><img src="https://lh4.googleusercontent.com/LMs2c5scMjgS5fgi1yZc-e21ckyBcVO4IdGf52Kt6fOLVvQk9Sw8sfzqA8r2Gy7EDC6RI5YVZejlI3JiGGc1P1tE1Wp_3Hco0cAMseUMJP3CpkPg_gUZQfVnaOoA0fXdwLmMkMNkQF5jB4fr-o7sujM" alt="" width="563"><figcaption><p>The blockout from maya, with a placeholder texture. At this point I’m fleshing out the proportions and overall feel of them before committing to the sculpting process.</p></figcaption></figure>

I wanted the pillars to be fairly muted and not a focus. I don’t particularly find ornate pillars to be super interesting to myself, so I kept them simple.

I grabbed some filigree meshes from my resources folder (I didn’t make them, I did not want to make them) and placed them where they needed to be.

<div><figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FTUFfGfRsPRfdEDgBFfS7%2Fpillar01.jpg?alt=media&amp;token=643f049d-06d6-42d6-9835-5b3d3a5f8a23" alt="" width="563"><figcaption><p>The lower row is a mesh from a filigree pack, the upper row is modelled by myself.</p></figcaption></figure> <figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2Fgco1DPEZiIkLhPWh2QCZ%2Fpillar02.jpg?alt=media&amp;token=7ee71d25-3360-4ea4-a9b6-1491a8ca2d99" alt="" width="563"><figcaption><p>The mesh dynamesh and sculpted in zbrush.</p></figcaption></figure></div>

I actually went back and resculpted, rebaked and retextured the mesh at this point, as I had overdone the damages on the brick section. I’m still relatively untrained at sculpting so I made the rookie mistake of over sculpting for the sake of it.

<figure><img src="https://lh3.googleusercontent.com/KFfHDOgwTNCVO6YUOXZYjuFSHQ_8QHbLNX3g1Ub-bej-ySw6Z3F21tceENIiR4AyOcpK_ReWBgn-F99RUBJok_5gX5E9rs2S-v6TW-Y1M0obcBBqXvDo8zlQTmDxGAuJH8CXASJLlB-KopnNrcYHVm8" alt="" width="563"><figcaption><p>The sculpted pillar after the second attempt at sculpting - this time trying to not overdo the damages.</p></figcaption></figure>

The usual process of baking and texturing was followed here, with many iterations to get it where it needed to be in the scene. I do use photo-textures in my texturing process, but I believe this asset was textured entirely with grunge maps and procedural nodes in Painter.

<figure><img src="https://lh5.googleusercontent.com/ZiQ8vQ0AWkM0iK9ndhplpUCbMDYE3cx4DsT1TmKIZ_0qxUyimnuqU_hp03FJn6UwZ_8aPZZpjoMxYiI_zmucMwxdVAq_56OqVfsnIstDDQaZicFS1ymTYJHK6ihlLNaj8khZAkPsL1APJRbDat34eDA" alt="" width="563"><figcaption><p>The pillars in Marmoset</p></figcaption></figure>

## Templon

This asset was something I tackled quite late on, I didn't do anything special for it - in fact I used the materials from the pillar to texture it by creating a smart material and importing it onto the new scene. I added some ground based gradient dirt and some ornate filigree here and there, but overall it wasn't anything unique or original to create this piece.

The pieces are modular and can be used in various different ways if desired.

<div><figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F72ce2CLioqvz7mweGEvT%2Ftemplon01.png?alt=media&amp;token=304a17fa-8f74-42e0-91dc-5fb0697113e7" alt="" width="563"><figcaption></figcaption></figure> <figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FxMc54a5cjmFgnHtfT3zu%2Ftemplon02.png?alt=media&amp;token=4bc5f85f-0e88-493c-b6b7-94974ae5d40e" alt="" width="563"><figcaption><p>Modularity!!!!!!!!!</p></figcaption></figure></div>

## Bench (Handmade)

Now that I had fully established the structure of the building - I needed to start adding some of the props. Traditional Byzantine churches don’t have seating except on the edges for those less able to stand - but accuracy wasn’t the focus for this. Plus I wanted more medium detail frequency in the scene, so who was to stop me? God? This is my church baby.

I set about manually creating a bench mesh. This was a standard asset creation affair until the texturing. I’m not actually happy with the final result of this asset but decided to move onto other things.&#x20;

The main (and only reason, actually) is the texturing is so muddy and inaccurate. It feels like a chocolatey blob instead of wood. I’m not going to pretty up this process and tell you that every asset is absolutely phenomenal - these kinds of scenes are a marathon and sometimes you have to know when your effort is better spent elsewhere. Luckily the rest of the scene helps bring it up to scratch. Or as it’s more commonly known: The Cheerleader Effect.

The bench used a mixture of photo-textures and grunges, but the overall result was pretty poor.

<figure><img src="https://lh5.googleusercontent.com/8-9DcTqfnrZ_VUkbBzAWAp6ORtXot-biLtnJhmeIznm-cc7bs_nUJH5_eVqXZ4MXOkZQuSIxvgw1LfPHJqL7_dGyyuP4GME4YYmUd1xZ8LZQFBJ3flD8WA6my0E3rWk1TYDlC4iD6JMCxPoYWORc3qw" alt="" width="563"><figcaption><p>Admire the beauty of everything else around it, please.</p></figcaption></figure>

## Chandelier

The chandelier provided some unique challenges. Again - all my choices throughout this project were justified internally for the scope of what I wanted to achieve. For this asset there was a constant battle between “should I bake the details down onto a flat plane, and risk transparency overdraw and low resolution edges, or should I use pure geometry, which is relatively cheap to render, but can get out of hand quickly?”

<figure><img src="https://lh6.googleusercontent.com/x88Lp8K1qDmYjPHkLuFAycCIhY_NGBL0d8TlckEfHurmOcCkh1zzxpoVW-m3_WEVWBfuhrFfydXlNGcBAMG-bModkWIvUJTsFtVmn1bSZ9Tnw0QPNhQjARTrli_kYFzwFOjKtmRmmNkJQzIz8RfExn8" alt="" width="563"><figcaption><p>Chandelier Highpoly</p></figcaption></figure>

Eventually I settled on the latter, not because of Nanite - but because I could keep details sharper using a mesh edge instead of a texture mask. The final polycount for the chandelier sits at around 110,000 tris - which might come across as a huge amount, but considering it’s the centrepiece of the room and in my opinion the star of the show - it only makes sense to dedicate a large chunk of the poly budget to something so spectacular.

<figure><img src="https://lh6.googleusercontent.com/pFPClbvzJyTxkNjeu6zvVGKCUK1G8FTEkdvQMYX8Tlh-JIUX2uwNwXquKzI3IMpkFsDXwve3Asc6mVFBMOquMZuApIkEtHtOYk54ZggdLtnP88498rQ8wpPYd2z6zSiL1gZ1s8qfGjUmQe_aAMk5ajw" alt="" width="563"><figcaption><p>Chandelier wires and maps.</p></figcaption></figure>

The final asset size fits on a single 2x2k texture set, at roughly 10.24ppm - it’s broken down into 10 sections and repeated in a circular fashion.

I refused to rely on nanite for the chain, and that’s baked down into a chain alpha, and given a slight silhouette breakup on the mesh so as to never appear razor sharp at glancing angles. This texture shares space with the glass alpha, to reduce texture usage.<br>

<figure><img src="https://lh3.googleusercontent.com/ur-_ETYH4UqyXW_DUTwMHcBpXFr3kiE2S7L9N0J_q2GSmG5XUZ0gXqwi9oIzA38il9LA4UsXMWn5Ct7k83v0ssOJK-ceEY7zcoPsYfKpONyYPFiLGSQM25pprB2UQpoCGIJdeYUwrMoV0J-HHSx2pig" alt="" width="563"><figcaption><p>The chain had to be slightly “thick” to not be razor sharp at grazing angles.</p></figcaption></figure>

I actually did play with a few variations of the chandelier. I spent a day rigorously modelling the entirety of the reference image I was using before deciding to scale it back. It looked goofy being so large alongside all the extra detail so I actually walked it back halfway through making it:

<figure><img src="https://lh3.googleusercontent.com/xOM8rWloJTZ54mLlkz7bdipVPPdlshEIVjM5dYVZApL2enQAxij3O3jIJTFSWyF-r-LMomSTCPHVSPHDW2dlcx_UJQAlsrquVUVQnV1lit9eFpw3-FrGWinmf5ZaF19DuaRtUzr6Iggl1B1Y3zrGnik" alt=""><figcaption><p>I tried playing with several sizes, to little success.</p></figcaption></figure>

## Candlestick

I knew I wanted some oversized candlesticks in the scene. I just did, none of those piddily little ones scattered about. No - this place would be filled with imposing and possibly dangerous batons adorned with burning flames of holiness. They weren’t a particularly challenging or unique object. A standard workflow was followed all the way from modelling to its placement in the scene. I used the simulation technique from the rocks to place a few of them too.​​

<figure><img src="https://lh4.googleusercontent.com/5muzdHB5dotn3SQqSYqZ2GrlMDWmidzxAyPBEjhz190Si39jKYOBq2-IR_XTzCuW7Wm6X0ouYNbzWPHTMCnmdWjedTTePi82ovHSs2LjvZNjlfXfY0hrwbnw_kWx5LIfdCF-bgLE57axVrCTUiOetxg" alt="" width="563"><figcaption><p>I cannot escape the visual image that this looks like a Talking Heads music video.</p></figcaption></figure>

<figure><img src="https://lh5.googleusercontent.com/cnQ9Q0_nWgrNcVHtV35Nm_L6LRfrSiiQ8mXsbDXHIhPyRAAUnw_EJJkTiOsvMxNnX7mScbo8My8JryD6C-FFC1n3NzX5MzDsNynITrjgQY98Wzdza-O8AtzpIYiTbr9-NMXR2s_Lr1bJEJ0lfz8SnUA" alt="" width="563"><figcaption><p>Cosy corner.</p></figcaption></figure>

## Candles

The candles were relatively straightforward - I did try to buy some candles and burn them using a blowtorch but even with scanning spray I had lying around, the texture of candles just didn’t lend themselves to being scanned very well, so I eventually resorted to just modelling them in zBrush.

I do admit I was just trying to take a more “not at my desk” approach to it.

<figure><img src="https://lh6.googleusercontent.com/IOxVoHkIBXxvEjyCUqhp0LM4UYQvsLP9dB1Csj50RXECwtuk-5byfo8Q6WYgJ6FyIGEYlOntMyCZ82OwatREUcppAqxqxhLEdpptsyLSAxj512qdPOUZiCuu1wdGZQKQeS5yilI0YNk7kkBPdR6UTsk" alt=""><figcaption><p>Ironically matcap red wax was the perfect material to sculpt these with.</p></figcaption></figure>

<figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FL5FbE7jlc3fqt0ZvPZM3%2Fimage.png?alt=media&amp;token=6cf87594-9c1c-4955-9c26-60d0ddd01beb" alt="" width="563"><figcaption><p>Candles also added a lot of small frequency detail to the floor.</p></figcaption></figure>

## Flames

Initially the flames were a simple image plane. Originally they weren’t animated but my good friend Bear rendered out a flipbook for them in Houdini. I edited the shader to always face the camera. There are some downsides to this method that need addressing - but they do the job!

{% embed url="<https://drive.google.com/file/d/1_dy5onIp2Zo5HaDZwRAss1CE-W10oRtf/view?usp=sharing>" %}
Flames always face the camera, but require manual placement and a 0,0,0 rotation to work properly.
{% endembed %}

## Bench & Chair (Scanned)

Half way through the project I was vacationing in Spain with a group of friends. During some downtime I noticed the house we were staying in had some beautiful furniture - some were antiques and some were just *old*. I only had my crappy phone camera (OnePlus 10 Pro) but thought - ‘Hey, why not give it a shot?’&#x20;

I actually tried a scanning method I hadn’t tried out just yet - using masks to get both sides of the object. I knew the general method. I just hadn’t ever tried it so I thought I’d give it a shot.&#x20;

<div><figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FAFe0UbQ7smRA3Fp27zfH%2Fchair01.jpg?alt=media&amp;token=097f433c-7b9a-4875-98a3-4bae715ef482" alt=""><figcaption><p>Please don’t talk to me about the mismatched white balance</p></figcaption></figure> <figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FmOptq2wSkEC09Nhs0dTr%2Fchair02.jpg?alt=media&amp;token=b77d1375-9867-4172-a3c6-4efe1764d318" alt=""><figcaption><p>Yes, I did correct it.</p></figcaption></figure></div>

<div><figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FTEJ505BtuvpLLjtiIzE4%2Fbench01.jpg?alt=media&amp;token=be41a03b-edd3-46d5-8b3b-c8824cd56aaf" alt=""><figcaption></figcaption></figure> <figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FZV3O7qjDUakow1X8IZJC%2Fbench02.jpg?alt=media&amp;token=55d1a7fb-606f-4c28-ad94-9931f5871807" alt=""><figcaption><p>Get rotated, idiot</p></figcaption></figure></div>

The results were mixed, the chair above worked flawlessly (somehow), but the bench required some extra (read: painful) tuning afterwards.&#x20;

I'd like to reiterate that this was done on a *phone camera* while I was on Holiday - I wasn't expecting phenomenal results but it was exciting to get such useable assets from it.

<div><figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F9nwZYSy2udCHu8sFvq9p%2Fbench03.jpg?alt=media&amp;token=39f79b87-3bab-4894-b929-43444e9f367a" alt="" width="563"><figcaption><p>Bad Scan</p></figcaption></figure> <figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FlXaU6Gj7o3ToSoaxHsPA%2Fchair03.jpg?alt=media&amp;token=d785cde9-9563-40e3-b4b8-8b29e3e9c8f8" alt="" width="563"><figcaption><p>Good Scan</p></figcaption></figure></div>

I edited their meshes and fixed it up in Maya and Zbrush before baking them down in xNormal.&#x20;

They always require a bit of clean-up, but some elements really shine from the decimated (and tidied up) mesh. There's non-straight edges that you otherwise wouldn't model normally.

I’ll take the raw diffuse into photoshop and adjust the lighting for an initial pass. After that I take them into Painter and use the clone stamp tool to fix up any areas the scan missed, or just paint out certain elements I don’t like.

The chair is one of my favourite assets from the project - it’s not perfect by a longshot and the resolution is a bit crap but it makes up for it in its character. It’s janky, unsafe to sit on and falling apart - but look at it!

<figure><img src="https://lh6.googleusercontent.com/1iTCvJYexDxk57GTwhi5Jh557HcaQ1Pc8jlb9LWkIFXGg2VsDFZVeT2MbjJ34R-CbjylyMWZluR8AbJu2Hi-iEY3K3Pav-t2KrqYLAsXEbOcpigABCnjMOwyBJTrBfAokRvMGmBsI-Nf-W0bIFVc3Mo" alt="" width="563"><figcaption><p>Not necessarily the best, but certainly my favourite.</p></figcaption></figure>

The bench required some painful cleanup, a few hours cleaning up the garbage decimated mesh, and then some more getting the legs to work correctly. This mesh isn’t the cleanest but the beauty of scan data is that you can get away with quite a lot with just how gorgeous the textures are in the final result.

<div><figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F4tc85XInsVlr5rOYyejp%2FBench04.jpg?alt=media&amp;token=a3600fcb-4a38-4399-b60f-ceb199c99d8e" alt="" width="375"><figcaption><p>Bad Scan</p></figcaption></figure> <figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FpXWAMbYpJ3hrGWBW4Q0C%2FBnech05.jpg?alt=media&amp;token=eccbf4b9-da07-44f5-b4fc-6971a2ca1785" alt="" width="375"><figcaption><p>Good model</p></figcaption></figure></div>

## Asset Reuse

So, I'm not stranger to asset reuse - and in fact one of the main reasons I wanted to salvage that bench scan so much is for the potential for asset recycling. Since I knew all these asset would be in the same scene I could get away with them sharing textures. There's a few assets in the scene that reuse the bench's material. Here's a few examples:

<figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FmwnK0FeldfB08oLxwpJc%2Fimage.png?alt=media&amp;token=0d44ebb9-572c-48fc-9192-abe366a4d731" alt="" width="563"><figcaption><p>This asset is textured entirely with the bench's material.</p></figcaption></figure>

This asset isn't very prominent in the scene, but I wanted to see how far I could push the wood texture using it.

<figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FIoBmLQyLP4AZGrgHTs6q%2Fimage.png?alt=media&amp;token=28b64eb4-cccd-42f5-bd95-b99af9802422" alt="" width="563"><figcaption><p>Strategically placed UVs</p></figcaption></figure>

<div><figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FG3Owot4WN1NiNM4xg8nj%2Flectern01.png?alt=media&amp;token=ca09de8b-6cd6-43eb-8830-521ff8432ec9" alt="" width="563"><figcaption></figcaption></figure> <figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2F7Zgvt1rDTqzyiBjt9bu5%2Flectern02.png?alt=media&amp;token=a15cdad3-5928-44c0-a759-b04696d7ce51" alt="" width="563"><figcaption></figcaption></figure></div>

The lectern used a similar asset reuse technique, except the other way around.

I used the bench's diffuse texture in Substance painter in order to lay down materials in painter and then layer dirt and other details over the top of it. Ideally I would have used the same technique as the ladder, but it was fun to try both. Each method has their pros and cons.

<figure><img src="https://2320489175-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2QngA3F8bJDdn2Zx0nBz%2Fuploads%2FRfjNsBRtUV8cWDzJ8Mfc%2Fimage.png?alt=media&amp;token=657286da-c731-48f1-b752-161572e070c0" alt="" width="563"><figcaption><p>This wooden shelf uses the same reuse technique as the ladder!</p></figcaption></figure>

That's all for now, this page might be updated in the future with some more information. I'm also starting work on a Youtube breakdown for those of you who enjoy video content.&#x20;

Yes it WILL have a clickbait title and YES it will directed towards non game artists for the most part.


