Setup

  • New Project
    • Preset > Film
      • Enable raytracing
  • Editor preferences >
    • Level Editor >
      • Viewports > Controls >
        • Invert middle mouse pan : on
        • Advanced >
          • Use distance-based camera speed : on
          • Orbit camera around selection : on
    • General >
      • New TRS Gizmo >
        • Enable new Gizmos : on
  • Project settings >
    • Engine >
      • Rendering > Substrate >
        • Substrate materials (experimental) : on
        • Substrate opaque material rough refraction : on
  • Setup look dev scene
    • Lookdev level
      • Add Level, lets call it material_lookdev
    • Add HDRI Backdrop
      • on sky light set specified cube mat to an hdri
        • HDRI Backdrop > skylight (in the details hierarchy) > Light > Source type > SLS Specified cubemap
          • Set to the same as the top level one
      • Optinally
        • Lighting distance Factor >
          • Set this to 0 if you do not want the ground area to recieve lighting/shadows
        • use camera projection
          • Enable this to not get the hdri projected to the ground
    • Add look dev meshes
      Note that you can filter on static meshes to find the geo faster
      • Shader Ball
        • Engine > SM_MatPreviewMesh_01
        • Tip!
          • Open the mesh in the sm editor (Ctrl + E)
          • In the Material Slots section, you can click the isolate checkbox to visualize the parts that are assosiated with the slot
      • Color calibrator
        • Engine > SM_ColorCalibrator
    • Post Process Volume
      • Unbound
      • Exposure
        • Metering Mode : Manual
        • Exposure Compensation : 10 (ish)
      • pathtracing options

Materials

Basic Plastic / Metal

  • Create Material
    • Content Browser > RMB > Material
    • Call it M_basic
    • Open the material
    • Delete the Substrate UE4 Default Shading
  • Add Substrate Slab
    • Add Substrate Slab
      • Tab > ‘slab..’ > Substrate Slab
      • Connect the output of the slab to the Front Material input of the material output node
  • BaseColor
    • Add Vector 3 parameter
      • Add constant 3 vec : 3 + LMB click
      • RMB click constant > Convert to Parameter
        • Call the parm BaseColor
      • Connect to Diffuse Albedo of slab
    • Organize
      • With the parm selected, details > Material Expression >
        • Group : 01 - BaseColor
        • Sort Priority : 0
  • F0
    • Add Vector 3 parameter
      • Add constant 3 vec : 3 + LMB click
      • RMB click constant > Convert to Parameter
        • Call the parm F0
      • Connect to F0 of slab
    • Organize
      • With the parm selected, details > Material Expression >
        • Group : 02 - F0
        • Sort Priority : 0
  • Roughness
    • Add Scalar parameter
      • Add constant 1 vec : 1 + LMB click
      • RMB click constant > Convert to Parameter
        • Call the parm BaseColor
      • Tip!
        • Hold S + LMB click to create a scalar parm directly
      • Connect to Roughness of slab
    • Organize
      • With the parm selected, details > Material Expression >
        • Group : 03 - Roughness
        • Sort Priority : 0
  • Normal
    • *Add Texture Sample node
      • This will be used when no normal texture is specified
      • Note Not a Texture Sample Parameter.
      • tab > ‘texture…’ > TextureSample
      • In the details panel (of tex sample node) Set the default texture to a Flat Normal texture
    • *Add Texture Sample Parameter node
      • Copy and paste the texture sample node
      • RMB Click > Convert to Parameter
      • Give it the name Normal Texture
    • Add a Static Switch Parameter
      • tab > ‘static…’ > StaticSwitchParameter
      • Call it “Use Normal Texture”
      • Connecty the Texture Sanple Parameter to the True input
      • Connecty the Texture Sanple to the False input
      • Connct the output of he switch to the Normal input of the slab node
    • Organize
      • With the parm selected, details > Material Expression >
        • Group : 03 - Roughness
        • Sort Priority : 0
    • Add a Normal map UV transform
      • See below in the Material Functions setction how to do this
      • tab > ‘uv xfo…’ > ‘UV Xform Normal’
      • Connect to the input of the Uvs of the Normal Texture Sample Parametr node

