<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://wiki.automationgame.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hannah</id>
	<title>Automation Game Wiki - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.automationgame.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hannah"/>
	<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=Special:Contributions/Hannah"/>
	<updated>2026-05-02T15:24:31Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.0</generator>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=Designer_Level_Mods&amp;diff=5037</id>
		<title>Designer Level Mods</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=Designer_Level_Mods&amp;diff=5037"/>
		<updated>2025-09-25T00:14:56Z</updated>

		<summary type="html">&lt;p&gt;Hannah: /* Create A Designer Level from scratch (No Photoscene Mod Level) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From update 4.3 onwards, Automation supports the creation mod levels that change the environment around the car or engine being designed by a player.  &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
A &amp;lt;code&amp;gt;Designer Level&amp;lt;/code&amp;gt; is a collection of Unreal Levels with a name, description, preview thumbnails and a year.  &lt;br /&gt;
&lt;br /&gt;
Players have the option to select a different &amp;lt;code&amp;gt;Designer Level&amp;lt;/code&amp;gt; to show when they enter the car &amp;amp; engine designer, or the engine designer. &lt;br /&gt;
&lt;br /&gt;
Usually, &amp;lt;code&amp;gt;Designer Levels&amp;lt;/code&amp;gt; combine [[Photoscenes|Photoscene Mod Levels]] with an additional level containing locators to position the cars and engines that are spawned by the car &amp;amp; engine designers. &lt;br /&gt;
==Workflow==&lt;br /&gt;
#In UE4:&lt;br /&gt;
##Set up a mod.&lt;br /&gt;
##Create and fill out a &amp;lt;code&amp;gt;Designer Level&amp;lt;/code&amp;gt; file.&lt;br /&gt;
##Create your level (or reuse a [[Photoscenes|Photoscene Mod Level]]).&lt;br /&gt;
##Create your car and engine locator level (optional).&lt;br /&gt;
##Fill out the Designer Level file.&lt;br /&gt;
#In the Automation Workshop Publishing Tool:&lt;br /&gt;
##Set up a workshop item.&lt;br /&gt;
##Share your mod.&lt;br /&gt;
==Create your Designer Level Mod==&lt;br /&gt;
&lt;br /&gt;
===Create A New Mod===&lt;br /&gt;
&lt;br /&gt;
After setting up the modding SDK from [[Modding|Here]], create a new blank mod:&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_02.gif|alt=|frameless]]&lt;br /&gt;
&lt;br /&gt;
===Create A Custom Designer Level===&lt;br /&gt;
In your mod content folder, right-click and add a new &amp;lt;code&amp;gt;Designer Level&amp;lt;/code&amp;gt; file. This is the file the game uses to load the levels.&lt;br /&gt;
&lt;br /&gt;
[[File:Creating A Designer Level.png|frameless]]&lt;br /&gt;
&lt;br /&gt;
Rename and Open the Designer Level file. It has a few parameters:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Name&#039;&#039;&#039; - This is text displayed on the preview of of the environment that shows in game.&lt;br /&gt;
*&#039;&#039;&#039;Year&#039;&#039;&#039; - This is the actual paint itself. The material instance defines how the paint looks, what parameters are available, and how it looks when exported.&lt;br /&gt;
*&#039;&#039;&#039;Designer Types&#039;&#039;&#039; - An array containing the possible uses of this designer level. It should either contain Car &amp;amp; Engine Designer and/or Engine Designer&lt;br /&gt;
*&#039;&#039;&#039;Description&#039;&#039;&#039; - Additional text shown when mousing over a preview of a designer level in game. &lt;br /&gt;
*&#039;&#039;&#039;Levels&#039;&#039;&#039; - An array of UE4 Levels, usually comprising of 1 [[Photoscenes|Photoscene Mod Level]] and 1 level with several blueprints within in it. &lt;br /&gt;
*&#039;&#039;&#039;Preview Images&#039;&#039;&#039; - Images shown as thumbnails when the player is selecting a level. They should show off what the player should expect to see from the environment around the car and engines. &lt;br /&gt;
*&#039;&#039;&#039;GUID&#039;&#039;&#039; - The unique identifier of this level. This must be regenerated for every new designer level. &lt;br /&gt;
*&#039;&#039;&#039;Family GUID&#039;&#039;&#039; - Not used. Click generate for a unique Family GUID anyway. &lt;br /&gt;
&lt;br /&gt;
===Create A Designer Level from scratch (No Photoscene Mod Level)===&lt;br /&gt;
If you do not have an existing [[Photoscenes|Photoscene Mod Level]]: Right-click the content browser again, and create a new &amp;lt;code&amp;gt;Level.&amp;lt;/code&amp;gt; This is the actual environment the player will see in game. &lt;br /&gt;
&lt;br /&gt;
[[File:Make Level.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
Rename the level to the name of your mod, and end it with something like &amp;lt;code&amp;gt;_aesthetic&amp;lt;/code&amp;gt; to help you differentiate it from the [[Designer Level Mods#Create A Locator Level|locator level]]. &lt;br /&gt;
&lt;br /&gt;
Double click the level to open and edit it. Follow tutorials to learn how to use the level editor, such as the [https://docs.unrealengine.com/4.27/en-US/BuildingWorlds/LevelEditor/ Unreal Documentation]. Keep in mind the more demanding and complex the scene, the lower FPS players will get when they use your Designer Level in game. &lt;br /&gt;
&lt;br /&gt;
=== Create A Designer Level Alongside A Photoscene Mod Level) ===&lt;br /&gt;
&lt;br /&gt;
* If you want to make your [[Photoscenes|Photoscene Mod Level]] into a designer level too, you need to create the designer level assets within the same mod as the photoscene level. You cannot separate the design room into its own mod.&lt;br /&gt;
&lt;br /&gt;
=== Design Room requirements ===&lt;br /&gt;
&lt;br /&gt;
* Copy &amp;lt;code&amp;gt;ExampleDL_Locator&amp;lt;/code&amp;gt; from the &amp;lt;code&amp;gt;ExampleDesignerLevel&amp;lt;/code&amp;gt; plugin to your mod, and rename it appropriately. For some reason you have to use Ctrl + C to copy the level from the content browser, and Ctrl + V to paste it in your mod, as there is no right-click menu copy.&lt;br /&gt;
* Move the &amp;lt;code&amp;gt;Engine Builder&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Engine Designer Character&amp;lt;/code&amp;gt; to where you want your engine designer to be.&lt;br /&gt;
* Move the &amp;lt;code&amp;gt;Car Builder&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Car Designer Character&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;Car Hoist Jack Lift&amp;lt;/code&amp;gt; to where you want your car designer to be.&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=Designer_Level_Mods&amp;diff=5036</id>
		<title>Designer Level Mods</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=Designer_Level_Mods&amp;diff=5036"/>
		<updated>2025-09-25T00:10:10Z</updated>

		<summary type="html">&lt;p&gt;Hannah: /* Create An Aesthetic Level from scratch (No Photoscene Mod Level) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From update 4.3 onwards, Automation supports the creation mod levels that change the environment around the car or engine being designed by a player.  &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
A &amp;lt;code&amp;gt;Designer Level&amp;lt;/code&amp;gt; is a collection of Unreal Levels with a name, description, preview thumbnails and a year.  &lt;br /&gt;
&lt;br /&gt;
Players have the option to select a different &amp;lt;code&amp;gt;Designer Level&amp;lt;/code&amp;gt; to show when they enter the car &amp;amp; engine designer, or the engine designer. &lt;br /&gt;
&lt;br /&gt;
Usually, &amp;lt;code&amp;gt;Designer Levels&amp;lt;/code&amp;gt; combine [[Photoscenes|Photoscene Mod Levels]] with an additional level containing locators to position the cars and engines that are spawned by the car &amp;amp; engine designers. &lt;br /&gt;
==Workflow==&lt;br /&gt;
#In UE4:&lt;br /&gt;
##Set up a mod.&lt;br /&gt;
##Create and fill out a &amp;lt;code&amp;gt;Designer Level&amp;lt;/code&amp;gt; file.&lt;br /&gt;
##Create your level (or reuse a [[Photoscenes|Photoscene Mod Level]]).&lt;br /&gt;
##Create your car and engine locator level (optional).&lt;br /&gt;
##Fill out the Designer Level file.&lt;br /&gt;
#In the Automation Workshop Publishing Tool:&lt;br /&gt;
##Set up a workshop item.&lt;br /&gt;
##Share your mod.&lt;br /&gt;
==Create your Designer Level Mod==&lt;br /&gt;
&lt;br /&gt;
===Create A New Mod===&lt;br /&gt;
&lt;br /&gt;
After setting up the modding SDK from [[Modding|Here]], create a new blank mod:&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_02.gif|alt=|frameless]]&lt;br /&gt;
&lt;br /&gt;
===Create A Custom Designer Level===&lt;br /&gt;
In your mod content folder, right-click and add a new &amp;lt;code&amp;gt;Designer Level&amp;lt;/code&amp;gt; file. This is the file the game uses to load the levels.&lt;br /&gt;
&lt;br /&gt;
[[File:Creating A Designer Level.png|frameless]]&lt;br /&gt;
&lt;br /&gt;
Rename and Open the Designer Level file. It has a few parameters:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Name&#039;&#039;&#039; - This is text displayed on the preview of of the environment that shows in game.&lt;br /&gt;
*&#039;&#039;&#039;Year&#039;&#039;&#039; - This is the actual paint itself. The material instance defines how the paint looks, what parameters are available, and how it looks when exported.&lt;br /&gt;
*&#039;&#039;&#039;Designer Types&#039;&#039;&#039; - An array containing the possible uses of this designer level. It should either contain Car &amp;amp; Engine Designer and/or Engine Designer&lt;br /&gt;
*&#039;&#039;&#039;Description&#039;&#039;&#039; - Additional text shown when mousing over a preview of a designer level in game. &lt;br /&gt;
*&#039;&#039;&#039;Levels&#039;&#039;&#039; - An array of UE4 Levels, usually comprising of 1 [[Photoscenes|Photoscene Mod Level]] and 1 level with several blueprints within in it. &lt;br /&gt;
*&#039;&#039;&#039;Preview Images&#039;&#039;&#039; - Images shown as thumbnails when the player is selecting a level. They should show off what the player should expect to see from the environment around the car and engines. &lt;br /&gt;
*&#039;&#039;&#039;GUID&#039;&#039;&#039; - The unique identifier of this level. This must be regenerated for every new designer level. &lt;br /&gt;
*&#039;&#039;&#039;Family GUID&#039;&#039;&#039; - Not used. Click generate for a unique Family GUID anyway. &lt;br /&gt;
&lt;br /&gt;
===Create A Designer Level from scratch (No Photoscene Mod Level)===&lt;br /&gt;
If you do not have an existing [[Photoscenes|Photoscene Mod Level]]: Right-click the content browser again, and create a new &amp;lt;code&amp;gt;Level.&amp;lt;/code&amp;gt; This is the actual environment the player will see in game. &lt;br /&gt;
&lt;br /&gt;
[[File:Make Level.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
Rename the level to the name of your mod, and end it with something like &amp;lt;code&amp;gt;_aesthetic&amp;lt;/code&amp;gt; to help you differentiate it from the [[Designer Level Mods:Create A Locator Level|locator level]]. &lt;br /&gt;
&lt;br /&gt;
Double click the level to open and edit it. Follow tutorials to learn how to use the level editor, such as the [https://docs.unrealengine.com/4.27/en-US/BuildingWorlds/LevelEditor/ Unreal Documentation]. Keep in mind the more demanding and complex the scene, the lower FPS players will get when they use your Designer Level in game. &lt;br /&gt;
&lt;br /&gt;
=== Create A Designer Level Alongside A Photoscene Mod Level) ===&lt;br /&gt;
&lt;br /&gt;
* If you want to make your [[Photoscenes|Photoscene Mod Level]] into a designer level too, you need to create the designer level assets within the same mod as the photoscene level. You cannot separate the design room into its own mod.&lt;br /&gt;
&lt;br /&gt;
=== Design Room requirements ===&lt;br /&gt;
&lt;br /&gt;
* Copy &amp;lt;code&amp;gt;ExampleDL_Locator&amp;lt;/code&amp;gt; from the &amp;lt;code&amp;gt;ExampleDesignerLevel&amp;lt;/code&amp;gt; plugin to your mod, and rename it appropriately. For some reason you have to use Ctrl + C to copy the level from the content browser, and Ctrl + V to paste it in your mod, as there is no right-click menu copy.&lt;br /&gt;
* Move the &amp;lt;code&amp;gt;Engine Builder&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Engine Designer Character&amp;lt;/code&amp;gt; to where you want your engine designer to be.&lt;br /&gt;
* Move the &amp;lt;code&amp;gt;Car Builder&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Car Designer Character&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;Car Hoist Jack Lift&amp;lt;/code&amp;gt; to where you want your car designer to be.&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=Designer_Level_Mods&amp;diff=5035</id>
		<title>Designer Level Mods</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=Designer_Level_Mods&amp;diff=5035"/>
		<updated>2025-09-24T23:46:20Z</updated>

		<summary type="html">&lt;p&gt;Hannah: /* Create A Custom Designer Level */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From update 4.3 onwards, Automation supports the creation mod levels that change the environment around the car or engine being designed by a player.  &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
A &amp;lt;code&amp;gt;Designer Level&amp;lt;/code&amp;gt; is a collection of Unreal Levels with a name, description, preview thumbnails and a year.  &lt;br /&gt;
&lt;br /&gt;
Players have the option to select a different &amp;lt;code&amp;gt;Designer Level&amp;lt;/code&amp;gt; to show when they enter the car &amp;amp; engine designer, or the engine designer. &lt;br /&gt;
&lt;br /&gt;
Usually, &amp;lt;code&amp;gt;Designer Levels&amp;lt;/code&amp;gt; combine [[Photoscenes|Photoscene Mod Levels]] with an additional level containing locators to position the cars and engines that are spawned by the car &amp;amp; engine designers. &lt;br /&gt;
==Workflow==&lt;br /&gt;
#In UE4:&lt;br /&gt;
##Set up a mod.&lt;br /&gt;
##Create and fill out a &amp;lt;code&amp;gt;Designer Level&amp;lt;/code&amp;gt; file.&lt;br /&gt;
##Create your aesthetic level (or reuse a [[Photoscenes|Photoscene Mod Level]]).&lt;br /&gt;
##Create your car and engine locator level&lt;br /&gt;
##Assign variables in Designer Level to your newly created levels&lt;br /&gt;
#In the Automation Workshop Publishing Tool:&lt;br /&gt;
##Set up a workshop item.&lt;br /&gt;
##Share your mod.&lt;br /&gt;
==Create your Designer Level Mod==&lt;br /&gt;
&lt;br /&gt;
===Create A New Mod===&lt;br /&gt;
&lt;br /&gt;
After setting up the modding SDK from [[Modding|Here]], create a new blank mod:&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_02.gif|alt=|frameless]]&lt;br /&gt;
&lt;br /&gt;
===Create A Custom Designer Level===&lt;br /&gt;
In your mod content folder, right-click and add a new &amp;lt;code&amp;gt;Designer Level&amp;lt;/code&amp;gt; file. This is the file the game uses to load the levels.&lt;br /&gt;
&lt;br /&gt;
[[File:Creating A Designer Level.png|frameless]]&lt;br /&gt;
&lt;br /&gt;
Rename and Open the Designer Level file. It has a few parameters:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Name&#039;&#039;&#039; - This is text displayed on the preview of of the environment that shows in game.&lt;br /&gt;
*&#039;&#039;&#039;Year&#039;&#039;&#039; - This is the year the level is set in, and appears next to the name in the level select screen.&lt;br /&gt;
*&#039;&#039;&#039;Designer Types&#039;&#039;&#039; - An array containing the possible uses of this designer level. It should either contain Car &amp;amp; Engine Designer and/or Engine Designer&lt;br /&gt;
*&#039;&#039;&#039;Description&#039;&#039;&#039; - Additional text shown when mousing over a preview of a designer level in game. &lt;br /&gt;
*&#039;&#039;&#039;Levels&#039;&#039;&#039; - An array of UE4 Levels, usually comprising of 1 [[Photoscenes|Photoscene Mod Level]] and 1 level with several blueprints within in it. &lt;br /&gt;
*&#039;&#039;&#039;Preview Images&#039;&#039;&#039; - Images shown as thumbnails when the player is selecting a level. They should show off what the player should expect to see from the environment around the car and engines. &lt;br /&gt;
*&#039;&#039;&#039;GUID&#039;&#039;&#039; - The unique identifier of this level. This must be regenerated for every new designer level. &lt;br /&gt;
*&#039;&#039;&#039;Family GUID&#039;&#039;&#039; - Not used. Click generate for a unique Family GUID anyway. &lt;br /&gt;
&lt;br /&gt;
===Create An Aesthetic Level from scratch (No Photoscene Mod Level)===&lt;br /&gt;
If you do not have an existing  [[Photoscenes|Photoscene Mod Level]]: Right-click the content browser again, and create a new &amp;lt;code&amp;gt;Level.&amp;lt;/code&amp;gt; This is the actual environment the player will see in game. &lt;br /&gt;
&lt;br /&gt;
[[File:Make Level.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
Rename the level to the name of your mod, and end it with something like _aesthetic to help you differentiate it from the locator level. &lt;br /&gt;
&lt;br /&gt;
Double click the level to open and edit it. Follow tutorials to learn how to use the level editor, such as the [https://docs.unrealengine.com/4.27/en-US/BuildingWorlds/LevelEditor/ Unreal Documentation]. Keep in mind the more demanding and complex the scene, the lower FPS players will get when they use your Designer Level in game. &lt;br /&gt;
&lt;br /&gt;
=== Create An Aesthetic Level from an existing No Photoscene Mod Level) ===&lt;br /&gt;
&lt;br /&gt;
* If you want to use an existing [[Photoscenes|Photoscene Mod Level]] you need to create the designer level assets within the same mod as the photoscene level. &lt;br /&gt;
&lt;br /&gt;
=== Create A Locator Level ===&lt;br /&gt;
&lt;br /&gt;
* Copy ExampleDL_Locator from the ExampleDesignerLevel plugin to your mod, and rename it appropriately. For some reason you have to use Ctrl + C to copy the level from the content browser, and Ctrl + V to paste it in your mod, as there is no right-click menu copy.&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=Car_Body_Mods&amp;diff=5034</id>
		<title>Car Body Mods</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=Car_Body_Mods&amp;diff=5034"/>
		<updated>2025-05-01T05:42:45Z</updated>

		<summary type="html">&lt;p&gt;Hannah: /* FAQ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
A car body is a collection of files, of which a &amp;lt;code&amp;gt;Body Variant Preview Data&amp;lt;/code&amp;gt; file is the parent.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Body Variant Preview Data&amp;lt;/code&amp;gt; contains the settings and applicable options for the car body, as well as a reference to the car body mesh.&lt;br /&gt;
&lt;br /&gt;
The car body mesh itself is a skeletal mesh in UE4, which is set up in a specific way. The mesh needs a set of placeholder materials assigned to it, as well as needing a certain orientation and size and specific UV layouts, along with highly specialised modelling and rigging.&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
# In a 3D modelling package:&lt;br /&gt;
## Create a car body mesh.&lt;br /&gt;
## Set up the skinning/rigging and morph targets.&lt;br /&gt;
## Create the UV maps.&lt;br /&gt;
# In UE4:&lt;br /&gt;
## Set up a mod.&lt;br /&gt;
## Import the car body to the mod folder.&lt;br /&gt;
## Ensure that the placeholder materials are properly assigned to the body.&lt;br /&gt;
## Create and fill out a body variant preview file.&lt;br /&gt;
## Generate the car thumbnail and preview info.&lt;br /&gt;
## Cook the mod.&lt;br /&gt;
# In the Automation Workshop Publishing Tool:&lt;br /&gt;
## Set up a workshop item.&lt;br /&gt;
## Share your mod.&lt;br /&gt;
&lt;br /&gt;
== Creating the Car Body Mesh ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
Prior experience with modelling (particularly with subdivision surfaces) is required to make good Automation car bodies. Should you lack said experience, the links below are some good places to start:  &lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/playlist?list=PLjEaoINr3zgEq0u2MzVgAaHEBt--xLB6U BlenderGuru Blender 2.8 Beginner Tutorial]  &lt;br /&gt;
* [https://www.youtube.com/watch?v=ppASl6yaguU&amp;amp;list=PLrjIgEdKLivgpCMmFC0_sV60Y_Ftp-WLD CGGeek Blender 2.8 Beginner Tutorial]  &lt;br /&gt;
* [https://www.youtube.com/playlist?list=PLa1F2ddGya_-UvuAqHAksYnB0qL9yWDO6 Blender Foundation Blender 2.8 Fundamentals]  &lt;br /&gt;
* [https://www.youtube.com/playlist?list=PLda3VoSoc_TRuNB-5fhzPzT0mBfJhVW-i BornCG Blender 2.8 Tutorial Series]  &lt;br /&gt;
&lt;br /&gt;
Automation car bodies in particular should be created as a half, and then mirrored at or near completion to ensure symmetry and minimise the amount of work required to tweak them. Which half of a body you decide to model is irrelevant. &lt;br /&gt;
&lt;br /&gt;
For an overview of how a vanilla body is modelled, Hard Rooster has made a [[Blender_Specific_instructions#Modelling_a_Body_in_Blender_in_9-hours|video series]] covering the modelling of a body from start to finish in Blender.  &lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
* UE4&#039;s units are in centimetres. For example, 100 units in UE4 are equivalent to 1 metre.&lt;br /&gt;
*A finished car body mesh is made of between 7,000 and 30,000 triangles (though a common upper limit is 15,000 triangles).&lt;br /&gt;
**This varies depending on things like the curvature of the body (compare a 1980s van to a 1950s sports car, for example), morphs that may require special topology, and the size of the body (as insufficient triangle density on a larger body may result in fixture tearing).&lt;br /&gt;
*Panel gaps (including door seams) are modelled into the car.&lt;br /&gt;
**A transparent mesh is often added over the panel seam to make fixtures conform more smoothly.&lt;br /&gt;
* The entire car should be one object/element.&lt;br /&gt;
*The body must not contain integrated mirrors, grilles, lights, badges, vents, door handles, aerials, fuel caps etc. Those should be made separately as fixtures.&lt;br /&gt;
**An exception may be made for sculpted vents (without the actual vent area, such as those on the LD Dodge Charger) or character lines, if they can be morphed flat and/or don&#039;t interfere with the versatility of the body.&lt;br /&gt;
* Use quads as much as possible, as they shade and reflect better than triangles.&lt;br /&gt;
* The body must be single-sided and must not have backfaces. It is made double-sided by materials in UE4.&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;300&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:NewCarTopView.jpg&lt;br /&gt;
File:NewCarSideView.jpg&lt;br /&gt;
File:NewCarFrontView.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
==== Coordinates ====&lt;br /&gt;
&lt;br /&gt;
* The front of the car body should face towards the negative Y (front to back) axis.&lt;br /&gt;
*the center of the body should be roughly at 0 on the Y axis, and exactly 0 on the X axis.&lt;br /&gt;
* The bottom edge of the car should roughly sit at 0 on the Z axis, with the top facing towards positive Z (ie: it should not be upside-down).&lt;br /&gt;
** Remember that the Y axis in 3ds Max and Blender runs &#039;&#039;forwards and backwards,&#039;&#039; whereas the Z axis runs &#039;&#039;up and down.&#039;&#039; This may not be consistent across all 3D packages.&lt;br /&gt;
&lt;br /&gt;
* All vertices at the centre of the car (where it&#039;s cut in half) should be &#039;&#039;exactly&#039;&#039; at 0 on the X (left to right) axis.&lt;br /&gt;
&lt;br /&gt;
== Applying Materials ==&lt;br /&gt;
&lt;br /&gt;
Automation uses a set of placeholder materials applied to the mesh to define different paintable parts of the car.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Only one of each material is supported.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* If you need more materials to assign, consider adjusting your mesh, because there are no more materials to assign than those listed here, and you can only have one of each. 😉&lt;br /&gt;
* These will be replaced with the correct materials (if you&#039;ve assigned the material slots correctly), informing the game what various areas of the car are used for, and what materials they require.&lt;br /&gt;
* These materials are colour-coded to represent the different areas of the car, and are replaced with the proper in-game materials dynamically. Make sure to assign these placeholders correctly!&lt;br /&gt;
&lt;br /&gt;
=== List of car body materials ===&lt;br /&gt;
The following materials are used on car bodies:&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
!Material Name&lt;br /&gt;
!Area Used&lt;br /&gt;
!Paint Category &lt;br /&gt;
!Colourable &lt;br /&gt;
!Location in UE4&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Bonnet&amp;lt;/code&amp;gt;&lt;br /&gt;
|The bonnet&lt;br /&gt;
|Body&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Bonnet&lt;br /&gt;
|General paintable material. Has its own visibility toggle in-game.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;BonnetCam&amp;lt;/code&amp;gt;&lt;br /&gt;
|Above the bonnet; determines the default location of the bonnet camera&lt;br /&gt;
|N/A&lt;br /&gt;
|No&lt;br /&gt;
|Content/Cars/Meshes/Bodies/BonnetCam&lt;br /&gt;
|This material is invisible in-game and has no effect on aesthetics.&lt;br /&gt;
for the Exporter, the bounding box origin of the geometry which uses this material defines where the bonnet camera will be.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Bumper_Front&amp;lt;/code&amp;gt;&lt;br /&gt;
|The front bumper&lt;br /&gt;
|Body&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Bumper_Front&lt;br /&gt;
|Prior to the Light Campaign 4.2 update, front and rear bumpers could not be painted separately.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Bumper_Rear&amp;lt;/code&amp;gt;&lt;br /&gt;
|The rear bumper&lt;br /&gt;
|Body&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Bumper_Rear&lt;br /&gt;
|Prior to the Light Campaign 4.2 update, front and rear bumpers could not be painted separately.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;CabinBounds&amp;lt;/code&amp;gt;&lt;br /&gt;
|Deprecated&lt;br /&gt;
|N/A&lt;br /&gt;
|No&lt;br /&gt;
|Content/Cars/Meshes/Bodies/CabinBounds&lt;br /&gt;
|Since bounding boxes for car calculations are now done dynamically since the Light Campaign 4.2 update, this material is listed for legacy purposes only.&lt;br /&gt;
(This material was previously used to determine cabin size.)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;CargoBounds&amp;lt;/code&amp;gt;&lt;br /&gt;
|Deprecated&lt;br /&gt;
|N/A&lt;br /&gt;
|No&lt;br /&gt;
|Content/Cars/Meshes/Bodies/CargoBounds&lt;br /&gt;
|Since bounding boxes for car calculations are now done dynamically since the Light Campaign 4.2 update, this material is listed for legacy purposes only.&lt;br /&gt;
&lt;br /&gt;
(This material was previously used to determine trunk size, as well as front trunk size for mid- and rear-engine-only bodies.)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Car_Roof&amp;lt;/code&amp;gt; (formerly &amp;lt;code&amp;gt;Soft_Top&amp;lt;/code&amp;gt;)&lt;br /&gt;
|General car roof slot&lt;br /&gt;
|Body&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Car_Roof&lt;br /&gt;
|General paintable material. Was previously exclusive to softtop convertibles until the Light Campaign 4.2 update.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Chrome&amp;lt;/code&amp;gt;&lt;br /&gt;
|Areas that must remain chrome&lt;br /&gt;
|N/A&lt;br /&gt;
|No&lt;br /&gt;
|Content/Cars/Meshes/Bodies/ChromeBUS&lt;br /&gt;
|For parts of the car that should always be chrome, use this material.&lt;br /&gt;
This material cannot be changed in-game.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;DriverCam&amp;lt;/code&amp;gt;&lt;br /&gt;
|Inside the cabin; determines the default location of the driver camera(s)&lt;br /&gt;
|N/A&lt;br /&gt;
|No&lt;br /&gt;
|Content/Cars/Meshes/Bodies/DriverCam&lt;br /&gt;
|This material is invisible in-game and has no effect on aesthetics.&lt;br /&gt;
For the Exporter, the bounding box origin of the geometry which uses this material defines where the driver camera will be. &lt;br /&gt;
&lt;br /&gt;
Optionally, this material can be split across boxes on either side of the car, allowing for different left- and right-hand driver positions.&lt;br /&gt;
&lt;br /&gt;
For the BeamNG exporter, this position is then raycast forward, with any resulting collision with a vertex or face becoming the driver camera position. Effectively, this means the default driver camera position is just in front of the windshield, but aligned with the bounding box origin on the X and Z axes.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;FrontBounds&amp;lt;/code&amp;gt;&lt;br /&gt;
|Deprecated&lt;br /&gt;
|N/A&lt;br /&gt;
|No&lt;br /&gt;
|Content/Cars/Meshes/Bodies/FrontBounds&lt;br /&gt;
|Since bounding boxes for car calculations are now done dynamically since the Light Campaign 4.2 update, this material is listed for legacy purposes only.&lt;br /&gt;
&lt;br /&gt;
(This material was previously used to determine front trunk volume in rear-engined cars with a front engine option.)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;LipPlacement&amp;lt;/code&amp;gt;&lt;br /&gt;
|Around undertray, over panel gaps, and over wheel wells&lt;br /&gt;
|N/A&lt;br /&gt;
|No&lt;br /&gt;
|Content/Cars/Meshes/Bodies/LipPlacement&lt;br /&gt;
|Used to cover panel gaps, wheel wells, and undertrays so that fixtures can conform to them.&lt;br /&gt;
This material is invisible in-game.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;LowerBounds&amp;lt;/code&amp;gt;&lt;br /&gt;
|Deprecated&lt;br /&gt;
|N/A&lt;br /&gt;
|No&lt;br /&gt;
|Content/Cars/Meshes/Bodies/LowerBounds&lt;br /&gt;
|Since bounding boxes for car calculations are now done dynamically since the Light Campaign 4.2 update, this material is listed for legacy purposes only.&lt;br /&gt;
&lt;br /&gt;
(This material was previously used to determine a car&#039;s engine bay size and general weight.)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Paint&amp;lt;/code&amp;gt;&lt;br /&gt;
|The primary paint colour&lt;br /&gt;
|Body&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Paint&lt;br /&gt;
|General paintable material.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Paint_Two_Tone&amp;lt;/code&amp;gt;&lt;br /&gt;
|The secondary paint colour&lt;br /&gt;
|Body&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Paint_Two_Tone&lt;br /&gt;
|General paintable material.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Paint_Misc_1&amp;lt;/code&amp;gt;&lt;br /&gt;
|Misc. paint&lt;br /&gt;
|Body&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Paint_Misc_1&lt;br /&gt;
|General paintable material.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Paint_Misc_2&amp;lt;/code&amp;gt;&lt;br /&gt;
|Misc. paint&lt;br /&gt;
|Body&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Paint_Misc_2&lt;br /&gt;
|General paintable material.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Paint_Misc_3&amp;lt;/code&amp;gt;&lt;br /&gt;
|Misc. paint&lt;br /&gt;
|Body&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Paint_Misc_3&lt;br /&gt;
|General paintable material.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Trim&amp;lt;/code&amp;gt;&lt;br /&gt;
|The general trim&lt;br /&gt;
|Trim&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Trim&lt;br /&gt;
|General paintable material.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Trim_Misc_1&amp;lt;/code&amp;gt;&lt;br /&gt;
|Misc. trim&lt;br /&gt;
|Trim&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Trim_Misc_1&lt;br /&gt;
|General paintable material.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Trim_Misc_2&amp;lt;/code&amp;gt;&lt;br /&gt;
|Misc. trim&lt;br /&gt;
|Trim&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Trim_Misc_2&lt;br /&gt;
|General paintable material.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Trim_Misc_3&amp;lt;/code&amp;gt;&lt;br /&gt;
|Misc. trim&lt;br /&gt;
|Trim&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Trim_Misc_3&lt;br /&gt;
|General paintable material.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Plastic&amp;lt;/code&amp;gt;&lt;br /&gt;
|Underbody&lt;br /&gt;
|Trim&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Plastic&lt;br /&gt;
|Used for underbodies and wheel wells.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Reflective_Mirror&amp;lt;/code&amp;gt;&lt;br /&gt;
|Deprecated&lt;br /&gt;
|N/A&lt;br /&gt;
|No&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Reflective_Mirror&lt;br /&gt;
|Used for reflective mirror glass, back when mirrors were modelled into car bodies.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Steel&amp;lt;/code&amp;gt;&lt;br /&gt;
|Areas that must remain steel&lt;br /&gt;
|N/A&lt;br /&gt;
|No&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Steel&lt;br /&gt;
|For parts of the car that should always be steel, use this material.&lt;br /&gt;
This material cannot be changed in-game.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Tray&amp;lt;/code&amp;gt;&lt;br /&gt;
|The bed of a pickup truck or ute&lt;br /&gt;
|Body&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Tray&lt;br /&gt;
|Fixtures cannot be placed on this material. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Window_Pillar&amp;lt;/code&amp;gt;&lt;br /&gt;
|The pillar trim&lt;br /&gt;
|Trim&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Window_Pillar&lt;br /&gt;
|General paintable material.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Window_Trim&amp;lt;/code&amp;gt;&lt;br /&gt;
|The window trim&lt;br /&gt;
|Trim&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Window_Trim&lt;br /&gt;
|General paintable material.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Windows&amp;lt;/code&amp;gt;&lt;br /&gt;
|The car&#039;s windows&lt;br /&gt;
|Body&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Windows&lt;br /&gt;
|General paintable material.&lt;br /&gt;
Using the default Adjustable Window material, window transparency can be adjusted in-game.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Wing_Mirror_Trim&amp;lt;/code&amp;gt;&lt;br /&gt;
|Deprecated&lt;br /&gt;
|Trim&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Wing_Mirror_Trim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|Used for mirror trim, back when mirrors were modelled into car bodies.&lt;br /&gt;
This material is listed for legacy purposes only.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Creating Body Morphs ==&lt;br /&gt;
Automation car bodies support both morph targets (shape keys), and skinning (rigging) for morphing parts of a car body. You can mix and match as many of each as you want, but be careful with overlapping morphs.&lt;br /&gt;
&lt;br /&gt;
In-game, the morph which is selected is defined as the morph with the highest weight of the selected face/vertex.&lt;br /&gt;
&lt;br /&gt;
* Morph targets are treated as having a maximum skin weight of 0.3 for the vertices that move the most, and multiply down to 0 for vertices that the morph doesn&#039;t move at all.&lt;br /&gt;
** For instance, a morph target which tilts the window pillar forward or backward would have a maximum weight of 0.3 at the top, and 0 at the bottom, with the vertex weighting blending down through the vertices like a gradient.&lt;br /&gt;
* Skin weights should be weighted roughly similarly to morph targets, so the maximum weight of a skin morph should be about 0.3.&lt;br /&gt;
** You can go as high as 1 if you are not using morph targets, or if your morph targets do not overlap a particular area of skin weights.&lt;br /&gt;
** Skin weights should be defined in 8-bit intervals only. UE4&#039;s skeletal meshes only support 8-bit weights, so having your skin use values as a multiple of 1/256 is important. As a rough estimate, values that are a multiple of 0.004 work fine, but be aware that values of less than 0.012 may be ignored.&lt;br /&gt;
&lt;br /&gt;
=== Creating morphs with skinning ===&lt;br /&gt;
Skinning is the main system used to allow the player to drag around and deform a car body in Automation. It&#039;s done via weighting specific vertices to various &amp;quot;bones&amp;quot; that are a representation of what the player is dragging in-game when deforming the body. &lt;br /&gt;
&lt;br /&gt;
It&#039;s also probably the single most confusing step of car creation in Automation, as it&#039;s done in a way that doesn&#039;t have a great deal in common with any other widely used game art process. It uses the same tools as skinning a character in a 3D modelling application, so referring to some character skinning tutorials may give you useful insights into the tools used, but the way Automation uses it is quite unique. &lt;br /&gt;
&lt;br /&gt;
====Basic skinning overview====&lt;br /&gt;
In Automation, bones are used to define which part of the morph moves, but are non-hierarchical. The bones float in space around the car without any connection to each other, with only a Root bone as their parent.  &lt;br /&gt;
&lt;br /&gt;
* Every vertex on a skinned model has a skin weight to at least one bone, and at most four bones.&lt;br /&gt;
**This weighting will be a number between 0 and 1, defining how much a vertex follows the movement of a bone.&lt;br /&gt;
**The weighting is an 8-bit bit value, ie; all values are rounded to the nearest 1/256th&lt;br /&gt;
**For vertices that do not use a bone and instead are morphed with morph targets, they must still be weighted to the Root bone. all vertices must have a weight, and all weights must add up to 1.&lt;br /&gt;
**for vertices with weights that add up to above 1, you will get errors. do not do this. all weights must add up to 1.&lt;br /&gt;
**&#039;&#039;&#039;&#039;&#039;All vertices must have a weight, and all weights must add up to 1.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*When you morph the car in-game, your mouse movements move the bone, and the vertices follow the bone.&lt;br /&gt;
&lt;br /&gt;
====Setting up bones for morphs====&lt;br /&gt;
Bones should float freely around the area which they will deform. All bones should be parented to the origin of the car called &amp;lt;code&amp;gt;Bone Root&amp;lt;/code&amp;gt;.  The naming and hierarchy is important.  &lt;br /&gt;
&lt;br /&gt;
It is a &#039;&#039;requirement&#039;&#039; for the root bone to be named &amp;lt;code&amp;gt;Bone Root&amp;lt;/code&amp;gt;; otherwise, the body will not work correctly!  &lt;br /&gt;
&lt;br /&gt;
The morphs you create are up to you, and vary depending on the shape of the car and which parts can be deformed attractively, but almost every car will have bones for: &lt;br /&gt;
&lt;br /&gt;
* Front and rear wheel arch flares&lt;br /&gt;
* Windscreen rake angle&lt;br /&gt;
* Rear window rake angle&lt;br /&gt;
* Boot/rear length or angle&lt;br /&gt;
*Front and rear bumper length (or front and rear overhang in general)&lt;br /&gt;
&lt;br /&gt;
There is no real limit to how many bones you can have, but each vertex should only be skinned to 4 different bones before issues occur (i.e. vertices may not move how they should), and it can be very difficult in-game to select and deform an area that&#039;s skinned to more than 2 bones. This is because in-game, when you hover over the car, the bone weighted the most to the vertex under your cursor is the bone that you will be moving.&lt;br /&gt;
&lt;br /&gt;
Bones should be created floating near the part of the car they deform. Their location isn&#039;t really important to how they function in-game, but having them placed correctly makes it much easier to understand what each bone is for adjusting their limits in later stages of the modding process. Also, a morph will not work if its bone&#039;s origin is off-screen while trying to move the morph in-game. Try to keep the bones relatively close to the areas they&#039;re morphing.&lt;br /&gt;
&lt;br /&gt;
Note that if you are using the 3ds Max script, you do not need to create bones for anything on the opposite side of the car (e.g wheel arches on the other side), as they will automatically be mirrored when you mirror the car body.  If you are not using the script, or you are using Maya or Blender, all bones that should mirror their actions on the other side of the car (such as wheel arches) should have the correct naming nomenclature so they work correctly in-game.  The following suffixes work for mirrored bones in Automation:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;Name&amp;gt;_opposite&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;Name&amp;gt;_R&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;Name&amp;gt;_L&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;L.&amp;lt;Name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;R.&amp;lt;Name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
In this case, &amp;lt;code&amp;gt;&amp;lt;Name&amp;gt;&amp;lt;/code&amp;gt; is the name of the bone/morph.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:BoneLayout2.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
[[File:ArmatureNaming_01.gif|frameless]]&lt;br /&gt;
&lt;br /&gt;
====Adding bones in 3ds Max ====&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;300&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:ArmatureNaming 03.gif|1. Add a Skin modifier to the modifier stack of your car body mesh.&lt;br /&gt;
File:ArmatureNaming 04.gif|2. From the Parameters section of the Skin Modifier, press Add Bones.&lt;br /&gt;
File:ArmatureNaming 05.gif|3. Select all the bones from the list, and press Select to add them to the skin. (You can use filters to make sure you&#039;re only getting helper objects like dummies in the list.)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Adding bones in Blender====&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;360&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:ArmatureNaming 06.gif|1. Add an &#039;&#039;Armature&#039;&#039; modifier.&lt;br /&gt;
File:ArmatureNaming 07.gif|2. Select your armature.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Weighting the skin====&lt;br /&gt;
&lt;br /&gt;
Now comes the complex bit. Weighting skins is a difficult and creative process that&#039;s almost like remodeling the car into different shapes, but with only skin weights to do it with. Wheel arches are often the easiest place to start on a new model, and a good way to start is to move a bone a reasonably large distance in the direction you want it to move (say, 25 to 50 cm) and then start weighting to that bone&#039;s new position. &lt;br /&gt;
&lt;br /&gt;
* Remember that the higher you set the weight, the farther that area will move with mouse input, and the less weight will be available to assign to other bones. This isn&#039;t too important on wheel arches, but can be an issue on other parts of the car which may share more bones.&lt;br /&gt;
* all weights on a vertex need to add up to 1, and if the current bone is the only bone assigned to that vertex, it can&#039;t have a weight less than 1. By adding the root bone as a second bone, you can now adjust the weight of the bone you want, and the bone root will take the remaining weight.&lt;br /&gt;
* Bones in Blender affect vertex groups of their same name. To skin a mesh, you assign vertices of that mesh to the vertex group (of the same name as the bone you want them to be affected by), and then adjust the weight of that vertex (as a value from 0 to 1) to that vertex group.&lt;br /&gt;
* Keep in mind that Unreal Engine rounds bone weights to the nearest 1/256 (with intervals of roughly 0.004). This minimum weight interval isn&#039;t 100% reliable in some cases—instead, a minimum of 0.008, 0.012, or 0.016 may be used.&lt;br /&gt;
* You may also use weight painting as per [https://www.youtube.com/playlist?list=PLb7obMX2SCf3UqP4R2w_El05BLpFcUpSw Hard Rooster&#039;s video tutorial series], which requires more setup but is generally faster and more convenient.&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;300&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:Blender ArmatureVertexGroupNames 01.gif|1. Create a Vertex Group from the Object Data tab with the same name as each bone.&lt;br /&gt;
File:Blender VertexWeighting 02.gif|2. Select the vertices you want to be affected by certain bones, and assign them to the matching vertex groups.&lt;br /&gt;
File:Blender VertexWeighting 01.gif|3. In the Item panel (accessed in the Viewport by pressing &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;), adjust the weights for the vertices.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Effectively, what you&#039;re doing here is using weighting to remodel the car into the shape you want it to be at the furthest extremes of bone movement. If you can make it the correct shape with the bone moved to its maximum position and with the bone back in its normal position, everything in between should take care of itself, and any bone position in between should look good too.&lt;br /&gt;
&lt;br /&gt;
[[File:MoveBone2.gif|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
Windscreens are also a good place to learn to skin, as you can basically move the windscreen bone forwards, and then try your best to use skin weights to make an almost vertical windscreen. If you can get that working correctly, then you should have a bone that lets you smoothly change the angle of the windscreen.&lt;br /&gt;
&lt;br /&gt;
[[File:MoveWindscreenBone2.gif|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
=== Creating morphs with morph targets ===&lt;br /&gt;
For Automation, we support using morph targets and shape keys for morphing a car body. This is done by storing a default value (the base car) and a morph to morph to (the morph target/shape key), and interpolating between those two shapes for every morph. The game supports morph values between 0 and 1 only. This is why skinning is better for the corners of a car body, because that allows for a full two (or even three) dimensions of movement for every morph, and in both directions. It is up to you to decide which method you would prefer to use. Morph targets are generally easier to set up.&lt;br /&gt;
&lt;br /&gt;
==== In Blender ====&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;360&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:BlenderMorphs 01.gif|1. Create a new shape key.&lt;br /&gt;
File:BlenderMorphs 02.gif|2. Select the shape key.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;You can now edit the mesh to be in the new position you want it to be in for that morph.&lt;br /&gt;
&lt;br /&gt;
Repeat for as many morphs as you would like, taking into consideration that every vertex that each morph affects will add to the total polygon count for that body. If you have too many morphs on a body with too many polygons, the game will take longer to load fixtures onto it!&lt;br /&gt;
&lt;br /&gt;
==== In 3ds Max ====&lt;br /&gt;
We do not recommend this, but you can do it if you really want to.&lt;br /&gt;
&lt;br /&gt;
# Duplicate your mesh.&lt;br /&gt;
#Adjust your mesh, &#039;&#039;&#039;&#039;&#039;without adding or removing any polygons&#039;&#039;&#039;&#039;&#039;, to create your morph target.&lt;br /&gt;
# Create a Morpher modifier, and put it above the Edit Poly modifier, and below the Skin modifier (if you&#039;re using one).&lt;br /&gt;
# Pick the duplicate mesh as one of the morphs.&lt;br /&gt;
# Repeat for all morphs.&lt;br /&gt;
#Yes, it&#039;s &#039;&#039;that&#039;&#039; tedious. We hate 3ds Max.&lt;br /&gt;
&lt;br /&gt;
=== Morphing tips ===&lt;br /&gt;
&lt;br /&gt;
* Look carefully for any strange deformations in panels when moving your bones. It&#039;s very important that panels remain as smooth as possible when deforming, as reflections will very obviously show any kinks. The above example of the windscreen is a great example of a morph that deforms the overall shape of the body too much (look at how the top of the windshield becomes a curve and then eventually a kink—this is bad).&lt;br /&gt;
&lt;br /&gt;
* Test out what happens if you move two nearby bones at the same time. Sometimes, two bones&#039; movement combined can cause strange polygon overlaps, though this can often be avoided with careful skinning and a smooth falloff of weights between the two bones.&lt;br /&gt;
&lt;br /&gt;
* Don&#039;t try and make too many different skinned areas. 10 or 12 is a sensible maximum, and try and avoid more than one bone affecting the exact same area (some overlap is okay though), as this may make them hard to select in-game.&lt;br /&gt;
&lt;br /&gt;
* Sometimes you&#039;ll have to make changes to the mesh to make your car deform nicely in an area. Poly flow is very important for good deformation.&lt;br /&gt;
&lt;br /&gt;
* Don&#039;t forget that any weighting you give a vertex to a bone will be taken from another bone to keep a total weight of 1. This can get very confusing and cause you to chase your own tail a bit. You have been warned! This isn&#039;t so much an issue in Blender (since vertex groups can be locked), but in 3ds Max, &#039;&#039;ohhhh boy&#039;&#039; I almost tore my hair out on more than one occasion.&lt;br /&gt;
&lt;br /&gt;
== UV Unwrapping ==&lt;br /&gt;
If you&#039;re planning to do a pelt unwrap as described here, please swap this unwrap step with the mirroring step, and perform your mesh mirroring first.  If you plan to use the 3ds Max script for unwrapping, please perform this step first and then move on to mirroring.&lt;br /&gt;
&lt;br /&gt;
=== Unwrapping fundamentals ===&lt;br /&gt;
UV unwrapping is the process of unfolding the mesh onto a flat 2d plane which describes which part of a texture is applied to which part of a mesh. Think of it like taking a completed papercraft model of a car and unfolding it back to a [https://i.pinimg.com/736x/36/b3/0e/36b30ecf06c7127270612ed37e693a16--toyota-land-cruiser-doll-party.jpg flat sheet]. In most games, UV mapping is important for how the actual visible textures on objects appear, but in Automation, it&#039;s mostly important for how the fixture system works. When you place certain fixtures (such as lights, a grille, or door handles) onto the car, it projects a fixture-shaped hole onto the alpha (transparency) channel of the car body. &lt;br /&gt;
&lt;br /&gt;
For the holes to be projected correctly, you must unwrap the car as one complete piece, without any separate islands of polygons. Otherwise, fixtures can project across multiple parts of the car and give you holes in unwanted places. The UV unwrap must also give a fairly even amount of texture space to each area of the car, as any low-resolution areas will cause jagged holes around the outside of fixtures; this is called &amp;quot;tearing&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
It is for all of these reasons that the unwrap of a car mod has to be what&#039;s called a &amp;quot;pelt&amp;quot; unwrap (named for its resemblance to a flat animal pelt). For Automation cars, it looks like this: &amp;lt;gallery mode=&amp;quot;packed&amp;quot; widths=&amp;quot;360&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:Car unwrap.gif&lt;br /&gt;
File:Car unwrap again.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Unwrapping a car with a pelt unwrap ===&lt;br /&gt;
&lt;br /&gt;
==== Make sure your car is one element ====&lt;br /&gt;
This part is important, as it defines how the pelt unwrap works, which in turn determines how the fixture system cuts holes in the car.  If parts of the car are not connected in both the 3D viewport and the UV viewport, the fixture will cut out an incorrect hole.&lt;br /&gt;
&lt;br /&gt;
Any lip placement areas must be properly unwrapped despite the material being invisible; otherwise, tearing across the body can occur.&lt;br /&gt;
&lt;br /&gt;
===== to see if your mesh is one element: =====&lt;br /&gt;
&lt;br /&gt;
In 3ds Max, enter the Edit Poly modifier and click Element mode. Select one face of the car, and hide unselected faces.&lt;br /&gt;
&lt;br /&gt;
In Blender, select one face of the car and press Ctrl+L to select linked faces, and Shift+H to hide unselected faces.&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;420&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:Car body is not one mesh.png|If your selection ends up looking like this, your car is not one element, and has unjoined faces between the selection and the rest of the mesh. This will not work. Join your mesh together properly.&lt;br /&gt;
File:Car body selection correct.png|If your selection looks like this, with the entirety of the mesh selected, then you have done it correctly and there are no un-joined elements. Good job!&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Doing the pelt unwrap ====&lt;br /&gt;
However it&#039;s done in your choice of 3D application, perform a pelt unwrap on your car.  In Blender, it looks like this:&lt;br /&gt;
&lt;br /&gt;
[[File:Pelt_unwrap_step_1.png|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
Next we need to orient the unwrap so that the centre of the car in the UV sits on the centre-line of the Y axis, and scale the unwrap up so that it covers as much of the UV space as possible:&lt;br /&gt;
&lt;br /&gt;
[[File:Car_unwrap_step_2.png|alt=|frameless|360x360px]]&lt;br /&gt;
* Make sure this unwrap exists on both the first &#039;&#039;and&#039;&#039; second UV channels. The first channel will be used to calculate the normals, and the second channel will be used to calculate the fixture cutouts.&lt;br /&gt;
* make sure the car&#039;s center line is exactly in the middle of the UV layout.&lt;br /&gt;
* make sure that the top and bottom halves of the car are perfectly symmetrical.&lt;br /&gt;
&lt;br /&gt;
== Mirror the Half Body ==&lt;br /&gt;
&lt;br /&gt;
=== The traditional method ===&lt;br /&gt;
# Mirror your mesh.&lt;br /&gt;
# If you&#039;ve already unwrapped your mesh without mirroring the UV maps via modifier setitngs, select the mirrored half, and flip the UV of that half along the Y axis:&lt;br /&gt;
# Duplicate the bones for the wheel flares on the opposite side, matching the distance from the centreline.  Set the name of the mirrored half to the same as the un-mirrored half with &amp;quot;_opposite&amp;quot; at the end of the name of the bone.  Duplicate the bone weighting from the non-mirrored half, rename it to match the mirrored bone, and clear the weighting for each on the opposing side so that the weighting for each wheel flare only includes the respective wheel:&lt;br /&gt;
[[File:Flip_UVs_part_1.png|alt=|frameless|300x300px]]&lt;br /&gt;
&lt;br /&gt;
[[File:Flip_uv_part_2.png|alt=|frameless|300x300px]]&lt;br /&gt;
&lt;br /&gt;
[[File:Mirror_weighting.png|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
[[File:Mirror_weights_values.png|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
[[File:Mirror_weights_2.png|frameless|273x273px]]&lt;br /&gt;
&lt;br /&gt;
== Fix Everything You Just Broke Mirroring the Body ==&lt;br /&gt;
&lt;br /&gt;
====Ensure other bones do not have opposite bones when not required====&lt;br /&gt;
In some cases, your body may have bones that are purposely designed to morph vertices on the outside of the body that are not intended to move along the X axis (e.g. The &amp;quot;Hofmeister kink&amp;quot; found on the &amp;lt;code&amp;gt;10sSedan02&amp;lt;/code&amp;gt; series of bodies). The mirror script may create an unwanted opposite bone for these.&lt;br /&gt;
&lt;br /&gt;
This can be avoided by temporarily weighting a vertex on the zero X axis to the bone in question. Ideally, pick a vertex that is weighted only to the root bone so as not disturb the weights of other bones. Once the mirror script has been run, you can remove the temporary weight applied to that vertex. &lt;br /&gt;
&lt;br /&gt;
====Check that both halves of the body are welded together====&lt;br /&gt;
The mirror body script should weld both halves of your body together, but for &#039;&#039;reasons&#039;&#039; (3ds Max is spaghetti), this does not always occur. This can be seen by your body having an unexpected crease or seam down the centre.&lt;br /&gt;
&lt;br /&gt;
Once you have welded the two halves together, perform a visual check to ensure that no &#039;&#039;unintentional&#039;&#039; welds have taken place. e.g. top and bottom vertices on a window frames. If this happens, undo your weld command and select the centreline vertices in smaller chunks, and avoid selecting the vertices in question at the same time.&lt;br /&gt;
&lt;br /&gt;
====Check skin for distortion along the centreline vertices====&lt;br /&gt;
When two skinned vertices are welded together, either automatically via the script or manually, 3ds Max will attempt to combine the weights of both the old vertices into one. Unfortunately, it&#039;s not very good at it, and many of the welded vertices on the centreline end up with odd weights. This results in a distorted skin (see below). This isn&#039;t an issue with Blender.&lt;br /&gt;
&lt;br /&gt;
[[File:Distorted_Skin.png|frameless|360x360px]]&lt;br /&gt;
[[File:Weight_table.png|alt=|right|frameless|360x360px]]&lt;br /&gt;
To correct the distortion, you will need to check and correct the centreline vertices. The most methodical way is to start from one end of the body and work your way to the other end as follows:&lt;br /&gt;
&lt;br /&gt;
# Expand the skin modifier and select Envelope.&lt;br /&gt;
# Open the weight table and set to selected vertices.&lt;br /&gt;
# Select the central 3 vertices at one end of the body and view the weight values in the table.&lt;br /&gt;
# Where the mesh is distorted, you will usually see one vertex in the weight table that&#039;s the odd one out. &lt;br /&gt;
# Amend the values of this vertex to match those on either side of it. (For vertices with more than 2 bones, you may need to untick normalize to stop Max from altering your amendments—remember to re-enable it once completed).&lt;br /&gt;
# Repeat the above steps, working along the body until you reach the other end.&lt;br /&gt;
&lt;br /&gt;
=== Check that the same UV maps exist on the first two UV channels ===&lt;br /&gt;
&lt;br /&gt;
==== In 3ds Max ====&lt;br /&gt;
To Check the maps:&lt;br /&gt;
&lt;br /&gt;
# Under the utilities tab click on the More... button.&lt;br /&gt;
# Select &amp;quot;Channel Info&amp;quot; from the list and click OK.&lt;br /&gt;
# Click the newly available Channel Info Button and review the channel info.&lt;br /&gt;
&lt;br /&gt;
[[File:Channel_inf.png|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
The bottom 3 lines of the above screenshot represent the 3 UVW maps. In this case, the maps are identical, as they should be. If, however, there is a mismatch between the three maps (from either null data or different numbers of vertices), they will need to be be corrected. If your body does not have 3 maps, see [[Car Body Mods/Unwrap Error|here]].&lt;br /&gt;
&lt;br /&gt;
In most cases, &amp;lt;code&amp;gt;1:map&amp;lt;/code&amp;gt; is the correct one. One method of correcting the maps is as follows:&lt;br /&gt;
&lt;br /&gt;
# In the Channel Info box, select the line representing the correct map.&lt;br /&gt;
# Select Copy.&lt;br /&gt;
# Select one of the incorrect lines.&lt;br /&gt;
# Select Paste.&lt;br /&gt;
# Repeat for the other map if it&#039;s also incorrect.&lt;br /&gt;
# Close the channel info box and click on the modifier stack tab.&lt;br /&gt;
# Move the UVW Mapping Paste modifier(s) to between the skin and the mesh.&lt;br /&gt;
# Collapse the modifiers into the mesh.&lt;br /&gt;
&lt;br /&gt;
==== In Blender ====&lt;br /&gt;
Open the Object Data menu and select the UV Maps submenu.  Open a UV editor and check that the UVs look correct in the first two UV channels.&lt;br /&gt;
&lt;br /&gt;
[[File:Uvs_still_there.png|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
If one of these is not correct, delete it and simply duplicate the correct one.&lt;br /&gt;
&lt;br /&gt;
== Export Car Body to .FBX File ==&lt;br /&gt;
&lt;br /&gt;
=== In 3ds Max ===&lt;br /&gt;
This step is easy!  &lt;br /&gt;
&lt;br /&gt;
1: Select the car body mesh, then go to File &amp;gt; Export &amp;gt; Export Selected&lt;br /&gt;
&lt;br /&gt;
2: Save the FBX file somewhere. It won&#039;t actually be distributed with the mod when complete, but name it well, and put it somewhere in a properly named folder, where it&#039;ll never need to be moved or renamed. If you move it, UE4 will get confused if you try and reimport it, which you&#039;ll need to do if everything isn&#039;t perfect, and nothing is ever perfect.&lt;br /&gt;
&lt;br /&gt;
3: Make sure your export settings look like this image:&lt;br /&gt;
&lt;br /&gt;
[[File:3dsmax_exportsettings_01.gif|alt=|frameless|374x374px]]&lt;br /&gt;
&lt;br /&gt;
=== In Blender ===&lt;br /&gt;
&lt;br /&gt;
# Select the armature, and then the mesh, and then go to File &amp;gt; Export &amp;gt; FBX.&lt;br /&gt;
# Save the FBX file somewhere. It won&#039;t actually be distributed with the mod when complete, but name it well, and put it somewhere in a properly named folder, where it&#039;ll never need to be moved or renamed. If you move it, UE4 will get confused if you try and reimport it, which you&#039;ll need to do if everything isn&#039;t perfect, and nothing is ever perfect. Make sure your export settings match like so:&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;320&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:Blender-export-settings-01.gif|1. Under Main, make sure the forward direction is set to -Y forward, with Z up, and Selected Objects ticked.&lt;br /&gt;
File:Blender-export-settings-02.gif|2. Under Geometry, set smoothing to Normals Only, and tick Tangent Space.&lt;br /&gt;
File:Blender-export-settings-04.gif|3. Under Armatures, untick Add Leaf Bones.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;The animation tab doesn&#039;t matter, as we don&#039;t use animations.&lt;br /&gt;
&lt;br /&gt;
You are now ready to import your body to Unreal Engine!&lt;br /&gt;
&lt;br /&gt;
== Import Car Body to Unreal Engine ==&lt;br /&gt;
&lt;br /&gt;
Now it&#039;s time to bring all your hard work into Unreal Engine. &lt;br /&gt;
&lt;br /&gt;
Follow the [[Modding]] page for installing and opening the Automation Modding SDK.&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve never used Unreal Engine before, now is a great time to watch this [https://www.youtube.com/watch?v=w4XlBKeE46E introduction to UE4 playlist from Epic]. It&#039;s for a fairly old version, but most of it still applies.&lt;br /&gt;
&lt;br /&gt;
===Creating your Car Body Mod===&lt;br /&gt;
Press the Create Mod button in the top bar of the UE4 Editor.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_01.gif|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
Select the Blank Project, and fill the wizard out with all of your details, such as your name and a short description of the mod you&#039;re making. Then, click Create Mod to generate your plugin files.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_02.gif|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
The Content Browser window should now show your plugin content. This is where you&#039;ll put &#039;&#039;all&#039;&#039; of your mod files. &#039;&#039;&#039;&#039;&#039;Never modify any files outside of your plugin folder&#039;&#039;&#039;&#039;&#039;. you can copy materials and such from the main content folder, but only if those files are copied to your mod folder. The end result of your mod should be a default content folder that is identical to the default state of the SDK, and all of your own modified files within the one plugin folder you want to release. Do not edit or modify files within the root content folder, and do not reference any files within any other mod folder.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_03.gif|frameless|267x267px]]&lt;br /&gt;
&lt;br /&gt;
You should now have an empty content folder:&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_04.gif|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
=== Importing your car body to the mod folder ===&lt;br /&gt;
Press the Import button in the Content Browser with your mod content folder selected to import your car body FBX file.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_05.gif|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
In the following pop-up import options, make sure the following settings are exactly as described:&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_06.gif|frameless|559x559px]]&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;Skeletal Mesh&#039;&#039; should be set to &#039;&#039;&#039;True&#039;&#039;&#039;&lt;br /&gt;
#&#039;&#039;Import Mesh&#039;&#039; should be set to &#039;&#039;&#039;True&#039;&#039;&#039;&lt;br /&gt;
#&#039;&#039;Skeleton&#039;&#039; should be set to &#039;&#039;&#039;None&#039;&#039;&#039;&lt;br /&gt;
#&#039;&#039;Import Meshes in Bone Hierarchy&#039;&#039; should be set to &#039;&#039;&#039;False&#039;&#039;&#039;&lt;br /&gt;
#&#039;&#039;Import Morph Targets&#039;&#039; should be set to &#039;&#039;&#039;True&#039;&#039;&#039;&lt;br /&gt;
#&#039;&#039;Normal Import Method&#039;&#039; should be set to &#039;&#039;&#039;Import Normals and Tangents&#039;&#039;&#039;&lt;br /&gt;
#&#039;&#039;Material Search Location&#039;&#039; should be set to &#039;&#039;&#039;All Assets&#039;&#039;&#039;&lt;br /&gt;
#&#039;&#039;Material Import Method&#039;&#039; should be set to &#039;&#039;&#039;Do Not Create Material&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Once you have configured the import dialog correctly, press I&amp;lt;nowiki/&amp;gt;mport,&amp;lt;nowiki/&amp;gt; or if you are importing multiple car bodies, press Import All.&lt;br /&gt;
&lt;br /&gt;
You should now have a Skeletal Mesh (pink icon), a Physics Asset (yellow/brownish icon), and a Skeleton (light blue icon) in your mod content folder:&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_07.gif|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
== Check the Materials ==&lt;br /&gt;
&lt;br /&gt;
The materials applied to the car body denote what part of the car that is. They aren&#039;t so much &#039;&#039;placeholder&#039;&#039; materials as they are &#039;&#039;identifier&#039;&#039; materials; the materials that are applied to the car determine the category of paint on that material slot in-game.&lt;br /&gt;
&lt;br /&gt;
Double click on the Skeletal Mesh for your car. You should then see a screen like this:&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_09.gif|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
If instead, when you import a car, you see something more like this, then you will have to apply your materials manually: &lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_08.gif|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
The materials to apply to the correct slots on your car body are located in &amp;lt;code&amp;gt;Content/Cars/Meshes/Bodies&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Descriptions of the materials to apply are found in the [[Car Body Mods#Applying materials|Car Body Material Options]] step. &lt;br /&gt;
== Set Car &amp;amp; Chassis Data ==&lt;br /&gt;
&lt;br /&gt;
===Create car body variant data===&lt;br /&gt;
This is the file that will contain all the stats about your car; how many seats it can hold, how many doors it has, what the wheelbase is, etc..&lt;br /&gt;
&lt;br /&gt;
Create a Body Variant Preview Data object in your mod folder from the Add New menu.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_11.gif|frameless|342x342px]]&lt;br /&gt;
&lt;br /&gt;
Name your Body Variant Preview Data file correctly. The name of this file will determine the name of the body in-game.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_12.gif|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
Open the Body Variant Preview Data file. In the top field, drag and drop, or use the arrow button, to put your skeletal mesh file into the Skeletal Mesh data field.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_19.gif|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
The data inside the Body Variant Preview Data file determines the stats of your car design.&lt;br /&gt;
&lt;br /&gt;
The data is set within the file, but updates in real-time in the body edit scene, which you should open first.&lt;br /&gt;
&lt;br /&gt;
Opening the body edit scene and loading your car will help you visualise what all the data in this file translates to in-game.&lt;br /&gt;
&lt;br /&gt;
=== Loading a Car For Editing ===&lt;br /&gt;
Open the &amp;lt;code&amp;gt;ThumbnailGeneratorLevel_Car&amp;lt;/code&amp;gt; level.&lt;br /&gt;
&lt;br /&gt;
[[File:ModTools ThumbnailLevelCar.jpg|frameless|303x303px]]&lt;br /&gt;
&lt;br /&gt;
On the top bar, select the drop-down menu next to the &amp;lt;code&amp;gt;Play&amp;lt;/code&amp;gt; button, and select &amp;lt;code&amp;gt;Simulate&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_15.gif|frameless|240x240px]] &lt;br /&gt;
&lt;br /&gt;
This will start simulating the &amp;quot;game&amp;quot; (in this case, the thumbnail generator level). It is important that everything you do in this level is done &#039;&#039;while you are simulating the level.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the &amp;lt;code&amp;gt;World Outliner&amp;lt;/code&amp;gt;, search for the &amp;lt;code&amp;gt;BodyEditSceneBluetility&amp;lt;/code&amp;gt;. This utility will be the interface between the level, which will have your car loaded in it, and your Car Body Variant file.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_14.gif|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
In the Details panel of the &amp;lt;code&amp;gt;BodyEditSceneBluetility&amp;lt;/code&amp;gt;, you will find buttons and options for loading your car body.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_16.gif|frameless|267x267px]] &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Load Body&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Unload Body&amp;lt;/code&amp;gt; menu options will do just that—load and unload your body—but you have to specify the body you want to load first, which is done in the Variant Asset menu.&lt;br /&gt;
&lt;br /&gt;
Select your Body Variant file from the content browser, and put it in the Variant Asset list by either dragging and dropping it in to the icon, or by pressing the arrow button next to the icon.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_17.gif|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
Press &amp;lt;code&amp;gt;Load Body&amp;lt;/code&amp;gt;, making sure that you are Simulating.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_18.gif|frameless|311x311px]]&lt;br /&gt;
&lt;br /&gt;
You should now see your car loaded into the scene. You can begin to edit the data within the &amp;lt;code&amp;gt;Body Variant&amp;lt;/code&amp;gt; file and see it update in real time in the scene, which is really helpful for setting chassis data.&lt;br /&gt;
&lt;br /&gt;
[[File:Annotation_2020-03-16_171445.png|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
=== What all the Body Variant settings mean ===&lt;br /&gt;
[[File:Untitled-27.png|alt=|right|frameless|1073x1073px]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;u&amp;gt;Mesh&amp;lt;/u&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Skeletal Mesh&amp;lt;/u&amp;gt;&#039;&#039;&#039; is the physical mesh of your body.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Car Material Settings&amp;lt;/u&amp;gt;&#039;&#039;&#039; are the default materials that should be applied to certain slots when a player loads it in-game. For instance, you may find it useful to set the window trim on an older body to chrome by default.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Mesh Data&amp;lt;/u&amp;gt;&#039;&#039;&#039; is a generated file that you dont need to worry about. We&#039;ll make one of these in the [[Car Body Mods#Generate Thumbnails|thumbnail generation]] stage.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Bone Constraints&amp;lt;/u&amp;gt;&#039;&#039;&#039; are the physical limits of where bone morphs can be affected. This is an advanced menu for if you want to enter these manually. For most poeple, we have an easy system for assigning these bone limits in the [[Car Body Mods#Set Bone Limits|bone limit setting]] stage. If a bone does not have limits, the player will be able to drag the bones around in any direction they want, as far as they want, and this almost never ends well. Note that &#039;&#039;morph targets don&#039;t need to have their limits set.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;u&amp;gt;UID&amp;lt;/u&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Family GUID&amp;lt;/u&amp;gt;&#039;&#039;&#039; is an unique identifier that is shared between all variants of the same body family. If you are making more than one car body in the same family, they should all share the same family GUID.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Variant GUID&amp;lt;/u&amp;gt;&#039;&#039;&#039; is an unique identifier that is unique for this body. Every body in Automation needs to have an unique GUID. If you, by chance, happen to generate or use the same Variant GUID as another body, when you try and select one the game may instead chose the other for you. If this happens, generate a new Variant GUID.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;u&amp;gt;Preview&amp;lt;/u&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
* You shouldn&#039;t have to set anything here. These fields will be populated in the [[Car Body Mods#Generate Thumbnails|thumbnail generation]] stage.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;u&amp;gt;Settings&amp;lt;/u&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Variant Body Type&amp;lt;/u&amp;gt;&#039;&#039;&#039; determines the category of the body in-game. Different categories have different advantages and disadvantages.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Year&amp;lt;/u&amp;gt;&#039;&#039;&#039; is the year that this body unlocks in Campaign. Bodies that are closer to the current year (and thus more recent) score better in some categories, but having a body unlock the same year as its real-life inspiration or counterpart is ill-advised due to the time it takes to engineer cars in the campaign. Generally, Automation bodies are 3 to 10 years older than the cars they&#039;re based on.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Doors&amp;lt;/u&amp;gt;&#039;&#039;&#039; determines the number of doors on this body, which affects some demographics&#039; statistics.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Maximum Seat Rows&amp;lt;/u&amp;gt;&#039;&#039;&#039; is a legacy value that determines the maximum number of seat rows your body can have (which affects some demographics&#039; statistics). This value has been superseded by the Seats section below, which allows different maximum seat row values for different engine placements.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Is Release Ready&amp;lt;/u&amp;gt;&#039;&#039;&#039; is a dev feature we use to allow us to configure and adjust bodies that are not ready to be in-game. If this box is unticked, you will not be able to see it in-game.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Seat Options&amp;lt;/u&amp;gt;&#039;&#039;&#039; is a legacy option that is no longer used.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Front Suspension To Disable&amp;lt;/u&amp;gt;&#039;&#039;&#039; will disable those suspension options for this body. This is useful if your body is shaped such that certain suspension types clip through the body in a way that cannot be fixed with height offsets.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Rear Suspension To Disable&amp;lt;/u&amp;gt;&#039;&#039;&#039; will disable those suspension options for this body. This is useful if your body is shaped such that certain suspension types clip through the body in a way that cannot be fixed with height offsets.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Chassis Type&amp;lt;/u&amp;gt;&#039;&#039;&#039; sets the body to the selected chassis for thumbnail purposes and has no effect in-game.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Is Softtop Convert&amp;lt;/u&amp;gt;&#039;&#039;&#039; will set this body as a convertible with a soft top. This is for demographic calculations.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Is Hardtop Convert&amp;lt;/u&amp;gt;&#039;&#039;&#039; will set this body as a convertible with a hard top. This is for demographic calculations.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Cargo Subtracts&amp;lt;/u&amp;gt;&#039;&#039;&#039; will subtract the cargo volume from the cabin space in vehicles with a shared passenger and cargo area (wagons, MPVs, and such). This is useful for making cars where the more seat rows a body has, the less cargo space it has.&lt;br /&gt;
*The &#039;&#039;&#039;&amp;lt;u&amp;gt;Seats&amp;lt;/u&amp;gt;&#039;&#039;&#039; section determines the maximum seat rows per applicable engine placement. For engine placements that aren&#039;t supported by the body as per the Engine Placement array below, their maximum seat values can be left as &amp;quot;None&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;u&amp;gt;Engine&amp;lt;/u&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Engine Placement&amp;lt;/u&amp;gt;&#039;&#039;&#039; is an array containing all the available engine positions for this body.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;u&amp;gt;Chassis&amp;lt;/u&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;u&amp;gt;Footprint&amp;lt;/u&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Wheelbase&amp;lt;/u&amp;gt;&#039;&#039;&#039; is the wheelbase of the body in centimetres. Set this before setting anything else for best results.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Track Width&amp;lt;/u&amp;gt;&#039;&#039;&#039; is supposedly track width in centimetres, but isn&#039;t actually measured accurately. Don&#039;t try and match it to real figures; just make sure the wheels are correctly positioned (with the correct tyres) and that there is enough room left in the wheel arches to make the tyres as wide as makes sense for the car (which might include having to use arch flare morphs).  If you need room for wider tyres, set this a little narrower.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Pan Width&amp;lt;/u&amp;gt;&#039;&#039;&#039; determines how wide the floor of the chassis is. This value must be set larger than the track width for it to have an effect.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Y Offset&amp;lt;/u&amp;gt;&#039;&#039;&#039; is used to shuffle the mesh back and forwards to sit correctly in the middle of the chassis. If you&#039;re putting big numbers in here (more than 15, perhaps), you probably need to realign your mesh on the Y axis.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Arch Width&amp;lt;/u&amp;gt;&#039;&#039;&#039; [missing info]&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;u&amp;gt;Vertical Position&amp;lt;/u&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Default Suspension Height&amp;lt;/u&amp;gt;&#039;&#039;&#039; is used to set the default position of the ride height slider. Makes sure that supercars start off set low, SUVs start high, etc.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Height Offset&amp;lt;/u&amp;gt;&#039;&#039;&#039; moves the car model up and down as compared to the chassis/wheels etc. This should usually be set so that with appropriate sized tyres, and Default Suspension Height set to 0, the wheels are nearly touching the top of the arches. Some cars might want to be set a bit higher (SUVs and the like), but remember that when a car is set to a ride height of 0, it has very little suspension travel, so you should be setting height offset on the basis of the lowest the car could possibly ever sit.&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;u&amp;gt;Front&amp;lt;/u&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Firewall Y&amp;lt;/u&amp;gt;&#039;&#039;&#039; is a setting for how far forward the front firewall is. It&#039;s easiest to set this in side view in Wireframe mode. Set to match your mesh&#039;s firewall. This value is important for engine bay size.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Firewall Z&amp;lt;/u&amp;gt;&#039;&#039;&#039; is a setting for how tall the front firewall is. It&#039;s easiest to set this in side view in Wireframe mode.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Firewall Lean&amp;lt;/u&amp;gt;&#039;&#039;&#039; is a setting for how far forward the front firewall leans.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Nose Length&amp;lt;/u&amp;gt;&#039;&#039;&#039; is used to set how far forward the engine bay goes. This is important for engine bay size. Make sure the chassis doesn&#039;t stick out of the car, even when you&#039;ve moved morphs around on the nose.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Cab Over&amp;lt;/u&amp;gt;&#039;&#039;&#039; is a tick box to say whether the engine goes under the front seats of your car body. Affects some statistics. Used for flat-nose vans and similar vehicles that lack bonnets.&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;u&amp;gt;Rear&amp;lt;/u&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Rear Wall Y&amp;lt;/u&amp;gt;&#039;&#039;&#039; is a setting for how far backward the rear firewall is. It&#039;s easiest to set this in side view in Wireframe mode. Ignore this value for front-engine-only cars.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Rear Wall Z&amp;lt;/u&amp;gt;&#039;&#039;&#039; is a setting for how tall the rear firewall is. It&#039;s easiest to set this in side view in Wireframe mode. Ignore this value for front-engine-only cars.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Tail Length&amp;lt;/u&amp;gt;&#039;&#039;&#039; is how far the back of the chassis goes. Important for rear engine bay size, but not very important for front-engine cars. Be careful that it doesn&#039;t stick out of the car.&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;u&amp;gt;Wheels&amp;lt;/u&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Max Wheel Diameter&amp;lt;/u&amp;gt;&#039;&#039;&#039; is the maximum wheel &amp;amp; tyre diameter in centimetres. Set this by adjusting the default tyre size to work out what the biggest practical tyre size would be, then putting that number here.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Min Wheel Diameter&amp;lt;/u&amp;gt;&#039;&#039;&#039; is the minimum wheel &amp;amp; tyre diameter in centimetres. Set this by adjusting the default tyre size to work out what the smallest practical tyre size would be, then putting that number here.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Default Wheel Diameter&amp;lt;/u&amp;gt;&#039;&#039;&#039; sets what tyre diameter is loaded on the car by default. Set it to something within reason for the car type.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Default Rim Diameter&amp;lt;/u&amp;gt;&#039;&#039;&#039; sets what rim diameter is loaded on the car by default. Set it to something within reason for the car type. Remember to set it correctly for a tyre profile that makes sense for the type and age of the car. Older cars need high-ish-profile tyres, due to in-game restrictions on using low-profile tyres in early eras.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Default Wheel Width&amp;lt;/u&amp;gt;&#039;&#039;&#039; sets what tyre width is loaded on the car by default. Set it to something within reason for the car type.&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;u&amp;gt;Path (Legacy Class)&amp;lt;/u&amp;gt;====&lt;br /&gt;
This is a legacy option for older bodies. You shouldn&#039;t need to touch anything in here unless you are converting a pre-UE4.24 mod.&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;u&amp;gt;Body Boxes&amp;lt;/u&amp;gt;====&lt;br /&gt;
This contains all the sizes and positions of the body boxes, and are generated automatically in the [[Car Body Mods#Generate Thumbnails|thumbnail generation]] stage.&lt;br /&gt;
&lt;br /&gt;
===== Manually enlarging engine bays =====&lt;br /&gt;
Engine bay bounds are determined by four points on one side of the car that form a rectangle. These points are then mirrored to form a box representing the engine bay.&lt;br /&gt;
&lt;br /&gt;
For more adventurous mod bodies such as open-wheelers, you may find that the engine bay isn&#039;t long or tall enough to fit a suitably-sized engine. This can be fixed by increasing the two larger Y or Z values to the desired amount after you&#039;ve generated the thumbnail, body boxes, and mesh data. Keep in mind that when you regenerate the thumbnail and mesh data, your modified engine bay values will be overwritten, so it may help to store them in a text file somewhere.&lt;br /&gt;
&lt;br /&gt;
==== A note on convertibles ====&lt;br /&gt;
Convertibles should have their body tag set to the type of body they are aside from being convertibles, with the &#039;soft top&#039; or &#039;hard top&#039; convertible values being set separately.  The &#039;convertible&#039; body type is no longer used.&lt;br /&gt;
&lt;br /&gt;
== Set Bone Limits ==&lt;br /&gt;
Once you&#039;ve set all the other car body settings, you&#039;ll need to set the limits for bone movement.&lt;br /&gt;
&lt;br /&gt;
While simulating in the car body scene, make sure your car is loaded and select it.&lt;br /&gt;
&lt;br /&gt;
[[File:Annotation_2020-03-17_155800.png|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
You should now see a set of blue squares at the locations of your bones as you set them in your modelling program. Click on one of these blue squares, and start to move it along an axis to see how it affects the body. You can set the current position of the bone as the new limit of that bone by right clicking on it and selecting &amp;quot;Add to limits&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_20.gif|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
Right-click on a bone and select &amp;quot;Move all bones to bind pose&amp;quot; to move the bones back to their default location.&lt;br /&gt;
&lt;br /&gt;
Note that if you accidently set a bone&#039;s limits too far, there are two ways to fix it: you can either right-click &amp;quot;Reset Limits&amp;quot; and then set the limit again, or (if you know what you&#039;re doing) type a new limit into the appropriate axis of the corresponding bone in the Bone Constraints array.&lt;br /&gt;
&lt;br /&gt;
The following other options on right-clicking a bone are as follows:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Move all bones to max&amp;quot; will move a bone as far as possible in the positive axes it can move.&lt;br /&gt;
* &amp;quot;Move all bones to min&amp;quot; will move a bone as far as possible in the negative axes it can move.&lt;br /&gt;
* &amp;quot;Reset limits&amp;quot; will remove all limits from a selected bone.&lt;br /&gt;
* &amp;quot;Move all bones to bind pose&amp;quot; will move all bones back to their default positions.&lt;br /&gt;
&lt;br /&gt;
Bones that appear red are bones that exist as part of the skeleton but aren&#039;t weighted to any vertices on the car.&lt;br /&gt;
&lt;br /&gt;
== Generate Thumbnails ==&lt;br /&gt;
While simulating, load your car body.&lt;br /&gt;
&lt;br /&gt;
In the Body Edit Scene Bluetility, click Generate Thumbnail.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_21.gif|frameless|377x377px]]&lt;br /&gt;
&lt;br /&gt;
You should now have two more files in your mod content folder, but don&#039;t let their lack of an &amp;quot;unsaved&amp;quot; asterisk icon fool you: these files do indeed need to be saved. Right-click the files and save them manually; otherwise, they will indeed stop existing.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_23.gif|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
You are now done creating all the files and settings you need! You can now export your mod body.&lt;br /&gt;
&lt;br /&gt;
=== For additional body variants ===&lt;br /&gt;
For additional variants, repeat the same process for each CPP. If you copied the CPP from one variant and edited it for a new one, this will replace the original thumbnail. To avoid this problem, clear the thumbnail (and mesh data) from &amp;quot;Variant Preview Texture&amp;quot; on each additional variant before generating their thumbnails.&lt;br /&gt;
&lt;br /&gt;
== Export Your Car Body ==&lt;br /&gt;
[[File:ShareMod.png|alt=|right|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
#In Unreal Editor, at the top toolbar, select &amp;quot;Share Mod&amp;quot; and then click on the name of your car body.&lt;br /&gt;
# Select a path where there are no spaces in the file path. As an example, &amp;lt;code&amp;gt;C:\Users\Name\Documents\Unreal Projects\AutomationGame&amp;lt;/code&amp;gt; &#039;&#039;will not work&#039;&#039;, since the phrase &amp;lt;code&amp;gt;Unreal Projects&amp;lt;/code&amp;gt; contains a space. &amp;lt;code&amp;gt;C:\Users\Name\Documents\ModExport&amp;lt;/code&amp;gt; &#039;&#039;will&#039;&#039; work, because there are no spaces in the file path.&lt;br /&gt;
# Once your build is successful, you need to launch the &amp;quot;Automation - The Car Company Tycoon Game Workshop Tool&amp;quot; from your &amp;quot;Tools&amp;quot;, which can be accessed by hovering over &amp;quot;Library&amp;quot; in Steam.&lt;br /&gt;
# Enjoy your new car body!&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Q&#039;&#039;&#039;: I get a Max Script error running the script to unwrap my body like so: ===&lt;br /&gt;
[[File:Maxscript_Err_Unwrap.png|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039;: Car bodies in UE use 3 UVW maps and your mesh currently has less. To ensure you have enough maps, take the [[Car Body Mods/unwraperror|following steps]].&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Q&#039;&#039;&#039;: I get a Max Script error running the script to mirror my body like so: ===&lt;br /&gt;
[[File:Vertex index error.png|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039;: Save the body file as is, close 3ds Max, and then reopen the file. This fixes most instances of this error.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Q:&#039;&#039;&#039; Unreal won&#039;t open the SDK project files. ===&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Make sure you&#039;re running the correct version of Unreal Editor. It should be version &amp;lt;u&amp;gt;4.24.3&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Q:&#039;&#039;&#039; I got my body in the game, but it looks weird whenever I apply fixtures. ===&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Refer back to [[Car Body Mods#UV Unwrapping|the UV unwrapping section]], where this problem is addressed.&lt;br /&gt;
&lt;br /&gt;
=== Q: I get &amp;quot;Error: Duplicate Body Variant UIDs found. Unable to generate previews without fixing UID issues. Check log for more information.&amp;quot; when generating my thumbnail. ===&lt;br /&gt;
A: Open the &amp;lt;code&amp;gt;Output Log&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;Window&amp;lt;/code&amp;gt; (in the top bar) &amp;gt; &amp;lt;code&amp;gt;Developer Tools&amp;lt;/code&amp;gt; &amp;gt; &amp;lt;code&amp;gt;Output Log&amp;lt;/code&amp;gt;, and check the log message. There should be a line near the end which reads like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LogBlueprintUserMessages: [None] Error! Duplicate Body UIDs found. These bodies have identical GUIDs:   : Asset Name: 00sGPV4DoorXL_BP_Preview , GUID: 1431959a9c074d298d1787a59687f0fd, File Path: /Game/Cars/Blueprints/BodyEditors/Thumbnails/00sGPV4DoorXL_BP/00sGPV4DoorXL_BP_Preview.00sGPV4DoorXL_BP_Preview and: Asset Name: 00sGPV4DoorXL_BP_Preview , GUID: 1431959a9c074d298d1787a59687f0fd, File Path: /Game/DeveloperSandbox/00sGPV4DoorXL_BP_Preview.00sGPV4DoorXL_BP_Preview&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note how two different assets, in this case both with the same name, exists in two different file locations, with the same GUID. To fix the error, change one of the GUIDs for one of the files. Every car should have its own unique GUID.&lt;br /&gt;
&lt;br /&gt;
=== Q: I get &amp;quot;Error: Car Body is missing some material slots! It may not work correctly. ===&lt;br /&gt;
A: The &amp;lt;code&amp;gt;Thumbnail Generator&amp;lt;/code&amp;gt; automatically checks for certain materials on your body, to ensure things work correctly in Automation, and in the exporter. Things like the &amp;lt;code&amp;gt;BonnetCam&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DriverCam&amp;lt;/code&amp;gt; materials, whether your car has a &amp;lt;code&amp;gt;Plastic&amp;lt;/code&amp;gt; material for the underbody, etc.&lt;br /&gt;
&lt;br /&gt;
Open your car body skeletal mesh file from your mod content folder and check the material assignments. If you are missing any unexpected materials, check your source files in Blender/etc.. and ensure the files were exported correctly.&lt;br /&gt;
&lt;br /&gt;
If you have all material slots you were expecting to see, and the error message is simply being over-cautious and you do not want to have any of these materials on your car, you can safely ignore this message.&lt;br /&gt;
&lt;br /&gt;
If the message is annoying you, expand the details menu of the &amp;lt;code&amp;gt;BodyEditSceneBlutility&amp;lt;/code&amp;gt;, expand the &amp;lt;code&amp;gt;CamsoOnly&amp;lt;/code&amp;gt; sub-menu, and clear the offending materials you don&#039;t care for from the &amp;lt;code&amp;gt;Body Material Slots To Check&amp;lt;/code&amp;gt; array.&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=Car_Body_Mods&amp;diff=5033</id>
		<title>Car Body Mods</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=Car_Body_Mods&amp;diff=5033"/>
		<updated>2025-05-01T05:38:26Z</updated>

		<summary type="html">&lt;p&gt;Hannah: /* FAQ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
A car body is a collection of files, of which a &amp;lt;code&amp;gt;Body Variant Preview Data&amp;lt;/code&amp;gt; file is the parent.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Body Variant Preview Data&amp;lt;/code&amp;gt; contains the settings and applicable options for the car body, as well as a reference to the car body mesh.&lt;br /&gt;
&lt;br /&gt;
The car body mesh itself is a skeletal mesh in UE4, which is set up in a specific way. The mesh needs a set of placeholder materials assigned to it, as well as needing a certain orientation and size and specific UV layouts, along with highly specialised modelling and rigging.&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
# In a 3D modelling package:&lt;br /&gt;
## Create a car body mesh.&lt;br /&gt;
## Set up the skinning/rigging and morph targets.&lt;br /&gt;
## Create the UV maps.&lt;br /&gt;
# In UE4:&lt;br /&gt;
## Set up a mod.&lt;br /&gt;
## Import the car body to the mod folder.&lt;br /&gt;
## Ensure that the placeholder materials are properly assigned to the body.&lt;br /&gt;
## Create and fill out a body variant preview file.&lt;br /&gt;
## Generate the car thumbnail and preview info.&lt;br /&gt;
## Cook the mod.&lt;br /&gt;
# In the Automation Workshop Publishing Tool:&lt;br /&gt;
## Set up a workshop item.&lt;br /&gt;
## Share your mod.&lt;br /&gt;
&lt;br /&gt;
== Creating the Car Body Mesh ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
Prior experience with modelling (particularly with subdivision surfaces) is required to make good Automation car bodies. Should you lack said experience, the links below are some good places to start:  &lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/playlist?list=PLjEaoINr3zgEq0u2MzVgAaHEBt--xLB6U BlenderGuru Blender 2.8 Beginner Tutorial]  &lt;br /&gt;
* [https://www.youtube.com/watch?v=ppASl6yaguU&amp;amp;list=PLrjIgEdKLivgpCMmFC0_sV60Y_Ftp-WLD CGGeek Blender 2.8 Beginner Tutorial]  &lt;br /&gt;
* [https://www.youtube.com/playlist?list=PLa1F2ddGya_-UvuAqHAksYnB0qL9yWDO6 Blender Foundation Blender 2.8 Fundamentals]  &lt;br /&gt;
* [https://www.youtube.com/playlist?list=PLda3VoSoc_TRuNB-5fhzPzT0mBfJhVW-i BornCG Blender 2.8 Tutorial Series]  &lt;br /&gt;
&lt;br /&gt;
Automation car bodies in particular should be created as a half, and then mirrored at or near completion to ensure symmetry and minimise the amount of work required to tweak them. Which half of a body you decide to model is irrelevant. &lt;br /&gt;
&lt;br /&gt;
For an overview of how a vanilla body is modelled, Hard Rooster has made a [[Blender_Specific_instructions#Modelling_a_Body_in_Blender_in_9-hours|video series]] covering the modelling of a body from start to finish in Blender.  &lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
* UE4&#039;s units are in centimetres. For example, 100 units in UE4 are equivalent to 1 metre.&lt;br /&gt;
*A finished car body mesh is made of between 7,000 and 30,000 triangles (though a common upper limit is 15,000 triangles).&lt;br /&gt;
**This varies depending on things like the curvature of the body (compare a 1980s van to a 1950s sports car, for example), morphs that may require special topology, and the size of the body (as insufficient triangle density on a larger body may result in fixture tearing).&lt;br /&gt;
*Panel gaps (including door seams) are modelled into the car.&lt;br /&gt;
**A transparent mesh is often added over the panel seam to make fixtures conform more smoothly.&lt;br /&gt;
* The entire car should be one object/element.&lt;br /&gt;
*The body must not contain integrated mirrors, grilles, lights, badges, vents, door handles, aerials, fuel caps etc. Those should be made separately as fixtures.&lt;br /&gt;
**An exception may be made for sculpted vents (without the actual vent area, such as those on the LD Dodge Charger) or character lines, if they can be morphed flat and/or don&#039;t interfere with the versatility of the body.&lt;br /&gt;
* Use quads as much as possible, as they shade and reflect better than triangles.&lt;br /&gt;
* The body must be single-sided and must not have backfaces. It is made double-sided by materials in UE4.&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;300&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:NewCarTopView.jpg&lt;br /&gt;
File:NewCarSideView.jpg&lt;br /&gt;
File:NewCarFrontView.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
==== Coordinates ====&lt;br /&gt;
&lt;br /&gt;
* The front of the car body should face towards the negative Y (front to back) axis.&lt;br /&gt;
*the center of the body should be roughly at 0 on the Y axis, and exactly 0 on the X axis.&lt;br /&gt;
* The bottom edge of the car should roughly sit at 0 on the Z axis, with the top facing towards positive Z (ie: it should not be upside-down).&lt;br /&gt;
** Remember that the Y axis in 3ds Max and Blender runs &#039;&#039;forwards and backwards,&#039;&#039; whereas the Z axis runs &#039;&#039;up and down.&#039;&#039; This may not be consistent across all 3D packages.&lt;br /&gt;
&lt;br /&gt;
* All vertices at the centre of the car (where it&#039;s cut in half) should be &#039;&#039;exactly&#039;&#039; at 0 on the X (left to right) axis.&lt;br /&gt;
&lt;br /&gt;
== Applying Materials ==&lt;br /&gt;
&lt;br /&gt;
Automation uses a set of placeholder materials applied to the mesh to define different paintable parts of the car.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Only one of each material is supported.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* If you need more materials to assign, consider adjusting your mesh, because there are no more materials to assign than those listed here, and you can only have one of each. 😉&lt;br /&gt;
* These will be replaced with the correct materials (if you&#039;ve assigned the material slots correctly), informing the game what various areas of the car are used for, and what materials they require.&lt;br /&gt;
* These materials are colour-coded to represent the different areas of the car, and are replaced with the proper in-game materials dynamically. Make sure to assign these placeholders correctly!&lt;br /&gt;
&lt;br /&gt;
=== List of car body materials ===&lt;br /&gt;
The following materials are used on car bodies:&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
!Material Name&lt;br /&gt;
!Area Used&lt;br /&gt;
!Paint Category &lt;br /&gt;
!Colourable &lt;br /&gt;
!Location in UE4&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Bonnet&amp;lt;/code&amp;gt;&lt;br /&gt;
|The bonnet&lt;br /&gt;
|Body&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Bonnet&lt;br /&gt;
|General paintable material. Has its own visibility toggle in-game.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;BonnetCam&amp;lt;/code&amp;gt;&lt;br /&gt;
|Above the bonnet; determines the default location of the bonnet camera&lt;br /&gt;
|N/A&lt;br /&gt;
|No&lt;br /&gt;
|Content/Cars/Meshes/Bodies/BonnetCam&lt;br /&gt;
|This material is invisible in-game and has no effect on aesthetics.&lt;br /&gt;
for the Exporter, the bounding box origin of the geometry which uses this material defines where the bonnet camera will be.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Bumper_Front&amp;lt;/code&amp;gt;&lt;br /&gt;
|The front bumper&lt;br /&gt;
|Body&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Bumper_Front&lt;br /&gt;
|Prior to the Light Campaign 4.2 update, front and rear bumpers could not be painted separately.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Bumper_Rear&amp;lt;/code&amp;gt;&lt;br /&gt;
|The rear bumper&lt;br /&gt;
|Body&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Bumper_Rear&lt;br /&gt;
|Prior to the Light Campaign 4.2 update, front and rear bumpers could not be painted separately.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;CabinBounds&amp;lt;/code&amp;gt;&lt;br /&gt;
|Deprecated&lt;br /&gt;
|N/A&lt;br /&gt;
|No&lt;br /&gt;
|Content/Cars/Meshes/Bodies/CabinBounds&lt;br /&gt;
|Since bounding boxes for car calculations are now done dynamically since the Light Campaign 4.2 update, this material is listed for legacy purposes only.&lt;br /&gt;
(This material was previously used to determine cabin size.)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;CargoBounds&amp;lt;/code&amp;gt;&lt;br /&gt;
|Deprecated&lt;br /&gt;
|N/A&lt;br /&gt;
|No&lt;br /&gt;
|Content/Cars/Meshes/Bodies/CargoBounds&lt;br /&gt;
|Since bounding boxes for car calculations are now done dynamically since the Light Campaign 4.2 update, this material is listed for legacy purposes only.&lt;br /&gt;
&lt;br /&gt;
(This material was previously used to determine trunk size, as well as front trunk size for mid- and rear-engine-only bodies.)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Car_Roof&amp;lt;/code&amp;gt; (formerly &amp;lt;code&amp;gt;Soft_Top&amp;lt;/code&amp;gt;)&lt;br /&gt;
|General car roof slot&lt;br /&gt;
|Body&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Car_Roof&lt;br /&gt;
|General paintable material. Was previously exclusive to softtop convertibles until the Light Campaign 4.2 update.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Chrome&amp;lt;/code&amp;gt;&lt;br /&gt;
|Areas that must remain chrome&lt;br /&gt;
|N/A&lt;br /&gt;
|No&lt;br /&gt;
|Content/Cars/Meshes/Bodies/ChromeBUS&lt;br /&gt;
|For parts of the car that should always be chrome, use this material.&lt;br /&gt;
This material cannot be changed in-game.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;DriverCam&amp;lt;/code&amp;gt;&lt;br /&gt;
|Inside the cabin; determines the default location of the driver camera(s)&lt;br /&gt;
|N/A&lt;br /&gt;
|No&lt;br /&gt;
|Content/Cars/Meshes/Bodies/DriverCam&lt;br /&gt;
|This material is invisible in-game and has no effect on aesthetics.&lt;br /&gt;
For the Exporter, the bounding box origin of the geometry which uses this material defines where the driver camera will be. &lt;br /&gt;
&lt;br /&gt;
Optionally, this material can be split across boxes on either side of the car, allowing for different left- and right-hand driver positions.&lt;br /&gt;
&lt;br /&gt;
For the BeamNG exporter, this position is then raycast forward, with any resulting collision with a vertex or face becoming the driver camera position. Effectively, this means the default driver camera position is just in front of the windshield, but aligned with the bounding box origin on the X and Z axes.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;FrontBounds&amp;lt;/code&amp;gt;&lt;br /&gt;
|Deprecated&lt;br /&gt;
|N/A&lt;br /&gt;
|No&lt;br /&gt;
|Content/Cars/Meshes/Bodies/FrontBounds&lt;br /&gt;
|Since bounding boxes for car calculations are now done dynamically since the Light Campaign 4.2 update, this material is listed for legacy purposes only.&lt;br /&gt;
&lt;br /&gt;
(This material was previously used to determine front trunk volume in rear-engined cars with a front engine option.)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;LipPlacement&amp;lt;/code&amp;gt;&lt;br /&gt;
|Around undertray, over panel gaps, and over wheel wells&lt;br /&gt;
|N/A&lt;br /&gt;
|No&lt;br /&gt;
|Content/Cars/Meshes/Bodies/LipPlacement&lt;br /&gt;
|Used to cover panel gaps, wheel wells, and undertrays so that fixtures can conform to them.&lt;br /&gt;
This material is invisible in-game.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;LowerBounds&amp;lt;/code&amp;gt;&lt;br /&gt;
|Deprecated&lt;br /&gt;
|N/A&lt;br /&gt;
|No&lt;br /&gt;
|Content/Cars/Meshes/Bodies/LowerBounds&lt;br /&gt;
|Since bounding boxes for car calculations are now done dynamically since the Light Campaign 4.2 update, this material is listed for legacy purposes only.&lt;br /&gt;
&lt;br /&gt;
(This material was previously used to determine a car&#039;s engine bay size and general weight.)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Paint&amp;lt;/code&amp;gt;&lt;br /&gt;
|The primary paint colour&lt;br /&gt;
|Body&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Paint&lt;br /&gt;
|General paintable material.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Paint_Two_Tone&amp;lt;/code&amp;gt;&lt;br /&gt;
|The secondary paint colour&lt;br /&gt;
|Body&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Paint_Two_Tone&lt;br /&gt;
|General paintable material.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Paint_Misc_1&amp;lt;/code&amp;gt;&lt;br /&gt;
|Misc. paint&lt;br /&gt;
|Body&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Paint_Misc_1&lt;br /&gt;
|General paintable material.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Paint_Misc_2&amp;lt;/code&amp;gt;&lt;br /&gt;
|Misc. paint&lt;br /&gt;
|Body&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Paint_Misc_2&lt;br /&gt;
|General paintable material.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Paint_Misc_3&amp;lt;/code&amp;gt;&lt;br /&gt;
|Misc. paint&lt;br /&gt;
|Body&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Paint_Misc_3&lt;br /&gt;
|General paintable material.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Trim&amp;lt;/code&amp;gt;&lt;br /&gt;
|The general trim&lt;br /&gt;
|Trim&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Trim&lt;br /&gt;
|General paintable material.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Trim_Misc_1&amp;lt;/code&amp;gt;&lt;br /&gt;
|Misc. trim&lt;br /&gt;
|Trim&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Trim_Misc_1&lt;br /&gt;
|General paintable material.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Trim_Misc_2&amp;lt;/code&amp;gt;&lt;br /&gt;
|Misc. trim&lt;br /&gt;
|Trim&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Trim_Misc_2&lt;br /&gt;
|General paintable material.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Trim_Misc_3&amp;lt;/code&amp;gt;&lt;br /&gt;
|Misc. trim&lt;br /&gt;
|Trim&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Trim_Misc_3&lt;br /&gt;
|General paintable material.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Plastic&amp;lt;/code&amp;gt;&lt;br /&gt;
|Underbody&lt;br /&gt;
|Trim&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Plastic&lt;br /&gt;
|Used for underbodies and wheel wells.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Reflective_Mirror&amp;lt;/code&amp;gt;&lt;br /&gt;
|Deprecated&lt;br /&gt;
|N/A&lt;br /&gt;
|No&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Reflective_Mirror&lt;br /&gt;
|Used for reflective mirror glass, back when mirrors were modelled into car bodies.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Steel&amp;lt;/code&amp;gt;&lt;br /&gt;
|Areas that must remain steel&lt;br /&gt;
|N/A&lt;br /&gt;
|No&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Steel&lt;br /&gt;
|For parts of the car that should always be steel, use this material.&lt;br /&gt;
This material cannot be changed in-game.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Tray&amp;lt;/code&amp;gt;&lt;br /&gt;
|The bed of a pickup truck or ute&lt;br /&gt;
|Body&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Tray&lt;br /&gt;
|Fixtures cannot be placed on this material. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Window_Pillar&amp;lt;/code&amp;gt;&lt;br /&gt;
|The pillar trim&lt;br /&gt;
|Trim&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Window_Pillar&lt;br /&gt;
|General paintable material.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Window_Trim&amp;lt;/code&amp;gt;&lt;br /&gt;
|The window trim&lt;br /&gt;
|Trim&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Window_Trim&lt;br /&gt;
|General paintable material.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Windows&amp;lt;/code&amp;gt;&lt;br /&gt;
|The car&#039;s windows&lt;br /&gt;
|Body&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Windows&lt;br /&gt;
|General paintable material.&lt;br /&gt;
Using the default Adjustable Window material, window transparency can be adjusted in-game.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Wing_Mirror_Trim&amp;lt;/code&amp;gt;&lt;br /&gt;
|Deprecated&lt;br /&gt;
|Trim&lt;br /&gt;
|Yes&lt;br /&gt;
|Content/Cars/Meshes/Bodies/Wing_Mirror_Trim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|Used for mirror trim, back when mirrors were modelled into car bodies.&lt;br /&gt;
This material is listed for legacy purposes only.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Creating Body Morphs ==&lt;br /&gt;
Automation car bodies support both morph targets (shape keys), and skinning (rigging) for morphing parts of a car body. You can mix and match as many of each as you want, but be careful with overlapping morphs.&lt;br /&gt;
&lt;br /&gt;
In-game, the morph which is selected is defined as the morph with the highest weight of the selected face/vertex.&lt;br /&gt;
&lt;br /&gt;
* Morph targets are treated as having a maximum skin weight of 0.3 for the vertices that move the most, and multiply down to 0 for vertices that the morph doesn&#039;t move at all.&lt;br /&gt;
** For instance, a morph target which tilts the window pillar forward or backward would have a maximum weight of 0.3 at the top, and 0 at the bottom, with the vertex weighting blending down through the vertices like a gradient.&lt;br /&gt;
* Skin weights should be weighted roughly similarly to morph targets, so the maximum weight of a skin morph should be about 0.3.&lt;br /&gt;
** You can go as high as 1 if you are not using morph targets, or if your morph targets do not overlap a particular area of skin weights.&lt;br /&gt;
** Skin weights should be defined in 8-bit intervals only. UE4&#039;s skeletal meshes only support 8-bit weights, so having your skin use values as a multiple of 1/256 is important. As a rough estimate, values that are a multiple of 0.004 work fine, but be aware that values of less than 0.012 may be ignored.&lt;br /&gt;
&lt;br /&gt;
=== Creating morphs with skinning ===&lt;br /&gt;
Skinning is the main system used to allow the player to drag around and deform a car body in Automation. It&#039;s done via weighting specific vertices to various &amp;quot;bones&amp;quot; that are a representation of what the player is dragging in-game when deforming the body. &lt;br /&gt;
&lt;br /&gt;
It&#039;s also probably the single most confusing step of car creation in Automation, as it&#039;s done in a way that doesn&#039;t have a great deal in common with any other widely used game art process. It uses the same tools as skinning a character in a 3D modelling application, so referring to some character skinning tutorials may give you useful insights into the tools used, but the way Automation uses it is quite unique. &lt;br /&gt;
&lt;br /&gt;
====Basic skinning overview====&lt;br /&gt;
In Automation, bones are used to define which part of the morph moves, but are non-hierarchical. The bones float in space around the car without any connection to each other, with only a Root bone as their parent.  &lt;br /&gt;
&lt;br /&gt;
* Every vertex on a skinned model has a skin weight to at least one bone, and at most four bones.&lt;br /&gt;
**This weighting will be a number between 0 and 1, defining how much a vertex follows the movement of a bone.&lt;br /&gt;
**The weighting is an 8-bit bit value, ie; all values are rounded to the nearest 1/256th&lt;br /&gt;
**For vertices that do not use a bone and instead are morphed with morph targets, they must still be weighted to the Root bone. all vertices must have a weight, and all weights must add up to 1.&lt;br /&gt;
**for vertices with weights that add up to above 1, you will get errors. do not do this. all weights must add up to 1.&lt;br /&gt;
**&#039;&#039;&#039;&#039;&#039;All vertices must have a weight, and all weights must add up to 1.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*When you morph the car in-game, your mouse movements move the bone, and the vertices follow the bone.&lt;br /&gt;
&lt;br /&gt;
====Setting up bones for morphs====&lt;br /&gt;
Bones should float freely around the area which they will deform. All bones should be parented to the origin of the car called &amp;lt;code&amp;gt;Bone Root&amp;lt;/code&amp;gt;.  The naming and hierarchy is important.  &lt;br /&gt;
&lt;br /&gt;
It is a &#039;&#039;requirement&#039;&#039; for the root bone to be named &amp;lt;code&amp;gt;Bone Root&amp;lt;/code&amp;gt;; otherwise, the body will not work correctly!  &lt;br /&gt;
&lt;br /&gt;
The morphs you create are up to you, and vary depending on the shape of the car and which parts can be deformed attractively, but almost every car will have bones for: &lt;br /&gt;
&lt;br /&gt;
* Front and rear wheel arch flares&lt;br /&gt;
* Windscreen rake angle&lt;br /&gt;
* Rear window rake angle&lt;br /&gt;
* Boot/rear length or angle&lt;br /&gt;
*Front and rear bumper length (or front and rear overhang in general)&lt;br /&gt;
&lt;br /&gt;
There is no real limit to how many bones you can have, but each vertex should only be skinned to 4 different bones before issues occur (i.e. vertices may not move how they should), and it can be very difficult in-game to select and deform an area that&#039;s skinned to more than 2 bones. This is because in-game, when you hover over the car, the bone weighted the most to the vertex under your cursor is the bone that you will be moving.&lt;br /&gt;
&lt;br /&gt;
Bones should be created floating near the part of the car they deform. Their location isn&#039;t really important to how they function in-game, but having them placed correctly makes it much easier to understand what each bone is for adjusting their limits in later stages of the modding process. Also, a morph will not work if its bone&#039;s origin is off-screen while trying to move the morph in-game. Try to keep the bones relatively close to the areas they&#039;re morphing.&lt;br /&gt;
&lt;br /&gt;
Note that if you are using the 3ds Max script, you do not need to create bones for anything on the opposite side of the car (e.g wheel arches on the other side), as they will automatically be mirrored when you mirror the car body.  If you are not using the script, or you are using Maya or Blender, all bones that should mirror their actions on the other side of the car (such as wheel arches) should have the correct naming nomenclature so they work correctly in-game.  The following suffixes work for mirrored bones in Automation:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;Name&amp;gt;_opposite&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;Name&amp;gt;_R&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;Name&amp;gt;_L&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;L.&amp;lt;Name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;R.&amp;lt;Name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
In this case, &amp;lt;code&amp;gt;&amp;lt;Name&amp;gt;&amp;lt;/code&amp;gt; is the name of the bone/morph.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:BoneLayout2.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
[[File:ArmatureNaming_01.gif|frameless]]&lt;br /&gt;
&lt;br /&gt;
====Adding bones in 3ds Max ====&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;300&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:ArmatureNaming 03.gif|1. Add a Skin modifier to the modifier stack of your car body mesh.&lt;br /&gt;
File:ArmatureNaming 04.gif|2. From the Parameters section of the Skin Modifier, press Add Bones.&lt;br /&gt;
File:ArmatureNaming 05.gif|3. Select all the bones from the list, and press Select to add them to the skin. (You can use filters to make sure you&#039;re only getting helper objects like dummies in the list.)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Adding bones in Blender====&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;360&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:ArmatureNaming 06.gif|1. Add an &#039;&#039;Armature&#039;&#039; modifier.&lt;br /&gt;
File:ArmatureNaming 07.gif|2. Select your armature.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Weighting the skin====&lt;br /&gt;
&lt;br /&gt;
Now comes the complex bit. Weighting skins is a difficult and creative process that&#039;s almost like remodeling the car into different shapes, but with only skin weights to do it with. Wheel arches are often the easiest place to start on a new model, and a good way to start is to move a bone a reasonably large distance in the direction you want it to move (say, 25 to 50 cm) and then start weighting to that bone&#039;s new position. &lt;br /&gt;
&lt;br /&gt;
* Remember that the higher you set the weight, the farther that area will move with mouse input, and the less weight will be available to assign to other bones. This isn&#039;t too important on wheel arches, but can be an issue on other parts of the car which may share more bones.&lt;br /&gt;
* all weights on a vertex need to add up to 1, and if the current bone is the only bone assigned to that vertex, it can&#039;t have a weight less than 1. By adding the root bone as a second bone, you can now adjust the weight of the bone you want, and the bone root will take the remaining weight.&lt;br /&gt;
* Bones in Blender affect vertex groups of their same name. To skin a mesh, you assign vertices of that mesh to the vertex group (of the same name as the bone you want them to be affected by), and then adjust the weight of that vertex (as a value from 0 to 1) to that vertex group.&lt;br /&gt;
* Keep in mind that Unreal Engine rounds bone weights to the nearest 1/256 (with intervals of roughly 0.004). This minimum weight interval isn&#039;t 100% reliable in some cases—instead, a minimum of 0.008, 0.012, or 0.016 may be used.&lt;br /&gt;
* You may also use weight painting as per [https://www.youtube.com/playlist?list=PLb7obMX2SCf3UqP4R2w_El05BLpFcUpSw Hard Rooster&#039;s video tutorial series], which requires more setup but is generally faster and more convenient.&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;300&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:Blender ArmatureVertexGroupNames 01.gif|1. Create a Vertex Group from the Object Data tab with the same name as each bone.&lt;br /&gt;
File:Blender VertexWeighting 02.gif|2. Select the vertices you want to be affected by certain bones, and assign them to the matching vertex groups.&lt;br /&gt;
File:Blender VertexWeighting 01.gif|3. In the Item panel (accessed in the Viewport by pressing &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;), adjust the weights for the vertices.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Effectively, what you&#039;re doing here is using weighting to remodel the car into the shape you want it to be at the furthest extremes of bone movement. If you can make it the correct shape with the bone moved to its maximum position and with the bone back in its normal position, everything in between should take care of itself, and any bone position in between should look good too.&lt;br /&gt;
&lt;br /&gt;
[[File:MoveBone2.gif|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
Windscreens are also a good place to learn to skin, as you can basically move the windscreen bone forwards, and then try your best to use skin weights to make an almost vertical windscreen. If you can get that working correctly, then you should have a bone that lets you smoothly change the angle of the windscreen.&lt;br /&gt;
&lt;br /&gt;
[[File:MoveWindscreenBone2.gif|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
=== Creating morphs with morph targets ===&lt;br /&gt;
For Automation, we support using morph targets and shape keys for morphing a car body. This is done by storing a default value (the base car) and a morph to morph to (the morph target/shape key), and interpolating between those two shapes for every morph. The game supports morph values between 0 and 1 only. This is why skinning is better for the corners of a car body, because that allows for a full two (or even three) dimensions of movement for every morph, and in both directions. It is up to you to decide which method you would prefer to use. Morph targets are generally easier to set up.&lt;br /&gt;
&lt;br /&gt;
==== In Blender ====&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;360&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:BlenderMorphs 01.gif|1. Create a new shape key.&lt;br /&gt;
File:BlenderMorphs 02.gif|2. Select the shape key.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;You can now edit the mesh to be in the new position you want it to be in for that morph.&lt;br /&gt;
&lt;br /&gt;
Repeat for as many morphs as you would like, taking into consideration that every vertex that each morph affects will add to the total polygon count for that body. If you have too many morphs on a body with too many polygons, the game will take longer to load fixtures onto it!&lt;br /&gt;
&lt;br /&gt;
==== In 3ds Max ====&lt;br /&gt;
We do not recommend this, but you can do it if you really want to.&lt;br /&gt;
&lt;br /&gt;
# Duplicate your mesh.&lt;br /&gt;
#Adjust your mesh, &#039;&#039;&#039;&#039;&#039;without adding or removing any polygons&#039;&#039;&#039;&#039;&#039;, to create your morph target.&lt;br /&gt;
# Create a Morpher modifier, and put it above the Edit Poly modifier, and below the Skin modifier (if you&#039;re using one).&lt;br /&gt;
# Pick the duplicate mesh as one of the morphs.&lt;br /&gt;
# Repeat for all morphs.&lt;br /&gt;
#Yes, it&#039;s &#039;&#039;that&#039;&#039; tedious. We hate 3ds Max.&lt;br /&gt;
&lt;br /&gt;
=== Morphing tips ===&lt;br /&gt;
&lt;br /&gt;
* Look carefully for any strange deformations in panels when moving your bones. It&#039;s very important that panels remain as smooth as possible when deforming, as reflections will very obviously show any kinks. The above example of the windscreen is a great example of a morph that deforms the overall shape of the body too much (look at how the top of the windshield becomes a curve and then eventually a kink—this is bad).&lt;br /&gt;
&lt;br /&gt;
* Test out what happens if you move two nearby bones at the same time. Sometimes, two bones&#039; movement combined can cause strange polygon overlaps, though this can often be avoided with careful skinning and a smooth falloff of weights between the two bones.&lt;br /&gt;
&lt;br /&gt;
* Don&#039;t try and make too many different skinned areas. 10 or 12 is a sensible maximum, and try and avoid more than one bone affecting the exact same area (some overlap is okay though), as this may make them hard to select in-game.&lt;br /&gt;
&lt;br /&gt;
* Sometimes you&#039;ll have to make changes to the mesh to make your car deform nicely in an area. Poly flow is very important for good deformation.&lt;br /&gt;
&lt;br /&gt;
* Don&#039;t forget that any weighting you give a vertex to a bone will be taken from another bone to keep a total weight of 1. This can get very confusing and cause you to chase your own tail a bit. You have been warned! This isn&#039;t so much an issue in Blender (since vertex groups can be locked), but in 3ds Max, &#039;&#039;ohhhh boy&#039;&#039; I almost tore my hair out on more than one occasion.&lt;br /&gt;
&lt;br /&gt;
== UV Unwrapping ==&lt;br /&gt;
If you&#039;re planning to do a pelt unwrap as described here, please swap this unwrap step with the mirroring step, and perform your mesh mirroring first.  If you plan to use the 3ds Max script for unwrapping, please perform this step first and then move on to mirroring.&lt;br /&gt;
&lt;br /&gt;
=== Unwrapping fundamentals ===&lt;br /&gt;
UV unwrapping is the process of unfolding the mesh onto a flat 2d plane which describes which part of a texture is applied to which part of a mesh. Think of it like taking a completed papercraft model of a car and unfolding it back to a [https://i.pinimg.com/736x/36/b3/0e/36b30ecf06c7127270612ed37e693a16--toyota-land-cruiser-doll-party.jpg flat sheet]. In most games, UV mapping is important for how the actual visible textures on objects appear, but in Automation, it&#039;s mostly important for how the fixture system works. When you place certain fixtures (such as lights, a grille, or door handles) onto the car, it projects a fixture-shaped hole onto the alpha (transparency) channel of the car body. &lt;br /&gt;
&lt;br /&gt;
For the holes to be projected correctly, you must unwrap the car as one complete piece, without any separate islands of polygons. Otherwise, fixtures can project across multiple parts of the car and give you holes in unwanted places. The UV unwrap must also give a fairly even amount of texture space to each area of the car, as any low-resolution areas will cause jagged holes around the outside of fixtures; this is called &amp;quot;tearing&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
It is for all of these reasons that the unwrap of a car mod has to be what&#039;s called a &amp;quot;pelt&amp;quot; unwrap (named for its resemblance to a flat animal pelt). For Automation cars, it looks like this: &amp;lt;gallery mode=&amp;quot;packed&amp;quot; widths=&amp;quot;360&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:Car unwrap.gif&lt;br /&gt;
File:Car unwrap again.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Unwrapping a car with a pelt unwrap ===&lt;br /&gt;
&lt;br /&gt;
==== Make sure your car is one element ====&lt;br /&gt;
This part is important, as it defines how the pelt unwrap works, which in turn determines how the fixture system cuts holes in the car.  If parts of the car are not connected in both the 3D viewport and the UV viewport, the fixture will cut out an incorrect hole.&lt;br /&gt;
&lt;br /&gt;
Any lip placement areas must be properly unwrapped despite the material being invisible; otherwise, tearing across the body can occur.&lt;br /&gt;
&lt;br /&gt;
===== to see if your mesh is one element: =====&lt;br /&gt;
&lt;br /&gt;
In 3ds Max, enter the Edit Poly modifier and click Element mode. Select one face of the car, and hide unselected faces.&lt;br /&gt;
&lt;br /&gt;
In Blender, select one face of the car and press Ctrl+L to select linked faces, and Shift+H to hide unselected faces.&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;420&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:Car body is not one mesh.png|If your selection ends up looking like this, your car is not one element, and has unjoined faces between the selection and the rest of the mesh. This will not work. Join your mesh together properly.&lt;br /&gt;
File:Car body selection correct.png|If your selection looks like this, with the entirety of the mesh selected, then you have done it correctly and there are no un-joined elements. Good job!&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Doing the pelt unwrap ====&lt;br /&gt;
However it&#039;s done in your choice of 3D application, perform a pelt unwrap on your car.  In Blender, it looks like this:&lt;br /&gt;
&lt;br /&gt;
[[File:Pelt_unwrap_step_1.png|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
Next we need to orient the unwrap so that the centre of the car in the UV sits on the centre-line of the Y axis, and scale the unwrap up so that it covers as much of the UV space as possible:&lt;br /&gt;
&lt;br /&gt;
[[File:Car_unwrap_step_2.png|alt=|frameless|360x360px]]&lt;br /&gt;
* Make sure this unwrap exists on both the first &#039;&#039;and&#039;&#039; second UV channels. The first channel will be used to calculate the normals, and the second channel will be used to calculate the fixture cutouts.&lt;br /&gt;
* make sure the car&#039;s center line is exactly in the middle of the UV layout.&lt;br /&gt;
* make sure that the top and bottom halves of the car are perfectly symmetrical.&lt;br /&gt;
&lt;br /&gt;
== Mirror the Half Body ==&lt;br /&gt;
&lt;br /&gt;
=== The traditional method ===&lt;br /&gt;
# Mirror your mesh.&lt;br /&gt;
# If you&#039;ve already unwrapped your mesh without mirroring the UV maps via modifier setitngs, select the mirrored half, and flip the UV of that half along the Y axis:&lt;br /&gt;
# Duplicate the bones for the wheel flares on the opposite side, matching the distance from the centreline.  Set the name of the mirrored half to the same as the un-mirrored half with &amp;quot;_opposite&amp;quot; at the end of the name of the bone.  Duplicate the bone weighting from the non-mirrored half, rename it to match the mirrored bone, and clear the weighting for each on the opposing side so that the weighting for each wheel flare only includes the respective wheel:&lt;br /&gt;
[[File:Flip_UVs_part_1.png|alt=|frameless|300x300px]]&lt;br /&gt;
&lt;br /&gt;
[[File:Flip_uv_part_2.png|alt=|frameless|300x300px]]&lt;br /&gt;
&lt;br /&gt;
[[File:Mirror_weighting.png|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
[[File:Mirror_weights_values.png|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
[[File:Mirror_weights_2.png|frameless|273x273px]]&lt;br /&gt;
&lt;br /&gt;
== Fix Everything You Just Broke Mirroring the Body ==&lt;br /&gt;
&lt;br /&gt;
====Ensure other bones do not have opposite bones when not required====&lt;br /&gt;
In some cases, your body may have bones that are purposely designed to morph vertices on the outside of the body that are not intended to move along the X axis (e.g. The &amp;quot;Hofmeister kink&amp;quot; found on the &amp;lt;code&amp;gt;10sSedan02&amp;lt;/code&amp;gt; series of bodies). The mirror script may create an unwanted opposite bone for these.&lt;br /&gt;
&lt;br /&gt;
This can be avoided by temporarily weighting a vertex on the zero X axis to the bone in question. Ideally, pick a vertex that is weighted only to the root bone so as not disturb the weights of other bones. Once the mirror script has been run, you can remove the temporary weight applied to that vertex. &lt;br /&gt;
&lt;br /&gt;
====Check that both halves of the body are welded together====&lt;br /&gt;
The mirror body script should weld both halves of your body together, but for &#039;&#039;reasons&#039;&#039; (3ds Max is spaghetti), this does not always occur. This can be seen by your body having an unexpected crease or seam down the centre.&lt;br /&gt;
&lt;br /&gt;
Once you have welded the two halves together, perform a visual check to ensure that no &#039;&#039;unintentional&#039;&#039; welds have taken place. e.g. top and bottom vertices on a window frames. If this happens, undo your weld command and select the centreline vertices in smaller chunks, and avoid selecting the vertices in question at the same time.&lt;br /&gt;
&lt;br /&gt;
====Check skin for distortion along the centreline vertices====&lt;br /&gt;
When two skinned vertices are welded together, either automatically via the script or manually, 3ds Max will attempt to combine the weights of both the old vertices into one. Unfortunately, it&#039;s not very good at it, and many of the welded vertices on the centreline end up with odd weights. This results in a distorted skin (see below). This isn&#039;t an issue with Blender.&lt;br /&gt;
&lt;br /&gt;
[[File:Distorted_Skin.png|frameless|360x360px]]&lt;br /&gt;
[[File:Weight_table.png|alt=|right|frameless|360x360px]]&lt;br /&gt;
To correct the distortion, you will need to check and correct the centreline vertices. The most methodical way is to start from one end of the body and work your way to the other end as follows:&lt;br /&gt;
&lt;br /&gt;
# Expand the skin modifier and select Envelope.&lt;br /&gt;
# Open the weight table and set to selected vertices.&lt;br /&gt;
# Select the central 3 vertices at one end of the body and view the weight values in the table.&lt;br /&gt;
# Where the mesh is distorted, you will usually see one vertex in the weight table that&#039;s the odd one out. &lt;br /&gt;
# Amend the values of this vertex to match those on either side of it. (For vertices with more than 2 bones, you may need to untick normalize to stop Max from altering your amendments—remember to re-enable it once completed).&lt;br /&gt;
# Repeat the above steps, working along the body until you reach the other end.&lt;br /&gt;
&lt;br /&gt;
=== Check that the same UV maps exist on the first two UV channels ===&lt;br /&gt;
&lt;br /&gt;
==== In 3ds Max ====&lt;br /&gt;
To Check the maps:&lt;br /&gt;
&lt;br /&gt;
# Under the utilities tab click on the More... button.&lt;br /&gt;
# Select &amp;quot;Channel Info&amp;quot; from the list and click OK.&lt;br /&gt;
# Click the newly available Channel Info Button and review the channel info.&lt;br /&gt;
&lt;br /&gt;
[[File:Channel_inf.png|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
The bottom 3 lines of the above screenshot represent the 3 UVW maps. In this case, the maps are identical, as they should be. If, however, there is a mismatch between the three maps (from either null data or different numbers of vertices), they will need to be be corrected. If your body does not have 3 maps, see [[Car Body Mods/Unwrap Error|here]].&lt;br /&gt;
&lt;br /&gt;
In most cases, &amp;lt;code&amp;gt;1:map&amp;lt;/code&amp;gt; is the correct one. One method of correcting the maps is as follows:&lt;br /&gt;
&lt;br /&gt;
# In the Channel Info box, select the line representing the correct map.&lt;br /&gt;
# Select Copy.&lt;br /&gt;
# Select one of the incorrect lines.&lt;br /&gt;
# Select Paste.&lt;br /&gt;
# Repeat for the other map if it&#039;s also incorrect.&lt;br /&gt;
# Close the channel info box and click on the modifier stack tab.&lt;br /&gt;
# Move the UVW Mapping Paste modifier(s) to between the skin and the mesh.&lt;br /&gt;
# Collapse the modifiers into the mesh.&lt;br /&gt;
&lt;br /&gt;
==== In Blender ====&lt;br /&gt;
Open the Object Data menu and select the UV Maps submenu.  Open a UV editor and check that the UVs look correct in the first two UV channels.&lt;br /&gt;
&lt;br /&gt;
[[File:Uvs_still_there.png|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
If one of these is not correct, delete it and simply duplicate the correct one.&lt;br /&gt;
&lt;br /&gt;
== Export Car Body to .FBX File ==&lt;br /&gt;
&lt;br /&gt;
=== In 3ds Max ===&lt;br /&gt;
This step is easy!  &lt;br /&gt;
&lt;br /&gt;
1: Select the car body mesh, then go to File &amp;gt; Export &amp;gt; Export Selected&lt;br /&gt;
&lt;br /&gt;
2: Save the FBX file somewhere. It won&#039;t actually be distributed with the mod when complete, but name it well, and put it somewhere in a properly named folder, where it&#039;ll never need to be moved or renamed. If you move it, UE4 will get confused if you try and reimport it, which you&#039;ll need to do if everything isn&#039;t perfect, and nothing is ever perfect.&lt;br /&gt;
&lt;br /&gt;
3: Make sure your export settings look like this image:&lt;br /&gt;
&lt;br /&gt;
[[File:3dsmax_exportsettings_01.gif|alt=|frameless|374x374px]]&lt;br /&gt;
&lt;br /&gt;
=== In Blender ===&lt;br /&gt;
&lt;br /&gt;
# Select the armature, and then the mesh, and then go to File &amp;gt; Export &amp;gt; FBX.&lt;br /&gt;
# Save the FBX file somewhere. It won&#039;t actually be distributed with the mod when complete, but name it well, and put it somewhere in a properly named folder, where it&#039;ll never need to be moved or renamed. If you move it, UE4 will get confused if you try and reimport it, which you&#039;ll need to do if everything isn&#039;t perfect, and nothing is ever perfect. Make sure your export settings match like so:&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;320&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:Blender-export-settings-01.gif|1. Under Main, make sure the forward direction is set to -Y forward, with Z up, and Selected Objects ticked.&lt;br /&gt;
File:Blender-export-settings-02.gif|2. Under Geometry, set smoothing to Normals Only, and tick Tangent Space.&lt;br /&gt;
File:Blender-export-settings-04.gif|3. Under Armatures, untick Add Leaf Bones.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;The animation tab doesn&#039;t matter, as we don&#039;t use animations.&lt;br /&gt;
&lt;br /&gt;
You are now ready to import your body to Unreal Engine!&lt;br /&gt;
&lt;br /&gt;
== Import Car Body to Unreal Engine ==&lt;br /&gt;
&lt;br /&gt;
Now it&#039;s time to bring all your hard work into Unreal Engine. &lt;br /&gt;
&lt;br /&gt;
Follow the [[Modding]] page for installing and opening the Automation Modding SDK.&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve never used Unreal Engine before, now is a great time to watch this [https://www.youtube.com/watch?v=w4XlBKeE46E introduction to UE4 playlist from Epic]. It&#039;s for a fairly old version, but most of it still applies.&lt;br /&gt;
&lt;br /&gt;
===Creating your Car Body Mod===&lt;br /&gt;
Press the Create Mod button in the top bar of the UE4 Editor.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_01.gif|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
Select the Blank Project, and fill the wizard out with all of your details, such as your name and a short description of the mod you&#039;re making. Then, click Create Mod to generate your plugin files.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_02.gif|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
The Content Browser window should now show your plugin content. This is where you&#039;ll put &#039;&#039;all&#039;&#039; of your mod files. &#039;&#039;&#039;&#039;&#039;Never modify any files outside of your plugin folder&#039;&#039;&#039;&#039;&#039;. you can copy materials and such from the main content folder, but only if those files are copied to your mod folder. The end result of your mod should be a default content folder that is identical to the default state of the SDK, and all of your own modified files within the one plugin folder you want to release. Do not edit or modify files within the root content folder, and do not reference any files within any other mod folder.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_03.gif|frameless|267x267px]]&lt;br /&gt;
&lt;br /&gt;
You should now have an empty content folder:&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_04.gif|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
=== Importing your car body to the mod folder ===&lt;br /&gt;
Press the Import button in the Content Browser with your mod content folder selected to import your car body FBX file.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_05.gif|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
In the following pop-up import options, make sure the following settings are exactly as described:&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_06.gif|frameless|559x559px]]&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;Skeletal Mesh&#039;&#039; should be set to &#039;&#039;&#039;True&#039;&#039;&#039;&lt;br /&gt;
#&#039;&#039;Import Mesh&#039;&#039; should be set to &#039;&#039;&#039;True&#039;&#039;&#039;&lt;br /&gt;
#&#039;&#039;Skeleton&#039;&#039; should be set to &#039;&#039;&#039;None&#039;&#039;&#039;&lt;br /&gt;
#&#039;&#039;Import Meshes in Bone Hierarchy&#039;&#039; should be set to &#039;&#039;&#039;False&#039;&#039;&#039;&lt;br /&gt;
#&#039;&#039;Import Morph Targets&#039;&#039; should be set to &#039;&#039;&#039;True&#039;&#039;&#039;&lt;br /&gt;
#&#039;&#039;Normal Import Method&#039;&#039; should be set to &#039;&#039;&#039;Import Normals and Tangents&#039;&#039;&#039;&lt;br /&gt;
#&#039;&#039;Material Search Location&#039;&#039; should be set to &#039;&#039;&#039;All Assets&#039;&#039;&#039;&lt;br /&gt;
#&#039;&#039;Material Import Method&#039;&#039; should be set to &#039;&#039;&#039;Do Not Create Material&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Once you have configured the import dialog correctly, press I&amp;lt;nowiki/&amp;gt;mport,&amp;lt;nowiki/&amp;gt; or if you are importing multiple car bodies, press Import All.&lt;br /&gt;
&lt;br /&gt;
You should now have a Skeletal Mesh (pink icon), a Physics Asset (yellow/brownish icon), and a Skeleton (light blue icon) in your mod content folder:&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_07.gif|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
== Check the Materials ==&lt;br /&gt;
&lt;br /&gt;
The materials applied to the car body denote what part of the car that is. They aren&#039;t so much &#039;&#039;placeholder&#039;&#039; materials as they are &#039;&#039;identifier&#039;&#039; materials; the materials that are applied to the car determine the category of paint on that material slot in-game.&lt;br /&gt;
&lt;br /&gt;
Double click on the Skeletal Mesh for your car. You should then see a screen like this:&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_09.gif|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
If instead, when you import a car, you see something more like this, then you will have to apply your materials manually: &lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_08.gif|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
The materials to apply to the correct slots on your car body are located in &amp;lt;code&amp;gt;Content/Cars/Meshes/Bodies&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Descriptions of the materials to apply are found in the [[Car Body Mods#Applying materials|Car Body Material Options]] step. &lt;br /&gt;
== Set Car &amp;amp; Chassis Data ==&lt;br /&gt;
&lt;br /&gt;
===Create car body variant data===&lt;br /&gt;
This is the file that will contain all the stats about your car; how many seats it can hold, how many doors it has, what the wheelbase is, etc..&lt;br /&gt;
&lt;br /&gt;
Create a Body Variant Preview Data object in your mod folder from the Add New menu.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_11.gif|frameless|342x342px]]&lt;br /&gt;
&lt;br /&gt;
Name your Body Variant Preview Data file correctly. The name of this file will determine the name of the body in-game.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_12.gif|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
Open the Body Variant Preview Data file. In the top field, drag and drop, or use the arrow button, to put your skeletal mesh file into the Skeletal Mesh data field.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_19.gif|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
The data inside the Body Variant Preview Data file determines the stats of your car design.&lt;br /&gt;
&lt;br /&gt;
The data is set within the file, but updates in real-time in the body edit scene, which you should open first.&lt;br /&gt;
&lt;br /&gt;
Opening the body edit scene and loading your car will help you visualise what all the data in this file translates to in-game.&lt;br /&gt;
&lt;br /&gt;
=== Loading a Car For Editing ===&lt;br /&gt;
Open the &amp;lt;code&amp;gt;ThumbnailGeneratorLevel_Car&amp;lt;/code&amp;gt; level.&lt;br /&gt;
&lt;br /&gt;
[[File:ModTools ThumbnailLevelCar.jpg|frameless|303x303px]]&lt;br /&gt;
&lt;br /&gt;
On the top bar, select the drop-down menu next to the &amp;lt;code&amp;gt;Play&amp;lt;/code&amp;gt; button, and select &amp;lt;code&amp;gt;Simulate&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_15.gif|frameless|240x240px]] &lt;br /&gt;
&lt;br /&gt;
This will start simulating the &amp;quot;game&amp;quot; (in this case, the thumbnail generator level). It is important that everything you do in this level is done &#039;&#039;while you are simulating the level.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the &amp;lt;code&amp;gt;World Outliner&amp;lt;/code&amp;gt;, search for the &amp;lt;code&amp;gt;BodyEditSceneBluetility&amp;lt;/code&amp;gt;. This utility will be the interface between the level, which will have your car loaded in it, and your Car Body Variant file.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_14.gif|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
In the Details panel of the &amp;lt;code&amp;gt;BodyEditSceneBluetility&amp;lt;/code&amp;gt;, you will find buttons and options for loading your car body.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_16.gif|frameless|267x267px]] &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Load Body&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Unload Body&amp;lt;/code&amp;gt; menu options will do just that—load and unload your body—but you have to specify the body you want to load first, which is done in the Variant Asset menu.&lt;br /&gt;
&lt;br /&gt;
Select your Body Variant file from the content browser, and put it in the Variant Asset list by either dragging and dropping it in to the icon, or by pressing the arrow button next to the icon.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_17.gif|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
Press &amp;lt;code&amp;gt;Load Body&amp;lt;/code&amp;gt;, making sure that you are Simulating.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_18.gif|frameless|311x311px]]&lt;br /&gt;
&lt;br /&gt;
You should now see your car loaded into the scene. You can begin to edit the data within the &amp;lt;code&amp;gt;Body Variant&amp;lt;/code&amp;gt; file and see it update in real time in the scene, which is really helpful for setting chassis data.&lt;br /&gt;
&lt;br /&gt;
[[File:Annotation_2020-03-16_171445.png|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
=== What all the Body Variant settings mean ===&lt;br /&gt;
[[File:Untitled-27.png|alt=|right|frameless|1073x1073px]]&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;u&amp;gt;Mesh&amp;lt;/u&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Skeletal Mesh&amp;lt;/u&amp;gt;&#039;&#039;&#039; is the physical mesh of your body.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Car Material Settings&amp;lt;/u&amp;gt;&#039;&#039;&#039; are the default materials that should be applied to certain slots when a player loads it in-game. For instance, you may find it useful to set the window trim on an older body to chrome by default.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Mesh Data&amp;lt;/u&amp;gt;&#039;&#039;&#039; is a generated file that you dont need to worry about. We&#039;ll make one of these in the [[Car Body Mods#Generate Thumbnails|thumbnail generation]] stage.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Bone Constraints&amp;lt;/u&amp;gt;&#039;&#039;&#039; are the physical limits of where bone morphs can be affected. This is an advanced menu for if you want to enter these manually. For most poeple, we have an easy system for assigning these bone limits in the [[Car Body Mods#Set Bone Limits|bone limit setting]] stage. If a bone does not have limits, the player will be able to drag the bones around in any direction they want, as far as they want, and this almost never ends well. Note that &#039;&#039;morph targets don&#039;t need to have their limits set.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;u&amp;gt;UID&amp;lt;/u&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Family GUID&amp;lt;/u&amp;gt;&#039;&#039;&#039; is an unique identifier that is shared between all variants of the same body family. If you are making more than one car body in the same family, they should all share the same family GUID.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Variant GUID&amp;lt;/u&amp;gt;&#039;&#039;&#039; is an unique identifier that is unique for this body. Every body in Automation needs to have an unique GUID. If you, by chance, happen to generate or use the same Variant GUID as another body, when you try and select one the game may instead chose the other for you. If this happens, generate a new Variant GUID.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;u&amp;gt;Preview&amp;lt;/u&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
* You shouldn&#039;t have to set anything here. These fields will be populated in the [[Car Body Mods#Generate Thumbnails|thumbnail generation]] stage.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;u&amp;gt;Settings&amp;lt;/u&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Variant Body Type&amp;lt;/u&amp;gt;&#039;&#039;&#039; determines the category of the body in-game. Different categories have different advantages and disadvantages.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Year&amp;lt;/u&amp;gt;&#039;&#039;&#039; is the year that this body unlocks in Campaign. Bodies that are closer to the current year (and thus more recent) score better in some categories, but having a body unlock the same year as its real-life inspiration or counterpart is ill-advised due to the time it takes to engineer cars in the campaign. Generally, Automation bodies are 3 to 10 years older than the cars they&#039;re based on.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Doors&amp;lt;/u&amp;gt;&#039;&#039;&#039; determines the number of doors on this body, which affects some demographics&#039; statistics.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Maximum Seat Rows&amp;lt;/u&amp;gt;&#039;&#039;&#039; is a legacy value that determines the maximum number of seat rows your body can have (which affects some demographics&#039; statistics). This value has been superseded by the Seats section below, which allows different maximum seat row values for different engine placements.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Is Release Ready&amp;lt;/u&amp;gt;&#039;&#039;&#039; is a dev feature we use to allow us to configure and adjust bodies that are not ready to be in-game. If this box is unticked, you will not be able to see it in-game.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Seat Options&amp;lt;/u&amp;gt;&#039;&#039;&#039; is a legacy option that is no longer used.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Front Suspension To Disable&amp;lt;/u&amp;gt;&#039;&#039;&#039; will disable those suspension options for this body. This is useful if your body is shaped such that certain suspension types clip through the body in a way that cannot be fixed with height offsets.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Rear Suspension To Disable&amp;lt;/u&amp;gt;&#039;&#039;&#039; will disable those suspension options for this body. This is useful if your body is shaped such that certain suspension types clip through the body in a way that cannot be fixed with height offsets.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Chassis Type&amp;lt;/u&amp;gt;&#039;&#039;&#039; sets the body to the selected chassis for thumbnail purposes and has no effect in-game.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Is Softtop Convert&amp;lt;/u&amp;gt;&#039;&#039;&#039; will set this body as a convertible with a soft top. This is for demographic calculations.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Is Hardtop Convert&amp;lt;/u&amp;gt;&#039;&#039;&#039; will set this body as a convertible with a hard top. This is for demographic calculations.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Cargo Subtracts&amp;lt;/u&amp;gt;&#039;&#039;&#039; will subtract the cargo volume from the cabin space in vehicles with a shared passenger and cargo area (wagons, MPVs, and such). This is useful for making cars where the more seat rows a body has, the less cargo space it has.&lt;br /&gt;
*The &#039;&#039;&#039;&amp;lt;u&amp;gt;Seats&amp;lt;/u&amp;gt;&#039;&#039;&#039; section determines the maximum seat rows per applicable engine placement. For engine placements that aren&#039;t supported by the body as per the Engine Placement array below, their maximum seat values can be left as &amp;quot;None&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;u&amp;gt;Engine&amp;lt;/u&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Engine Placement&amp;lt;/u&amp;gt;&#039;&#039;&#039; is an array containing all the available engine positions for this body.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;u&amp;gt;Chassis&amp;lt;/u&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;u&amp;gt;Footprint&amp;lt;/u&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Wheelbase&amp;lt;/u&amp;gt;&#039;&#039;&#039; is the wheelbase of the body in centimetres. Set this before setting anything else for best results.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Track Width&amp;lt;/u&amp;gt;&#039;&#039;&#039; is supposedly track width in centimetres, but isn&#039;t actually measured accurately. Don&#039;t try and match it to real figures; just make sure the wheels are correctly positioned (with the correct tyres) and that there is enough room left in the wheel arches to make the tyres as wide as makes sense for the car (which might include having to use arch flare morphs).  If you need room for wider tyres, set this a little narrower.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Pan Width&amp;lt;/u&amp;gt;&#039;&#039;&#039; determines how wide the floor of the chassis is. This value must be set larger than the track width for it to have an effect.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Y Offset&amp;lt;/u&amp;gt;&#039;&#039;&#039; is used to shuffle the mesh back and forwards to sit correctly in the middle of the chassis. If you&#039;re putting big numbers in here (more than 15, perhaps), you probably need to realign your mesh on the Y axis.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Arch Width&amp;lt;/u&amp;gt;&#039;&#039;&#039; [missing info]&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;u&amp;gt;Vertical Position&amp;lt;/u&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Default Suspension Height&amp;lt;/u&amp;gt;&#039;&#039;&#039; is used to set the default position of the ride height slider. Makes sure that supercars start off set low, SUVs start high, etc.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Height Offset&amp;lt;/u&amp;gt;&#039;&#039;&#039; moves the car model up and down as compared to the chassis/wheels etc. This should usually be set so that with appropriate sized tyres, and Default Suspension Height set to 0, the wheels are nearly touching the top of the arches. Some cars might want to be set a bit higher (SUVs and the like), but remember that when a car is set to a ride height of 0, it has very little suspension travel, so you should be setting height offset on the basis of the lowest the car could possibly ever sit.&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;u&amp;gt;Front&amp;lt;/u&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Firewall Y&amp;lt;/u&amp;gt;&#039;&#039;&#039; is a setting for how far forward the front firewall is. It&#039;s easiest to set this in side view in Wireframe mode. Set to match your mesh&#039;s firewall. This value is important for engine bay size.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Firewall Z&amp;lt;/u&amp;gt;&#039;&#039;&#039; is a setting for how tall the front firewall is. It&#039;s easiest to set this in side view in Wireframe mode.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Firewall Lean&amp;lt;/u&amp;gt;&#039;&#039;&#039; is a setting for how far forward the front firewall leans.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Nose Length&amp;lt;/u&amp;gt;&#039;&#039;&#039; is used to set how far forward the engine bay goes. This is important for engine bay size. Make sure the chassis doesn&#039;t stick out of the car, even when you&#039;ve moved morphs around on the nose.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Cab Over&amp;lt;/u&amp;gt;&#039;&#039;&#039; is a tick box to say whether the engine goes under the front seats of your car body. Affects some statistics. Used for flat-nose vans and similar vehicles that lack bonnets.&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;u&amp;gt;Rear&amp;lt;/u&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Rear Wall Y&amp;lt;/u&amp;gt;&#039;&#039;&#039; is a setting for how far backward the rear firewall is. It&#039;s easiest to set this in side view in Wireframe mode. Ignore this value for front-engine-only cars.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;u&amp;gt;Rear Wall Z&amp;lt;/u&amp;gt;&#039;&#039;&#039; is a setting for how tall the rear firewall is. It&#039;s easiest to set this in side view in Wireframe mode. Ignore this value for front-engine-only cars.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Tail Length&amp;lt;/u&amp;gt;&#039;&#039;&#039; is how far the back of the chassis goes. Important for rear engine bay size, but not very important for front-engine cars. Be careful that it doesn&#039;t stick out of the car.&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;u&amp;gt;Wheels&amp;lt;/u&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Max Wheel Diameter&amp;lt;/u&amp;gt;&#039;&#039;&#039; is the maximum wheel &amp;amp; tyre diameter in centimetres. Set this by adjusting the default tyre size to work out what the biggest practical tyre size would be, then putting that number here.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Min Wheel Diameter&amp;lt;/u&amp;gt;&#039;&#039;&#039; is the minimum wheel &amp;amp; tyre diameter in centimetres. Set this by adjusting the default tyre size to work out what the smallest practical tyre size would be, then putting that number here.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Default Wheel Diameter&amp;lt;/u&amp;gt;&#039;&#039;&#039; sets what tyre diameter is loaded on the car by default. Set it to something within reason for the car type.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Default Rim Diameter&amp;lt;/u&amp;gt;&#039;&#039;&#039; sets what rim diameter is loaded on the car by default. Set it to something within reason for the car type. Remember to set it correctly for a tyre profile that makes sense for the type and age of the car. Older cars need high-ish-profile tyres, due to in-game restrictions on using low-profile tyres in early eras.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Default Wheel Width&amp;lt;/u&amp;gt;&#039;&#039;&#039; sets what tyre width is loaded on the car by default. Set it to something within reason for the car type.&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;u&amp;gt;Path (Legacy Class)&amp;lt;/u&amp;gt;====&lt;br /&gt;
This is a legacy option for older bodies. You shouldn&#039;t need to touch anything in here unless you are converting a pre-UE4.24 mod.&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;u&amp;gt;Body Boxes&amp;lt;/u&amp;gt;====&lt;br /&gt;
This contains all the sizes and positions of the body boxes, and are generated automatically in the [[Car Body Mods#Generate Thumbnails|thumbnail generation]] stage.&lt;br /&gt;
&lt;br /&gt;
===== Manually enlarging engine bays =====&lt;br /&gt;
Engine bay bounds are determined by four points on one side of the car that form a rectangle. These points are then mirrored to form a box representing the engine bay.&lt;br /&gt;
&lt;br /&gt;
For more adventurous mod bodies such as open-wheelers, you may find that the engine bay isn&#039;t long or tall enough to fit a suitably-sized engine. This can be fixed by increasing the two larger Y or Z values to the desired amount after you&#039;ve generated the thumbnail, body boxes, and mesh data. Keep in mind that when you regenerate the thumbnail and mesh data, your modified engine bay values will be overwritten, so it may help to store them in a text file somewhere.&lt;br /&gt;
&lt;br /&gt;
==== A note on convertibles ====&lt;br /&gt;
Convertibles should have their body tag set to the type of body they are aside from being convertibles, with the &#039;soft top&#039; or &#039;hard top&#039; convertible values being set separately.  The &#039;convertible&#039; body type is no longer used.&lt;br /&gt;
&lt;br /&gt;
== Set Bone Limits ==&lt;br /&gt;
Once you&#039;ve set all the other car body settings, you&#039;ll need to set the limits for bone movement.&lt;br /&gt;
&lt;br /&gt;
While simulating in the car body scene, make sure your car is loaded and select it.&lt;br /&gt;
&lt;br /&gt;
[[File:Annotation_2020-03-17_155800.png|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
You should now see a set of blue squares at the locations of your bones as you set them in your modelling program. Click on one of these blue squares, and start to move it along an axis to see how it affects the body. You can set the current position of the bone as the new limit of that bone by right clicking on it and selecting &amp;quot;Add to limits&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_20.gif|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
Right-click on a bone and select &amp;quot;Move all bones to bind pose&amp;quot; to move the bones back to their default location.&lt;br /&gt;
&lt;br /&gt;
Note that if you accidently set a bone&#039;s limits too far, there are two ways to fix it: you can either right-click &amp;quot;Reset Limits&amp;quot; and then set the limit again, or (if you know what you&#039;re doing) type a new limit into the appropriate axis of the corresponding bone in the Bone Constraints array.&lt;br /&gt;
&lt;br /&gt;
The following other options on right-clicking a bone are as follows:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Move all bones to max&amp;quot; will move a bone as far as possible in the positive axes it can move.&lt;br /&gt;
* &amp;quot;Move all bones to min&amp;quot; will move a bone as far as possible in the negative axes it can move.&lt;br /&gt;
* &amp;quot;Reset limits&amp;quot; will remove all limits from a selected bone.&lt;br /&gt;
* &amp;quot;Move all bones to bind pose&amp;quot; will move all bones back to their default positions.&lt;br /&gt;
&lt;br /&gt;
Bones that appear red are bones that exist as part of the skeleton but aren&#039;t weighted to any vertices on the car.&lt;br /&gt;
&lt;br /&gt;
== Generate Thumbnails ==&lt;br /&gt;
While simulating, load your car body.&lt;br /&gt;
&lt;br /&gt;
In the Body Edit Scene Bluetility, click Generate Thumbnail.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_21.gif|frameless|377x377px]]&lt;br /&gt;
&lt;br /&gt;
You should now have two more files in your mod content folder, but don&#039;t let their lack of an &amp;quot;unsaved&amp;quot; asterisk icon fool you: these files do indeed need to be saved. Right-click the files and save them manually; otherwise, they will indeed stop existing.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_23.gif|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
You are now done creating all the files and settings you need! You can now export your mod body.&lt;br /&gt;
&lt;br /&gt;
=== For additional body variants ===&lt;br /&gt;
For additional variants, repeat the same process for each CPP. If you copied the CPP from one variant and edited it for a new one, this will replace the original thumbnail. To avoid this problem, clear the thumbnail (and mesh data) from &amp;quot;Variant Preview Texture&amp;quot; on each additional variant before generating their thumbnails.&lt;br /&gt;
&lt;br /&gt;
== Export Your Car Body ==&lt;br /&gt;
[[File:ShareMod.png|alt=|right|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
#In Unreal Editor, at the top toolbar, select &amp;quot;Share Mod&amp;quot; and then click on the name of your car body.&lt;br /&gt;
# Select a path where there are no spaces in the file path. As an example, &amp;lt;code&amp;gt;C:\Users\Name\Documents\Unreal Projects\AutomationGame&amp;lt;/code&amp;gt; &#039;&#039;will not work&#039;&#039;, since the phrase &amp;lt;code&amp;gt;Unreal Projects&amp;lt;/code&amp;gt; contains a space. &amp;lt;code&amp;gt;C:\Users\Name\Documents\ModExport&amp;lt;/code&amp;gt; &#039;&#039;will&#039;&#039; work, because there are no spaces in the file path.&lt;br /&gt;
# Once your build is successful, you need to launch the &amp;quot;Automation - The Car Company Tycoon Game Workshop Tool&amp;quot; from your &amp;quot;Tools&amp;quot;, which can be accessed by hovering over &amp;quot;Library&amp;quot; in Steam.&lt;br /&gt;
# Enjoy your new car body!&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
&#039;&#039;&#039;Q&#039;&#039;&#039;: I get a Max Script error running the script to unwrap my body like so:&lt;br /&gt;
&lt;br /&gt;
[[File:Maxscript_Err_Unwrap.png|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039;: Car bodies in UE use 3 UVW maps and your mesh currently has less. To ensure you have enough maps, take the [[Car Body Mods/unwraperror|following steps]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q&#039;&#039;&#039;: I get a Max Script error running the script to mirror my body like so:&lt;br /&gt;
&lt;br /&gt;
[[File:Vertex index error.png|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039;: Save the body file as is, close 3ds Max, and then reopen the file. This fixes most instances of this error.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Unreal won&#039;t open the SDK project files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Make sure you&#039;re running the correct version of Unreal Editor. It should be version &amp;lt;u&amp;gt;4.24.3&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; I got my body in the game, but it looks weird whenever I apply fixtures.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Refer back to [[Car Body Mods#UV Unwrapping|the UV unwrapping section]], where this problem is addressed.&lt;br /&gt;
&lt;br /&gt;
=== Q: I get &amp;quot;Error: Duplicate Body Variant UIDs found. Unable to generate previews without fixing UID issues. Check log for more information.&amp;quot; when generating my thumbnail. ===&lt;br /&gt;
A: Open the &amp;lt;code&amp;gt;Output Log&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;Window&amp;lt;/code&amp;gt; (in the top bar) &amp;gt; &amp;lt;code&amp;gt;Developer Tools&amp;lt;/code&amp;gt; &amp;gt; &amp;lt;code&amp;gt;Output Log&amp;lt;/code&amp;gt;, and check the log message. There should be a line near the end which reads like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LogBlueprintUserMessages: [None] Error! Duplicate Body UIDs found. These bodies have identical GUIDs:   : Asset Name: 00sGPV4DoorXL_BP_Preview , GUID: 2C9829064697871B4EB450BE517F1636 , File Path: /Game/Cars/Blueprints/BodyEditors/Thumbnails/00sGPV4DoorXL_BP/00sGPV4DoorXL_BP_Preview.00sGPV4DoorXL_BP_Preview and: Asset Name: 00sGPV4DoorXL_BP_Preview , GUID: 2C9829064697871B4EB450BE517F1636 , File Path: /Game/DeveloperSandbox/00sGPV4DoorXL_BP_Preview.00sGPV4DoorXL_BP_Preview&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note how two different assets, in this case both with the same name, exists in two different file locations, with the same GUID. To fix the error, change one of the GUIDs for one of the files. Every car should have its own unique GUID.&lt;br /&gt;
&lt;br /&gt;
=== Q: I get &amp;quot;Error: Car Body is missing some material slots! It may not work correctly. ===&lt;br /&gt;
A: The &amp;lt;code&amp;gt;Thumbnail Generator&amp;lt;/code&amp;gt; automatically checks for certain materials on your body, to ensure things work correctly in Automation, and in the exporter. Things like the &amp;lt;code&amp;gt;BonnetCam&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DriverCam&amp;lt;/code&amp;gt; materials, whether your car has a &amp;lt;code&amp;gt;Plastic&amp;lt;/code&amp;gt; material for the underbody, etc.&lt;br /&gt;
&lt;br /&gt;
Open your car body skeletal mesh file from your mod content folder and check the material assignments. If you are missing any unexpected materials, check your source files in Blender/etc.. and ensure the files were exported correctly.&lt;br /&gt;
&lt;br /&gt;
If you have all material slots you were expecting to see, and the error message is simply being over-cautious and you do not want to have any of these materials on your car, you can safely ignore this message.&lt;br /&gt;
&lt;br /&gt;
If the message is annoying you, expand the details menu of the &amp;lt;code&amp;gt;BodyEditSceneBlutility&amp;lt;/code&amp;gt;, expand the &amp;lt;code&amp;gt;CamsoOnly&amp;lt;/code&amp;gt; sub-menu, and clear the offending materials you don&#039;t care for from the &amp;lt;code&amp;gt;Body Material Slots To Check&amp;lt;/code&amp;gt; array.&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=Custom_Paint_Mods&amp;diff=5032</id>
		<title>Custom Paint Mods</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=Custom_Paint_Mods&amp;diff=5032"/>
		<updated>2025-02-19T00:16:13Z</updated>

		<summary type="html">&lt;p&gt;Hannah: /* Opacity */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Beginning with LCv4.2, Automation supports the creation of custom paint materials which can be applied to cars, fixtures, and engine parts. These materials also support the Exporter, including exporting to BeamNG.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
A Custom Paint mod is a collection of files, of which a &amp;lt;code&amp;gt;Custom Paint&amp;lt;/code&amp;gt; file is the parent.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Custom Paint&amp;lt;/code&amp;gt; file contains the settings and applicable options for the Custom Paint, as well as a reference to the paint material.&lt;br /&gt;
&lt;br /&gt;
The custom paint material itself is a Material in UE4, which is set up in a specific way. Material variables can have an &amp;lt;code&amp;gt;editable_&amp;lt;/code&amp;gt; prefix in their name if you want the player to have access to it in the custom paint settings in-game. Variables and parameters also need to be input into the &amp;lt;code&amp;gt;export user data&amp;lt;/code&amp;gt;, contained within the material, for them to export correctly. Materials will not export correctly at all without this &amp;lt;code&amp;gt;export user data&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
#In UE4:&lt;br /&gt;
##Set up a mod.&lt;br /&gt;
##Create and fill out a &amp;lt;code&amp;gt;Custom Paint&amp;lt;/code&amp;gt; file.&lt;br /&gt;
##Create your Custom Paint material.&lt;br /&gt;
##Assign variables to the export user data.&lt;br /&gt;
#In the Automation Workshop Publishing Tool:&lt;br /&gt;
##Set up a workshop item.&lt;br /&gt;
##Share your mod.&lt;br /&gt;
&lt;br /&gt;
== Create your Custom Paint mod ==&lt;br /&gt;
&lt;br /&gt;
=== Create A New Mod ===&lt;br /&gt;
&lt;br /&gt;
After setting up the modding SDK from [[Modding|Here]], create a new blank mod:&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_02.gif|alt=|frameless]]&lt;br /&gt;
&lt;br /&gt;
===Create A Custom Paint File===&lt;br /&gt;
In your mod content folder, right-click and add a new &amp;lt;code&amp;gt;Custom Paint&amp;lt;/code&amp;gt; file. This is the file the game uses to load the paint into the UI.&lt;br /&gt;
&lt;br /&gt;
[[File:CreateCustomPaintFile1.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
Open the Custom Paint file. It has a few parameters:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Name&#039;&#039;&#039; - This will be the name of the paint as it will appear in-game.&lt;br /&gt;
*&#039;&#039;&#039;Material Instance&#039;&#039;&#039; - This is the actual paint itself. The material instance defines how the paint looks, what parameters are available, and how it looks when exported.&lt;br /&gt;
*&#039;&#039;&#039;GUID&#039;&#039;&#039; - This is an unique identifier for this custom paint. It is a random value. This is how the paint is stored and saved by the game.&lt;br /&gt;
*&#039;&#039;&#039;Family GUID&#039;&#039;&#039; - As above, this is an unique identifier. This one is currently un-used, but could in the future be used for storing what paints are part of the same family, if you decide to make several.&lt;br /&gt;
&lt;br /&gt;
===Create A Material ===&lt;br /&gt;
Right-click the content browser again, and create a new &amp;lt;code&amp;gt;Material.&amp;lt;/code&amp;gt; This is the actual shader: it defines how the paint looks.&lt;br /&gt;
&lt;br /&gt;
[[File:CreateCustomPaintMaterial.jpg|frameless|352x352px]]&lt;br /&gt;
&lt;br /&gt;
Open the material. UE4 uses standard PBR Metallic-Roughness workflows. What this means is you define a material by giving it: &lt;br /&gt;
&lt;br /&gt;
*a colour (0,0,0 - 1,1,1)&lt;br /&gt;
* telling it how rough it is (0 - 1, 0 being shiny)&lt;br /&gt;
*how metallic it is (0 - 1, 0 being plastic)&lt;br /&gt;
&lt;br /&gt;
as well as a few additional things that help optimise parts of the rendering process, such as:&lt;br /&gt;
&lt;br /&gt;
*a Normal map (this defines surface detail that would be too fine or complicated to be geometry)&lt;br /&gt;
*an Ambient Occlusion map (this helps darken and reduce reflections and specular highlighting on parts of the geometry that should be darker than usual, and which the lighting model cannot properly calculate)&lt;br /&gt;
*Opacity/Opacity Mask&lt;br /&gt;
*etc..&lt;br /&gt;
&lt;br /&gt;
==== Material Requirements ====&lt;br /&gt;
&lt;br /&gt;
===== Opacity =====&lt;br /&gt;
All Custom Paint materials must be set to &amp;lt;code&amp;gt;Masked&amp;lt;/code&amp;gt;, unless it is a transparent material.&lt;br /&gt;
&lt;br /&gt;
Three nodes should be a part of the Opacity or Opacity Mask input. If your material does not have any transparent or masked info, these nodes are still required:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GetStampAlpha&amp;lt;/code&amp;gt; &amp;gt; &amp;lt;code&amp;gt;MF_BlendFade&amp;lt;/code&amp;gt; &amp;gt; &amp;lt;code&amp;gt;MF_CustomPaintTwoSidedSwitch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:SetMaterialToMasked 02.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
If your material does have opacity information, simply combine these nodes with a multiply:&lt;br /&gt;
&lt;br /&gt;
[[File:SetMaterialToMasked 03.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
Note: Since the SDK isn&#039;t updated yet, the &amp;lt;code&amp;gt;MF_CustomPaintTwoSidedSwitch&amp;lt;/code&amp;gt; node is not yet available. To get the same functionality, do this:&lt;br /&gt;
&lt;br /&gt;
[[File:SetMaterialToMasked Note.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
===== Two-Sided Material =====&lt;br /&gt;
If at all possible, your material should be set to two-sided. This ensures the interior of the car doesn&#039;t have any transparency holes in it from fixtures or paints. To enable Two-Sided, click on the main material node in the material editor, and in the details panel, under the Material category, Tick &amp;lt;code&amp;gt;Two Sided&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:CustomPaintSetTwoSided.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
==== Required Usage ====&lt;br /&gt;
Materials need to be compiled for each type of object it can be applied to.&lt;br /&gt;
&lt;br /&gt;
Make sure when creating your custom paint mod, to &amp;lt;code&amp;gt;Enable&amp;lt;/code&amp;gt; the following types in the material&#039;s details window:&lt;br /&gt;
&lt;br /&gt;
* Used with Skeletal Mesh&lt;br /&gt;
* Used with Morph Targets&lt;br /&gt;
* Used with Spline Meshes&lt;br /&gt;
&lt;br /&gt;
[[File:EnableUseWithMeshTypes.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
==== Parameter Names ====&lt;br /&gt;
For parameters to appear in-game in the UI for the player to customize, it must have the &amp;lt;code&amp;gt;editable_&amp;lt;/code&amp;gt; prefix. Only Vector and Scalar parameters will appear in the UI. Vector parameters will always appear as a Colour Picker, and Scalar parameters will mostly always appear as a Slider. If a Scalar parameter also has the &amp;lt;code&amp;gt;_Bool&amp;lt;/code&amp;gt; suffix, it will instead appear as an Enable/Disable switch. A Vector parameter cannot have the &amp;lt;code&amp;gt;_Bool&amp;lt;/code&amp;gt; suffix.&lt;br /&gt;
&lt;br /&gt;
Example parameters:&lt;br /&gt;
&lt;br /&gt;
[[File:CustomPaintParameterNameExamples.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
[[File:CustomPaintParameterNameExamplesInGame.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
Note how in-game the &amp;lt;code&amp;gt;Burn Colour&amp;lt;/code&amp;gt; parameter isn&#039;t visible, and the &amp;lt;code&amp;gt;Burned&amp;lt;/code&amp;gt; parameter is an Enable/Disable toggle. This is because the Burn Colour parameter did not have the &amp;lt;code&amp;gt;editable_&amp;lt;/code&amp;gt; prefix, and the Burned parameter had the &amp;lt;code&amp;gt;_Bool&amp;lt;/code&amp;gt; suffix. Also note how the Scalar parameter appears as a slider, and the Vector parameter appears as a colour picker.&lt;br /&gt;
&lt;br /&gt;
==== Export Material User Data ====&lt;br /&gt;
&#039;&#039;[[Export Material User Data|Export Material User Data main page]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
From the details panel of the material, expand the Material category, and from the Asset User Data array, add an Export Material User Data. This is where the values and parameters for the material are stored for the exporter. The exporter can only see the parameter names in the export user data. The exporter cannot know the layout of the parameters in the material, and cannot, therefore, know how to use those parameters. The export user data exists to simplify the parameters down to a known layout, such that the exporter can then line those values up with what the BeamNG material system uses, as well as other potential exporter plugins.&lt;br /&gt;
&lt;br /&gt;
Note that the export user data only has access to a limited subset of behaviors for materials, and cannot do a lot of the fancy things that the UE4 material editor is capable of. It should, however, still be sufficient for most basic and intermediate-level materials.&lt;br /&gt;
&lt;br /&gt;
Once you have fed your parameters into the export user data, your material should now export correctly.&lt;br /&gt;
&lt;br /&gt;
==== Helper Functions For Materials ====&lt;br /&gt;
Inside materials and from the palette menu, or the right-click menu, you can access custom material functions that have been made and exposed to the material system. These nodes are designed to help you with designing your materials. Camso has designed a few material functions that help with designing custom paint materials. These materials can be accessed from the Camso or Custom Paint sub-categories within the palette or right-click menu inside materials.&lt;br /&gt;
&lt;br /&gt;
The following nodes and material functions will help you to make materials easier:&lt;br /&gt;
&lt;br /&gt;
===== GetStampAlpha =====&lt;br /&gt;
[[File:MatFunction GetStampAlpha.jpg|thumb]]This is one of the most important nodes, as it deals with all the functions, variables, and textures, that are used by the game to put the stamp holes on cars and fixtures. Without this node, fixture stamping does not work. Your material must be set to masked, and this node must be plugged into the opacity mask section.&lt;br /&gt;
&lt;br /&gt;
It has one input, and you should not do anything with it.&lt;br /&gt;
&lt;br /&gt;
===== MF_AASmoothStep =====&lt;br /&gt;
[[File:MatFunction AASmoothStep.jpg|thumb]]This is useful for turning a range of values into a 0 or a 1, or turning a range of values into a step where black suddenly turns to white.&lt;br /&gt;
&lt;br /&gt;
It has three inputs;&lt;br /&gt;
* In - this is the value you want to turn into a 1 or a 0&lt;br /&gt;
* CompValue - If the In value is above this, the out value will be 1. if In is less than this value, the output will be 0.&lt;br /&gt;
* Range - This is how large of a transition period the value should change in, in screen-space pixels. A small value will change over the course of a single pixel or less, and a large value will change over many pixels.&lt;br /&gt;
&lt;br /&gt;
===== MF_BlendAngleCorrectedNormals =====&lt;br /&gt;
[[File:MatFunction BlendAngleCorrectedNormals.jpg|thumb]]This blends multiple normal maps together, with correctly normalized results. Other methods of blending normal maps do not correctly account for the blue vector, or do not accurately derive the blue vector. This method is more compute-intensive, but results in perfectly-blended normals.&lt;br /&gt;
&lt;br /&gt;
It has four inputs;&lt;br /&gt;
* In - this is the base normal, which you want to blend another normal with&lt;br /&gt;
* Blend - this is the second normal that you want to add to the first&lt;br /&gt;
* Strength - This is how much of the Blend normal you want to add to the base normal&lt;br /&gt;
* Clamp - this ensures that none of the normal&lt;br /&gt;
&lt;br /&gt;
===== MF_BlendFade =====&lt;br /&gt;
[[File:MatFunction BlendFade.jpg|thumb]]This is a mandatory node as part of the material for custom paints or fixture materials. Multiply it with any other part of your opacity mask network, or if you dont have any, plug it right in.&lt;br /&gt;
&lt;br /&gt;
it has one input;&lt;br /&gt;
* Opacity - This lets you pass in any other opacity value, and it will be blended with this node. this is mostly used to plug in the GetStampAlpha material function.&lt;br /&gt;
&lt;br /&gt;
===== MF_CarpaintBackfaceBlend =====&lt;br /&gt;
[[File:MatFunction CarpaintBackfaceBlend.jpg|thumb]]This node will take two material attributes, and let one pass through for the front faces, and the other through for the backfaces.&lt;br /&gt;
&lt;br /&gt;
It has three inputs;&lt;br /&gt;
* Backface- This takes a Material Attributes in, and will pass it through to the output only if the current pixel is of the backface of a polygon.&lt;br /&gt;
* Front face- This takes a Material Attributes in, and will pass it through to the output only if the current pixel is of the front face of a polygon.&lt;br /&gt;
* Alpha - This is an optional input, and will override the default mask used to detect whether a face is the front or back of a polygon.&lt;br /&gt;
&lt;br /&gt;
===== MF_DynamicGrungeAndWear_Mask =====&lt;br /&gt;
[[File:MatFunction DynamicGrungeAndWear.jpg|thumb]]This node will create a mask ( a 0-1 value) where 1 will appear on corners and sharp curves, and 0 will appear on flat surfaces.&lt;br /&gt;
&lt;br /&gt;
it has six inputs;&lt;br /&gt;
* Curvature Cutoff - This will adjust how small/thick the corners will be, where a larger value will make the grunge mask thicker on corners.&lt;br /&gt;
* Dirtiness - This is the only mandatory input.  It takes a scalar value between 0 and 1, where 0 will be no grunge output, and 1 will be the most grunge.&lt;br /&gt;
* Adjust A Power - this node will adjust some of the grunge mask generation.&lt;br /&gt;
* Adjust A Divide - this node will adjust some of the grunge mask generation.&lt;br /&gt;
* Adjust B Power - this node will adjust some of the grunge mask generation.&lt;br /&gt;
* Adjust B Divide - this node will adjust some of the grunge mask generation.&lt;br /&gt;
&lt;br /&gt;
===== MF_FakeDarkenedMattePaint =====&lt;br /&gt;
[[File:MatFunction FakeDarkenedMattePaint.jpg|thumb]]This node is useful when making paint, as it forces the specular channel darker as the paint colour becomes darker.&lt;br /&gt;
&lt;br /&gt;
Because UE4 uses a fast PBR workflow, even a pure black non-metallic surface will appear somewhat bright, so this node is useful for darkening the paint further by dynamically adjusting the specular channel of the material.&lt;br /&gt;
&lt;br /&gt;
This material is used by plugging the Base Colour, Metallic, (optional) Specular, and Roughness inputs from your material into this node, and plugging the output into the Specular channel of the material.&lt;br /&gt;
&lt;br /&gt;
It has four inputs;&lt;br /&gt;
* Base Colour - Plug the material&#039;s base colour input into here.&lt;br /&gt;
* Metallic - Plug the material&#039;s Metallic input into here.&lt;br /&gt;
* Specular - Plug the material&#039;s Specular input into here, if it is used. If not, leave empty.&lt;br /&gt;
* Roughness - Plug the material&#039;s Roughness input into here.&lt;br /&gt;
&lt;br /&gt;
===== MF_HeightLerp =====&lt;br /&gt;
[[File:MatFunction HeightLerp.jpg|thumb]]This node creates a more useful blend between two heightmaps than a simple Lerp or SmoothStep function. It takes two heightmaps, one for each of the materials or textures that you wish to blend, as well as a Transition Phase (or Alpha), and outputs a new heightmap and mask for use in a Lerp or other material blend function.&lt;br /&gt;
&lt;br /&gt;
The result of this node is a mask for blending between two textures or materials, modulated by the heightmaps of those textures or materials. This is useful for blending, say, bricks into grass, as it will account for the height of each brick, and blend the grass first into the cracks and mortar.&lt;br /&gt;
&lt;br /&gt;
It has three inputs;&lt;br /&gt;
* Height 1 - This is the heightmap of the first texture/material you wish to blend.&lt;br /&gt;
* Height 2 - This is the heightmap of the second texture/material you wish to blend.&lt;br /&gt;
* Transition Phase - This is the phase of the transition, otherwise known as an alpha, for blending between Height 1 and Height 2. A transition phase of 0 means the mask will let all of Height 1 through, and a value of 1 will let as much of Height 2 through as it can, given the height values of each input. a Value of 0.5 will blend the two heights equally.&lt;br /&gt;
&lt;br /&gt;
===== MF_MipOverride_Mask =====&lt;br /&gt;
[[File:MatFunction MipOverrideMask.jpg|thumb]]&lt;br /&gt;
This is a fun one. It acts a bit like a Camera Depth Fade, where it defines a transition mask based on depth or distance, but instead of using distance from pixel to camera, which is prone to inconsistencies with different FOVs, it instead uses the distance between the UVs of the adjacent pixels to define its mask. What this means is, regardless of the distance from the camera, or the FOV, the mask output from this node will always occur at the same texel density.&lt;br /&gt;
&lt;br /&gt;
This node was developed for the Fixture Taillight Glass material, where if the glass was small enough on screen, the pixels between the textures was creating enough noise that a transition to a simplified version of the material was needed. Since the material can change scale based on the fixture&#039;s size, the camera can move farther or closer away from the car depending on the camera&#039;s position, and the FOV can change depending on the user&#039;s game or photoscene settings, this was the only way to consistently define a mask for the simplified version of the material.&lt;br /&gt;
&lt;br /&gt;
It will output a 1 if the current pixel&#039;s texel size is less than the input threshold.&lt;br /&gt;
&lt;br /&gt;
It has five inputs;&lt;br /&gt;
&lt;br /&gt;
* DDX - This is the DDX of the UVs for the texture.&lt;br /&gt;
* DDY - This is the DDY of the UVs for the texture.&lt;br /&gt;
* Texture - This is the texture object of the texture you wish to override at a certain texel size.&lt;br /&gt;
* Transition Contrast - This is how much of a range you wish the mask to blend between. A lower value means a sharper, more immediate blend.&lt;br /&gt;
* Max Texel Size - This is the minimum size of a texel, in horizontal or vertical screen pixels, that you wish the texture to be visible. If the texture is smaller than this value, the mask output is 1.&lt;br /&gt;
&lt;br /&gt;
===== MF_StepScaleable =====&lt;br /&gt;
[[File:MatFunction StepScalable.jpg|thumb]]&lt;br /&gt;
This is a more performant version of MF_AAStep, where at lower shader settings, it falls back to a standard Step function.&lt;br /&gt;
&lt;br /&gt;
It has two inputs;&lt;br /&gt;
&lt;br /&gt;
* In - This is the value you want to apply the Step function to.&lt;br /&gt;
* Comp Value - This is the value at which you want the input to return 1. If the input value is less than the comp value, the result will be 0.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_Lerp_Scalar =====&lt;br /&gt;
[[File:MatFunction CustomPaint Lerp Scalar.jpg|thumb]]&lt;br /&gt;
This node follows the logic of the export parameters, where the values A and B can be LERP-ed together by an Alpha, and an optional Power. The power node forces the Alpha downward, such that the LERP becomes more exponential. A higher value of Power results in the Alpha applying a smoother blend between A and B. The Power is blended into the Alpha such that the higher the alpha, the less the power is applied. the end result is more control over the lower values of Alpha, while the higher values remain closer to a linear blend.&lt;br /&gt;
&lt;br /&gt;
This node is useful for a Scale input for textures, as the Alpha can be driven by a player-editable parameter (with the &amp;lt;code&amp;gt;editable_&amp;lt;/code&amp;gt; prefix) and the player has more control over the scale of the texture at lower scales.&lt;br /&gt;
&lt;br /&gt;
The formula for the output is as such:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lerp (A, B, Lerp(Power, Alpha, Power))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It has five inputs;&lt;br /&gt;
&lt;br /&gt;
* A - Just like a lerp, this is the A input. If the Alpha is 0, the result is 100% A.&lt;br /&gt;
* B - Just like a lerp, this is the B input. If that Alpha is 1, the result is 100% B.&lt;br /&gt;
* Alpha - Just like a lerp, this is the Alpha input. If the Alpha is 0, the result is 100% A, if Alpha is 0.5, the result is equally half of A and B (unless the Power input is anything other than 1, and the Has Lerp Power is True.)&lt;br /&gt;
* Power - This is the modifier for Alpha. A value above 1 will slowly force the lower values of Alpha further down towards 0, much like a power node would, but higher values of Alpha will remain higher. This is done by applying a second Lerp between the Power and Alpha inputs.&lt;br /&gt;
* Has Lerp Power - This a bool input. If the input bool is True, the Power input is evaluated. If False, the Power input is ignored and this node acts exactly like a standard lerp.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_Lerp_Vec2 =====&lt;br /&gt;
[[File:MatFunction CustomPaint Lerp Vec2.jpg|thumb]]&lt;br /&gt;
Exactly like the scalar version of this node, except it works on Vec2 values instead of scalars.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
 &lt;br /&gt;
.&lt;br /&gt;
 &lt;br /&gt;
.&lt;br /&gt;
===== MF_CustomPaint_Lerp_Vec3 =====&lt;br /&gt;
[[File:MatFunction CustomPaint Lerp Vec3.jpg|thumb]]&lt;br /&gt;
Exactly like the scalar version of this node, except it works on Vec3 values instead of scalars.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
 &lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
===== MF_CustomPaint_Lerp_Vec4 =====&lt;br /&gt;
[[File:MatFunction CustomPaint Lerp Vec4.jpg|thumb]]&lt;br /&gt;
Exactly like the scalar version of this node, except it works on Vec4 values instead of scalars.    &lt;br /&gt;
                                &lt;br /&gt;
.&lt;br /&gt;
 &lt;br /&gt;
.&lt;br /&gt;
 &lt;br /&gt;
.&lt;br /&gt;
 &lt;br /&gt;
.&lt;br /&gt;
 &lt;br /&gt;
===== MF_CustomPaint_TexList_002 =====&lt;br /&gt;
[[File:MatFunction CustomPaint TexList 002.jpg|thumb]]&lt;br /&gt;
This node, like the similarly-named nodes that follow, are part of a set of nodes that may help you set up logic for allowing the player to change the texture of a material with a slider.&lt;br /&gt;
&lt;br /&gt;
Because the current Custom Paint system doesnt allow for a texture-selector interface of any kind, one must be hacked together using some other method. This node uses a slider.&lt;br /&gt;
&lt;br /&gt;
MF_CustomPaint_TexList_002 allows you to set up two textures for the player to switch between, by feeding an &amp;lt;code&amp;gt;editable_[Scalar]&amp;lt;/code&amp;gt; parameter into the Selector input, and a texture object parameter into each of the Item0/1 inputs.&lt;br /&gt;
&lt;br /&gt;
it has seven inputs;&lt;br /&gt;
&lt;br /&gt;
* Selector - This is where you would feed your &amp;lt;code&amp;gt;editable_&amp;lt;/code&amp;gt; scalar parameter. The parameter moves between 0 and 1, where each step corresponds to a texture from the Item list of inputs.&lt;br /&gt;
* Item 0 - This is the first texture to be selected from the list, as a Texture Object Parameter. Because this list only contains two items, it will be present so long as the Selector input is between 0 and 0.5.&lt;br /&gt;
* Item 1 - This is the second texture to be selected from the list, as a Texture Object Parameter. Because this list only contains two items, it will be present so long as the Selector input is between 0.5 and 1.&lt;br /&gt;
* Output Vec4 - If the texture you are using this node for contains RGBA info, and you are using the Alpha channel in your material, set this bool to True, otherwise leave it.&lt;br /&gt;
* UVs - This is the UVs of your texture. This node handles the texture sampling of your texture, so it needs the UVs to be passed through.&lt;br /&gt;
* DDX - Because the UVs of many of Automation&#039;s textures are handled dynamically, the DDX and DDY of the UVs are often needed. As such, they are required here. This incurs no additional cost to the shader engine, as the internal texture sampler calculates them also. If you do not have or require the DDX and DDY of your UVs, simply drag out of the UVs node that you fed into the above input, and get the DDX.&lt;br /&gt;
* DDY - As above, feed the DDY of the UVs into here.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_003 =====&lt;br /&gt;
[[File:MatFunction CustomPaint TexList 003.jpg|thumb]]&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between three textures.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_004 =====&lt;br /&gt;
[[File:MatFunction CustomPaint TexList 004.jpg|thumb]]&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between four textures.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_005 =====&lt;br /&gt;
[[File:MatFunction CustomPaint TexList 005.jpg|thumb]]&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between five textures.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_006 =====&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between six textures.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_007 =====&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between seven textures.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_008 =====&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between eight textures.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_009 =====&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between nine textures.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_010 =====&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between ten textures.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_011 =====&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between eleven textures.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_012 =====&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between twelve textures.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_013 =====&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between thirteen textures.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_014 =====&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between fourteen textures.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_015 =====&lt;br /&gt;
[[File:MatFunction CustomPaint TexList 015.jpg|thumb]]&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between fifteen textures.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
===== MF_CustomPaintScale =====&lt;br /&gt;
[[File:MatFunction CustomPaintScale.jpg|thumb]]&lt;br /&gt;
This is a more advanced version of the Custom Paint Lerp Scalar node, specialized more for use as a scale modifier for UVs. It has separate scale inputs for the texture itself, and the thumbnail version of the custom paint. This allows the scale to be set differently for the thumbnail of the custom paint, as the thumbnail mesh is a 2cm^2 mesh and most scales of a texture would look poor at this size.&lt;br /&gt;
&lt;br /&gt;
It has six inputs (the greyed-out inputs that are just dashes (--) are there solely as separators for organization);&lt;br /&gt;
&lt;br /&gt;
* Editable Scale - This is where you would feed your editable_ scalar parameter for adjusting the scale in-game&lt;br /&gt;
* Scale Min - The minimum scale you wish the slider to be.&lt;br /&gt;
* Scale Max - The maximum scale you wish the slider to be.&lt;br /&gt;
* Lerp Power - Just like the Custom Paint Lerp Scalar node, this is the power adjust for the scale.&lt;br /&gt;
* Thumbnail Min - Just like Scale Min, this is the minimum scale you wish the slider to be, but this only affects the thumbnail of the material in-game.&lt;br /&gt;
* Thumbnail Max - Just like Scale Max, this is the maximum scale you wish the slider to be, but this only affects the thumbnail of the material in-game.&lt;br /&gt;
&lt;br /&gt;
===== MF_ExportParameterSwitch_Scalar =====&lt;br /&gt;
[[File:MatFunction ExportParameterSwitch Scalar.jpg|thumb]]&lt;br /&gt;
Sometimes, you want a different value to be used for the export of the material than the one that is used inside Automation. This node exploits a feature of the UE4 engine that allows parameters to exist without affecting the performance or appearance of the shader in-game. In this way, you can feed a parameter to the exporter that has no bearing on the in-game material.&lt;br /&gt;
&lt;br /&gt;
It has two inputs;&lt;br /&gt;
&lt;br /&gt;
* UE4 Parameter - This is the parameter that you wish to use for the material. it can also be used for the exporter.&lt;br /&gt;
* Export Parameter - This is the parameter input that you wish to use for the exporter. This has no effect on the material.&lt;br /&gt;
&lt;br /&gt;
===== MF_ExportParameterSwitch_Vec3 =====&lt;br /&gt;
[[File:MatFunction ExportParameterSwitch Vec3.jpg|thumb]]&lt;br /&gt;
Exactly like the scalar version of this node, except it works on Vec3 values instead of scalars.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
===== MF_FixtureUVs =====&lt;br /&gt;
[[File:MatFunction FixtureUVs.jpg|thumb]]&lt;br /&gt;
This node is the bread-and-butter of custom paint and fixture materials. It contains all the logic and maths required for applying a texture to a model, and should be used in 99% of situations where you want to apply a texture to your Custom Paint shader.&lt;br /&gt;
&lt;br /&gt;
By default, it applies a World-Aligned box-projected texture map, except centered on the car instead of the world origin. What this means is, all textures are relative to the car. As the car moves, the textures remain the same, but if a fixture with this material applied to it moves, the texture will appear to &#039;crawl&#039;, as the textures remain aligned to the car while the fixture is moving. This is useful when the player wants to use many fixtures with the same custom paint applied to it, as the textures in those custom paints will align and appear as a single texture. By aligning it to the car instead of the world, it also mitigates the issue where textures would crawl and appear mis-aligned if the car is moved or rotated in the photoscene.&lt;br /&gt;
&lt;br /&gt;
It has many inputs and outputs;&lt;br /&gt;
&lt;br /&gt;
Inputs;&lt;br /&gt;
&lt;br /&gt;
* Texture Object - Input the texture object parameter you wish to use here. Unless it is a normal map, in which case use the Normal Object input.&lt;br /&gt;
* Normal Object - If the texture object you wish to use is a normal map, use this input instead.&lt;br /&gt;
* Texture Size - Input a scalar value here, in world units (a value of 1 is equal to 1cm, and a value of 100 is equal to 100cm), and your texture will be mapped at this scale.&lt;br /&gt;
* World Normal - Leave this section blank, unless you wish to override the world normal used to calculate the current pixel&#039;s normal vector in world-space. In 99% of situations, this is left blank.&lt;br /&gt;
* World Position - Leave this section blank, unless you wish to override the world position used to calculate the current pixel&#039;s location in world-space. In 99% of situations, this is left blank.&lt;br /&gt;
* Cutoff Offset - Leave this section blank, unless you wish to override the ratio at which a texture switches between the cardinal directions used for the box unwrap. in 99% of situations, this is left blank.&lt;br /&gt;
* Texture Offset - This input defaults to using two &amp;lt;code&amp;gt;editable_&amp;lt;/code&amp;gt; parameters for adjusting the texture offset. If left blank, two sliders will appear in-game for adjusting the X and Y axis of the texture. Override this only if you know what you are doing.&lt;br /&gt;
* Texture Rotation - This input, unlike the Texture Offset input, does not have a default parameter attached to it. This is because it is unfortunately not possible, currently, to rotate the UVs of an exported material. As such, this input remains unused. You can override it to adjust the rotation of the textures along each of the three cardinal directions, as each component of the vector represents a fraction of rotation (ie: a vector [x,y,z] is really just a combination of three rotations, as 0-1 being a 0-360 degree rotation. so a vector [0.25,0.5,1] would rotate the X axis by 90 degrees, the Y axis by 180, and the z axis by 0 degrees).&lt;br /&gt;
* Output Vec4 - This bool is False by default. If the texture you are using contains RGBA information, and you are using the Alpha channel in your material, set this bool to True, otherwise leave blank.&lt;br /&gt;
* Use Mesh UVs - This bool is False by default. If enabled, most of the features of this node are disabled and only the Texture Size input is used, as a multiplier on the UVs.&lt;br /&gt;
* Has Texture Transition - This bool is False by default. If enabled, the box unwrap tries to do a blended transition between each of the three unwraps. This is useful for fine-detail or stochastic, noisy, textures. If left as False, it uses a hard cutoff where the transition between the three unwraps is more obvious. This is useful for textures that try to imitate real patterns, as the hard seams imitate actual seams between sheets of material.&lt;br /&gt;
&lt;br /&gt;
Outputs;&lt;br /&gt;
&lt;br /&gt;
* Result - This is the unwrapped texture, as either a Vec3, or Vec4 (If Output Vec4 is set to True). If no Texture Object is supplied, this output is unused.&lt;br /&gt;
* Normal - This is as above, but for normal maps. If your texture is a normal map, use this output paired with the Normal Object input. If no Normal Object is supplied, this output is unused.&lt;br /&gt;
* UVs - This is the resulting UVs used for the Texture and Normal Object texture samplers. If you need to use the UVs for more than one texture, or a texture that is not a Colour or Normal Map, this output combined with the DDX and DDY outputs can be used on a texture sampler to get the same result.&lt;br /&gt;
* DDX - Because the UVs of this node are generated procedurally, the DDX and DDY of the UVs need to be explicitly defined and fed to the Texture Sampler. If you are using your own texture sampler, you need to use the DDX and DDY outputs as well as the UVs. You cannot use the UVs just on their own.&lt;br /&gt;
* DDY - See above.&lt;br /&gt;
&lt;br /&gt;
===== MF_NormalStrength =====&lt;br /&gt;
[[File:MatFunction NormalStrength.jpg|thumb]]&lt;br /&gt;
This node will adjust the strength of a normal map. This is useful when a normal map does not perfectly represent the material you wish to create, or when the material is dynamic and adjustment of the normal map is desired.&lt;br /&gt;
&lt;br /&gt;
It has two inputs;&lt;br /&gt;
&lt;br /&gt;
* Normal - This is the normal vector you want to adjust.&lt;br /&gt;
* Strength - This is a scalar value that will effectively multiply the normals. A strength of 1 means the normal map is un-affected, a strength of 2 means the normal map is twice as strong, a value of 0 will mean the normal vector has no effect on the surface normals of the material, and a value of -1 will invert the direction of the X and Y components of the normal (effectively inverting the normal map without inverting the direction of the surface polygon)&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== An Example Material ===&lt;br /&gt;
Set your material to Masked:&lt;br /&gt;
&lt;br /&gt;
[[File:Example MaterialDefaultRequirements 001.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
Then add the GetStampAlpha, and BlendFade nodes to the opacity mask:&lt;br /&gt;
&lt;br /&gt;
[[File:Example MaterialDefaultRequirements 002.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
==== Adding a Texture ====&lt;br /&gt;
Add a FixtureUVs node to the Base Colour input, and add a texture object parameter to the Texture Object Input, and a scalar parameter to the Texture Size input of it:&lt;br /&gt;
&lt;br /&gt;
[[File:Example FixtureUVs.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
==== Controlling the Scale ====&lt;br /&gt;
If you want the player to be able to control the scale of the texture, add a CustomPaintScale node to the Texture Size input:&lt;br /&gt;
&lt;br /&gt;
[[File:Example FixtureUVsWithScale.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
==== Adding a Normal Map ====&lt;br /&gt;
If you have a normal map, add that to the Normal Object input:&lt;br /&gt;
&lt;br /&gt;
[[File:Example FixtureUVsWithScaleAndNormals.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
==== Adding Normal Strength Adjustment ====&lt;br /&gt;
If your normal map could do with some adjustment for strength, add that with a NormalStrength node:&lt;br /&gt;
&lt;br /&gt;
[[File:Example FixtureUVsWithScaleAndNormalsAndStrength.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
==== Creating Colour Adjustment ====&lt;br /&gt;
If you want the player to be able to adjust the colours of the texture in-game, do so with a Lerp node and two Vector Parameters:&lt;br /&gt;
&lt;br /&gt;
[[File:Example FixtureUVs 005.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note that any parameter that you want the player to be able to edit &#039;&#039;&#039;must&#039;&#039;&#039; have &amp;lt;code&amp;gt;editable_&amp;lt;/code&amp;gt; as the prefix.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Adding Texture Selection Options ====&lt;br /&gt;
If you want the player to be able to select a texture with a slider, the order of operations needs to switch. Remove the texture inputs from the FixtureUVs node, and instead use the UVs, DDX, and DDY outputs from FixtureUVs to feed into the respective inputs of a TexList node. For this example, We&#039;ll use a TexList_004, but any number of inputs will work exactly the same way.&lt;br /&gt;
&lt;br /&gt;
Create four texture object parameters (or any number, to match the number of textures the TexList node requires), and name them all. &#039;&#039;They cannot be static texture objects, they must be parameters.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Create a scalar parameter, with the &amp;lt;code&amp;gt;editable_&amp;lt;/code&amp;gt; prefix, to be your selector slider. &lt;br /&gt;
&lt;br /&gt;
For regular textures, use the Selected Texture output. For normal maps, use the Selected Normal output.&lt;br /&gt;
&lt;br /&gt;
[[File:Example FixtureUVs 006.jpg|frameless]]&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=File:SetMaterialToMasked_Note.jpg&amp;diff=5031</id>
		<title>File:SetMaterialToMasked Note.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=File:SetMaterialToMasked_Note.jpg&amp;diff=5031"/>
		<updated>2025-02-19T00:14:29Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SetMaterialToMasked Note&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=File:SetMaterialToMasked_03.jpg&amp;diff=5030</id>
		<title>File:SetMaterialToMasked 03.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=File:SetMaterialToMasked_03.jpg&amp;diff=5030"/>
		<updated>2025-02-19T00:11:19Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SetMaterialToMasked 03&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=File:SetMaterialToMasked_02.jpg&amp;diff=5029</id>
		<title>File:SetMaterialToMasked 02.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=File:SetMaterialToMasked_02.jpg&amp;diff=5029"/>
		<updated>2025-02-19T00:02:26Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SetMaterialToMasked 02&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=Badge_Fixture_Mods&amp;diff=5007</id>
		<title>Badge Fixture Mods</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=Badge_Fixture_Mods&amp;diff=5007"/>
		<updated>2024-10-11T04:51:11Z</updated>

		<summary type="html">&lt;p&gt;Hannah: added a note about the badge material failing to compile curently&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Badge Mod is the same basic class as a regular Fixture, but I&#039;ve put together a streamlined and simpler method for creating custom badges for people who do not know or care about 3D modelling.&lt;br /&gt;
&lt;br /&gt;
[[File:Example_Badge_Fixture.jpg|alt=An example badge mod|frameless]]&lt;br /&gt;
&lt;br /&gt;
If you feel comfortable enough with 3D modelling, it may be easier to follow the [[Fixture Mods]] page, and create a Fixture Mod with your badge as a &#039;&#039;Conforming Mesh&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For those that simply have an image of a badge and want it on their car, read on!&lt;br /&gt;
&lt;br /&gt;
== Fast Rundown==&lt;br /&gt;
&lt;br /&gt;
*A Badge Mod is a regular Fixture&lt;br /&gt;
* All you need to make your custom badge is an image (everything else is provided in the tools)&lt;br /&gt;
**That image must have four colour channels:  RGBA&lt;br /&gt;
**That image can have any number of colours in its RGB channels&lt;br /&gt;
**The shape of the badge is defined in the Alpha channel&lt;br /&gt;
*that image gets fed in to a provided material&lt;br /&gt;
*that material gets fed in to a provided mesh&lt;br /&gt;
*that mesh gets fed in to the Fixture Preview File&lt;br /&gt;
&lt;br /&gt;
For a visual breakdown of what we&#039;ll be making for this badge, take a look at the following reference graph:&lt;br /&gt;
&lt;br /&gt;
[[File:Badge_reference_graph.jpg|alt=From right to left, top to bottom: Badge Texture (your badge design), Badge Normal Map (we&#039;ll create this from our badge texture), Badge Material (this is provided in the mod tools), Conforming Mesh (again, provided in the mod tools), Fixture Blueprint (we&#039;ll create this when we create our Badge Mod), Thumbnail CPP and thumbnail Texture (we&#039;ll generate these when we&#039;re finished creating our blueprint)|frameless]]&lt;br /&gt;
&lt;br /&gt;
==How it Works==&lt;br /&gt;
[[File:Badge_mesh.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
Badges, as they are implemented here, are simply a texture with a cutout mask on them.  This cutout mask is applied to the above mesh, and creates the shape of the badge.  As you can see in the above image, there are several duplicate layers to the mesh.  This helps give depth to the badge.&lt;br /&gt;
&lt;br /&gt;
Of course it is possible to create a custom mesh with the shape of the badge that you would like to have, and simply import it in as a conforming mesh in to a Fixture Mod, but for the sake of simplicity I have created this workflow for people who do not want or care for working on 3D meshes and simply want to bring their custom badge design in to Automation.&lt;br /&gt;
&lt;br /&gt;
==Creating your Custom Badge Texture==&lt;br /&gt;
We&#039;ll use Photoshop for this example, but anything that supports saving out an alpha channel to a TARGA file should work fine (a quick google tells me that GIMP should work fine)&lt;br /&gt;
&lt;br /&gt;
===Badge Image Size===&lt;br /&gt;
Create a new image.  The image needs to be square, and it needs to be a power of two (for example, 64x64, 128x128, 256x256, etc).  For all the default textures in Automation, we use a size of 256x256 pixels.  I find this is detailed enough for most of the default designs without being too blurry up close, but there isn&#039;t really an upper limit to your badge size.  Your design could, for instance, be 8192x8192, or 8x8, though neither of those extremes is recommended.&lt;br /&gt;
&lt;br /&gt;
[[File:Badge_size.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
===Create your design===&lt;br /&gt;
You can go as wild and creative as you want, so long as the colours you chose fit on the RGB spectrum (ie: they dont extend into any 4th or high-dimensional space, which... yeah, im just having fun at this point), and so long as that design fits on the square texture.  If you want a rectangular badge, just [[wikipedia:Pillarbox|pillarbox]] or [[wikipedia:Letterboxing_(filming)|letterbox]] it.&lt;br /&gt;
&lt;br /&gt;
Your image size must be a power of two.  that means, 64x64, 128x128, 256x256, 512x512, 1024x1024, 2048x2048, etc.. dont go higher than 4096x4096.  usually 2048x2048 is the highest you need to go, and all the default ones are 256x256.&lt;br /&gt;
&lt;br /&gt;
For this example, I have created a badge for the fictional company I just now made up for the purposes of this tutorial - Gasmean Motor Works:&lt;br /&gt;
&lt;br /&gt;
[[File:ExampleBadge.png|frameless]]&lt;br /&gt;
&lt;br /&gt;
If I were to import this as it is now in to the Automation SDK, it would appear like this on the badge mesh:&lt;br /&gt;
&lt;br /&gt;
[[File:Example_wrong_badge.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
To find out why it looks just like a square texture, instead of a nice round badge, let&#039;s have a look at the file in Adobe® Photoshop® software &amp;lt;small&amp;gt;&amp;lt;s&amp;gt;(yep, that&#039;s apparently how [https://www.adobe.com/legal/permissions/trademarks.html you&#039;re supposed to say it.]  I&#039;m just going to refer to it as &#039;Photoshop&#039; from here on out, like any sane person)&amp;lt;/s&amp;gt;&amp;lt;/small&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
[[File:Example_wrong_badge_in_photoshop.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
Enhance:&lt;br /&gt;
&lt;br /&gt;
[[File:Example_wrong_badge_channels.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
A-ha!  There&#039;s the problem.  There&#039;s no Alpha Channel!&lt;br /&gt;
&lt;br /&gt;
Let&#039;s make one.&lt;br /&gt;
&lt;br /&gt;
===Creating the Alpha Channel===&lt;br /&gt;
An Alpha channel is similar to how a Red, Green, or Blue channel works.  Except that instead of defining how much red, green, or blue there is in the texture, you&#039;re defining how much of that texture is visible.  This means that yes, you can have a texture that is very red but also completely invisible!  In practicality, this doesn&#039;t work quite as well as you&#039;d think, especially when we take in to consideration how we are using alpha channels in UE4 to define the cutout mask for these badges.&lt;br /&gt;
&lt;br /&gt;
To get the most out of the rendering features available to us in the Unreal Engine, we&#039;ll be using the &#039;&#039;&#039;&#039;&#039;Alpha Mask&#039;&#039;&#039; Blend Mode&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
What the Alpha Mask Blend Mode does is find a point between white and black at which the object is visible.  Any value above this is visible, and any value below it is invisible.  Think of it as a switch.  On, or Off.  Visible, or Invisible.  White parts of the texture define what parts of the object are visible, and black parts define what parts are invisible.&lt;br /&gt;
&lt;br /&gt;
There are of course other blending options, such as &#039;Translucent&#039;, which is a complete gradient of visibility from completely visible, through slightly visible, to mostly invisible but still sort of there, to completely invisible.  Unfortunately, this blend mode suffers from not having a lot of the rendering features that we&#039;ve come to know and love, and so we avoid it as much as possible for most things.&lt;br /&gt;
&lt;br /&gt;
To make an Alpha Channel for the purposes of this Alpha Cutout Mask in Photoshop, I&#039;m just going to select my design and create a new layer, with a white colour where the badge design is and black where there is no badge:&lt;br /&gt;
&lt;br /&gt;
[[File:Example_badge_photoshop_01.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
Copy-and-Paste this Alpha Mask to an Alpha Channel by selecting &#039;Create New Channel&#039; in the Channels box in Photoshop:&lt;br /&gt;
&lt;br /&gt;
[[File:Setting_Alpha_Channels.gif|frameless]]&lt;br /&gt;
&lt;br /&gt;
Your channels list should now look something like this:&lt;br /&gt;
&lt;br /&gt;
[[File:Final_channels_list.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
===Saving your Design to a file===&lt;br /&gt;
Saving out your finished design is less simple than you would expect.&lt;br /&gt;
&lt;br /&gt;
So it&#039;s an image with some transparency... So what, right?  You thought you could just save out a .PNG and be done with it?  You&#039;re wrong, kiddo.  &#039;&#039;Shit&#039;s about to get real.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Photoshop does weird things to .PNG files to save out the opacity on them.  You can test this for yourself by saving out your file to a .PNG, and before you&#039;ve even finished saving it you&#039;ll notice something is amiss:&lt;br /&gt;
&lt;br /&gt;
[[File:Untitled-1.gif|frameless]]&lt;br /&gt;
&lt;br /&gt;
So the Portable Network Graphics format (.PNG) won&#039;t work.  What does work is the Truevision TGA (TARGA) image format (.TGA), which is supported by Photoshop by default, and supports Alpha channels:&lt;br /&gt;
&lt;br /&gt;
[[File:Badge_save_targa.gif|frameless]]&lt;br /&gt;
&lt;br /&gt;
Hit &#039;Save&#039;.  Make sure to save the file out as a 32-bit image to ensure that the alpha channel survives:&lt;br /&gt;
&lt;br /&gt;
[[File:Targa_32bit_save.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
===Creating a Normal Map===&lt;br /&gt;
I have created an easy to use normal map generator in the Automation SDK files, which you can open by installing Substance Player from the Allegorithmic website for free, here: https://substance3d.adobe.com/documentation/sp31/substance-player-2294742.html.&lt;br /&gt;
&lt;br /&gt;
[[File:Download_substance.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
Once you&#039;ve got that downloaded and installed, open the Custom_Badge.sbsar file (located in: &amp;lt;code&amp;gt;Automation_SDK\AutomationGame\Mods\ExampleBadge\Content\&amp;lt;/code&amp;gt;) &lt;br /&gt;
&lt;br /&gt;
You should be greeted with something that looks a little like this:&lt;br /&gt;
&lt;br /&gt;
[[File:Substance_open.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
We only need to worry about the small cluster of settings in the top right of the Substance Player.&lt;br /&gt;
&lt;br /&gt;
[[File:Substance_settings.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
The settings we need to pay attention to are as follows:&lt;br /&gt;
&lt;br /&gt;
*Output Size - This determines how high-resolution you want your normal map to be. It is usually fine to keep this at the same resolution of your colour texture, but sometimes you can get away with having it at a lower resolution.&lt;br /&gt;
*Input - This is where you would feed your texture in, to create a Normal Map from.&lt;br /&gt;
*Channel Weights - This setting lets you chose how weighted each colour channel of your texture is, for determining how the normal map is generated. For instance, if you wish to use the alpha channel only, to have a normal map only at the edges of your badge, set the R, G, and B channel weights to 0, and the A channel weight to 1. if your texture has a lot of information in the green channel only, set the green channel to 1.&lt;br /&gt;
*Normal Radius - Because a normal map is used to fake depth information along the texture, it must have a width. Adjust this to suit your needs.&lt;br /&gt;
*Normal Intensity - This determines the strength of the normal map it will create.&lt;br /&gt;
&lt;br /&gt;
Select the Input button: &amp;quot;None [...]&amp;quot; to import your badge image in:&lt;br /&gt;
&lt;br /&gt;
[[File:Import_to_substance.gif|frameless]]&lt;br /&gt;
&lt;br /&gt;
From here, you&#039;ll likely notice that the normal map in the top left has changed slightly:&lt;br /&gt;
&lt;br /&gt;
[[File:Changed_normal.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
By default, it will create the normal map from the alpha channel of the image you feed it, but this is only useful if your badge is completely &#039;flat&#039; and you only want some rounded edges on it.&lt;br /&gt;
&lt;br /&gt;
This is because the normal map is sampling the Alpha channel only.  If you want your badge to have more bumpiness to it, change the Channel Weights to be more like this, to use the RGB colours of the texture to generate the normal map:&lt;br /&gt;
&lt;br /&gt;
[[File:Channel_weights.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
By messing with some of the Range and Intensity options as well, the normal map will look a bit more like this:&lt;br /&gt;
&lt;br /&gt;
[[File:Adjusted_substance_normal.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
Either versions are fine, it depends on what you want your badge to look like as to which option you chose to go with.&lt;br /&gt;
&lt;br /&gt;
Feel free to mess around with the settings to get something you&#039;re happy with.&lt;br /&gt;
&lt;br /&gt;
Once you&#039;re happy with your normal map, hit &#039;Export as Bitmap&#039; in the menu at the top left and save out your normal map.&lt;br /&gt;
&lt;br /&gt;
We can now move on to importing the files to UE4.&lt;br /&gt;
&lt;br /&gt;
==Importing to UE4==&lt;br /&gt;
This step assumes that the correct version of Unreal Engine is installed and configured correctly. See [[Modding]] for more information on the correct version of Unreal Engine to use and how to view mod content folders.  Also see [https://docs.unrealengine.com/latest/INT/Engine/Content/FBX/StaticMeshes/#importmesh the official Unreal Engine documentation on importing .FBX files].&lt;br /&gt;
&lt;br /&gt;
=== Creating your Fixture Mod Plugin ===&lt;br /&gt;
Using the correct version of Unreal Engine, with our modding tool project opened and plugins loaded, select &#039;Create Mod&#039; from the top menu bar.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_02.gif|alt=|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Import Your Textures ===&lt;br /&gt;
Click the &#039;Import&#039; button in the top of the Content Browser, and import your Badge texture and Normal Map texture to your new Mod folder.&lt;br /&gt;
&lt;br /&gt;
===Copy the Badge Mesh===&lt;br /&gt;
Select the ExampleBadge_MESH file from the ExampleBadge Content, and drag-and-drop it to your mod folder and select &#039;copy&#039; from the dialog box that appears:&lt;br /&gt;
&lt;br /&gt;
[[File:Move_mesh.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
===Copy the Badge Material===&lt;br /&gt;
Open the Material Instance from the ExampleBadge folder by double-clicking it:&lt;br /&gt;
&lt;br /&gt;
[[File:Open_material_instance.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
Find the Master Material in the Content Browser by clicking the magnifying glass icon in the Material Instance:&lt;br /&gt;
&lt;br /&gt;
[[File:Find_master_material.gif|frameless]]&lt;br /&gt;
&lt;br /&gt;
The Content Browser has navigated to the Master Material:&lt;br /&gt;
&lt;br /&gt;
[[File:Find_mater_material.gif|frameless]]&lt;br /&gt;
&lt;br /&gt;
Drag-and-Drop the master material to your mod folder and select &#039;copy&#039; in the pop-up menu:&lt;br /&gt;
&lt;br /&gt;
[[File:Cope_master_material.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
right-click that new master material in your mod folder and select &#039;create material instance&#039;:&lt;br /&gt;
&lt;br /&gt;
[[File:Create_material_insance.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
You should now have a mod folder full of two textures, a mesh, a material, and a material instance:&lt;br /&gt;
&lt;br /&gt;
[[File:Final_mod_folder.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
We&#039;ll set up everything now.&lt;br /&gt;
&lt;br /&gt;
NOTE: currently, the SDK is missing a texture that is used by this master material, which causes the material to fail to compile, and your mod will not work!&lt;br /&gt;
&lt;br /&gt;
to fix this: open the master material that you copied to you mod folder, and put your textures directly into the texture samplers that show errors, making sure to put the normal map texture into the normal map sampler, and the regular texture into the regular texture sampler. that will fix the material breaking. in the material menu, click compile, then save, then close the material. continue as normal.&lt;br /&gt;
&lt;br /&gt;
===Putting the Textures in to the Material Instance===&lt;br /&gt;
Open the Material Instance by double-clicking on it&lt;br /&gt;
&lt;br /&gt;
[[File:Opening_material_inst.gif|frameless]]&lt;br /&gt;
&lt;br /&gt;
By default, the material will have the example textures in it.&lt;br /&gt;
&lt;br /&gt;
To change this, select your textures one by one and drag them in to the corresponding slots in the material instance:&lt;br /&gt;
&lt;br /&gt;
[[File:Setting_the_normal_map_texture.gif|frameless]]&lt;br /&gt;
[[File:Setting_the_diffuse_textures.gif|frameless]]&lt;br /&gt;
&lt;br /&gt;
Once you have assigned your textures, you can change some of the settings in the material instance:&lt;br /&gt;
&lt;br /&gt;
[[File:Material_instance_settings.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
From the top, these settings are:&lt;br /&gt;
&lt;br /&gt;
* Colour 2 - If you just want a single colour for your badge, set that colour here&lt;br /&gt;
* Use Single Colour - set this to &#039;0&#039; if you have a texture for your badge, or &#039;1&#039; if you want to use the single colour setting above&lt;br /&gt;
* Mask Cutoff - a 0-1 range at which the alpha mask is used to mask out your badge.  Adjust this if you want to slightly change where the edge of your badge is.&lt;br /&gt;
* metallicness - from 0-1 how metalic you want your badge to be&lt;br /&gt;
* Roughness - 0-1 for how rough you want reflections and specular lighting to be on your badge.&lt;br /&gt;
&lt;br /&gt;
===Putting the material instance in to the mesh===&lt;br /&gt;
Open the mesh by double-clicking on it, and drag-and-drop the material in to the material slot in the Static Mesh editor&lt;br /&gt;
&lt;br /&gt;
[[File:Setting_material_in_mesh_editor.gif|frameless]]&lt;br /&gt;
&lt;br /&gt;
===Put the Mesh in to the Preview File===&lt;br /&gt;
Open the Preview by double-clicking on it, and drag-and-drop the mesh in to the Conforming Mesh slot on the Fixture Blueprint settings.  You can read more about the Fixture Blueprint [[Fixture Mods#The Fixture Blueprint and its Components|here]].&lt;br /&gt;
&lt;br /&gt;
[[File:Setting_mesh_in_blueprint.gif|frameless]]&lt;br /&gt;
&lt;br /&gt;
===Generate the Blueprint GUIDs===&lt;br /&gt;
In the Fixture Blueprint, generate the Fixture and Family GUID&lt;br /&gt;
&lt;br /&gt;
[[File:Animated1.gif|frameless]]&lt;br /&gt;
&lt;br /&gt;
==Make sure to Compile the blueprint, then save all your files.==&lt;br /&gt;
[[File:Save_and_compile.gif|frameless]]&lt;br /&gt;
&lt;br /&gt;
==Generate the Fixture Thumbnails==&lt;br /&gt;
Follow the [[Fixture Mods#Creating the fixture thumbnail files|Fixture Mods page on generating thumbnail icons]] to generate the thumbnail for your Badge.&lt;br /&gt;
&lt;br /&gt;
Your badge should now be ready to use!&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=Fixture_Mods&amp;diff=4998</id>
		<title>Fixture Mods</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=Fixture_Mods&amp;diff=4998"/>
		<updated>2023-11-16T04:14:23Z</updated>

		<summary type="html">&lt;p&gt;Hannah: mentioned exhaust connect in the wiki&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
A fixture is a collection of files, for which a &amp;lt;code&amp;gt;cpp&amp;lt;/code&amp;gt; file serves as the parent file. All the settings for a fixture are inside this &amp;lt;code&amp;gt;cpp&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
Fixtures are comprised of up to 4 optional sub-meshes (a [[#UV Mesh|UV mesh]], [[#Conforming Mesh|conforming mesh]], [[#Skinned Mesh|skinned mesh]], and [[#Additional Mesh|additional mesh]]) depending on the type of fixture:&lt;br /&gt;
&lt;br /&gt;
*A &#039;&#039;&#039;UV mesh&#039;&#039;&#039; is the silhouette of the cutout hole that a fixture makes in a car body.&lt;br /&gt;
*A &#039;&#039;&#039;conforming mesh&#039;&#039;&#039; (e.g. grilles, outer light glass, or body moulding) will deform to the shape of the body.&lt;br /&gt;
*A &#039;&#039;&#039;skinned mesh&#039;&#039;&#039; (e.g. light internals) will maintain its relative internal shapes, but will conform roughly to the shape of the body.&lt;br /&gt;
*An &#039;&#039;&#039;addditional mesh&#039;&#039;&#039; (e.g. mirrors) will retain its shape no matter where it is placed on the body.&lt;br /&gt;
&lt;br /&gt;
Fixtures need [[Material Slots|material slots]] set up correctly to look as intended, and [[Preview Thumbnails|preview thumbnails]] to appear in-game.&lt;br /&gt;
&lt;br /&gt;
==Performance considerations==&lt;br /&gt;
The performance of fixtures (and bodies) in UE4 is a constant discussion of balance.&lt;br /&gt;
&lt;br /&gt;
There is a performance impact to poly count with fixtures in that a ray is cast to the body for every vertex; the more vertices there are in a mesh, the longer it&#039;ll take to conform to the body. This is why you&#039;ll see more detailed fixtures sit there for a few seconds before conforming to the car.&lt;br /&gt;
&lt;br /&gt;
This is doubly so for fixtures that cut into the body—a UV mesh&#039;s vertices are raycast to the car on every frame while you&#039;re dragging the fixture around. UV meshes impact performance significantly with a higher poly count; try to keep UV meshes as low-poly as possible.&lt;br /&gt;
&lt;br /&gt;
=== For optimal performance: ===&lt;br /&gt;
&lt;br /&gt;
*Keep UV meshes lower than 100 triangles. With between 100 and 150 triangles, the fixture may lag when being dragged around; any higher and it will lag too much to use properly.&lt;br /&gt;
*Try to keep conforming meshes lower than 5,000 triangles. Higher-resolution meshes take longer than usual to conform to the car once they are placed.&lt;br /&gt;
&lt;br /&gt;
== Fixture blueprints ==&lt;br /&gt;
[[File:FixtureExampleSettings.png|alt=|right|frameless|700x700px]]A Fixture is composed of a Blueprint that contains the fixture settings and sub-meshes.&lt;br /&gt;
&lt;br /&gt;
=== Fixture Settings ===&lt;br /&gt;
Meshes (more on these below):&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Conforming Mesh&#039;&#039;&#039; - Defines the &#039;&#039;Static Mesh&#039;&#039; sub-mesh used by this fixture.&lt;br /&gt;
* &#039;&#039;&#039;UV Mesh&#039;&#039;&#039; - Defines the &#039;&#039;UV Mesh&#039;&#039; sub-mesh used by this fixture.&lt;br /&gt;
*&#039;&#039;&#039;Skinned Mesh&#039;&#039;&#039; - Defines the &#039;&#039;Skinned Mesh&#039;&#039; sub-mesh used by this fixture.&lt;br /&gt;
*&#039;&#039;&#039;Additional Mesh&#039;&#039;&#039; - Defines the &#039;&#039;Additional Mesh&#039;&#039; sub-mesh used by this fixture.&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&amp;lt;nowiki/&amp;gt;&amp;lt;nowiki/&amp;gt;&amp;lt;nowiki/&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Text:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Text Data&#039;&#039;&#039; - Only used for typeable text.&lt;br /&gt;
&lt;br /&gt;
Fixture Preview:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;GUID&#039;&#039;&#039; - Unique identifier for this fixture.&lt;br /&gt;
*&#039;&#039;&#039;Family GUID&#039;&#039;&#039; - Identifier for this fixture family. This should be unique to every other family GUID, and identical to every other variant of this fixture.&lt;br /&gt;
&lt;br /&gt;
Fixture:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Fixture Type&#039;&#039;&#039; - What category this fixture should be in (e.g. headlight, aerial, grille, etc).&lt;br /&gt;
*&#039;&#039;&#039;Centre Snap Distance&#039;&#039;&#039; - Defines at what distance, in cm, the fixture will snap to the centre line of the car (10 by default).&lt;br /&gt;
*&#039;&#039;&#039;Lock Normal to Cardinal&amp;lt;nowiki/&amp;gt;&#039;&#039;&#039; - Determines whether the fixt&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;&#039;&#039;ure will conform t&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;&#039;&#039;o one of the five cardinal directions in 3D space (forwards, backwards, left, right, or upwards) by default. A non-cardinal-locked fixture will simply face in the direction of the surface on which it&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;&#039;&#039; is placed. Cardinal locking is useful for fixtures such as lights and mirrors, since it ensures that they don&#039;t face in (or conform to) odd directions.&lt;br /&gt;
*&#039;&#039;&#039;Export Breakability Override&#039;&#039;&#039; - Certain categories of fixtures can break off when damaged in BeamNG.drive. This setting lets you force a fixture to be breakable or unbreakable.&lt;br /&gt;
*&#039;&#039;&#039;Fixture Shape&#039;&#039;&#039; - Used to filter fixtures by rectangular, round, or complex shapes. Mostly used for lights.&lt;br /&gt;
*&#039;&#039;&#039;Year&#039;&#039;&#039; - Used to filter fixtures by year. Useful for era-specific fixtures, such as sealed beam headlights.&lt;br /&gt;
*&#039;&#039;&#039;Use This Fixture as Family Preview&#039;&#039;&#039; - if you have many variants of a fixture, enabling this setting for one variant will make it the one that shows up in the main fixture menu (overriding the first fixture as per alphabetical order).&lt;br /&gt;
&lt;br /&gt;
Path:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Fixture Class&#039;&#039;&#039; - Set this to &amp;lt;code&amp;gt;A_Fixture&amp;lt;/code&amp;gt; to ensure that the fixture works as intended in-game.&lt;br /&gt;
&lt;br /&gt;
=== Fixture Sub-Meshes ===&lt;br /&gt;
&lt;br /&gt;
==== UV Mesh ====&lt;br /&gt;
The &#039;&#039;UV Mesh&#039;&#039; (imported as a &#039;&#039;&#039;Static Mesh&#039;&#039;&#039; in UE4) is a flat silhouette that tells the fixture to cut a hole into the car body.  You will only need vertices along the outside edges of the UV mesh, and a UV mesh is only required if your fixture intends to cut into the car. Unlike other meshes, UV meshes do not require any UV maps.&lt;br /&gt;
&lt;br /&gt;
==== Conforming Mesh ====&lt;br /&gt;
The &#039;&#039;Conforming Mesh&#039;&#039; (imported as a &#039;&#039;&#039;Static Mesh&#039;&#039;&#039; in UE4) is a mesh where each vertex is deformed to match the surface of the car body. It is also a required mesh if the fixture has a UV mesh, as the conforming mesh is used to cover the jagged edge of the hole created by the UV mesh.  A conforming mesh that could logically be placed on top of other fixtures should also have its outside edges extend beneath the body; the default distance for this extrusion is slightly farther than 10 cm.&lt;br /&gt;
&lt;br /&gt;
==== Skinned Mesh ====&lt;br /&gt;
The &#039;&#039;Skinned Mesh&#039;&#039; (imported as a &#039;&#039;&#039;Skeletal Mesh&#039;&#039;&#039; in UE4) is used when you have parts of a fixture that should conform to the rough shape of the car, but also retain the dimensions and ratios of any individual components. A skinned mesh will have a bone for each element that is parented to a root bone.&lt;br /&gt;
&lt;br /&gt;
Some vertices of a skinned mesh will conform to the car as with a conforming mesh if they are a) within 1.5 mm of the car body surface, whether weighted to any bones or not, b) weighted to the root bone, or c) not weighted to any bones. Because of the former, there may be a small gap of at least 1 mm between the edge of the skinned mesh and the car body. To cover up this gap, a conforming mesh is often used to connect the edge of the skinned mesh with the car body.&lt;br /&gt;
&lt;br /&gt;
==== Additional Mesh ====&lt;br /&gt;
The &#039;&#039;Additional Mesh&#039;&#039; (imported as a &#039;&#039;&#039;Static Mesh&#039;&#039;&#039; in UE4) does not deform in any way and will remain in place relative to the location of the fixture.  An additional mesh has no skin or bones, and no part of it will deform to the shape of the car. Examples of additional meshes are exhaust tips, wing mirrors, and most fixtures intended for 3D placement.&lt;br /&gt;
&lt;br /&gt;
== Modelling a fixture ==&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note:&#039;&#039;&#039; This how-to assumes a general understanding of polygonal 3D modelling software. Any 3D modelling package will do, as no custom scripts are required to author fixture meshes.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hard Rooster has created a full video series for fixture modding in Blender. The full series can be found [https://www.youtube.com/playlist?list=PLb7obMX2SCf0V3dlxfOHnB9eKtP3c_KEZ here.]&lt;br /&gt;
=== Fixture Orientation ===&lt;br /&gt;
Fixtures are oriented in the following manner in a 3D modelling program. Note how the negative Y axis faces forwards.&lt;br /&gt;
[[File:Fixture_Orientation_Example.jpg|link=https://automation.gamepedia.com/File:Fixture_Orientation_Example.jpg|alt=Fixture Orientation Example|none|thumb|360x360px|Fixtures come out of the car towards the -Y axis. -X is left, +X is right, +Z is up, and -Z is down.]]&lt;br /&gt;
&lt;br /&gt;
=== Fixture Y-Axis Thresholds ===&lt;br /&gt;
There are 2 important values to take in to note for fixture sub-meshes.&lt;br /&gt;
* A skinned mesh will have some of its vertices conform to the car as if it were a conforming mesh, but only if those vertices are within &#039;&#039;&#039;&#039;&#039;1.5 mm&#039;&#039;&#039;&#039;&#039; from Y=0. A vertex with a Y axis value of 1.5 mm will conform to the car as if it were part of a conforming mesh, and a vertex with a Y axis value of 2.0 mm will not.&lt;br /&gt;
* The outer edges of most vanilla conforming meshes (and inner edges of things with holes in them, like open grilles) usually sit 10 cm below the surface (or 10 cm inwards along the Y axis). This stops fixtures from appearing to &#039;float&#039; when put on top of other fixtures that cut into cars and leave holes, such as grilles and moulding. This is by no means a hard-and-fast rule; specific applications may call for fixtures to extend anywhere from 1 to 100 cm into the body.&lt;br /&gt;
&lt;br /&gt;
It&#039;s a bit confusing at first, but following these rules will ensure your fixture works correctly.&lt;br /&gt;
&lt;br /&gt;
=== Deciding What Sub-Meshes You&#039;ll Need ===&lt;br /&gt;
Fixtures have a fairly convoluted list of things that are or are not needed, depending on what&#039;s in the fixture.&lt;br /&gt;
*If you have a [[Fixture Mods#UV Mesh|UV mesh]], you need a [[Fixture Mods#Conforming Mesh|conforming mesh]] to cover the hole.&lt;br /&gt;
*If you have a conforming mesh, it isn&#039;t required to have anything else unless said Conforming Mesh has parts that go below the car body mesh (in which case you&#039;ll need a UV Mesh to cut a hole out for it).&lt;br /&gt;
*If you have a [[Fixture Mods#Skinned Mesh|skinned mesh]], you&#039;ll need a conforming mesh and a UV mesh, as a skinned mesh can only be inside the car. Therefore, a UV mesh is needed to cut out that hole, and a conforming mesh is needed to cover the edge of that hole.&lt;br /&gt;
*If you have an [[Fixture Mods#Additional Mesh|additional mesh]] positioned above the car body, nothing else is needed. If the additional mesh is obscured by the car body mesh, you&#039;ll need a UV mesh to cut out the hole for that (and by extension, a conforming mesh to line that hole).&lt;br /&gt;
&lt;br /&gt;
For this example, we&#039;ll make the components for the headlight fixture below (a &#039;&#039;Conforming Mesh&#039;&#039;, &#039;&#039;UV Mesh&#039;&#039;, and a &#039;&#039;Skinned mesh&#039;&#039; with 4 bones).&lt;br /&gt;
&lt;br /&gt;
[[File:Fixture_On_Car_Example.jpg|link=https://automation.gamepedia.com/File:Fixture_On_Car_Example.jpg|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
=== Creating the Sub-Meshes ===&lt;br /&gt;
&lt;br /&gt;
==== Creating a UV Mesh ====&lt;br /&gt;
The UV mesh defines the [[wikipedia:Texel_(graphics)|texels]] (texture pixles) of the car body that will be cut out by the fixture. Each vertex is used as a point of reference, and lines are drawn between them along the edges of the UV mesh to define the final cutout shape. If there are too few vertices, the cutout shape may become distorted, since the vertices are projected onto the car texture before being cut out (with the actual edges of the UV mesh not being used). This, combined with the round &amp;quot;pelt unwrap&amp;quot; nature of car bodies&#039; UV maps, can result in waviness between vertices in the cutout shape. This is more pronounced on larger fixtures, or fixtures that are stretched to several times their original size.&lt;br /&gt;
&lt;br /&gt;
A UV mesh should have vertices at regular intervals around the outside to determine the cutout shape of the fixture. Any vertices that aren&#039;t on an edge are irrelevant and will only make the fixture slower to render. Note that UV meshes can be made in [[wikipedia:Annulus_(mathematics)|annulus]] shapes with holes in the middle, like a doughnut.&lt;br /&gt;
&lt;br /&gt;
The UV mesh should be roughly halfway between the outside edge of the skinned mesh (which should share its edge with the inside edge of the conforming mesh) and the outside edge of the conforming mesh.&lt;br /&gt;
&lt;br /&gt;
See below for the example UV mesh in comparison to its respective conforming mesh.&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;360&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:UV Mesh Example.jpg|An example UV mesh.&lt;br /&gt;
File:UV Mesh - Conforming Comparison.png|Note that the edges of the UV mesh are completely encompassed by the conforming mesh. The skinned mesh for this fixture should line up with the interior edge of the conforming mesh.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;Note that the centre vertices may need to be offset slightly from their respective axes; see [[Fixture Mods#Additional Notes|Additional Notes]] for more information.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re having trouble with wavy cutouts on cars, segment your UV mesh into quads instead of a starburst pattern, as shown here.&lt;br /&gt;
[[File:Testingses2.jpg|none|thumb|Left: A &#039;starburst&#039; UV mesh with an unwanted wavy cutout. Right: The same fixture, but with a different UV mesh flow and no cutout problems.|480x480px|alt=]]&lt;br /&gt;
&lt;br /&gt;
==== Creating a Conforming Mesh ====&lt;br /&gt;
A conforming mesh is a single basic polygonal mesh that conforms to the shape of the car body.&lt;br /&gt;
&lt;br /&gt;
The conforming mesh should have enough polygons at regular intervals so that it doesn&#039;t appear blocky or clip through the car body.  The more polygons you add to the conforming mesh, the longer it will take to calculate its final morph position, but this does not impact performance when it is dragged around.&lt;br /&gt;
&lt;br /&gt;
For this example fixture, we&#039;ll be using a conforming mesh for two purposes:&lt;br /&gt;
&lt;br /&gt;
*Connecting the skinned mesh to the car body.&lt;br /&gt;
*Covering the cutout hole created by the UV mesh.&lt;br /&gt;
&lt;br /&gt;
However, a conforming mesh can be used without a skinned mesh, such as:&lt;br /&gt;
*for trim pieces, moulding, or badges.&lt;br /&gt;
*for vents and grilles, when used with a UV mesh.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll start by using the UV mesh as our reference point. Our conforming mesh needs to cover the hole created here, so we&#039;ll make a ring of faces to surround the UV mesh with enough width to not allow any visible gaps between the cutout and the conforming mesh. We&#039;ll extend this edge out along the -Y axis (forward from the car body) by a millimetre or two to prevent faces from clipping through the car body, and we&#039;ll extrude a ring of faces around the outside of it to connect the mesh to the car body like so:[[File:Conforming Mesh Example 01.png|alt=Conforming Mesh|none|thumb|360x360px|A conforming mesh covering the outside edges of a UV mesh, extruded out in to the -Y axis slightly to avoid clipping through the car body, and with a ring of faces around the outside to avoid it looking like it&#039;s floating.|link=https://automation.gamepedia.com/File:Conforming_Mesh_Example_01.png]]Because this fixture is going to have a skinned mesh, we&#039;ll need to take that into consideration too. A skinned mesh will have any vertices that are farther than 1.5 mm in the -Y axis conform to the car in the same way as a conforming mesh, so we&#039;ll need to match this mesh structure such that the two meshes connect seamlessly.&lt;br /&gt;
&lt;br /&gt;
Here is the conforming mesh, with the skinned mesh and UV mesh:[[File:Conforming Mesh and Skinned Mesh Example.jpg|alt=Note that the inner most edge of the Conforming Mesh lines up perfectly with the outer most edge of the Skinned Mesh.|none|thumb|360x360px|Note that the innermost edge of the conforming mesh lines up perfectly with the outermost edge of the skinned mesh.|link=https://automation.gamepedia.com/File:Conforming_Mesh_and_Skinned_Mesh_Example.jpg]]This headlight fixture will also have a glass cover over it, so we&#039;ll add that in now. For this example, I&#039;ve added a small step to the inside of the conforming mesh to add a little bit of detail. The glass cover will then be placed on top. You&#039;ll also notice that the outside edge of this headlight has been extruded deep behind the surface; this is so it can be placed on top of other headlights or grilles and not appear to float.[[File:Conforming Mesh Example 02.jpg|alt=Left: Face View of the Conforming Mesh . Right: Wireframe View|none|thumb|Left: Face view of the conforming mesh. Right: Wireframe view.|link=https://automation.gamepedia.com/File:Conforming_Mesh_Example_02.jpg|360x360px]]&lt;br /&gt;
&lt;br /&gt;
===== Unwrapping the Mesh =====&lt;br /&gt;
The next step is to unwrap the mesh. We&#039;ll be using 3ds Max&#039;s default UVW Map modifier, setting it to &#039;box&#039; projection (cube projection in Blender), and setting the length, width, and height dimensions all to 2. This value is important if your fixture mod intends to use our default materials, because said materials assume that the UVs of the fixture conform to this setting.&lt;br /&gt;
&lt;br /&gt;
Basically, what this is doing is UV mapping the mesh so that the 0-1 areas of the UV map are 2cm².[[File:Conforming Mesh Example 03.jpg|alt=The finished Conforming Mesh with an UVW Map modifier set to a box 2,2,2 projection.|none|thumb|The finished conforming mesh with a UVW Map modifier set to a 2, 2, 2 box projection.|link=https://automation.gamepedia.com/File:Conforming_Mesh_Example_03.jpg|360x360px]]We&#039;ll go over the import process and material setup after we&#039;ve created all of the meshes.&lt;br /&gt;
&lt;br /&gt;
==== Creating a Skinned Mesh ====&lt;br /&gt;
A skinned mesh is the most complicated mesh in a fixture. It follows the same rules as the conforming Mesh in terms of overall mesh structure and UV mapping, but the manner in which it conforms to the car is more nuanced.&lt;br /&gt;
&lt;br /&gt;
The vertices of a skinned Mesh will conform to the car in the same manner as the conforming mesh if those vertices are within 1.5 mm of the Y axis. This is useful for having these parts of the mesh connect to a conforming mesh, as they will conform the same in that area.[[File:Skinned Mesh Example 01.jpg|alt=Note that only the vertices on the lower most edge of this mesh will conform as if they were part of a Conforming Mesh, as they are within 0.15cm of the Y-axis. Also note that these vertices will maintain this offset from the Y-axis even after they have conformed to the car. Thus the Conforming Mesh will need to extrude out at least as far, to cover up these vertices.|none|thumb|Note that only the vertices on the lowermost edge of this mesh will conform as if they were part of a conforming mesh, as the rest are farther than 1.5 mm from the body surface. Also note that these vertices will maintain this offset from the Y axis even after they have conformed to the car; thus, the conforming mesh will need to extend at least as far to connect to these vertices.|link=https://automation.gamepedia.com/File:Skinned_Mesh_Example_01.jpg|480x480px]]The rest of the mesh will conform relative to their skinned bones and weights.  For this example, I&#039;ve created a Skinned Mesh with 4 bones, and weighted them like so:&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;360&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
File:Skinned Mesh Example 02.jpg|Each bone is weighted to the parts of the skinned mesh that should retain their proportions, with the intermediary vertices weighted smoothly between bones.&lt;br /&gt;
File:Animated2.gif|The bones in motion.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;The bones are free-floating and are parented only to the root bone. In 3ds Max, usually use Dummy Actors for my bones, but you can use a box mesh or whatever works.&lt;br /&gt;
&lt;br /&gt;
Take note that the vertices that conform to the mesh do so in the same manner as the conforming mesh, but are still weighted to their respective bones. This is because Automation&#039;s fixture system uses the distance that these vertices were morphed to determine how far back to conform each bone. If these vertices were weighted to the root bone instead, the fixture would not know how far to morph the skinned sections of the mesh.&lt;br /&gt;
&lt;br /&gt;
Unreal Engine 4 also requires a bone hierarchy, so I&#039;ve made a root bone and parented all of the other bones to it.  The root bone should not be weighted to any vertices here, though with other fixtures, weighting vertices to the root bone makes them conform even if they&#039;re outside of the 1.5 mm threshold. Whatever you do, though, &#039;&#039;&#039;&#039;&#039;do not&#039;&#039;&#039;&#039;&#039; weight a vertex to the root bone and another bone at the same time, as the vertex in question will snap to the fixture&#039;s origin point&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;360&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:Skinned Mesh Example 03.jpg|From a front view, you can see that the bones are centred on their respective elements.&lt;br /&gt;
File:Skinned Mesh Example 04.jpg|Top view.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;Take a look at the image below of the skinned mesh on the car (there&#039;s also a conforming mesh there around the edge, but we&#039;ll ignore that for now). The outer ring of vertices is conforming to the car as if it was part of a conforming mesh, and the rest of the mesh is conforming as per their bone weights:&lt;br /&gt;
&lt;br /&gt;
[[File:FixtureOnCar01.png|link=https://automation.gamepedia.com/File:FixtureOnCar01.png|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
===== Unwrapping the Mesh =====&lt;br /&gt;
Assign the same box map (with a scale of 2, 2, 2) as you did with the conforming mesh.&lt;br /&gt;
&lt;br /&gt;
==== Creating an Additional Mesh ====&lt;br /&gt;
An &#039;&#039;Additional Mesh&#039;&#039; is a simple mesh with no skin or morphs that does not deform in any way.  The Additional Mesh &#039;&#039;does&#039;&#039; rotate around the fixture position, and will maintain its relative position from its pivot point.&lt;br /&gt;
&lt;br /&gt;
Take this exhaust fixture as an example. Note that the entirety of the exhaust is offset from the pivot point—this is so that it can hang under the car, since the fixture itself must have its pivot point &#039;&#039;on&#039;&#039; the car.&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;360&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:Additional Mesh Example 01.jpg|3D view.&lt;br /&gt;
File:Additional Mesh Example 02.jpg|Front view.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Additional Considerations ===&lt;br /&gt;
&lt;br /&gt;
==== Exhausts require a special socket ====&lt;br /&gt;
When making an exhaust fixture, a socket should be added to the mesh with the name &amp;lt;code&amp;gt;ExhaustConnect&amp;lt;/code&amp;gt; in the location where the exhaust fixture would connect to the rest of the exhaust piping. the socket should have the Y-axis follow the direction the piping would take. This generally means the Y-axis of the socket should go into the exhaust fixture:&lt;br /&gt;
&lt;br /&gt;
[[File:ExhaustConnectSocket.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
==== Unwrapping reflector lights ====&lt;br /&gt;
If your fixture is a light that contains a reflector surface (such as an incandescent bulb), there are some special considerations. &lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at this fixture as an example:&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot_2021-01-18_131739.png|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
Several things are of note with regards to light components.&lt;br /&gt;
&lt;br /&gt;
The reflector shader material looks at the UVs of the mesh to determine how to render it.&lt;br /&gt;
&lt;br /&gt;
* The bulbs themselves should be unwrapped as a single point with zero scale exactly at UV coordinate &amp;lt;code&amp;gt;0.5,0.5&amp;lt;/code&amp;gt; (the UV is scaled to a single point in the very center). &lt;br /&gt;
**The reflector shader is a single material, so to render the bulb slightly transparent and with a colour to it, the shader renders all faces unwrapped at &amp;lt;code&amp;gt;0.5,0.5&amp;lt;/code&amp;gt; as a bulb. Because the shader has such a tight tolerance for the UV coordinates, this doesn&#039;t affect other overlapping surfaces within the UV map.&lt;br /&gt;
&amp;lt;gallery heights=&amp;quot;120&amp;quot;&amp;gt;&lt;br /&gt;
File:Wiki Fixturemods Lights ReflectorUVs 01.jpg&lt;br /&gt;
File:Wiki Fixturemods Lights ReflectorUVs 01B.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
* The main reflector surface should be unwrapped such that each quad face fills the entirety of the &amp;lt;code&amp;gt;0-1&amp;lt;/code&amp;gt; UV coordinate space (&amp;lt;code&amp;gt;Reset UV projection&amp;lt;/code&amp;gt; in Blender).&lt;br /&gt;
**The reflector shader has a reflector dome texture which it uses, so any surface you wish to have this dome texture on it should be unwrapped as such.&lt;br /&gt;
&amp;lt;gallery heights=&amp;quot;120&amp;quot;&amp;gt;&lt;br /&gt;
File:Wiki Fixturemods Lights ReflectorUVs 04.jpg&lt;br /&gt;
File:Wiki Fixturemods Lights ReflectorUVs 04B.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
* Any other part of the reflector that you want to have vertical or horizontal lines on should be unwrapped as a single point with zero scale exactly at UV coordinate &amp;lt;code&amp;gt;0,1&amp;lt;/code&amp;gt; (the UV is scaled to a single point in the bottom left corner).&lt;br /&gt;
**The shader will dynamically render a corrugated effect on any UV at the bottom left corner.&lt;br /&gt;
&amp;lt;gallery heights=&amp;quot;120&amp;quot;&amp;gt;&lt;br /&gt;
File:Wiki Fixturemods Lights ReflectorUVs 02.jpg&lt;br /&gt;
File:Wiki Fixturemods Lights ReflectorUVs 02B.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
* Parts of the reflector that should be perfectly flat should be unwrapped as a single point with zero scale exactly at UV coordinate &amp;lt;code&amp;gt;0,0&amp;lt;/code&amp;gt; (the UV is scaled to a single point in the top left corner).&lt;br /&gt;
&amp;lt;gallery heights=&amp;quot;120&amp;quot;&amp;gt;&lt;br /&gt;
File:Wiki Fixturemods Lights ReflectorUVs 03.jpg&lt;br /&gt;
File:Wiki Fixturemods Lights ReflectorUVs 03B.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Applying materials to a light component ====&lt;br /&gt;
The bulb and reflector for each light should be assigned to the same material slot to save on draw calls. Each separate light, however, should be a different material slot for freedom of choice in terms of light configurations.&lt;br /&gt;
&lt;br /&gt;
==== Unwrapping radial glass ====&lt;br /&gt;
For light glass with a radial pattern, unwrap the glass so that the radial pattern fills the whole UV space as a single texture.&lt;br /&gt;
&lt;br /&gt;
== Fixture setup within Unreal Engine 4 ==&lt;br /&gt;
This step assumes that the correct version of Unreal Engine is installed and configured correctly. See [[Modding]] for more information on the correct version of Unreal Engine to use and how to view mod content folders. Also see [https://docs.unrealengine.com/latest/INT/Engine/Content/FBX/StaticMeshes/#importmesh the official Unreal Engine documentation on importing FBX files] for more information.&lt;br /&gt;
&lt;br /&gt;
=== Creating your Fixture Mod Plugin ===&lt;br /&gt;
Using the correct version of Unreal Engine, with our modding tool project opened and plugins loaded, select &#039;Create Mod&#039; from the top menu bar.&lt;br /&gt;
[[File:UE4ModCreation 02.gif|none|thumb|1) Select the blank project. 2) Give your mod a unique name. 3) Fill out your name and a description of this mod. 4) Create the mod.|360x360px|alt=]]&lt;br /&gt;
&lt;br /&gt;
=== Importing Files ===&lt;br /&gt;
There are several ways to import your sub-meshes to this mod folder.  The easiest is to simply navigate to the folder you want to import your files in the Content Browser, then click the &#039;Import&#039; button to import files to that folder, select the meshes you want to import, and click &#039;Open&#039;.&lt;br /&gt;
[[index.php?title=File:Import_files_button.gif|none|thumb|360x360px]]&lt;br /&gt;
&lt;br /&gt;
UV meshes, conforming meshes, and additional meshes should be imported as static meshes (&#039;Skeletal Mesh&#039; is un-ticked in the import dialogue), while skinned meshes should be imported as skeletal meshes (&#039;Skeletal Mesh&#039; is ticked in the import dialogue).&lt;br /&gt;
Note that &#039;Skeletal Meshes&#039; will import with additional &#039;Skeleton&#039; and &#039;Physics Asset&#039; files. &#039;&#039;These are important&#039;&#039;. You don&#039;t need to do anything with them, but don&#039;t delete them.[[File:Import Dialogue Example 01.jpg|alt=An example import dialogue for a Skinned Mesh. This should be un-ticked for other sub-mesh types|none|thumb|An example import dialogue for a skinned mesh. This should be unticked for other sub-mesh types.|link=https://automation.gamepedia.com/File:Import_Dialogue_Example_01.jpg|383x383px]]Note that &#039;Import Materials&#039; is also unticked, as we do not want to import any materials from the modelling software.&lt;br /&gt;
&lt;br /&gt;
The final set of imported files in Unreal Engine should look like this:[[File:Example Imported.jpg|alt=Note that this example does not include an Additional Mesh.|none|thumb|Note that this example does not include an additional mesh.|link=https://automation.gamepedia.com/File:Example_Imported.jpg|392x392px]]Once your files are imported, it&#039;s important to set &#039;CPU Access&#039; to true for &#039;&#039;all static meshes&#039;&#039;.  You can do this by selecting every static mesh, right-clicking on it and selecting &#039;Set Meshes to Allow CPU Access&#039;.&lt;br /&gt;
[[File:Allow_CPU_access.jpg|link=https://automation.gamepedia.com/File:Allow_CPU_access.jpg|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
=== Default Materials and Material Slots ===&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note:&#039;&#039;&#039; This step assumes a basic understanding of UE4&#039;s [https://docs.unrealengine.com/latest/INT/Engine/Content/Types/StaticMeshes/Editor/ Static Mesh] editor and [https://docs.unrealengine.com/latest/INT/Engine/Animation/Persona/Modes/Mesh/ Skeletal Mesh] editor. Alternatively, material slots can be named appropriately within a 3D modelling program of choice.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The fixture material system in Automation relies on the name of the material slots within the meshes to define what materials can be applied to the fixture. Therefore, assigning the correct materials to the meshes is only important for the initial selection and loading of that fixture. In this manner, it is possible to have custom materials applied to your fixture with it still being compatible with Automation&#039;s fixture material menu.&lt;br /&gt;
&lt;br /&gt;
The fixture material menu in Automation relies on the names of the material slots on the sub-meshes to decide what category of materials the player can select from, with said names in the format &amp;lt;code&amp;gt;category_#&amp;lt;/code&amp;gt; (case-sensitive, with &#039;#&#039; being a single- or multiple-digit number of choice).&lt;br /&gt;
&lt;br /&gt;
The available categories for fixture materials are as follows:&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;240&amp;quot; heights=&amp;quot;120&amp;quot; perrow=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
File:Panel -.png|alt=panel|&amp;lt;code&amp;gt;panel&amp;lt;/code&amp;gt; (car body colours and some other opaque materials)&lt;br /&gt;
File:Opaqueglass -.png|alt=opaqueglass|&amp;lt;code&amp;gt;opaqueglass&amp;lt;/code&amp;gt; (opaque light glass; ideal for non-bulb lights)&lt;br /&gt;
File:Grill -.png|alt=grill|&amp;lt;code&amp;gt;grill&amp;lt;/code&amp;gt; (for transparent and opaque grill patterns in addition to &amp;lt;code&amp;gt;panel&amp;lt;/code&amp;gt; materials)&lt;br /&gt;
File:Glass -.png|alt=glass|&amp;lt;code&amp;gt;glass&amp;lt;/code&amp;gt; (transparent and translucent light glass in addition to &amp;lt;code&amp;gt;opaqueglass&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;panel&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;grill&amp;lt;/code&amp;gt; materials; this category provides the most freedom in terms of material choice)&lt;br /&gt;
File:Roundglass -.png|alt=roundglass|&amp;lt;code&amp;gt;roundglass&amp;lt;/code&amp;gt; (transparent light glass with radial detailing; this material applies to a mesh in the traditional UV sense, so use a planar map to unwrap this part of the mesh if you intend to use this)&lt;br /&gt;
File:Screenshot 2021-01-18 151206.png|alt=bulb|&amp;lt;code&amp;gt;bulb&amp;lt;/code&amp;gt; (for reflector lights; requires special UV unwrapping)&lt;br /&gt;
File:Numberplatenarrow -.png|alt=numberplatenarrow|&amp;lt;code&amp;gt;numberplatenarrow&amp;lt;/code&amp;gt; (North American license plate format)&lt;br /&gt;
File:Numberplatewide -.png|alt=numberplatewide|&amp;lt;code&amp;gt;numberplatewide&amp;lt;/code&amp;gt; (European license plate format)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;If you only have a single slot for a fixture material category, you still need a number for it. This number scales infinitely, meaning a fixture can have many separate slots of a single category assigned to it. A fixture&#039;s sub-meshes cannot share the same name on its material slots. If a fixture contains meshes with duplicate slot names, they will appear as a single material slot in-game (this can be used to merge slots on, for example, a conforming and additional mesh).&lt;br /&gt;
&lt;br /&gt;
With light fixtures, the names of the slots for the corresponding pair of glass and reflector material slot names should share the same number. For example, a fixture with two lights would have &amp;lt;code&amp;gt;glass_01&amp;lt;/code&amp;gt; (or just &amp;lt;code&amp;gt;glass_1&amp;lt;/code&amp;gt;) and &amp;lt;code&amp;gt;bulb_01&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;glass_02&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;bulb_02&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Below is a headlight&#039;s conforming mesh with its default materials set and the names of its material slots set to their respective types. The workflow for additional meshes should be identical.&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;360&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
File:Headlight Conforming Mesh Materials Setup 01.jpg&lt;br /&gt;
File:Material 02.jpg|Close-up view of the materials&lt;br /&gt;
&amp;lt;/gallery&amp;gt;The Skeletal Mesh editor looks a little different, but the slot naming conventions are the same:&lt;br /&gt;
&lt;br /&gt;
[[File:Skeletal_Mesh_Slot_example_01.jpg|link=https://automation.gamepedia.com/File:Skeletal_Mesh_Slot_example_01.jpg|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
==== Assigning Default Materials ====&lt;br /&gt;
While the slot names define what materials the player can choose from in-game, it doesn&#039;t define what material first gets loaded when the fixture is spawned in.&lt;br /&gt;
&lt;br /&gt;
When the fixture is first placed on the car, it loads the material that is set in that fixture&#039;s sub-mesh default materials.  For the sub-mesh examples above, you can see that not only have the slots been named appropriately, they also have materials assigned to them. Therefore, for all your fixture sub-meshes, default materials should be applied. (They&#039;re not strictly necessary, but your fixtures deserve better than the default grey checkered material.)&lt;br /&gt;
&lt;br /&gt;
To find where all the materials available in-game are, open up the &amp;lt;code&amp;gt;CarMaterialUtils&amp;lt;/code&amp;gt; blueprint (located in &amp;lt;code&amp;gt;Content&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;Utility&amp;lt;/code&amp;gt;), and open the &#039;Get Materials from Slot&#039; function.  There, you can view the list of each material that gets assigned to each slot, find them in the content folder, and assign them to your mesh as the default material. Note, though, that these steps are only to find where the default materials are. We do not use the Utils blueprint itself to assign materials to fixtures.&lt;br /&gt;
&lt;br /&gt;
To do this, open &amp;lt;code&amp;gt;CarMaterialUtils&amp;lt;/code&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
[[File:Carmaterialutils01.png|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
...then open &#039;Get Fixture Materials from Slot&#039;, located in &amp;lt;code&amp;gt;CarMaterialUtils&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;Car Painting&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;GetFixtureMaterialsFromSlot&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Carmaterialutils02.png|frameless|424x424px]]&lt;br /&gt;
&lt;br /&gt;
From there, select the corresponding materials array for the material category you want to apply to your sub-mesh from the Local Variables tab, and in the details panel you&#039;ll see an array of the materials used for that slot type. By expanding that, you can see the materials, and by selecting the small magnifying glass icon, view that material in the Content Browser, and from there apply it to your sub-mesh.&lt;br /&gt;
=== Creating and Setting Up the CPP File ===&lt;br /&gt;
Right-click in the content browser, and from the &#039;Camso&#039; sub-menu, select the &#039;Fixture Preview Data&#039; option. You should now have a fixture CPP file in your content browser.[[File:UE4ModCreation 25.gif|none|thumb]]&lt;br /&gt;
Open the CPP file. You should get something like this:&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_26.jpg|frameless|478x478px]]&lt;br /&gt;
&lt;br /&gt;
Fill out the &#039;Meshes&#039; section with the meshes you&#039;ve made, leave the &#039;Text&#039; data empty, generate a GUID and Family GUID (or copy the family GUID if you&#039;re making a variant), and set the &#039;Fixture&#039; settings to the relevant info as laid out near the top of this page. Finally, in the &#039;Path&#039; section, make sure there is one item in the array, and fill it with &amp;lt;code&amp;gt;A_Fixture&amp;lt;/code&amp;gt;. &#039;&#039;&#039;&#039;&#039;This is important; your fixture will not work if this is not filled correctly.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you&#039;re done, you should have something that looks like this:[[File:FixtureExampleSettings.png|alt=Fixture Blueprint|none|thumb|A fixture blueprint with only the relevant settings shown.|link=https://automation.gamepedia.com/File:FixtureExampleSettings.png|333x333px]]Be sure to save your files.&lt;br /&gt;
&lt;br /&gt;
===Creating the Thumbnail===&lt;br /&gt;
You should already be here by default when you load up the Automation project. Check the top tab in Unreal and make sure it says &#039;ThumbnailGeneratorLevel_Fixture&#039;. If you are not in the thumbnail generator level, open it from &amp;lt;code&amp;gt;ModTools/ThumbnailGeneratorLevel_Fixture&amp;lt;/code&amp;gt;.&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;360&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:UE4ModCreation 27.gif&lt;br /&gt;
File:UE4ModCreation 28.gif&lt;br /&gt;
&amp;lt;/gallery&amp;gt;From the top menu, open the drop-down next to the &#039;Play&#039; button and select &#039;Simulate&#039;. You should now be &#039;simulating&#039; the level.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_15.gif|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
===== Generate Fixture Thumbnails =====&lt;br /&gt;
Select the Fixture Thumbnail Generator from the World Outliner, and add your fixture blueprint to the &#039;Fixture Previews to Generate&#039; array (by first clicking the &#039;plus&#039; icon, then putting the fixtures you have created into the list). Repeat this process for every fixture you have created.  It does not matter if these fixtures are of the same family or not. Then, select &#039;Export Preview&#039; to generate the Thumbnail file.[[File:Fixture thumb gen 02.gif|none|thumb|alt=Note that I am connected to source control in this .gif, so I have red crosses in the top right corner of the items in the Content Browser. If you do not see this, do not worry. Also ignore that im putting blueprints in to the &#039;fixtures to generate&#039; array, this is depreciated. put your .cpp files in the &#039;previews&#039; one.|Note that I am connected to source control in this .gif, which explains the red checkmarks in the top right corner of the items in the Content Browser. If you do not see this, do not worry.|link=https://automation.gamepedia.com/File:Fixture_thumb_gen_02.gif|389x389px]]&lt;br /&gt;
&lt;br /&gt;
Because these files are created by the modding tools, they need to be manually saved (even if no asterisks are present).&lt;br /&gt;
&lt;br /&gt;
Your fixture mod is now ready to be shared!&lt;br /&gt;
&lt;br /&gt;
== Cooking and sharing your mod ==&lt;br /&gt;
To use the mod you have just created, you need to &#039;share&#039; it.  See [[Modding#Cooking|the main Modding page]] on how to share your mod.&lt;br /&gt;
&lt;br /&gt;
== Additional notes ==&lt;br /&gt;
*Fixtures should not have any vertices along the centre axes to avoid any miscalculation by the fixture gizmo. If the game casts a ray through the centre line of the car, it may miss the two halves of the car and return a false positive of the fixture being out of bounds. Offsetting your vertices slightly will avoid this. Additional meshes are the sole exception to this rule, as they do not conform in any way.&lt;br /&gt;
*If you&#039;re testing out a fixture and the meshes it uses haven&#039;t been finalized, you can use UE4&#039;s &#039;Reimport&#039; function to replace the existing mesh with a newer version of it. All the materials already assigned to the mesh will be preserved, as will its reference in the blueprint, saving you the trouble of manually reimporting a mesh and having to reassign materials and put it into the blueprint again. This works for [[Car Body Mods|car body meshes]] as well.&lt;br /&gt;
*Is CPU access still turned on for all static meshes? If your mod causes a crash or isn&#039;t visible in-game, this might be unticked. It does that sometimes; re-enable it and try again.&lt;br /&gt;
*If the first fixture in a thumbnail generation array ends up with an unusually sparkly thumbnail, this can be fixed by giving it an additional duplicate array entry (which forces UE4 to render the thumbnail again normally).&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[Badge Fixture Mods]]&lt;br /&gt;
*[[Mods and the Beam.NG Exporter]]&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=File:ExhaustConnectSocket.jpg&amp;diff=4997</id>
		<title>File:ExhaustConnectSocket.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=File:ExhaustConnectSocket.jpg&amp;diff=4997"/>
		<updated>2023-11-16T04:12:46Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Exhaust Connect Socket&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=Prop_Mods&amp;diff=4960</id>
		<title>Prop Mods</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=Prop_Mods&amp;diff=4960"/>
		<updated>2023-03-08T01:37:51Z</updated>

		<summary type="html">&lt;p&gt;Hannah: /* Creating a Prop Blueprint */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Beginning with LCv4.2, Automation supports player-addable and player-customizable props to be placed and edited in the photoscene.&lt;br /&gt;
&lt;br /&gt;
A Prop can be placed by the player into the photoscene, and moved/scaled/rotated freely, and optionally may have its&#039; own set of player-customizable UI options.&lt;br /&gt;
&lt;br /&gt;
A Prop can be anything, from a traffic cone, to a mannequin, to a post-process effect that changes the way the camera sees the scene.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
A prop consists of a collection of files:&lt;br /&gt;
&lt;br /&gt;
* A Prop blueprint&lt;br /&gt;
* A Prop Preview file&lt;br /&gt;
* A Prop Group file&lt;br /&gt;
* A Prop Preview thumbnail&lt;br /&gt;
* A Prop Group thumbnail&lt;br /&gt;
* (Optionally) A Prop Widget blueprint&lt;br /&gt;
&lt;br /&gt;
The Prop Blueprint is the actor which will be placed in the photoscene, and can be moved around and edited by the player.&lt;br /&gt;
&lt;br /&gt;
The Prop Blueprint is spawned into the scene when the player selects a Prop Preview file.&lt;br /&gt;
&lt;br /&gt;
The Prop Preview file contains a link to the Prop Blueprint, which it will spawn when the player selects it. The Prop Preview file also contains a link to a thumbnail image to display in the UI, as well as a link to the Prop Group under which this prop should be displayed. &lt;br /&gt;
&lt;br /&gt;
The Prop Preview file may also optionally contain a reference to a prop widget blueprint, which will be added to the photoscene UI under the &amp;lt;code&amp;gt;Selected Prop Settings&amp;lt;/code&amp;gt; menu.&lt;br /&gt;
&lt;br /&gt;
The Prop Group also contains a thumbnail, which will be displayed when the player enters the prop group selection menu. when the player selects a Prop Group, all Prop Preview files that reference that group will be displayed to the player.&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
# Create your prop, with all its optional functionality, inside a Blueprint whose parent class is &amp;lt;code&amp;gt;Photoscene Prop Parent Class&amp;lt;/code&amp;gt;.&lt;br /&gt;
# (Optionally) Create a prop widget, with all its optional functionality, whose parent class is &amp;lt;code&amp;gt;Photoscene Prop Parent Widget&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Create a thumbnail texture for your prop.&lt;br /&gt;
# Create a &amp;lt;code&amp;gt;PhotoScenePropPreview&amp;lt;/code&amp;gt; file, and fill it out with your prop blueprint, thumbnail, and optional widget.&lt;br /&gt;
# Fill out the remaining settings inside the prop preview file, including a Prop Group (if this prop is part of an existing group).&lt;br /&gt;
# If this prop is not part of an existing prop group, also create a prop group preview file, prop group thumbnail, and assign the newly created prop group to your prop preview file.&lt;br /&gt;
&lt;br /&gt;
== Creating a Prop Blueprint ==&lt;br /&gt;
A Prop Blueprint contains all of the visuals and functionality of your prop. It can be as simple or as complex as you like.&lt;br /&gt;
&lt;br /&gt;
The Prop Blueprint is a child of &amp;lt;code&amp;gt;Photoscene_Prop_Parent_Class&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
To Create your Prop Blueprint:&lt;br /&gt;
&lt;br /&gt;
# right-click in the Content Browser, and create a &amp;lt;code&amp;gt;Blueprint&amp;lt;/code&amp;gt;.&lt;br /&gt;
# From the window that pops up, drop down the &#039;all classes&#039; menu, search for, and select, &amp;lt;code&amp;gt;Photoscene_Prop_Parent_Class&amp;lt;/code&amp;gt; as the parent class.&lt;br /&gt;
&lt;br /&gt;
A prop blueprint can contain whatever you like, whether it be just a simple static mesh, or something more complex like an animated object, or something with physics simulation.&lt;br /&gt;
&lt;br /&gt;
=== Prop Blueprint Functionality ===&lt;br /&gt;
There are a few helper functions in the Prop Blueprint that you can override and use:&lt;br /&gt;
[[File:Wiki Props PropBlueprintFunctions01.png|none|thumb|336x336px|Note that most of the ones with &#039;Actor&#039; listed on the right are irrelevant. we only need to focus on the ones with &#039;Photoscene Prop Parent Class&#039; as the parent.]]&lt;br /&gt;
&lt;br /&gt;
* Init:&lt;br /&gt;
** This function is called when the prop is first spawned in the scene.&lt;br /&gt;
** If you want to initialize or set up anything when the prop is created, do so here.&lt;br /&gt;
* On Spawned:&lt;br /&gt;
** This function calls Init.&lt;br /&gt;
** This function is for internal use only. &lt;br /&gt;
** Do not call this function yourself.&lt;br /&gt;
* Post-Screenshot:&lt;br /&gt;
** This event is called just after a photo is taken in the photoscene.&lt;br /&gt;
** If you have anything set to turn on or off during a photo, this event happens right after the photo is taken.&lt;br /&gt;
* Pre-Destruct:&lt;br /&gt;
** This event is called just before the prop is deleted.&lt;br /&gt;
** If your prop affects things outside of the prop actor, such as putting a post process effect onto the camera, or changing some part of the scene, please use this event to disable/undo all those effects before the prop is destroyed.&lt;br /&gt;
* Pre-Screenshot:&lt;br /&gt;
** This event is called just before a photo is taken in the photoscene.&lt;br /&gt;
** If you have any effect that you do not wish to be included in photos, use this event to turn them off, or vice versa.&lt;br /&gt;
* Snap To Ground:&lt;br /&gt;
** This is an internal function and should not be overridden.&lt;br /&gt;
* Trace For Ground:&lt;br /&gt;
** This is an internal function and should not be overridden.&lt;br /&gt;
&lt;br /&gt;
== Creating a Prop Widget Blueprint ==&lt;br /&gt;
Like photoscenes, props support custom UI functionality.&lt;br /&gt;
&lt;br /&gt;
You can set up buttons, sliders, drop-down menus, and whatever else your heart desires, to do whatever you want to your prop, or to the world around it.&lt;br /&gt;
&lt;br /&gt;
Prop widgets are derived from the parent class &amp;lt;code&amp;gt;Photoscene_Prop_Parent_Widget&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Using Prop Widget Functions ===&lt;br /&gt;
Just like the Prop Blueprint, the prop widget has functions. Some of these functions are mandatory for full functionality:&lt;br /&gt;
[[File:OverridePropWidgetFunctions.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
* Get Current Photoscene Prop Parameters&lt;br /&gt;
** This function gets called when the user saves a photoscene preset. Because presets save props, they must by extension save a prop&#039;s settings. This function lets the prop tell the photoscene preset what its settings are.&lt;br /&gt;
** It consists of a map, which is an array made of a key-value pair. Drag out from the function&#039;s Return pin, and place down a &amp;lt;code&amp;gt;Make Map&amp;lt;/code&amp;gt; node to save a setting. &lt;br /&gt;
** Each setting is saved as a key-value pair. To save multiple settings, add pins to the &amp;lt;code&amp;gt;Make Map&amp;lt;/code&amp;gt; node.&lt;br /&gt;
** The key is a name for the setting, it can be anything you like, so long as it is unique within the prop. A prop cannot contain keys with the same name.&lt;br /&gt;
** The Value of the map is a &amp;lt;code&amp;gt;Photoscene_Parameter_Struct&amp;lt;/code&amp;gt;, which you can read about on the [[About Photoscene Blueprints]] page.&lt;br /&gt;
* Init&lt;br /&gt;
** This function is called when the prop widget is first spawned.&lt;br /&gt;
** Do all your initial setup in here.&lt;br /&gt;
* Load Photoscene Prop Parameters&lt;br /&gt;
** This function is called whenever a preset that contains this prop is loaded.&lt;br /&gt;
** When the preset loads the prop, it calls this function to load whatever prop settings were saved at the time.&lt;br /&gt;
** If you want your prop to work with presets, you must use this function in conjunction with the &amp;lt;code&amp;gt;Get Current Photoscene Prop Parameters&amp;lt;/code&amp;gt; function.&lt;br /&gt;
** To get a setting out of the &amp;lt;code&amp;gt;Parameters&amp;lt;/code&amp;gt; map, &amp;lt;code&amp;gt;Find&amp;lt;/code&amp;gt; the name you gave the key-value pair in &amp;lt;code&amp;gt;Get Current Photoscene Prop Parameters&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;If&amp;lt;/code&amp;gt; it is found, call the corresponding functions to apply that setting.&lt;br /&gt;
* Post-Screenshot&lt;br /&gt;
** This event is called just after a photo is taken in the photoscene.&lt;br /&gt;
** If you have anything set to turn on or off during a photo, this event happens right after the photo is taken.&lt;br /&gt;
* Pre-Destruct&lt;br /&gt;
** This event is called just before the prop is deleted.&lt;br /&gt;
** If your prop affects things outside of the prop actor, such as putting a post process effect onto the camera, or changing some part of the scene, please use this event to disable/undo all those effects before the prop is destroyed.&lt;br /&gt;
* Pre-Screenshot&lt;br /&gt;
** This event is called just before a photo is taken in the photoscene.&lt;br /&gt;
** If you have any effect that you do not wish to be included in photos, use this event to turn them off, or vice versa.&lt;br /&gt;
* RT Updated&lt;br /&gt;
** This function is called whenever the ray-tracing settings change. Because UE4&#039;s ray-tracing support is super janky, many things need to change based on what those ray-tracing settings are. This function allows you to change a prop&#039;s effects based on the ray-tracing settings.&lt;br /&gt;
* Set Prop Reference&lt;br /&gt;
** This function is called when the prop is first spawned. The prop spawning logic calls this function after creating the widget and the prop bp, and passes through a reference to the prop using the prop&#039;s parent class. &lt;br /&gt;
** You can save a reference to your prop BP using this function, by casting to your specific prop class and saving that as a variable in the widget.&lt;br /&gt;
&lt;br /&gt;
=== Creating Your Prop Widget ===&lt;br /&gt;
Please refer to the page [[About Photoscene Blueprints]].&lt;br /&gt;
&lt;br /&gt;
== Simple Prop Setup ==&lt;br /&gt;
The System for creating Photoscene Props has been updated for:&lt;br /&gt;
&lt;br /&gt;
* Static Meshes,&lt;br /&gt;
* Skeletal Meshes,&lt;br /&gt;
* ParticleFX,&lt;br /&gt;
* Post-Process materials,&lt;br /&gt;
* Decals.&lt;br /&gt;
&lt;br /&gt;
The purpose for this change is to streamline prop creation for simple props that don’t need unique functionality, i.e: basic objects. We’ve done this by adding more optional information in the PhotoScenePropPreview class (and a child of the prop parent class that can read that information) in order to determine prop behaviour and accessible variables.&lt;br /&gt;
&lt;br /&gt;
Inside the Photoscene Prop Preview file, there is a new Prop Struct. The Prop Struct is where you add the data you need for the prop to build itself in-game.&lt;br /&gt;
[[File:SimplePropExample PropStruct.png|thumb|641x641px|none]]&lt;br /&gt;
&lt;br /&gt;
== Using the Prop Struct ==&lt;br /&gt;
&lt;br /&gt;
* Fill out the details as usual, with the exception of the Prop Class. &lt;br /&gt;
* Leave the Prop Class blank (i.e: a value of ‘None’).&lt;br /&gt;
* Unless you know what you’re doing, overriding this will cause the Prop Struct to not function properly. &lt;br /&gt;
* Then tick the ‘Uses Prop Struct’ checkbox. &lt;br /&gt;
* Select your prop’s type from the prop type drop down, this will enable you to edit the necessary variables below. Different prop types have different applicable variables. We disable the irrelevant variables for you, to avoid confusion. &lt;br /&gt;
* Fill in the relevant asset references with your prop’s assets. Most of these are self-explanatory.&lt;br /&gt;
* Set the Optional Prop Widget Class to ‘PD_PropWidgetMaster_UW’. This will create a widget at runtime that allows the player to edit your prop’s parameters. &lt;br /&gt;
&lt;br /&gt;
=== How To Create Parameters For The PD_PropWidgetMaster_UW ===&lt;br /&gt;
The PD_PropWidgetMaster_UW currently supports the following parameters: Material Vector/Scalar parameters, and Particle System parameters.&lt;br /&gt;
&lt;br /&gt;
==== Using Material Parameters ====&lt;br /&gt;
To expose Material Parameters to the widget for the player, there is some preparation you must do in the Material itself:&lt;br /&gt;
&lt;br /&gt;
Ensure that the parameters you wish to expose include “editable_” in their names.&lt;br /&gt;
[[File:SimpleProp MatParam.png|thumb|296x296px|none]]&lt;br /&gt;
&lt;br /&gt;
Create a Material Instance from the Material.&lt;br /&gt;
[[File:SimpleProp Mat Inst.png|thumb|547x547px|none]]&lt;br /&gt;
&lt;br /&gt;
Apply it to the mesh, if you are using one.&lt;br /&gt;
[[File:SimpleProp Mat to Mesh.png|thumb|596x596px|none]]&lt;br /&gt;
&lt;br /&gt;
If making a Decal or Post Process, then put this Material Instance in the Prop Struct Material slot. &lt;br /&gt;
&lt;br /&gt;
Open the Material Instance and ensure the parameters have the check box ticked next to their names.&lt;br /&gt;
[[File:EditParamTick.png|thumb|512x512px|none]]&lt;br /&gt;
&lt;br /&gt;
Material Vector Parameters will show up in-game as a colour picker with 0-1 range.&lt;br /&gt;
&lt;br /&gt;
Material Scalar Parameters will show up in-game as a slider with 0-1 range.&lt;br /&gt;
&lt;br /&gt;
If you want your scalar parameters to apply values within a different range, add a lerp node after your editable_ScalarParameter, with the parameter set as the Alpha input of the lerp. You can then specify its’ new minimum and maximum values by changing the respective A and B input of the lerp.&lt;br /&gt;
&lt;br /&gt;
==== Using Particle Parameters ====&lt;br /&gt;
Exposing Particle Parameters to the widget does require some knowledge of how to edit particle emitters in-engine. The workflow is the same on the Prop Preview side, but differs slightly between Niagara, and Cascade, particle systems.  &lt;br /&gt;
&lt;br /&gt;
In the Prop Preview, below the Particle System variable, there is an array of Parameters you can add.&lt;br /&gt;
[[File:Simple Prop ParticleExampleParams.png|thumb|616x616px|none]]&lt;br /&gt;
&lt;br /&gt;
Ensure that the name and data type match the parameter you want to link to in the emitter itself.&lt;br /&gt;
[[File:Simple Prop ExpandedParticleParam.png|thumb|617x617px|none]]Currently, the following parameter types are supported: float. Bool, vector, and colour. &lt;br /&gt;
&lt;br /&gt;
In Cascade, when setting a parameter to be exposed for editing at runtime, ensure the Parameter Name within the Emitter Module matches the name in the Prop preview. &lt;br /&gt;
&lt;br /&gt;
Min input should be 0 and max input should be 1. The output values can be whatever you like.&lt;br /&gt;
[[File:Simple Prop Cascade Param.png|thumb|625x625px|none]]&lt;br /&gt;
&lt;br /&gt;
In Niagara, you will need to add User Parameters that match the Name and DataType of the corresponding parameters in the Prop Preview, and plug them into the emitter modules as necessary.&lt;br /&gt;
[[File:SimpleProp NiagaraParams.png|thumb|620x620px|none]]&lt;br /&gt;
&lt;br /&gt;
In Niagara, exposed variable names have the “User.” prefix, adding this to the Parameter Name within the Prop Preview is not necessary as its inclusion is handled for you.&lt;br /&gt;
[[File:SimpleProp NiagaraPreviewParams.png|thumb|618x618px|none]]&lt;br /&gt;
&lt;br /&gt;
We recommend keeping user parameters between 0-1, and then using them as an Alpha to lerp between preset min/max values. &lt;br /&gt;
[[File:SimpleProp NiagaraLerpExample.png|thumb|631x631px|none]]&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=Custom_Paint_Mods&amp;diff=4951</id>
		<title>Custom Paint Mods</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=Custom_Paint_Mods&amp;diff=4951"/>
		<updated>2023-03-07T05:23:56Z</updated>

		<summary type="html">&lt;p&gt;Hannah: /* Material Requirements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Beginning with LCv4.2, Automation supports the creation of custom paint materials which can be applied to cars, fixtures, and engine parts. These materials also support the Exporter, including exporting to BeamNG.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
A Custom Paint mod is a collection of files, of which a &amp;lt;code&amp;gt;Custom Paint&amp;lt;/code&amp;gt; file is the parent.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Custom Paint&amp;lt;/code&amp;gt; file contains the settings and applicable options for the Custom Paint, as well as a reference to the paint material.&lt;br /&gt;
&lt;br /&gt;
The custom paint material itself is a Material in UE4, which is set up in a specific way. Material variables can have an &amp;lt;code&amp;gt;editable_&amp;lt;/code&amp;gt; prefix in their name if you want the player to have access to it in the custom paint settings in-game. Variables and parameters also need to be input into the &amp;lt;code&amp;gt;export user data&amp;lt;/code&amp;gt;, contained within the material, for them to export correctly. Materials will not export correctly at all without this &amp;lt;code&amp;gt;export user data&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
#In UE4:&lt;br /&gt;
##Set up a mod.&lt;br /&gt;
##Create and fill out a &amp;lt;code&amp;gt;Custom Paint&amp;lt;/code&amp;gt; file.&lt;br /&gt;
##Create your Custom Paint material.&lt;br /&gt;
##Assign variables to the export user data.&lt;br /&gt;
#In the Automation Workshop Publishing Tool:&lt;br /&gt;
##Set up a workshop item.&lt;br /&gt;
##Share your mod.&lt;br /&gt;
&lt;br /&gt;
== Create your Custom Paint mod ==&lt;br /&gt;
&lt;br /&gt;
=== Create A New Mod ===&lt;br /&gt;
&lt;br /&gt;
After setting up the modding SDK from [[Modding|Here]], create a new blank mod:&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_02.gif|alt=|frameless]]&lt;br /&gt;
&lt;br /&gt;
===Create A Custom Paint File===&lt;br /&gt;
In your mod content folder, right-click and add a new &amp;lt;code&amp;gt;Custom Paint&amp;lt;/code&amp;gt; file. This is the file the game uses to load the paint into the UI.&lt;br /&gt;
&lt;br /&gt;
[[File:CreateCustomPaintFile1.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
Open the Custom Paint file. It has a few parameters:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Name&#039;&#039;&#039; - This will be the name of the paint as it will appear in-game.&lt;br /&gt;
*&#039;&#039;&#039;Material Instance&#039;&#039;&#039; - This is the actual paint itself. The material instance defines how the paint looks, what parameters are available, and how it looks when exported.&lt;br /&gt;
*&#039;&#039;&#039;GUID&#039;&#039;&#039; - This is an unique identifier for this custom paint. It is a random value. This is how the paint is stored and saved by the game.&lt;br /&gt;
*&#039;&#039;&#039;Family GUID&#039;&#039;&#039; - As above, this is an unique identifier. This one is currently un-used, but could in the future be used for storing what paints are part of the same family, if you decide to make several.&lt;br /&gt;
&lt;br /&gt;
===Create A Material ===&lt;br /&gt;
Right-click the content browser again, and create a new &amp;lt;code&amp;gt;Material.&amp;lt;/code&amp;gt; This is the actual shader: it defines how the paint looks.&lt;br /&gt;
&lt;br /&gt;
[[File:CreateCustomPaintMaterial.jpg|frameless|352x352px]]&lt;br /&gt;
&lt;br /&gt;
Open the material. UE4 uses standard PBR Metallic-Roughness workflows. What this means is you define a material by giving it: &lt;br /&gt;
&lt;br /&gt;
*a colour (0,0,0 - 1,1,1)&lt;br /&gt;
* telling it how rough it is (0 - 1, 0 being shiny)&lt;br /&gt;
*how metallic it is (0 - 1, 0 being plastic)&lt;br /&gt;
&lt;br /&gt;
as well as a few additional things that help optimise parts of the rendering process, such as:&lt;br /&gt;
&lt;br /&gt;
*a Normal map (this defines surface detail that would be too fine or complicated to be geometry)&lt;br /&gt;
*an Ambient Occlusion map (this helps darken and reduce reflections and specular highlighting on parts of the geometry that should be darker than usual, and which the lighting model cannot properly calculate)&lt;br /&gt;
*Opacity/Opacity Mask&lt;br /&gt;
*etc..&lt;br /&gt;
&lt;br /&gt;
==== Material Requirements ====&lt;br /&gt;
&lt;br /&gt;
===== Opacity =====&lt;br /&gt;
All Custom Paint materials must be set to &amp;lt;code&amp;gt;Masked&amp;lt;/code&amp;gt;, unless it is a transparent material.&lt;br /&gt;
&lt;br /&gt;
Two nodes should be a part of the Opacity or Opacity Mask input. If your material does not have any transparent or masked info, these two nodes are still required.&lt;br /&gt;
&lt;br /&gt;
[[File:SetMaterialToMasked.png|frameless]]&lt;br /&gt;
&lt;br /&gt;
If your material does have opacity information, simply add these two nodes at the end with a multiply:&lt;br /&gt;
&lt;br /&gt;
[[File:SetMaterialToMasked1.png|frameless]]&lt;br /&gt;
&lt;br /&gt;
===== Two-Sided Material =====&lt;br /&gt;
If at all possible, your material should be set to two-sided. This ensures the interior of the car doesn&#039;t have any transparency holes in it from fixtures or paints. To enable Two-Sided, click on the main material node in the material editor, and in the details panel, under the Material category, Tick &amp;lt;code&amp;gt;Two Sided&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:CustomPaintSetTwoSided.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
==== Required Usage ====&lt;br /&gt;
Materials need to be compiled for each type of object it can be applied to.&lt;br /&gt;
&lt;br /&gt;
Make sure when creating your custom paint mod, to &amp;lt;code&amp;gt;Enable&amp;lt;/code&amp;gt; the following types in the material&#039;s details window:&lt;br /&gt;
&lt;br /&gt;
* Used with Skeletal Mesh&lt;br /&gt;
* Used with Morph Targets&lt;br /&gt;
* Used with Spline Meshes&lt;br /&gt;
&lt;br /&gt;
[[File:EnableUseWithMeshTypes.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
==== Parameter Names ====&lt;br /&gt;
For parameters to appear in-game in the UI for the player to customize, it must have the &amp;lt;code&amp;gt;editable_&amp;lt;/code&amp;gt; prefix. Only Vector and Scalar parameters will appear in the UI. Vector parameters will always appear as a Colour Picker, and Scalar parameters will mostly always appear as a Slider. If a Scalar parameter also has the &amp;lt;code&amp;gt;_Bool&amp;lt;/code&amp;gt; suffix, it will instead appear as an Enable/Disable switch. A Vector parameter cannot have the &amp;lt;code&amp;gt;_Bool&amp;lt;/code&amp;gt; suffix.&lt;br /&gt;
&lt;br /&gt;
Example parameters:&lt;br /&gt;
&lt;br /&gt;
[[File:CustomPaintParameterNameExamples.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
[[File:CustomPaintParameterNameExamplesInGame.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
Note how in-game the &amp;lt;code&amp;gt;Burn Colour&amp;lt;/code&amp;gt; parameter isn&#039;t visible, and the &amp;lt;code&amp;gt;Burned&amp;lt;/code&amp;gt; parameter is an Enable/Disable toggle. This is because the Burn Colour parameter did not have the &amp;lt;code&amp;gt;editable_&amp;lt;/code&amp;gt; prefix, and the Burned parameter had the &amp;lt;code&amp;gt;_Bool&amp;lt;/code&amp;gt; suffix. Also note how the Scalar parameter appears as a slider, and the Vector parameter appears as a colour picker.&lt;br /&gt;
&lt;br /&gt;
==== Export Material User Data ====&lt;br /&gt;
&#039;&#039;[[Export Material User Data|Export Material User Data main page]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
From the details panel of the material, expand the Material category, and from the Asset User Data array, add an Export Material User Data. This is where the values and parameters for the material are stored for the exporter. The exporter can only see the parameter names in the export user data. The exporter cannot know the layout of the parameters in the material, and cannot, therefore, know how to use those parameters. The export user data exists to simplify the parameters down to a known layout, such that the exporter can then line those values up with what the BeamNG material system uses, as well as other potential exporter plugins.&lt;br /&gt;
&lt;br /&gt;
Note that the export user data only has access to a limited subset of behaviors for materials, and cannot do a lot of the fancy things that the UE4 material editor is capable of. It should, however, still be sufficient for most basic and intermediate-level materials.&lt;br /&gt;
&lt;br /&gt;
Once you have fed your parameters into the export user data, your material should now export correctly.&lt;br /&gt;
&lt;br /&gt;
==== Helper Functions For Materials ====&lt;br /&gt;
Inside materials and from the palette menu, or the right-click menu, you can access custom material functions that have been made and exposed to the material system. These nodes are designed to help you with designing your materials. Camso has designed a few material functions that help with designing custom paint materials. These materials can be accessed from the Camso or Custom Paint sub-categories within the palette or right-click menu inside materials.&lt;br /&gt;
&lt;br /&gt;
The following nodes and material functions will help you to make materials easier:&lt;br /&gt;
&lt;br /&gt;
===== GetStampAlpha =====&lt;br /&gt;
[[File:MatFunction GetStampAlpha.jpg|thumb]]This is one of the most important nodes, as it deals with all the functions, variables, and textures, that are used by the game to put the stamp holes on cars and fixtures. Without this node, fixture stamping does not work. Your material must be set to masked, and this node must be plugged into the opacity mask section.&lt;br /&gt;
&lt;br /&gt;
It has one input, and you should not do anything with it.&lt;br /&gt;
&lt;br /&gt;
===== MF_AASmoothStep =====&lt;br /&gt;
[[File:MatFunction AASmoothStep.jpg|thumb]]This is useful for turning a range of values into a 0 or a 1, or turning a range of values into a step where black suddenly turns to white.&lt;br /&gt;
&lt;br /&gt;
It has three inputs;&lt;br /&gt;
* In - this is the value you want to turn into a 1 or a 0&lt;br /&gt;
* CompValue - If the In value is above this, the out value will be 1. if In is less than this value, the output will be 0.&lt;br /&gt;
* Range - This is how large of a transition period the value should change in, in screen-space pixels. A small value will change over the course of a single pixel or less, and a large value will change over many pixels.&lt;br /&gt;
&lt;br /&gt;
===== MF_BlendAngleCorrectedNormals =====&lt;br /&gt;
[[File:MatFunction BlendAngleCorrectedNormals.jpg|thumb]]This blends multiple normal maps together, with correctly normalized results. Other methods of blending normal maps do not correctly account for the blue vector, or do not accurately derive the blue vector. This method is more compute-intensive, but results in perfectly-blended normals.&lt;br /&gt;
&lt;br /&gt;
It has four inputs;&lt;br /&gt;
* In - this is the base normal, which you want to blend another normal with&lt;br /&gt;
* Blend - this is the second normal that you want to add to the first&lt;br /&gt;
* Strength - This is how much of the Blend normal you want to add to the base normal&lt;br /&gt;
* Clamp - this ensures that none of the normal&lt;br /&gt;
&lt;br /&gt;
===== MF_BlendFade =====&lt;br /&gt;
[[File:MatFunction BlendFade.jpg|thumb]]This is a mandatory node as part of the material for custom paints or fixture materials. Multiply it with any other part of your opacity mask network, or if you dont have any, plug it right in.&lt;br /&gt;
&lt;br /&gt;
it has one input;&lt;br /&gt;
* Opacity - This lets you pass in any other opacity value, and it will be blended with this node. this is mostly used to plug in the GetStampAlpha material function.&lt;br /&gt;
&lt;br /&gt;
===== MF_CarpaintBackfaceBlend =====&lt;br /&gt;
[[File:MatFunction CarpaintBackfaceBlend.jpg|thumb]]This node will take two material attributes, and let one pass through for the front faces, and the other through for the backfaces.&lt;br /&gt;
&lt;br /&gt;
It has three inputs;&lt;br /&gt;
* Backface- This takes a Material Attributes in, and will pass it through to the output only if the current pixel is of the backface of a polygon.&lt;br /&gt;
* Front face- This takes a Material Attributes in, and will pass it through to the output only if the current pixel is of the front face of a polygon.&lt;br /&gt;
* Alpha - This is an optional input, and will override the default mask used to detect whether a face is the front or back of a polygon.&lt;br /&gt;
&lt;br /&gt;
===== MF_DynamicGrungeAndWear_Mask =====&lt;br /&gt;
[[File:MatFunction DynamicGrungeAndWear.jpg|thumb]]This node will create a mask ( a 0-1 value) where 1 will appear on corners and sharp curves, and 0 will appear on flat surfaces.&lt;br /&gt;
&lt;br /&gt;
it has six inputs;&lt;br /&gt;
* Curvature Cutoff - This will adjust how small/thick the corners will be, where a larger value will make the grunge mask thicker on corners.&lt;br /&gt;
* Dirtiness - This is the only mandatory input.  It takes a scalar value between 0 and 1, where 0 will be no grunge output, and 1 will be the most grunge.&lt;br /&gt;
* Adjust A Power - this node will adjust some of the grunge mask generation.&lt;br /&gt;
* Adjust A Divide - this node will adjust some of the grunge mask generation.&lt;br /&gt;
* Adjust B Power - this node will adjust some of the grunge mask generation.&lt;br /&gt;
* Adjust B Divide - this node will adjust some of the grunge mask generation.&lt;br /&gt;
&lt;br /&gt;
===== MF_FakeDarkenedMattePaint =====&lt;br /&gt;
[[File:MatFunction FakeDarkenedMattePaint.jpg|thumb]]This node is useful when making paint, as it forces the specular channel darker as the paint colour becomes darker.&lt;br /&gt;
&lt;br /&gt;
Because UE4 uses a fast PBR workflow, even a pure black non-metallic surface will appear somewhat bright, so this node is useful for darkening the paint further by dynamically adjusting the specular channel of the material.&lt;br /&gt;
&lt;br /&gt;
This material is used by plugging the Base Colour, Metallic, (optional) Specular, and Roughness inputs from your material into this node, and plugging the output into the Specular channel of the material.&lt;br /&gt;
&lt;br /&gt;
It has four inputs;&lt;br /&gt;
* Base Colour - Plug the material&#039;s base colour input into here.&lt;br /&gt;
* Metallic - Plug the material&#039;s Metallic input into here.&lt;br /&gt;
* Specular - Plug the material&#039;s Specular input into here, if it is used. If not, leave empty.&lt;br /&gt;
* Roughness - Plug the material&#039;s Roughness input into here.&lt;br /&gt;
&lt;br /&gt;
===== MF_HeightLerp =====&lt;br /&gt;
[[File:MatFunction HeightLerp.jpg|thumb]]This node creates a more useful blend between two heightmaps than a simple Lerp or SmoothStep function. It takes two heightmaps, one for each of the materials or textures that you wish to blend, as well as a Transition Phase (or Alpha), and outputs a new heightmap and mask for use in a Lerp or other material blend function.&lt;br /&gt;
&lt;br /&gt;
The result of this node is a mask for blending between two textures or materials, modulated by the heightmaps of those textures or materials. This is useful for blending, say, bricks into grass, as it will account for the height of each brick, and blend the grass first into the cracks and mortar.&lt;br /&gt;
&lt;br /&gt;
It has three inputs;&lt;br /&gt;
* Height 1 - This is the heightmap of the first texture/material you wish to blend.&lt;br /&gt;
* Height 2 - This is the heightmap of the second texture/material you wish to blend.&lt;br /&gt;
* Transition Phase - This is the phase of the transition, otherwise known as an alpha, for blending between Height 1 and Height 2. A transition phase of 0 means the mask will let all of Height 1 through, and a value of 1 will let as much of Height 2 through as it can, given the height values of each input. a Value of 0.5 will blend the two heights equally.&lt;br /&gt;
&lt;br /&gt;
===== MF_MipOverride_Mask =====&lt;br /&gt;
[[File:MatFunction MipOverrideMask.jpg|thumb]]&lt;br /&gt;
This is a fun one. It acts a bit like a Camera Depth Fade, where it defines a transition mask based on depth or distance, but instead of using distance from pixel to camera, which is prone to inconsistencies with different FOVs, it instead uses the distance between the UVs of the adjacent pixels to define its mask. What this means is, regardless of the distance from the camera, or the FOV, the mask output from this node will always occur at the same texel density.&lt;br /&gt;
&lt;br /&gt;
This node was developed for the Fixture Taillight Glass material, where if the glass was small enough on screen, the pixels between the textures was creating enough noise that a transition to a simplified version of the material was needed. Since the material can change scale based on the fixture&#039;s size, the camera can move farther or closer away from the car depending on the camera&#039;s position, and the FOV can change depending on the user&#039;s game or photoscene settings, this was the only way to consistently define a mask for the simplified version of the material.&lt;br /&gt;
&lt;br /&gt;
It will output a 1 if the current pixel&#039;s texel size is less than the input threshold.&lt;br /&gt;
&lt;br /&gt;
It has five inputs;&lt;br /&gt;
&lt;br /&gt;
* DDX - This is the DDX of the UVs for the texture.&lt;br /&gt;
* DDY - This is the DDY of the UVs for the texture.&lt;br /&gt;
* Texture - This is the texture object of the texture you wish to override at a certain texel size.&lt;br /&gt;
* Transition Contrast - This is how much of a range you wish the mask to blend between. A lower value means a sharper, more immediate blend.&lt;br /&gt;
* Max Texel Size - This is the minimum size of a texel, in horizontal or vertical screen pixels, that you wish the texture to be visible. If the texture is smaller than this value, the mask output is 1.&lt;br /&gt;
&lt;br /&gt;
===== MF_StepScaleable =====&lt;br /&gt;
[[File:MatFunction StepScalable.jpg|thumb]]&lt;br /&gt;
This is a more performant version of MF_AAStep, where at lower shader settings, it falls back to a standard Step function.&lt;br /&gt;
&lt;br /&gt;
It has two inputs;&lt;br /&gt;
&lt;br /&gt;
* In - This is the value you want to apply the Step function to.&lt;br /&gt;
* Comp Value - This is the value at which you want the input to return 1. If the input value is less than the comp value, the result will be 0.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_Lerp_Scalar =====&lt;br /&gt;
[[File:MatFunction CustomPaint Lerp Scalar.jpg|thumb]]&lt;br /&gt;
This node follows the logic of the export parameters, where the values A and B can be LERP-ed together by an Alpha, and an optional Power. The power node forces the Alpha downward, such that the LERP becomes more exponential. A higher value of Power results in the Alpha applying a smoother blend between A and B. The Power is blended into the Alpha such that the higher the alpha, the less the power is applied. the end result is more control over the lower values of Alpha, while the higher values remain closer to a linear blend.&lt;br /&gt;
&lt;br /&gt;
This node is useful for a Scale input for textures, as the Alpha can be driven by a player-editable parameter (with the &amp;lt;code&amp;gt;editable_&amp;lt;/code&amp;gt; prefix) and the player has more control over the scale of the texture at lower scales.&lt;br /&gt;
&lt;br /&gt;
The formula for the output is as such:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lerp (A, B, Lerp(Power, Alpha, Power))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It has five inputs;&lt;br /&gt;
&lt;br /&gt;
* A - Just like a lerp, this is the A input. If the Alpha is 0, the result is 100% A.&lt;br /&gt;
* B - Just like a lerp, this is the B input. If that Alpha is 1, the result is 100% B.&lt;br /&gt;
* Alpha - Just like a lerp, this is the Alpha input. If the Alpha is 0, the result is 100% A, if Alpha is 0.5, the result is equally half of A and B (unless the Power input is anything other than 1, and the Has Lerp Power is True.)&lt;br /&gt;
* Power - This is the modifier for Alpha. A value above 1 will slowly force the lower values of Alpha further down towards 0, much like a power node would, but higher values of Alpha will remain higher. This is done by applying a second Lerp between the Power and Alpha inputs.&lt;br /&gt;
* Has Lerp Power - This a bool input. If the input bool is True, the Power input is evaluated. If False, the Power input is ignored and this node acts exactly like a standard lerp.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_Lerp_Vec2 =====&lt;br /&gt;
[[File:MatFunction CustomPaint Lerp Vec2.jpg|thumb]]&lt;br /&gt;
Exactly like the scalar version of this node, except it works on Vec2 values instead of scalars.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
 &lt;br /&gt;
.&lt;br /&gt;
 &lt;br /&gt;
.&lt;br /&gt;
===== MF_CustomPaint_Lerp_Vec3 =====&lt;br /&gt;
[[File:MatFunction CustomPaint Lerp Vec3.jpg|thumb]]&lt;br /&gt;
Exactly like the scalar version of this node, except it works on Vec3 values instead of scalars.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
 &lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
===== MF_CustomPaint_Lerp_Vec4 =====&lt;br /&gt;
[[File:MatFunction CustomPaint Lerp Vec4.jpg|thumb]]&lt;br /&gt;
Exactly like the scalar version of this node, except it works on Vec4 values instead of scalars.    &lt;br /&gt;
                                &lt;br /&gt;
.&lt;br /&gt;
 &lt;br /&gt;
.&lt;br /&gt;
 &lt;br /&gt;
.&lt;br /&gt;
 &lt;br /&gt;
.&lt;br /&gt;
 &lt;br /&gt;
===== MF_CustomPaint_TexList_002 =====&lt;br /&gt;
[[File:MatFunction CustomPaint TexList 002.jpg|thumb]]&lt;br /&gt;
This node, like the similarly-named nodes that follow, are part of a set of nodes that may help you set up logic for allowing the player to change the texture of a material with a slider.&lt;br /&gt;
&lt;br /&gt;
Because the current Custom Paint system doesnt allow for a texture-selector interface of any kind, one must be hacked together using some other method. This node uses a slider.&lt;br /&gt;
&lt;br /&gt;
MF_CustomPaint_TexList_002 allows you to set up two textures for the player to switch between, by feeding an &amp;lt;code&amp;gt;editable_[Scalar]&amp;lt;/code&amp;gt; parameter into the Selector input, and a texture object parameter into each of the Item0/1 inputs.&lt;br /&gt;
&lt;br /&gt;
it has seven inputs;&lt;br /&gt;
&lt;br /&gt;
* Selector - This is where you would feed your &amp;lt;code&amp;gt;editable_&amp;lt;/code&amp;gt; scalar parameter. The parameter moves between 0 and 1, where each step corresponds to a texture from the Item list of inputs.&lt;br /&gt;
* Item 0 - This is the first texture to be selected from the list, as a Texture Object Parameter. Because this list only contains two items, it will be present so long as the Selector input is between 0 and 0.5.&lt;br /&gt;
* Item 1 - This is the second texture to be selected from the list, as a Texture Object Parameter. Because this list only contains two items, it will be present so long as the Selector input is between 0.5 and 1.&lt;br /&gt;
* Output Vec4 - If the texture you are using this node for contains RGBA info, and you are using the Alpha channel in your material, set this bool to True, otherwise leave it.&lt;br /&gt;
* UVs - This is the UVs of your texture. This node handles the texture sampling of your texture, so it needs the UVs to be passed through.&lt;br /&gt;
* DDX - Because the UVs of many of Automation&#039;s textures are handled dynamically, the DDX and DDY of the UVs are often needed. As such, they are required here. This incurs no additional cost to the shader engine, as the internal texture sampler calculates them also. If you do not have or require the DDX and DDY of your UVs, simply drag out of the UVs node that you fed into the above input, and get the DDX.&lt;br /&gt;
* DDY - As above, feed the DDY of the UVs into here.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_003 =====&lt;br /&gt;
[[File:MatFunction CustomPaint TexList 003.jpg|thumb]]&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between three textures.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_004 =====&lt;br /&gt;
[[File:MatFunction CustomPaint TexList 004.jpg|thumb]]&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between four textures.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_005 =====&lt;br /&gt;
[[File:MatFunction CustomPaint TexList 005.jpg|thumb]]&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between five textures.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_006 =====&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between six textures.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_007 =====&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between seven textures.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_008 =====&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between eight textures.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_009 =====&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between nine textures.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_010 =====&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between ten textures.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_011 =====&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between eleven textures.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_012 =====&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between twelve textures.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_013 =====&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between thirteen textures.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_014 =====&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between fourteen textures.&lt;br /&gt;
&lt;br /&gt;
===== MF_CustomPaint_TexList_015 =====&lt;br /&gt;
[[File:MatFunction CustomPaint TexList 015.jpg|thumb]]&lt;br /&gt;
Exactly like the two-texture list version of this node, except it selects between fifteen textures.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
===== MF_CustomPaintScale =====&lt;br /&gt;
[[File:MatFunction CustomPaintScale.jpg|thumb]]&lt;br /&gt;
This is a more advanced version of the Custom Paint Lerp Scalar node, specialized more for use as a scale modifier for UVs. It has separate scale inputs for the texture itself, and the thumbnail version of the custom paint. This allows the scale to be set differently for the thumbnail of the custom paint, as the thumbnail mesh is a 2cm^2 mesh and most scales of a texture would look poor at this size.&lt;br /&gt;
&lt;br /&gt;
It has six inputs (the greyed-out inputs that are just dashes (--) are there solely as separators for organization);&lt;br /&gt;
&lt;br /&gt;
* Editable Scale - This is where you would feed your editable_ scalar parameter for adjusting the scale in-game&lt;br /&gt;
* Scale Min - The minimum scale you wish the slider to be.&lt;br /&gt;
* Scale Max - The maximum scale you wish the slider to be.&lt;br /&gt;
* Lerp Power - Just like the Custom Paint Lerp Scalar node, this is the power adjust for the scale.&lt;br /&gt;
* Thumbnail Min - Just like Scale Min, this is the minimum scale you wish the slider to be, but this only affects the thumbnail of the material in-game.&lt;br /&gt;
* Thumbnail Max - Just like Scale Max, this is the maximum scale you wish the slider to be, but this only affects the thumbnail of the material in-game.&lt;br /&gt;
&lt;br /&gt;
===== MF_ExportParameterSwitch_Scalar =====&lt;br /&gt;
[[File:MatFunction ExportParameterSwitch Scalar.jpg|thumb]]&lt;br /&gt;
Sometimes, you want a different value to be used for the export of the material than the one that is used inside Automation. This node exploits a feature of the UE4 engine that allows parameters to exist without affecting the performance or appearance of the shader in-game. In this way, you can feed a parameter to the exporter that has no bearing on the in-game material.&lt;br /&gt;
&lt;br /&gt;
It has two inputs;&lt;br /&gt;
&lt;br /&gt;
* UE4 Parameter - This is the parameter that you wish to use for the material. it can also be used for the exporter.&lt;br /&gt;
* Export Parameter - This is the parameter input that you wish to use for the exporter. This has no effect on the material.&lt;br /&gt;
&lt;br /&gt;
===== MF_ExportParameterSwitch_Vec3 =====&lt;br /&gt;
[[File:MatFunction ExportParameterSwitch Vec3.jpg|thumb]]&lt;br /&gt;
Exactly like the scalar version of this node, except it works on Vec3 values instead of scalars.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
===== MF_FixtureUVs =====&lt;br /&gt;
[[File:MatFunction FixtureUVs.jpg|thumb]]&lt;br /&gt;
This node is the bread-and-butter of custom paint and fixture materials. It contains all the logic and maths required for applying a texture to a model, and should be used in 99% of situations where you want to apply a texture to your Custom Paint shader.&lt;br /&gt;
&lt;br /&gt;
By default, it applies a World-Aligned box-projected texture map, except centered on the car instead of the world origin. What this means is, all textures are relative to the car. As the car moves, the textures remain the same, but if a fixture with this material applied to it moves, the texture will appear to &#039;crawl&#039;, as the textures remain aligned to the car while the fixture is moving. This is useful when the player wants to use many fixtures with the same custom paint applied to it, as the textures in those custom paints will align and appear as a single texture. By aligning it to the car instead of the world, it also mitigates the issue where textures would crawl and appear mis-aligned if the car is moved or rotated in the photoscene.&lt;br /&gt;
&lt;br /&gt;
It has many inputs and outputs;&lt;br /&gt;
&lt;br /&gt;
Inputs;&lt;br /&gt;
&lt;br /&gt;
* Texture Object - Input the texture object parameter you wish to use here. Unless it is a normal map, in which case use the Normal Object input.&lt;br /&gt;
* Normal Object - If the texture object you wish to use is a normal map, use this input instead.&lt;br /&gt;
* Texture Size - Input a scalar value here, in world units (a value of 1 is equal to 1cm, and a value of 100 is equal to 100cm), and your texture will be mapped at this scale.&lt;br /&gt;
* World Normal - Leave this section blank, unless you wish to override the world normal used to calculate the current pixel&#039;s normal vector in world-space. In 99% of situations, this is left blank.&lt;br /&gt;
* World Position - Leave this section blank, unless you wish to override the world position used to calculate the current pixel&#039;s location in world-space. In 99% of situations, this is left blank.&lt;br /&gt;
* Cutoff Offset - Leave this section blank, unless you wish to override the ratio at which a texture switches between the cardinal directions used for the box unwrap. in 99% of situations, this is left blank.&lt;br /&gt;
* Texture Offset - This input defaults to using two &amp;lt;code&amp;gt;editable_&amp;lt;/code&amp;gt; parameters for adjusting the texture offset. If left blank, two sliders will appear in-game for adjusting the X and Y axis of the texture. Override this only if you know what you are doing.&lt;br /&gt;
* Texture Rotation - This input, unlike the Texture Offset input, does not have a default parameter attached to it. This is because it is unfortunately not possible, currently, to rotate the UVs of an exported material. As such, this input remains unused. You can override it to adjust the rotation of the textures along each of the three cardinal directions, as each component of the vector represents a fraction of rotation (ie: a vector [x,y,z] is really just a combination of three rotations, as 0-1 being a 0-360 degree rotation. so a vector [0.25,0.5,1] would rotate the X axis by 90 degrees, the Y axis by 180, and the z axis by 0 degrees).&lt;br /&gt;
* Output Vec4 - This bool is False by default. If the texture you are using contains RGBA information, and you are using the Alpha channel in your material, set this bool to True, otherwise leave blank.&lt;br /&gt;
* Use Mesh UVs - This bool is False by default. If enabled, most of the features of this node are disabled and only the Texture Size input is used, as a multiplier on the UVs.&lt;br /&gt;
* Has Texture Transition - This bool is False by default. If enabled, the box unwrap tries to do a blended transition between each of the three unwraps. This is useful for fine-detail or stochastic, noisy, textures. If left as False, it uses a hard cutoff where the transition between the three unwraps is more obvious. This is useful for textures that try to imitate real patterns, as the hard seams imitate actual seams between sheets of material.&lt;br /&gt;
&lt;br /&gt;
Outputs;&lt;br /&gt;
&lt;br /&gt;
* Result - This is the unwrapped texture, as either a Vec3, or Vec4 (If Output Vec4 is set to True). If no Texture Object is supplied, this output is unused.&lt;br /&gt;
* Normal - This is as above, but for normal maps. If your texture is a normal map, use this output paired with the Normal Object input. If no Normal Object is supplied, this output is unused.&lt;br /&gt;
* UVs - This is the resulting UVs used for the Texture and Normal Object texture samplers. If you need to use the UVs for more than one texture, or a texture that is not a Colour or Normal Map, this output combined with the DDX and DDY outputs can be used on a texture sampler to get the same result.&lt;br /&gt;
* DDX - Because the UVs of this node are generated procedurally, the DDX and DDY of the UVs need to be explicitly defined and fed to the Texture Sampler. If you are using your own texture sampler, you need to use the DDX and DDY outputs as well as the UVs. You cannot use the UVs just on their own.&lt;br /&gt;
* DDY - See above.&lt;br /&gt;
&lt;br /&gt;
===== MF_NormalStrength =====&lt;br /&gt;
[[File:MatFunction NormalStrength.jpg|thumb]]&lt;br /&gt;
This node will adjust the strength of a normal map. This is useful when a normal map does not perfectly represent the material you wish to create, or when the material is dynamic and adjustment of the normal map is desired.&lt;br /&gt;
&lt;br /&gt;
It has two inputs;&lt;br /&gt;
&lt;br /&gt;
* Normal - This is the normal vector you want to adjust.&lt;br /&gt;
* Strength - This is a scalar value that will effectively multiply the normals. A strength of 1 means the normal map is un-affected, a strength of 2 means the normal map is twice as strong, a value of 0 will mean the normal vector has no effect on the surface normals of the material, and a value of -1 will invert the direction of the X and Y components of the normal (effectively inverting the normal map without inverting the direction of the surface polygon)&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== An Example Material ===&lt;br /&gt;
Set your material to Masked:&lt;br /&gt;
&lt;br /&gt;
[[File:Example MaterialDefaultRequirements 001.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
Then add the GetStampAlpha, and BlendFade nodes to the opacity mask:&lt;br /&gt;
&lt;br /&gt;
[[File:Example MaterialDefaultRequirements 002.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
==== Adding a Texture ====&lt;br /&gt;
Add a FixtureUVs node to the Base Colour input, and add a texture object parameter to the Texture Object Input, and a scalar parameter to the Texture Size input of it:&lt;br /&gt;
&lt;br /&gt;
[[File:Example FixtureUVs.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
==== Controlling the Scale ====&lt;br /&gt;
If you want the player to be able to control the scale of the texture, add a CustomPaintScale node to the Texture Size input:&lt;br /&gt;
&lt;br /&gt;
[[File:Example FixtureUVsWithScale.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
==== Adding a Normal Map ====&lt;br /&gt;
If you have a normal map, add that to the Normal Object input:&lt;br /&gt;
&lt;br /&gt;
[[File:Example FixtureUVsWithScaleAndNormals.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
==== Adding Normal Strength Adjustment ====&lt;br /&gt;
If your normal map could do with some adjustment for strength, add that with a NormalStrength node:&lt;br /&gt;
&lt;br /&gt;
[[File:Example FixtureUVsWithScaleAndNormalsAndStrength.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
==== Creating Colour Adjustment ====&lt;br /&gt;
If you want the player to be able to adjust the colours of the texture in-game, do so with a Lerp node and two Vector Parameters:&lt;br /&gt;
&lt;br /&gt;
[[File:Example FixtureUVs 005.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note that any parameter that you want the player to be able to edit &#039;&#039;&#039;must&#039;&#039;&#039; have &amp;lt;code&amp;gt;editable_&amp;lt;/code&amp;gt; as the prefix.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Adding Texture Selection Options ====&lt;br /&gt;
If you want the player to be able to select a texture with a slider, the order of operations needs to switch. Remove the texture inputs from the FixtureUVs node, and instead use the UVs, DDX, and DDY outputs from FixtureUVs to feed into the respective inputs of a TexList node. For this example, We&#039;ll use a TexList_004, but any number of inputs will work exactly the same way.&lt;br /&gt;
&lt;br /&gt;
Create four texture object parameters (or any number, to match the number of textures the TexList node requires), and name them all. &#039;&#039;They cannot be static texture objects, they must be parameters.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Create a scalar parameter, with the &amp;lt;code&amp;gt;editable_&amp;lt;/code&amp;gt; prefix, to be your selector slider. &lt;br /&gt;
&lt;br /&gt;
For regular textures, use the Selected Texture output. For normal maps, use the Selected Normal output.&lt;br /&gt;
&lt;br /&gt;
[[File:Example FixtureUVs 006.jpg|frameless]]&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=File:EnableUseWithMeshTypes.jpg&amp;diff=4950</id>
		<title>File:EnableUseWithMeshTypes.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=File:EnableUseWithMeshTypes.jpg&amp;diff=4950"/>
		<updated>2023-03-07T05:23:33Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;EnableUseWithMeshTypes&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=Fixture_Mods&amp;diff=4949</id>
		<title>Fixture Mods</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=Fixture_Mods&amp;diff=4949"/>
		<updated>2023-03-07T00:35:05Z</updated>

		<summary type="html">&lt;p&gt;Hannah: /* Creating the Thumbnail */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
A fixture is a collection of files, for which a &amp;lt;code&amp;gt;cpp&amp;lt;/code&amp;gt; file serves as the parent file. All the settings for a fixture are inside this &amp;lt;code&amp;gt;cpp&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
Fixtures are comprised of up to 4 optional sub-meshes (a [[#UV Mesh|UV mesh]], [[#Conforming Mesh|conforming mesh]], [[#Skinned Mesh|skinned mesh]], and [[#Additional Mesh|additional mesh]]) depending on the type of fixture:&lt;br /&gt;
&lt;br /&gt;
*A &#039;&#039;&#039;UV mesh&#039;&#039;&#039; is the silhouette of the cutout hole that a fixture makes in a car body.&lt;br /&gt;
*A &#039;&#039;&#039;conforming mesh&#039;&#039;&#039; (e.g. grilles, outer light glass, or body moulding) will deform to the shape of the body.&lt;br /&gt;
*A &#039;&#039;&#039;skinned mesh&#039;&#039;&#039; (e.g. light internals) will maintain its relative internal shapes, but will conform roughly to the shape of the body.&lt;br /&gt;
*An &#039;&#039;&#039;addditional mesh&#039;&#039;&#039; (e.g. mirrors) will retain its shape no matter where it is placed on the body.&lt;br /&gt;
&lt;br /&gt;
Fixtures need [[Material Slots|material slots]] set up correctly to look as intended, and [[Preview Thumbnails|preview thumbnails]] to appear in-game.&lt;br /&gt;
&lt;br /&gt;
==Performance considerations==&lt;br /&gt;
The performance of fixtures (and bodies) in UE4 is a constant discussion of balance.&lt;br /&gt;
&lt;br /&gt;
There is a performance impact to poly count with fixtures in that a ray is cast to the body for every vertex; the more vertices there are in a mesh, the longer it&#039;ll take to conform to the body. This is why you&#039;ll see more detailed fixtures sit there for a few seconds before conforming to the car.&lt;br /&gt;
&lt;br /&gt;
This is doubly so for fixtures that cut into the body—a UV mesh&#039;s vertices are raycast to the car on every frame while you&#039;re dragging the fixture around. UV meshes impact performance significantly with a higher poly count; try to keep UV meshes as low-poly as possible.&lt;br /&gt;
&lt;br /&gt;
=== For optimal performance: ===&lt;br /&gt;
&lt;br /&gt;
*Keep UV meshes lower than 100 triangles. With between 100 and 150 triangles, the fixture may lag when being dragged around; any higher and it will lag too much to use properly.&lt;br /&gt;
*Try to keep conforming meshes lower than 5,000 triangles. Higher-resolution meshes take longer than usual to conform to the car once they are placed.&lt;br /&gt;
&lt;br /&gt;
== Fixture blueprints ==&lt;br /&gt;
[[File:FixtureExampleSettings.png|alt=|right|frameless|700x700px]]A Fixture is composed of a Blueprint that contains the fixture settings and sub-meshes.&lt;br /&gt;
&lt;br /&gt;
=== Fixture Settings ===&lt;br /&gt;
Meshes (more on these below):&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Conforming Mesh&#039;&#039;&#039; - Defines the &#039;&#039;Static Mesh&#039;&#039; sub-mesh used by this fixture.&lt;br /&gt;
* &#039;&#039;&#039;UV Mesh&#039;&#039;&#039; - Defines the &#039;&#039;UV Mesh&#039;&#039; sub-mesh used by this fixture.&lt;br /&gt;
*&#039;&#039;&#039;Skinned Mesh&#039;&#039;&#039; - Defines the &#039;&#039;Skinned Mesh&#039;&#039; sub-mesh used by this fixture.&lt;br /&gt;
*&#039;&#039;&#039;Additional Mesh&#039;&#039;&#039; - Defines the &#039;&#039;Additional Mesh&#039;&#039; sub-mesh used by this fixture.&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&amp;lt;nowiki/&amp;gt;&amp;lt;nowiki/&amp;gt;&amp;lt;nowiki/&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Text:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Text Data&#039;&#039;&#039; - Only used for typeable text.&lt;br /&gt;
&lt;br /&gt;
Fixture Preview:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;GUID&#039;&#039;&#039; - Unique identifier for this fixture.&lt;br /&gt;
*&#039;&#039;&#039;Family GUID&#039;&#039;&#039; - Identifier for this fixture family. This should be unique to every other family GUID, and identical to every other variant of this fixture.&lt;br /&gt;
&lt;br /&gt;
Fixture:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Fixture Type&#039;&#039;&#039; - What category this fixture should be in (e.g. headlight, aerial, grille, etc).&lt;br /&gt;
*&#039;&#039;&#039;Centre Snap Distance&#039;&#039;&#039; - Defines at what distance, in cm, the fixture will snap to the centre line of the car (10 by default).&lt;br /&gt;
*&#039;&#039;&#039;Lock Normal to Cardinal&amp;lt;nowiki/&amp;gt;&#039;&#039;&#039; - Determines whether the fixt&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;&#039;&#039;ure will conform t&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;&#039;&#039;o one of the five cardinal directions in 3D space (forwards, backwards, left, right, or upwards) by default. A non-cardinal-locked fixture will simply face in the direction of the surface on which it&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;&#039;&#039; is placed. Cardinal locking is useful for fixtures such as lights and mirrors, since it ensures that they don&#039;t face in (or conform to) odd directions.&lt;br /&gt;
*&#039;&#039;&#039;Export Breakability Override&#039;&#039;&#039; - Certain categories of fixtures can break off when damaged in BeamNG.drive. This setting lets you force a fixture to be breakable or unbreakable.&lt;br /&gt;
*&#039;&#039;&#039;Fixture Shape&#039;&#039;&#039; - Used to filter fixtures by rectangular, round, or complex shapes. Mostly used for lights.&lt;br /&gt;
*&#039;&#039;&#039;Year&#039;&#039;&#039; - Used to filter fixtures by year. Useful for era-specific fixtures, such as sealed beam headlights.&lt;br /&gt;
*&#039;&#039;&#039;Use This Fixture as Family Preview&#039;&#039;&#039; - if you have many variants of a fixture, enabling this setting for one variant will make it the one that shows up in the main fixture menu (overriding the first fixture as per alphabetical order).&lt;br /&gt;
&lt;br /&gt;
Path:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Fixture Class&#039;&#039;&#039; - Set this to &amp;lt;code&amp;gt;A_Fixture&amp;lt;/code&amp;gt; to ensure that the fixture works as intended in-game.&lt;br /&gt;
&lt;br /&gt;
=== Fixture Sub-Meshes ===&lt;br /&gt;
&lt;br /&gt;
==== UV Mesh ====&lt;br /&gt;
The &#039;&#039;UV Mesh&#039;&#039; (imported as a &#039;&#039;&#039;Static Mesh&#039;&#039;&#039; in UE4) is a flat silhouette that tells the fixture to cut a hole into the car body.  You will only need vertices along the outside edges of the UV mesh, and a UV mesh is only required if your fixture intends to cut into the car. Unlike other meshes, UV meshes do not require any UV maps.&lt;br /&gt;
&lt;br /&gt;
==== Conforming Mesh ====&lt;br /&gt;
The &#039;&#039;Conforming Mesh&#039;&#039; (imported as a &#039;&#039;&#039;Static Mesh&#039;&#039;&#039; in UE4) is a mesh where each vertex is deformed to match the surface of the car body. It is also a required mesh if the fixture has a UV mesh, as the conforming mesh is used to cover the jagged edge of the hole created by the UV mesh.  A conforming mesh that could logically be placed on top of other fixtures should also have its outside edges extend beneath the body; the default distance for this extrusion is slightly farther than 10 cm.&lt;br /&gt;
&lt;br /&gt;
==== Skinned Mesh ====&lt;br /&gt;
The &#039;&#039;Skinned Mesh&#039;&#039; (imported as a &#039;&#039;&#039;Skeletal Mesh&#039;&#039;&#039; in UE4) is used when you have parts of a fixture that should conform to the rough shape of the car, but also retain the dimensions and ratios of any individual components. A skinned mesh will have a bone for each element that is parented to a root bone.&lt;br /&gt;
&lt;br /&gt;
Some vertices of a skinned mesh will conform to the car as with a conforming mesh if they are a) within 1.5 mm of the car body surface, whether weighted to any bones or not, b) weighted to the root bone, or c) not weighted to any bones. Because of the former, there may be a small gap of at least 1 mm between the edge of the skinned mesh and the car body. To cover up this gap, a conforming mesh is often used to connect the edge of the skinned mesh with the car body.&lt;br /&gt;
&lt;br /&gt;
==== Additional Mesh ====&lt;br /&gt;
The &#039;&#039;Additional Mesh&#039;&#039; (imported as a &#039;&#039;&#039;Static Mesh&#039;&#039;&#039; in UE4) does not deform in any way and will remain in place relative to the location of the fixture.  An additional mesh has no skin or bones, and no part of it will deform to the shape of the car. Examples of additional meshes are exhaust tips, wing mirrors, and most fixtures intended for 3D placement.&lt;br /&gt;
&lt;br /&gt;
== Modelling a fixture ==&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note:&#039;&#039;&#039; This how-to assumes a general understanding of polygonal 3D modelling software. Any 3D modelling package will do, as no custom scripts are required to author fixture meshes.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hard Rooster has created a full video series for fixture modding in Blender. The full series can be found [https://www.youtube.com/playlist?list=PLb7obMX2SCf0V3dlxfOHnB9eKtP3c_KEZ here.]&lt;br /&gt;
=== Fixture Orientation ===&lt;br /&gt;
Fixtures are oriented in the following manner in a 3D modelling program. Note how the negative Y axis faces forwards.&lt;br /&gt;
[[File:Fixture_Orientation_Example.jpg|link=https://automation.gamepedia.com/File:Fixture_Orientation_Example.jpg|alt=Fixture Orientation Example|none|thumb|360x360px|Fixtures come out of the car towards the -Y axis. -X is left, +X is right, +Z is up, and -Z is down.]]&lt;br /&gt;
&lt;br /&gt;
=== Fixture Y-Axis Thresholds ===&lt;br /&gt;
There are 2 important values to take in to note for fixture sub-meshes.&lt;br /&gt;
* A skinned mesh will have some of its vertices conform to the car as if it were a conforming mesh, but only if those vertices are within &#039;&#039;&#039;&#039;&#039;1.5 mm&#039;&#039;&#039;&#039;&#039; from Y=0. A vertex with a Y axis value of 1.5 mm will conform to the car as if it were part of a conforming mesh, and a vertex with a Y axis value of 2.0 mm will not.&lt;br /&gt;
* The outer edges of most vanilla conforming meshes (and inner edges of things with holes in them, like open grilles) usually sit 10 cm below the surface (or 10 cm inwards along the Y axis). This stops fixtures from appearing to &#039;float&#039; when put on top of other fixtures that cut into cars and leave holes, such as grilles and moulding. This is by no means a hard-and-fast rule; specific applications may call for fixtures to extend anywhere from 1 to 100 cm into the body.&lt;br /&gt;
&lt;br /&gt;
It&#039;s a bit confusing at first, but following these rules will ensure your fixture works correctly.&lt;br /&gt;
&lt;br /&gt;
=== Deciding What Sub-Meshes You&#039;ll Need ===&lt;br /&gt;
Fixtures have a fairly convoluted list of things that are or are not needed, depending on what&#039;s in the fixture.&lt;br /&gt;
*If you have a [[Fixture Mods#UV Mesh|UV mesh]], you need a [[Fixture Mods#Conforming Mesh|conforming mesh]] to cover the hole.&lt;br /&gt;
*If you have a conforming mesh, it isn&#039;t required to have anything else unless said Conforming Mesh has parts that go below the car body mesh (in which case you&#039;ll need a UV Mesh to cut a hole out for it).&lt;br /&gt;
*If you have a [[Fixture Mods#Skinned Mesh|skinned mesh]], you&#039;ll need a conforming mesh and a UV mesh, as a skinned mesh can only be inside the car. Therefore, a UV mesh is needed to cut out that hole, and a conforming mesh is needed to cover the edge of that hole.&lt;br /&gt;
*If you have an [[Fixture Mods#Additional Mesh|additional mesh]] positioned above the car body, nothing else is needed. If the additional mesh is obscured by the car body mesh, you&#039;ll need a UV mesh to cut out the hole for that (and by extension, a conforming mesh to line that hole).&lt;br /&gt;
&lt;br /&gt;
For this example, we&#039;ll make the components for the headlight fixture below (a &#039;&#039;Conforming Mesh&#039;&#039;, &#039;&#039;UV Mesh&#039;&#039;, and a &#039;&#039;Skinned mesh&#039;&#039; with 4 bones).&lt;br /&gt;
&lt;br /&gt;
[[File:Fixture_On_Car_Example.jpg|link=https://automation.gamepedia.com/File:Fixture_On_Car_Example.jpg|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
=== Creating the Sub-Meshes ===&lt;br /&gt;
&lt;br /&gt;
==== Creating a UV Mesh ====&lt;br /&gt;
The UV mesh defines the [[wikipedia:Texel_(graphics)|texels]] (texture pixles) of the car body that will be cut out by the fixture. Each vertex is used as a point of reference, and lines are drawn between them along the edges of the UV mesh to define the final cutout shape. If there are too few vertices, the cutout shape may become distorted, since the vertices are projected onto the car texture before being cut out (with the actual edges of the UV mesh not being used). This, combined with the round &amp;quot;pelt unwrap&amp;quot; nature of car bodies&#039; UV maps, can result in waviness between vertices in the cutout shape. This is more pronounced on larger fixtures, or fixtures that are stretched to several times their original size.&lt;br /&gt;
&lt;br /&gt;
A UV mesh should have vertices at regular intervals around the outside to determine the cutout shape of the fixture. Any vertices that aren&#039;t on an edge are irrelevant and will only make the fixture slower to render. Note that UV meshes can be made in [[wikipedia:Annulus_(mathematics)|annulus]] shapes with holes in the middle, like a doughnut.&lt;br /&gt;
&lt;br /&gt;
The UV mesh should be roughly halfway between the outside edge of the skinned mesh (which should share its edge with the inside edge of the conforming mesh) and the outside edge of the conforming mesh.&lt;br /&gt;
&lt;br /&gt;
See below for the example UV mesh in comparison to its respective conforming mesh.&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;360&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:UV Mesh Example.jpg|An example UV mesh.&lt;br /&gt;
File:UV Mesh - Conforming Comparison.png|Note that the edges of the UV mesh are completely encompassed by the conforming mesh. The skinned mesh for this fixture should line up with the interior edge of the conforming mesh.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;Note that the centre vertices may need to be offset slightly from their respective axes; see [[Fixture Mods#Additional Notes|Additional Notes]] for more information.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re having trouble with wavy cutouts on cars, segment your UV mesh into quads instead of a starburst pattern, as shown here.&lt;br /&gt;
[[File:Testingses2.jpg|none|thumb|Left: A &#039;starburst&#039; UV mesh with an unwanted wavy cutout. Right: The same fixture, but with a different UV mesh flow and no cutout problems.|480x480px|alt=]]&lt;br /&gt;
&lt;br /&gt;
==== Creating a Conforming Mesh ====&lt;br /&gt;
A conforming mesh is a single basic polygonal mesh that conforms to the shape of the car body.&lt;br /&gt;
&lt;br /&gt;
The conforming mesh should have enough polygons at regular intervals so that it doesn&#039;t appear blocky or clip through the car body.  The more polygons you add to the conforming mesh, the longer it will take to calculate its final morph position, but this does not impact performance when it is dragged around.&lt;br /&gt;
&lt;br /&gt;
For this example fixture, we&#039;ll be using a conforming mesh for two purposes:&lt;br /&gt;
&lt;br /&gt;
*Connecting the skinned mesh to the car body.&lt;br /&gt;
*Covering the cutout hole created by the UV mesh.&lt;br /&gt;
&lt;br /&gt;
However, a conforming mesh can be used without a skinned mesh, such as:&lt;br /&gt;
*for trim pieces, moulding, or badges.&lt;br /&gt;
*for vents and grilles, when used with a UV mesh.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll start by using the UV mesh as our reference point. Our conforming mesh needs to cover the hole created here, so we&#039;ll make a ring of faces to surround the UV mesh with enough width to not allow any visible gaps between the cutout and the conforming mesh. We&#039;ll extend this edge out along the -Y axis (forward from the car body) by a millimetre or two to prevent faces from clipping through the car body, and we&#039;ll extrude a ring of faces around the outside of it to connect the mesh to the car body like so:[[File:Conforming Mesh Example 01.png|alt=Conforming Mesh|none|thumb|360x360px|A conforming mesh covering the outside edges of a UV mesh, extruded out in to the -Y axis slightly to avoid clipping through the car body, and with a ring of faces around the outside to avoid it looking like it&#039;s floating.|link=https://automation.gamepedia.com/File:Conforming_Mesh_Example_01.png]]Because this fixture is going to have a skinned mesh, we&#039;ll need to take that into consideration too. A skinned mesh will have any vertices that are farther than 1.5 mm in the -Y axis conform to the car in the same way as a conforming mesh, so we&#039;ll need to match this mesh structure such that the two meshes connect seamlessly.&lt;br /&gt;
&lt;br /&gt;
Here is the conforming mesh, with the skinned mesh and UV mesh:[[File:Conforming Mesh and Skinned Mesh Example.jpg|alt=Note that the inner most edge of the Conforming Mesh lines up perfectly with the outer most edge of the Skinned Mesh.|none|thumb|360x360px|Note that the innermost edge of the conforming mesh lines up perfectly with the outermost edge of the skinned mesh.|link=https://automation.gamepedia.com/File:Conforming_Mesh_and_Skinned_Mesh_Example.jpg]]This headlight fixture will also have a glass cover over it, so we&#039;ll add that in now. For this example, I&#039;ve added a small step to the inside of the conforming mesh to add a little bit of detail. The glass cover will then be placed on top. You&#039;ll also notice that the outside edge of this headlight has been extruded deep behind the surface; this is so it can be placed on top of other headlights or grilles and not appear to float.[[File:Conforming Mesh Example 02.jpg|alt=Left: Face View of the Conforming Mesh . Right: Wireframe View|none|thumb|Left: Face view of the conforming mesh. Right: Wireframe view.|link=https://automation.gamepedia.com/File:Conforming_Mesh_Example_02.jpg|360x360px]]&lt;br /&gt;
&lt;br /&gt;
===== Unwrapping the Mesh =====&lt;br /&gt;
The next step is to unwrap the mesh. We&#039;ll be using 3ds Max&#039;s default UVW Map modifier, setting it to &#039;box&#039; projection (cube projection in Blender), and setting the length, width, and height dimensions all to 2. This value is important if your fixture mod intends to use our default materials, because said materials assume that the UVs of the fixture conform to this setting.&lt;br /&gt;
&lt;br /&gt;
Basically, what this is doing is UV mapping the mesh so that the 0-1 areas of the UV map are 2cm².[[File:Conforming Mesh Example 03.jpg|alt=The finished Conforming Mesh with an UVW Map modifier set to a box 2,2,2 projection.|none|thumb|The finished conforming mesh with a UVW Map modifier set to a 2, 2, 2 box projection.|link=https://automation.gamepedia.com/File:Conforming_Mesh_Example_03.jpg|360x360px]]We&#039;ll go over the import process and material setup after we&#039;ve created all of the meshes.&lt;br /&gt;
&lt;br /&gt;
==== Creating a Skinned Mesh ====&lt;br /&gt;
A skinned mesh is the most complicated mesh in a fixture. It follows the same rules as the conforming Mesh in terms of overall mesh structure and UV mapping, but the manner in which it conforms to the car is more nuanced.&lt;br /&gt;
&lt;br /&gt;
The vertices of a skinned Mesh will conform to the car in the same manner as the conforming mesh if those vertices are within 1.5 mm of the Y axis. This is useful for having these parts of the mesh connect to a conforming mesh, as they will conform the same in that area.[[File:Skinned Mesh Example 01.jpg|alt=Note that only the vertices on the lower most edge of this mesh will conform as if they were part of a Conforming Mesh, as they are within 0.15cm of the Y-axis. Also note that these vertices will maintain this offset from the Y-axis even after they have conformed to the car. Thus the Conforming Mesh will need to extrude out at least as far, to cover up these vertices.|none|thumb|Note that only the vertices on the lowermost edge of this mesh will conform as if they were part of a conforming mesh, as the rest are farther than 1.5 mm from the body surface. Also note that these vertices will maintain this offset from the Y axis even after they have conformed to the car; thus, the conforming mesh will need to extend at least as far to connect to these vertices.|link=https://automation.gamepedia.com/File:Skinned_Mesh_Example_01.jpg|480x480px]]The rest of the mesh will conform relative to their skinned bones and weights.  For this example, I&#039;ve created a Skinned Mesh with 4 bones, and weighted them like so:&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;360&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
File:Skinned Mesh Example 02.jpg|Each bone is weighted to the parts of the skinned mesh that should retain their proportions, with the intermediary vertices weighted smoothly between bones.&lt;br /&gt;
File:Animated2.gif|The bones in motion.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;The bones are free-floating and are parented only to the root bone. In 3ds Max, usually use Dummy Actors for my bones, but you can use a box mesh or whatever works.&lt;br /&gt;
&lt;br /&gt;
Take note that the vertices that conform to the mesh do so in the same manner as the conforming mesh, but are still weighted to their respective bones. This is because Automation&#039;s fixture system uses the distance that these vertices were morphed to determine how far back to conform each bone. If these vertices were weighted to the root bone instead, the fixture would not know how far to morph the skinned sections of the mesh.&lt;br /&gt;
&lt;br /&gt;
Unreal Engine 4 also requires a bone hierarchy, so I&#039;ve made a root bone and parented all of the other bones to it.  The root bone should not be weighted to any vertices here, though with other fixtures, weighting vertices to the root bone makes them conform even if they&#039;re outside of the 1.5 mm threshold. Whatever you do, though, &#039;&#039;&#039;&#039;&#039;do not&#039;&#039;&#039;&#039;&#039; weight a vertex to the root bone and another bone at the same time, as the vertex in question will snap to the fixture&#039;s origin point&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;360&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:Skinned Mesh Example 03.jpg|From a front view, you can see that the bones are centred on their respective elements.&lt;br /&gt;
File:Skinned Mesh Example 04.jpg|Top view.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;Take a look at the image below of the skinned mesh on the car (there&#039;s also a conforming mesh there around the edge, but we&#039;ll ignore that for now). The outer ring of vertices is conforming to the car as if it was part of a conforming mesh, and the rest of the mesh is conforming as per their bone weights:&lt;br /&gt;
&lt;br /&gt;
[[File:FixtureOnCar01.png|link=https://automation.gamepedia.com/File:FixtureOnCar01.png|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
===== Unwrapping the Mesh =====&lt;br /&gt;
Assign the same box map (with a scale of 2, 2, 2) as you did with the conforming mesh.&lt;br /&gt;
&lt;br /&gt;
==== Creating an Additional Mesh ====&lt;br /&gt;
An &#039;&#039;Additional Mesh&#039;&#039; is a simple mesh with no skin or morphs that does not deform in any way.  The Additional Mesh &#039;&#039;does&#039;&#039; rotate around the fixture position, and will maintain its relative position from its pivot point.&lt;br /&gt;
&lt;br /&gt;
Take this exhaust fixture as an example. Note that the entirety of the exhaust is offset from the pivot point—this is so that it can hang under the car, since the fixture itself must have its pivot point &#039;&#039;on&#039;&#039; the car.&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;360&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:Additional Mesh Example 01.jpg|3D view.&lt;br /&gt;
File:Additional Mesh Example 02.jpg|Front view.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Additional Considerations ===&lt;br /&gt;
&lt;br /&gt;
==== Unwrapping reflector lights ====&lt;br /&gt;
If your fixture is a light that contains a reflector surface (such as an incandescent bulb), there are some special considerations. &lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at this fixture as an example:&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot_2021-01-18_131739.png|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
Several things are of note with regards to light components.&lt;br /&gt;
&lt;br /&gt;
The reflector shader material looks at the UVs of the mesh to determine how to render it.&lt;br /&gt;
&lt;br /&gt;
* The bulbs themselves should be unwrapped as a single point with zero scale exactly at UV coordinate &amp;lt;code&amp;gt;0.5,0.5&amp;lt;/code&amp;gt; (the UV is scaled to a single point in the very center). &lt;br /&gt;
**The reflector shader is a single material, so to render the bulb slightly transparent and with a colour to it, the shader renders all faces unwrapped at &amp;lt;code&amp;gt;0.5,0.5&amp;lt;/code&amp;gt; as a bulb. Because the shader has such a tight tolerance for the UV coordinates, this doesn&#039;t affect other overlapping surfaces within the UV map.&lt;br /&gt;
&amp;lt;gallery heights=&amp;quot;120&amp;quot;&amp;gt;&lt;br /&gt;
File:Wiki Fixturemods Lights ReflectorUVs 01.jpg&lt;br /&gt;
File:Wiki Fixturemods Lights ReflectorUVs 01B.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
* The main reflector surface should be unwrapped such that each quad face fills the entirety of the &amp;lt;code&amp;gt;0-1&amp;lt;/code&amp;gt; UV coordinate space (&amp;lt;code&amp;gt;Reset UV projection&amp;lt;/code&amp;gt; in Blender).&lt;br /&gt;
**The reflector shader has a reflector dome texture which it uses, so any surface you wish to have this dome texture on it should be unwrapped as such.&lt;br /&gt;
&amp;lt;gallery heights=&amp;quot;120&amp;quot;&amp;gt;&lt;br /&gt;
File:Wiki Fixturemods Lights ReflectorUVs 04.jpg&lt;br /&gt;
File:Wiki Fixturemods Lights ReflectorUVs 04B.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
* Any other part of the reflector that you want to have vertical or horizontal lines on should be unwrapped as a single point with zero scale exactly at UV coordinate &amp;lt;code&amp;gt;0,1&amp;lt;/code&amp;gt; (the UV is scaled to a single point in the bottom left corner).&lt;br /&gt;
**The shader will dynamically render a corrugated effect on any UV at the bottom left corner.&lt;br /&gt;
&amp;lt;gallery heights=&amp;quot;120&amp;quot;&amp;gt;&lt;br /&gt;
File:Wiki Fixturemods Lights ReflectorUVs 02.jpg&lt;br /&gt;
File:Wiki Fixturemods Lights ReflectorUVs 02B.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
* Parts of the reflector that should be perfectly flat should be unwrapped as a single point with zero scale exactly at UV coordinate &amp;lt;code&amp;gt;0,0&amp;lt;/code&amp;gt; (the UV is scaled to a single point in the top left corner).&lt;br /&gt;
&amp;lt;gallery heights=&amp;quot;120&amp;quot;&amp;gt;&lt;br /&gt;
File:Wiki Fixturemods Lights ReflectorUVs 03.jpg&lt;br /&gt;
File:Wiki Fixturemods Lights ReflectorUVs 03B.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Applying materials to a light component ====&lt;br /&gt;
The bulb and reflector for each light should be assigned to the same material slot to save on draw calls. Each separate light, however, should be a different material slot for freedom of choice in terms of light configurations.&lt;br /&gt;
&lt;br /&gt;
==== Unwrapping radial glass ====&lt;br /&gt;
For light glass with a radial pattern, unwrap the glass so that the radial pattern fills the whole UV space as a single texture.&lt;br /&gt;
&lt;br /&gt;
== Fixture setup within Unreal Engine 4 ==&lt;br /&gt;
This step assumes that the correct version of Unreal Engine is installed and configured correctly. See [[Modding]] for more information on the correct version of Unreal Engine to use and how to view mod content folders. Also see [https://docs.unrealengine.com/latest/INT/Engine/Content/FBX/StaticMeshes/#importmesh the official Unreal Engine documentation on importing FBX files] for more information.&lt;br /&gt;
&lt;br /&gt;
=== Creating your Fixture Mod Plugin ===&lt;br /&gt;
Using the correct version of Unreal Engine, with our modding tool project opened and plugins loaded, select &#039;Create Mod&#039; from the top menu bar.&lt;br /&gt;
[[File:UE4ModCreation 02.gif|none|thumb|1) Select the blank project. 2) Give your mod a unique name. 3) Fill out your name and a description of this mod. 4) Create the mod.|360x360px|alt=]]&lt;br /&gt;
&lt;br /&gt;
=== Importing Files ===&lt;br /&gt;
There are several ways to import your sub-meshes to this mod folder.  The easiest is to simply navigate to the folder you want to import your files in the Content Browser, then click the &#039;Import&#039; button to import files to that folder, select the meshes you want to import, and click &#039;Open&#039;.&lt;br /&gt;
[[index.php?title=File:Import_files_button.gif|none|thumb|360x360px]]&lt;br /&gt;
&lt;br /&gt;
UV meshes, conforming meshes, and additional meshes should be imported as static meshes (&#039;Skeletal Mesh&#039; is un-ticked in the import dialogue), while skinned meshes should be imported as skeletal meshes (&#039;Skeletal Mesh&#039; is ticked in the import dialogue).&lt;br /&gt;
Note that &#039;Skeletal Meshes&#039; will import with additional &#039;Skeleton&#039; and &#039;Physics Asset&#039; files. &#039;&#039;These are important&#039;&#039;. You don&#039;t need to do anything with them, but don&#039;t delete them.[[File:Import Dialogue Example 01.jpg|alt=An example import dialogue for a Skinned Mesh. This should be un-ticked for other sub-mesh types|none|thumb|An example import dialogue for a skinned mesh. This should be unticked for other sub-mesh types.|link=https://automation.gamepedia.com/File:Import_Dialogue_Example_01.jpg|383x383px]]Note that &#039;Import Materials&#039; is also unticked, as we do not want to import any materials from the modelling software.&lt;br /&gt;
&lt;br /&gt;
The final set of imported files in Unreal Engine should look like this:[[File:Example Imported.jpg|alt=Note that this example does not include an Additional Mesh.|none|thumb|Note that this example does not include an additional mesh.|link=https://automation.gamepedia.com/File:Example_Imported.jpg|392x392px]]Once your files are imported, it&#039;s important to set &#039;CPU Access&#039; to true for &#039;&#039;all static meshes&#039;&#039;.  You can do this by selecting every static mesh, right-clicking on it and selecting &#039;Set Meshes to Allow CPU Access&#039;.&lt;br /&gt;
[[File:Allow_CPU_access.jpg|link=https://automation.gamepedia.com/File:Allow_CPU_access.jpg|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
=== Default Materials and Material Slots ===&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note:&#039;&#039;&#039; This step assumes a basic understanding of UE4&#039;s [https://docs.unrealengine.com/latest/INT/Engine/Content/Types/StaticMeshes/Editor/ Static Mesh] editor and [https://docs.unrealengine.com/latest/INT/Engine/Animation/Persona/Modes/Mesh/ Skeletal Mesh] editor. Alternatively, material slots can be named appropriately within a 3D modelling program of choice.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The fixture material system in Automation relies on the name of the material slots within the meshes to define what materials can be applied to the fixture. Therefore, assigning the correct materials to the meshes is only important for the initial selection and loading of that fixture. In this manner, it is possible to have custom materials applied to your fixture with it still being compatible with Automation&#039;s fixture material menu.&lt;br /&gt;
&lt;br /&gt;
The fixture material menu in Automation relies on the names of the material slots on the sub-meshes to decide what category of materials the player can select from, with said names in the format &amp;lt;code&amp;gt;category_#&amp;lt;/code&amp;gt; (case-sensitive, with &#039;#&#039; being a single- or multiple-digit number of choice).&lt;br /&gt;
&lt;br /&gt;
The available categories for fixture materials are as follows:&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;240&amp;quot; heights=&amp;quot;120&amp;quot; perrow=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
File:Panel -.png|alt=panel|&amp;lt;code&amp;gt;panel&amp;lt;/code&amp;gt; (car body colours and some other opaque materials)&lt;br /&gt;
File:Opaqueglass -.png|alt=opaqueglass|&amp;lt;code&amp;gt;opaqueglass&amp;lt;/code&amp;gt; (opaque light glass; ideal for non-bulb lights)&lt;br /&gt;
File:Grill -.png|alt=grill|&amp;lt;code&amp;gt;grill&amp;lt;/code&amp;gt; (for transparent and opaque grill patterns in addition to &amp;lt;code&amp;gt;panel&amp;lt;/code&amp;gt; materials)&lt;br /&gt;
File:Glass -.png|alt=glass|&amp;lt;code&amp;gt;glass&amp;lt;/code&amp;gt; (transparent and translucent light glass in addition to &amp;lt;code&amp;gt;opaqueglass&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;panel&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;grill&amp;lt;/code&amp;gt; materials; this category provides the most freedom in terms of material choice)&lt;br /&gt;
File:Roundglass -.png|alt=roundglass|&amp;lt;code&amp;gt;roundglass&amp;lt;/code&amp;gt; (transparent light glass with radial detailing; this material applies to a mesh in the traditional UV sense, so use a planar map to unwrap this part of the mesh if you intend to use this)&lt;br /&gt;
File:Screenshot 2021-01-18 151206.png|alt=bulb|&amp;lt;code&amp;gt;bulb&amp;lt;/code&amp;gt; (for reflector lights; requires special UV unwrapping)&lt;br /&gt;
File:Numberplatenarrow -.png|alt=numberplatenarrow|&amp;lt;code&amp;gt;numberplatenarrow&amp;lt;/code&amp;gt; (North American license plate format)&lt;br /&gt;
File:Numberplatewide -.png|alt=numberplatewide|&amp;lt;code&amp;gt;numberplatewide&amp;lt;/code&amp;gt; (European license plate format)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;If you only have a single slot for a fixture material category, you still need a number for it. This number scales infinitely, meaning a fixture can have many separate slots of a single category assigned to it. A fixture&#039;s sub-meshes cannot share the same name on its material slots. If a fixture contains meshes with duplicate slot names, they will appear as a single material slot in-game (this can be used to merge slots on, for example, a conforming and additional mesh).&lt;br /&gt;
&lt;br /&gt;
With light fixtures, the names of the slots for the corresponding pair of glass and reflector material slot names should share the same number. For example, a fixture with two lights would have &amp;lt;code&amp;gt;glass_01&amp;lt;/code&amp;gt; (or just &amp;lt;code&amp;gt;glass_1&amp;lt;/code&amp;gt;) and &amp;lt;code&amp;gt;bulb_01&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;glass_02&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;bulb_02&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Below is a headlight&#039;s conforming mesh with its default materials set and the names of its material slots set to their respective types. The workflow for additional meshes should be identical.&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;360&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
File:Headlight Conforming Mesh Materials Setup 01.jpg&lt;br /&gt;
File:Material 02.jpg|Close-up view of the materials&lt;br /&gt;
&amp;lt;/gallery&amp;gt;The Skeletal Mesh editor looks a little different, but the slot naming conventions are the same:&lt;br /&gt;
&lt;br /&gt;
[[File:Skeletal_Mesh_Slot_example_01.jpg|link=https://automation.gamepedia.com/File:Skeletal_Mesh_Slot_example_01.jpg|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
==== Assigning Default Materials ====&lt;br /&gt;
While the slot names define what materials the player can choose from in-game, it doesn&#039;t define what material first gets loaded when the fixture is spawned in.&lt;br /&gt;
&lt;br /&gt;
When the fixture is first placed on the car, it loads the material that is set in that fixture&#039;s sub-mesh default materials.  For the sub-mesh examples above, you can see that not only have the slots been named appropriately, they also have materials assigned to them. Therefore, for all your fixture sub-meshes, default materials should be applied. (They&#039;re not strictly necessary, but your fixtures deserve better than the default grey checkered material.)&lt;br /&gt;
&lt;br /&gt;
To find where all the materials available in-game are, open up the &amp;lt;code&amp;gt;CarMaterialUtils&amp;lt;/code&amp;gt; blueprint (located in &amp;lt;code&amp;gt;Content&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;Utility&amp;lt;/code&amp;gt;), and open the &#039;Get Materials from Slot&#039; function.  There, you can view the list of each material that gets assigned to each slot, find them in the content folder, and assign them to your mesh as the default material. Note, though, that these steps are only to find where the default materials are. We do not use the Utils blueprint itself to assign materials to fixtures.&lt;br /&gt;
&lt;br /&gt;
To do this, open &amp;lt;code&amp;gt;CarMaterialUtils&amp;lt;/code&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
[[File:Carmaterialutils01.png|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
...then open &#039;Get Fixture Materials from Slot&#039;, located in &amp;lt;code&amp;gt;CarMaterialUtils&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;Car Painting&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;GetFixtureMaterialsFromSlot&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Carmaterialutils02.png|frameless|424x424px]]&lt;br /&gt;
&lt;br /&gt;
From there, select the corresponding materials array for the material category you want to apply to your sub-mesh from the Local Variables tab, and in the details panel you&#039;ll see an array of the materials used for that slot type. By expanding that, you can see the materials, and by selecting the small magnifying glass icon, view that material in the Content Browser, and from there apply it to your sub-mesh.&lt;br /&gt;
=== Creating and Setting Up the CPP File ===&lt;br /&gt;
Right-click in the content browser, and from the &#039;Camso&#039; sub-menu, select the &#039;Fixture Preview Data&#039; option. You should now have a fixture CPP file in your content browser.[[File:UE4ModCreation 25.gif|none|thumb]]&lt;br /&gt;
Open the CPP file. You should get something like this:&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_26.jpg|frameless|478x478px]]&lt;br /&gt;
&lt;br /&gt;
Fill out the &#039;Meshes&#039; section with the meshes you&#039;ve made, leave the &#039;Text&#039; data empty, generate a GUID and Family GUID (or copy the family GUID if you&#039;re making a variant), and set the &#039;Fixture&#039; settings to the relevant info as laid out near the top of this page. Finally, in the &#039;Path&#039; section, make sure there is one item in the array, and fill it with &amp;lt;code&amp;gt;A_Fixture&amp;lt;/code&amp;gt;. &#039;&#039;&#039;&#039;&#039;This is important; your fixture will not work if this is not filled correctly.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you&#039;re done, you should have something that looks like this:[[File:FixtureExampleSettings.png|alt=Fixture Blueprint|none|thumb|A fixture blueprint with only the relevant settings shown.|link=https://automation.gamepedia.com/File:FixtureExampleSettings.png|333x333px]]Be sure to save your files.&lt;br /&gt;
&lt;br /&gt;
===Creating the Thumbnail===&lt;br /&gt;
You should already be here by default when you load up the Automation project. Check the top tab in Unreal and make sure it says &#039;ThumbnailGeneratorLevel_Fixture&#039;. If you are not in the thumbnail generator level, open it from &amp;lt;code&amp;gt;ModTools/ThumbnailGeneratorLevel_Fixture&amp;lt;/code&amp;gt;.&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;360&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:UE4ModCreation 27.gif&lt;br /&gt;
File:UE4ModCreation 28.gif&lt;br /&gt;
&amp;lt;/gallery&amp;gt;From the top menu, open the drop-down next to the &#039;Play&#039; button and select &#039;Simulate&#039;. You should now be &#039;simulating&#039; the level.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_15.gif|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
===== Generate Fixture Thumbnails =====&lt;br /&gt;
Select the Fixture Thumbnail Generator from the World Outliner, and add your fixture blueprint to the &#039;Fixture Previews to Generate&#039; array (by first clicking the &#039;plus&#039; icon, then putting the fixtures you have created into the list). Repeat this process for every fixture you have created.  It does not matter if these fixtures are of the same family or not. Then, select &#039;Export Preview&#039; to generate the Thumbnail file.[[File:Fixture thumb gen 02.gif|none|thumb|alt=Note that I am connected to source control in this .gif, so I have red crosses in the top right corner of the items in the Content Browser. If you do not see this, do not worry. Also ignore that im putting blueprints in to the &#039;fixtures to generate&#039; array, this is depreciated. put your .cpp files in the &#039;previews&#039; one.|Note that I am connected to source control in this .gif, which explains the red checkmarks in the top right corner of the items in the Content Browser. If you do not see this, do not worry.|link=https://automation.gamepedia.com/File:Fixture_thumb_gen_02.gif|389x389px]]&lt;br /&gt;
&lt;br /&gt;
Because these files are created by the modding tools, they need to be manually saved (even if no asterisks are present).&lt;br /&gt;
&lt;br /&gt;
Your fixture mod is now ready to be shared!&lt;br /&gt;
&lt;br /&gt;
== Cooking and sharing your mod ==&lt;br /&gt;
To use the mod you have just created, you need to &#039;share&#039; it.  See [[Modding#Cooking|the main Modding page]] on how to share your mod.&lt;br /&gt;
&lt;br /&gt;
== Additional notes ==&lt;br /&gt;
*Fixtures should not have any vertices along the centre axes to avoid any miscalculation by the fixture gizmo. If the game casts a ray through the centre line of the car, it may miss the two halves of the car and return a false positive of the fixture being out of bounds. Offsetting your vertices slightly will avoid this. Additional meshes are the sole exception to this rule, as they do not conform in any way.&lt;br /&gt;
*If you&#039;re testing out a fixture and the meshes it uses haven&#039;t been finalized, you can use UE4&#039;s &#039;Reimport&#039; function to replace the existing mesh with a newer version of it. All the materials already assigned to the mesh will be preserved, as will its reference in the blueprint, saving you the trouble of manually reimporting a mesh and having to reassign materials and put it into the blueprint again. This works for [[Car Body Mods|car body meshes]] as well.&lt;br /&gt;
*Is CPU access still turned on for all static meshes? If your mod causes a crash or isn&#039;t visible in-game, this might be unticked. It does that sometimes; re-enable it and try again.&lt;br /&gt;
*If the first fixture in a thumbnail generation array ends up with an unusually sparkly thumbnail, this can be fixed by giving it an additional duplicate array entry (which forces UE4 to render the thumbnail again normally).&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[Badge Fixture Mods]]&lt;br /&gt;
*[[Mods and the Beam.NG Exporter]]&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=Fixture_Mods&amp;diff=4948</id>
		<title>Fixture Mods</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=Fixture_Mods&amp;diff=4948"/>
		<updated>2023-03-06T03:36:50Z</updated>

		<summary type="html">&lt;p&gt;Hannah: /* Modelling a fixture */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
A fixture is a collection of files, for which a &amp;lt;code&amp;gt;cpp&amp;lt;/code&amp;gt; file serves as the parent file. All the settings for a fixture are inside this &amp;lt;code&amp;gt;cpp&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
Fixtures are comprised of up to 4 optional sub-meshes (a [[#UV Mesh|UV mesh]], [[#Conforming Mesh|conforming mesh]], [[#Skinned Mesh|skinned mesh]], and [[#Additional Mesh|additional mesh]]) depending on the type of fixture:&lt;br /&gt;
&lt;br /&gt;
*A &#039;&#039;&#039;UV mesh&#039;&#039;&#039; is the silhouette of the cutout hole that a fixture makes in a car body.&lt;br /&gt;
*A &#039;&#039;&#039;conforming mesh&#039;&#039;&#039; (e.g. grilles, outer light glass, or body moulding) will deform to the shape of the body.&lt;br /&gt;
*A &#039;&#039;&#039;skinned mesh&#039;&#039;&#039; (e.g. light internals) will maintain its relative internal shapes, but will conform roughly to the shape of the body.&lt;br /&gt;
*An &#039;&#039;&#039;addditional mesh&#039;&#039;&#039; (e.g. mirrors) will retain its shape no matter where it is placed on the body.&lt;br /&gt;
&lt;br /&gt;
Fixtures need [[Material Slots|material slots]] set up correctly to look as intended, and [[Preview Thumbnails|preview thumbnails]] to appear in-game.&lt;br /&gt;
&lt;br /&gt;
==Performance considerations==&lt;br /&gt;
The performance of fixtures (and bodies) in UE4 is a constant discussion of balance.&lt;br /&gt;
&lt;br /&gt;
There is a performance impact to poly count with fixtures in that a ray is cast to the body for every vertex; the more vertices there are in a mesh, the longer it&#039;ll take to conform to the body. This is why you&#039;ll see more detailed fixtures sit there for a few seconds before conforming to the car.&lt;br /&gt;
&lt;br /&gt;
This is doubly so for fixtures that cut into the body—a UV mesh&#039;s vertices are raycast to the car on every frame while you&#039;re dragging the fixture around. UV meshes impact performance significantly with a higher poly count; try to keep UV meshes as low-poly as possible.&lt;br /&gt;
&lt;br /&gt;
=== For optimal performance: ===&lt;br /&gt;
&lt;br /&gt;
*Keep UV meshes lower than 100 triangles. With between 100 and 150 triangles, the fixture may lag when being dragged around; any higher and it will lag too much to use properly.&lt;br /&gt;
*Try to keep conforming meshes lower than 5,000 triangles. Higher-resolution meshes take longer than usual to conform to the car once they are placed.&lt;br /&gt;
&lt;br /&gt;
== Fixture blueprints ==&lt;br /&gt;
[[File:FixtureExampleSettings.png|alt=|right|frameless|700x700px]]A Fixture is composed of a Blueprint that contains the fixture settings and sub-meshes.&lt;br /&gt;
&lt;br /&gt;
=== Fixture Settings ===&lt;br /&gt;
Meshes (more on these below):&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Conforming Mesh&#039;&#039;&#039; - Defines the &#039;&#039;Static Mesh&#039;&#039; sub-mesh used by this fixture.&lt;br /&gt;
* &#039;&#039;&#039;UV Mesh&#039;&#039;&#039; - Defines the &#039;&#039;UV Mesh&#039;&#039; sub-mesh used by this fixture.&lt;br /&gt;
*&#039;&#039;&#039;Skinned Mesh&#039;&#039;&#039; - Defines the &#039;&#039;Skinned Mesh&#039;&#039; sub-mesh used by this fixture.&lt;br /&gt;
*&#039;&#039;&#039;Additional Mesh&#039;&#039;&#039; - Defines the &#039;&#039;Additional Mesh&#039;&#039; sub-mesh used by this fixture.&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&amp;lt;nowiki/&amp;gt;&amp;lt;nowiki/&amp;gt;&amp;lt;nowiki/&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Text:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Text Data&#039;&#039;&#039; - Only used for typeable text.&lt;br /&gt;
&lt;br /&gt;
Fixture Preview:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;GUID&#039;&#039;&#039; - Unique identifier for this fixture.&lt;br /&gt;
*&#039;&#039;&#039;Family GUID&#039;&#039;&#039; - Identifier for this fixture family. This should be unique to every other family GUID, and identical to every other variant of this fixture.&lt;br /&gt;
&lt;br /&gt;
Fixture:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Fixture Type&#039;&#039;&#039; - What category this fixture should be in (e.g. headlight, aerial, grille, etc).&lt;br /&gt;
*&#039;&#039;&#039;Centre Snap Distance&#039;&#039;&#039; - Defines at what distance, in cm, the fixture will snap to the centre line of the car (10 by default).&lt;br /&gt;
*&#039;&#039;&#039;Lock Normal to Cardinal&amp;lt;nowiki/&amp;gt;&#039;&#039;&#039; - Determines whether the fixt&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;&#039;&#039;ure will conform t&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;&#039;&#039;o one of the five cardinal directions in 3D space (forwards, backwards, left, right, or upwards) by default. A non-cardinal-locked fixture will simply face in the direction of the surface on which it&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;&#039;&#039; is placed. Cardinal locking is useful for fixtures such as lights and mirrors, since it ensures that they don&#039;t face in (or conform to) odd directions.&lt;br /&gt;
*&#039;&#039;&#039;Export Breakability Override&#039;&#039;&#039; - Certain categories of fixtures can break off when damaged in BeamNG.drive. This setting lets you force a fixture to be breakable or unbreakable.&lt;br /&gt;
*&#039;&#039;&#039;Fixture Shape&#039;&#039;&#039; - Used to filter fixtures by rectangular, round, or complex shapes. Mostly used for lights.&lt;br /&gt;
*&#039;&#039;&#039;Year&#039;&#039;&#039; - Used to filter fixtures by year. Useful for era-specific fixtures, such as sealed beam headlights.&lt;br /&gt;
*&#039;&#039;&#039;Use This Fixture as Family Preview&#039;&#039;&#039; - if you have many variants of a fixture, enabling this setting for one variant will make it the one that shows up in the main fixture menu (overriding the first fixture as per alphabetical order).&lt;br /&gt;
&lt;br /&gt;
Path:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Fixture Class&#039;&#039;&#039; - Set this to &amp;lt;code&amp;gt;A_Fixture&amp;lt;/code&amp;gt; to ensure that the fixture works as intended in-game.&lt;br /&gt;
&lt;br /&gt;
=== Fixture Sub-Meshes ===&lt;br /&gt;
&lt;br /&gt;
==== UV Mesh ====&lt;br /&gt;
The &#039;&#039;UV Mesh&#039;&#039; (imported as a &#039;&#039;&#039;Static Mesh&#039;&#039;&#039; in UE4) is a flat silhouette that tells the fixture to cut a hole into the car body.  You will only need vertices along the outside edges of the UV mesh, and a UV mesh is only required if your fixture intends to cut into the car. Unlike other meshes, UV meshes do not require any UV maps.&lt;br /&gt;
&lt;br /&gt;
==== Conforming Mesh ====&lt;br /&gt;
The &#039;&#039;Conforming Mesh&#039;&#039; (imported as a &#039;&#039;&#039;Static Mesh&#039;&#039;&#039; in UE4) is a mesh where each vertex is deformed to match the surface of the car body. It is also a required mesh if the fixture has a UV mesh, as the conforming mesh is used to cover the jagged edge of the hole created by the UV mesh.  A conforming mesh that could logically be placed on top of other fixtures should also have its outside edges extend beneath the body; the default distance for this extrusion is slightly farther than 10 cm.&lt;br /&gt;
&lt;br /&gt;
==== Skinned Mesh ====&lt;br /&gt;
The &#039;&#039;Skinned Mesh&#039;&#039; (imported as a &#039;&#039;&#039;Skeletal Mesh&#039;&#039;&#039; in UE4) is used when you have parts of a fixture that should conform to the rough shape of the car, but also retain the dimensions and ratios of any individual components. A skinned mesh will have a bone for each element that is parented to a root bone.&lt;br /&gt;
&lt;br /&gt;
Some vertices of a skinned mesh will conform to the car as with a conforming mesh if they are a) within 1.5 mm of the car body surface, whether weighted to any bones or not, b) weighted to the root bone, or c) not weighted to any bones. Because of the former, there may be a small gap of at least 1 mm between the edge of the skinned mesh and the car body. To cover up this gap, a conforming mesh is often used to connect the edge of the skinned mesh with the car body.&lt;br /&gt;
&lt;br /&gt;
==== Additional Mesh ====&lt;br /&gt;
The &#039;&#039;Additional Mesh&#039;&#039; (imported as a &#039;&#039;&#039;Static Mesh&#039;&#039;&#039; in UE4) does not deform in any way and will remain in place relative to the location of the fixture.  An additional mesh has no skin or bones, and no part of it will deform to the shape of the car. Examples of additional meshes are exhaust tips, wing mirrors, and most fixtures intended for 3D placement.&lt;br /&gt;
&lt;br /&gt;
== Modelling a fixture ==&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note:&#039;&#039;&#039; This how-to assumes a general understanding of polygonal 3D modelling software. Any 3D modelling package will do, as no custom scripts are required to author fixture meshes.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hard Rooster has created a full video series for fixture modding in Blender. The full series can be found [https://www.youtube.com/playlist?list=PLb7obMX2SCf0V3dlxfOHnB9eKtP3c_KEZ here.]&lt;br /&gt;
=== Fixture Orientation ===&lt;br /&gt;
Fixtures are oriented in the following manner in a 3D modelling program. Note how the negative Y axis faces forwards.&lt;br /&gt;
[[File:Fixture_Orientation_Example.jpg|link=https://automation.gamepedia.com/File:Fixture_Orientation_Example.jpg|alt=Fixture Orientation Example|none|thumb|360x360px|Fixtures come out of the car towards the -Y axis. -X is left, +X is right, +Z is up, and -Z is down.]]&lt;br /&gt;
&lt;br /&gt;
=== Fixture Y-Axis Thresholds ===&lt;br /&gt;
There are 2 important values to take in to note for fixture sub-meshes.&lt;br /&gt;
* A skinned mesh will have some of its vertices conform to the car as if it were a conforming mesh, but only if those vertices are within &#039;&#039;&#039;&#039;&#039;1.5 mm&#039;&#039;&#039;&#039;&#039; from Y=0. A vertex with a Y axis value of 1.5 mm will conform to the car as if it were part of a conforming mesh, and a vertex with a Y axis value of 2.0 mm will not.&lt;br /&gt;
* The outer edges of most vanilla conforming meshes (and inner edges of things with holes in them, like open grilles) usually sit 10 cm below the surface (or 10 cm inwards along the Y axis). This stops fixtures from appearing to &#039;float&#039; when put on top of other fixtures that cut into cars and leave holes, such as grilles and moulding. This is by no means a hard-and-fast rule; specific applications may call for fixtures to extend anywhere from 1 to 100 cm into the body.&lt;br /&gt;
&lt;br /&gt;
It&#039;s a bit confusing at first, but following these rules will ensure your fixture works correctly.&lt;br /&gt;
&lt;br /&gt;
=== Deciding What Sub-Meshes You&#039;ll Need ===&lt;br /&gt;
Fixtures have a fairly convoluted list of things that are or are not needed, depending on what&#039;s in the fixture.&lt;br /&gt;
*If you have a [[Fixture Mods#UV Mesh|UV mesh]], you need a [[Fixture Mods#Conforming Mesh|conforming mesh]] to cover the hole.&lt;br /&gt;
*If you have a conforming mesh, it isn&#039;t required to have anything else unless said Conforming Mesh has parts that go below the car body mesh (in which case you&#039;ll need a UV Mesh to cut a hole out for it).&lt;br /&gt;
*If you have a [[Fixture Mods#Skinned Mesh|skinned mesh]], you&#039;ll need a conforming mesh and a UV mesh, as a skinned mesh can only be inside the car. Therefore, a UV mesh is needed to cut out that hole, and a conforming mesh is needed to cover the edge of that hole.&lt;br /&gt;
*If you have an [[Fixture Mods#Additional Mesh|additional mesh]] positioned above the car body, nothing else is needed. If the additional mesh is obscured by the car body mesh, you&#039;ll need a UV mesh to cut out the hole for that (and by extension, a conforming mesh to line that hole).&lt;br /&gt;
&lt;br /&gt;
For this example, we&#039;ll make the components for the headlight fixture below (a &#039;&#039;Conforming Mesh&#039;&#039;, &#039;&#039;UV Mesh&#039;&#039;, and a &#039;&#039;Skinned mesh&#039;&#039; with 4 bones).&lt;br /&gt;
&lt;br /&gt;
[[File:Fixture_On_Car_Example.jpg|link=https://automation.gamepedia.com/File:Fixture_On_Car_Example.jpg|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
=== Creating the Sub-Meshes ===&lt;br /&gt;
&lt;br /&gt;
==== Creating a UV Mesh ====&lt;br /&gt;
The UV mesh defines the [[wikipedia:Texel_(graphics)|texels]] (texture pixles) of the car body that will be cut out by the fixture. Each vertex is used as a point of reference, and lines are drawn between them along the edges of the UV mesh to define the final cutout shape. If there are too few vertices, the cutout shape may become distorted, since the vertices are projected onto the car texture before being cut out (with the actual edges of the UV mesh not being used). This, combined with the round &amp;quot;pelt unwrap&amp;quot; nature of car bodies&#039; UV maps, can result in waviness between vertices in the cutout shape. This is more pronounced on larger fixtures, or fixtures that are stretched to several times their original size.&lt;br /&gt;
&lt;br /&gt;
A UV mesh should have vertices at regular intervals around the outside to determine the cutout shape of the fixture. Any vertices that aren&#039;t on an edge are irrelevant and will only make the fixture slower to render. Note that UV meshes can be made in [[wikipedia:Annulus_(mathematics)|annulus]] shapes with holes in the middle, like a doughnut.&lt;br /&gt;
&lt;br /&gt;
The UV mesh should be roughly halfway between the outside edge of the skinned mesh (which should share its edge with the inside edge of the conforming mesh) and the outside edge of the conforming mesh.&lt;br /&gt;
&lt;br /&gt;
See below for the example UV mesh in comparison to its respective conforming mesh.&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;360&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:UV Mesh Example.jpg|An example UV mesh.&lt;br /&gt;
File:UV Mesh - Conforming Comparison.png|Note that the edges of the UV mesh are completely encompassed by the conforming mesh. The skinned mesh for this fixture should line up with the interior edge of the conforming mesh.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;Note that the centre vertices may need to be offset slightly from their respective axes; see [[Fixture Mods#Additional Notes|Additional Notes]] for more information.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re having trouble with wavy cutouts on cars, segment your UV mesh into quads instead of a starburst pattern, as shown here.&lt;br /&gt;
[[File:Testingses2.jpg|none|thumb|Left: A &#039;starburst&#039; UV mesh with an unwanted wavy cutout. Right: The same fixture, but with a different UV mesh flow and no cutout problems.|480x480px|alt=]]&lt;br /&gt;
&lt;br /&gt;
==== Creating a Conforming Mesh ====&lt;br /&gt;
A conforming mesh is a single basic polygonal mesh that conforms to the shape of the car body.&lt;br /&gt;
&lt;br /&gt;
The conforming mesh should have enough polygons at regular intervals so that it doesn&#039;t appear blocky or clip through the car body.  The more polygons you add to the conforming mesh, the longer it will take to calculate its final morph position, but this does not impact performance when it is dragged around.&lt;br /&gt;
&lt;br /&gt;
For this example fixture, we&#039;ll be using a conforming mesh for two purposes:&lt;br /&gt;
&lt;br /&gt;
*Connecting the skinned mesh to the car body.&lt;br /&gt;
*Covering the cutout hole created by the UV mesh.&lt;br /&gt;
&lt;br /&gt;
However, a conforming mesh can be used without a skinned mesh, such as:&lt;br /&gt;
*for trim pieces, moulding, or badges.&lt;br /&gt;
*for vents and grilles, when used with a UV mesh.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll start by using the UV mesh as our reference point. Our conforming mesh needs to cover the hole created here, so we&#039;ll make a ring of faces to surround the UV mesh with enough width to not allow any visible gaps between the cutout and the conforming mesh. We&#039;ll extend this edge out along the -Y axis (forward from the car body) by a millimetre or two to prevent faces from clipping through the car body, and we&#039;ll extrude a ring of faces around the outside of it to connect the mesh to the car body like so:[[File:Conforming Mesh Example 01.png|alt=Conforming Mesh|none|thumb|360x360px|A conforming mesh covering the outside edges of a UV mesh, extruded out in to the -Y axis slightly to avoid clipping through the car body, and with a ring of faces around the outside to avoid it looking like it&#039;s floating.|link=https://automation.gamepedia.com/File:Conforming_Mesh_Example_01.png]]Because this fixture is going to have a skinned mesh, we&#039;ll need to take that into consideration too. A skinned mesh will have any vertices that are farther than 1.5 mm in the -Y axis conform to the car in the same way as a conforming mesh, so we&#039;ll need to match this mesh structure such that the two meshes connect seamlessly.&lt;br /&gt;
&lt;br /&gt;
Here is the conforming mesh, with the skinned mesh and UV mesh:[[File:Conforming Mesh and Skinned Mesh Example.jpg|alt=Note that the inner most edge of the Conforming Mesh lines up perfectly with the outer most edge of the Skinned Mesh.|none|thumb|360x360px|Note that the innermost edge of the conforming mesh lines up perfectly with the outermost edge of the skinned mesh.|link=https://automation.gamepedia.com/File:Conforming_Mesh_and_Skinned_Mesh_Example.jpg]]This headlight fixture will also have a glass cover over it, so we&#039;ll add that in now. For this example, I&#039;ve added a small step to the inside of the conforming mesh to add a little bit of detail. The glass cover will then be placed on top. You&#039;ll also notice that the outside edge of this headlight has been extruded deep behind the surface; this is so it can be placed on top of other headlights or grilles and not appear to float.[[File:Conforming Mesh Example 02.jpg|alt=Left: Face View of the Conforming Mesh . Right: Wireframe View|none|thumb|Left: Face view of the conforming mesh. Right: Wireframe view.|link=https://automation.gamepedia.com/File:Conforming_Mesh_Example_02.jpg|360x360px]]&lt;br /&gt;
&lt;br /&gt;
===== Unwrapping the Mesh =====&lt;br /&gt;
The next step is to unwrap the mesh. We&#039;ll be using 3ds Max&#039;s default UVW Map modifier, setting it to &#039;box&#039; projection (cube projection in Blender), and setting the length, width, and height dimensions all to 2. This value is important if your fixture mod intends to use our default materials, because said materials assume that the UVs of the fixture conform to this setting.&lt;br /&gt;
&lt;br /&gt;
Basically, what this is doing is UV mapping the mesh so that the 0-1 areas of the UV map are 2cm².[[File:Conforming Mesh Example 03.jpg|alt=The finished Conforming Mesh with an UVW Map modifier set to a box 2,2,2 projection.|none|thumb|The finished conforming mesh with a UVW Map modifier set to a 2, 2, 2 box projection.|link=https://automation.gamepedia.com/File:Conforming_Mesh_Example_03.jpg|360x360px]]We&#039;ll go over the import process and material setup after we&#039;ve created all of the meshes.&lt;br /&gt;
&lt;br /&gt;
==== Creating a Skinned Mesh ====&lt;br /&gt;
A skinned mesh is the most complicated mesh in a fixture. It follows the same rules as the conforming Mesh in terms of overall mesh structure and UV mapping, but the manner in which it conforms to the car is more nuanced.&lt;br /&gt;
&lt;br /&gt;
The vertices of a skinned Mesh will conform to the car in the same manner as the conforming mesh if those vertices are within 1.5 mm of the Y axis. This is useful for having these parts of the mesh connect to a conforming mesh, as they will conform the same in that area.[[File:Skinned Mesh Example 01.jpg|alt=Note that only the vertices on the lower most edge of this mesh will conform as if they were part of a Conforming Mesh, as they are within 0.15cm of the Y-axis. Also note that these vertices will maintain this offset from the Y-axis even after they have conformed to the car. Thus the Conforming Mesh will need to extrude out at least as far, to cover up these vertices.|none|thumb|Note that only the vertices on the lowermost edge of this mesh will conform as if they were part of a conforming mesh, as the rest are farther than 1.5 mm from the body surface. Also note that these vertices will maintain this offset from the Y axis even after they have conformed to the car; thus, the conforming mesh will need to extend at least as far to connect to these vertices.|link=https://automation.gamepedia.com/File:Skinned_Mesh_Example_01.jpg|480x480px]]The rest of the mesh will conform relative to their skinned bones and weights.  For this example, I&#039;ve created a Skinned Mesh with 4 bones, and weighted them like so:&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;360&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
File:Skinned Mesh Example 02.jpg|Each bone is weighted to the parts of the skinned mesh that should retain their proportions, with the intermediary vertices weighted smoothly between bones.&lt;br /&gt;
File:Animated2.gif|The bones in motion.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;The bones are free-floating and are parented only to the root bone. In 3ds Max, usually use Dummy Actors for my bones, but you can use a box mesh or whatever works.&lt;br /&gt;
&lt;br /&gt;
Take note that the vertices that conform to the mesh do so in the same manner as the conforming mesh, but are still weighted to their respective bones. This is because Automation&#039;s fixture system uses the distance that these vertices were morphed to determine how far back to conform each bone. If these vertices were weighted to the root bone instead, the fixture would not know how far to morph the skinned sections of the mesh.&lt;br /&gt;
&lt;br /&gt;
Unreal Engine 4 also requires a bone hierarchy, so I&#039;ve made a root bone and parented all of the other bones to it.  The root bone should not be weighted to any vertices here, though with other fixtures, weighting vertices to the root bone makes them conform even if they&#039;re outside of the 1.5 mm threshold. Whatever you do, though, &#039;&#039;&#039;&#039;&#039;do not&#039;&#039;&#039;&#039;&#039; weight a vertex to the root bone and another bone at the same time, as the vertex in question will snap to the fixture&#039;s origin point&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;360&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:Skinned Mesh Example 03.jpg|From a front view, you can see that the bones are centred on their respective elements.&lt;br /&gt;
File:Skinned Mesh Example 04.jpg|Top view.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;Take a look at the image below of the skinned mesh on the car (there&#039;s also a conforming mesh there around the edge, but we&#039;ll ignore that for now). The outer ring of vertices is conforming to the car as if it was part of a conforming mesh, and the rest of the mesh is conforming as per their bone weights:&lt;br /&gt;
&lt;br /&gt;
[[File:FixtureOnCar01.png|link=https://automation.gamepedia.com/File:FixtureOnCar01.png|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
===== Unwrapping the Mesh =====&lt;br /&gt;
Assign the same box map (with a scale of 2, 2, 2) as you did with the conforming mesh.&lt;br /&gt;
&lt;br /&gt;
==== Creating an Additional Mesh ====&lt;br /&gt;
An &#039;&#039;Additional Mesh&#039;&#039; is a simple mesh with no skin or morphs that does not deform in any way.  The Additional Mesh &#039;&#039;does&#039;&#039; rotate around the fixture position, and will maintain its relative position from its pivot point.&lt;br /&gt;
&lt;br /&gt;
Take this exhaust fixture as an example. Note that the entirety of the exhaust is offset from the pivot point—this is so that it can hang under the car, since the fixture itself must have its pivot point &#039;&#039;on&#039;&#039; the car.&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;360&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:Additional Mesh Example 01.jpg|3D view.&lt;br /&gt;
File:Additional Mesh Example 02.jpg|Front view.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Additional Considerations ===&lt;br /&gt;
&lt;br /&gt;
==== Unwrapping reflector lights ====&lt;br /&gt;
If your fixture is a light that contains a reflector surface (such as an incandescent bulb), there are some special considerations. &lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at this fixture as an example:&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot_2021-01-18_131739.png|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
Several things are of note with regards to light components.&lt;br /&gt;
&lt;br /&gt;
The reflector shader material looks at the UVs of the mesh to determine how to render it.&lt;br /&gt;
&lt;br /&gt;
* The bulbs themselves should be unwrapped as a single point with zero scale exactly at UV coordinate &amp;lt;code&amp;gt;0.5,0.5&amp;lt;/code&amp;gt; (the UV is scaled to a single point in the very center). &lt;br /&gt;
**The reflector shader is a single material, so to render the bulb slightly transparent and with a colour to it, the shader renders all faces unwrapped at &amp;lt;code&amp;gt;0.5,0.5&amp;lt;/code&amp;gt; as a bulb. Because the shader has such a tight tolerance for the UV coordinates, this doesn&#039;t affect other overlapping surfaces within the UV map.&lt;br /&gt;
&amp;lt;gallery heights=&amp;quot;120&amp;quot;&amp;gt;&lt;br /&gt;
File:Wiki Fixturemods Lights ReflectorUVs 01.jpg&lt;br /&gt;
File:Wiki Fixturemods Lights ReflectorUVs 01B.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
* The main reflector surface should be unwrapped such that each quad face fills the entirety of the &amp;lt;code&amp;gt;0-1&amp;lt;/code&amp;gt; UV coordinate space (&amp;lt;code&amp;gt;Reset UV projection&amp;lt;/code&amp;gt; in Blender).&lt;br /&gt;
**The reflector shader has a reflector dome texture which it uses, so any surface you wish to have this dome texture on it should be unwrapped as such.&lt;br /&gt;
&amp;lt;gallery heights=&amp;quot;120&amp;quot;&amp;gt;&lt;br /&gt;
File:Wiki Fixturemods Lights ReflectorUVs 04.jpg&lt;br /&gt;
File:Wiki Fixturemods Lights ReflectorUVs 04B.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
* Any other part of the reflector that you want to have vertical or horizontal lines on should be unwrapped as a single point with zero scale exactly at UV coordinate &amp;lt;code&amp;gt;0,1&amp;lt;/code&amp;gt; (the UV is scaled to a single point in the bottom left corner).&lt;br /&gt;
**The shader will dynamically render a corrugated effect on any UV at the bottom left corner.&lt;br /&gt;
&amp;lt;gallery heights=&amp;quot;120&amp;quot;&amp;gt;&lt;br /&gt;
File:Wiki Fixturemods Lights ReflectorUVs 02.jpg&lt;br /&gt;
File:Wiki Fixturemods Lights ReflectorUVs 02B.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
* Parts of the reflector that should be perfectly flat should be unwrapped as a single point with zero scale exactly at UV coordinate &amp;lt;code&amp;gt;0,0&amp;lt;/code&amp;gt; (the UV is scaled to a single point in the top left corner).&lt;br /&gt;
&amp;lt;gallery heights=&amp;quot;120&amp;quot;&amp;gt;&lt;br /&gt;
File:Wiki Fixturemods Lights ReflectorUVs 03.jpg&lt;br /&gt;
File:Wiki Fixturemods Lights ReflectorUVs 03B.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Applying materials to a light component ====&lt;br /&gt;
The bulb and reflector for each light should be assigned to the same material slot to save on draw calls. Each separate light, however, should be a different material slot for freedom of choice in terms of light configurations.&lt;br /&gt;
&lt;br /&gt;
==== Unwrapping radial glass ====&lt;br /&gt;
For light glass with a radial pattern, unwrap the glass so that the radial pattern fills the whole UV space as a single texture.&lt;br /&gt;
&lt;br /&gt;
== Fixture setup within Unreal Engine 4 ==&lt;br /&gt;
This step assumes that the correct version of Unreal Engine is installed and configured correctly. See [[Modding]] for more information on the correct version of Unreal Engine to use and how to view mod content folders. Also see [https://docs.unrealengine.com/latest/INT/Engine/Content/FBX/StaticMeshes/#importmesh the official Unreal Engine documentation on importing FBX files] for more information.&lt;br /&gt;
&lt;br /&gt;
=== Creating your Fixture Mod Plugin ===&lt;br /&gt;
Using the correct version of Unreal Engine, with our modding tool project opened and plugins loaded, select &#039;Create Mod&#039; from the top menu bar.&lt;br /&gt;
[[File:UE4ModCreation 02.gif|none|thumb|1) Select the blank project. 2) Give your mod a unique name. 3) Fill out your name and a description of this mod. 4) Create the mod.|360x360px|alt=]]&lt;br /&gt;
&lt;br /&gt;
=== Importing Files ===&lt;br /&gt;
There are several ways to import your sub-meshes to this mod folder.  The easiest is to simply navigate to the folder you want to import your files in the Content Browser, then click the &#039;Import&#039; button to import files to that folder, select the meshes you want to import, and click &#039;Open&#039;.&lt;br /&gt;
[[index.php?title=File:Import_files_button.gif|none|thumb|360x360px]]&lt;br /&gt;
&lt;br /&gt;
UV meshes, conforming meshes, and additional meshes should be imported as static meshes (&#039;Skeletal Mesh&#039; is un-ticked in the import dialogue), while skinned meshes should be imported as skeletal meshes (&#039;Skeletal Mesh&#039; is ticked in the import dialogue).&lt;br /&gt;
Note that &#039;Skeletal Meshes&#039; will import with additional &#039;Skeleton&#039; and &#039;Physics Asset&#039; files. &#039;&#039;These are important&#039;&#039;. You don&#039;t need to do anything with them, but don&#039;t delete them.[[File:Import Dialogue Example 01.jpg|alt=An example import dialogue for a Skinned Mesh. This should be un-ticked for other sub-mesh types|none|thumb|An example import dialogue for a skinned mesh. This should be unticked for other sub-mesh types.|link=https://automation.gamepedia.com/File:Import_Dialogue_Example_01.jpg|383x383px]]Note that &#039;Import Materials&#039; is also unticked, as we do not want to import any materials from the modelling software.&lt;br /&gt;
&lt;br /&gt;
The final set of imported files in Unreal Engine should look like this:[[File:Example Imported.jpg|alt=Note that this example does not include an Additional Mesh.|none|thumb|Note that this example does not include an additional mesh.|link=https://automation.gamepedia.com/File:Example_Imported.jpg|392x392px]]Once your files are imported, it&#039;s important to set &#039;CPU Access&#039; to true for &#039;&#039;all static meshes&#039;&#039;.  You can do this by selecting every static mesh, right-clicking on it and selecting &#039;Set Meshes to Allow CPU Access&#039;.&lt;br /&gt;
[[File:Allow_CPU_access.jpg|link=https://automation.gamepedia.com/File:Allow_CPU_access.jpg|frameless|240x240px]]&lt;br /&gt;
&lt;br /&gt;
=== Default Materials and Material Slots ===&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note:&#039;&#039;&#039; This step assumes a basic understanding of UE4&#039;s [https://docs.unrealengine.com/latest/INT/Engine/Content/Types/StaticMeshes/Editor/ Static Mesh] editor and [https://docs.unrealengine.com/latest/INT/Engine/Animation/Persona/Modes/Mesh/ Skeletal Mesh] editor. Alternatively, material slots can be named appropriately within a 3D modelling program of choice.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The fixture material system in Automation relies on the name of the material slots within the meshes to define what materials can be applied to the fixture. Therefore, assigning the correct materials to the meshes is only important for the initial selection and loading of that fixture. In this manner, it is possible to have custom materials applied to your fixture with it still being compatible with Automation&#039;s fixture material menu.&lt;br /&gt;
&lt;br /&gt;
The fixture material menu in Automation relies on the names of the material slots on the sub-meshes to decide what category of materials the player can select from, with said names in the format &amp;lt;code&amp;gt;category_#&amp;lt;/code&amp;gt; (case-sensitive, with &#039;#&#039; being a single- or multiple-digit number of choice).&lt;br /&gt;
&lt;br /&gt;
The available categories for fixture materials are as follows:&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;240&amp;quot; heights=&amp;quot;120&amp;quot; perrow=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
File:Panel -.png|alt=panel|&amp;lt;code&amp;gt;panel&amp;lt;/code&amp;gt; (car body colours and some other opaque materials)&lt;br /&gt;
File:Opaqueglass -.png|alt=opaqueglass|&amp;lt;code&amp;gt;opaqueglass&amp;lt;/code&amp;gt; (opaque light glass; ideal for non-bulb lights)&lt;br /&gt;
File:Grill -.png|alt=grill|&amp;lt;code&amp;gt;grill&amp;lt;/code&amp;gt; (for transparent and opaque grill patterns in addition to &amp;lt;code&amp;gt;panel&amp;lt;/code&amp;gt; materials)&lt;br /&gt;
File:Glass -.png|alt=glass|&amp;lt;code&amp;gt;glass&amp;lt;/code&amp;gt; (transparent and translucent light glass in addition to &amp;lt;code&amp;gt;opaqueglass&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;panel&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;grill&amp;lt;/code&amp;gt; materials; this category provides the most freedom in terms of material choice)&lt;br /&gt;
File:Roundglass -.png|alt=roundglass|&amp;lt;code&amp;gt;roundglass&amp;lt;/code&amp;gt; (transparent light glass with radial detailing; this material applies to a mesh in the traditional UV sense, so use a planar map to unwrap this part of the mesh if you intend to use this)&lt;br /&gt;
File:Screenshot 2021-01-18 151206.png|alt=bulb|&amp;lt;code&amp;gt;bulb&amp;lt;/code&amp;gt; (for reflector lights; requires special UV unwrapping)&lt;br /&gt;
File:Numberplatenarrow -.png|alt=numberplatenarrow|&amp;lt;code&amp;gt;numberplatenarrow&amp;lt;/code&amp;gt; (North American license plate format)&lt;br /&gt;
File:Numberplatewide -.png|alt=numberplatewide|&amp;lt;code&amp;gt;numberplatewide&amp;lt;/code&amp;gt; (European license plate format)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;If you only have a single slot for a fixture material category, you still need a number for it. This number scales infinitely, meaning a fixture can have many separate slots of a single category assigned to it. A fixture&#039;s sub-meshes cannot share the same name on its material slots. If a fixture contains meshes with duplicate slot names, they will appear as a single material slot in-game (this can be used to merge slots on, for example, a conforming and additional mesh).&lt;br /&gt;
&lt;br /&gt;
With light fixtures, the names of the slots for the corresponding pair of glass and reflector material slot names should share the same number. For example, a fixture with two lights would have &amp;lt;code&amp;gt;glass_01&amp;lt;/code&amp;gt; (or just &amp;lt;code&amp;gt;glass_1&amp;lt;/code&amp;gt;) and &amp;lt;code&amp;gt;bulb_01&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;glass_02&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;bulb_02&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Below is a headlight&#039;s conforming mesh with its default materials set and the names of its material slots set to their respective types. The workflow for additional meshes should be identical.&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;360&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
File:Headlight Conforming Mesh Materials Setup 01.jpg&lt;br /&gt;
File:Material 02.jpg|Close-up view of the materials&lt;br /&gt;
&amp;lt;/gallery&amp;gt;The Skeletal Mesh editor looks a little different, but the slot naming conventions are the same:&lt;br /&gt;
&lt;br /&gt;
[[File:Skeletal_Mesh_Slot_example_01.jpg|link=https://automation.gamepedia.com/File:Skeletal_Mesh_Slot_example_01.jpg|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
==== Assigning Default Materials ====&lt;br /&gt;
While the slot names define what materials the player can choose from in-game, it doesn&#039;t define what material first gets loaded when the fixture is spawned in.&lt;br /&gt;
&lt;br /&gt;
When the fixture is first placed on the car, it loads the material that is set in that fixture&#039;s sub-mesh default materials.  For the sub-mesh examples above, you can see that not only have the slots been named appropriately, they also have materials assigned to them. Therefore, for all your fixture sub-meshes, default materials should be applied. (They&#039;re not strictly necessary, but your fixtures deserve better than the default grey checkered material.)&lt;br /&gt;
&lt;br /&gt;
To find where all the materials available in-game are, open up the &amp;lt;code&amp;gt;CarMaterialUtils&amp;lt;/code&amp;gt; blueprint (located in &amp;lt;code&amp;gt;Content&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;Utility&amp;lt;/code&amp;gt;), and open the &#039;Get Materials from Slot&#039; function.  There, you can view the list of each material that gets assigned to each slot, find them in the content folder, and assign them to your mesh as the default material. Note, though, that these steps are only to find where the default materials are. We do not use the Utils blueprint itself to assign materials to fixtures.&lt;br /&gt;
&lt;br /&gt;
To do this, open &amp;lt;code&amp;gt;CarMaterialUtils&amp;lt;/code&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
[[File:Carmaterialutils01.png|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
...then open &#039;Get Fixture Materials from Slot&#039;, located in &amp;lt;code&amp;gt;CarMaterialUtils&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;Car Painting&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;GetFixtureMaterialsFromSlot&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Carmaterialutils02.png|frameless|424x424px]]&lt;br /&gt;
&lt;br /&gt;
From there, select the corresponding materials array for the material category you want to apply to your sub-mesh from the Local Variables tab, and in the details panel you&#039;ll see an array of the materials used for that slot type. By expanding that, you can see the materials, and by selecting the small magnifying glass icon, view that material in the Content Browser, and from there apply it to your sub-mesh.&lt;br /&gt;
=== Creating and Setting Up the CPP File ===&lt;br /&gt;
Right-click in the content browser, and from the &#039;Camso&#039; sub-menu, select the &#039;Fixture Preview Data&#039; option. You should now have a fixture CPP file in your content browser.[[File:UE4ModCreation 25.gif|none|thumb]]&lt;br /&gt;
Open the CPP file. You should get something like this:&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_26.jpg|frameless|478x478px]]&lt;br /&gt;
&lt;br /&gt;
Fill out the &#039;Meshes&#039; section with the meshes you&#039;ve made, leave the &#039;Text&#039; data empty, generate a GUID and Family GUID (or copy the family GUID if you&#039;re making a variant), and set the &#039;Fixture&#039; settings to the relevant info as laid out near the top of this page. Finally, in the &#039;Path&#039; section, make sure there is one item in the array, and fill it with &amp;lt;code&amp;gt;A_Fixture&amp;lt;/code&amp;gt;. &#039;&#039;&#039;&#039;&#039;This is important; your fixture will not work if this is not filled correctly.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you&#039;re done, you should have something that looks like this:[[File:FixtureExampleSettings.png|alt=Fixture Blueprint|none|thumb|A fixture blueprint with only the relevant settings shown.|link=https://automation.gamepedia.com/File:FixtureExampleSettings.png|333x333px]]Be sure to save your files.&lt;br /&gt;
&lt;br /&gt;
===Creating the Thumbnail===&lt;br /&gt;
You should already be here by default when you load up the Automation project. Check the top tab in Unreal and make sure it says &#039;ThumbnailGeneratorLevel_Fixture&#039;. If you are not in the thumbnail generator level, open it from &amp;lt;code&amp;gt;DeveloperSandbox/ThumbnailGeneratorLevel_Fixture&amp;lt;/code&amp;gt;.&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;360&amp;quot; heights=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
File:UE4ModCreation 27.gif&lt;br /&gt;
File:UE4ModCreation 28.gif&lt;br /&gt;
&amp;lt;/gallery&amp;gt;From the top menu, open the drop-down next to the &#039;Play&#039; button and select &#039;Simulate&#039;. You should now be &#039;simulating&#039; the level.&lt;br /&gt;
&lt;br /&gt;
[[File:UE4ModCreation_15.gif|frameless|360x360px]]&lt;br /&gt;
&lt;br /&gt;
===== Generate Fixture Thumbnails =====&lt;br /&gt;
Select the Fixture Thumbnail Generator from the World Outliner, and add your fixture blueprint to the &#039;Fixture Previews to Generate&#039; array (by first clicking the &#039;plus&#039; icon, then putting the fixtures you have created into the list). Repeat this process for every fixture you have created.  It does not matter if these fixtures are of the same family or not. Then, select &#039;Export Preview&#039; to generate the Thumbnail file.[[File:Fixture thumb gen 02.gif|none|thumb|alt=Note that I am connected to source control in this .gif, so I have red crosses in the top right corner of the items in the Content Browser. If you do not see this, do not worry. Also ignore that im putting blueprints in to the &#039;fixtures to generate&#039; array, this is depreciated. put your .cpp files in the &#039;previews&#039; one.|Note that I am connected to source control in this .gif, which explains the red checkmarks in the top right corner of the items in the Content Browser. If you do not see this, do not worry.|link=https://automation.gamepedia.com/File:Fixture_thumb_gen_02.gif|389x389px]]&lt;br /&gt;
&lt;br /&gt;
Because these files are created by the modding tools, they need to be manually saved (even if no asterisks are present).&lt;br /&gt;
&lt;br /&gt;
Your fixture mod is now ready to be shared!&lt;br /&gt;
&lt;br /&gt;
== Cooking and sharing your mod ==&lt;br /&gt;
To use the mod you have just created, you need to &#039;share&#039; it.  See [[Modding#Cooking|the main Modding page]] on how to share your mod.&lt;br /&gt;
&lt;br /&gt;
== Additional notes ==&lt;br /&gt;
*Fixtures should not have any vertices along the centre axes to avoid any miscalculation by the fixture gizmo. If the game casts a ray through the centre line of the car, it may miss the two halves of the car and return a false positive of the fixture being out of bounds. Offsetting your vertices slightly will avoid this. Additional meshes are the sole exception to this rule, as they do not conform in any way.&lt;br /&gt;
*If you&#039;re testing out a fixture and the meshes it uses haven&#039;t been finalized, you can use UE4&#039;s &#039;Reimport&#039; function to replace the existing mesh with a newer version of it. All the materials already assigned to the mesh will be preserved, as will its reference in the blueprint, saving you the trouble of manually reimporting a mesh and having to reassign materials and put it into the blueprint again. This works for [[Car Body Mods|car body meshes]] as well.&lt;br /&gt;
*Is CPU access still turned on for all static meshes? If your mod causes a crash or isn&#039;t visible in-game, this might be unticked. It does that sometimes; re-enable it and try again.&lt;br /&gt;
*If the first fixture in a thumbnail generation array ends up with an unusually sparkly thumbnail, this can be fixed by giving it an additional duplicate array entry (which forces UE4 to render the thumbnail again normally).&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[Badge Fixture Mods]]&lt;br /&gt;
*[[Mods and the Beam.NG Exporter]]&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=Photoscenes&amp;diff=4947</id>
		<title>Photoscenes</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=Photoscenes&amp;diff=4947"/>
		<updated>2023-03-03T03:49:57Z</updated>

		<summary type="html">&lt;p&gt;Hannah: /* About the Photo_Scene_Parameter_Struct */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Photoscene support was added 25th October 2017.&lt;br /&gt;
&lt;br /&gt;
Beginning with LCv4.2, Automation supports player-customizable options for individual photoscenes.&lt;br /&gt;
&lt;br /&gt;
There is an example photoscene mod included in the sdk. open it to see how it works. It is also available on the Steam Workshop as a mod.&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
# create a mod&lt;br /&gt;
# create and design a level&lt;br /&gt;
# (Optional) Create a photoscene Widget for player-customization&lt;br /&gt;
#create and fill out a Photoscene Level Preview file.&lt;br /&gt;
## create Thumbnail(s)&lt;br /&gt;
# Share your mod&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
A photoscene mod contains a set of files that define how the photoscene works, and what it looks like. It consists of the following:&lt;br /&gt;
&lt;br /&gt;
# a level/scene&lt;br /&gt;
# a photoscene level preview file&lt;br /&gt;
# at least one thumbnail picture&lt;br /&gt;
# (optionally) a widget blueprint&lt;br /&gt;
&lt;br /&gt;
== Create A New Blank Mod ==&lt;br /&gt;
&lt;br /&gt;
* Create a new Mod from the Blank Template:&lt;br /&gt;
* [[File:UE4ModCreation_01.gif|frameless]]&amp;lt;br /&amp;gt;&lt;br /&gt;
* fill out the wizard and press Create Mod:&lt;br /&gt;
* [[File:UE4ModCreation_02.gif|frameless]]&lt;br /&gt;
&lt;br /&gt;
== Create a New Blank Level ==&lt;br /&gt;
Create a new blank level in your mod plugin folder. Name it whatever you&#039;d like.&lt;br /&gt;
&lt;br /&gt;
Open the level by double-clicking it.&lt;br /&gt;
&lt;br /&gt;
=== Design your level ===&lt;br /&gt;
do whatever you want to make your level be what you want.&lt;br /&gt;
&lt;br /&gt;
This is not anything particular to Automation, but UE4 in General. Watch some of Epic&#039;s tutorials on this: https://www.youtube.com/watch?v=cl_eoVfNDKU&amp;amp;list=PLZlv_N0_O1gak1_FoAJVrEGiLIploeF3F&lt;br /&gt;
&lt;br /&gt;
=== Level Creation Guidelines ===&lt;br /&gt;
[[File:UE4ModCreation_24.gif|frameless]]&lt;br /&gt;
* when you set the car to &#039;snap to ground&#039;, a ray is cast from 6m above the car, to 2m below the car. the car is &#039;placed&#039; on the first surface it collides with. Make sure any roofing or props in this range dont have collision enabled, or the car will mistake them for the ground.&lt;br /&gt;
* Search the &#039;&#039;&#039;content browser&#039;&#039;&#039; for &amp;lt;code&amp;gt;A Car Locator&amp;lt;/code&amp;gt;.&lt;br /&gt;
**These are the bookmarks for sub-level positions.&lt;br /&gt;
**Place them wherever you want the car to be, and in the &#039;&#039;&#039;Details&#039;&#039;&#039; panel, give them a name.&lt;br /&gt;
**This name will show up in the levels menu in the photoscene as one of the sub-level positions.&lt;br /&gt;
**You can have as many as you want.&lt;br /&gt;
**if none are present, the car will spawn at 0,0,0&lt;br /&gt;
*Currently, Stationary Lights are broken for Automation. use either static or movable lighting in your scenes.&lt;br /&gt;
&lt;br /&gt;
== Adding Customization Options To Your Photoscene ==&lt;br /&gt;
Beginning with LCv4.2, Automation supports player-customizable options for individual photoscenes.&lt;br /&gt;
&lt;br /&gt;
You can set up your photoscene to allow the player to change the colour of the lighting, the time of day, whether street lights are turned on, etc... the world is your oyster!&lt;br /&gt;
&lt;br /&gt;
=== Creating a Photoscene Widget ===&lt;br /&gt;
From the &amp;lt;code&amp;gt;Content Browser&amp;lt;/code&amp;gt;, add a Widget Blueprint to your mod folder.&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki_Photoscene_CreateWidgetBP.jpg|frameless|342x342px]]&lt;br /&gt;
&lt;br /&gt;
Open the Widget, and from the &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; menu, select &amp;lt;code&amp;gt;Reparent Blueprint&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki_Photoscene_ReparentWidgetBP01.jpg|frameless|342x342px]]&lt;br /&gt;
&lt;br /&gt;
In the menu that appears, find and select &amp;lt;code&amp;gt;Photo Scene Widget Base&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki_Photoscene_ReparentWidgetBP02.png|frameless|290x290px]]&lt;br /&gt;
&lt;br /&gt;
From the Hierarchy window, delete the &amp;lt;code&amp;gt;Canvas Panel&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki_Photoscene_DeleteCanvas.png|frameless|300x300px]]&lt;br /&gt;
&lt;br /&gt;
You are now free to design the buttons, sliders, and drop-down menus, etc... to your heart&#039;s content!&lt;br /&gt;
&lt;br /&gt;
=== Quick Tips: ===&lt;br /&gt;
&lt;br /&gt;
* Add all your buttons and options under a parent Vertical Box&lt;br /&gt;
** your widget will appear under the &amp;lt;code&amp;gt;Level Settings&amp;lt;/code&amp;gt; menu in the Photoscene, and as such do not have much horizontal space to work with.&lt;br /&gt;
** [[File:Wiki_Photoscene_Tips01.gif|frameless|300x300px]]&lt;br /&gt;
* There are a few preset buttons and sliders you can use that will make your life easier. These can be searched for and used from the Palette menu, but feel free to design your own. More info on the functionality of these widgets can be found on the [[About Photoscene Blueprints]] page:&lt;br /&gt;
** Slider_Photo_Manager&lt;br /&gt;
** UW_DropDown_Photoscene&lt;br /&gt;
** Photoscene_Checkbox_UW&lt;br /&gt;
** UW_TextBox_Photoscene&lt;br /&gt;
&lt;br /&gt;
== Widget Functionality ==&lt;br /&gt;
The &amp;lt;code&amp;gt;Photo Scene Widget Base&amp;lt;/code&amp;gt; parent type has a few function calls that you should be aware of, and use where necessary.&lt;br /&gt;
&lt;br /&gt;
From the &#039;Graph&#039; view, hover over the &amp;lt;code&amp;gt;Functions&amp;lt;/code&amp;gt; menu, and select &amp;lt;code&amp;gt;Override&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki_Photoscene_FunctionsOverride.png|frameless|433x433px]]&lt;br /&gt;
&lt;br /&gt;
Don&#039;t worry if these are overwhelming you, they will be explained more in-depth later.&lt;br /&gt;
&lt;br /&gt;
* Check If Ray Tracing Updated:&lt;br /&gt;
** Is called whenever any ray-tracing settings are updated.&lt;br /&gt;
** This should mostly be ignored, as it is an internal function, but can be overridden if you find yourself running into discrepancies between ray-tracing and non-ray-tracing in your level. &lt;br /&gt;
** Most discrepancies in ray-tracing are related to shadows and reflections, and as such, there is another function that should be used before this one. However, if you find yourself still struggling to get a scene looking good for both ray-traced and non-ray-traced graphics, then override this.&lt;br /&gt;
* Get Current Parameter Values:&lt;br /&gt;
** Is called by the Photoscene whenever it needs to ask this widget what the current UI values are.&lt;br /&gt;
** The &#039;Return&#039; node of this function is an array of &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt; values.&lt;br /&gt;
** This should be used to send the values of your UI to the Photoscene Preset&#039;s &#039;return&#039; node.&lt;br /&gt;
* Level Finished Loading:&lt;br /&gt;
** Is called whenever the Photoscene level has finished loading.&lt;br /&gt;
** This is a safe way to initialize any values you want to set for the level or UI. when the photoscene is loaded from the level selection menu or a preset.&lt;br /&gt;
* Load Parameter Values:&lt;br /&gt;
** Is called when the Photoscene is loading your level from a preset.&lt;br /&gt;
** Paths in an array of &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt; values.&lt;br /&gt;
** This should be used to initialize your UI values, and apply their related settings to your level.&lt;br /&gt;
* On Initialized:&lt;br /&gt;
** Should be ignored, as it is an internal function.&lt;br /&gt;
* Ray Tracing Settings Updated:&lt;br /&gt;
** Is a helper function designed to call whenever a ray-tracing setting related to reflections, refraction, or shadows, is adjusted.&lt;br /&gt;
** It Paths in a boolean that is True if any RT shadow, reflection, or translucency setting is enabled.&lt;br /&gt;
** If you need further functionality for switching things when ray-tracing is on, please refer to the &amp;lt;code&amp;gt;Check If Ray Tracing Updated&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
=== About the Photo_Scene_Parameter_Struct ===&lt;br /&gt;
Please see the main page on [[About Photoscene Blueprints#About the Photo Scene Parameter Struct]]&lt;br /&gt;
&lt;br /&gt;
=== Using the Get Current Parameter Values function ===&lt;br /&gt;
This function is called whenever the photoscene preset tries to save this level and its associated settings. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Get Current Parameter Values&amp;lt;/code&amp;gt; function expects an array of &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
You should use the &amp;lt;code&amp;gt;Make Array&amp;lt;/code&amp;gt; node to input into the &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; node, with a number of &amp;lt;code&amp;gt;array elements&amp;lt;/code&amp;gt; equal to the number of settings in your photoscene widget. Each &amp;lt;code&amp;gt;array element&amp;lt;/code&amp;gt; should itself be wired to a &amp;lt;code&amp;gt;Make Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt; node, with the &amp;lt;code&amp;gt;Parameter Name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Data Type&amp;lt;/code&amp;gt;, and selected &amp;lt;code&amp;gt;data type&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;Value&amp;lt;/code&amp;gt; set.&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki_Photoscene_UsingGetCurrentParameterValues01.png|frameless|300x300px]]&lt;br /&gt;
&lt;br /&gt;
=== Using the Level Finished Loading function ===&lt;br /&gt;
This function is called whenever the photoscene level has finished loading. If you wish to set some parameters, find some actors, or otherwise initialize anything in your photoscene widget blueprint, do so here. This is a &#039;safe&#039; version of &amp;lt;code&amp;gt;On Initialized&amp;lt;/code&amp;gt;, as it is only called once the level itself and all its contents/actors have been loaded.&lt;br /&gt;
&lt;br /&gt;
=== Using the Load Parameter Values function ===&lt;br /&gt;
Load Parameter Values is called whenever the photoscene is loading a preset which contains your photoscene level and its associated widget blueprint settings. Any preset that contains your level will contain a list of settings associated with your level (defined in &amp;lt;code&amp;gt;Get Current Parameter Values&amp;lt;/code&amp;gt;), which will need to be applied.&lt;br /&gt;
&lt;br /&gt;
It returns a &amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt;, which is a fancy version of an &amp;lt;code&amp;gt;array&amp;lt;/code&amp;gt; , with key/value pairs for each array element. The &amp;lt;code&amp;gt;Key&amp;lt;/code&amp;gt; for each element is the name you returned in Get current Parameter Values from&lt;br /&gt;
&lt;br /&gt;
To apply each setting from the map to your level, The following method works well:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Find&amp;lt;/code&amp;gt; the &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; associated with each of your &amp;lt;code&amp;gt;Parameter Name&amp;lt;/code&amp;gt;s, and;&lt;br /&gt;
# if the &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is found,&lt;br /&gt;
# apply it to whatever logic you use that value for.&lt;br /&gt;
[[File:Wiki_Photoscene_loadparametervalues01.png|frameless|300x300px]]&lt;br /&gt;
&lt;br /&gt;
Remember that the value you are &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt;ing has to be the same as the value you set for each setting in &amp;lt;code&amp;gt;Get Current Parameter Values&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Using the Ray Tracing Settings Updated function ===&lt;br /&gt;
This function is called every time a ray-tracing-related setting is updated. It returns &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; when any of the shadow, translucency, or reflections ray-tracing settings are enabled, or &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt; when none of them are enabled.&lt;br /&gt;
&lt;br /&gt;
This is useful when you have a material or mesh or other such thing which conflicts with a ray-traced scene. An example of such is the &#039;10s Design Room photoscene, where the glass materials on the windows are swapped out for a ray-tracing optimised version when ray-tracing is enabled, and swapped back to the standard material when ray-tracing is disabled.&lt;br /&gt;
&lt;br /&gt;
== Creating a Photoscene Level Preview file ==&lt;br /&gt;
The Photoscene level preview file contains the overall information about your photoscene, as well as links to the optional widget blueprint, the thumbnail picture(s), and the actual level.&lt;br /&gt;
&lt;br /&gt;
Create a &amp;lt;code&amp;gt;PhotosceneLevelPreview&amp;lt;/code&amp;gt; file by right-clicking in the content browser, and from the &amp;lt;code&amp;gt;camso&amp;lt;/code&amp;gt; group, select &amp;lt;code&amp;gt;Photo Scene Level&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;PhotoSceneLevelPreview&amp;lt;/code&amp;gt; file contains the following settings:&lt;br /&gt;
&lt;br /&gt;
* Name:&lt;br /&gt;
** This is the name of your photoscene. It will appear in-game as the name of the level in the level selection menu.&lt;br /&gt;
* Default Locator Name:&lt;br /&gt;
** This is the name of the &amp;lt;code&amp;gt;a_car_locator&amp;lt;/code&amp;gt; actor that you wish to be the default location of the car when the scene is first loaded.&lt;br /&gt;
* GUID:&lt;br /&gt;
** This is an unique GUID that you should generate for this photoscene. It must be unique to any other GUID. &lt;br /&gt;
** When first creating your photoscene, generate a new GUID for it by opening the photoscene level preview file and from the drop-down to the right of the GUID setting, select &amp;lt;code&amp;gt;Generate&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Level Preview Images:&lt;br /&gt;
** The photoscene level selection menu displays any number of thumbnail pictures for each photoscene, and will cycle between them slowly whenever the player hovers their mouse over the icon.&lt;br /&gt;
** You can have as many or as few as you like. If you only have one, only one will be displayed. If you have more than one, they will cycle through each other as the player hovers over the icon.&lt;br /&gt;
** Preview images will be flood filled to a 16:9 aspect ratio in the level selection menu.&lt;br /&gt;
*** Because of this, they should be no larger than 512 pixels wide, as any larger texture will take up texture memory on the players&#039; GPU but not actually impact the visual quality of the icon.&lt;br /&gt;
*** Textures that are taller or wider than 16:9 will be clipped at the edges. The textures are flood-filled to the 16:9 thumbnail icon, and any texture space outside of that is ignored.&lt;br /&gt;
** Preview images should not contain an alpha channel. If an alpha channel is supplied, then the texture will be invisible in-game, and your thumbnail will be completely red.&lt;br /&gt;
** Optimal settings for your thumbnail textures:&lt;br /&gt;
*** maximum horizontal resolution of 512 pixels&lt;br /&gt;
*** DXT1 compression&lt;br /&gt;
*** sRGB True&lt;br /&gt;
*** Has alpha channel: False&lt;br /&gt;
* Level:&lt;br /&gt;
** This is a link/reference to your actual level.&lt;br /&gt;
* Year:&lt;br /&gt;
** This is the level&#039;s associated year.&lt;br /&gt;
** It is displayed in the level selection menu next to the level&#039;s name.&lt;br /&gt;
** It currently has no other purpose, but could be used in future Automation updates to lock off certain levels during the campaign.&lt;br /&gt;
* Is Designer Level:&lt;br /&gt;
** this is used for if your photoscene level also contains the required blueprints and actors to function as a car and engine designer, and you wish for players to be able to select your photoscene as their car and/or engine designer level.&lt;br /&gt;
** Default is False&lt;br /&gt;
* Opt Custom Level Widget:&lt;br /&gt;
** If your photoscene contains player-adjustable settings, and you have correctly set up a photoscene widget blueprint, then this setting should be set to your photoscene widget blueprint.&lt;br /&gt;
&lt;br /&gt;
== Share Your Mod. ==&lt;br /&gt;
Go to the [[Modding]] page to see how to share your mod.&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=About_Photoscene_Blueprints&amp;diff=4946</id>
		<title>About Photoscene Blueprints</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=About_Photoscene_Blueprints&amp;diff=4946"/>
		<updated>2023-03-03T03:45:24Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About the Photo_Scene_Parameter_Struct ==&lt;br /&gt;
The &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt; is the combination name/value pair setting that is used for all photoscene/preset save game values. It is used by Photoscenes, and Props.&lt;br /&gt;
&lt;br /&gt;
It consists of three primary settings:&lt;br /&gt;
*Parameter Name:&lt;br /&gt;
**Is the name/identifier for this setting. It is not displayed in-game, but is instead used in the save game file to store the identifier for this current variable. These need to be unique for all variables in this widget.&lt;br /&gt;
*Data Type&lt;br /&gt;
** Is the type of value being stored in this parameter.&lt;br /&gt;
**Ties in with the #Value.&lt;br /&gt;
**Each parameter can only contain one type of data, so chose wisely.&lt;br /&gt;
*#Value&lt;br /&gt;
**For the current parameter name and data type, this value is used. Match it to the &amp;lt;code&amp;gt;Data Type&amp;lt;/code&amp;gt;setting.&lt;br /&gt;
For instance, if you have a &amp;lt;code&amp;gt;slider&amp;lt;/code&amp;gt; that affects &amp;lt;code&amp;gt;Brightness&amp;lt;/code&amp;gt;, you would have a &amp;lt;code&amp;gt;Parameter Name&amp;lt;/code&amp;gt; of something identifiable, like &amp;lt;code&amp;gt;Brightness&amp;lt;/code&amp;gt;, a &amp;lt;code&amp;gt;Data Type&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;Float&amp;lt;/code&amp;gt;, and a &amp;lt;code&amp;gt;Float Val&amp;lt;/code&amp;gt; equal to your &amp;lt;code&amp;gt;slider&amp;lt;/code&amp;gt; value. If you had a &amp;lt;code&amp;gt;checkbox&amp;lt;/code&amp;gt; instead, you would use a &amp;lt;code&amp;gt;data type&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; and a &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; val equal to your &amp;lt;code&amp;gt;checkbox&amp;lt;/code&amp;gt; value.&lt;br /&gt;
&lt;br /&gt;
For each setting your widget can change, you should use one &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki_Photoscene_AboutThePhotoSceneParameterStruct01.png|frameless|300x300px]]&lt;br /&gt;
== Using the Photoscene Widgets ==&lt;br /&gt;
There are many pre-made widgets that you can use which will help you make photoscene widgets easier. They are as follows:[[File:ThePhotosceneSlider.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Using The Photoscene_Slider_UW ===&lt;br /&gt;
The &amp;lt;code&amp;gt;Slider_Photo_Manager&amp;lt;/code&amp;gt; is a slider with a title text, plus and minus buttons, and a text box for the current value which can be set and overridden by the player.&lt;br /&gt;
&lt;br /&gt;
It has a &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event that is called whenever the player changes the value of the slider, and this event should be utilized for setting your Photoscene settings.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event returns a &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; value.&lt;br /&gt;
&lt;br /&gt;
==== The Slider&#039;s Settings ====&lt;br /&gt;
The &amp;lt;code&amp;gt;Slider_Photo_Manager&amp;lt;/code&amp;gt; has a few settings of note:&lt;br /&gt;
*Min Value:&lt;br /&gt;
**Defines the minimum number that the slider can naturally reach.&lt;br /&gt;
**Can be overridden using the text box by the player.&lt;br /&gt;
**Default is 0.&lt;br /&gt;
*Max Value:&lt;br /&gt;
**Defines the maximum number that the slider can naturally reach.&lt;br /&gt;
**Can be overridden using the text box by the player.&lt;br /&gt;
**Default is 1.&lt;br /&gt;
*Sig Figs:&lt;br /&gt;
**Defines the number of significant figures that will be displayed in the text box.&lt;br /&gt;
**Default is 3.&lt;br /&gt;
*Step Count:&lt;br /&gt;
**Defines the number of steps that are available in the slider.&lt;br /&gt;
**Default is 100.&lt;br /&gt;
**Useful when the slider range is massive, and you dont want the player to have to scrub through all values you may have available.&lt;br /&gt;
**For instance: if your slider has a min range of 0, and a max of 500, it may take the player a long time to incriment the value with their scroll wheel or using the +/- buttons, so setting a step count of 10 will mean that the player only has to press &#039;+&#039; 10 times to get from 0 to 500.&lt;br /&gt;
*Title Text:&lt;br /&gt;
**The text to display next to the slider. Useful for telling the player what this slider does.&lt;br /&gt;
**Default is empty/no text.&lt;br /&gt;
*Display Whole Numbers Only:&lt;br /&gt;
**Is a boolean, default is False.&lt;br /&gt;
**When True, ignores the &amp;lt;code&amp;gt;Sig Figs&amp;lt;/code&amp;gt; value only when the number of significant integers is less than the number of significant figures.&lt;br /&gt;
**Will only display integer values, and ignores any fractional values the slider may have set.&lt;br /&gt;
**For instance, if you have a slider with a min of 0, a max of 3, and 30 steps, it is possible for the player to get any single-digit fraction of each integer (0, 0.1, 0.2, 0.3......... 1, 1.1, 1.2, 1.3....... 2, 2.1, 2.2, 2.3..... etc), and while you may want this functionality, you may not want to display that fractional value. Enabling this setting will mean that while the player can set the slider to 4.6, say, the slider will display that the value is 4, despite the actual value being 4.6.&lt;br /&gt;
&lt;br /&gt;
==== Doing Things When The Slider Changes ====&lt;br /&gt;
To use the slider, you must use the &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event. To do so, scroll to the bottom of the &amp;lt;code&amp;gt;Photoscene_Slider_UW&amp;lt;/code&amp;gt;&#039;s details, and click the green plus icon next to &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneSliderValueChangedPlusIcon.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
This will create a new event in your timeline:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneSliderValueChangedEvent.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
you can then do whatever you want to do whenever the player changes the slider&#039;s value.&lt;br /&gt;
&lt;br /&gt;
To set the slider&#039;s value yourself, such as when loading a value from a preset, call the &amp;lt;code&amp;gt;Set Value&amp;lt;/code&amp;gt; function:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneSliderSetValue.jpg|frameless]]&lt;br /&gt;
[[File:ThePhotosceneDropDown.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Using The UW_DropDown_Photoscene ===&lt;br /&gt;
The &amp;lt;code&amp;gt;UW_DropDown_Photoscene&amp;lt;/code&amp;gt; is a drop-down menu, with a title text, and a variable number of list options.&lt;br /&gt;
&lt;br /&gt;
It has a &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event that is called whenever the player changes the selected option. It returns a &amp;lt;code&amp;gt;String&amp;lt;/code&amp;gt; value and an &amp;lt;code&amp;gt;Integer&amp;lt;/code&amp;gt; Index value when called. The &amp;lt;code&amp;gt;String&amp;lt;/code&amp;gt; value is the string text of the selected option, while the &amp;lt;code&amp;gt;Index&amp;lt;/code&amp;gt; integer is the position of the currently selected string value in the array/list.&lt;br /&gt;
&lt;br /&gt;
Remember that arrays start at 0. For example: a drop-down with four values, say, &amp;lt;code&amp;gt;one on, one off, both on, both off&amp;lt;/code&amp;gt;, will have selected integers of &amp;lt;code&amp;gt;0,1,2,3&amp;lt;/code&amp;gt;, respectively. If the player Selects &amp;lt;code&amp;gt;one off&amp;lt;/code&amp;gt;, the &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event will return a &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; value of &amp;lt;code&amp;gt;one off&amp;lt;/code&amp;gt;, and an &amp;lt;code&amp;gt;index&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== The UW_DropDown_Photoscene&#039;s Settings ====&lt;br /&gt;
The &amp;lt;code&amp;gt;UW_DropDown_Photoscene&amp;lt;/code&amp;gt; has a few settings of note:&lt;br /&gt;
*Title Text:&lt;br /&gt;
**The text to display next to the drop-down. Useful for telling the player what the drop-down does.&lt;br /&gt;
**Default is &amp;lt;code&amp;gt;Title Text&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Options:&lt;br /&gt;
**The number and names of the options available in the drop-down.&lt;br /&gt;
**You can have as many or as few as you want.&lt;br /&gt;
**Default is empty/no values.&lt;br /&gt;
*Selected Option:&lt;br /&gt;
**The string value of the default selected option for this drop-down.&lt;br /&gt;
**Should be identical to one of the &amp;lt;code&amp;gt;Options&amp;lt;/code&amp;gt; list items.&lt;br /&gt;
**Default is empty/no value.&lt;br /&gt;
&lt;br /&gt;
==== Doing Things When The Drop-Down Changes ====&lt;br /&gt;
To use the drop-down, you must use the &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event. Scroll down to the bottom of the &amp;lt;code&amp;gt;UW_DropDown_Photoscene&amp;lt;/code&amp;gt;&#039;s details settings, and click the plus icon next to the &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneDropDownValueChangedPlusIcon.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
this will create a new event in your timeline:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneDropDownValueChangedEvent.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
you can then do whatever you want to do whenever the player changes the drop-down&#039;s value.&lt;br /&gt;
&lt;br /&gt;
To set the drop-down&#039;s value yourself, such as when loading a value from a preset, call the &amp;lt;code&amp;gt;Set Selected Index&amp;lt;/code&amp;gt; function:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneDropDownSetSelectedIndex.jpg|frameless]]&lt;br /&gt;
[[File:ThePhotosceneCheckbox.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Using The Photoscene_CheckBox_UW ===&lt;br /&gt;
The &amp;lt;code&amp;gt;Photoscene_CheckBox_UW&amp;lt;/code&amp;gt; is a tickbox/checkbox/disabled+enabled buttons.&lt;br /&gt;
&lt;br /&gt;
It has a &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event that is called whenever the player changes the setting. It returns a boolean which is &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; when the value is ticked/enabled/true, and returns &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt; when the value is un-ticked/disabled/false.&lt;br /&gt;
&lt;br /&gt;
==== The Photoscene_CheckBox_UW&#039;s Settings ====&lt;br /&gt;
It has a few settings of note:&lt;br /&gt;
*Title Text:&lt;br /&gt;
**The text to display next to the setting. Useful for telling the player what the setting does.&lt;br /&gt;
**Default is empty/no text.&lt;br /&gt;
*Default Value:&lt;br /&gt;
**Is a boolean. Sets the default value of this setting.&lt;br /&gt;
**Default is un-ticked/disabled/false.&lt;br /&gt;
*Use Buttons:&lt;br /&gt;
**Is a boolean. Switches the widget between the default disabled/enabled buttons, and a small check box with a disabled/enabled text. Useful for some things.&lt;br /&gt;
**Default is un-ticked/disabled/false.&lt;br /&gt;
&lt;br /&gt;
==== Doing Things When The Checkbox Changes ====&lt;br /&gt;
To use the checkbox, you must use the &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event. Scroll down to the bottom of the &amp;lt;code&amp;gt;Photoscene_CheckBox_UW&amp;lt;/code&amp;gt;&#039;s details settings, and click the plus icon next to the &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneCheckboxValueChangedPlusIcon.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
this will create a new event in your timeline:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneCheckboxValueChangedEvent.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
you can then do whatever you want to do whenever the player changes the checkbox&#039;s value.&lt;br /&gt;
&lt;br /&gt;
To set the checkbox&#039;s value yourself, such as when loading a value from a preset, call the &amp;lt;code&amp;gt;Set Is Checked&amp;lt;/code&amp;gt; function:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneCheckboxSetIsChecked.jpg|frameless]]&lt;br /&gt;
[[File:ThePhotosceneTextBox.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Using The UW_TextBox_Photoscene ===&lt;br /&gt;
The &amp;lt;code&amp;gt;UW_TextBox_Photoscene&amp;lt;/code&amp;gt; is a simple text box.&lt;br /&gt;
&lt;br /&gt;
It has a &amp;lt;code&amp;gt;Text Updated&amp;lt;/code&amp;gt; event that is called whenever the text changes from player input. It returns a &amp;lt;code&amp;gt;String&amp;lt;/code&amp;gt; text which is the value of the text box.&lt;br /&gt;
&lt;br /&gt;
==== The UW_TextBox_Photoscene&#039;s Settings ====&lt;br /&gt;
It has a few settings of note:&lt;br /&gt;
*Text:&lt;br /&gt;
**Is the default text to display in the text box.&lt;br /&gt;
**Default is none/no text.&lt;br /&gt;
*Title Text:&lt;br /&gt;
**The text to display next to the setting. Useful for telling the player what the setting does.&lt;br /&gt;
**Default is empty/no text.&lt;br /&gt;
&lt;br /&gt;
==== Doing Things When The Textbox Changes ====&lt;br /&gt;
To use the Textbox, you must use the &amp;lt;code&amp;gt;Text Updated&amp;lt;/code&amp;gt; event. Scroll down to the bottom of the &amp;lt;code&amp;gt;UW_TextBox_Photoscene&amp;lt;/code&amp;gt;&#039;s details settings, and click the plus icon next to the &amp;lt;code&amp;gt;Text Updated&amp;lt;/code&amp;gt; event:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneTextBoxTextUpdatedPlusIcon.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
this will create a new event in your timeline:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneTextBoxTextUpdatedEvent.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
you can then do whatever you want to do whenever the player changes the Textbox&#039;s value.&lt;br /&gt;
&lt;br /&gt;
To set the Textbox&#039;s value yourself, such as when loading a value from a preset, call the &amp;lt;code&amp;gt;Set Text&amp;lt;/code&amp;gt; function:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneTextBoxSetText.jpg|frameless]]&lt;br /&gt;
[[File:ThePhotosceneColourPicker.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Using The Photoscene_ColourPickerAdvanced_UW ===&lt;br /&gt;
The &amp;lt;code&amp;gt;Photoscene_ColourPickerAdvanced_UW&amp;lt;/code&amp;gt; is a colour picker. It allows the player to chose a colour by adjusting three sliders. It has two modes: RGB, and HSV. In RGB mode, the three sliders represent the Red, Green, and Blue colour values for the colour. In HSV mode, the three sliders represent the Hue, Saturation, and Value (brightness) of the colour. It also has a hexadecimal code input.&lt;br /&gt;
&lt;br /&gt;
It has a &amp;lt;code&amp;gt;Colour Updated&amp;lt;/code&amp;gt; event that is called whenever the player changes the colour setting. The Colour Updated event returns two values: A &amp;lt;code&amp;gt;Colour&amp;lt;/code&amp;gt; value, which represents the colour that the player has currently selected, and a &amp;lt;code&amp;gt;Temporary Change&amp;lt;/code&amp;gt; boolean, which should be left unused unless you wish to enable &amp;lt;code&amp;gt;Advanced View&amp;lt;/code&amp;gt;, in which case this value represents whenever the value is temporarily set to default via the &amp;lt;code&amp;gt;Enable&amp;lt;/code&amp;gt; tickbox.&lt;br /&gt;
&lt;br /&gt;
==== The Photoscene_ColourPickerAdvanced_UW&#039;s Settings ====&lt;br /&gt;
It has a few settings of note:&lt;br /&gt;
&lt;br /&gt;
* Title Text&lt;br /&gt;
** The text to display next to the setting. Useful for telling the player what the setting does.&lt;br /&gt;
**Default is empty/no text.&lt;br /&gt;
* Default Value&lt;br /&gt;
** The default value of the colour picker, if not overridden.&lt;br /&gt;
** This is also the value that the colour picker will revert to, if Advanced View is on, and the player un-ticks the Enable tickbox.&lt;br /&gt;
** The default value is &amp;lt;code&amp;gt;1,1,1&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Default Mode&lt;br /&gt;
** The default mode determines whether the colour picker will appear to the user in RGB or HSV mode by default.&lt;br /&gt;
** The default value is &amp;lt;code&amp;gt;RGB&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Include Luminosity&lt;br /&gt;
** When enabled, this setting changes the way the colour picker works, by making all the settings that affect the value of the colour to go from 0-2, instead of the default 0-1. This is used primarily internally for colour grading, as it allows the colour grading settings to desaturate as well as oversaturate the colours, which would not be possible if the colour picker could only go between 0-1 values.&lt;br /&gt;
** The default value is &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Advanced View&lt;br /&gt;
** This enables the advanced mode for this widget. When enabled, a new tick-box appears to the left of the Title field.&lt;br /&gt;
** The player can enable or disable the tick-box, which enables or disables the colour picker.&lt;br /&gt;
** When the colour picker is disabled, the player cannot input anything to the colour picker, and the colour value from the &amp;lt;code&amp;gt;Colour Updated&amp;lt;/code&amp;gt; event is called with the colour from the Default Value.&lt;br /&gt;
** When the player re-enables the colour picker, the colour picker can again be edited by the player, and the &amp;lt;code&amp;gt;Colour Updated&amp;lt;/code&amp;gt; event is again called, this time with the value from the colour picker.&lt;br /&gt;
** When the &amp;lt;code&amp;gt;Colour Updated&amp;lt;/code&amp;gt; event is called, the &amp;lt;code&amp;gt;Temporary Change&amp;lt;/code&amp;gt; value that is returned along with the &amp;lt;code&amp;gt;Colour&amp;lt;/code&amp;gt; value represents whether the Enable tick-box was just un-checked. The &amp;lt;code&amp;gt;Temporary Change&amp;lt;/code&amp;gt; value returns &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; only when the Enable check-box is disabled.&lt;br /&gt;
** The default value is &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Show Title&lt;br /&gt;
** When enabled, the title text is visible. When disabled, the title text is hidden and colapsed.&lt;br /&gt;
** The default value is &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Title Width&lt;br /&gt;
** This determines the width of the title text field, in slate units (pixels). For consistency, this should be left at its default value.&lt;br /&gt;
** This setting is useful when your colour picker is contained within an &amp;lt;code&amp;gt;Expandable Area Camso&amp;lt;/code&amp;gt;, as we usually indent their contents by 42px. For consistency, we like to make sure the title text is the part that shrinks by that 42px, such that the actual colour picker field remains aligned. When such a situation occurs, the Title Width is usually set to &amp;lt;code&amp;gt;Custom&amp;lt;/code&amp;gt;, in which case the width of the title text is determined by the &amp;lt;code&amp;gt;Title Width Override&amp;lt;/code&amp;gt; value.&lt;br /&gt;
** The default value is &amp;lt;code&amp;gt;Text (180px)&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Title Width Override&lt;br /&gt;
** The Title Width Override is used only when the Title Width is set to Custom. When this is the case, the width of the title text is determined by this value.&lt;br /&gt;
** The default value is &amp;lt;code&amp;gt;138&amp;lt;/code&amp;gt;px.&lt;br /&gt;
* Num Indents&lt;br /&gt;
** As an alternative to using the &amp;lt;code&amp;gt;Title Width&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Title Width Override&amp;lt;/code&amp;gt; values, you can instead increase the &amp;lt;code&amp;gt;Num Indents&amp;lt;/code&amp;gt; value, which decreases the width of the Title text by 42px (or whatever the &amp;lt;code&amp;gt;Indent Size&amp;lt;/code&amp;gt; value is set to) for each integer of &amp;lt;code&amp;gt;Num Indents&amp;lt;/code&amp;gt;.&lt;br /&gt;
** The default value is 0.&lt;br /&gt;
* Indent Size&lt;br /&gt;
** This is the value that affects how much the title text is shrunk by, as used by &amp;lt;code&amp;gt;Num Indents&amp;lt;/code&amp;gt;.&lt;br /&gt;
** The default value is 42.&lt;br /&gt;
&lt;br /&gt;
==== Doing Things When The Colour Picker Changes ====&lt;br /&gt;
To use the Colour Picker, you must use the &amp;lt;code&amp;gt;Colour Updated&amp;lt;/code&amp;gt; event. Scroll down to the bottom of the &amp;lt;code&amp;gt;Photoscene_ColourPickerAdvanced_UW&amp;lt;/code&amp;gt;&#039;s details settings, and click the plus icon next to the &amp;lt;code&amp;gt;Colour Updated&amp;lt;/code&amp;gt; event:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneColourPickerColourUpdatedPlusIcon.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
this will create a new event in your timeline:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneColourPickerColourUpdatedEvent.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
you can then do whatever you want to do whenever the player changes the Colour Picker&#039;s value.&lt;br /&gt;
&lt;br /&gt;
To set the Colour Picker&#039;s value yourself, such as when loading a value from a preset, call the &amp;lt;code&amp;gt;Set Value&amp;lt;/code&amp;gt; function:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneColourPickerSetValue.jpg|frameless]]&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=Photoscenes&amp;diff=4945</id>
		<title>Photoscenes</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=Photoscenes&amp;diff=4945"/>
		<updated>2023-03-03T03:42:20Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Photoscene support was added 25th October 2017.&lt;br /&gt;
&lt;br /&gt;
Beginning with LCv4.2, Automation supports player-customizable options for individual photoscenes.&lt;br /&gt;
&lt;br /&gt;
There is an example photoscene mod included in the sdk. open it to see how it works. It is also available on the Steam Workshop as a mod.&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
# create a mod&lt;br /&gt;
# create and design a level&lt;br /&gt;
# (Optional) Create a photoscene Widget for player-customization&lt;br /&gt;
#create and fill out a Photoscene Level Preview file.&lt;br /&gt;
## create Thumbnail(s)&lt;br /&gt;
# Share your mod&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
A photoscene mod contains a set of files that define how the photoscene works, and what it looks like. It consists of the following:&lt;br /&gt;
&lt;br /&gt;
# a level/scene&lt;br /&gt;
# a photoscene level preview file&lt;br /&gt;
# at least one thumbnail picture&lt;br /&gt;
# (optionally) a widget blueprint&lt;br /&gt;
&lt;br /&gt;
== Create A New Blank Mod ==&lt;br /&gt;
&lt;br /&gt;
* Create a new Mod from the Blank Template:&lt;br /&gt;
* [[File:UE4ModCreation_01.gif|frameless]]&amp;lt;br /&amp;gt;&lt;br /&gt;
* fill out the wizard and press Create Mod:&lt;br /&gt;
* [[File:UE4ModCreation_02.gif|frameless]]&lt;br /&gt;
&lt;br /&gt;
== Create a New Blank Level ==&lt;br /&gt;
Create a new blank level in your mod plugin folder. Name it whatever you&#039;d like.&lt;br /&gt;
&lt;br /&gt;
Open the level by double-clicking it.&lt;br /&gt;
&lt;br /&gt;
=== Design your level ===&lt;br /&gt;
do whatever you want to make your level be what you want.&lt;br /&gt;
&lt;br /&gt;
This is not anything particular to Automation, but UE4 in General. Watch some of Epic&#039;s tutorials on this: https://www.youtube.com/watch?v=cl_eoVfNDKU&amp;amp;list=PLZlv_N0_O1gak1_FoAJVrEGiLIploeF3F&lt;br /&gt;
&lt;br /&gt;
=== Level Creation Guidelines ===&lt;br /&gt;
[[File:UE4ModCreation_24.gif|frameless]]&lt;br /&gt;
* when you set the car to &#039;snap to ground&#039;, a ray is cast from 6m above the car, to 2m below the car. the car is &#039;placed&#039; on the first surface it collides with. Make sure any roofing or props in this range dont have collision enabled, or the car will mistake them for the ground.&lt;br /&gt;
* Search the &#039;&#039;&#039;content browser&#039;&#039;&#039; for &amp;lt;code&amp;gt;A Car Locator&amp;lt;/code&amp;gt;.&lt;br /&gt;
**These are the bookmarks for sub-level positions.&lt;br /&gt;
**Place them wherever you want the car to be, and in the &#039;&#039;&#039;Details&#039;&#039;&#039; panel, give them a name.&lt;br /&gt;
**This name will show up in the levels menu in the photoscene as one of the sub-level positions.&lt;br /&gt;
**You can have as many as you want.&lt;br /&gt;
**if none are present, the car will spawn at 0,0,0&lt;br /&gt;
*Currently, Stationary Lights are broken for Automation. use either static or movable lighting in your scenes.&lt;br /&gt;
&lt;br /&gt;
== Adding Customization Options To Your Photoscene ==&lt;br /&gt;
Beginning with LCv4.2, Automation supports player-customizable options for individual photoscenes.&lt;br /&gt;
&lt;br /&gt;
You can set up your photoscene to allow the player to change the colour of the lighting, the time of day, whether street lights are turned on, etc... the world is your oyster!&lt;br /&gt;
&lt;br /&gt;
=== Creating a Photoscene Widget ===&lt;br /&gt;
From the &amp;lt;code&amp;gt;Content Browser&amp;lt;/code&amp;gt;, add a Widget Blueprint to your mod folder.&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki_Photoscene_CreateWidgetBP.jpg|frameless|342x342px]]&lt;br /&gt;
&lt;br /&gt;
Open the Widget, and from the &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; menu, select &amp;lt;code&amp;gt;Reparent Blueprint&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki_Photoscene_ReparentWidgetBP01.jpg|frameless|342x342px]]&lt;br /&gt;
&lt;br /&gt;
In the menu that appears, find and select &amp;lt;code&amp;gt;Photo Scene Widget Base&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki_Photoscene_ReparentWidgetBP02.png|frameless|290x290px]]&lt;br /&gt;
&lt;br /&gt;
From the Hierarchy window, delete the &amp;lt;code&amp;gt;Canvas Panel&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki_Photoscene_DeleteCanvas.png|frameless|300x300px]]&lt;br /&gt;
&lt;br /&gt;
You are now free to design the buttons, sliders, and drop-down menus, etc... to your heart&#039;s content!&lt;br /&gt;
&lt;br /&gt;
=== Quick Tips: ===&lt;br /&gt;
&lt;br /&gt;
* Add all your buttons and options under a parent Vertical Box&lt;br /&gt;
** your widget will appear under the &amp;lt;code&amp;gt;Level Settings&amp;lt;/code&amp;gt; menu in the Photoscene, and as such do not have much horizontal space to work with.&lt;br /&gt;
** [[File:Wiki_Photoscene_Tips01.gif|frameless|300x300px]]&lt;br /&gt;
* There are a few preset buttons and sliders you can use that will make your life easier. These can be searched for and used from the Palette menu, but feel free to design your own. More info on the functionality of these widgets can be found on the [[About Photoscene Blueprints]] page:&lt;br /&gt;
** Slider_Photo_Manager&lt;br /&gt;
** UW_DropDown_Photoscene&lt;br /&gt;
** Photoscene_Checkbox_UW&lt;br /&gt;
** UW_TextBox_Photoscene&lt;br /&gt;
&lt;br /&gt;
== Widget Functionality ==&lt;br /&gt;
The &amp;lt;code&amp;gt;Photo Scene Widget Base&amp;lt;/code&amp;gt; parent type has a few function calls that you should be aware of, and use where necessary.&lt;br /&gt;
&lt;br /&gt;
From the &#039;Graph&#039; view, hover over the &amp;lt;code&amp;gt;Functions&amp;lt;/code&amp;gt; menu, and select &amp;lt;code&amp;gt;Override&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki_Photoscene_FunctionsOverride.png|frameless|433x433px]]&lt;br /&gt;
&lt;br /&gt;
Don&#039;t worry if these are overwhelming you, they will be explained more in-depth later.&lt;br /&gt;
&lt;br /&gt;
* Check If Ray Tracing Updated:&lt;br /&gt;
** Is called whenever any ray-tracing settings are updated.&lt;br /&gt;
** This should mostly be ignored, as it is an internal function, but can be overridden if you find yourself running into discrepancies between ray-tracing and non-ray-tracing in your level. &lt;br /&gt;
** Most discrepancies in ray-tracing are related to shadows and reflections, and as such, there is another function that should be used before this one. However, if you find yourself still struggling to get a scene looking good for both ray-traced and non-ray-traced graphics, then override this.&lt;br /&gt;
* Get Current Parameter Values:&lt;br /&gt;
** Is called by the Photoscene whenever it needs to ask this widget what the current UI values are.&lt;br /&gt;
** The &#039;Return&#039; node of this function is an array of &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt; values.&lt;br /&gt;
** This should be used to send the values of your UI to the Photoscene Preset&#039;s &#039;return&#039; node.&lt;br /&gt;
* Level Finished Loading:&lt;br /&gt;
** Is called whenever the Photoscene level has finished loading.&lt;br /&gt;
** This is a safe way to initialize any values you want to set for the level or UI. when the photoscene is loaded from the level selection menu or a preset.&lt;br /&gt;
* Load Parameter Values:&lt;br /&gt;
** Is called when the Photoscene is loading your level from a preset.&lt;br /&gt;
** Paths in an array of &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt; values.&lt;br /&gt;
** This should be used to initialize your UI values, and apply their related settings to your level.&lt;br /&gt;
* On Initialized:&lt;br /&gt;
** Should be ignored, as it is an internal function.&lt;br /&gt;
* Ray Tracing Settings Updated:&lt;br /&gt;
** Is a helper function designed to call whenever a ray-tracing setting related to reflections, refraction, or shadows, is adjusted.&lt;br /&gt;
** It Paths in a boolean that is True if any RT shadow, reflection, or translucency setting is enabled.&lt;br /&gt;
** If you need further functionality for switching things when ray-tracing is on, please refer to the &amp;lt;code&amp;gt;Check If Ray Tracing Updated&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
=== About the Photo_Scene_Parameter_Struct ===&lt;br /&gt;
The &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt;is the combination name/value pair setting that is used for all photoscene/preset save game values. It is used in the &amp;lt;code&amp;gt;Get Current Parameter Values&amp;lt;/code&amp;gt; function and the &amp;lt;code&amp;gt;Load Parameter Values&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
It consists of three primary settings:&lt;br /&gt;
&lt;br /&gt;
* Parameter Name:&lt;br /&gt;
** Is the name/identifier for this setting. It is not displayed in-game, but is instead used in the save game file to store the identifier for this current variable. These need to be unique for all variables in this photoscene widget.&lt;br /&gt;
* Data Type&lt;br /&gt;
** Is the type of value being stored in this parameter.&lt;br /&gt;
** Ties in with the #Value.&lt;br /&gt;
** Each photoscene widget parameter can only contain one type of data, so chose wisely.&lt;br /&gt;
* #Value &lt;br /&gt;
** For the current parameter name and data type, this value is used. Match it to the &amp;lt;code&amp;gt;Data Type&amp;lt;/code&amp;gt;setting.&lt;br /&gt;
&lt;br /&gt;
For instance, if you have a &amp;lt;code&amp;gt;slider&amp;lt;/code&amp;gt; that affects the &amp;lt;code&amp;gt;Brightness&amp;lt;/code&amp;gt; of your photoscene, you would have a &amp;lt;code&amp;gt;Parameter Name&amp;lt;/code&amp;gt; of something identifiable, like &amp;lt;code&amp;gt;SceneBrightness&amp;lt;/code&amp;gt;, a &amp;lt;code&amp;gt;Data Type&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;Float&amp;lt;/code&amp;gt;, and a &amp;lt;code&amp;gt;Float Val&amp;lt;/code&amp;gt; equal to your &amp;lt;code&amp;gt;slider&amp;lt;/code&amp;gt; value. If you had a &amp;lt;code&amp;gt;checkbox&amp;lt;/code&amp;gt; instead, you would use a &amp;lt;code&amp;gt;data type&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; and a &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; val equal to your &amp;lt;code&amp;gt;checkbox&amp;lt;/code&amp;gt; value.&lt;br /&gt;
&lt;br /&gt;
For each setting your photoscene widget can change, you should use one &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki_Photoscene_AboutThePhotoSceneParameterStruct01.png|frameless|300x300px]]&lt;br /&gt;
&lt;br /&gt;
=== Using the Get Current Parameter Values function ===&lt;br /&gt;
This function is called whenever the photoscene preset tries to save this level and its associated settings. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Get Current Parameter Values&amp;lt;/code&amp;gt; function expects an array of &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
You should use the &amp;lt;code&amp;gt;Make Array&amp;lt;/code&amp;gt; node to input into the &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; node, with a number of &amp;lt;code&amp;gt;array elements&amp;lt;/code&amp;gt; equal to the number of settings in your photoscene widget. Each &amp;lt;code&amp;gt;array element&amp;lt;/code&amp;gt; should itself be wired to a &amp;lt;code&amp;gt;Make Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt; node, with the &amp;lt;code&amp;gt;Parameter Name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Data Type&amp;lt;/code&amp;gt;, and selected &amp;lt;code&amp;gt;data type&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;Value&amp;lt;/code&amp;gt; set.&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki_Photoscene_UsingGetCurrentParameterValues01.png|frameless|300x300px]]&lt;br /&gt;
&lt;br /&gt;
=== Using the Level Finished Loading function ===&lt;br /&gt;
This function is called whenever the photoscene level has finished loading. If you wish to set some parameters, find some actors, or otherwise initialize anything in your photoscene widget blueprint, do so here. This is a &#039;safe&#039; version of &amp;lt;code&amp;gt;On Initialized&amp;lt;/code&amp;gt;, as it is only called once the level itself and all its contents/actors have been loaded.&lt;br /&gt;
&lt;br /&gt;
=== Using the Load Parameter Values function ===&lt;br /&gt;
Load Parameter Values is called whenever the photoscene is loading a preset which contains your photoscene level and its associated widget blueprint settings. Any preset that contains your level will contain a list of settings associated with your level (defined in &amp;lt;code&amp;gt;Get Current Parameter Values&amp;lt;/code&amp;gt;), which will need to be applied.&lt;br /&gt;
&lt;br /&gt;
It returns a &amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt;, which is a fancy version of an &amp;lt;code&amp;gt;array&amp;lt;/code&amp;gt; , with key/value pairs for each array element. The &amp;lt;code&amp;gt;Key&amp;lt;/code&amp;gt; for each element is the name you returned in Get current Parameter Values from&lt;br /&gt;
&lt;br /&gt;
To apply each setting from the map to your level, The following method works well:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Find&amp;lt;/code&amp;gt; the &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; associated with each of your &amp;lt;code&amp;gt;Parameter Name&amp;lt;/code&amp;gt;s, and;&lt;br /&gt;
# if the &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is found,&lt;br /&gt;
# apply it to whatever logic you use that value for.&lt;br /&gt;
[[File:Wiki_Photoscene_loadparametervalues01.png|frameless|300x300px]]&lt;br /&gt;
&lt;br /&gt;
Remember that the value you are &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt;ing has to be the same as the value you set for each setting in &amp;lt;code&amp;gt;Get Current Parameter Values&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Using the Ray Tracing Settings Updated function ===&lt;br /&gt;
This function is called every time a ray-tracing-related setting is updated. It returns &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; when any of the shadow, translucency, or reflections ray-tracing settings are enabled, or &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt; when none of them are enabled.&lt;br /&gt;
&lt;br /&gt;
This is useful when you have a material or mesh or other such thing which conflicts with a ray-traced scene. An example of such is the &#039;10s Design Room photoscene, where the glass materials on the windows are swapped out for a ray-tracing optimised version when ray-tracing is enabled, and swapped back to the standard material when ray-tracing is disabled.&lt;br /&gt;
&lt;br /&gt;
== Creating a Photoscene Level Preview file ==&lt;br /&gt;
The Photoscene level preview file contains the overall information about your photoscene, as well as links to the optional widget blueprint, the thumbnail picture(s), and the actual level.&lt;br /&gt;
&lt;br /&gt;
Create a &amp;lt;code&amp;gt;PhotosceneLevelPreview&amp;lt;/code&amp;gt; file by right-clicking in the content browser, and from the &amp;lt;code&amp;gt;camso&amp;lt;/code&amp;gt; group, select &amp;lt;code&amp;gt;Photo Scene Level&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;PhotoSceneLevelPreview&amp;lt;/code&amp;gt; file contains the following settings:&lt;br /&gt;
&lt;br /&gt;
* Name:&lt;br /&gt;
** This is the name of your photoscene. It will appear in-game as the name of the level in the level selection menu.&lt;br /&gt;
* Default Locator Name:&lt;br /&gt;
** This is the name of the &amp;lt;code&amp;gt;a_car_locator&amp;lt;/code&amp;gt; actor that you wish to be the default location of the car when the scene is first loaded.&lt;br /&gt;
* GUID:&lt;br /&gt;
** This is an unique GUID that you should generate for this photoscene. It must be unique to any other GUID. &lt;br /&gt;
** When first creating your photoscene, generate a new GUID for it by opening the photoscene level preview file and from the drop-down to the right of the GUID setting, select &amp;lt;code&amp;gt;Generate&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Level Preview Images:&lt;br /&gt;
** The photoscene level selection menu displays any number of thumbnail pictures for each photoscene, and will cycle between them slowly whenever the player hovers their mouse over the icon.&lt;br /&gt;
** You can have as many or as few as you like. If you only have one, only one will be displayed. If you have more than one, they will cycle through each other as the player hovers over the icon.&lt;br /&gt;
** Preview images will be flood filled to a 16:9 aspect ratio in the level selection menu.&lt;br /&gt;
*** Because of this, they should be no larger than 512 pixels wide, as any larger texture will take up texture memory on the players&#039; GPU but not actually impact the visual quality of the icon.&lt;br /&gt;
*** Textures that are taller or wider than 16:9 will be clipped at the edges. The textures are flood-filled to the 16:9 thumbnail icon, and any texture space outside of that is ignored.&lt;br /&gt;
** Preview images should not contain an alpha channel. If an alpha channel is supplied, then the texture will be invisible in-game, and your thumbnail will be completely red.&lt;br /&gt;
** Optimal settings for your thumbnail textures:&lt;br /&gt;
*** maximum horizontal resolution of 512 pixels&lt;br /&gt;
*** DXT1 compression&lt;br /&gt;
*** sRGB True&lt;br /&gt;
*** Has alpha channel: False&lt;br /&gt;
* Level:&lt;br /&gt;
** This is a link/reference to your actual level.&lt;br /&gt;
* Year:&lt;br /&gt;
** This is the level&#039;s associated year.&lt;br /&gt;
** It is displayed in the level selection menu next to the level&#039;s name.&lt;br /&gt;
** It currently has no other purpose, but could be used in future Automation updates to lock off certain levels during the campaign.&lt;br /&gt;
* Is Designer Level:&lt;br /&gt;
** this is used for if your photoscene level also contains the required blueprints and actors to function as a car and engine designer, and you wish for players to be able to select your photoscene as their car and/or engine designer level.&lt;br /&gt;
** Default is False&lt;br /&gt;
* Opt Custom Level Widget:&lt;br /&gt;
** If your photoscene contains player-adjustable settings, and you have correctly set up a photoscene widget blueprint, then this setting should be set to your photoscene widget blueprint.&lt;br /&gt;
&lt;br /&gt;
== Share Your Mod. ==&lt;br /&gt;
Go to the [[Modding]] page to see how to share your mod.&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=Photoscenes&amp;diff=4944</id>
		<title>Photoscenes</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=Photoscenes&amp;diff=4944"/>
		<updated>2023-03-03T03:41:47Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Photoscene support was added 25th October 2017.&lt;br /&gt;
&lt;br /&gt;
Beginning with LCv4.2, Automation supports player-customizable options for individual photoscenes.&lt;br /&gt;
&lt;br /&gt;
There is an example photoscene mod included in the sdk. open it to see how it works. It is also available on the Steam Workshop as a mod.&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
# create a mod&lt;br /&gt;
# create and design a level&lt;br /&gt;
# (Optional) Create a photoscene Widget for player-customization&lt;br /&gt;
#create and fill out a Photoscene Level Preview file.&lt;br /&gt;
## create Thumbnail(s)&lt;br /&gt;
# Share your mod&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
A photoscene mod contains a set of files that define how the photoscene works, and what it looks like. It consists of the following:&lt;br /&gt;
&lt;br /&gt;
# a level/scene&lt;br /&gt;
# a photoscene level preview file&lt;br /&gt;
# at least one thumbnail picture&lt;br /&gt;
# (optionally) a widget blueprint&lt;br /&gt;
&lt;br /&gt;
== Create A New Blank Mod ==&lt;br /&gt;
&lt;br /&gt;
* Create a new Mod from the Blank Template [[File:UE4ModCreation_01.gif|frameless]]&amp;lt;br /&amp;gt;&lt;br /&gt;
* fill out the wizard and press Create Mod [[File:UE4ModCreation_02.gif|frameless]]&lt;br /&gt;
&lt;br /&gt;
== Create a New Blank Level ==&lt;br /&gt;
Create a new blank level in your mod plugin folder. Name it whatever you&#039;d like.&lt;br /&gt;
&lt;br /&gt;
Open the level by double-clicking it.&lt;br /&gt;
&lt;br /&gt;
=== Design your level ===&lt;br /&gt;
do whatever you want to make your level be what you want.&lt;br /&gt;
&lt;br /&gt;
This is not anything particular to Automation, but UE4 in General. Watch some of Epic&#039;s tutorials on this: https://www.youtube.com/watch?v=cl_eoVfNDKU&amp;amp;list=PLZlv_N0_O1gak1_FoAJVrEGiLIploeF3F&lt;br /&gt;
&lt;br /&gt;
=== Level Creation Guidelines ===&lt;br /&gt;
[[File:UE4ModCreation_24.gif|frameless]]&lt;br /&gt;
* when you set the car to &#039;snap to ground&#039;, a ray is cast from 6m above the car, to 2m below the car. the car is &#039;placed&#039; on the first surface it collides with. Make sure any roofing or props in this range dont have collision enabled, or the car will mistake them for the ground.&lt;br /&gt;
* Search the &#039;&#039;&#039;content browser&#039;&#039;&#039; for &amp;lt;code&amp;gt;A Car Locator&amp;lt;/code&amp;gt;.&lt;br /&gt;
**These are the bookmarks for sub-level positions.&lt;br /&gt;
**Place them wherever you want the car to be, and in the &#039;&#039;&#039;Details&#039;&#039;&#039; panel, give them a name.&lt;br /&gt;
**This name will show up in the levels menu in the photoscene as one of the sub-level positions.&lt;br /&gt;
**You can have as many as you want.&lt;br /&gt;
**if none are present, the car will spawn at 0,0,0&lt;br /&gt;
*Currently, Stationary Lights are broken for Automation. use either static or movable lighting in your scenes.&lt;br /&gt;
&lt;br /&gt;
== Adding Customization Options To Your Photoscene ==&lt;br /&gt;
Beginning with LCv4.2, Automation supports player-customizable options for individual photoscenes.&lt;br /&gt;
&lt;br /&gt;
You can set up your photoscene to allow the player to change the colour of the lighting, the time of day, whether street lights are turned on, etc... the world is your oyster!&lt;br /&gt;
&lt;br /&gt;
=== Creating a Photoscene Widget ===&lt;br /&gt;
From the &amp;lt;code&amp;gt;Content Browser&amp;lt;/code&amp;gt;, add a Widget Blueprint to your mod folder.&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki_Photoscene_CreateWidgetBP.jpg|frameless|342x342px]]&lt;br /&gt;
&lt;br /&gt;
Open the Widget, and from the &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; menu, select &amp;lt;code&amp;gt;Reparent Blueprint&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki_Photoscene_ReparentWidgetBP01.jpg|frameless|342x342px]]&lt;br /&gt;
&lt;br /&gt;
In the menu that appears, find and select &amp;lt;code&amp;gt;Photo Scene Widget Base&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki_Photoscene_ReparentWidgetBP02.png|frameless|290x290px]]&lt;br /&gt;
&lt;br /&gt;
From the Hierarchy window, delete the &amp;lt;code&amp;gt;Canvas Panel&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki_Photoscene_DeleteCanvas.png|frameless|300x300px]]&lt;br /&gt;
&lt;br /&gt;
You are now free to design the buttons, sliders, and drop-down menus, etc... to your heart&#039;s content!&lt;br /&gt;
&lt;br /&gt;
=== Quick Tips: ===&lt;br /&gt;
&lt;br /&gt;
* Add all your buttons and options under a parent Vertical Box&lt;br /&gt;
** your widget will appear under the &amp;lt;code&amp;gt;Level Settings&amp;lt;/code&amp;gt; menu in the Photoscene, and as such do not have much horizontal space to work with. [[File:Wiki_Photoscene_Tips01.gif|frameless|300x300px]]&lt;br /&gt;
* There are a few preset buttons and sliders you can use that will make your life easier. These can be searched for and used from the Palette menu, but feel free to design your own. More info on the functionality of these widgets can be found on the [[About Photoscene Blueprints]] page:&lt;br /&gt;
** Slider_Photo_Manager&lt;br /&gt;
** UW_DropDown_Photoscene&lt;br /&gt;
** Photoscene_Checkbox_UW&lt;br /&gt;
** UW_TextBox_Photoscene&lt;br /&gt;
&lt;br /&gt;
== Widget Functionality ==&lt;br /&gt;
The &amp;lt;code&amp;gt;Photo Scene Widget Base&amp;lt;/code&amp;gt; parent type has a few function calls that you should be aware of, and use where necessary.&lt;br /&gt;
&lt;br /&gt;
From the &#039;Graph&#039; view, hover over the &amp;lt;code&amp;gt;Functions&amp;lt;/code&amp;gt; menu, and select &amp;lt;code&amp;gt;Override&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki_Photoscene_FunctionsOverride.png|frameless|433x433px]]&lt;br /&gt;
&lt;br /&gt;
Don&#039;t worry if these are overwhelming you, they will be explained more in-depth later.&lt;br /&gt;
&lt;br /&gt;
* Check If Ray Tracing Updated:&lt;br /&gt;
** Is called whenever any ray-tracing settings are updated.&lt;br /&gt;
** This should mostly be ignored, as it is an internal function, but can be overridden if you find yourself running into discrepancies between ray-tracing and non-ray-tracing in your level. &lt;br /&gt;
** Most discrepancies in ray-tracing are related to shadows and reflections, and as such, there is another function that should be used before this one. However, if you find yourself still struggling to get a scene looking good for both ray-traced and non-ray-traced graphics, then override this.&lt;br /&gt;
* Get Current Parameter Values:&lt;br /&gt;
** Is called by the Photoscene whenever it needs to ask this widget what the current UI values are.&lt;br /&gt;
** The &#039;Return&#039; node of this function is an array of &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt; values.&lt;br /&gt;
** This should be used to send the values of your UI to the Photoscene Preset&#039;s &#039;return&#039; node.&lt;br /&gt;
* Level Finished Loading:&lt;br /&gt;
** Is called whenever the Photoscene level has finished loading.&lt;br /&gt;
** This is a safe way to initialize any values you want to set for the level or UI. when the photoscene is loaded from the level selection menu or a preset.&lt;br /&gt;
* Load Parameter Values:&lt;br /&gt;
** Is called when the Photoscene is loading your level from a preset.&lt;br /&gt;
** Paths in an array of &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt; values.&lt;br /&gt;
** This should be used to initialize your UI values, and apply their related settings to your level.&lt;br /&gt;
* On Initialized:&lt;br /&gt;
** Should be ignored, as it is an internal function.&lt;br /&gt;
* Ray Tracing Settings Updated:&lt;br /&gt;
** Is a helper function designed to call whenever a ray-tracing setting related to reflections, refraction, or shadows, is adjusted.&lt;br /&gt;
** It Paths in a boolean that is True if any RT shadow, reflection, or translucency setting is enabled.&lt;br /&gt;
** If you need further functionality for switching things when ray-tracing is on, please refer to the &amp;lt;code&amp;gt;Check If Ray Tracing Updated&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
=== About the Photo_Scene_Parameter_Struct ===&lt;br /&gt;
The &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt;is the combination name/value pair setting that is used for all photoscene/preset save game values. It is used in the &amp;lt;code&amp;gt;Get Current Parameter Values&amp;lt;/code&amp;gt; function and the &amp;lt;code&amp;gt;Load Parameter Values&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
It consists of three primary settings:&lt;br /&gt;
&lt;br /&gt;
* Parameter Name:&lt;br /&gt;
** Is the name/identifier for this setting. It is not displayed in-game, but is instead used in the save game file to store the identifier for this current variable. These need to be unique for all variables in this photoscene widget.&lt;br /&gt;
* Data Type&lt;br /&gt;
** Is the type of value being stored in this parameter.&lt;br /&gt;
** Ties in with the #Value.&lt;br /&gt;
** Each photoscene widget parameter can only contain one type of data, so chose wisely.&lt;br /&gt;
* #Value &lt;br /&gt;
** For the current parameter name and data type, this value is used. Match it to the &amp;lt;code&amp;gt;Data Type&amp;lt;/code&amp;gt;setting.&lt;br /&gt;
&lt;br /&gt;
For instance, if you have a &amp;lt;code&amp;gt;slider&amp;lt;/code&amp;gt; that affects the &amp;lt;code&amp;gt;Brightness&amp;lt;/code&amp;gt; of your photoscene, you would have a &amp;lt;code&amp;gt;Parameter Name&amp;lt;/code&amp;gt; of something identifiable, like &amp;lt;code&amp;gt;SceneBrightness&amp;lt;/code&amp;gt;, a &amp;lt;code&amp;gt;Data Type&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;Float&amp;lt;/code&amp;gt;, and a &amp;lt;code&amp;gt;Float Val&amp;lt;/code&amp;gt; equal to your &amp;lt;code&amp;gt;slider&amp;lt;/code&amp;gt; value. If you had a &amp;lt;code&amp;gt;checkbox&amp;lt;/code&amp;gt; instead, you would use a &amp;lt;code&amp;gt;data type&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; and a &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; val equal to your &amp;lt;code&amp;gt;checkbox&amp;lt;/code&amp;gt; value.&lt;br /&gt;
&lt;br /&gt;
For each setting your photoscene widget can change, you should use one &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki_Photoscene_AboutThePhotoSceneParameterStruct01.png|frameless|300x300px]]&lt;br /&gt;
&lt;br /&gt;
=== Using the Get Current Parameter Values function ===&lt;br /&gt;
This function is called whenever the photoscene preset tries to save this level and its associated settings. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Get Current Parameter Values&amp;lt;/code&amp;gt; function expects an array of &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
You should use the &amp;lt;code&amp;gt;Make Array&amp;lt;/code&amp;gt; node to input into the &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; node, with a number of &amp;lt;code&amp;gt;array elements&amp;lt;/code&amp;gt; equal to the number of settings in your photoscene widget. Each &amp;lt;code&amp;gt;array element&amp;lt;/code&amp;gt; should itself be wired to a &amp;lt;code&amp;gt;Make Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt; node, with the &amp;lt;code&amp;gt;Parameter Name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Data Type&amp;lt;/code&amp;gt;, and selected &amp;lt;code&amp;gt;data type&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;Value&amp;lt;/code&amp;gt; set.&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki_Photoscene_UsingGetCurrentParameterValues01.png|frameless|300x300px]]&lt;br /&gt;
&lt;br /&gt;
=== Using the Level Finished Loading function ===&lt;br /&gt;
This function is called whenever the photoscene level has finished loading. If you wish to set some parameters, find some actors, or otherwise initialize anything in your photoscene widget blueprint, do so here. This is a &#039;safe&#039; version of &amp;lt;code&amp;gt;On Initialized&amp;lt;/code&amp;gt;, as it is only called once the level itself and all its contents/actors have been loaded.&lt;br /&gt;
&lt;br /&gt;
=== Using the Load Parameter Values function ===&lt;br /&gt;
Load Parameter Values is called whenever the photoscene is loading a preset which contains your photoscene level and its associated widget blueprint settings. Any preset that contains your level will contain a list of settings associated with your level (defined in &amp;lt;code&amp;gt;Get Current Parameter Values&amp;lt;/code&amp;gt;), which will need to be applied.&lt;br /&gt;
&lt;br /&gt;
It returns a &amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt;, which is a fancy version of an &amp;lt;code&amp;gt;array&amp;lt;/code&amp;gt; , with key/value pairs for each array element. The &amp;lt;code&amp;gt;Key&amp;lt;/code&amp;gt; for each element is the name you returned in Get current Parameter Values from&lt;br /&gt;
&lt;br /&gt;
To apply each setting from the map to your level, The following method works well:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Find&amp;lt;/code&amp;gt; the &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; associated with each of your &amp;lt;code&amp;gt;Parameter Name&amp;lt;/code&amp;gt;s, and;&lt;br /&gt;
# if the &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is found,&lt;br /&gt;
# apply it to whatever logic you use that value for.&lt;br /&gt;
[[File:Wiki_Photoscene_loadparametervalues01.png|frameless|300x300px]]&lt;br /&gt;
&lt;br /&gt;
Remember that the value you are &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt;ing has to be the same as the value you set for each setting in &amp;lt;code&amp;gt;Get Current Parameter Values&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Using the Ray Tracing Settings Updated function ===&lt;br /&gt;
This function is called every time a ray-tracing-related setting is updated. It returns &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; when any of the shadow, translucency, or reflections ray-tracing settings are enabled, or &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt; when none of them are enabled.&lt;br /&gt;
&lt;br /&gt;
This is useful when you have a material or mesh or other such thing which conflicts with a ray-traced scene. An example of such is the &#039;10s Design Room photoscene, where the glass materials on the windows are swapped out for a ray-tracing optimised version when ray-tracing is enabled, and swapped back to the standard material when ray-tracing is disabled.&lt;br /&gt;
&lt;br /&gt;
== Creating a Photoscene Level Preview file ==&lt;br /&gt;
The Photoscene level preview file contains the overall information about your photoscene, as well as links to the optional widget blueprint, the thumbnail picture(s), and the actual level.&lt;br /&gt;
&lt;br /&gt;
Create a &amp;lt;code&amp;gt;PhotosceneLevelPreview&amp;lt;/code&amp;gt; file by right-clicking in the content browser, and from the &amp;lt;code&amp;gt;camso&amp;lt;/code&amp;gt; group, select &amp;lt;code&amp;gt;Photo Scene Level&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;PhotoSceneLevelPreview&amp;lt;/code&amp;gt; file contains the following settings:&lt;br /&gt;
&lt;br /&gt;
* Name:&lt;br /&gt;
** This is the name of your photoscene. It will appear in-game as the name of the level in the level selection menu.&lt;br /&gt;
* Default Locator Name:&lt;br /&gt;
** This is the name of the &amp;lt;code&amp;gt;a_car_locator&amp;lt;/code&amp;gt; actor that you wish to be the default location of the car when the scene is first loaded.&lt;br /&gt;
* GUID:&lt;br /&gt;
** This is an unique GUID that you should generate for this photoscene. It must be unique to any other GUID. &lt;br /&gt;
** When first creating your photoscene, generate a new GUID for it by opening the photoscene level preview file and from the drop-down to the right of the GUID setting, select &amp;lt;code&amp;gt;Generate&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Level Preview Images:&lt;br /&gt;
** The photoscene level selection menu displays any number of thumbnail pictures for each photoscene, and will cycle between them slowly whenever the player hovers their mouse over the icon.&lt;br /&gt;
** You can have as many or as few as you like. If you only have one, only one will be displayed. If you have more than one, they will cycle through each other as the player hovers over the icon.&lt;br /&gt;
** Preview images will be flood filled to a 16:9 aspect ratio in the level selection menu.&lt;br /&gt;
*** Because of this, they should be no larger than 512 pixels wide, as any larger texture will take up texture memory on the players&#039; GPU but not actually impact the visual quality of the icon.&lt;br /&gt;
*** Textures that are taller or wider than 16:9 will be clipped at the edges. The textures are flood-filled to the 16:9 thumbnail icon, and any texture space outside of that is ignored.&lt;br /&gt;
** Preview images should not contain an alpha channel. If an alpha channel is supplied, then the texture will be invisible in-game, and your thumbnail will be completely red.&lt;br /&gt;
** Optimal settings for your thumbnail textures:&lt;br /&gt;
*** maximum horizontal resolution of 512 pixels&lt;br /&gt;
*** DXT1 compression&lt;br /&gt;
*** sRGB True&lt;br /&gt;
*** Has alpha channel: False&lt;br /&gt;
* Level:&lt;br /&gt;
** This is a link/reference to your actual level.&lt;br /&gt;
* Year:&lt;br /&gt;
** This is the level&#039;s associated year.&lt;br /&gt;
** It is displayed in the level selection menu next to the level&#039;s name.&lt;br /&gt;
** It currently has no other purpose, but could be used in future Automation updates to lock off certain levels during the campaign.&lt;br /&gt;
* Is Designer Level:&lt;br /&gt;
** this is used for if your photoscene level also contains the required blueprints and actors to function as a car and engine designer, and you wish for players to be able to select your photoscene as their car and/or engine designer level.&lt;br /&gt;
** Default is False&lt;br /&gt;
* Opt Custom Level Widget:&lt;br /&gt;
** If your photoscene contains player-adjustable settings, and you have correctly set up a photoscene widget blueprint, then this setting should be set to your photoscene widget blueprint.&lt;br /&gt;
&lt;br /&gt;
== Share Your Mod. ==&lt;br /&gt;
Go to the [[Modding]] page to see how to share your mod.&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=Photoscenes&amp;diff=4943</id>
		<title>Photoscenes</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=Photoscenes&amp;diff=4943"/>
		<updated>2023-03-03T03:41:10Z</updated>

		<summary type="html">&lt;p&gt;Hannah: /* About the Photo_Scene_Parameter_Struct */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Photoscene support was added 25th October 2017.&lt;br /&gt;
&lt;br /&gt;
Beginning with LCv4.2, Automation supports player-customizable options for individual photoscenes.&lt;br /&gt;
&lt;br /&gt;
There is an example photoscene mod included in the sdk. open it to see how it works. It is also available on the Steam Workshop as a mod.&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
# create a mod&lt;br /&gt;
# create and design a level&lt;br /&gt;
# (Optional) Create a photoscene Widget for player-customization&lt;br /&gt;
#create and fill out a Photoscene Level Preview file.&lt;br /&gt;
## create Thumbnail(s)&lt;br /&gt;
# Share your mod&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
A photoscene mod contains a set of files that define how the photoscene works, and what it looks like. It consists of the following:&lt;br /&gt;
&lt;br /&gt;
# a level/scene&lt;br /&gt;
# a photoscene level preview file&lt;br /&gt;
# at least one thumbnail picture&lt;br /&gt;
# (optionally) a widget blueprint&lt;br /&gt;
&lt;br /&gt;
== Create A New Blank Mod ==&lt;br /&gt;
&lt;br /&gt;
* Create a new Mod from the Blank Template [[index.php?title=File:UE4ModCreation_01.gif|frameless]]&amp;lt;br /&amp;gt;&lt;br /&gt;
* fill out the wizard and press Create Mod [[index.php?title=File:UE4ModCreation_02.gif|frameless]]&lt;br /&gt;
&lt;br /&gt;
== Create a New Blank Level ==&lt;br /&gt;
Create a new blank level in your mod plugin folder. Name it whatever you&#039;d like.&lt;br /&gt;
&lt;br /&gt;
Open the level by double-clicking it.&lt;br /&gt;
&lt;br /&gt;
=== Design your level ===&lt;br /&gt;
do whatever you want to make your level be what you want.&lt;br /&gt;
&lt;br /&gt;
This is not anything particular to Automation, but UE4 in General. Watch some of Epic&#039;s tutorials on this: https://www.youtube.com/watch?v=cl_eoVfNDKU&amp;amp;list=PLZlv_N0_O1gak1_FoAJVrEGiLIploeF3F&lt;br /&gt;
&lt;br /&gt;
=== Level Creation Guidelines ===&lt;br /&gt;
[[index.php?title=File:UE4ModCreation_24.gif|frameless]]&lt;br /&gt;
* when you set the car to &#039;snap to ground&#039;, a ray is cast from 6m above the car, to 2m below the car. the car is &#039;placed&#039; on the first surface it collides with. Make sure any roofing or props in this range dont have collision enabled, or the car will mistake them for the ground.&lt;br /&gt;
* Search the &#039;&#039;&#039;content browser&#039;&#039;&#039; for &amp;lt;code&amp;gt;A Car Locator&amp;lt;/code&amp;gt;.&lt;br /&gt;
**These are the bookmarks for sub-level positions.&lt;br /&gt;
**Place them wherever you want the car to be, and in the &#039;&#039;&#039;Details&#039;&#039;&#039; panel, give them a name.&lt;br /&gt;
**This name will show up in the levels menu in the photoscene as one of the sub-level positions.&lt;br /&gt;
**You can have as many as you want.&lt;br /&gt;
**if none are present, the car will spawn at 0,0,0&lt;br /&gt;
*Currently, Stationary Lights are broken for Automation. use either static or movable lighting in your scenes.&lt;br /&gt;
&lt;br /&gt;
== Adding Customization Options To Your Photoscene ==&lt;br /&gt;
Beginning with LCv4.2, Automation supports player-customizable options for individual photoscenes.&lt;br /&gt;
&lt;br /&gt;
You can set up your photoscene to allow the player to change the colour of the lighting, the time of day, whether street lights are turned on, etc... the world is your oyster!&lt;br /&gt;
&lt;br /&gt;
=== Creating a Photoscene Widget ===&lt;br /&gt;
From the &amp;lt;code&amp;gt;Content Browser&amp;lt;/code&amp;gt;, add a Widget Blueprint to your mod folder.&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=File:Wiki_Photoscene_CreateWidgetBP.jpg|frameless|342x342px]]&lt;br /&gt;
&lt;br /&gt;
Open the Widget, and from the &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; menu, select &amp;lt;code&amp;gt;Reparent Blueprint&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=File:Wiki_Photoscene_ReparentWidgetBP01.jpg|frameless|342x342px]]&lt;br /&gt;
&lt;br /&gt;
In the menu that appears, find and select &amp;lt;code&amp;gt;Photo Scene Widget Base&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=File:Wiki_Photoscene_ReparentWidgetBP02.png|frameless|290x290px]]&lt;br /&gt;
&lt;br /&gt;
From the Hierarchy window, delete the &amp;lt;code&amp;gt;Canvas Panel&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=File:Wiki_Photoscene_DeleteCanvas.png|frameless|300x300px]]&lt;br /&gt;
&lt;br /&gt;
You are now free to design the buttons, sliders, and drop-down menus, etc... to your heart&#039;s content!&lt;br /&gt;
&lt;br /&gt;
=== Quick Tips: ===&lt;br /&gt;
&lt;br /&gt;
* Add all your buttons and options under a parent Vertical Box&lt;br /&gt;
** your widget will appear under the &amp;lt;code&amp;gt;Level Settings&amp;lt;/code&amp;gt; menu in the Photoscene, and as such do not have much horizontal space to work with. [[index.php?title=File:Wiki_Photoscene_Tips01.gif|frameless|300x300px]]&lt;br /&gt;
* There are a few preset buttons and sliders you can use that will make your life easier. These can be searched for and used from the Palette menu, but feel free to design your own. More info on the functionality of these widgets can be found on the [[About Photoscene Blueprints]] page:&lt;br /&gt;
** Slider_Photo_Manager&lt;br /&gt;
** UW_DropDown_Photoscene&lt;br /&gt;
** Photoscene_Checkbox_UW&lt;br /&gt;
** UW_TextBox_Photoscene&lt;br /&gt;
&lt;br /&gt;
== Widget Functionality ==&lt;br /&gt;
The &amp;lt;code&amp;gt;Photo Scene Widget Base&amp;lt;/code&amp;gt; parent type has a few function calls that you should be aware of, and use where necessary.&lt;br /&gt;
&lt;br /&gt;
From the &#039;Graph&#039; view, hover over the &amp;lt;code&amp;gt;Functions&amp;lt;/code&amp;gt; menu, and select &amp;lt;code&amp;gt;Override&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=File:Wiki_Photoscene_FunctionsOverride.png|frameless|433x433px]]&lt;br /&gt;
&lt;br /&gt;
Don&#039;t worry if these are overwhelming you, they will be explained more in-depth later.&lt;br /&gt;
&lt;br /&gt;
* Check If Ray Tracing Updated:&lt;br /&gt;
** Is called whenever any ray-tracing settings are updated.&lt;br /&gt;
** This should mostly be ignored, as it is an internal function, but can be overridden if you find yourself running into discrepancies between ray-tracing and non-ray-tracing in your level. &lt;br /&gt;
** Most discrepancies in ray-tracing are related to shadows and reflections, and as such, there is another function that should be used before this one. However, if you find yourself still struggling to get a scene looking good for both ray-traced and non-ray-traced graphics, then override this.&lt;br /&gt;
* Get Current Parameter Values:&lt;br /&gt;
** Is called by the Photoscene whenever it needs to ask this widget what the current UI values are.&lt;br /&gt;
** The &#039;Return&#039; node of this function is an array of &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt; values.&lt;br /&gt;
** This should be used to send the values of your UI to the Photoscene Preset&#039;s &#039;return&#039; node.&lt;br /&gt;
* Level Finished Loading:&lt;br /&gt;
** Is called whenever the Photoscene level has finished loading.&lt;br /&gt;
** This is a safe way to initialize any values you want to set for the level or UI. when the photoscene is loaded from the level selection menu or a preset.&lt;br /&gt;
* Load Parameter Values:&lt;br /&gt;
** Is called when the Photoscene is loading your level from a preset.&lt;br /&gt;
** Paths in an array of &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt; values.&lt;br /&gt;
** This should be used to initialize your UI values, and apply their related settings to your level.&lt;br /&gt;
* On Initialized:&lt;br /&gt;
** Should be ignored, as it is an internal function.&lt;br /&gt;
* Ray Tracing Settings Updated:&lt;br /&gt;
** Is a helper function designed to call whenever a ray-tracing setting related to reflections, refraction, or shadows, is adjusted.&lt;br /&gt;
** It Paths in a boolean that is True if any RT shadow, reflection, or translucency setting is enabled.&lt;br /&gt;
** If you need further functionality for switching things when ray-tracing is on, please refer to the &amp;lt;code&amp;gt;Check If Ray Tracing Updated&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
=== About the Photo_Scene_Parameter_Struct ===&lt;br /&gt;
The &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt;is the combination name/value pair setting that is used for all photoscene/preset save game values. It is used in the &amp;lt;code&amp;gt;Get Current Parameter Values&amp;lt;/code&amp;gt; function and the &amp;lt;code&amp;gt;Load Parameter Values&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
It consists of three primary settings:&lt;br /&gt;
&lt;br /&gt;
* Parameter Name:&lt;br /&gt;
** Is the name/identifier for this setting. It is not displayed in-game, but is instead used in the save game file to store the identifier for this current variable. These need to be unique for all variables in this photoscene widget.&lt;br /&gt;
* Data Type&lt;br /&gt;
** Is the type of value being stored in this parameter.&lt;br /&gt;
** Ties in with the #Value.&lt;br /&gt;
** Each photoscene widget parameter can only contain one type of data, so chose wisely.&lt;br /&gt;
* #Value &lt;br /&gt;
** For the current parameter name and data type, this value is used. Match it to the &amp;lt;code&amp;gt;Data Type&amp;lt;/code&amp;gt;setting.&lt;br /&gt;
&lt;br /&gt;
For instance, if you have a &amp;lt;code&amp;gt;slider&amp;lt;/code&amp;gt; that affects the &amp;lt;code&amp;gt;Brightness&amp;lt;/code&amp;gt; of your photoscene, you would have a &amp;lt;code&amp;gt;Parameter Name&amp;lt;/code&amp;gt; of something identifiable, like &amp;lt;code&amp;gt;SceneBrightness&amp;lt;/code&amp;gt;, a &amp;lt;code&amp;gt;Data Type&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;Float&amp;lt;/code&amp;gt;, and a &amp;lt;code&amp;gt;Float Val&amp;lt;/code&amp;gt; equal to your &amp;lt;code&amp;gt;slider&amp;lt;/code&amp;gt; value. If you had a &amp;lt;code&amp;gt;checkbox&amp;lt;/code&amp;gt; instead, you would use a &amp;lt;code&amp;gt;data type&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; and a &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; val equal to your &amp;lt;code&amp;gt;checkbox&amp;lt;/code&amp;gt; value.&lt;br /&gt;
&lt;br /&gt;
For each setting your photoscene widget can change, you should use one &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=File:Wiki_Photoscene_AboutThePhotoSceneParameterStruct01.png|frameless|300x300px]]&lt;br /&gt;
&lt;br /&gt;
=== Using the Get Current Parameter Values function ===&lt;br /&gt;
This function is called whenever the photoscene preset tries to save this level and its associated settings. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Get Current Parameter Values&amp;lt;/code&amp;gt; function expects an array of &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
You should use the &amp;lt;code&amp;gt;Make Array&amp;lt;/code&amp;gt; node to input into the &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; node, with a number of &amp;lt;code&amp;gt;array elements&amp;lt;/code&amp;gt; equal to the number of settings in your photoscene widget. Each &amp;lt;code&amp;gt;array element&amp;lt;/code&amp;gt; should itself be wired to a &amp;lt;code&amp;gt;Make Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt; node, with the &amp;lt;code&amp;gt;Parameter Name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Data Type&amp;lt;/code&amp;gt;, and selected &amp;lt;code&amp;gt;data type&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;Value&amp;lt;/code&amp;gt; set.&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=File:Wiki_Photoscene_UsingGetCurrentParameterValues01.png|frameless|300x300px]]&lt;br /&gt;
&lt;br /&gt;
=== Using the Level Finished Loading function ===&lt;br /&gt;
This function is called whenever the photoscene level has finished loading. If you wish to set some parameters, find some actors, or otherwise initialize anything in your photoscene widget blueprint, do so here. This is a &#039;safe&#039; version of &amp;lt;code&amp;gt;On Initialized&amp;lt;/code&amp;gt;, as it is only called once the level itself and all its contents/actors have been loaded.&lt;br /&gt;
&lt;br /&gt;
=== Using the Load Parameter Values function ===&lt;br /&gt;
Load Parameter Values is called whenever the photoscene is loading a preset which contains your photoscene level and its associated widget blueprint settings. Any preset that contains your level will contain a list of settings associated with your level (defined in &amp;lt;code&amp;gt;Get Current Parameter Values&amp;lt;/code&amp;gt;), which will need to be applied.&lt;br /&gt;
&lt;br /&gt;
It returns a &amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt;, which is a fancy version of an &amp;lt;code&amp;gt;array&amp;lt;/code&amp;gt; , with key/value pairs for each array element. The &amp;lt;code&amp;gt;Key&amp;lt;/code&amp;gt; for each element is the name you returned in Get current Parameter Values from&lt;br /&gt;
&lt;br /&gt;
To apply each setting from the map to your level, The following method works well:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Find&amp;lt;/code&amp;gt; the &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; associated with each of your &amp;lt;code&amp;gt;Parameter Name&amp;lt;/code&amp;gt;s, and;&lt;br /&gt;
# if the &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is found,&lt;br /&gt;
# apply it to whatever logic you use that value for.&lt;br /&gt;
[[index.php?title=File:Wiki_Photoscene_loadparametervalues01.png|frameless|300x300px]]&lt;br /&gt;
&lt;br /&gt;
Remember that the value you are &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt;ing has to be the same as the value you set for each setting in &amp;lt;code&amp;gt;Get Current Parameter Values&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Using the Ray Tracing Settings Updated function ===&lt;br /&gt;
This function is called every time a ray-tracing-related setting is updated. It returns &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; when any of the shadow, translucency, or reflections ray-tracing settings are enabled, or &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt; when none of them are enabled.&lt;br /&gt;
&lt;br /&gt;
This is useful when you have a material or mesh or other such thing which conflicts with a ray-traced scene. An example of such is the &#039;10s Design Room photoscene, where the glass materials on the windows are swapped out for a ray-tracing optimised version when ray-tracing is enabled, and swapped back to the standard material when ray-tracing is disabled.&lt;br /&gt;
&lt;br /&gt;
== Creating a Photoscene Level Preview file ==&lt;br /&gt;
The Photoscene level preview file contains the overall information about your photoscene, as well as links to the optional widget blueprint, the thumbnail picture(s), and the actual level.&lt;br /&gt;
&lt;br /&gt;
Create a &amp;lt;code&amp;gt;PhotosceneLevelPreview&amp;lt;/code&amp;gt; file by right-clicking in the content browser, and from the &amp;lt;code&amp;gt;camso&amp;lt;/code&amp;gt; group, select &amp;lt;code&amp;gt;Photo Scene Level&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;PhotoSceneLevelPreview&amp;lt;/code&amp;gt; file contains the following settings:&lt;br /&gt;
&lt;br /&gt;
* Name:&lt;br /&gt;
** This is the name of your photoscene. It will appear in-game as the name of the level in the level selection menu.&lt;br /&gt;
* Default Locator Name:&lt;br /&gt;
** This is the name of the &amp;lt;code&amp;gt;a_car_locator&amp;lt;/code&amp;gt; actor that you wish to be the default location of the car when the scene is first loaded.&lt;br /&gt;
* GUID:&lt;br /&gt;
** This is an unique GUID that you should generate for this photoscene. It must be unique to any other GUID. &lt;br /&gt;
** When first creating your photoscene, generate a new GUID for it by opening the photoscene level preview file and from the drop-down to the right of the GUID setting, select &amp;lt;code&amp;gt;Generate&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Level Preview Images:&lt;br /&gt;
** The photoscene level selection menu displays any number of thumbnail pictures for each photoscene, and will cycle between them slowly whenever the player hovers their mouse over the icon.&lt;br /&gt;
** You can have as many or as few as you like. If you only have one, only one will be displayed. If you have more than one, they will cycle through each other as the player hovers over the icon.&lt;br /&gt;
** Preview images will be flood filled to a 16:9 aspect ratio in the level selection menu.&lt;br /&gt;
*** Because of this, they should be no larger than 512 pixels wide, as any larger texture will take up texture memory on the players&#039; GPU but not actually impact the visual quality of the icon.&lt;br /&gt;
*** Textures that are taller or wider than 16:9 will be clipped at the edges. The textures are flood-filled to the 16:9 thumbnail icon, and any texture space outside of that is ignored.&lt;br /&gt;
** Preview images should not contain an alpha channel. If an alpha channel is supplied, then the texture will be invisible in-game, and your thumbnail will be completely red.&lt;br /&gt;
** Optimal settings for your thumbnail textures:&lt;br /&gt;
*** maximum horizontal resolution of 512 pixels&lt;br /&gt;
*** DXT1 compression&lt;br /&gt;
*** sRGB True&lt;br /&gt;
*** Has alpha channel: False&lt;br /&gt;
* Level:&lt;br /&gt;
** This is a link/reference to your actual level.&lt;br /&gt;
* Year:&lt;br /&gt;
** This is the level&#039;s associated year.&lt;br /&gt;
** It is displayed in the level selection menu next to the level&#039;s name.&lt;br /&gt;
** It currently has no other purpose, but could be used in future Automation updates to lock off certain levels during the campaign.&lt;br /&gt;
* Is Designer Level:&lt;br /&gt;
** this is used for if your photoscene level also contains the required blueprints and actors to function as a car and engine designer, and you wish for players to be able to select your photoscene as their car and/or engine designer level.&lt;br /&gt;
** Default is False&lt;br /&gt;
* Opt Custom Level Widget:&lt;br /&gt;
** If your photoscene contains player-adjustable settings, and you have correctly set up a photoscene widget blueprint, then this setting should be set to your photoscene widget blueprint.&lt;br /&gt;
&lt;br /&gt;
== Share Your Mod. ==&lt;br /&gt;
Go to the [[Modding]] page to see how to share your mod.&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=About_Photoscene_Blueprints&amp;diff=4942</id>
		<title>About Photoscene Blueprints</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=About_Photoscene_Blueprints&amp;diff=4942"/>
		<updated>2023-03-03T03:37:58Z</updated>

		<summary type="html">&lt;p&gt;Hannah: /* Using The UW_DropDown_Photoscene */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Using the Photoscene Widgets ==&lt;br /&gt;
[[File:ThePhotosceneSlider.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Using The Photoscene_Slider_UW ===&lt;br /&gt;
The &amp;lt;code&amp;gt;Slider_Photo_Manager&amp;lt;/code&amp;gt; is a slider with a title text, plus and minus buttons, and a text box for the current value which can be set and overridden by the player.&lt;br /&gt;
&lt;br /&gt;
It has a &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event that is called whenever the player changes the value of the slider, and this event should be utilized for setting your Photoscene settings.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event returns a &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; value.&lt;br /&gt;
&lt;br /&gt;
==== The Slider&#039;s Settings ====&lt;br /&gt;
The &amp;lt;code&amp;gt;Slider_Photo_Manager&amp;lt;/code&amp;gt; has a few settings of note:&lt;br /&gt;
*Min Value:&lt;br /&gt;
**Defines the minimum number that the slider can naturally reach.&lt;br /&gt;
**Can be overridden using the text box by the player.&lt;br /&gt;
**Default is 0.&lt;br /&gt;
*Max Value:&lt;br /&gt;
**Defines the maximum number that the slider can naturally reach.&lt;br /&gt;
**Can be overridden using the text box by the player.&lt;br /&gt;
**Default is 1.&lt;br /&gt;
*Sig Figs:&lt;br /&gt;
**Defines the number of significant figures that will be displayed in the text box.&lt;br /&gt;
**Default is 3.&lt;br /&gt;
*Step Count:&lt;br /&gt;
**Defines the number of steps that are available in the slider.&lt;br /&gt;
**Default is 100.&lt;br /&gt;
**Useful when the slider range is massive, and you dont want the player to have to scrub through all values you may have available.&lt;br /&gt;
**For instance: if your slider has a min range of 0, and a max of 500, it may take the player a long time to incriment the value with their scroll wheel or using the +/- buttons, so setting a step count of 10 will mean that the player only has to press &#039;+&#039; 10 times to get from 0 to 500.&lt;br /&gt;
*Title Text:&lt;br /&gt;
**The text to display next to the slider. Useful for telling the player what this slider does.&lt;br /&gt;
**Default is empty/no text.&lt;br /&gt;
*Display Whole Numbers Only:&lt;br /&gt;
**Is a boolean, default is False.&lt;br /&gt;
**When True, ignores the &amp;lt;code&amp;gt;Sig Figs&amp;lt;/code&amp;gt; value only when the number of significant integers is less than the number of significant figures.&lt;br /&gt;
**Will only display integer values, and ignores any fractional values the slider may have set.&lt;br /&gt;
**For instance, if you have a slider with a min of 0, a max of 3, and 30 steps, it is possible for the player to get any single-digit fraction of each integer (0, 0.1, 0.2, 0.3......... 1, 1.1, 1.2, 1.3....... 2, 2.1, 2.2, 2.3..... etc), and while you may want this functionality, you may not want to display that fractional value. Enabling this setting will mean that while the player can set the slider to 4.6, say, the slider will display that the value is 4, despite the actual value being 4.6.&lt;br /&gt;
&lt;br /&gt;
==== Doing Things When The Slider Changes ====&lt;br /&gt;
To use the slider, you must use the &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event. To do so, scroll to the bottom of the &amp;lt;code&amp;gt;Photoscene_Slider_UW&amp;lt;/code&amp;gt;&#039;s details, and click the green plus icon next to &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneSliderValueChangedPlusIcon.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
This will create a new event in your timeline:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneSliderValueChangedEvent.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
you can then do whatever you want to do whenever the player changes the slider&#039;s value.&lt;br /&gt;
&lt;br /&gt;
To set the slider&#039;s value yourself, such as when loading a value from a preset, call the &amp;lt;code&amp;gt;Set Value&amp;lt;/code&amp;gt; function:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneSliderSetValue.jpg|frameless]]&lt;br /&gt;
[[File:ThePhotosceneDropDown.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Using The UW_DropDown_Photoscene ===&lt;br /&gt;
The &amp;lt;code&amp;gt;UW_DropDown_Photoscene&amp;lt;/code&amp;gt; is a drop-down menu, with a title text, and a variable number of list options.&lt;br /&gt;
&lt;br /&gt;
It has a &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event that is called whenever the player changes the selected option. It returns a &amp;lt;code&amp;gt;String&amp;lt;/code&amp;gt; value and an &amp;lt;code&amp;gt;Integer&amp;lt;/code&amp;gt; Index value when called. The &amp;lt;code&amp;gt;String&amp;lt;/code&amp;gt; value is the string text of the selected option, while the &amp;lt;code&amp;gt;Index&amp;lt;/code&amp;gt; integer is the position of the currently selected string value in the array/list.&lt;br /&gt;
&lt;br /&gt;
Remember that arrays start at 0. For example: a drop-down with four values, say, &amp;lt;code&amp;gt;one on, one off, both on, both off&amp;lt;/code&amp;gt;, will have selected integers of &amp;lt;code&amp;gt;0,1,2,3&amp;lt;/code&amp;gt;, respectively. If the player Selects &amp;lt;code&amp;gt;one off&amp;lt;/code&amp;gt;, the &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event will return a &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; value of &amp;lt;code&amp;gt;one off&amp;lt;/code&amp;gt;, and an &amp;lt;code&amp;gt;index&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== The UW_DropDown_Photoscene&#039;s Settings ====&lt;br /&gt;
The &amp;lt;code&amp;gt;UW_DropDown_Photoscene&amp;lt;/code&amp;gt; has a few settings of note:&lt;br /&gt;
*Title Text:&lt;br /&gt;
**The text to display next to the drop-down. Useful for telling the player what the drop-down does.&lt;br /&gt;
**Default is &amp;lt;code&amp;gt;Title Text&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Options:&lt;br /&gt;
**The number and names of the options available in the drop-down.&lt;br /&gt;
**You can have as many or as few as you want.&lt;br /&gt;
**Default is empty/no values.&lt;br /&gt;
*Selected Option:&lt;br /&gt;
**The string value of the default selected option for this drop-down.&lt;br /&gt;
**Should be identical to one of the &amp;lt;code&amp;gt;Options&amp;lt;/code&amp;gt; list items.&lt;br /&gt;
**Default is empty/no value.&lt;br /&gt;
&lt;br /&gt;
==== Doing Things When The Drop-Down Changes ====&lt;br /&gt;
To use the drop-down, you must use the &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event. Scroll down to the bottom of the &amp;lt;code&amp;gt;UW_DropDown_Photoscene&amp;lt;/code&amp;gt;&#039;s details settings, and click the plus icon next to the &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneDropDownValueChangedPlusIcon.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
this will create a new event in your timeline:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneDropDownValueChangedEvent.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
you can then do whatever you want to do whenever the player changes the drop-down&#039;s value.&lt;br /&gt;
&lt;br /&gt;
To set the drop-down&#039;s value yourself, such as when loading a value from a preset, call the &amp;lt;code&amp;gt;Set Selected Index&amp;lt;/code&amp;gt; function:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneDropDownSetSelectedIndex.jpg|frameless]]&lt;br /&gt;
[[File:ThePhotosceneCheckbox.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Using The Photoscene_CheckBox_UW ===&lt;br /&gt;
The &amp;lt;code&amp;gt;Photoscene_CheckBox_UW&amp;lt;/code&amp;gt; is a tickbox/checkbox/disabled+enabled buttons.&lt;br /&gt;
&lt;br /&gt;
It has a &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event that is called whenever the player changes the setting. It returns a boolean which is &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; when the value is ticked/enabled/true, and returns &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt; when the value is un-ticked/disabled/false.&lt;br /&gt;
&lt;br /&gt;
==== The Photoscene_CheckBox_UW&#039;s Settings ====&lt;br /&gt;
It has a few settings of note:&lt;br /&gt;
*Title Text:&lt;br /&gt;
**The text to display next to the setting. Useful for telling the player what the setting does.&lt;br /&gt;
**Default is empty/no text.&lt;br /&gt;
*Default Value:&lt;br /&gt;
**Is a boolean. Sets the default value of this setting.&lt;br /&gt;
**Default is un-ticked/disabled/false.&lt;br /&gt;
*Use Buttons:&lt;br /&gt;
**Is a boolean. Switches the widget between the default disabled/enabled buttons, and a small check box with a disabled/enabled text. Useful for some things.&lt;br /&gt;
**Default is un-ticked/disabled/false.&lt;br /&gt;
&lt;br /&gt;
==== Doing Things When The Checkbox Changes ====&lt;br /&gt;
To use the checkbox, you must use the &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event. Scroll down to the bottom of the &amp;lt;code&amp;gt;Photoscene_CheckBox_UW&amp;lt;/code&amp;gt;&#039;s details settings, and click the plus icon next to the &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneCheckboxValueChangedPlusIcon.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
this will create a new event in your timeline:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneCheckboxValueChangedEvent.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
you can then do whatever you want to do whenever the player changes the checkbox&#039;s value.&lt;br /&gt;
&lt;br /&gt;
To set the checkbox&#039;s value yourself, such as when loading a value from a preset, call the &amp;lt;code&amp;gt;Set Is Checked&amp;lt;/code&amp;gt; function:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneCheckboxSetIsChecked.jpg|frameless]]&lt;br /&gt;
[[File:ThePhotosceneTextBox.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Using The UW_TextBox_Photoscene ===&lt;br /&gt;
The &amp;lt;code&amp;gt;UW_TextBox_Photoscene&amp;lt;/code&amp;gt; is a simple text box.&lt;br /&gt;
&lt;br /&gt;
It has a &amp;lt;code&amp;gt;Text Updated&amp;lt;/code&amp;gt; event that is called whenever the text changes from player input. It returns a &amp;lt;code&amp;gt;String&amp;lt;/code&amp;gt; text which is the value of the text box.&lt;br /&gt;
&lt;br /&gt;
==== The UW_TextBox_Photoscene&#039;s Settings ====&lt;br /&gt;
It has a few settings of note:&lt;br /&gt;
*Text:&lt;br /&gt;
**Is the default text to display in the text box.&lt;br /&gt;
**Default is none/no text.&lt;br /&gt;
*Title Text:&lt;br /&gt;
**The text to display next to the setting. Useful for telling the player what the setting does.&lt;br /&gt;
**Default is empty/no text.&lt;br /&gt;
&lt;br /&gt;
==== Doing Things When The Textbox Changes ====&lt;br /&gt;
To use the Textbox, you must use the &amp;lt;code&amp;gt;Text Updated&amp;lt;/code&amp;gt; event. Scroll down to the bottom of the &amp;lt;code&amp;gt;UW_TextBox_Photoscene&amp;lt;/code&amp;gt;&#039;s details settings, and click the plus icon next to the &amp;lt;code&amp;gt;Text Updated&amp;lt;/code&amp;gt; event:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneTextBoxTextUpdatedPlusIcon.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
this will create a new event in your timeline:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneTextBoxTextUpdatedEvent.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
you can then do whatever you want to do whenever the player changes the Textbox&#039;s value.&lt;br /&gt;
&lt;br /&gt;
To set the Textbox&#039;s value yourself, such as when loading a value from a preset, call the &amp;lt;code&amp;gt;Set Text&amp;lt;/code&amp;gt; function:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneTextBoxSetText.jpg|frameless]]&lt;br /&gt;
[[File:ThePhotosceneColourPicker.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Using The Photoscene_ColourPickerAdvanced_UW ===&lt;br /&gt;
The &amp;lt;code&amp;gt;Photoscene_ColourPickerAdvanced_UW&amp;lt;/code&amp;gt; is a colour picker. It allows the player to chose a colour by adjusting three sliders. It has two modes: RGB, and HSV. In RGB mode, the three sliders represent the Red, Green, and Blue colour values for the colour. In HSV mode, the three sliders represent the Hue, Saturation, and Value (brightness) of the colour. It also has a hexadecimal code input.&lt;br /&gt;
&lt;br /&gt;
It has a &amp;lt;code&amp;gt;Colour Updated&amp;lt;/code&amp;gt; event that is called whenever the player changes the colour setting. The Colour Updated event returns two values: A &amp;lt;code&amp;gt;Colour&amp;lt;/code&amp;gt; value, which represents the colour that the player has currently selected, and a &amp;lt;code&amp;gt;Temporary Change&amp;lt;/code&amp;gt; boolean, which should be left unused unless you wish to enable &amp;lt;code&amp;gt;Advanced View&amp;lt;/code&amp;gt;, in which case this value represents whenever the value is temporarily set to default via the &amp;lt;code&amp;gt;Enable&amp;lt;/code&amp;gt; tickbox.&lt;br /&gt;
&lt;br /&gt;
==== The Photoscene_ColourPickerAdvanced_UW&#039;s Settings ====&lt;br /&gt;
It has a few settings of note:&lt;br /&gt;
&lt;br /&gt;
* Title Text&lt;br /&gt;
** The text to display next to the setting. Useful for telling the player what the setting does.&lt;br /&gt;
**Default is empty/no text.&lt;br /&gt;
* Default Value&lt;br /&gt;
** The default value of the colour picker, if not overridden.&lt;br /&gt;
** This is also the value that the colour picker will revert to, if Advanced View is on, and the player un-ticks the Enable tickbox.&lt;br /&gt;
** The default value is &amp;lt;code&amp;gt;1,1,1&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Default Mode&lt;br /&gt;
** The default mode determines whether the colour picker will appear to the user in RGB or HSV mode by default.&lt;br /&gt;
** The default value is &amp;lt;code&amp;gt;RGB&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Include Luminosity&lt;br /&gt;
** When enabled, this setting changes the way the colour picker works, by making all the settings that affect the value of the colour to go from 0-2, instead of the default 0-1. This is used primarily internally for colour grading, as it allows the colour grading settings to desaturate as well as oversaturate the colours, which would not be possible if the colour picker could only go between 0-1 values.&lt;br /&gt;
** The default value is &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Advanced View&lt;br /&gt;
** This enables the advanced mode for this widget. When enabled, a new tick-box appears to the left of the Title field.&lt;br /&gt;
** The player can enable or disable the tick-box, which enables or disables the colour picker.&lt;br /&gt;
** When the colour picker is disabled, the player cannot input anything to the colour picker, and the colour value from the &amp;lt;code&amp;gt;Colour Updated&amp;lt;/code&amp;gt; event is called with the colour from the Default Value.&lt;br /&gt;
** When the player re-enables the colour picker, the colour picker can again be edited by the player, and the &amp;lt;code&amp;gt;Colour Updated&amp;lt;/code&amp;gt; event is again called, this time with the value from the colour picker.&lt;br /&gt;
** When the &amp;lt;code&amp;gt;Colour Updated&amp;lt;/code&amp;gt; event is called, the &amp;lt;code&amp;gt;Temporary Change&amp;lt;/code&amp;gt; value that is returned along with the &amp;lt;code&amp;gt;Colour&amp;lt;/code&amp;gt; value represents whether the Enable tick-box was just un-checked. The &amp;lt;code&amp;gt;Temporary Change&amp;lt;/code&amp;gt; value returns &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; only when the Enable check-box is disabled.&lt;br /&gt;
** The default value is &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Show Title&lt;br /&gt;
** When enabled, the title text is visible. When disabled, the title text is hidden and colapsed.&lt;br /&gt;
** The default value is &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Title Width&lt;br /&gt;
** This determines the width of the title text field, in slate units (pixels). For consistency, this should be left at its default value.&lt;br /&gt;
** This setting is useful when your colour picker is contained within an &amp;lt;code&amp;gt;Expandable Area Camso&amp;lt;/code&amp;gt;, as we usually indent their contents by 42px. For consistency, we like to make sure the title text is the part that shrinks by that 42px, such that the actual colour picker field remains aligned. When such a situation occurs, the Title Width is usually set to &amp;lt;code&amp;gt;Custom&amp;lt;/code&amp;gt;, in which case the width of the title text is determined by the &amp;lt;code&amp;gt;Title Width Override&amp;lt;/code&amp;gt; value.&lt;br /&gt;
** The default value is &amp;lt;code&amp;gt;Text (180px)&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Title Width Override&lt;br /&gt;
** The Title Width Override is used only when the Title Width is set to Custom. When this is the case, the width of the title text is determined by this value.&lt;br /&gt;
** The default value is &amp;lt;code&amp;gt;138&amp;lt;/code&amp;gt;px.&lt;br /&gt;
* Num Indents&lt;br /&gt;
** As an alternative to using the &amp;lt;code&amp;gt;Title Width&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Title Width Override&amp;lt;/code&amp;gt; values, you can instead increase the &amp;lt;code&amp;gt;Num Indents&amp;lt;/code&amp;gt; value, which decreases the width of the Title text by 42px (or whatever the &amp;lt;code&amp;gt;Indent Size&amp;lt;/code&amp;gt; value is set to) for each integer of &amp;lt;code&amp;gt;Num Indents&amp;lt;/code&amp;gt;.&lt;br /&gt;
** The default value is 0.&lt;br /&gt;
* Indent Size&lt;br /&gt;
** This is the value that affects how much the title text is shrunk by, as used by &amp;lt;code&amp;gt;Num Indents&amp;lt;/code&amp;gt;.&lt;br /&gt;
** The default value is 42.&lt;br /&gt;
&lt;br /&gt;
==== Doing Things When The Colour Picker Changes ====&lt;br /&gt;
To use the Colour Picker, you must use the &amp;lt;code&amp;gt;Colour Updated&amp;lt;/code&amp;gt; event. Scroll down to the bottom of the &amp;lt;code&amp;gt;Photoscene_ColourPickerAdvanced_UW&amp;lt;/code&amp;gt;&#039;s details settings, and click the plus icon next to the &amp;lt;code&amp;gt;Colour Updated&amp;lt;/code&amp;gt; event:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneColourPickerColourUpdatedPlusIcon.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
this will create a new event in your timeline:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneColourPickerColourUpdatedEvent.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
you can then do whatever you want to do whenever the player changes the Colour Picker&#039;s value.&lt;br /&gt;
&lt;br /&gt;
To set the Colour Picker&#039;s value yourself, such as when loading a value from a preset, call the &amp;lt;code&amp;gt;Set Value&amp;lt;/code&amp;gt; function:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneColourPickerSetValue.jpg|frameless]]&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=File:PhotosceneColourPickerSetValue.jpg&amp;diff=4941</id>
		<title>File:PhotosceneColourPickerSetValue.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=File:PhotosceneColourPickerSetValue.jpg&amp;diff=4941"/>
		<updated>2023-03-03T03:37:13Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PhotosceneColourPickerSetValue&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=File:PhotosceneColourPickerColourUpdatedEvent.jpg&amp;diff=4940</id>
		<title>File:PhotosceneColourPickerColourUpdatedEvent.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=File:PhotosceneColourPickerColourUpdatedEvent.jpg&amp;diff=4940"/>
		<updated>2023-03-03T03:34:21Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PhotosceneColourPickerColourUpdatedEvent&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=File:PhotosceneColourPickerColourUpdatedPlusIcon.jpg&amp;diff=4939</id>
		<title>File:PhotosceneColourPickerColourUpdatedPlusIcon.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=File:PhotosceneColourPickerColourUpdatedPlusIcon.jpg&amp;diff=4939"/>
		<updated>2023-03-03T03:33:23Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PhotosceneColourPickerColourUpdatedPlusIcon&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=File:ThePhotosceneColourPicker.jpg&amp;diff=4938</id>
		<title>File:ThePhotosceneColourPicker.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=File:ThePhotosceneColourPicker.jpg&amp;diff=4938"/>
		<updated>2023-03-03T03:30:44Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ThePhotosceneColourPicker&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=File:PhotosceneTextBoxSetText.jpg&amp;diff=4937</id>
		<title>File:PhotosceneTextBoxSetText.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=File:PhotosceneTextBoxSetText.jpg&amp;diff=4937"/>
		<updated>2023-03-03T03:29:03Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PhotosceneTextBoxSetText&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=File:PhotosceneTextBoxTextUpdatedEvent.jpg&amp;diff=4936</id>
		<title>File:PhotosceneTextBoxTextUpdatedEvent.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=File:PhotosceneTextBoxTextUpdatedEvent.jpg&amp;diff=4936"/>
		<updated>2023-03-03T03:27:44Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PhotosceneTextBoxTextUpdatedEvent&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=File:PhotosceneTextBoxTextUpdatedPlusIcon.jpg&amp;diff=4935</id>
		<title>File:PhotosceneTextBoxTextUpdatedPlusIcon.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=File:PhotosceneTextBoxTextUpdatedPlusIcon.jpg&amp;diff=4935"/>
		<updated>2023-03-03T03:25:14Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PhotosceneTextBoxTextUpdatedPlusIcon&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=File:ThePhotosceneTextBox.jpg&amp;diff=4934</id>
		<title>File:ThePhotosceneTextBox.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=File:ThePhotosceneTextBox.jpg&amp;diff=4934"/>
		<updated>2023-03-03T03:21:05Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ThePhotosceneTextBox&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=File:PhotosceneCheckboxSetIsChecked.jpg&amp;diff=4933</id>
		<title>File:PhotosceneCheckboxSetIsChecked.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=File:PhotosceneCheckboxSetIsChecked.jpg&amp;diff=4933"/>
		<updated>2023-03-03T03:19:38Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PhotosceneCheckboxSetIsChecked&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=File:PhotosceneCheckboxValueChangedEvent.jpg&amp;diff=4932</id>
		<title>File:PhotosceneCheckboxValueChangedEvent.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=File:PhotosceneCheckboxValueChangedEvent.jpg&amp;diff=4932"/>
		<updated>2023-03-03T03:17:00Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PhotosceneCheckboxValueChangedEvent&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=File:PhotosceneCheckboxValueChangedPlusIcon.jpg&amp;diff=4931</id>
		<title>File:PhotosceneCheckboxValueChangedPlusIcon.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=File:PhotosceneCheckboxValueChangedPlusIcon.jpg&amp;diff=4931"/>
		<updated>2023-03-03T03:16:12Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PhotosceneCheckboxValueChangedPlusIcon&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=File:ThePhotosceneCheckbox.jpg&amp;diff=4930</id>
		<title>File:ThePhotosceneCheckbox.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=File:ThePhotosceneCheckbox.jpg&amp;diff=4930"/>
		<updated>2023-03-03T03:13:24Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ThePhotosceneCheckbox&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=File:PhotosceneDropDownSetSelectedIndex.jpg&amp;diff=4929</id>
		<title>File:PhotosceneDropDownSetSelectedIndex.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=File:PhotosceneDropDownSetSelectedIndex.jpg&amp;diff=4929"/>
		<updated>2023-03-03T03:11:52Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PhotosceneDropDownSetSelectedIndex&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=File:PhotosceneDropDownValueChangedEvent.jpg&amp;diff=4928</id>
		<title>File:PhotosceneDropDownValueChangedEvent.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=File:PhotosceneDropDownValueChangedEvent.jpg&amp;diff=4928"/>
		<updated>2023-03-03T03:09:13Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PhotosceneDropDownValueChangedEvent&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=File:ThePhotosceneDropDown.jpg&amp;diff=4927</id>
		<title>File:ThePhotosceneDropDown.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=File:ThePhotosceneDropDown.jpg&amp;diff=4927"/>
		<updated>2023-03-03T03:06:28Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ThePhotosceneDropDown&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=File:PhotosceneDropDownValueChangedPlusIcon.jpg&amp;diff=4926</id>
		<title>File:PhotosceneDropDownValueChangedPlusIcon.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=File:PhotosceneDropDownValueChangedPlusIcon.jpg&amp;diff=4926"/>
		<updated>2023-03-03T03:05:16Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PhotosceneDropDownValueChangedPlusIcon&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=About_Photoscene_Blueprints&amp;diff=4925</id>
		<title>About Photoscene Blueprints</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=About_Photoscene_Blueprints&amp;diff=4925"/>
		<updated>2023-03-03T03:02:02Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Using the Photoscene Widgets ==&lt;br /&gt;
[[File:ThePhotosceneSlider.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Using The Photoscene_Slider_UW ===&lt;br /&gt;
The &amp;lt;code&amp;gt;Slider_Photo_Manager&amp;lt;/code&amp;gt; is a slider with a title text, plus and minus buttons, and a text box for the current value which can be set and overridden by the player.&lt;br /&gt;
&lt;br /&gt;
It has a &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event that is called whenever the player changes the value of the slider, and this event should be utilized for setting your Photoscene settings.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event returns a &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; value.&lt;br /&gt;
&lt;br /&gt;
==== The Slider&#039;s Settings ====&lt;br /&gt;
The &amp;lt;code&amp;gt;Slider_Photo_Manager&amp;lt;/code&amp;gt; has a few settings of note:&lt;br /&gt;
*Min Value:&lt;br /&gt;
**Defines the minimum number that the slider can naturally reach.&lt;br /&gt;
**Can be overridden using the text box by the player.&lt;br /&gt;
**Default is 0.&lt;br /&gt;
*Max Value:&lt;br /&gt;
**Defines the maximum number that the slider can naturally reach.&lt;br /&gt;
**Can be overridden using the text box by the player.&lt;br /&gt;
**Default is 1.&lt;br /&gt;
*Sig Figs:&lt;br /&gt;
**Defines the number of significant figures that will be displayed in the text box.&lt;br /&gt;
**Default is 3.&lt;br /&gt;
*Step Count:&lt;br /&gt;
**Defines the number of steps that are available in the slider.&lt;br /&gt;
**Default is 100.&lt;br /&gt;
**Useful when the slider range is massive, and you dont want the player to have to scrub through all values you may have available.&lt;br /&gt;
**For instance: if your slider has a min range of 0, and a max of 500, it may take the player a long time to incriment the value with their scroll wheel or using the +/- buttons, so setting a step count of 10 will mean that the player only has to press &#039;+&#039; 10 times to get from 0 to 500.&lt;br /&gt;
*Title Text:&lt;br /&gt;
**The text to display next to the slider. Useful for telling the player what this slider does.&lt;br /&gt;
**Default is empty/no text.&lt;br /&gt;
*Display Whole Numbers Only:&lt;br /&gt;
**Is a boolean, default is False.&lt;br /&gt;
**When True, ignores the &amp;lt;code&amp;gt;Sig Figs&amp;lt;/code&amp;gt; value only when the number of significant integers is less than the number of significant figures.&lt;br /&gt;
**Will only display integer values, and ignores any fractional values the slider may have set.&lt;br /&gt;
**For instance, if you have a slider with a min of 0, a max of 3, and 30 steps, it is possible for the player to get any single-digit fraction of each integer (0, 0.1, 0.2, 0.3......... 1, 1.1, 1.2, 1.3....... 2, 2.1, 2.2, 2.3..... etc), and while you may want this functionality, you may not want to display that fractional value. Enabling this setting will mean that while the player can set the slider to 4.6, say, the slider will display that the value is 4, despite the actual value being 4.6.&lt;br /&gt;
&lt;br /&gt;
==== Doing Things When The Slider Changes ====&lt;br /&gt;
To use the slider, you must use the &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event. To do so, scroll to the bottom of the &amp;lt;code&amp;gt;Photoscene_Slider_UW&amp;lt;/code&amp;gt;&#039;s details, and click the green plus icon next to &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneSliderValueChangedPlusIcon.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
This will create a new event in your timeline:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneSliderValueChangedEvent.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
you can then do whatever you want to do whenever the player changes the slider&#039;s value.&lt;br /&gt;
&lt;br /&gt;
To set the slider&#039;s value yourself, such as when loading a value from a preset, call the &amp;lt;code&amp;gt;Set Value&amp;lt;/code&amp;gt; function:&lt;br /&gt;
&lt;br /&gt;
[[File:PhotosceneSliderSetValue.jpg|frameless]]&lt;br /&gt;
&lt;br /&gt;
=== Using The UW_DropDown_Photoscene ===&lt;br /&gt;
The &amp;lt;code&amp;gt;UW_DropDown_Photoscene&amp;lt;/code&amp;gt; is a drop-down menu, with a title text, and a variable number of list options.&lt;br /&gt;
&lt;br /&gt;
It has a &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event that is called whenever the player changes the selected option. It returns a &amp;lt;code&amp;gt;String&amp;lt;/code&amp;gt; value and an &amp;lt;code&amp;gt;Integer&amp;lt;/code&amp;gt; Index value when called. The &amp;lt;code&amp;gt;String&amp;lt;/code&amp;gt; value is the string text of the selected option, while the &amp;lt;code&amp;gt;Index&amp;lt;/code&amp;gt; integer is the position of the currently selected string value in the array/list.&lt;br /&gt;
&lt;br /&gt;
Remember that arrays start at 0. For example: a drop-down with four values, say, &amp;lt;code&amp;gt;one on, one off, both on, both off&amp;lt;/code&amp;gt;, will have selected integers of &amp;lt;code&amp;gt;0,1,2,3&amp;lt;/code&amp;gt;, respectively. If the player Selects &amp;lt;code&amp;gt;one off&amp;lt;/code&amp;gt;, the &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event will return a &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; value of &amp;lt;code&amp;gt;one off&amp;lt;/code&amp;gt;, and an &amp;lt;code&amp;gt;index&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;UW_DropDown_Photoscene&amp;lt;/code&amp;gt; has a few settings of note:&lt;br /&gt;
*Title Text:&lt;br /&gt;
**The text to display next to the drop-down. Useful for telling the player what the drop-down does.&lt;br /&gt;
**Default is empty/no text.&lt;br /&gt;
*Options:&lt;br /&gt;
**The number and names of the options available in the drop-down.&lt;br /&gt;
**You can have as many or as few as you want.&lt;br /&gt;
**Default is empty/no values.&lt;br /&gt;
*Selected Option:&lt;br /&gt;
**The string value of the default selected option for this drop-down.&lt;br /&gt;
**Should be identical to one of the &amp;lt;code&amp;gt;Options&amp;lt;/code&amp;gt; list items.&lt;br /&gt;
**Default is empty/no value.&lt;br /&gt;
&lt;br /&gt;
=== Using The Photoscene_CheckBox_UW ===&lt;br /&gt;
The &amp;lt;code&amp;gt;Photoscene_CheckBox_UW&amp;lt;/code&amp;gt; is a tickbox/checkbox/disabled+enabled buttons.&lt;br /&gt;
&lt;br /&gt;
It has a &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event that is called whenever the player changes the setting. It returns a boolean which is &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; when the value is ticked/enabled/true, and returns &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt; when the value is un-ticked/disabled/false.&lt;br /&gt;
&lt;br /&gt;
It has a few settings of note:&lt;br /&gt;
*Title Text:&lt;br /&gt;
**The text to display next to the setting. Useful for telling the player what the setting does.&lt;br /&gt;
**Default is empty/no text.&lt;br /&gt;
*Default Value:&lt;br /&gt;
**Is a boolean. Sets the default value of this setting.&lt;br /&gt;
**Default is un-ticked/disabled/false.&lt;br /&gt;
*Use Buttons:&lt;br /&gt;
**Is a boolean. Switches the widget between the default disabled/enabled buttons, and a small check box with a disabled/enabled text. Useful for some things.&lt;br /&gt;
**Default is un-ticked/disabled/false.&lt;br /&gt;
&lt;br /&gt;
=== Using The UW_TextBox_Photoscene ===&lt;br /&gt;
The &amp;lt;code&amp;gt;UW_TextBox_Photoscene&amp;lt;/code&amp;gt; is a simple text box.&lt;br /&gt;
&lt;br /&gt;
It has a &amp;lt;code&amp;gt;Text Updated&amp;lt;/code&amp;gt; event that is called whenever the text changes from player input. It returns a &amp;lt;code&amp;gt;String&amp;lt;/code&amp;gt; text which is the value of the text box.&lt;br /&gt;
&lt;br /&gt;
It has a few settings of note:&lt;br /&gt;
*Text:&lt;br /&gt;
**Is the default text to display in the text box.&lt;br /&gt;
**Default is none/no text.&lt;br /&gt;
*Title Text:&lt;br /&gt;
**The text to display next to the setting. Useful for telling the player what the setting does.&lt;br /&gt;
**Default is empty/no text.&lt;br /&gt;
&lt;br /&gt;
=== Using The Photoscene_ColourPickerAdvanced_UW ===&lt;br /&gt;
The &amp;lt;code&amp;gt;Photoscene_ColourPickerAdvanced_UW&amp;lt;/code&amp;gt; is a colour picker. It allows the player to chose a colour by adjusting three sliders. It has two modes: RGB, and HSV. In RGB mode, the three sliders represent the Red, Green, and Blue colour values for the colour. In HSV mode, the three sliders represent the Hue, Saturation, and Value (brightness) of the colour. It also has a hexadecimal code input.&lt;br /&gt;
&lt;br /&gt;
It has a &amp;lt;code&amp;gt;Colour Updated&amp;lt;/code&amp;gt; event that is called whenever the player changes the colour setting. The Colour Updated event returns two values: A &amp;lt;code&amp;gt;Colour&amp;lt;/code&amp;gt; value, which represents the colour that the player has currently selected, and a &amp;lt;code&amp;gt;Temporary Change&amp;lt;/code&amp;gt; boolean, which should be left unused unless you wish to enable &amp;lt;code&amp;gt;Advanced View&amp;lt;/code&amp;gt;, in which case this value represents whenever the value is temporarily set to default via the &amp;lt;code&amp;gt;Enable&amp;lt;/code&amp;gt; tickbox.&lt;br /&gt;
&lt;br /&gt;
It has a few settings of note:&lt;br /&gt;
&lt;br /&gt;
* Title Text&lt;br /&gt;
** The text to display next to the setting. Useful for telling the player what the setting does.&lt;br /&gt;
**Default is empty/no text.&lt;br /&gt;
* Default Value&lt;br /&gt;
** The default value of the colour picker, if not overridden.&lt;br /&gt;
** This is also the value that the colour picker will revert to, if Advanced View is on, and the player un-ticks the Enable tickbox.&lt;br /&gt;
** The default value is &amp;lt;code&amp;gt;1,1,1&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Default Mode&lt;br /&gt;
** The default mode determines whether the colour picker will appear to the user in RGB or HSV mode by default.&lt;br /&gt;
** The default value is &amp;lt;code&amp;gt;RGB&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Include Luminosity&lt;br /&gt;
** When enabled, this setting changes the way the colour picker works, by making all the settings that affect the value of the colour to go from 0-2, instead of the default 0-1. This is used primarily internally for colour grading, as it allows the colour grading settings to desaturate as well as oversaturate the colours, which would not be possible if the colour picker could only go between 0-1 values.&lt;br /&gt;
** The default value is &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Advanced View&lt;br /&gt;
** This enables the advanced mode for this widget. When enabled, a new tick-box appears to the left of the Title field.&lt;br /&gt;
** The player can enable or disable the tick-box, which enables or disables the colour picker.&lt;br /&gt;
** When the colour picker is disabled, the player cannot input anything to the colour picker, and the colour value from the &amp;lt;code&amp;gt;Colour Updated&amp;lt;/code&amp;gt; event is called with the colour from the Default Value.&lt;br /&gt;
** When the player re-enables the colour picker, the colour picker can again be edited by the player, and the &amp;lt;code&amp;gt;Colour Updated&amp;lt;/code&amp;gt; event is again called, this time with the value from the colour picker.&lt;br /&gt;
** When the &amp;lt;code&amp;gt;Colour Updated&amp;lt;/code&amp;gt; event is called, the &amp;lt;code&amp;gt;Temporary Change&amp;lt;/code&amp;gt; value that is returned along with the &amp;lt;code&amp;gt;Colour&amp;lt;/code&amp;gt; value represents whether the Enable tick-box was just un-checked. The &amp;lt;code&amp;gt;Temporary Change&amp;lt;/code&amp;gt; value returns &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; only when the Enable check-box is disabled.&lt;br /&gt;
** The default value is &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Show Title&lt;br /&gt;
** When enabled, the title text is visible. When disabled, the title text is hidden and colapsed.&lt;br /&gt;
** The default value is &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Title Width&lt;br /&gt;
** This determines the width of the title text field, in slate units (pixels). For consistency, this should be left at its default value.&lt;br /&gt;
** This setting is useful when your colour picker is contained within an &amp;lt;code&amp;gt;Expandable Area Camso&amp;lt;/code&amp;gt;, as we usually indent their contents by 42px. For consistency, we like to make sure the title text is the part that shrinks by that 42px, such that the actual colour picker field remains aligned. When such a situation occurs, the Title Width is usually set to &amp;lt;code&amp;gt;Custom&amp;lt;/code&amp;gt;, in which case the width of the title text is determined by the &amp;lt;code&amp;gt;Title Width Override&amp;lt;/code&amp;gt; value.&lt;br /&gt;
** The default value is &amp;lt;code&amp;gt;Text (180px)&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Title Width Override&lt;br /&gt;
** The Title Width Override is used only when the Title Width is set to Custom. When this is the case, the width of the title text is determined by this value.&lt;br /&gt;
** The default value is &amp;lt;code&amp;gt;138&amp;lt;/code&amp;gt;px.&lt;br /&gt;
* Num Indents&lt;br /&gt;
** As an alternative to using the &amp;lt;code&amp;gt;Title Width&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Title Width Override&amp;lt;/code&amp;gt; values, you can instead increase the &amp;lt;code&amp;gt;Num Indents&amp;lt;/code&amp;gt; value, which decreases the width of the Title text by 42px (or whatever the &amp;lt;code&amp;gt;Indent Size&amp;lt;/code&amp;gt; value is set to) for each integer of &amp;lt;code&amp;gt;Num Indents&amp;lt;/code&amp;gt;.&lt;br /&gt;
** The default value is 0.&lt;br /&gt;
* Indent Size&lt;br /&gt;
** This is the value that affects how much the title text is shrunk by, as used by &amp;lt;code&amp;gt;Num Indents&amp;lt;/code&amp;gt;.&lt;br /&gt;
** The default value is 42.&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=File:PhotosceneSliderSetValue.jpg&amp;diff=4924</id>
		<title>File:PhotosceneSliderSetValue.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=File:PhotosceneSliderSetValue.jpg&amp;diff=4924"/>
		<updated>2023-03-03T02:59:25Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PhotosceneSliderSetValue&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=File:PhotosceneSliderValueChangedEvent.jpg&amp;diff=4923</id>
		<title>File:PhotosceneSliderValueChangedEvent.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=File:PhotosceneSliderValueChangedEvent.jpg&amp;diff=4923"/>
		<updated>2023-03-03T02:53:30Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PhotosceneSliderValueChangedEvent&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=File:PhotosceneSliderValueChangedPlusIcon.jpg&amp;diff=4922</id>
		<title>File:PhotosceneSliderValueChangedPlusIcon.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=File:PhotosceneSliderValueChangedPlusIcon.jpg&amp;diff=4922"/>
		<updated>2023-03-03T02:52:11Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PhotosceneSliderValueChangedPlusIcon&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=File:ThePhotosceneSlider.jpg&amp;diff=4921</id>
		<title>File:ThePhotosceneSlider.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=File:ThePhotosceneSlider.jpg&amp;diff=4921"/>
		<updated>2023-03-03T02:49:49Z</updated>

		<summary type="html">&lt;p&gt;Hannah: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ThePhotosceneSlider&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=Prop_Mods&amp;diff=4920</id>
		<title>Prop Mods</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=Prop_Mods&amp;diff=4920"/>
		<updated>2023-03-02T04:10:17Z</updated>

		<summary type="html">&lt;p&gt;Hannah: /* Creating a Prop Widget Blueprint */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Beginning with LCv4.2, Automation supports player-addable and player-customizable props to be placed and edited in the photoscene.&lt;br /&gt;
&lt;br /&gt;
A Prop can be placed by the player into the photoscene, and moved/scaled/rotated freely, and optionally may have its&#039; own set of player-customizable UI options.&lt;br /&gt;
&lt;br /&gt;
A Prop can be anything, from a traffic cone, to a mannequin, to a post-process effect that changes the way the camera sees the scene.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
A prop consists of a collection of files:&lt;br /&gt;
&lt;br /&gt;
* A Prop blueprint&lt;br /&gt;
* A Prop Preview file&lt;br /&gt;
* A Prop Group file&lt;br /&gt;
* A Prop Preview thumbnail&lt;br /&gt;
* A Prop Group thumbnail&lt;br /&gt;
* (Optionally) A Prop Widget blueprint&lt;br /&gt;
&lt;br /&gt;
The Prop Blueprint is the actor which will be placed in the photoscene, and can be moved around and edited by the player.&lt;br /&gt;
&lt;br /&gt;
The Prop Blueprint is spawned into the scene when the player selects a Prop Preview file.&lt;br /&gt;
&lt;br /&gt;
The Prop Preview file contains a link to the Prop Blueprint, which it will spawn when the player selects it. The Prop Preview file also contains a link to a thumbnail image to display in the UI, as well as a link to the Prop Group under which this prop should be displayed. &lt;br /&gt;
&lt;br /&gt;
The Prop Preview file may also optionally contain a reference to a prop widget blueprint, which will be added to the photoscene UI under the &amp;lt;code&amp;gt;Selected Prop Settings&amp;lt;/code&amp;gt; menu.&lt;br /&gt;
&lt;br /&gt;
The Prop Group also contains a thumbnail, which will be displayed when the player enters the prop group selection menu. when the player selects a Prop Group, all Prop Preview files that reference that group will be displayed to the player.&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
# Create your prop, with all its optional functionality, inside a Blueprint whose parent class is &amp;lt;code&amp;gt;Photoscene Prop Parent Class&amp;lt;/code&amp;gt;.&lt;br /&gt;
# (Optionally) Create a prop widget, with all its optional functionality, whose parent class is &amp;lt;code&amp;gt;Photoscene Prop Parent Widget&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Create a thumbnail texture for your prop.&lt;br /&gt;
# Create a &amp;lt;code&amp;gt;PhotoScenePropPreview&amp;lt;/code&amp;gt; file, and fill it out with your prop blueprint, thumbnail, and optional widget.&lt;br /&gt;
# Fill out the remaining settings inside the prop preview file, including a Prop Group (if this prop is part of an existing group).&lt;br /&gt;
# If this prop is not part of an existing prop group, also create a prop group preview file, prop group thumbnail, and assign the newly created prop group to your prop preview file.&lt;br /&gt;
&lt;br /&gt;
== Creating a Prop Blueprint ==&lt;br /&gt;
A Prop Blueprint contains all of the visuals and functionality of your prop. It can be as simple or as complex as you like.&lt;br /&gt;
&lt;br /&gt;
The Prop Blueprint is a child of Photoscene_Prop_Parent_Class.&lt;br /&gt;
&lt;br /&gt;
To Create your Prop Blueprint:&lt;br /&gt;
&lt;br /&gt;
# right-click in the Content Browser, and create a &amp;lt;code&amp;gt;Blueprint&amp;lt;/code&amp;gt;.&lt;br /&gt;
# From the window that pops up, drop down the &#039;all classes&#039; menu, search for, and select, &amp;lt;code&amp;gt;Photoscene_Prop_Parent_Class&amp;lt;/code&amp;gt; as the parent class.&lt;br /&gt;
&lt;br /&gt;
A prop blueprint can contain whatever you like, whether it be just a simple static mesh, or something more complex like an animated object, or something with physics simulation.&lt;br /&gt;
&lt;br /&gt;
=== Prop Blueprint Functionality ===&lt;br /&gt;
There are a few helper functions in the Prop Blueprint that you can override and use:&lt;br /&gt;
[[File:Wiki Props PropBlueprintFunctions01.png|none|thumb|336x336px|Note that most of the ones with &#039;Actor&#039; listed on the right are irrelevant. we only need to focus on the ones with &#039;Photoscene Prop Parent Class&#039; as the parent.]]&lt;br /&gt;
&lt;br /&gt;
* Init:&lt;br /&gt;
** This function is called when the prop is first spawned in the scene.&lt;br /&gt;
** If you want to initialize or set up anything when the prop is created, do so here.&lt;br /&gt;
* On Spawned:&lt;br /&gt;
** This function calls Init.&lt;br /&gt;
** This function is for internal use only. &lt;br /&gt;
** Do not call this function yourself.&lt;br /&gt;
* Post-Screenshot:&lt;br /&gt;
** This event is called just after a photo is taken in the photoscene.&lt;br /&gt;
** If you have anything set to turn on or off during a photo, this event happens right after the photo is taken.&lt;br /&gt;
* Pre-Destruct:&lt;br /&gt;
** This event is called just before the prop is deleted.&lt;br /&gt;
** If your prop affects things outside of the prop actor, such as putting a post process effect onto the camera, or changing some part of the scene, please use this event to disable/undo all those effects before the prop is destroyed.&lt;br /&gt;
* Pre-Screenshot:&lt;br /&gt;
** This event is called just before a photo is taken in the photoscene.&lt;br /&gt;
** If you have any effect that you do not wish to be included in photos, use this event to turn them off, or vice versa.&lt;br /&gt;
* Snap To Ground:&lt;br /&gt;
** This is an internal function and should not be overridden.&lt;br /&gt;
* Trace For Ground:&lt;br /&gt;
** This is an internal function and should not be overridden.&lt;br /&gt;
&lt;br /&gt;
== Creating a Prop Widget Blueprint ==&lt;br /&gt;
Like photoscenes, props support custom UI functionality.&lt;br /&gt;
&lt;br /&gt;
You can set up buttons, sliders, drop-down menus, and whatever else your heart desires, to do whatever you want to your prop, or to the world around it.&lt;br /&gt;
&lt;br /&gt;
Prop widgets are derived from the parent class &amp;lt;code&amp;gt;Photoscene_Prop_Parent_Widget&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Using Prop Widget Functions ===&lt;br /&gt;
Just like the Prop Blueprint, the prop widget has functions. Some of these functions are mandatory for full functionality:&lt;br /&gt;
[[File:OverridePropWidgetFunctions.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
* Get Current Photoscene Prop Parameters&lt;br /&gt;
** This function gets called when the user saves a photoscene preset. Because presets save props, they must by extension save a prop&#039;s settings. This function lets the prop tell the photoscene preset what its settings are.&lt;br /&gt;
** It consists of a map, which is an array made of a key-value pair. Drag out from the function&#039;s Return pin, and place down a &amp;lt;code&amp;gt;Make Map&amp;lt;/code&amp;gt; node to save a setting. &lt;br /&gt;
** Each setting is saved as a key-value pair. To save multiple settings, add pins to the &amp;lt;code&amp;gt;Make Map&amp;lt;/code&amp;gt; node.&lt;br /&gt;
** The key is a name for the setting, it can be anything you like, so long as it is unique within the prop. A prop cannot contain keys with the same name.&lt;br /&gt;
** The Value of the map is a &amp;lt;code&amp;gt;Photoscene_Parameter_Struct&amp;lt;/code&amp;gt;, which you can read about on the [[About Photoscene Blueprints]] page.&lt;br /&gt;
* Init&lt;br /&gt;
** This function is called when the prop widget is first spawned.&lt;br /&gt;
** Do all your initial setup in here.&lt;br /&gt;
* Load Photoscene Prop Parameters&lt;br /&gt;
** This function is called whenever a preset that contains this prop is loaded.&lt;br /&gt;
** When the preset loads the prop, it calls this function to load whatever prop settings were saved at the time.&lt;br /&gt;
** If you want your prop to work with presets, you must use this function in conjunction with the &amp;lt;code&amp;gt;Get Current Photoscene Prop Parameters&amp;lt;/code&amp;gt; function.&lt;br /&gt;
** To get a setting out of the &amp;lt;code&amp;gt;Parameters&amp;lt;/code&amp;gt; map, &amp;lt;code&amp;gt;Find&amp;lt;/code&amp;gt; the name you gave the key-value pair in &amp;lt;code&amp;gt;Get Current Photoscene Prop Parameters&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;If&amp;lt;/code&amp;gt; it is found, call the corresponding functions to apply that setting.&lt;br /&gt;
* Post-Screenshot&lt;br /&gt;
** This event is called just after a photo is taken in the photoscene.&lt;br /&gt;
** If you have anything set to turn on or off during a photo, this event happens right after the photo is taken.&lt;br /&gt;
* Pre-Destruct&lt;br /&gt;
** This event is called just before the prop is deleted.&lt;br /&gt;
** If your prop affects things outside of the prop actor, such as putting a post process effect onto the camera, or changing some part of the scene, please use this event to disable/undo all those effects before the prop is destroyed.&lt;br /&gt;
* Pre-Screenshot&lt;br /&gt;
** This event is called just before a photo is taken in the photoscene.&lt;br /&gt;
** If you have any effect that you do not wish to be included in photos, use this event to turn them off, or vice versa.&lt;br /&gt;
* RT Updated&lt;br /&gt;
** This function is called whenever the ray-tracing settings change. Because UE4&#039;s ray-tracing support is super janky, many things need to change based on what those ray-tracing settings are. This function allows you to change a prop&#039;s effects based on the ray-tracing settings.&lt;br /&gt;
* Set Prop Reference&lt;br /&gt;
** This function is called when the prop is first spawned. The prop spawning logic calls this function after creating the widget and the prop bp, and passes through a reference to the prop using the prop&#039;s parent class. &lt;br /&gt;
** You can save a reference to your prop BP using this function, by casting to your specific prop class and saving that as a variable in the widget.&lt;br /&gt;
&lt;br /&gt;
=== Creating Your Prop Widget ===&lt;br /&gt;
Please refer to the page [[About Photoscene Blueprints]].&lt;br /&gt;
&lt;br /&gt;
== Simple Prop Setup ==&lt;br /&gt;
The System for creating Photoscene Props has been updated for:&lt;br /&gt;
&lt;br /&gt;
* Static Meshes,&lt;br /&gt;
* Skeletal Meshes,&lt;br /&gt;
* ParticleFX,&lt;br /&gt;
* Post-Process materials,&lt;br /&gt;
* Decals.&lt;br /&gt;
&lt;br /&gt;
The purpose for this change is to streamline prop creation for simple props that don’t need unique functionality, i.e: basic objects. We’ve done this by adding more optional information in the PhotoScenePropPreview class (and a child of the prop parent class that can read that information) in order to determine prop behaviour and accessible variables.&lt;br /&gt;
&lt;br /&gt;
Inside the Photoscene Prop Preview file, there is a new Prop Struct. The Prop Struct is where you add the data you need for the prop to build itself in-game.&lt;br /&gt;
[[File:SimplePropExample PropStruct.png|thumb|641x641px|none]]&lt;br /&gt;
&lt;br /&gt;
== Using the Prop Struct ==&lt;br /&gt;
&lt;br /&gt;
* Fill out the details as usual, with the exception of the Prop Class. &lt;br /&gt;
* Leave the Prop Class blank (i.e: a value of ‘None’).&lt;br /&gt;
* Unless you know what you’re doing, overriding this will cause the Prop Struct to not function properly. &lt;br /&gt;
* Then tick the ‘Uses Prop Struct’ checkbox. &lt;br /&gt;
* Select your prop’s type from the prop type drop down, this will enable you to edit the necessary variables below. Different prop types have different applicable variables. We disable the irrelevant variables for you, to avoid confusion. &lt;br /&gt;
* Fill in the relevant asset references with your prop’s assets. Most of these are self-explanatory.&lt;br /&gt;
* Set the Optional Prop Widget Class to ‘PD_PropWidgetMaster_UW’. This will create a widget at runtime that allows the player to edit your prop’s parameters. &lt;br /&gt;
&lt;br /&gt;
=== How To Create Parameters For The PD_PropWidgetMaster_UW ===&lt;br /&gt;
The PD_PropWidgetMaster_UW currently supports the following parameters: Material Vector/Scalar parameters, and Particle System parameters.&lt;br /&gt;
&lt;br /&gt;
==== Using Material Parameters ====&lt;br /&gt;
To expose Material Parameters to the widget for the player, there is some preparation you must do in the Material itself:&lt;br /&gt;
&lt;br /&gt;
Ensure that the parameters you wish to expose include “editable_” in their names.&lt;br /&gt;
[[File:SimpleProp MatParam.png|thumb|296x296px|none]]&lt;br /&gt;
&lt;br /&gt;
Create a Material Instance from the Material.&lt;br /&gt;
[[File:SimpleProp Mat Inst.png|thumb|547x547px|none]]&lt;br /&gt;
&lt;br /&gt;
Apply it to the mesh, if you are using one.&lt;br /&gt;
[[File:SimpleProp Mat to Mesh.png|thumb|596x596px|none]]&lt;br /&gt;
&lt;br /&gt;
If making a Decal or Post Process, then put this Material Instance in the Prop Struct Material slot. &lt;br /&gt;
&lt;br /&gt;
Open the Material Instance and ensure the parameters have the check box ticked next to their names.&lt;br /&gt;
[[File:EditParamTick.png|thumb|512x512px|none]]&lt;br /&gt;
&lt;br /&gt;
Material Vector Parameters will show up in-game as a colour picker with 0-1 range.&lt;br /&gt;
&lt;br /&gt;
Material Scalar Parameters will show up in-game as a slider with 0-1 range.&lt;br /&gt;
&lt;br /&gt;
If you want your scalar parameters to apply values within a different range, add a lerp node after your editable_ScalarParameter, with the parameter set as the Alpha input of the lerp. You can then specify its’ new minimum and maximum values by changing the respective A and B input of the lerp.&lt;br /&gt;
&lt;br /&gt;
==== Using Particle Parameters ====&lt;br /&gt;
Exposing Particle Parameters to the widget does require some knowledge of how to edit particle emitters in-engine. The workflow is the same on the Prop Preview side, but differs slightly between Niagara, and Cascade, particle systems.  &lt;br /&gt;
&lt;br /&gt;
In the Prop Preview, below the Particle System variable, there is an array of Parameters you can add.&lt;br /&gt;
[[File:Simple Prop ParticleExampleParams.png|thumb|616x616px|none]]&lt;br /&gt;
&lt;br /&gt;
Ensure that the name and data type match the parameter you want to link to in the emitter itself.&lt;br /&gt;
[[File:Simple Prop ExpandedParticleParam.png|thumb|617x617px|none]]Currently, the following parameter types are supported: float. Bool, vector, and colour. &lt;br /&gt;
&lt;br /&gt;
In Cascade, when setting a parameter to be exposed for editing at runtime, ensure the Parameter Name within the Emitter Module matches the name in the Prop preview. &lt;br /&gt;
&lt;br /&gt;
Min input should be 0 and max input should be 1. The output values can be whatever you like.&lt;br /&gt;
[[File:Simple Prop Cascade Param.png|thumb|625x625px|none]]&lt;br /&gt;
&lt;br /&gt;
In Niagara, you will need to add User Parameters that match the Name and DataType of the corresponding parameters in the Prop Preview, and plug them into the emitter modules as necessary.&lt;br /&gt;
[[File:SimpleProp NiagaraParams.png|thumb|620x620px|none]]&lt;br /&gt;
&lt;br /&gt;
In Niagara, exposed variable names have the “User.” prefix, adding this to the Parameter Name within the Prop Preview is not necessary as its inclusion is handled for you.&lt;br /&gt;
[[File:SimpleProp NiagaraPreviewParams.png|thumb|618x618px|none]]&lt;br /&gt;
&lt;br /&gt;
We recommend keeping user parameters between 0-1, and then using them as an Alpha to lerp between preset min/max values. &lt;br /&gt;
[[File:SimpleProp NiagaraLerpExample.png|thumb|631x631px|none]]&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=Prop_Mods&amp;diff=4919</id>
		<title>Prop Mods</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=Prop_Mods&amp;diff=4919"/>
		<updated>2023-03-01T04:36:06Z</updated>

		<summary type="html">&lt;p&gt;Hannah: /* Creating a Prop Widget Blueprint */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Beginning with LCv4.2, Automation supports player-addable and player-customizable props to be placed and edited in the photoscene.&lt;br /&gt;
&lt;br /&gt;
A Prop can be placed by the player into the photoscene, and moved/scaled/rotated freely, and optionally may have its&#039; own set of player-customizable UI options.&lt;br /&gt;
&lt;br /&gt;
A Prop can be anything, from a traffic cone, to a mannequin, to a post-process effect that changes the way the camera sees the scene.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
A prop consists of a collection of files:&lt;br /&gt;
&lt;br /&gt;
* A Prop blueprint&lt;br /&gt;
* A Prop Preview file&lt;br /&gt;
* A Prop Group file&lt;br /&gt;
* A Prop Preview thumbnail&lt;br /&gt;
* A Prop Group thumbnail&lt;br /&gt;
* (Optionally) A Prop Widget blueprint&lt;br /&gt;
&lt;br /&gt;
The Prop Blueprint is the actor which will be placed in the photoscene, and can be moved around and edited by the player.&lt;br /&gt;
&lt;br /&gt;
The Prop Blueprint is spawned into the scene when the player selects a Prop Preview file.&lt;br /&gt;
&lt;br /&gt;
The Prop Preview file contains a link to the Prop Blueprint, which it will spawn when the player selects it. The Prop Preview file also contains a link to a thumbnail image to display in the UI, as well as a link to the Prop Group under which this prop should be displayed. &lt;br /&gt;
&lt;br /&gt;
The Prop Preview file may also optionally contain a reference to a prop widget blueprint, which will be added to the photoscene UI under the &amp;lt;code&amp;gt;Selected Prop Settings&amp;lt;/code&amp;gt; menu.&lt;br /&gt;
&lt;br /&gt;
The Prop Group also contains a thumbnail, which will be displayed when the player enters the prop group selection menu. when the player selects a Prop Group, all Prop Preview files that reference that group will be displayed to the player.&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
# Create your prop, with all its optional functionality, inside a Blueprint whose parent class is &amp;lt;code&amp;gt;Photoscene Prop Parent Class&amp;lt;/code&amp;gt;.&lt;br /&gt;
# (Optionally) Create a prop widget, with all its optional functionality, whose parent class is &amp;lt;code&amp;gt;Photoscene Prop Parent Widget&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Create a thumbnail texture for your prop.&lt;br /&gt;
# Create a &amp;lt;code&amp;gt;PhotoScenePropPreview&amp;lt;/code&amp;gt; file, and fill it out with your prop blueprint, thumbnail, and optional widget.&lt;br /&gt;
# Fill out the remaining settings inside the prop preview file, including a Prop Group (if this prop is part of an existing group).&lt;br /&gt;
# If this prop is not part of an existing prop group, also create a prop group preview file, prop group thumbnail, and assign the newly created prop group to your prop preview file.&lt;br /&gt;
&lt;br /&gt;
== Creating a Prop Blueprint ==&lt;br /&gt;
A Prop Blueprint contains all of the visuals and functionality of your prop. It can be as simple or as complex as you like.&lt;br /&gt;
&lt;br /&gt;
The Prop Blueprint is a child of Photoscene_Prop_Parent_Class.&lt;br /&gt;
&lt;br /&gt;
To Create your Prop Blueprint:&lt;br /&gt;
&lt;br /&gt;
# right-click in the Content Browser, and create a &amp;lt;code&amp;gt;Blueprint&amp;lt;/code&amp;gt;.&lt;br /&gt;
# From the window that pops up, drop down the &#039;all classes&#039; menu, search for, and select, &amp;lt;code&amp;gt;Photoscene_Prop_Parent_Class&amp;lt;/code&amp;gt; as the parent class.&lt;br /&gt;
&lt;br /&gt;
A prop blueprint can contain whatever you like, whether it be just a simple static mesh, or something more complex like an animated object, or something with physics simulation.&lt;br /&gt;
&lt;br /&gt;
=== Prop Blueprint Functionality ===&lt;br /&gt;
There are a few helper functions in the Prop Blueprint that you can override and use:&lt;br /&gt;
[[File:Wiki Props PropBlueprintFunctions01.png|none|thumb|336x336px|Note that most of the ones with &#039;Actor&#039; listed on the right are irrelevant. we only need to focus on the ones with &#039;Photoscene Prop Parent Class&#039; as the parent.]]&lt;br /&gt;
&lt;br /&gt;
* Init:&lt;br /&gt;
** This function is called when the prop is first spawned in the scene.&lt;br /&gt;
** If you want to initialize or set up anything when the prop is created, do so here.&lt;br /&gt;
* On Spawned:&lt;br /&gt;
** This function calls Init.&lt;br /&gt;
** This function is for internal use only. &lt;br /&gt;
** Do not call this function yourself.&lt;br /&gt;
* Post-Screenshot:&lt;br /&gt;
** This event is called just after a photo is taken in the photoscene.&lt;br /&gt;
** If you have anything set to turn on or off during a photo, this event happens right after the photo is taken.&lt;br /&gt;
* Pre-Destruct:&lt;br /&gt;
** This event is called just before the prop is deleted.&lt;br /&gt;
** If your prop affects things outside of the prop actor, such as putting a post process effect onto the camera, or changing some part of the scene, please use this event to disable/undo all those effects before the prop is destroyed.&lt;br /&gt;
* Pre-Screenshot:&lt;br /&gt;
** This event is called just before a photo is taken in the photoscene.&lt;br /&gt;
** If you have any effect that you do not wish to be included in photos, use this event to turn them off, or vice versa.&lt;br /&gt;
* Snap To Ground:&lt;br /&gt;
** This is an internal function and should not be overridden.&lt;br /&gt;
* Trace For Ground:&lt;br /&gt;
** This is an internal function and should not be overridden.&lt;br /&gt;
&lt;br /&gt;
== Creating a Prop Widget Blueprint ==&lt;br /&gt;
Like photoscenes, props support custom UI functionality.&lt;br /&gt;
&lt;br /&gt;
You can set up buttons, sliders, drop-down menus, and whatever else your heart desires, to do whatever you want to your prop, or to the world around it.&lt;br /&gt;
&lt;br /&gt;
Prop widgets are derived from the parent class &amp;lt;code&amp;gt;Photoscene_Prop_Parent_Widget&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Just like the Prop Blueprint, the prop widget has functions. Some of these functions are mandatory for full functionality:&lt;br /&gt;
[[File:OverridePropWidgetFunctions.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
* Get Current Photoscene Prop Parameters&lt;br /&gt;
** This function gets called when the user saves a photoscene preset. Because presets save props, they must by extension save a prop&#039;s settings. This function lets the prop tell the photoscene preset what its settings are.&lt;br /&gt;
** It consists of a map, which is an array made of a key-value pair. Drag out from the function&#039;s Return pin, and place down a &amp;lt;code&amp;gt;Make Map&amp;lt;/code&amp;gt; node to save a setting. &lt;br /&gt;
** Each setting is saved as a key-value pair. To save multiple settings, add pins to the &amp;lt;code&amp;gt;Make Map&amp;lt;/code&amp;gt; node.&lt;br /&gt;
** The key is a name for the setting, it can be anything you like, so long as it is unique within the prop. A prop cannot contain keys with the same name.&lt;br /&gt;
** The Value of the map is a &amp;lt;code&amp;gt;Photoscene_Parameter_Struct&amp;lt;/code&amp;gt;, which you can read about on the [[About Photoscene Blueprints]] page.&lt;br /&gt;
* Init&lt;br /&gt;
** This function is called when the prop widget is first spawned.&lt;br /&gt;
** Do all your initial setup in here.&lt;br /&gt;
* Load Photoscene Prop Parameters&lt;br /&gt;
** This function is called whenever a preset that contains this prop is loaded.&lt;br /&gt;
** When the preset loads the prop, it calls this function to load whatever prop settings were saved at the time.&lt;br /&gt;
** If you want your prop to work with presets, you must use this function in conjunction with the &amp;lt;code&amp;gt;Get Current Photoscene Prop Parameters&amp;lt;/code&amp;gt; function.&lt;br /&gt;
** To get a setting out of the &amp;lt;code&amp;gt;Parameters&amp;lt;/code&amp;gt; map, &amp;lt;code&amp;gt;Find&amp;lt;/code&amp;gt; the name you gave the key-value pair in &amp;lt;code&amp;gt;Get Current Photoscene Prop Parameters&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;If&amp;lt;/code&amp;gt; it is found, call the corresponding functions to apply that setting.&lt;br /&gt;
* Post-Screenshot&lt;br /&gt;
** This event is called just after a photo is taken in the photoscene.&lt;br /&gt;
** If you have anything set to turn on or off during a photo, this event happens right after the photo is taken.&lt;br /&gt;
* Pre-Destruct&lt;br /&gt;
** This event is called just before the prop is deleted.&lt;br /&gt;
** If your prop affects things outside of the prop actor, such as putting a post process effect onto the camera, or changing some part of the scene, please use this event to disable/undo all those effects before the prop is destroyed.&lt;br /&gt;
* Pre-Screenshot&lt;br /&gt;
** This event is called just before a photo is taken in the photoscene.&lt;br /&gt;
** If you have any effect that you do not wish to be included in photos, use this event to turn them off, or vice versa.&lt;br /&gt;
* RT Updated&lt;br /&gt;
* Set Prop Reference&lt;br /&gt;
&lt;br /&gt;
== Simple Prop Setup ==&lt;br /&gt;
The System for creating Photoscene Props has been updated for:&lt;br /&gt;
&lt;br /&gt;
* Static Meshes,&lt;br /&gt;
* Skeletal Meshes,&lt;br /&gt;
* ParticleFX,&lt;br /&gt;
* Post-Process materials,&lt;br /&gt;
* Decals.&lt;br /&gt;
&lt;br /&gt;
The purpose for this change is to streamline prop creation for simple props that don’t need unique functionality, i.e: basic objects. We’ve done this by adding more optional information in the PhotoScenePropPreview class (and a child of the prop parent class that can read that information) in order to determine prop behaviour and accessible variables.&lt;br /&gt;
&lt;br /&gt;
Inside the Photoscene Prop Preview file, there is a new Prop Struct. The Prop Struct is where you add the data you need for the prop to build itself in-game.&lt;br /&gt;
[[File:SimplePropExample PropStruct.png|thumb|641x641px|none]]&lt;br /&gt;
&lt;br /&gt;
== Using the Prop Struct ==&lt;br /&gt;
&lt;br /&gt;
* Fill out the details as usual, with the exception of the Prop Class. &lt;br /&gt;
* Leave the Prop Class blank (i.e: a value of ‘None’).&lt;br /&gt;
* Unless you know what you’re doing, overriding this will cause the Prop Struct to not function properly. &lt;br /&gt;
* Then tick the ‘Uses Prop Struct’ checkbox. &lt;br /&gt;
* Select your prop’s type from the prop type drop down, this will enable you to edit the necessary variables below. Different prop types have different applicable variables. We disable the irrelevant variables for you, to avoid confusion. &lt;br /&gt;
* Fill in the relevant asset references with your prop’s assets. Most of these are self-explanatory.&lt;br /&gt;
* Set the Optional Prop Widget Class to ‘PD_PropWidgetMaster_UW’. This will create a widget at runtime that allows the player to edit your prop’s parameters. &lt;br /&gt;
&lt;br /&gt;
=== How To Create Parameters For The PD_PropWidgetMaster_UW ===&lt;br /&gt;
The PD_PropWidgetMaster_UW currently supports the following parameters: Material Vector/Scalar parameters, and Particle System parameters.&lt;br /&gt;
&lt;br /&gt;
==== Using Material Parameters ====&lt;br /&gt;
To expose Material Parameters to the widget for the player, there is some preparation you must do in the Material itself:&lt;br /&gt;
&lt;br /&gt;
Ensure that the parameters you wish to expose include “editable_” in their names.&lt;br /&gt;
[[File:SimpleProp MatParam.png|thumb|296x296px|none]]&lt;br /&gt;
&lt;br /&gt;
Create a Material Instance from the Material.&lt;br /&gt;
[[File:SimpleProp Mat Inst.png|thumb|547x547px|none]]&lt;br /&gt;
&lt;br /&gt;
Apply it to the mesh, if you are using one.&lt;br /&gt;
[[File:SimpleProp Mat to Mesh.png|thumb|596x596px|none]]&lt;br /&gt;
&lt;br /&gt;
If making a Decal or Post Process, then put this Material Instance in the Prop Struct Material slot. &lt;br /&gt;
&lt;br /&gt;
Open the Material Instance and ensure the parameters have the check box ticked next to their names.&lt;br /&gt;
[[File:EditParamTick.png|thumb|512x512px|none]]&lt;br /&gt;
&lt;br /&gt;
Material Vector Parameters will show up in-game as a colour picker with 0-1 range.&lt;br /&gt;
&lt;br /&gt;
Material Scalar Parameters will show up in-game as a slider with 0-1 range.&lt;br /&gt;
&lt;br /&gt;
If you want your scalar parameters to apply values within a different range, add a lerp node after your editable_ScalarParameter, with the parameter set as the Alpha input of the lerp. You can then specify its’ new minimum and maximum values by changing the respective A and B input of the lerp.&lt;br /&gt;
&lt;br /&gt;
==== Using Particle Parameters ====&lt;br /&gt;
Exposing Particle Parameters to the widget does require some knowledge of how to edit particle emitters in-engine. The workflow is the same on the Prop Preview side, but differs slightly between Niagara, and Cascade, particle systems.  &lt;br /&gt;
&lt;br /&gt;
In the Prop Preview, below the Particle System variable, there is an array of Parameters you can add.&lt;br /&gt;
[[File:Simple Prop ParticleExampleParams.png|thumb|616x616px|none]]&lt;br /&gt;
&lt;br /&gt;
Ensure that the name and data type match the parameter you want to link to in the emitter itself.&lt;br /&gt;
[[File:Simple Prop ExpandedParticleParam.png|thumb|617x617px|none]]Currently, the following parameter types are supported: float. Bool, vector, and colour. &lt;br /&gt;
&lt;br /&gt;
In Cascade, when setting a parameter to be exposed for editing at runtime, ensure the Parameter Name within the Emitter Module matches the name in the Prop preview. &lt;br /&gt;
&lt;br /&gt;
Min input should be 0 and max input should be 1. The output values can be whatever you like.&lt;br /&gt;
[[File:Simple Prop Cascade Param.png|thumb|625x625px|none]]&lt;br /&gt;
&lt;br /&gt;
In Niagara, you will need to add User Parameters that match the Name and DataType of the corresponding parameters in the Prop Preview, and plug them into the emitter modules as necessary.&lt;br /&gt;
[[File:SimpleProp NiagaraParams.png|thumb|620x620px|none]]&lt;br /&gt;
&lt;br /&gt;
In Niagara, exposed variable names have the “User.” prefix, adding this to the Parameter Name within the Prop Preview is not necessary as its inclusion is handled for you.&lt;br /&gt;
[[File:SimpleProp NiagaraPreviewParams.png|thumb|618x618px|none]]&lt;br /&gt;
&lt;br /&gt;
We recommend keeping user parameters between 0-1, and then using them as an Alpha to lerp between preset min/max values. &lt;br /&gt;
[[File:SimpleProp NiagaraLerpExample.png|thumb|631x631px|none]]&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=Prop_Mods&amp;diff=4918</id>
		<title>Prop Mods</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=Prop_Mods&amp;diff=4918"/>
		<updated>2023-03-01T04:07:07Z</updated>

		<summary type="html">&lt;p&gt;Hannah: /* Creating a Prop Widget Blueprint */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Beginning with LCv4.2, Automation supports player-addable and player-customizable props to be placed and edited in the photoscene.&lt;br /&gt;
&lt;br /&gt;
A Prop can be placed by the player into the photoscene, and moved/scaled/rotated freely, and optionally may have its&#039; own set of player-customizable UI options.&lt;br /&gt;
&lt;br /&gt;
A Prop can be anything, from a traffic cone, to a mannequin, to a post-process effect that changes the way the camera sees the scene.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
A prop consists of a collection of files:&lt;br /&gt;
&lt;br /&gt;
* A Prop blueprint&lt;br /&gt;
* A Prop Preview file&lt;br /&gt;
* A Prop Group file&lt;br /&gt;
* A Prop Preview thumbnail&lt;br /&gt;
* A Prop Group thumbnail&lt;br /&gt;
* (Optionally) A Prop Widget blueprint&lt;br /&gt;
&lt;br /&gt;
The Prop Blueprint is the actor which will be placed in the photoscene, and can be moved around and edited by the player.&lt;br /&gt;
&lt;br /&gt;
The Prop Blueprint is spawned into the scene when the player selects a Prop Preview file.&lt;br /&gt;
&lt;br /&gt;
The Prop Preview file contains a link to the Prop Blueprint, which it will spawn when the player selects it. The Prop Preview file also contains a link to a thumbnail image to display in the UI, as well as a link to the Prop Group under which this prop should be displayed. &lt;br /&gt;
&lt;br /&gt;
The Prop Preview file may also optionally contain a reference to a prop widget blueprint, which will be added to the photoscene UI under the &amp;lt;code&amp;gt;Selected Prop Settings&amp;lt;/code&amp;gt; menu.&lt;br /&gt;
&lt;br /&gt;
The Prop Group also contains a thumbnail, which will be displayed when the player enters the prop group selection menu. when the player selects a Prop Group, all Prop Preview files that reference that group will be displayed to the player.&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
# Create your prop, with all its optional functionality, inside a Blueprint whose parent class is &amp;lt;code&amp;gt;Photoscene Prop Parent Class&amp;lt;/code&amp;gt;.&lt;br /&gt;
# (Optionally) Create a prop widget, with all its optional functionality, whose parent class is &amp;lt;code&amp;gt;Photoscene Prop Parent Widget&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Create a thumbnail texture for your prop.&lt;br /&gt;
# Create a &amp;lt;code&amp;gt;PhotoScenePropPreview&amp;lt;/code&amp;gt; file, and fill it out with your prop blueprint, thumbnail, and optional widget.&lt;br /&gt;
# Fill out the remaining settings inside the prop preview file, including a Prop Group (if this prop is part of an existing group).&lt;br /&gt;
# If this prop is not part of an existing prop group, also create a prop group preview file, prop group thumbnail, and assign the newly created prop group to your prop preview file.&lt;br /&gt;
&lt;br /&gt;
== Creating a Prop Blueprint ==&lt;br /&gt;
A Prop Blueprint contains all of the visuals and functionality of your prop. It can be as simple or as complex as you like.&lt;br /&gt;
&lt;br /&gt;
The Prop Blueprint is a child of Photoscene_Prop_Parent_Class.&lt;br /&gt;
&lt;br /&gt;
To Create your Prop Blueprint:&lt;br /&gt;
&lt;br /&gt;
# right-click in the Content Browser, and create a &amp;lt;code&amp;gt;Blueprint&amp;lt;/code&amp;gt;.&lt;br /&gt;
# From the window that pops up, drop down the &#039;all classes&#039; menu, search for, and select, &amp;lt;code&amp;gt;Photoscene_Prop_Parent_Class&amp;lt;/code&amp;gt; as the parent class.&lt;br /&gt;
&lt;br /&gt;
A prop blueprint can contain whatever you like, whether it be just a simple static mesh, or something more complex like an animated object, or something with physics simulation.&lt;br /&gt;
&lt;br /&gt;
=== Prop Blueprint Functionality ===&lt;br /&gt;
There are a few helper functions in the Prop Blueprint that you can override and use:&lt;br /&gt;
[[File:Wiki Props PropBlueprintFunctions01.png|none|thumb|336x336px|Note that most of the ones with &#039;Actor&#039; listed on the right are irrelevant. we only need to focus on the ones with &#039;Photoscene Prop Parent Class&#039; as the parent.]]&lt;br /&gt;
&lt;br /&gt;
* Init:&lt;br /&gt;
** This function is called when the prop is first spawned in the scene.&lt;br /&gt;
** If you want to initialize or set up anything when the prop is created, do so here.&lt;br /&gt;
* On Spawned:&lt;br /&gt;
** This function calls Init.&lt;br /&gt;
** This function is for internal use only. &lt;br /&gt;
** Do not call this function yourself.&lt;br /&gt;
* Post-Screenshot:&lt;br /&gt;
** This event is called just after a photo is taken in the photoscene.&lt;br /&gt;
** If you have anything set to turn on or off during a photo, this event happens right after the photo is taken.&lt;br /&gt;
* Pre-Destruct:&lt;br /&gt;
** This event is called just before the prop is deleted.&lt;br /&gt;
** If your prop affects things outside of the prop actor, such as putting a post process effect onto the camera, or changing some part of the scene, please use this event to disable/undo all those effects before the prop is destroyed.&lt;br /&gt;
* Pre-Screenshot:&lt;br /&gt;
** This event is called just before a photo is taken in the photoscene.&lt;br /&gt;
** If you have any effect that you do not wish to be included in photos, use this event to turn them off, or vice versa.&lt;br /&gt;
* Snap To Ground:&lt;br /&gt;
** This is an internal function and should not be overridden.&lt;br /&gt;
* Trace For Ground:&lt;br /&gt;
** This is an internal function and should not be overridden.&lt;br /&gt;
&lt;br /&gt;
== Creating a Prop Widget Blueprint ==&lt;br /&gt;
Like photoscenes, props support custom UI functionality.&lt;br /&gt;
&lt;br /&gt;
You can set up buttons, sliders, drop-down menus, and whatever else your heart desires, to do whatever you want to your prop, or to the world around it.&lt;br /&gt;
&lt;br /&gt;
Prop widgets are derived from the parent class &amp;lt;code&amp;gt;Photoscene_Prop_Parent_Widget&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Just like the Prop Blueprint, the prop widget has functions. Some of these functions are mandatory for full functionality:&lt;br /&gt;
[[File:OverridePropWidgetFunctions.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
* Get Current Photoscene Prop Parameters&lt;br /&gt;
** This function gets called when the user saves a photoscene preset. Because presets save props, they must by extension save a prop&#039;s settings. This function lets the prop tell the photoscene preset what its settings are.&lt;br /&gt;
** It consists of a map, which is an array made of a key-value pair. Drag out from the function&#039;s Return pin, and place down a &amp;lt;code&amp;gt;Make Map&amp;lt;/code&amp;gt; node to save a setting. &lt;br /&gt;
** Each setting is saved as a key-value pair. To save multiple settings, add pins to the &amp;lt;code&amp;gt;Make Map&amp;lt;/code&amp;gt; node.&lt;br /&gt;
** The key is a name for the setting, it can be anything you like, so long as it is unique within the prop. A prop cannot contain keys with the same name.&lt;br /&gt;
** The Value of the map is a &amp;lt;code&amp;gt;Photoscene_Parameter_Struct&amp;lt;/code&amp;gt;, which you can read about on the [[About Photoscene Blueprints]] page.&lt;br /&gt;
* Init&lt;br /&gt;
** This function is called when the prop widget is first spawned.&lt;br /&gt;
** Do all your initial setup in here.&lt;br /&gt;
* Load Photoscene Prop Parameters&lt;br /&gt;
** This function is called whenever a preset that contains this prop is loaded.&lt;br /&gt;
** When the preset loads the prop, it calls this function to load whatever prop settings were saved at the time.&lt;br /&gt;
** If you want your prop to work with presets, you must use this function in conjunction with the Get Current Photoscene Prop Parameters function.&lt;br /&gt;
* Post-Screenshot&lt;br /&gt;
* Pre-Destruct&lt;br /&gt;
* Pre-Screenshot&lt;br /&gt;
* RT Updated&lt;br /&gt;
* Set Prop Reference&lt;br /&gt;
&lt;br /&gt;
== Simple Prop Setup ==&lt;br /&gt;
The System for creating Photoscene Props has been updated for:&lt;br /&gt;
&lt;br /&gt;
* Static Meshes,&lt;br /&gt;
* Skeletal Meshes,&lt;br /&gt;
* ParticleFX,&lt;br /&gt;
* Post-Process materials,&lt;br /&gt;
* Decals.&lt;br /&gt;
&lt;br /&gt;
The purpose for this change is to streamline prop creation for simple props that don’t need unique functionality, i.e: basic objects. We’ve done this by adding more optional information in the PhotoScenePropPreview class (and a child of the prop parent class that can read that information) in order to determine prop behaviour and accessible variables.&lt;br /&gt;
&lt;br /&gt;
Inside the Photoscene Prop Preview file, there is a new Prop Struct. The Prop Struct is where you add the data you need for the prop to build itself in-game.&lt;br /&gt;
[[File:SimplePropExample PropStruct.png|thumb|641x641px|none]]&lt;br /&gt;
&lt;br /&gt;
== Using the Prop Struct ==&lt;br /&gt;
&lt;br /&gt;
* Fill out the details as usual, with the exception of the Prop Class. &lt;br /&gt;
* Leave the Prop Class blank (i.e: a value of ‘None’).&lt;br /&gt;
* Unless you know what you’re doing, overriding this will cause the Prop Struct to not function properly. &lt;br /&gt;
* Then tick the ‘Uses Prop Struct’ checkbox. &lt;br /&gt;
* Select your prop’s type from the prop type drop down, this will enable you to edit the necessary variables below. Different prop types have different applicable variables. We disable the irrelevant variables for you, to avoid confusion. &lt;br /&gt;
* Fill in the relevant asset references with your prop’s assets. Most of these are self-explanatory.&lt;br /&gt;
* Set the Optional Prop Widget Class to ‘PD_PropWidgetMaster_UW’. This will create a widget at runtime that allows the player to edit your prop’s parameters. &lt;br /&gt;
&lt;br /&gt;
=== How To Create Parameters For The PD_PropWidgetMaster_UW ===&lt;br /&gt;
The PD_PropWidgetMaster_UW currently supports the following parameters: Material Vector/Scalar parameters, and Particle System parameters.&lt;br /&gt;
&lt;br /&gt;
==== Using Material Parameters ====&lt;br /&gt;
To expose Material Parameters to the widget for the player, there is some preparation you must do in the Material itself:&lt;br /&gt;
&lt;br /&gt;
Ensure that the parameters you wish to expose include “editable_” in their names.&lt;br /&gt;
[[File:SimpleProp MatParam.png|thumb|296x296px|none]]&lt;br /&gt;
&lt;br /&gt;
Create a Material Instance from the Material.&lt;br /&gt;
[[File:SimpleProp Mat Inst.png|thumb|547x547px|none]]&lt;br /&gt;
&lt;br /&gt;
Apply it to the mesh, if you are using one.&lt;br /&gt;
[[File:SimpleProp Mat to Mesh.png|thumb|596x596px|none]]&lt;br /&gt;
&lt;br /&gt;
If making a Decal or Post Process, then put this Material Instance in the Prop Struct Material slot. &lt;br /&gt;
&lt;br /&gt;
Open the Material Instance and ensure the parameters have the check box ticked next to their names.&lt;br /&gt;
[[File:EditParamTick.png|thumb|512x512px|none]]&lt;br /&gt;
&lt;br /&gt;
Material Vector Parameters will show up in-game as a colour picker with 0-1 range.&lt;br /&gt;
&lt;br /&gt;
Material Scalar Parameters will show up in-game as a slider with 0-1 range.&lt;br /&gt;
&lt;br /&gt;
If you want your scalar parameters to apply values within a different range, add a lerp node after your editable_ScalarParameter, with the parameter set as the Alpha input of the lerp. You can then specify its’ new minimum and maximum values by changing the respective A and B input of the lerp.&lt;br /&gt;
&lt;br /&gt;
==== Using Particle Parameters ====&lt;br /&gt;
Exposing Particle Parameters to the widget does require some knowledge of how to edit particle emitters in-engine. The workflow is the same on the Prop Preview side, but differs slightly between Niagara, and Cascade, particle systems.  &lt;br /&gt;
&lt;br /&gt;
In the Prop Preview, below the Particle System variable, there is an array of Parameters you can add.&lt;br /&gt;
[[File:Simple Prop ParticleExampleParams.png|thumb|616x616px|none]]&lt;br /&gt;
&lt;br /&gt;
Ensure that the name and data type match the parameter you want to link to in the emitter itself.&lt;br /&gt;
[[File:Simple Prop ExpandedParticleParam.png|thumb|617x617px|none]]Currently, the following parameter types are supported: float. Bool, vector, and colour. &lt;br /&gt;
&lt;br /&gt;
In Cascade, when setting a parameter to be exposed for editing at runtime, ensure the Parameter Name within the Emitter Module matches the name in the Prop preview. &lt;br /&gt;
&lt;br /&gt;
Min input should be 0 and max input should be 1. The output values can be whatever you like.&lt;br /&gt;
[[File:Simple Prop Cascade Param.png|thumb|625x625px|none]]&lt;br /&gt;
&lt;br /&gt;
In Niagara, you will need to add User Parameters that match the Name and DataType of the corresponding parameters in the Prop Preview, and plug them into the emitter modules as necessary.&lt;br /&gt;
[[File:SimpleProp NiagaraParams.png|thumb|620x620px|none]]&lt;br /&gt;
&lt;br /&gt;
In Niagara, exposed variable names have the “User.” prefix, adding this to the Parameter Name within the Prop Preview is not necessary as its inclusion is handled for you.&lt;br /&gt;
[[File:SimpleProp NiagaraPreviewParams.png|thumb|618x618px|none]]&lt;br /&gt;
&lt;br /&gt;
We recommend keeping user parameters between 0-1, and then using them as an Alpha to lerp between preset min/max values. &lt;br /&gt;
[[File:SimpleProp NiagaraLerpExample.png|thumb|631x631px|none]]&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=Photoscenes&amp;diff=4917</id>
		<title>Photoscenes</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=Photoscenes&amp;diff=4917"/>
		<updated>2023-03-01T03:37:35Z</updated>

		<summary type="html">&lt;p&gt;Hannah: /* Quick Tips: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Photoscene support was added 25th October 2017.&lt;br /&gt;
&lt;br /&gt;
Beginning with LCv4.2, Automation supports player-customizable options for individual photoscenes.&lt;br /&gt;
&lt;br /&gt;
There is an example photoscene mod included in the sdk. open it to see how it works. It is also available on the Steam Workshop as a mod.&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
# create a mod&lt;br /&gt;
# create and design a level&lt;br /&gt;
# (Optional) Create a photoscene Widget for player-customization&lt;br /&gt;
#create and fill out a Photoscene Level Preview file.&lt;br /&gt;
## create Thumbnail(s)&lt;br /&gt;
# Share your mod&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
A photoscene mod contains a set of files that define how the photoscene works, and what it looks like. It consists of the following:&lt;br /&gt;
&lt;br /&gt;
# a level/scene&lt;br /&gt;
# a photoscene level preview file&lt;br /&gt;
# at least one thumbnail picture&lt;br /&gt;
# (optionally) a widget blueprint&lt;br /&gt;
&lt;br /&gt;
== Create A New Blank Mod ==&lt;br /&gt;
&lt;br /&gt;
* Create a new Mod from the Blank Template[[File:UE4ModCreation 01.gif|none|frame]]&amp;lt;br /&amp;gt;&lt;br /&gt;
* fill out the wizard and press Create Mod[[File:UE4ModCreation 02.gif|none|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Create a New Blank Level ==&lt;br /&gt;
Create a new blank level in your mod plugin folder. Name it whatever you&#039;d like.&lt;br /&gt;
&lt;br /&gt;
Open the level by double-clicking it.&lt;br /&gt;
&lt;br /&gt;
=== Design your level ===&lt;br /&gt;
do whatever you want to make your level be what you want.&lt;br /&gt;
&lt;br /&gt;
This is not anything particular to Automation, but UE4 in General. Watch some of Epic&#039;s tutorials on this: https://www.youtube.com/watch?v=cl_eoVfNDKU&amp;amp;list=PLZlv_N0_O1gak1_FoAJVrEGiLIploeF3F&lt;br /&gt;
&lt;br /&gt;
=== Level Creation Guidelines ===&lt;br /&gt;
[[File:UE4ModCreation 24.gif|none|thumb]]&lt;br /&gt;
* when you set the car to &#039;snap to ground&#039;, a ray is cast from 6m above the car, to 2m below the car. the car is &#039;placed&#039; on the first surface it collides with. Make sure any roofing or props in this range dont have collision enabled, or the car will mistake them for the ground.&lt;br /&gt;
* Search the &#039;&#039;&#039;content browser&#039;&#039;&#039; for &amp;lt;code&amp;gt;A Car Locator&amp;lt;/code&amp;gt;.&lt;br /&gt;
**These are the bookmarks for sub-level positions.&lt;br /&gt;
**Place them wherever you want the car to be, and in the &#039;&#039;&#039;Details&#039;&#039;&#039; panel, give them a name.&lt;br /&gt;
**This name will show up in the levels menu in the photoscene as one of the sub-level positions.&lt;br /&gt;
**You can have as many as you want.&lt;br /&gt;
**if none are present, the car will spawn at 0,0,0&lt;br /&gt;
*Currently, Stationary Lights are broken for Automation. use either static or movable lighting in your scenes.&lt;br /&gt;
&lt;br /&gt;
== Adding Customization Options To Your Photoscene ==&lt;br /&gt;
Beginning with LCv4.2, Automation supports player-customizable options for individual photoscenes.&lt;br /&gt;
&lt;br /&gt;
You can set up your photoscene to allow the player to change the colour of the lighting, the time of day, whether street lights are turned on, etc... the world is your oyster!&lt;br /&gt;
&lt;br /&gt;
=== Creating a Photoscene Widget ===&lt;br /&gt;
From the &amp;lt;code&amp;gt;Content Browser&amp;lt;/code&amp;gt;, add a Widget Blueprint to your mod folder.&lt;br /&gt;
[[File:Wiki Photoscene CreateWidgetBP.jpg|none|thumb|342x342px]]&lt;br /&gt;
Open the Widget, and from the &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; menu, select &amp;lt;code&amp;gt;Reparent Blueprint&amp;lt;/code&amp;gt;.&lt;br /&gt;
[[File:Wiki Photoscene ReparentWidgetBP01.jpg|none|thumb|342x342px]]&lt;br /&gt;
In the menu that appears, find and select &amp;lt;code&amp;gt;Photo Scene Widget Base&amp;lt;/code&amp;gt;.&lt;br /&gt;
[[File:Wiki Photoscene ReparentWidgetBP02.png|none|thumb|290x290px]]&lt;br /&gt;
From the Hierarchy window, delete the &amp;lt;code&amp;gt;Canvas Panel&amp;lt;/code&amp;gt;.&lt;br /&gt;
[[File:Wiki Photoscene DeleteCanvas.png|none|thumb|300x300px]]&lt;br /&gt;
You are now free to design the buttons, sliders, and drop-down menus, etc... to your heart&#039;s content!&lt;br /&gt;
&lt;br /&gt;
=== Quick Tips: ===&lt;br /&gt;
&lt;br /&gt;
* Add all your buttons and options under a parent Vertical Box&lt;br /&gt;
** your widget will appear under the &amp;lt;code&amp;gt;Level Settings&amp;lt;/code&amp;gt; menu in the Photoscene, and as such do not have much horizontal space to work with.[[File:Wiki Photoscene Tips01.gif|none|thumb|300x300px]]&lt;br /&gt;
* There are a few preset buttons and sliders you can use that will make your life easier. These can be searched for and used from the Palette menu, but feel free to design your own. More info on the functionality of these widgets can be found on the [[About Photoscene Blueprints]] page:&lt;br /&gt;
** Slider_Photo_Manager&lt;br /&gt;
** UW_DropDown_Photoscene&lt;br /&gt;
** Photoscene_Checkbox_UW&lt;br /&gt;
** UW_TextBox_Photoscene&lt;br /&gt;
&lt;br /&gt;
== Widget Functionality ==&lt;br /&gt;
The &amp;lt;code&amp;gt;Photo Scene Widget Base&amp;lt;/code&amp;gt; parent type has a few function calls that you should be aware of, and use where necessary.&lt;br /&gt;
&lt;br /&gt;
From the &#039;Graph&#039; view, hover over the &amp;lt;code&amp;gt;Functions&amp;lt;/code&amp;gt; menu, and select &amp;lt;code&amp;gt;Override&amp;lt;/code&amp;gt;.&lt;br /&gt;
[[File:Wiki Photoscene FunctionsOverride.png|none|thumb|433x433px|Note that most of the ones with &#039;User Widget&#039; listed on the right are irrelevant. we only need to focus on the ones with &#039;Photo Scene Widget Base&#039; as the parent]]&lt;br /&gt;
Don&#039;t worry if these are overwhelming you, they will be explained more in-depth later.&lt;br /&gt;
&lt;br /&gt;
* Check If Ray Tracing Updated:&lt;br /&gt;
** Is called whenever any ray-tracing settings are updated.&lt;br /&gt;
** This should mostly be ignored, as it is an internal function, but can be overridden if you find yourself running into discrepancies between ray-tracing and non-ray-tracing in your level. &lt;br /&gt;
** Most discrepancies in ray-tracing are related to shadows and reflections, and as such, there is another function that should be used before this one. However, if you find yourself still struggling to get a scene looking good for both ray-traced and non-ray-traced graphics, then override this.&lt;br /&gt;
* Get Current Parameter Values:&lt;br /&gt;
** Is called by the Photoscene whenever it needs to ask this widget what the current UI values are.&lt;br /&gt;
** The &#039;Return&#039; node of this function is an array of &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt; values.&lt;br /&gt;
** This should be used to send the values of your UI to the Photoscene Preset&#039;s &#039;return&#039; node.&lt;br /&gt;
* Level Finished Loading:&lt;br /&gt;
** Is called whenever the Photoscene level has finished loading.&lt;br /&gt;
** This is a safe way to initialize any values you want to set for the level or UI. when the photoscene is loaded from the level selection menu or a preset.&lt;br /&gt;
* Load Parameter Values:&lt;br /&gt;
** Is called when the Photoscene is loading your level from a preset.&lt;br /&gt;
** Paths in an array of &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt; values.&lt;br /&gt;
** This should be used to initialize your UI values, and apply their related settings to your level.&lt;br /&gt;
* On Initialized:&lt;br /&gt;
** Should be ignored, as it is an internal function.&lt;br /&gt;
* Ray Tracing Settings Updated:&lt;br /&gt;
** Is a helper function designed to call whenever a ray-tracing setting related to reflections, refraction, or shadows, is adjusted.&lt;br /&gt;
** It Paths in a boolean that is True if any RT shadow, reflection, or translucency setting is enabled.&lt;br /&gt;
** If you need further functionality for switching things when ray-tracing is on, please refer to the &amp;lt;code&amp;gt;Check If Ray Tracing Updated&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
=== About the Photo_Scene_Parameter_Struct ===&lt;br /&gt;
The &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt;is the combination name/value pair setting that is used for all photoscene/preset save game values. It is used in the &amp;lt;code&amp;gt;Get Current Parameter Values&amp;lt;/code&amp;gt; function and the &amp;lt;code&amp;gt;Load Parameter Values&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
It consists of three primary settings:&lt;br /&gt;
&lt;br /&gt;
* Parameter Name:&lt;br /&gt;
** Is the name/identifier for this setting. It is not displayed in-game, but is instead used in the save game file to store the identifier for this current variable. These need to be unique for all variables in this photoscene widget.&lt;br /&gt;
* Data Type&lt;br /&gt;
** Is the type of value being stored in this parameter.&lt;br /&gt;
** Ties in with the #Value.&lt;br /&gt;
** Each photoscene widget parameter can only contain one type of data, so chose wisely.&lt;br /&gt;
* #Value &lt;br /&gt;
** For the current parameter name and data type, this value is used. Match it to the &amp;lt;code&amp;gt;Data Type&amp;lt;/code&amp;gt;setting.&lt;br /&gt;
&lt;br /&gt;
For instance, if you have a &amp;lt;code&amp;gt;slider&amp;lt;/code&amp;gt; that affects the &amp;lt;code&amp;gt;Brightness&amp;lt;/code&amp;gt; of your photoscene, you would have a &amp;lt;code&amp;gt;Parameter Name&amp;lt;/code&amp;gt; of something identifiable, like &amp;lt;code&amp;gt;SceneBrightness&amp;lt;/code&amp;gt;, a &amp;lt;code&amp;gt;Data Type&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;Float&amp;lt;/code&amp;gt;, and a &amp;lt;code&amp;gt;Float Val&amp;lt;/code&amp;gt; equal to your &amp;lt;code&amp;gt;slider&amp;lt;/code&amp;gt; value. If you had a &amp;lt;code&amp;gt;checkbox&amp;lt;/code&amp;gt; instead, you would use a &amp;lt;code&amp;gt;data type&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; and a &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; val equal to your &amp;lt;code&amp;gt;checkbox&amp;lt;/code&amp;gt; value.&lt;br /&gt;
&lt;br /&gt;
For each setting your photoscene widget can change, you should use one &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt;.&lt;br /&gt;
[[File:Wiki Photoscene AboutThePhotoSceneParameterStruct01.png|none|thumb|300x300px]]&lt;br /&gt;
&lt;br /&gt;
=== Using the Get Current Parameter Values function ===&lt;br /&gt;
This function is called whenever the photoscene preset tries to save this level and its associated settings. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Get Current Parameter Values&amp;lt;/code&amp;gt; function expects an array of &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
You should use the &amp;lt;code&amp;gt;Make Array&amp;lt;/code&amp;gt; node to input into the &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; node, with a number of &amp;lt;code&amp;gt;array elements&amp;lt;/code&amp;gt; equal to the number of settings in your photoscene widget. Each &amp;lt;code&amp;gt;array element&amp;lt;/code&amp;gt; should itself be wired to a &amp;lt;code&amp;gt;Make Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt; node, with the &amp;lt;code&amp;gt;Parameter Name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Data Type&amp;lt;/code&amp;gt;, and selected &amp;lt;code&amp;gt;data type&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;Value&amp;lt;/code&amp;gt; set.&lt;br /&gt;
[[File:Wiki Photoscene UsingGetCurrentParameterValues01.png|none|thumb|300x300px]]&lt;br /&gt;
&lt;br /&gt;
=== Using the Level Finished Loading function ===&lt;br /&gt;
This function is called whenever the photoscene level has finished loading. If you wish to set some parameters, find some actors, or otherwise initialize anything in your photoscene widget blueprint, do so here. This is a &#039;safe&#039; version of &amp;lt;code&amp;gt;On Initialized&amp;lt;/code&amp;gt;, as it is only called once the level itself and all its contents/actors have been loaded.&lt;br /&gt;
&lt;br /&gt;
=== Using the Load Parameter Values function ===&lt;br /&gt;
Load Parameter Values is called whenever the photoscene is loading a preset which contains your photoscene level and its associated widget blueprint settings. Any preset that contains your level will contain a list of settings associated with your level (defined in &amp;lt;code&amp;gt;Get Current Parameter Values&amp;lt;/code&amp;gt;), which will need to be applied.&lt;br /&gt;
&lt;br /&gt;
It returns a &amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt;, which is a fancy version of an &amp;lt;code&amp;gt;array&amp;lt;/code&amp;gt; , with key/value pairs for each array element. The &amp;lt;code&amp;gt;Key&amp;lt;/code&amp;gt; for each element is the name you returned in Get current Parameter Values from&lt;br /&gt;
&lt;br /&gt;
To apply each setting from the map to your level, The following method works well:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Find&amp;lt;/code&amp;gt; the &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; associated with each of your &amp;lt;code&amp;gt;Parameter Name&amp;lt;/code&amp;gt;s, and;&lt;br /&gt;
# if the &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is found,&lt;br /&gt;
# apply it to whatever logic you use that value for.&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki Photoscene loadparametervalues01.png|none|thumb|300x300px]]&lt;br /&gt;
Remember that the value you are &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt;ing has to be the same as the value you set for each setting in &amp;lt;code&amp;gt;Get Current Parameter Values&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Using the Ray Tracing Settings Updated function ===&lt;br /&gt;
This function is called every time a ray-tracing-related setting is updated. It returns &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; when any of the shadow, translucency, or reflections ray-tracing settings are enabled, or &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt; when none of them are enabled.&lt;br /&gt;
&lt;br /&gt;
This is useful when you have a material or mesh or other such thing which conflicts with a ray-traced scene. An example of such is the &#039;10s Design Room photoscene, where the glass materials on the windows are swapped out for a ray-tracing optimised version when ray-tracing is enabled, and swapped back to the standard material when ray-tracing is disabled.&lt;br /&gt;
&lt;br /&gt;
== Creating a Photoscene Level Preview file ==&lt;br /&gt;
The Photoscene level preview file contains the overall information about your photoscene, as well as links to the optional widget blueprint, the thumbnail picture(s), and the actual level.&lt;br /&gt;
&lt;br /&gt;
Create a &amp;lt;code&amp;gt;PhotosceneLevelPreview&amp;lt;/code&amp;gt; file by right-clicking in the content browser, and from the &amp;lt;code&amp;gt;camso&amp;lt;/code&amp;gt; group, select &amp;lt;code&amp;gt;Photo Scene Level&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;PhotoSceneLevelPreview&amp;lt;/code&amp;gt; file contains the following settings:&lt;br /&gt;
&lt;br /&gt;
* Name:&lt;br /&gt;
** This is the name of your photoscene. It will appear in-game as the name of the level in the level selection menu.&lt;br /&gt;
* Default Locator Name:&lt;br /&gt;
** This is the name of the &amp;lt;code&amp;gt;a_car_locator&amp;lt;/code&amp;gt; actor that you wish to be the default location of the car when the scene is first loaded.&lt;br /&gt;
* GUID:&lt;br /&gt;
** This is an unique GUID that you should generate for this photoscene. It must be unique to any other GUID. &lt;br /&gt;
** When first creating your photoscene, generate a new GUID for it by opening the photoscene level preview file and from the drop-down to the right of the GUID setting, select &amp;lt;code&amp;gt;Generate&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Level Preview Images:&lt;br /&gt;
** The photoscene level selection menu displays any number of thumbnail pictures for each photoscene, and will cycle between them slowly whenever the player hovers their mouse over the icon.&lt;br /&gt;
** You can have as many or as few as you like. If you only have one, only one will be displayed. If you have more than one, they will cycle through each other as the player hovers over the icon.&lt;br /&gt;
** Preview images will be flood filled to a 16:9 aspect ratio in the level selection menu.&lt;br /&gt;
*** Because of this, they should be no larger than 512 pixels wide, as any larger texture will take up texture memory on the players&#039; GPU but not actually impact the visual quality of the icon.&lt;br /&gt;
*** Textures that are taller or wider than 16:9 will be clipped at the edges. The textures are flood-filled to the 16:9 thumbnail icon, and any texture space outside of that is ignored.&lt;br /&gt;
** Preview images should not contain an alpha channel. If an alpha channel is supplied, then the texture will be invisible in-game, and your thumbnail will be completely red.&lt;br /&gt;
** Optimal settings for your thumbnail textures:&lt;br /&gt;
*** maximum horizontal resolution of 512 pixels&lt;br /&gt;
*** DXT1 compression&lt;br /&gt;
*** sRGB True&lt;br /&gt;
*** Has alpha channel: False&lt;br /&gt;
* Level:&lt;br /&gt;
** This is a link/reference to your actual level.&lt;br /&gt;
* Year:&lt;br /&gt;
** This is the level&#039;s associated year.&lt;br /&gt;
** It is displayed in the level selection menu next to the level&#039;s name.&lt;br /&gt;
** It currently has no other purpose, but could be used in future Automation updates to lock off certain levels during the campaign.&lt;br /&gt;
* Is Designer Level:&lt;br /&gt;
** this is used for if your photoscene level also contains the required blueprints and actors to function as a car and engine designer, and you wish for players to be able to select your photoscene as their car and/or engine designer level.&lt;br /&gt;
** Default is False&lt;br /&gt;
* Opt Custom Level Widget:&lt;br /&gt;
** If your photoscene contains player-adjustable settings, and you have correctly set up a photoscene widget blueprint, then this setting should be set to your photoscene widget blueprint.&lt;br /&gt;
&lt;br /&gt;
== Share Your Mod. ==&lt;br /&gt;
Go to the [[Modding]] page to see how to share your mod.&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=Photoscenes&amp;diff=4916</id>
		<title>Photoscenes</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=Photoscenes&amp;diff=4916"/>
		<updated>2023-03-01T03:31:01Z</updated>

		<summary type="html">&lt;p&gt;Hannah: /* Using The Slider_Photo_Manager */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Photoscene support was added 25th October 2017.&lt;br /&gt;
&lt;br /&gt;
Beginning with LCv4.2, Automation supports player-customizable options for individual photoscenes.&lt;br /&gt;
&lt;br /&gt;
There is an example photoscene mod included in the sdk. open it to see how it works. It is also available on the Steam Workshop as a mod.&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
# create a mod&lt;br /&gt;
# create and design a level&lt;br /&gt;
# (Optional) Create a photoscene Widget for player-customization&lt;br /&gt;
#create and fill out a Photoscene Level Preview file.&lt;br /&gt;
## create Thumbnail(s)&lt;br /&gt;
# Share your mod&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
A photoscene mod contains a set of files that define how the photoscene works, and what it looks like. It consists of the following:&lt;br /&gt;
&lt;br /&gt;
# a level/scene&lt;br /&gt;
# a photoscene level preview file&lt;br /&gt;
# at least one thumbnail picture&lt;br /&gt;
# (optionally) a widget blueprint&lt;br /&gt;
&lt;br /&gt;
== Create A New Blank Mod ==&lt;br /&gt;
&lt;br /&gt;
* Create a new Mod from the Blank Template[[File:UE4ModCreation 01.gif|none|frame]]&amp;lt;br /&amp;gt;&lt;br /&gt;
* fill out the wizard and press Create Mod[[File:UE4ModCreation 02.gif|none|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Create a New Blank Level ==&lt;br /&gt;
Create a new blank level in your mod plugin folder. Name it whatever you&#039;d like.&lt;br /&gt;
&lt;br /&gt;
Open the level by double-clicking it.&lt;br /&gt;
&lt;br /&gt;
=== Design your level ===&lt;br /&gt;
do whatever you want to make your level be what you want.&lt;br /&gt;
&lt;br /&gt;
This is not anything particular to Automation, but UE4 in General. Watch some of Epic&#039;s tutorials on this: https://www.youtube.com/watch?v=cl_eoVfNDKU&amp;amp;list=PLZlv_N0_O1gak1_FoAJVrEGiLIploeF3F&lt;br /&gt;
&lt;br /&gt;
=== Level Creation Guidelines ===&lt;br /&gt;
[[File:UE4ModCreation 24.gif|none|thumb]]&lt;br /&gt;
* when you set the car to &#039;snap to ground&#039;, a ray is cast from 6m above the car, to 2m below the car. the car is &#039;placed&#039; on the first surface it collides with. Make sure any roofing or props in this range dont have collision enabled, or the car will mistake them for the ground.&lt;br /&gt;
* Search the &#039;&#039;&#039;content browser&#039;&#039;&#039; for &amp;lt;code&amp;gt;A Car Locator&amp;lt;/code&amp;gt;.&lt;br /&gt;
**These are the bookmarks for sub-level positions.&lt;br /&gt;
**Place them wherever you want the car to be, and in the &#039;&#039;&#039;Details&#039;&#039;&#039; panel, give them a name.&lt;br /&gt;
**This name will show up in the levels menu in the photoscene as one of the sub-level positions.&lt;br /&gt;
**You can have as many as you want.&lt;br /&gt;
**if none are present, the car will spawn at 0,0,0&lt;br /&gt;
*Currently, Stationary Lights are broken for Automation. use either static or movable lighting in your scenes.&lt;br /&gt;
&lt;br /&gt;
== Adding Customization Options To Your Photoscene ==&lt;br /&gt;
Beginning with LCv4.2, Automation supports player-customizable options for individual photoscenes.&lt;br /&gt;
&lt;br /&gt;
You can set up your photoscene to allow the player to change the colour of the lighting, the time of day, whether street lights are turned on, etc... the world is your oyster!&lt;br /&gt;
&lt;br /&gt;
=== Creating a Photoscene Widget ===&lt;br /&gt;
From the &amp;lt;code&amp;gt;Content Browser&amp;lt;/code&amp;gt;, add a Widget Blueprint to your mod folder.&lt;br /&gt;
[[File:Wiki Photoscene CreateWidgetBP.jpg|none|thumb|342x342px]]&lt;br /&gt;
Open the Widget, and from the &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; menu, select &amp;lt;code&amp;gt;Reparent Blueprint&amp;lt;/code&amp;gt;.&lt;br /&gt;
[[File:Wiki Photoscene ReparentWidgetBP01.jpg|none|thumb|342x342px]]&lt;br /&gt;
In the menu that appears, find and select &amp;lt;code&amp;gt;Photo Scene Widget Base&amp;lt;/code&amp;gt;.&lt;br /&gt;
[[File:Wiki Photoscene ReparentWidgetBP02.png|none|thumb|290x290px]]&lt;br /&gt;
From the Hierarchy window, delete the &amp;lt;code&amp;gt;Canvas Panel&amp;lt;/code&amp;gt;.&lt;br /&gt;
[[File:Wiki Photoscene DeleteCanvas.png|none|thumb|300x300px]]&lt;br /&gt;
You are now free to design the buttons, sliders, and drop-down menus, etc... to your heart&#039;s content!&lt;br /&gt;
&lt;br /&gt;
=== Quick Tips: ===&lt;br /&gt;
&lt;br /&gt;
* Add all your buttons and options under a parent Vertical Box&lt;br /&gt;
** your widget will appear under the &amp;lt;code&amp;gt;Level Settings&amp;lt;/code&amp;gt; menu in the Photoscene, and as such do not have much horizontal space to work with.[[File:Wiki Photoscene Tips01.gif|none|thumb|300x300px]]&lt;br /&gt;
* There are a few preset buttons and sliders you can use that will make your life easier. These can be searched for and used from the Palette menu, but feel free to design your own. More info on the functionality of these widgets can be found on the [[About Photoscene Widgets]] page:&lt;br /&gt;
** Slider_Photo_Manager&lt;br /&gt;
** UW_DropDown_Photoscene&lt;br /&gt;
** Photoscene_Checkbox_UW&lt;br /&gt;
** UW_TextBox_Photoscene&lt;br /&gt;
&lt;br /&gt;
== Widget Functionality ==&lt;br /&gt;
The &amp;lt;code&amp;gt;Photo Scene Widget Base&amp;lt;/code&amp;gt; parent type has a few function calls that you should be aware of, and use where necessary.&lt;br /&gt;
&lt;br /&gt;
From the &#039;Graph&#039; view, hover over the &amp;lt;code&amp;gt;Functions&amp;lt;/code&amp;gt; menu, and select &amp;lt;code&amp;gt;Override&amp;lt;/code&amp;gt;.&lt;br /&gt;
[[File:Wiki Photoscene FunctionsOverride.png|none|thumb|433x433px|Note that most of the ones with &#039;User Widget&#039; listed on the right are irrelevant. we only need to focus on the ones with &#039;Photo Scene Widget Base&#039; as the parent]]&lt;br /&gt;
Don&#039;t worry if these are overwhelming you, they will be explained more in-depth later.&lt;br /&gt;
&lt;br /&gt;
* Check If Ray Tracing Updated:&lt;br /&gt;
** Is called whenever any ray-tracing settings are updated.&lt;br /&gt;
** This should mostly be ignored, as it is an internal function, but can be overridden if you find yourself running into discrepancies between ray-tracing and non-ray-tracing in your level. &lt;br /&gt;
** Most discrepancies in ray-tracing are related to shadows and reflections, and as such, there is another function that should be used before this one. However, if you find yourself still struggling to get a scene looking good for both ray-traced and non-ray-traced graphics, then override this.&lt;br /&gt;
* Get Current Parameter Values:&lt;br /&gt;
** Is called by the Photoscene whenever it needs to ask this widget what the current UI values are.&lt;br /&gt;
** The &#039;Return&#039; node of this function is an array of &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt; values.&lt;br /&gt;
** This should be used to send the values of your UI to the Photoscene Preset&#039;s &#039;return&#039; node.&lt;br /&gt;
* Level Finished Loading:&lt;br /&gt;
** Is called whenever the Photoscene level has finished loading.&lt;br /&gt;
** This is a safe way to initialize any values you want to set for the level or UI. when the photoscene is loaded from the level selection menu or a preset.&lt;br /&gt;
* Load Parameter Values:&lt;br /&gt;
** Is called when the Photoscene is loading your level from a preset.&lt;br /&gt;
** Paths in an array of &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt; values.&lt;br /&gt;
** This should be used to initialize your UI values, and apply their related settings to your level.&lt;br /&gt;
* On Initialized:&lt;br /&gt;
** Should be ignored, as it is an internal function.&lt;br /&gt;
* Ray Tracing Settings Updated:&lt;br /&gt;
** Is a helper function designed to call whenever a ray-tracing setting related to reflections, refraction, or shadows, is adjusted.&lt;br /&gt;
** It Paths in a boolean that is True if any RT shadow, reflection, or translucency setting is enabled.&lt;br /&gt;
** If you need further functionality for switching things when ray-tracing is on, please refer to the &amp;lt;code&amp;gt;Check If Ray Tracing Updated&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
=== About the Photo_Scene_Parameter_Struct ===&lt;br /&gt;
The &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt;is the combination name/value pair setting that is used for all photoscene/preset save game values. It is used in the &amp;lt;code&amp;gt;Get Current Parameter Values&amp;lt;/code&amp;gt; function and the &amp;lt;code&amp;gt;Load Parameter Values&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
It consists of three primary settings:&lt;br /&gt;
&lt;br /&gt;
* Parameter Name:&lt;br /&gt;
** Is the name/identifier for this setting. It is not displayed in-game, but is instead used in the save game file to store the identifier for this current variable. These need to be unique for all variables in this photoscene widget.&lt;br /&gt;
* Data Type&lt;br /&gt;
** Is the type of value being stored in this parameter.&lt;br /&gt;
** Ties in with the #Value.&lt;br /&gt;
** Each photoscene widget parameter can only contain one type of data, so chose wisely.&lt;br /&gt;
* #Value &lt;br /&gt;
** For the current parameter name and data type, this value is used. Match it to the &amp;lt;code&amp;gt;Data Type&amp;lt;/code&amp;gt;setting.&lt;br /&gt;
&lt;br /&gt;
For instance, if you have a &amp;lt;code&amp;gt;slider&amp;lt;/code&amp;gt; that affects the &amp;lt;code&amp;gt;Brightness&amp;lt;/code&amp;gt; of your photoscene, you would have a &amp;lt;code&amp;gt;Parameter Name&amp;lt;/code&amp;gt; of something identifiable, like &amp;lt;code&amp;gt;SceneBrightness&amp;lt;/code&amp;gt;, a &amp;lt;code&amp;gt;Data Type&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;Float&amp;lt;/code&amp;gt;, and a &amp;lt;code&amp;gt;Float Val&amp;lt;/code&amp;gt; equal to your &amp;lt;code&amp;gt;slider&amp;lt;/code&amp;gt; value. If you had a &amp;lt;code&amp;gt;checkbox&amp;lt;/code&amp;gt; instead, you would use a &amp;lt;code&amp;gt;data type&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; and a &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; val equal to your &amp;lt;code&amp;gt;checkbox&amp;lt;/code&amp;gt; value.&lt;br /&gt;
&lt;br /&gt;
For each setting your photoscene widget can change, you should use one &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt;.&lt;br /&gt;
[[File:Wiki Photoscene AboutThePhotoSceneParameterStruct01.png|none|thumb|300x300px]]&lt;br /&gt;
&lt;br /&gt;
=== Using the Get Current Parameter Values function ===&lt;br /&gt;
This function is called whenever the photoscene preset tries to save this level and its associated settings. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Get Current Parameter Values&amp;lt;/code&amp;gt; function expects an array of &amp;lt;code&amp;gt;Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
You should use the &amp;lt;code&amp;gt;Make Array&amp;lt;/code&amp;gt; node to input into the &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; node, with a number of &amp;lt;code&amp;gt;array elements&amp;lt;/code&amp;gt; equal to the number of settings in your photoscene widget. Each &amp;lt;code&amp;gt;array element&amp;lt;/code&amp;gt; should itself be wired to a &amp;lt;code&amp;gt;Make Photo_Scene_Parameter_Struct&amp;lt;/code&amp;gt; node, with the &amp;lt;code&amp;gt;Parameter Name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Data Type&amp;lt;/code&amp;gt;, and selected &amp;lt;code&amp;gt;data type&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;Value&amp;lt;/code&amp;gt; set.&lt;br /&gt;
[[File:Wiki Photoscene UsingGetCurrentParameterValues01.png|none|thumb|300x300px]]&lt;br /&gt;
&lt;br /&gt;
=== Using the Level Finished Loading function ===&lt;br /&gt;
This function is called whenever the photoscene level has finished loading. If you wish to set some parameters, find some actors, or otherwise initialize anything in your photoscene widget blueprint, do so here. This is a &#039;safe&#039; version of &amp;lt;code&amp;gt;On Initialized&amp;lt;/code&amp;gt;, as it is only called once the level itself and all its contents/actors have been loaded.&lt;br /&gt;
&lt;br /&gt;
=== Using the Load Parameter Values function ===&lt;br /&gt;
Load Parameter Values is called whenever the photoscene is loading a preset which contains your photoscene level and its associated widget blueprint settings. Any preset that contains your level will contain a list of settings associated with your level (defined in &amp;lt;code&amp;gt;Get Current Parameter Values&amp;lt;/code&amp;gt;), which will need to be applied.&lt;br /&gt;
&lt;br /&gt;
It returns a &amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt;, which is a fancy version of an &amp;lt;code&amp;gt;array&amp;lt;/code&amp;gt; , with key/value pairs for each array element. The &amp;lt;code&amp;gt;Key&amp;lt;/code&amp;gt; for each element is the name you returned in Get current Parameter Values from&lt;br /&gt;
&lt;br /&gt;
To apply each setting from the map to your level, The following method works well:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Find&amp;lt;/code&amp;gt; the &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; associated with each of your &amp;lt;code&amp;gt;Parameter Name&amp;lt;/code&amp;gt;s, and;&lt;br /&gt;
# if the &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is found,&lt;br /&gt;
# apply it to whatever logic you use that value for.&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki Photoscene loadparametervalues01.png|none|thumb|300x300px]]&lt;br /&gt;
Remember that the value you are &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt;ing has to be the same as the value you set for each setting in &amp;lt;code&amp;gt;Get Current Parameter Values&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Using the Ray Tracing Settings Updated function ===&lt;br /&gt;
This function is called every time a ray-tracing-related setting is updated. It returns &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; when any of the shadow, translucency, or reflections ray-tracing settings are enabled, or &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt; when none of them are enabled.&lt;br /&gt;
&lt;br /&gt;
This is useful when you have a material or mesh or other such thing which conflicts with a ray-traced scene. An example of such is the &#039;10s Design Room photoscene, where the glass materials on the windows are swapped out for a ray-tracing optimised version when ray-tracing is enabled, and swapped back to the standard material when ray-tracing is disabled.&lt;br /&gt;
&lt;br /&gt;
== Creating a Photoscene Level Preview file ==&lt;br /&gt;
The Photoscene level preview file contains the overall information about your photoscene, as well as links to the optional widget blueprint, the thumbnail picture(s), and the actual level.&lt;br /&gt;
&lt;br /&gt;
Create a &amp;lt;code&amp;gt;PhotosceneLevelPreview&amp;lt;/code&amp;gt; file by right-clicking in the content browser, and from the &amp;lt;code&amp;gt;camso&amp;lt;/code&amp;gt; group, select &amp;lt;code&amp;gt;Photo Scene Level&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;PhotoSceneLevelPreview&amp;lt;/code&amp;gt; file contains the following settings:&lt;br /&gt;
&lt;br /&gt;
* Name:&lt;br /&gt;
** This is the name of your photoscene. It will appear in-game as the name of the level in the level selection menu.&lt;br /&gt;
* Default Locator Name:&lt;br /&gt;
** This is the name of the &amp;lt;code&amp;gt;a_car_locator&amp;lt;/code&amp;gt; actor that you wish to be the default location of the car when the scene is first loaded.&lt;br /&gt;
* GUID:&lt;br /&gt;
** This is an unique GUID that you should generate for this photoscene. It must be unique to any other GUID. &lt;br /&gt;
** When first creating your photoscene, generate a new GUID for it by opening the photoscene level preview file and from the drop-down to the right of the GUID setting, select &amp;lt;code&amp;gt;Generate&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Level Preview Images:&lt;br /&gt;
** The photoscene level selection menu displays any number of thumbnail pictures for each photoscene, and will cycle between them slowly whenever the player hovers their mouse over the icon.&lt;br /&gt;
** You can have as many or as few as you like. If you only have one, only one will be displayed. If you have more than one, they will cycle through each other as the player hovers over the icon.&lt;br /&gt;
** Preview images will be flood filled to a 16:9 aspect ratio in the level selection menu.&lt;br /&gt;
*** Because of this, they should be no larger than 512 pixels wide, as any larger texture will take up texture memory on the players&#039; GPU but not actually impact the visual quality of the icon.&lt;br /&gt;
*** Textures that are taller or wider than 16:9 will be clipped at the edges. The textures are flood-filled to the 16:9 thumbnail icon, and any texture space outside of that is ignored.&lt;br /&gt;
** Preview images should not contain an alpha channel. If an alpha channel is supplied, then the texture will be invisible in-game, and your thumbnail will be completely red.&lt;br /&gt;
** Optimal settings for your thumbnail textures:&lt;br /&gt;
*** maximum horizontal resolution of 512 pixels&lt;br /&gt;
*** DXT1 compression&lt;br /&gt;
*** sRGB True&lt;br /&gt;
*** Has alpha channel: False&lt;br /&gt;
* Level:&lt;br /&gt;
** This is a link/reference to your actual level.&lt;br /&gt;
* Year:&lt;br /&gt;
** This is the level&#039;s associated year.&lt;br /&gt;
** It is displayed in the level selection menu next to the level&#039;s name.&lt;br /&gt;
** It currently has no other purpose, but could be used in future Automation updates to lock off certain levels during the campaign.&lt;br /&gt;
* Is Designer Level:&lt;br /&gt;
** this is used for if your photoscene level also contains the required blueprints and actors to function as a car and engine designer, and you wish for players to be able to select your photoscene as their car and/or engine designer level.&lt;br /&gt;
** Default is False&lt;br /&gt;
* Opt Custom Level Widget:&lt;br /&gt;
** If your photoscene contains player-adjustable settings, and you have correctly set up a photoscene widget blueprint, then this setting should be set to your photoscene widget blueprint.&lt;br /&gt;
&lt;br /&gt;
== Share Your Mod. ==&lt;br /&gt;
Go to the [[Modding]] page to see how to share your mod.&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
	<entry>
		<id>https://wiki.automationgame.com/index.php?title=About_Photoscene_Blueprints&amp;diff=4915</id>
		<title>About Photoscene Blueprints</title>
		<link rel="alternate" type="text/html" href="https://wiki.automationgame.com/index.php?title=About_Photoscene_Blueprints&amp;diff=4915"/>
		<updated>2023-03-01T03:30:56Z</updated>

		<summary type="html">&lt;p&gt;Hannah: Created page with &amp;quot;====Using The Slider_Photo_Manager==== The &amp;lt;code&amp;gt;Slider_Photo_Manager&amp;lt;/code&amp;gt; is a slider with a title text, plus and minus buttons, and a text box for the current value which can be set and overridden by the player.  It has a &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event that is called whenever the player changes the value of the slider, and this event should be utilized for setting your Photoscene settings.  The &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event returns a &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; value.  T...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;====Using The Slider_Photo_Manager====&lt;br /&gt;
The &amp;lt;code&amp;gt;Slider_Photo_Manager&amp;lt;/code&amp;gt; is a slider with a title text, plus and minus buttons, and a text box for the current value which can be set and overridden by the player.&lt;br /&gt;
&lt;br /&gt;
It has a &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event that is called whenever the player changes the value of the slider, and this event should be utilized for setting your Photoscene settings.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event returns a &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; value.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Slider_Photo_Manager&amp;lt;/code&amp;gt; has a few settings of note:&lt;br /&gt;
*Min Value:&lt;br /&gt;
**Defines the minimum number that the slider can naturally reach.&lt;br /&gt;
**Can be overridden using the text box by the player.&lt;br /&gt;
**Default is 0.&lt;br /&gt;
*Max Value:&lt;br /&gt;
**Defines the maximum number that the slider can naturally reach.&lt;br /&gt;
**Can be overridden using the text box by the player.&lt;br /&gt;
**Default is 1.&lt;br /&gt;
*Sig Figs:&lt;br /&gt;
**Defines the number of significant figures that will be displayed in the text box.&lt;br /&gt;
**Default is 3.&lt;br /&gt;
*Step Count:&lt;br /&gt;
**Defines the number of steps that are available in the slider.&lt;br /&gt;
**Default is 100.&lt;br /&gt;
**Useful when the slider range is massive, and you dont want the player to have to scrub through all values you may have available.&lt;br /&gt;
**For instance: if your slider has a min range of 0, and a max of 500, it may take the player a long time to incriment the value with their scroll wheel or using the +/- buttons, so setting a step count of 10 will mean that the player only has to press &#039;+&#039; 10 times to get from 0 to 500.&lt;br /&gt;
*Title Text:&lt;br /&gt;
**The text to display next to the slider. Useful for telling the player what this slider does.&lt;br /&gt;
**Default is empty/no text.&lt;br /&gt;
*Display Whole Numbers Only:&lt;br /&gt;
**Is a boolean, default is False.&lt;br /&gt;
**When True, ignores the &amp;lt;code&amp;gt;Sig Figs&amp;lt;/code&amp;gt; value only when the number of significant integers is less than the number of significant figures.&lt;br /&gt;
**Will only display integer values, and ignores any fractional values the slider may have set.&lt;br /&gt;
**For instance, if you have a slider with a min of 0, a max of 3, and 30 steps, it is possible for the player to get any single-digit fraction of each integer (0, 0.1, 0.2, 0.3......... 1, 1.1, 1.2, 1.3....... 2, 2.1, 2.2, 2.3..... etc), and while you may want this functionality, you may not want to display that fractional value. Enabling this setting will mean that while the player can set the slider to 4.6, say, the slider will display that the value is 4, despite the actual value being 4.6.&lt;br /&gt;
====Using The UW_DropDown_Photoscene====&lt;br /&gt;
The &amp;lt;code&amp;gt;UW_DropDown_Photoscene&amp;lt;/code&amp;gt; is a drop-down menu, with a title text, and a variable number of list options.&lt;br /&gt;
&lt;br /&gt;
It has a &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event that is called whenever the player changes the selected option. It returns a &amp;lt;code&amp;gt;String&amp;lt;/code&amp;gt; value and an &amp;lt;code&amp;gt;Integer&amp;lt;/code&amp;gt; Index value when called. The &amp;lt;code&amp;gt;String&amp;lt;/code&amp;gt; value is the string text of the selected option, while the &amp;lt;code&amp;gt;Index&amp;lt;/code&amp;gt; integer is the position of the currently selected string value in the array/list.&lt;br /&gt;
&lt;br /&gt;
Remember that arrays start at 0. For example: a drop-down with four values, say, &amp;lt;code&amp;gt;one on, one off, both on, both off&amp;lt;/code&amp;gt;, will have selected integers of &amp;lt;code&amp;gt;0,1,2,3&amp;lt;/code&amp;gt;, respectively. If the player Selects &amp;lt;code&amp;gt;one off&amp;lt;/code&amp;gt;, the &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event will return a &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; value of &amp;lt;code&amp;gt;one off&amp;lt;/code&amp;gt;, and an &amp;lt;code&amp;gt;index&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;UW_DropDown_Photoscene&amp;lt;/code&amp;gt; has a few settings of note:&lt;br /&gt;
*Title Text:&lt;br /&gt;
**The text to display next to the drop-down. Useful for telling the player what the drop-down does.&lt;br /&gt;
**Default is empty/no text.&lt;br /&gt;
*Options:&lt;br /&gt;
**The number and names of the options available in the drop-down.&lt;br /&gt;
**You can have as many or as few as you want.&lt;br /&gt;
**Default is empty/no values.&lt;br /&gt;
*Selected Option:&lt;br /&gt;
**The string value of the default selected option for this drop-down.&lt;br /&gt;
**Should be identical to one of the &amp;lt;code&amp;gt;Options&amp;lt;/code&amp;gt; list items.&lt;br /&gt;
**Default is empty/no value.&lt;br /&gt;
====Using The Photoscene_CheckBox_UW====&lt;br /&gt;
The &amp;lt;code&amp;gt;Photoscene_CheckBox_UW&amp;lt;/code&amp;gt; is a tickbox/checkbox/disabled+enabled buttons.&lt;br /&gt;
&lt;br /&gt;
It has a &amp;lt;code&amp;gt;Value Changed&amp;lt;/code&amp;gt; event that is called whenever the player changes the setting. It returns a boolean which is &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; when the value is ticked/enabled/true, and returns &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt; when the value is un-ticked/disabled/false.&lt;br /&gt;
&lt;br /&gt;
It has a few settings of note:&lt;br /&gt;
*Title Text:&lt;br /&gt;
**The text to display next to the setting. Useful for telling the player what the setting does.&lt;br /&gt;
**Default is empty/no text.&lt;br /&gt;
*Default Value:&lt;br /&gt;
**Is a boolean. Sets the default value of this setting.&lt;br /&gt;
**Default is un-ticked/disabled/false.&lt;br /&gt;
*Use Buttons:&lt;br /&gt;
**Is a boolean. Switches the widget between the default disabled/enabled buttons, and a small check box with a disabled/enabled text. Useful for some things.&lt;br /&gt;
**Default is un-ticked/disabled/false.&lt;br /&gt;
====Using The UW_TextBox_Photoscene====&lt;br /&gt;
The &amp;lt;code&amp;gt;UW_TextBox_Photoscene&amp;lt;/code&amp;gt; is a simple text box.&lt;br /&gt;
&lt;br /&gt;
It has a &amp;lt;code&amp;gt;Text Updated&amp;lt;/code&amp;gt; event that is called whenever the text changes from player input. It returns a &amp;lt;code&amp;gt;String&amp;lt;/code&amp;gt; text which is the value of the text box.&lt;br /&gt;
&lt;br /&gt;
It has a few settings of note:&lt;br /&gt;
*Text:&lt;br /&gt;
**Is the default text to display in the text box.&lt;br /&gt;
**Default is none/no text.&lt;br /&gt;
*Title Text:&lt;br /&gt;
**The text to display next to the setting. Useful for telling the player what the setting does.&lt;br /&gt;
**Default is empty/no text.&lt;/div&gt;</summary>
		<author><name>Hannah</name></author>
	</entry>
</feed>