Painting Meshes
Older/Work In Progress Page
- This page was initially written for an older version of Helix, has not been updated, and may be out of date!
- Contributions are more than welcome (see buttons at the top right of the page).
How to use the new Material customization methods available to use.
In Unreal Engine, a Material is an asset that can be applied to a mesh to control the visual look of the scene. At a high level, it is probably easiest to think of a Material as the “paint” that is applied to an object. You can define its color, how shiny it is, whether you can see through the object, and much more.
In Unreal Engine, when you create a Material, you can define custom Parameters for it. So if you defined some parameters for a Material in a mesh, you can tweak it with simple comands in HELIX!
Warning
HELIX provides a bunch of methods to allow you to interact with the parameters you created for your materials using our scripting!
Please read Base Paintable Class to check all available methods before proceeding!
Replacing a Mesh Material with Default Material#
To illustrate, let’s spawn a Cube and change it’s Material using Lua.
Add the following code to Server/Index.lua
file inside the package.
-- spawns a static mesh cube
local my_cube = StaticMesh(Vector(300, 0, 100), Rotator(0, 45, 0), "helix::SM_Cube")
-- replaces it's materials with the HELIX default Masked one
my_cube:SetMaterial("helix::M_Default_Masked_Lit")
Blank Cube with Default Masked Material
Painting a Mesh with Red Tint#
Now let’s set it’s material to red! To be able to do that, we must set the Color parameter named Tint as we’ve seen above is the name of parameters which is connected to Base Color of the Material.
Add the following code to Server/Index.lua
file inside the package.
-- spawns a static mesh cube
local my_cube = StaticMesh(Vector(300, 0, 100), Rotator(0, 45, 0), "helix::SM_Cube")
-- replaces it's materials with the HELIX default Masked one
my_cube:SetMaterial("helix::M_Default_Masked_Lit")
-- paints it red
my_cube:SetMaterialColorParameter("Tint", Color(1, 0, 0))
Cube with Default Masked Material with Red parameter
Making a Mesh Metallic#
Now let’s give it a metallic style! You can learn more about Physically Based Materials to know about how each input affects the final representation of a surface!
Add the following code to Server/Index.lua
file inside the package.
-- spawns a static mesh cube
local my_cube = StaticMesh(Vector(300, 0, 100), Rotator(0, 45, 0), "helix::SM_Cube")
-- replaces it's materials with the HELIX default one
my_cube:SetMaterial("helix::M_Default_Masked_Lit")
-- paints it red
my_cube:SetMaterialColorParameter("Tint", Color(1, 0, 0))
-- makes it metallic
my_cube:SetMaterialScalarParameter("Metallic", 0.85)
-- makes it glossy
my_cube:SetMaterialScalarParameter("Roughness", 0)
Cube with Default Masked Material with Red and Metallic parameters
Making a Mirror#
A fun thing to do is to make a material fully reflective, like a mirror. Add the following code to Server/Index.lua
file inside the package.
-- spawns a static mesh cube
local my_cube = StaticMesh(Vector(300, 0, 100), Rotator(0, 45, 0), "helix::SM_Cube")
-- replaces it's materials with the HELIX default one
my_cube:SetMaterial("helix::M_Default_Masked_Lit")
-- makes it fully metallic and glossy
my_cube:SetMaterialScalarParameter("Metallic", 1)
my_cube:SetMaterialScalarParameter("Roughness", 0)
Cube with Default Masked Material with Metallic and Roughness parameters
Loading a Texture into a Mesh#
It is even possible to load images /(.jpg, .png, etc/) from disk and apply to the mesh! For that you will need to have an image inside an Asset Pack or a Package /(in the Client/
folder/). We gonna use this /(imgur/) with the name syed.jpg
and we will place it inside our Package Client/
folder.
And now you can set it like that:
-- spawns a static mesh cube
local my_cube = StaticMesh(Vector(300, 0, 100), Rotator(0, 45, 0), "helix::SM_Cube")
-- replaces it's materials with the HELIX default one
my_cube:SetMaterial("helix::M_Default_Masked_Lit")
-- applies a custom texture to a parameter called "Texture"
my_cube:SetMaterialTextureParameter("Texture", "package://testing/Client/syed.jpg")
Tip
And voila! Easy Peasy! Feel free to create your own materials and textures and tweak them in-game!
Warning
Be careful! Loading raw images directly from disk is a slow operation and may cause unwanted stutters! Also raw images aren't cached neither automatically pre-loaded when joining a server.