Glass

  • Create Material
    • Content Browser > RMB > Material
    • Call it M_glass
    • Open the material
    • Delete the Substrate UE4 Default Shading
  • Add Substrate Slab
    • Add Substrate Slab
      • Tab > ‘slab..’ > Substrate Slab
      • Connect the output of the slab to the Front Material input of the material output node
  • Material Detail Setup
    • Select the material output node (or just click on empty graph space)
    • Material > Bleand Mode : TranslucentColoredTransmittence
    • Translucency > Lighting Mode : SurfaceForwardShading
    • Refraction > Refraction Method : Index of Refraction
  • BaseColor
    • Add Vector 3
      • Add constant 3 vec : 3 + LMB click
      • Set value to 0 (of all components)
        • You can use the value V input (of the HSV inputs) to set all components at once
      • Connect to Diffuse Albedo of slab
      • Note I willnot promote to parameter since so far I know I will not need to change this
  • SSS MFP
    • This is the way we will conytrol the color of the glass
    • Add a Substrate Transmittance-To-MeanFreePath node
      • tab > ‘free…’ > Substarte Helpers > Substrate Transmittance-To-MeanFreePath
      • Connect to MFP output to the SSS MFP input of the Slab node
    • Glass Color*
      • Add Vector 3 parameter
        • Add constant 3 vec : 3 + LMB click
        • RMB click constant > Convert to Parameter
          • Call the parm Glass Color
        • Connect the output to the Transmittance Color of the Substrate Transmittance-To-MeanFreePath node.
      • Organize
        • With the parm selected, details > Material Expression >
          • Group : 01 - BaseColor
          • Sort Priority : 1
  • F0
    • Add Vector 3 parameter
      • Add constant 3 vec : 3 + LMB click
      • RMB click constant > Convert to Parameter
        • Call the parm F0
      • Set the default value to 0.04
        • this is the default value of the F0 input of the slab node
        • you can see this by hovering the mouse pointer over the F= input of the slab
      • Connect to F0 of slab
    • Organize
      • With the parm selected, details > Material Expression >
        • Group : 02 - F0 / F90
        • Sort Priority : 0
  • F90
    • Add Vector 3 parameter
      • Add constant 3 vec : 3 + LMB click
      • RMB click constant > Convert to Parameter
        • Call the parm F90
      • Set the default value to 1.0
      • Connect to F90 of slab
    • Organize
      • With the parm selected, details > Material Expression >
        • Group : 02 - F0 / F90
        • Sort Priority : 1
  • Roughness
    • Add Scalar parameter
      • Hold S + LMB click
        • Call the parm Roughness
      • Connect to Roughness of slab
    • Organize
      • With the parm selected, details > Material Expression >
        • Group : 03 - Roughness
        • Sort Priority : 0
  • IOR
    • Add Scalar parameter
      • Hold S + LMB click
        • Call the parm IOR
      • Connect to Refraction (Index of Refraction) of Material output node
    • Organize
      • With the parm selected, details > Material Expression >
        • Group : 06 - IOR
        • Sort Priority : 0
  • Normal
    • TODO

