7th- 11th November 2022

Due to personal issues I was forced to step back from this project for a few weeks, as such I have worked extra hard to get caught up, and to get back on track. I was granted an extension by the module leader, Steven Reeson, but hopefully will not need to take it if all goes to plan.

 Tuesday 8th November

After looking further into environments, I figured it would be worth learning how to set up a Landscape in Engine. It is becoming standard in industry to create a height map which will then be used to make a landscape in Unreal. 

There are many different softwares that can be used to do this, however most of them are paid licenses that don't offer student access. So I chose World Machine on the recommendation of my Beta Arcade Team Lead, Kay Johnston. It is a simple piece of software that gives total freedom to the user, from the size of the environment, to the height, even going so far as to  implement height-based texture nodes that assign materials based on how steep the slope of the environment is. 

 It works just like Substance Designer, building up our environment from the ground up. The first step is to add a base; for which I chose 'Advanced Perlin Noise' [Green Node]. I set it up with dimensions of 160m x 160m in order to give myself enough room to pad out the environment while also not making it too widespread, given I am only making a small chunk of environment, and used the preset 'Very Fractal' with the Style 'Flat Middle'.

This way it'll mean I have less work to do when it comes to cleaning up in-engine as it gives me roughly what I need before even exporting. 

The Curve node [Blue Node] adjusts the curves of the height map, upping or lowering the intensity. Then the Erosion [Brown Node] reads the level of the environment and assigns a natural erosion to it, thus sharpening it. 

 
Then next [Brown Node] was the Thermal Weathering node. This node controls how much Talus Debris is present in the environment by using the height map. I set it to Alpine mode, as I wanted to simulate a mountain forest. 
 

 
 
Once these base nodes are in place, I applied a Quick Texture [Green Node] and a Scene View [Red Node].  Simply put these nodes allow me to view what I am doing in my scene in real time, and give me an idea of how it will look in-engine with a texture applied.
 
After that, the Slope [Purple ] and Height [Red] outputs are what I will ultimately use to export the height maps for use in Unreal Engine, with the slopes being adjusted in accordance with where I want my textures within engine to lie. For example, as you can see in the below screenshot, I simply told the slope that I wanted my texture to be between 0° and 7° in steepness. 
 

Each texture height map was then saved as a 16-BIT PNG, and the final height map being saved as a 16-BIT RAW file, which I would then use in-engine as my overall landscape. 

From there, it was simply a matter of opening my Unreal file, heading into the Landscape editor, and applying the 16BIT RAW file as the landscape height map, clicking 'fit to data', and then letting it build. 

After this, I made the decision to forgo the use of height maps with textures, and instead opted to learn how Weight-Blended textures worked in Unreal, eventually setting up a Master Material that I would blend Material Functions through (see below), before going into my Landscape Editor and painting on the landscape itself. This, I felt would give me more freedom in regards to how my final environment looked, and would allow me artistic license. 

I'm not entirely sure how this works, but I found a YouTube Tutorial that showed a very basic setup that can be tweaked to fit whatever you need in-engine. The basic gist is that the mathematics in the top left (zoomed in below) passes through a Linear Interpolate / LERP node that has two Albedos running through it, and takes into account where the player / CineCameraActor is within the world and as such tiles your textures accordingly. This gives a more natural look and prevents any ugly tiling that usually happens when creating large-scale environments.




After three of these Material Functions were set up, I moved back to the main editor and into a Material Instance of the Master that I made when booting up my scene, adding four elements to my Layer Blend, and setting each to 'LB Weight Blend' in the Blend Type Menu, then passing them through a Break Material Attributes node, and then finally into the outputs.


From what I can tell, the use of this setup gives me more freedom when it comes to actually painting on my landscape, with breaking the material giving me the option to use only specific parts of any materials regardless of how they're set up in the Material Functions themselves.
As you can see above I needed to use the Base Colour, Roughness, and Normal inputs, so as such only have those hooked up despite having everything set up within the Function. 

 From there, I closed the Material Editor, made a Material Instance, and applied that to the Landscape, making sure to create Layer Info for each of the layered Materials. 

 

From there it really was as simple as painting on which areas I wanted to be Dirt, Rock, Grass, and Gravel. I used a few of the landscape sculpting tools to make my setup a little more appropriate for what I wanted it to look like, and eventually ended up with this:


 
That was sadly all I had time for that day, so as such I set off home and away from university.

Thursday 10th November 2022

As I was still waiting on a new laptop at this time, I felt it was imperative that I start working on smaller things in my scene and get at least one or two of the assets fully textured. 

After researching more into how cabins looked back in the Early 1900s, I found that most some form of lamp outside -- most often a Kerosene lamp, so as such I set about making this to the best of my ability. 

I made a few changes as the process went on, but settled eventually on the final design that was both complex enough  to count as more than a scatter asset, and simple enough that it wouldn't take entirely too long to create. 

 

Low Poly (Left) | High Poly (Right)
 

I opened Substance Painter, and imported my Low Poly Model, baking the High Poly onto it using the following settings (the screenshots below were captured while baking the Axe Model).


By baking using Mesh Name, this stops any weird edge 'frilling' or any bleeding into different meshes, as I've found happens quite often with meshes that overlap.

The texturing process for both was relatively simple, using Smart Materials, Materials, Grunge Maps, generators, and self-made Alphas to build up a realistic aesthetic on both assets. One major difference between the two, though, was that I had to set the lamp's texture settings to 'Alpha Height Blend', which allows us to create translucency within our textures and overlay opaque textures, with the 'dirty glass' aesthetic being what I wanted to achieve. 

Both of these models were then uploaded to Sketchfab, and can be viewed by clicking the appropriate link below

Sketchfab Link - https://skfb.ly/ozBCJ

Sketchfab Link - https://skfb.ly/ozRDX


Important Note: Unreal Engine uses Draw Calls. Each Texture Map is one (1) Draw Call, and if I were to texture the entire environment using individual PBR maps (which is what I had to do to export my models to Sketchfab), this would cause a severe lag as the GPU attempted to read 5 or 6 Draw Calls at once. 

As such, I tend to use what are known as 'Packed' Maps for all of my assets, combining the Metallic, Roughness, and AO into one Texture using channels. I am able to build these in Photoshop, but Substance Painter allows us to export into such a map as an Export Template. This was something I have done with the above assets, and will do with all assets in my scene.

No comments:

Post a Comment