## UE4 – Procedural 3D noise bump setups

Software:
Unreal Engine 4.25

Yet another case where I develop my own costly solution only to find out afterwards that there’s actually a much more efficient built-in solution.. ðŸ˜€

In this case the subject is deriving a bump normal from a procedural or non-uv projected height map/texture (like noise, or tri-planar mapping for example).

The built-in way:
Using the pre-made material functions, PreparePerturbNormalHQ and PerturbNormalHQ, the first of which uses the low level Direct3D functions DDX and DDY to derive the two extra surface adjacent values needed to derive a bump normal, and the last uses the 3 values to generate a world-space bump normal:

1. Noise coordinates are obtained by multiplying the surface shading point local position by a value to set the pattern density.
2. The Noise output value is multiplied by a factor to set the resulting bump intensity.
3. The PreparePerturbNormalHQ function is used to derive the 2 extra values needed to derive a bump normal.
4. The PerturbNormalHQ function is used to derive the World-Space bump normal.
5. Note:
Using this method, the material’s normal input must be set to world-space by unchecking Tangent Space Normal in the material properties.

The method I’m using:
This method is significantly more expensive in the number of shader instructions, but in my opinion, generates a better quality bump.
Sampling 3 Noise nodes at 3 adjacent locations in tangent-space to derive the 3 input values necessary for the NormalFromFunction material function:

1. Noise coordinates are obtained by multiplying the surface shading point local position by a value to set the pattern density.
2. Crossing the vertex normal with the vertex tangent vectors to derive the bitangent (sometimes called “binormal”).
3. Multiplying the vertex-tangent and bitangent vectors by a bump-offset* factor to create the increment steps to the additional sampled Noise values.
* This factor should be parameter for easy tuning, since it determines the distance between the height samples in tangent space.
4. The increment vectors are added to the local-position to get the final height samples positions.
5. The NormalFromFunction material function is used to derive a tangent-space normal from the 3 supplied height samples.

Note:
From my experience, even though the UV1, UV2 and UV3 inputs of the NormalFromFunction are annotated as V3, the function will only work is the inputs are a scalar value and not a vector/color.

## UE4 – Quick fix for normal map encoding

Software:
Unreal Engine 4.25 | Photoshop 2020

Quick UE normal map tip:
If you load a normal map into a UE material and the result appears inverted, i.e. holes instead of bumps or the other way:

The quick fix:

1. In the texture settings, check the Flip Green Channel option and save it:

The deep fix:
* This can be performed an automated action on multiple files

1. Open the normal map in Photoshop
2. In the Channels panel, select the Green channel
3. Press Ctrl + I,
Or Select Image > Adjustments > Invert
To invert the green channel.
4. Save the texture and reload into Unreal Engine.

Inverted normal map:

Fixed normal map:

## UE4 – Bump Map

Software:
Unreal Engine 4.21

To use a ‘Bump Texture’ in UE4, or in more geeky terms, derive Normal data from a supplied height map, use the NormalFromHeightMap Node.

Notes:

1. The height map textured is supplied via Texture Object node and not Texture Sample, and is connected to the NormalFromHeightMap‘s Height Map input.
2. A numeric vale is connected to the NormalFromHeightMap‘s Normal Map Intensity input to control the intensity of the resulting Normals/Bump.
3. UV coordinates for the bump map should be connected to the Coordinates input of the NormalFromHeightMap node.

## Creating text height maps in photoshop

Software:
Photoshop CC 2017

When you need to create a 3D title that looks carved in stone by using a height map or normal map of the text design,
And you need to have the titles remain as live text in Photoshop so that you can easily make changes to the text if needed,
A simple way to make turn the text into a height map that would look carved or beveled inwards is to apply an inner glow effect and choose the “Precise”option in the “Technique” parameter of the effect.