Real & Virtual Worlds — Development Week #10

AimeeM
4 min readMay 17, 2021

This week I mostly worked on shader creation as shown in the gif below:

Water

Firstly, I created the water shader as I feel it is one of the most important aspects of the environment. Below is a collection of screenshots from the shader blueprint inside Unreal:

Left: Base colours setup with the colour shade darkening dependent on the height of the water Right: Setting the refraction and blending with the normal output result so it takes it into account
Sets the normals using the UV defined texture coordinates and animating it along the x and y axis
Sets the caustics or reflections of the water based on the UV defined coordinates and animating along the x and y axis

All of the parameters are editable including the colours, normal strength, animation speed etc which will allow me to make changes easily if required.

However, this did not go as smoothly as originally planned as I encountered an issue with the appearance on the first try. For example, as compared to the final result, the colours were extremely pale in comparison despite using a high normal and opacity strength, as shown within the screenshot below:

Colours not displaying correctly

From here, I decided to migrate the material into another existing project to see if the problem occured here also. I discovered that it was displaying correctly within this project and continued onwards to compare the two to see if anything was missing from the VR one.

Displaying as intended within an alternative project

The solution was to add a sphere reflection capture to ensure that the reflectiveness was working correctly and to turn down the intensity of the main light source in the scene as it was washing out the colours. The fixed result can be seen below:

Fixed result displaying deep blue water

The colours displayed here are different to the gif as from researching into the Arctic, I discovered that the ocean takes on a more green tone as opposed to being a deep blue, as shown within this image:

Ice

Originally I had planned to create the textures using Substance Painter, however, I realised that this would be extremely time consuming considering the number of icebergs and walls that would need to be present within the environment. As an alternative, I have opted to use a shader as this allows me to easily ensure that each iceberg not only is within the same style, but removes the need to texture individually and sculpt on the spiked details. The effect is shown on the sphere and iceberg below:

The reason why the iceberg’s material looks off is because it doesn’t have any uvs assigned to it which is what the shader is based on. Below is the breakdown within the shader blueprint:

Left: Defines the two base colours and lerps/blends between the two based on the viewing angle (Fresnel) Right: Defines the roughness using a noise texture to create the ice effect and defaulting the values of the metallic and opacity outputs
Controls the tesselation amount based on the blue channel e.g. the higher the value of the blue, the more the normals are displaced. This is negative so the map is inverted and only occurs on the bottom of the object
Left: Defines the subsurface colour based on the viewing angle Right: Defines the normals based on the uv texture coordinates and scale value, and then combines the rock and ice normal maps together for the overall output

Likewise, most of these parameters that are editable and therefore can be altered as required to achieve the desired appearance. However, I feel that I could push this material further by possibly adding in reflectivity to add tones from the water or fake the effect?

For week 10, I aim to work on the mechanics for the penguin AI such as assigning their patrol behaviour, blocking in the environment and figuring out the best method of displaying the score within the VR space (should it be diegetic or non-diegetic?).

--

--