Brief 2: Places Of Mind (Texturing)
I decided to texture only the rock in substance painter to give it a stylized look as I figured I could probably texture rest of the models itself in Unreal Engine.
I imported an FBX file format of the rock into Substance Painter. I set the document resolution to 2048 and used the 'PBR - Metallic Roughness' template.
Figure 1 (Creating a new project, 2024)
I added a basic fill layer for the base color for the rock and assigned a gray color to the mesh. I also added a new empty fill layer which was then assigned a lighter color and assigned a 'Curvature' generator to the layer to give it a chipped edge.
Figure 2 (Base Color and Curvature, 2024)
I created a new fill layer to add mossy green streaks onto the rock. I assigned another 'Curvature' generator to the layer and tweaked its 'Global Blur', 'Global Balance' and 'Global Contrast'. In addition to this, I opened up the fill layer and assigned it a dried green mossy color.
Figure 3 (Mossy green streaks, 2024)
Figure 4 (Dried green color assignment, 2024)
Finally, I created an outer edge chipping effect for the already existing inner edge chipping effect. The process is same as before; adding a basic fill layer and giving it a weather color and adding a 'Curvature' generator to the layer and tweaking its global parameters.
However, I also decided to add a bit of dirt to the rock and I achieved this by adding the 'Dirt' generator instead of a 'Curvature'. I then tweaked the parameters of the dirt and then exported the stylized textures.
Figure 5 (Dirt generator, 2024)
I created the stylized water shader solely in Unreal Engine 5. I added a plane onto an 'Empty' scene and then created a new material and assigned it to the plane. I then opened the material graph for the plane's material and started working out on how I would achieve the stylized water look.
I set the shading model of the base node to its 'SingleLayerWater'. This opens up specific properties suited to creating a water shader like 'Ambient Occlusion', 'Refraction' and 'Pixel Depth Offset'.
I then added new nodes for the texture samples and added 2 default normal textures from the Unreal Engine database. I added 'Panner' nodes to both of the normal textures and blended them together using a 'Lerp' node. I then assigned the water a blue color but did not plug it straight to the base color node. I assigned a a single parameter node to the base color node and the opacity node.
Figure 6 (Basic color node structure, 2024)
I added a parameter node to the alpha channel of the lerp node. This would allow us to control the waviness of the water. In order to do that, I set the speed of the X-axis of the first 'Panner' node to 0.2 and the Y-axis of the second 'Panner' node to 0.2.
To allow for accurate color of the water that interacts with the lighting system set in the level, I added a 'Single Layer Water Material' node and added a color node. I assigned an orangish color to the color node which would pick the accurate coefficient value required to compute the value of the lighting inside the water plane to give off an accurate bluish tint. We can then add a parameter and plug it into a 'Multiply' node to control the murkiness of the water.
Figure 7 (Final node structure for the water shader, 2024)
Wheat was fairly easy to setup as I had already created an alpha mask for it, that would come handy in applying the transparent alpha to the combined wheat mesh. I simply created a gradient of 2 different color nodes and combined it in a 'Lerp' node to the main base color node. I added the alpha texture to the opacity mask of the main texture node and created a simple grass wind simulation. I achieved this by adding a 'SimpleGrassWind' node and plugging 4 different parameters to control the speed, weight, intensity and the WPO value of the wind. I then plugged the output of the wind node to the 'World Position Offset' of the main node.
Figure 8 (Final node structure for the wheat shader, 2024)
Since I had generated the tree mesh in the 'TreeIt' generator, the mesh had two different texture sets available to be assigned to. Those were for the trunk and branches and the leaves of the tree.
I created a very basic texture for the trunk and the branches by creating a new material in Unreal, adding a base color and plugging scalar nodes of '0' and '1' respectively to the 'Specular' and the 'Roughness' node to achieve a stylized look.
Figure 9 (Final node structure of the branches and the trunk, 2024)
The material setup for the leaves setup was the same as the trunk node structure. The only difference was I added the alpha mask of leaves I created earlier in Photoshop and plugged it into the 'Opacity Mask' node.
Figure 10 (Final node structure of the leaves, 2024)
The time it took to figure out how to approach the creation of the grass material was longer than the time it took to create them. It is very tricky when it comes to adding a gradient color parameter and assigning a wind simulation to it and adding a variation parameter to the color of the grasses so they appear natural. The wind simulation structure is the same as that of wheat.
Figure 11 (Grass wind node structure, 2024)
The base color node structure was pretty straightforward even though it looks messy like a spider's web. I created two color nodes that were assigned a lighter and a darker green color and it was combined with a 'Lerp' node. A 'Linear Gradient' node was plugged into a 'Saturate' node and plugged into the alpha channel of the first Lerp node. I then created a new parameter color node that would control the color of the variation gradient of the grass mesh which was then combined with the first Lerp node to a second Lerp node.
I created a windline color setup that would work as an automatic gradient sweep over on the grass mesh with the speed tweaked and a parameter color controlling its sweep gradient. I then plugged the windline color node and the second Lerp node to a third Lerp node and plugged the output of the Lerp node into the base color node.
Figure 12 (Color node structure of the grass mesh, 2024)
I controlled the speed of the windline sweep effect over the grass using an 'Absolute World Position' node combined with multiple 'Panner' nodes which are plugged into textures that are plugged into their respective Lerp nodes.
Figure 13 (Speed node structure of the grass mesh, 2024)
I created a landscape material that was comprised of 3 different textures; grass, dirt and sand. I will be using those three textures accordingly when building a level to demonstrate a stylized environment created using the assets and the textures.
I added three color nodes and assigned them colors respectively and plugged 3 default normal textures found in the Unreal database which were then plugged into a 'Landscape Layer Blend' where three data IDs for 'Dirt', 'Grass' and 'Sand' was assigned. The output of those two blend layer nodes were plugged into the base color and the normal of the main node structure.
Figure 14 (Final node structure of the landscape material, 2024)