Car Paint

  • Create Material
    • Content Browser > RMB > Material
    • Call it M_carpaint
    • Open the material
    • Delete the Substrate UE4 Default Shading
  • Add Substrate Slab
    • Add Substrate Slab
      • Tab > ‘slab..’ > Substrate Slab
      • Connect the output of the slab to the Front Material input of the material output node
  • Base Color
    • We will add a Flip / Flop options to our material
    • Base Flip Colr
      • Color
        • Add Vector 3 parameter
        • Add constant 3 vec : 3 + LMB click
        • RMB click constant > Convert to Parameter
          • Call the parm Base Flip Color
      • Organize
        • Group : 01 - Base
        • Sort Priority : 0
    • BaseColor Flop
      • Color
        • Add Vector 3 parameter
        • Add constant 3 vec : 3 + LMB click
        • RMB click constant > Convert to Parameter
          • Call the parm Base Flop Color
      • Organize
        • Group : 01 - Base
        • Sort Priority : 1
    • Control Blend
      • Lerp
        • we will use a lerp node to blend between the colors
        • L + LMB click
        • connect the Flip Color to A and Flop to B
      • Fresnell
        • We willuse a frasnell node to control the Alpha ampunt of the lerp
        • tab > ‘fre…’ > Utility > Fresnell
        • Connect to the Alpha of the lerp node
      • Flip/Flop Amount
        • Create scalar parm and (S + LMB)
        • call it Flip/Flop Amount
        • Set default to 1.0
        • Organize
          • Group : 01 - Base
          • Sort Priority : 2
    • Connect Diffuse Albedo
      • Connect the output of the lerp to the Diffuse Albedo input of the slab
  • Flake Color
    • Copy and paste the setup we did for the Base Flip / Flop colors
    • Rename the Parameter names from Base to Flake
      • Renamber to rename the Groups as well
    • Connect to the F0 inpuit of slab
  • Flake Roughness
    • Add Scalar parameter
      • Hold S + LMB click
        • Call the parm Flake Roughness
      • Set default to 0.5
      • Connect to Roughness of slab node
    • Organize
      • With the parm selected, details > Material Expression >
        • Group : 02 - Flake
        • Sort Priority : 4
  • Flake Density
    • Add Scalar parameter
      • Hold S + LMB click
        • Call the parm Flake Density
      • Set default to 15
      • Connect to Glint Density of slab node
    • Organize
      • With the parm selected, details > Material Expression >
        • Group : 02 - Flake
        • Sort Priority : 5
  • Flake Scale
    • To render the flakes we need uvs
      • Add a Texure Coordiantes node
    • Add Scalar parameter
      • Hold S + LMB click
        • Call the parm Flake Scale
      • Set default to 10
    • Organize
      • With the parm selected, details > Material Expression >
        • Group : 02 - Flake
        • Sort Priority : 6
    • Multiply
      • To scale the flakes uvs we multiply the uv coords with the flake scale aprm
      • Connect to Glint UVs of slab
  • Clear Coat
    • Creat a Substrate Slab for the clear coat
      • Tab > ‘slab..’ > Substrate Slab
    • Diffuse Albedo
      • Create a vector, set the value to (0,0,0) and connect to Diffuse Albedo of the clear coat slab
      • We will not make a parameter of this
    • F0
      • Create a constant 1, set the value to 0.05 and connect to F0 o9f the clear coat slab
      • We will not make a parameter of this
    • Clear Coat Roughness
      • Create a scalar parm, call it Clear Coat Roughness and connect to The rouhgness of the clear coat slab
      • Set the default to 0.01, min to 0, max 1.0
      • Organize
        • Group : 10 - Clear Coat
        • Sort Priority : 0
    • To make the clear coat transparent
      • We ass a Substrate Transmittance-To-MeanFreePath node
      • tab > ‘free…’ > Substarte Helpers > Substrate Transmittance-To-MeanFreePath
      • Connect to MFP output to the SSS MFP input of the clear coat slab node
  • Blend the Base & Clear Coat slabs
    • Add a Substrate Vertical Layer
      • tab ‘verti…’ > Substrate Vertical Layer
    • Connect the Clear Coat slab to the top input
    • Connect the Base slab to the bottom input
    • Create a scalar parm, call it Clear Coat Thickness
      • Set the default to 0.003
    • Connect the Clear Coat Thickness parm to the Top Thickness of the Substrate Verticale Layer

Material Functions

MF_uv_xform_normal
Ctrl-C
Tiles and rotates tex coords. The groups are named to fit in the normal section of a material
  • UV Xform Normal
    • Create a folder called functions and step inside
    • RMB > Matrials > Material Functon
      • call it UV_xform_normal
    • Add a Texture Coordinate node
      • tab > ‘coo…’ > TextureCoordinate
    • Add a U Tiling parm
      • S + LMB click
        • Parm name : Normal U Tiling
        • Material Expression >
          • Group : 04 - Normal
          • Sort Priority : 20
    • Add a V Tiling parm
      • S + LMB click
        • Parm name : Normal V Tiling
        • Material Expression >
          • Group : 04 - Normal
          • Sort Priority : 21
    • Append the 2 scalars
      • Append Vector
    • Multiply the TexCoord
      • with the resulting UV Vector
    • Add a Custom Rotator
      • tab > ‘rot…’ > ‘Custom Rotator’
      • Add a scalar Parm > callit it Normal UV Rotation Amount
        • Material Expression >
          • Group : 04 - Normal
          • Sort Priority : 22
    • Connectr the rotator:
      • Connect the multiplied tex coords to the UVs input of the rotator
      • Connect the ‘Normal UV Rotation Amount’ parm to the Rotation Angle of the rotator
      • Connect the output of the rotator to the Output result node
    • Expose to Library
      • Click on an empty section of the Material Function graph
      • Enable the Material Function > Expose to Library checkbox

Tips

  • Nested Instances
    • Note that you can create a Material Instance of another Material Instance
      • This can be handy if you want to create material that should inherit properties, but do some minor tweaks to lets say normal map or roughness
      • If we need to tweak the BaseColor of the parent MI it will adjsut all child instances aswell.
  • Chrome
    • If we want to create a Chrome material set the FO to white and the Roughness to 0
    • Set the BaseColor to black
      • If the F0 is set to (1,1,1) white the BaseColor has no effect
    • Darker chrome
      • Set the F0 to a darker color (0.5, 0,5, 0.5)
      • Make sure that the BaseColor is at (0,0,0) (black)…
        • …since when we lower the FO it will start to have an effect
    • Gold
      • introduce some saturaton in the F0
      • Can also play with the Roughness
  • Exagerate Glas Reflections
    • The FO of a glass material should probably be at 0.04 but you can “increase” the reflaction by increasing the F0 value. You can even tint it to give a colored refelction.