Of the 3 subjects in the course, I believe that 3D is the area I’m most proficient in, and so I feel mostly confident when approaching most basic modelling tasks. However, I believe that there are some areas in which I can develop my skills further, build more confidence and push myself out of my comfort zone.
I think my comfort zone mostly focuses on prop and environment art, probably because I have had the most practice in this area and this is what I enjoy the most. I’ve felt mostly confident in my previous projects which have focused on this, and I feel well-practised in breaking down these objects and solving simple problems to work out how I would recreate them in 3D.
In terms of the details of this area, I feel the most confident and the most satisfied with the models I have made in a realistic style. This is especially true for more recent models I have made, such as the Vending Machine summer project, and a handgun I made as a personal project to practice realistic PBR materials and more complex shapes, as breaking down complex shapes and piecing them back together is something outside of my comfort zone and that I need more practice with.
In the previous examples, I think that the difficulty of the shapes came from the mixture of curved, smooth shapes merging with square or more geometric shapes. Working out how I would approach modelling these parts and blending the forms in a natural way was especially challenging.
I think that the best way to become proficient at this would be to simply model surfaces like these more often, experimenting with different workflows and working out which is the best way to approach them. It may also be beneficial to start with simpler objects that feature a blend between curved and flat surfaces or practice exercises such as experimenting with ways in which I could blend a cube and cylinder together, for example.
Another area outside of my comfort zone is stylising objects and creating textures that fit the style that I am aiming for. I found this particularly hard with PBR textures in the backpack and cart projects last year, and I was not completely satisfied with the
Vending Machine Summer Project
Handgun Personal Project
results that I was able to achieve. I feel that the reflectivity of some of the materials clashes with the simple appearance of other aspects of the model, such as the base colours or large, simple shapes. I believe that I find stylised textures harder than realistic ones because I cannot directly reference what I am trying to create, so it is harder to pinpoint what exactly feels wrong about the textures and how I could go about fixing them.
I think I could push myself outside of my comfort zone by practising stylising different materials more regularly and spending more time planning how I could do so. In these projects, I did not have a clear plan on how I was going to stylise the elements, which I feel contributed to the materials feeling weird in the final models. The next time I make a stylised project, I will be sure to plan ahead on how I am going to stylise the materials, focusing on which parts of a texture I am going to exaggerate or simplify, and spending more time testing what values of metalness, roughness, normals, etc. work best with the stylisation. I think that the pumpkin project could be a good opportunity to do so, so I will put extra emphasis on how I can fix this issue in this project.
My backpack project from last year. I think the textures had improved from the cart, however I was still not satisfied with the results. Some areas, such as the green fabric, feel very flat, whilst the leather had a lot of definition and dimension in comparison. I think this contrast makes the textures feel out of place next to each other.
My cart project from last year. Although I think the metalness on the shield works quite well, on the cart it feels out of place. I think it faces the same issue as the backpack, where most areas feel mostly flat and cartoon-like, whereas the metal feels too defined and realistic when put next to the stylised materials.
There are several different reasons why reusable assets are used when creating environments for games.
The first of these is speed; when assets can be effectively reused, it allows artists to significantly increase the speed of their workflows since fewer unique assets need to be made, freeing up time before a deadline for the artist to add more details, improve the quality of their work, or put more focus into other areas of production such as optimisation or player experience. Having fewer unique assets within a game engine can also mean more organised and easier-to-navigate files, saving further time when it comes to searching for assets in the content browser or making it quicker if the settings of a group of assets need to be changed. An example of when this has come into effect in my projects is creating textures for my backyard project. Since all of the assets in my scene used a limited range of mostly generic materials, I was able to create one main trim sheet that was used either partially, or entirely to texture a large majority of assets in the environment. This led me to be able to texture most assets in my scene within two days since I not only saved time by eliminating the need to create new materials for every asset but also because it made the UV unwrapping process much quicker since I no longer had to pack each UV shell into a map, I could rather create basic seams on each asset and lay them across a pre-existing texture.
Another big reason why reusable assets are frequently used is optimisation. Using assets multiple times can help to optimise a scene in several different ways. The first of these is that it can decrease draw calls. When a static mesh is instanced, it does not add any additional draw calls. This decreases the amount of time the computer needs to render the scene, improving the performance of the game and decreasing the load on the computer at runtime. The second way that reusable assets improve optimisation is by decreasing file size. Being able to reuse textures and models reduces the total amount of these assets which are needed, therefore decreasing the total amount of files within the game. A decreased file size is not only beneficial when a player downloads the game, but it can also decrease the amount of time it takes to load the file in a game engine, or when creating backups, further increasing efficiency.
A final reason why reusable assets can be useful is because it can create a greater sense of consistency within an environment. This is especially true when it comes to environments that would have a mostly consistent theme or aesthetic, such as in a settlement. Although reusable assets can be noticeably repetitive when executed poorly, well-done assets can ensure that a scene feels cohesive with itself. For example, when creating a village, creating each house separately could create subtle differences in both the art style and the style of the buildings, which could create a sense of inconsistency in the final product. However, if generic parts of a house are made, such as doors, windows and supports, not only does creating full houses become quicker, it also means that there is less chance for small stylistic differences, improving the overall quality and sense of consistency within an environment.
There are multiple different ways to increase the speed of asset creation used in game development which are used to improve the efficiency of a workflow.
The first of these is creating somewhat generic, but reusable assets. These assets can come in several different forms, such as models or textures. Reusable meshes are often used when it comes to foliage or set dressing props. Since these assets are often quite generic, it means that repeating these assets is usually not very noticeable, allowing artists to quickly populate a scene with minimal time needed. This is especially true for assets such as foliage since many game engines such as Unreal Engine and Unity offer features where foliage assets can be efficiently painted in, without having a substantial impact on game performance
Tiling textures and trim sheets are another example of reusable assets. These are often generic texture sheets with materials that can be used over several different objects, decreasing the number of textures that need to be made, as well as increasing the efficiency of the UV unwrapping process. since organising textures and UV packing are not so much of a concern here as they are with unique textures, this allows an artist to able to quickly unwrap objects and apply the textures to the materials in-engine.
The next method of creating assets faster is to use material instancing. This is a method I used in my backyard project. In my scene, I wanted to include several vases, but to avoid them feeling monotonous, I wanted to add variations in their colour. Instead of creating duplicates of the vases with different UV placements (Allowing me to create different colours on the texture sheet in Substance Painter), I instead unwrapped the vase once, and in Substance Painter, I created the desired material in greyscale. After the textures were finished, I imported them into Unreal Engine, and in the material editor, used a node which allowed me to overlay a colour on top of the greyscale ceramic texture. Making the node containing the colour overlay into a parameter would then let me turn the material into an instance, where I could quickly edit the colour, meaning I could then apply the different material instances to the different pots. This not only made recolouring the asset a lot faster than creating each colour separately in Painter, but it also helped to slightly optimise the texture, since the texture sizes do not need to be as large, since the pot UVs need to be laid out only once.
The final method used to create assets faster is procedural generation. This is a method that uses different parameters and computer calculations to generate assets or make changes to existing assets extremely quickly. This is a method used commonly to create random environments. The developers only need to make sections of a map which can be repeated, and then can be put into a procedural generation algorithm to be pieced together into a random map. This is a much faster method of environment creation when it fits the project at hand, for example in a game aiming for high replayability in an environment that is different every time. This is because the developers do not need to design full maps, and in a game where replayability is a goal, a lot of time would need to be spent designing and modelling many, many maps.
This method of level generation is not suitable for every game, however. In a more story-driven game, set locations and distances between points of interest are often important, which cannot always be achieved by procedural generation. In these cases, it is much better for a game world to be built manually to ensure that the story, gameplay experience and worldbuilding work as intended and are not affected by the randomness of procedural generation. However, this does not mean that procedural generation cannot be useful in these types of games. Procedural elements are often used in texture creation, such as being used in Substance Painter and Designer. A common example of this is in creating textures such as bricks, generators can be used to quickly edit the appearance of textures without needing to redo everything. An artist is able to, for example, change the number of bricks on the texture sheet without needing to remake the different details such as edge wear on the bricks or where moss is growing around the grout.
There are a few differences in the way that static meshes and deforming meshes are created. The most notable and important of these is the topology. In static mesh creation, topology is generally considered less important than it is for deforming mesh creation, as long as it follows a few different points:
The model looks correct and not faceted, where appropriate
The topology is optimised and not wasteful
No NGons, these can create shading issues or turn into holes in the mesh when transferring models between some pieces of software
As well as this, the placement of different edge loops is not as important in static meshes, as long as the mesh is of a suitable resolution, the shapes are clear, and the topology is managed in a way that would avoid any shading issues or artefacts. However, on deforming mesh, not only do all of the above points need to be considered, but so does the way the mesh will be deformed and animated.
The clearest example of this is the topology of a human face. All of the edge loops are positioned in a way that flows with the forms of the head and muscle structure and are concentrated around areas that move the most, such as the eyes and mouth.
This concentration is to allow natural and smooth animation and deformation of the surface, whilst causing minimal stretching of textures and avoiding creating harsh points or artefacts. Additionally, the topology forms different 'groups' or edge loops (Each highlighted by a different colour on the image), which closely follow the muscle structure of the face. This ensures further that the animation is smooth since the topology is laid out in a way that would more easily tolerate moving in the directions that each facial structure would since the movement would likely flow with the directions that the topology is laid out in.
The same principles apply to the rest of a mode that would deform. More topology is needed around areas which are going to bend, to more smoothly handle the deformation. Not enough topology on an area such as a knee or elbow would cause the inside of the joint to appear as if it is collapsing in on itself, whilst creating a sharp point on the outside of the joint. The extra topology in these areas allows the inside of the joint to maintain more structure when bent, whilst simultaneously smoothing out the outside of the joint since there are more points to handle the curve.
An example of how topology should flow around a human head, with highlighted groups that the topology should form. (Pinsard, N.D.)
Pinsard, L (N.D.) Basemesh Optimized for Facial Rigging [Online] Available from: https://flippednormals.com/product/basemesh-optimized-for-facial-rigging-671 [Accessed 10th Jan 2024)
When designing and modelling my animal, its purpose was one of the main things I considered. Since I wanted to make an animal that would be used as a mount, I would also need to make sure that it looked like it could be used for transporting and carrying items, even the animal I chose to make was influenced by this. Since the animal would likely be carrying heavy weights (such as a person), I wanted to ensure that the animal looked large and strong enough to be able to do this, which influenced my choice of a cow/yak, since it is a large, sturdy-looking animal, where I could put lots of items on without it looking strange or top-heavy. I would also be able to emphasise the muscle structure if needed, since in some of my reference photos for cows, the muscles were quite prominent, further indicating strength.
I also tried to show the job of the cow clearly through the details. I did this by making sure that there was a bag around the saddle, as well as a sleeping bag, to suggest the cow's use for transporting people and items potentially long distances. However, I tried not to make it look like the cow was going to be carrying large loads (Such as pulling a cart), so I made sure that there were no areas where it looked like the cow would be pulling something, such as there being no objects which looked like they could be used to connect a cart, and I aimed to make it look like it would be used by only one person at a time. To do this, I ensured that the saddle and reins were very clear and a focal point to the design, to emphasize the more specific use case of the animal.
To imply this further, I also chose what other props the animal was carrying carefully. I made sure not to overdo the areas I included for storage and a single bed roll, to imply that the animal would most likely be used by only one person at a time, such as the protagonist of a video game using the animal as a mount. Adding assets such as a bed roll would also imply that the animal will be used to travel over long distances, much like a mount in a game, as it implies that it will be making journeys over several days and the owner will need to sleep. I also wanted to make sure that the animal also looked balanced and also wasn't overloaded, to further imply that most of the animal's strength would be used to carry people rather than goods.
To investigate common employability requirements within environment art, I first searched for some job postings for real-time/game environment artists on ArtStation. Although the most relevant job level to me would be junior or graduate roles, there were no listings available for this. Instead, I found 3 listings from Sharkmob, ROCKFISH Games, and Epic Games, with the role from Sharkmob being for a senior artist, whilst the other two are described as 'middle'. I then looked through the descriptions for each of these jobs to try and identify some skills or requirements that appear in at least two of these postings.
The first common requirement that appeared in all of these roles was a general but good understanding of several art fundamentals and an understanding of environments in general. These included having a 'keen eye' for 'architectural layout, lighting, scene composition & physical space, proportion, depth' and 'knowledge in geography and architecture'. These skills would be essential for an environment since understanding art fundamentals would be needed to create visually appealing scenes, and an understanding of other aspects such as geography and architecture will also be useful because it could help an artist create realistic and believable environments since they would be able to more accurately recreate real-world geography features or create buildings which are constructed in a realistic and believable way. Having convincing environments like this would mean that a game world would become more immersive, and therefore more effective overall.
Another common skill between all three of these postings was the mention of the ability to be able to model a wide range of assets, with foliage often being mentioned as either a preferable or required skill. This would make sense as many environments, regardless whether they are indoors, outdoors, natural or manmade, often feature at least a small amount of foliage. It would be important for an environment artist to be able to be versatile to both be able to work and produce high-quality work independently, and also to effectively be able to set dress. If an artist is not able to do this, they may not be able to do this as effectively due to having very few or limited set dressing assets, lowering the overall quality of the environments they produce.
One final common requirement I noticed in the listings was the requirement of being able to work from both photo and drawn references and concept art. In the job listing for Epic Games, this was also noted to be 'Creatively model from rudimentary or unfinished concepts'. This is to 'show understanding of the goals of the design'. This suggests that it is also important for an environment artist to be creative and be able to add their own input into the design, whilst also being able to adapt the models to the goals of the environment and wider game where needed. This would be an important skill to have since concept art is often created very quickly and is often rough and unpolished, created just to communicate the ideas behind the environment, props, etc. This would mean it would be likely that there will be some gaps in the information provided by concept art, such as smaller details, limited views of some angles, or unclear materials. It would be important for an environment artist to be able to fill in these gaps in a fitting and functional way to avoid slowing down the pipeline and once again, create more convincing and immersive assets.
Epic Games (2024) Environment Artist [Online] Available from:https://www.artstation.com/jobs/lMnQ [Accessed 30th April 2024]
ROCKFISH Games (2024) 3D Environment Artist [Online] Available from:https://www.artstation.com/jobs/MdXk [Accessed 30th April 2024]
Sharkmob (2024) Senior Environment Artist [Online] Available from: https://www.artstation.com/jobs/B2m2 [Accessed 30th April 2024]
Concept sketches for my pumpkin
To start the pumpkin project, I created a quick concept sketch. I was initially struggling to come up with any ideas, so after gathering some simple references of pumpkins, I allowed myself to feely sketch out what my pumpkin could look like. During the concepting process, I was still struggling to think of anything other than a generic carved pumpkin, so I made sure to put an emphasis on an exaggerated expression and proportions to help make my pumpkin more interesting in the absence of other ideas.
After the 15 minutes allocated to concepting in class, I had these two basic sketches of a generic carved pumpkin. I chose to take forward Design 1 to develop in ZBrush. This is because I feel that it best fits my goal of an expressive pumpkin. I felt that design 2’s expression was lacking and somewhat flat, and that design 1 has more interestingly shaped features which could translate better into an interesting 3D model.
Blocking out the pumpkin was very simple and quick since the basic shape was just a squashed sphere. This is how I started my blockout, using the move tool, I flattened a sphere and adjusted the sides of the sphere adding variations to produce a more natural shape which wasn't too round. I also tried to consider the pumpkin’s features during this process, making sure the lower portion of the pumpkin widened to help accommodate the very wide smile seen on the concept sketch. Once I was happy with the silhouette, I roughly carved in the shapes of the features using loose, large shapes, and added extra definition around them such as blocking in the basic shape of the ‘eyebrows’, and slight cheeks being pushed up by the pumpkin’s smile.
It was at this point I gained inspiration to give my pumpkin more unique features. Because of the overall shapes and proportions, my sculpt began to remind me of Jack Skellington from The Nightmare Before Christmas. This inspired me to lean into the exaggerated features of the pumpkin further, focusing on giving it somewhat skeletal features. I focused this inspiration mainly around the eyes, nose and cheekbones, aiming to create subtle skeletal eye sockets, exaggerated brow and cheekbones, and referencing the structure of a person’s skull around the nose when adding a nose to the pumpkin.
At this point, I also received useful feedback on how I could model the teeth in a more efficient and effective way, which would also make it easier to retopologise later on. I was originally trying to sculpt the teeth by using the move tool to shape the outside of the mouth into the teeth, however, I was having a lot of trouble getting them to look right. I wasn't happy with how they looked too rounded, I felt that this made the outline of the mouth look too soft. I think this would have been a problem since the pumpkin has a very harsh and exaggerated expression, so having softer edges could take away from the overall expression.
Being reminded of Jack Skellington gave me inspiration to make my pumpkin resemble a skull
Jack Skellington as he appears in Kingom Hearts (Anon)
It was suggested to me to model the teeth as separate objects and then combine them later in the sculpting process, so I could model the teeth without affecting the other parts of the pumpkin, and I found this to be very useful, allowing me to more easily fix the issues stated above. It also allowed me to better prepare the model for retopology and make the mouth easier to retopologise. I did this by giving the teeth much greater depth, intersecting with the back of the mouth. This means I can much more easily retopologise the area where the mouth meets the teeth since I will no longer have to consider the back of the teeth, an there is a much cleaner transition into this area.
Before separating
After Separating
This method gave me a lot more control over the pumpkin's expression
It also allowed me to continue details from the face onto the teeth
Lastly, I began to adjust some proportions and add details to the model. I added some slight asymmetry to make the model more visually interesting and to appear more natural, since natural objects are never completely symmetrical. However, I was also keeping the retopology stage in mind when doing so. I tried not to add too much difference in either side, just enough to make the model feel less 'perfect'. This is to speed up retopology. I plan to retopologise half of the model, then mirror it over to the other side were possible, then adjust for these asymmetries. Having less pronounced differences will help to speed up the retopology process, leaving me with more time to add textures and focus on creating a good presentation for the model. I also kept this mindset when adding details. I didnt want to make the base sculpt too noisy or uncllear, since I would be adding more details and surface imperfections in Substance Painter later. I tried to make sure that the model was easy to understand at a glance, and that the details I added in Zbrush weren't too small or too deep. This is because deep details could cast strong, distracting and noisy shadows, and as stated, I will be adding the details in Substance Later. Once I was happy with my finished sculpt, I moved on to the cleaning up and retopology stage.
The finished base sculpt
Anon, N.D. Jack Skellington (Online) Available from: https://en.wikipedia.org/wiki/Jack_Skellington [Accessed 3rd October 2023]
To retopologise, I chose only to complete half of the pumpkin to double the speed of the overall retopology. I then planned to duplicate it over to the other side, adjust for any asymmetries and combine them into one mesh when I was finished.
Despite this being a static mesh, meaning that the flow of topology wasn't as important here as compared to an animated mesh, I still aimed to follow the flow of the face using edge loops seen in animated meshes to ensure that the individual features fit together well and still folded between one another, ensuring that the silhouette more closely followed that of my highpoly mesh. I started with a very low-poly remesh with Maya's quad draw tool to work out how the edge loops would flow and to establish the structure of the facial features. Once I was happy with the structure, I was then able to use the knife tool alongside the quad draw's split loop function to quickly increase the resolution of the mesh, ensuring that the silhouette had sufficient topology to appear smooth and rounded.
Using soft select to snap vertecies to the high poly
Although the retopology process was mostly quick and had no issues, one area I was struggling with was the teeth. When laying out where the edges should flow, I only filled in the front of the teeth, without considering how I would connect the teeth together and how the topology inside the mouth would flow. This left me with a confusing set of polygons connecting strangely inside the mouth, with a lot of tris in unusual places. Although I spent some time trying to rearrange the polygons and retopologise some of the teeth slightly, I still ended up with a result I wasn't completely happy with. It looks messy and is confusing to work with, which could be a problem if I decided there were any changes I wanted to make to this area later. A better approach in future may be to identify all of the most complex areas and work out from there, whilst simultaneously trying to achieve a basic flow of edge loops. This will make areas like this easier to tackle in future.
Once I was happy with the results of the first half of the pumpkin, duplicating it to the other side and accounting for asymmetries was very easy. Maya's live mesh function makes vertices of a second mesh snap to the nearest point on the live mesh whenever they are moved, so all I had to do to achieve the same asymmetries on the sculpt was to use the soft select tool to slightly move a group of vertices all at once to make them update and snap to the highpoly underneath.
Once the asymmetries were fixed, I used the scale tool around the central loop of vertices and scaled them down on the X-axis so that they were completely flat. I then used the snap tool to snap each side into the center point along the grid so they were perfectly central, then combined the meshes and used the merge tool to ensue I had no overlapping vertices, which would create problems when it came to unwrapping the UVs and texturing later on. I finished the retopology process with a total of 4406 tris.
Lastly, I needed to unwrap the model. At first I somewhat struggled to do this because of the fact that i did not want any seam in any visible places. I started by cutting out a section in the bottom of the pumpkin that would be on the ground plane, and therefore not seen. This meant that I could give this area a lower texel density, making room for other more important and more easily visible UV shells to have a higher and more consistent texel density.
However, I had no other areas to hide seams after this, so I then had to find areas which could be more visible to hide more seams. To do this in the most effective way, I paid attention to the different ridges and details on my highpoly sculpt, so that I could more easily hide seams within features such as deep crevices. However, my lowpoly retopology didn't follow the curvature of the ridges in some areas, which would expose the seams in easily-seen areas. Because of this, I found two edge loops around the back of the model which follow the curvature of the sculpt more closely, and added more seams here. This made the main UV island around the front of the face smaller, allowing me to take up more texture space. I was also able to place the island diagonally across the UV space, since I had several smaller UV islands which I could use to fill in the spaces around it easily, whilst maintaining a consistent texel density.
Adding seams in less noticable places
The finished UV map
Because of the somewhat simple base sculpt, I wanted to ensure that the textures were both realistic and added the details I missed out on whilst sculpting. I started with blocking out the main colours of the pumpkin using folders with masks for each area so I could quickly add new textures and layers within the folder without having to re-create a similar mask for each area, decreasing the amount of time I need to texture.
Using references, I aimed to create variety in the colours and roughness of the model, to add back the interest I skipped on the sculpt, initially to ensure my final model did not end up looking too visually noisy or overworked. I also created some subtle 'fake lighting' using ambient occlusion and curvature maps, as well as using the 'light' generator in Substance Painter to achieve this effect. This was to add some extra depth and colour variation to the model. However, I was careful not to overdo this and focus shadows only in the areas with the greatest amount of ambient occlusion. This is so that the fake lighting on the pumpkin would still look correct in any lighting situation, whilst still helping to add depth and extra contrast.
I also did this when adding emission to the pumpkin's face. I initially added a plain yellow colour to be emissed, and I was going to export the emission as a black and white mask, channel pack it with the other greyscale texture maps and then use Unreal Engine's material editor to add the colour back in-engine to save storage space when importing the maps into the engine and make the model more efficient overall. However, I began to feel like having a solid colour would look too flat, so decided that I would export the emission as its own separate, coloured map and add a gradient in the centre of each of the emissive areas. I made the outer edges of these areas more yellow and less bright, implying that these areas were further from the light source inside; I then made the centre of the emissive areas brighter and more yellow, implying a stronger glow closer to the light source.
Finally, to make the emission blend more with the rest of the pumpkin, I added a subtle emissive effect around the edges of the actual pumpkin, implying that the emission effect was subtly shining through the flesh of the pumpkin, creating a subtle subsurface scattering effect and helping the two areas feel more fluid with one another. I also added this effect to the largest scratches and any areas that would be somewhat thin, implying the light from inside subtly shining through these areas as well.
Around the bottom of the pumpkin, I also added a dirt effect to make the pumpkin seem less perfect, and so more believable. I thought that this would also help to ground the pumpkin in with the rest of the presentation since I planned on adding a pumpkin plant around the back of the pumpkin in some way. Having dirt on the underside of the pumpkin would help the pumpkin feel like it belongs in this setting.
Lastly, I had to tidy up some of the main masks I made at the beginning of texturing. Since I used the polygon fill tool to quickly paint in large areas, some edges were very square, pixelated and sometimes did not follow the exact shapes I was aiming for. This was especially true with the stalk. Some of the details from the highpoly stem baked down onto the pumpkin, meaning that the normal information was present, but the colours were not. This created a very unnatural-looking transition, so I had to paint some of these areas in by hand.
The pumpkin stem before hand- painting the mask
The pumpkin stem after hand- painting the mask
The finished textures in Substance Painter
Before importing my pumpkin model into Unreal Engine, I first had to make sure that the scale was correct. To do this, I first researched how big a pumpkin usually is. I found out that a 30cm diameter is considered to be a medium-large pumpkin, and this is a typical size for a jack-o-lantern (Marston, 2022.), so this is the measurement I decided to use. To do this, I created a 30 unit x30 unit x30 unit cube in Maya, since I know that 1 unit in Maya = 1cm. I then placed the cube over the pumpkin, and resized it so that the widest parts of the pumpkin were approximately the same size as the box. I then made sure to freeze the transformations so that the pumpkin did not get accidentally resized again when importing into Unreal Engine. I finally exported this as a final static mesh file ready to be imported.
The original size of the pumpkin inide the 30cm cube
The pumpkin scaled up to to fit the approximate diameter
To create a clean background for my pumpkin, I created a very simple backdrop asset from a cube by deleting a few faces, bevelling the edges and reversing the normal direction so that it faces inward. In Unreal Engine, I then used the material editor to add a simple dark purple colour to add contrast from the bright orange of the pumpkin, and set it with a high roughness value to avoid any shiny highlights.
Next, I moved on to making other assets to help present the pumpkin. I decided to make assets for a simple pumpkin plant, since I could be flexible with how this is arranged, allowing me to use techniques such as guiding lines to help frame the pumpkin and draw attention to it. I can also arrange it to help avoid darker parts of the pumpkin blending in with the dark background and becoming unclear.
The finished foliage texture
I started creating the leaves by making alphas in Photoshop that I could then use in Substance Painter to determine the shapes of the leaves, and then use in Unreal Engine to correctly set the transparent areas where needed. I created one for the overall shape for the leaves, then one for the most prominent veins in the leaf which I would use as a mask on a layer affecting the height, to make sure that this detail was correct.
From Maya, I then exported a flat plane to work on. In substance painter, I used the alphas as planned, then used the preset textures provided to add more veins alongside hand-painting in a few extra veins where I wanted the placement and driection to be more precise. For any other details, I mainly added hand-painted masks on fill layers to create colour and roughness variations, alongside different filters such as the blur and blur slope on the mask layers, allowing me to smoothly blend out areas whilst still using a more accurate, hard round brush to paint with. The blur slope also allowed me to blend out with subtle cell-like shapes, which helped add to the realistic feel of the leaf. I also added some other small details such as yellowing around the edges of the leaf, and some extra 'fake lighting' around where the areas where the leaf bends in my references, taking care not to overdo this. Once I was happy with the result, I exported the textures. In photoshop, I channel packed the roughness and alpha textures together since they were both greyscale maps, and I could save file space and make my workflow more organised by doing so.
Back in Maya, I then imported the albedo map and applied it to a flat plane, aligned the UVs to the texture so I could have a rough idea of the final look of the leaves. To prevent as much overdraw as possible, I used the multicut tool to cut a rough outline around the shape of the leaf and deleted any unneeded space on the plane. This would also make the leaf easier to work with since in my references, pumpkin leaves always seem to curve around and somewhat overlap. Having ecxess space would mean that some sections may intersect and making it very awkward to work with. I also created a duplicate of the plane so that I could create two leaves that were differently folded, making it harder to notice repeated assets in the final presentation.
So that the leaves would flow naturally, I only edited the shape of the plane using soft select. I made changes to how the leaves turn around the edges. making them droop downwards slightly to create a feeling of weight, and at the base of the leaf, I added extra depth with one side of the leaf slightly overlapping the other. Once I was satisfied with the shape of the leaves, I duplicated them and added them into an arrangement around the pumpkin. I mainly focused on the angle that I planned on taking renders from, however, I also made sure that the arrangement also looked good from all angles, since if this asset were to be used for a game, a player could move around it and view it from many different angles, so this would be an important skill to practice. To help with the arrangement, I also went back and revised the shape of some of the leaves if it would make them flow better within the composition.
Next, I had to connect the leaves with vines. So that I could make the vines in a more efficient way, I started with a cylinder in ZBrush and sculpted some basic volume onto it. I didn't spend too much time on this since I could add most of the normal details in Substance Painter, so I aimed to only add details that would be more difficult or time-consuming to achieve in Substance Painter. Back in Maya, I then made a cylinder primitive and removed both of the round ends so that I was left with a hollow shape where the UVs would unwrap into a rectangle that I could easily use as a trim sheet. I aligned the new cylinder with the highpoly version I made in ZBrush, unwrapped the simple cylinder's UVs so that it was laid out as a rectangle to one side, and then exported both models so that I could bake then in Substance Painter. I then followed the same process as the pumpkin to bake and texture the highpoly detail onto the low-poly simple shape so that I had a result I was satisfied with.
Back in Maya, to make the leaves easier to work with, I added them all, as well as the pumpkin, to a new layer where I could choose to see only the outlines. I then used the curve tool to plan out the path of each vine, with most of them connecting to a leaf. I left out some leaves since I planned to extrude extra stems out of each vine to make the plant feel more natural. I then added cylinders to the base of the plant and extruded each of them along the set curves. I made sure that all of the vines were tapered slightly, especially towards the leaves so that I could naturally blend the assets together and add a natural feel. I then UV unwrapped each of the vines, putting a special focus on hiding the seams and any obvious repetition since all of the vines share one texture. Once I was happy with the result, I could then merge the vine and leaf assets together after adjusting the textures, export it, and then add it to Unreal alongside the Pumpkin and a ground plane to finish presenting .
Adding the vines using curves
The finished backdrop piece
Marston, J (2022). How Much Does an Average Pumpkin Weigh? (Online) Available from: https://www.cuisineseeker.com/average-pumpkin-weigh/ [Accessed 20th October 2023]
Before starting the backyard project, I already had an idea of the themes I wanted to follow. SInce i have enojed making foliage in the past, and ahve wanted to experiment with expanding my knowledge and skills in this area, I wanted to create a scene that had large amounts of foliage. I thought that an effective way to do this would be by making a gardener's garden. To allow me to have more creative freedom whilst designing the scene, I decided to follow a fantasy theme.
Once I had a loose idea of the theme I wanted to follow, I started by creating loose concept art.
My initial idea featured a bungalow style house alongside a short wall on the other side to help enclose the 8m area I had to work within, with raised flower beds placed uniformly along each side of the scene with smaller props scattered around. However, I felt that this layout felt too empty and uniform, and it had no obvious hero asset, so I decided to create it as a blockout in Unreal Engine so that I could more quickly rearrange the layout and add extra features later on, and then iterate with concept art on what could fill each part of the blockout with.
However, when I created a basic version of this concept as a blockout, I felt that it was very flat, as well as empty. Because of this, I decided I should create a blockout which feels right to have a layout which works in 3D rather than 2D, and then adjust my concept to fit the blockout, rather than the other way around.
After some experimentation, I came to this blockout which I felt was effective in terms of composition, and which also didn't feel too empty.
As mentioned above, I Mainly wanted to experiment with adding more verticality. This led me to making the building two or three stories tall, as well as adding an upper walkway to add an additional point of interest higher in the scene, as well as make it potentially make more sense in a game setting, as it would help to highlight where the player may need to go.
I also focused on adding a hero asset to the scene; a well to the right of the foreground. I focused on placing this mainly in a way that would work for the composition of the piece, roughly following the rule of thirds. I also focused on making sure that the placement of the well didn't feel too rigid or structured in relation to the other assets in the scene. This is because it would help the scene feel more natural and relaxed, an atmostphere I am aiming for. Making sure that the well was not aligned with anything else will make the scene feel less rigid and less well-planned, implying a more relaxed attitude from the person who owns the garden, therefore making the environment more inviting.
Once I had a blockout I was happy with, I went back to concepting and working out how I could fill the scene. I focused mainly on achieving a consistent shape language on assets that would imply that the garden is used mainly for growing flowers and other crops, and that gardening is a major hobby, or even the profession, of the person who lives here. I
I wanted to add lots of pots and other objects used as makeshift planters, as well as leaving gardening tools laying around, and a wheelbarrow filled with a harvest of a crop the gardener has grown.
I started with sketching out what the well could look like, and I really liked the curved shape language of the roof, combined with the more rigid posts giving a more sturdy feel. To help the other assets feel more cohesive, I designed the other asset with this shape language in mind. I wanted to include the curves that I found appealing to add to the form of the design, combined with straight perpendicular elements in areas where more structure or strength was needed for the object's function.
I also followed this shape language for elements of the house. To make the assets feel cohesive and that the well was built alongside the house, I copied the exact shape language and colour of the well's roof for the roof of the house. I also made sure to include a mix of curved shapes, and rigid vertical elements to add a sense of strength and sturdiness to the house. I paid attention to which areas could be more decorative and which could be more functional to decide where each element could go, for example, I made sure that any structures bearing a lot of weight or that would be needed to reinforce the house, were made up of straight elements, and where parts weren't as important to the structure, I added curved shapes instead, such as some details around the main supports for the upper walkway, and the roof.
After I had a concept that I was happy with, I made any necessary tweaks to the blockout and moved on to modelling more refined assets.
The main concept I made
When I started modelling, I was very conscious of the tri budget and felt that it would be very easy to go over this budget if I made my assets too detailed. This is because of the large amount of curved shapes, which would need plenty of tris to not appear jagged or too low-poly. So, to avoid going over my budget, I decided to make all of the assets quite low-poly to start with so even if I reach the budget quickly, the amount of tris would be consistent across all of the models. I then planned on making the models higher-poly later on once I had all (or most) of my assets modelled, so I had a better idea of what budget I had left to work with and could better judge the amount of extra tris and details I could add.
At this point, I also started to consider how I could optimise my use of the budget, as well as how I could improve the optimisation of my models in the game engine through methods such as reducing the number of draw calls needed. I did this in several ways, the most notable of which was with the windows. I originally concepted the windows to have a prominent ledge and a roof over the top, however, in my blockout, I had placed some windows by the staircase.
Having prominent features sticking out of the wall here would not make sense, since it would block the use of the staircase. Even if this is a staircase a player character would never use, it would make my scene way less convincing by breaking the immersion with something that would not be practical to whoever lives in this house. To get around this problem, I decided to make a second version of the window, but one that is much more flat to the wall, and so would not get in the way. However, since these window pieces contain a lot of curved edges, I was reluctant to have to place two different versions of the same window model in the scene. To get around this, I made a total of 3 pieces for the windows: the window itself, the prominent roof details, and the flatter window ledge. This would allow me to instance just one version of the window, and one version of both the roofed detail and the flat ledge, which would be more efficient than instancing a window combined with the roof, and another window with the flat ledge. When modelling these parts, I made sure that they would be as easy and efficient to set up in-engine as possible. I paid close attention to how each part of the window fit together, and that the models would be in the same position with the same pivot points. This meant that once I had placed the windows in-engine, I could then copy the window's transformations, and paste them onto the outer detail asset to align them perfectly in as little time as possible and without needing to fiddle with the placements manually. Other assets that I decided to instance include the large planters and some of the more repetitive posts supporting the roof.
Each part of the window models highlighted into its separate components
I also used some other methods of optimisation throughout the modelling and UV process. Some of these include:
Using double-sided textures to save on tris. On assets with thin surfaces with the same material on each side of the surface, such as this basket, I only modelled the outer side and used a double-side material in-engine so that the material showed on the backface of the modelled outer side.
Deleting faces that would never been seen in-game, such as the back side of the edge of the windows or the underside of assets that would be stuck on the ground. This method would not always be suitable though, for example, if assets had physics on them so could move and rotate if interacted with by a player. (Seen here is the back of the window)
Considering how I could optimise textures to reduce draw calls. On my main trim sheet, I added a sample of my roof tile texture to reduce the amount of materials I would need to apply on the well. Instead of needing to apply the tiling roof texture alongside the trim sheet, I could instead use the trim sheet alone. This would take away the need for an additional draw call.
The backyard after I started to import some of the more refined models
Since the foliage was a heavy focus of this scene, I made sure to make a start on it earlier on in the project. This is so that I could ensure that I had enough time to make all the foliage I planned, but also so that I had time afterwards to increase the resolution of my other assets, knowing how much of the budget was being used by the foliage.
I considered making the foliage in the same way that I did for the pumpkin project: painting a leaf in Substance Painter and then applying it to a plane, however, since I would mostly be working with larger parts of plants such as multiple branches at once al full with leaves, it quickly became clear that this method would become impractical, slow, and could lead to very flat-looking foliage. Because of the heavy focus on these assets, I wanted to make sure that they did not feel flat and instead would look convincing and dimensional, as well as be practical and efficient to make.
To achieve this, I used the method of modelling the plants in ZBrush, then baking them onto a flat plane in Painter later. I started this process by masking out the shape of the leaves on planes and then separating the masked shape away from the rest of the plane. I was then able to sculpt the veins and other details on the leaves, as well as use the move tool to make the leaves curl in 3 dimensions. This would avoid making them look flat. With some of the plants, mainly the climbing plant, I also had to include the branches. To make branches that felt natural efficiently, I used the clay tube brush in Zbrush with a tapering effect applied to allow me to quickly draw out the path I wanted the branches to follow.
I made a few variations of each plant, and the climbing plant was the one I put the most emphasis on for this. Since it was going to be covering a large part of the scene, it was the most possible here that the parts could become noticeably repetitive.
Making the grass asset
Because of this, I made several different parts which I could repeat and combine together to make sure that the repetition was less noticeable. I also made sure to consider how the plants would be growing when sculpting. Since this was a climbing plant. I made most of the parts to be growing upwards or outwards from the structures it was climbing on, but I also considered that there may be some larger parts that were not climbing, and instead hanging out or off things. To make sure that the direction of growth was clear, I ensured that the oldest part of the plants were the thickest and had the most, largest leaves. In the case of the climbing part, this would be the bottom, and for the hanging part, it would be the top as the rest of the plant grows outward to find something else to climb on. In total for the climbing plant, I made 4 parts: A climbing section, a hanging section, a dense section growing outwards from the base, and a smaller, sparse piece I could use where needed to increase the density or the plant, help to hide repetitive parts, or tidy up the edges of the plant.
Once I had all of the sections of the plants modelled, I tidied up the models so they were more manageable for other software, then imported the sculpts into Maya where I then resized them and laid them out across a 2 meter x 2 meter plane. This is because the texel density for this project is 1024 pixels per meter squared, and because of the size of the plants, I wanted to use a 2048 texture, meaning that the texture sheet would be 2 meters squared when following this texture density. However, as well as the flatter plants, I also had some more 3-dimensional plants, such as the crops, that I wanted to include on this texture sheet to keep things organised. and to make the most of the space on the texture sheet. To make sure I could include all of these assets on one sheet, I unwrapped the crops onto one corner of the UV sheet as usual and ensured that none of the flat plants would overlap on these areas when I baked them down. To get all of the parts into one file, I then combined the low-poly crops and the plane where I'd be baking the flat plants into one mesh and combined all of the highpoly assets I needed to bake, and exported them into Substance Painter.
Once in Painter, I was then able to bake and texture all of the different assets onto one texture sheet. However, there were some additional things I had to consider. The main of these things is that I wanted my plants to move in the wind to help the scene feel less static. To achieve this, I planned on using the wind node in Unreal Engine which needed a texture to indicate which areas were affected by the wind, and which were not.
To be able to make this mask in Substance Painter, I needed to create an additional channel for this wind map. I was able to easily do this in the same way you would add something like an emission map, except I used a custom channel instead. However, since this was a custom channel, I couldn't see it in the same way as the albedo, roughness or metal maps. To get around this, I added a fill layer where the wind value was set to 0, then in a fill layer above in a folder, I set the wind value to 1, and set it to have a red albedo. This would allow me to see where the wind value of 1 was being painted when I edited the mask.
When painting in the white mask for the wind map, I made sure to pay attention to the thickness and/or sturdiness of each part of the plant, as well as how much the would be exposed to the wind. I made sure to leave the base of each part of the plants with a wind value of 0 so that there was a part of every plant that felt fixed in place, and that the leaves weren't hovering and moving over the surface they were attached to. I also paid attention to where the stems were since these areas would be a lot more rigid than leaves, so they would be a lot less affected by wind.
Once I was finished painting the mask, I removed the colour channel from the layers with the wind map, and I was able to export the black and white mask along with the rest of the texture.
The wind map visualised through a colour map with the same mask applied (Red = The areas where the wind affects)
Testing the foliage in-engine
Once I had most of my assets modelled, I could better plan how I wanted to lay out my textures and group the assets together, and I was able to split the majority of the scene into just 4 textures: Tiling plaster, brick and roof tiles texture, and a trim sheet containing generic materials such as wood, metal, and so on.
Since it was new software, I started my textures in Substance Designer to allow myself plenty of time to experiment and to ensure that I was not rushed when making the main tiling textures. I initially started by trying to make the stone brick texture. However, this did not go well and I ended up abandoning this version of the texture since I was not able to get it to look how I wanted. I was able to identify a few reasons for this:
I was very unorganised- I tried to work on multiple texture channels at once and did not organise or label my nodes
The texture was too complex considering this was my first time trying the software, I had to consider a lot of different parts of the texture at once
Creating the plaster texture in Substance Designer
Because of this, I decided to take a step back and start again with the most basic texture out of the ones I wanted to make in Designer: the plaster walls. I also took steps to ensure that I would not get as confused with what each node did and that I broke down the texture into each individual part and texture channel.
I think that restarting like this helped me to get a much better understanding of Designer as a whole, and made it a lot less overwhelming when re-trying the brick texture later on, since I didn't have to consider factors like the difference between the bricks and grout, giving each bricks a different colour and height, and so on.
Overall, the plaster was very simple to make, and I made sure to approach each part of the texture in small steps. I first focused on creating the main texture of the plaster; very small, irregular bumps across the surface, and then focused on the larger irregularities, in one texture channel at a time.
After being able to experiment with Designer in a much simpler way, I felt a lot more prepared to move on to the more advanced and complicated textures I mentioned earlier.
However, one issue I had was that the renderers in Substance Designer and Unreal Engine are quite different. Although I thought a texture looked good in Designer, once I imported it, I encountered a lot of discrepancies between how it now looked. Some of these differences included colours being a lot darker and having a lot more contrast which often made subtle details in the textures way too bold, normal maps weren't as pronounced, and the roughness was either way too much or way too little. This led to a lot of back-and-forth between the two pieces of software and made it important that I tested what each material looked like before I moved on to the next asset. To do this, I set up 2m square planes, since each texture was going to be 2024x2048 pixels in size they would need to be this large to fit the texel density. I then applied each material to these planes to check that it was the correct scale (Mainly checking the size of the bricks here), that all of the channel maps were looking correct in-engine, and also to test how they looked under different lighting conditions. I wasn't entirely sure of the lighting setup I wanted to follow at this point, so I made sure to check a lot of different scenarios, considering different times of day and the sun being at different angles.
This is because I wanted to be able to quickly adjust the lighting as I wanted later on, with minimal tweaking to my materials.
Testing the scale of my Designer textures, and how they look under different lighting conditions
Another thing I had to consider at this stage was texel density, especially on the assets which would have repeating textures. However, because of how the scene is set up, this made adjusting this very easy to do. Since the largest assets in the scene were the ones with the tiling textures, and they all spanned from one side of my scene to the other, I knew that all of these parts had a dimension of 8 meters in at least one direction. Once I identified which part of the model was 8m long, I was able to UV unwrap it so it fit exactly once across the UV sheet. Since the UV/texture sheet was going to be 2m wide, I was then able to multiply the scale by 4 (Since 8 meter wall/ 2m texture = the texture will fit 4 times), and regardless of the other dimensions, would know that they were scaled perfectly. I did this with every piece of the scene which was 8m long, then I was able to use the checkerboard material to accurately scale other UV islands which I would not have been able to unwrap this way, or for areas such as walls where I knew their height (or another dimension would be the same), I was able to quickly scale the UVs by making the height of a shorter wall, the same height as an 8m long wall.
The main texture I made for this project was the trim sheet, I initially thought that I would need more than one trim sheet, but when looking at my scene, I realised that I could fit everything I needed on one trim sheet. This is because a lot of the scene was made up of generic materials such as metal and wood, and a lot of the sizing of items was also similar, making the process even easier. To start the trim sheet I subdivided a 2 meter plane into 20 segments leaving me with 10cm squared segments, and using the assets I had modelled as a reference for scale, I marked out different sections for each different texture I wanted to include. Since I had some spare space on the trim sheet when the most generic materials were included, I also included some additional textures for other props like the woven basket and I added a sample of my roof tile texture to my trim sheet to reduce the amount of materials I would need to apply on the well. This would reduce the amount of draw calls the asset needs since I wouldn't need to apply the tiling roof tile material as well as the trim sheet.
I then exported the subdivided plane into Substance Painter, and using folders with masks, I sectioned off each material in the same way I had marked out in Maya. I then textured in my normal way, layering the textures provided in Substance Painter and using them as masks to achieve the effect I wanted.
The finished trim sheet (Painter material view)
However, since Painter does not tile textures in the same way that Designer does, I had to be careful with how I manipulated the textures. I was not able to change the 'tiling amount' variable of the textures I was using to a decimal number, since this would cause a seam when the textures were tiled. Since I knew the textures I was using were tiling anyway, I knew that I had to set this value to a full number so that the textures would fit perfectly across the trim sheet.
Once I had repeated this for all of the textures on the trim sheet, I was able to very quickly unwrap most of the assets using this trim sheet. This made the texturing process for the entire scene very quick, saving me a lot of time which I could then use to create any additional assets and dress the set.
The last notable thing I did whilst texturing was experimenting with how I could more efficiently texture similar, but not identical materials and assets. I experimented with this with the vases in my scene, since the meshes were identical each time, however, I did not want them all to be the same colour, to avoid them feeling monotonous or looking obviously repeated. Using what I had learned in Designer, I decided to experiment with similar concepts in Unreal Engine's material editor.
Using similar concepts to what are used in Substance Designer, I wanted to see if there was a way of overlaying colour on top of pre-existing materials so that I could make multiple materials using the same textures, and just apply a different colour to avoid repetition.
It did not take me long to find the Blend_Overlay node, which I found works a lot like an overlay layer in Photoshop, which is useful for overlaying colours. To test that this would work in Unreal, I decided to use the plaster material test it since it was the closest texture that I had to greyscale (So it would not interfere with the colour being applied). I found that this worked almost perfectly, it may not be as effective on larger models and likely would not work on models with large colour differences, however, for needing to recolour monotone pots, this method would seem to work very well here.
This meant that when unwrapping the vases, I did not need to create several different vase models with different UV placements to accommodate the different colours. However, to add a little extra detail to some of the vases and to make the most of some spare texture space, I duplicated the vase to give it a second UV placement where I could add patterns. In Substance Painter, I made sure that the albedo for the plain vases was greyscale, to make sure that the colours I wanted to add would not be affected by any underlying colours, and instead, I made sure to add plenty of value, to help imply dirt and make sure that the asset didn't feel too monotone overall. For the patterned vase, I did include colour since I didn't want the pattern to be the same colour as the rest of the vase, both to make the asset more interesting and to ensure that the pattern does not blend in with the rest of the pot since it is only a small asset that will be viewed from distance most of the time
In Unreal Engine, I first made a material for the vases, which contained everything I needed to quickly change the vase colours; mainly the colour I wanted to overlay set as a parameter. This is so I could instance the material, and be able to very quickly adjust the colour I wanted without needing to make the same material again for each colour.
Overall, I think this method is very effective for small assets like this to add some simple and quick variation and is a method I will keep in mind for similar assets in future projects.
An alpha I used to add the pattern to the vase
Once I had most of the textures done, this let me effectively set dress my scene since I was able to see how the different colours and materials worked together. I mainly did this with foliage to link back with the idea of the character who lives here which I identified at the start: a keen gardener with a laid-back attitude. As well as making sure that all of the plants looked large and well-cared for, I also added some 'unintentional' plants, foliage that grew over time without being planted by the gardener. I mainly did this with a bushier climbing plant that I made. To make sure that the plants looked like they had started to grow themselves, I put them in unusual areas, to make them look like a resilient plant that grows and spreads wherever it can. I chose areas like the well and the roof of the house, to help avoid the feeling that the house was a brand new structure, and instead had been there for some time. This also helped me to make the repetition of the roof tiles less noticeable and added some extra detail to this area, which I felt was lacking before. I repeated this with any other empty-feeling areas in the scene, I made the plants bigger or placed more of them, to help reinforce the character's hobbies and make the garden feel overall more overgrown, which I felt would help show the relaxed attitude of the gardener, since it implies that they have deemed pruning their plants and tidying the garden not so important.
I also aimed to imply this further through some of the assets I placed in the scene. Firstly, I made sure to put lots of pots with plants in them around the scene, to potentially imply that the gardener is almost running out of room for more plants, and is trying to find any place to put more. I chose areas such as the side of the stairs and on the upper walkway to help add some extra detail to these areas which felt somewhat empty, and to help show that the gardener is trying to put new plants anywhere they can. I also tried to imply the relaxed nature of the area through the placement of some assets as well. I mainly focused on this with the wheelbarrow and baskets of crops lying around the scene. I tried to make sure to place assets like these somewhat messily, but also out of the way so would not get in a player character's way, or anyone else who would use the garden. This could be to further imply a relaxed personality, because of the way things are left lying around.
Next, I worked on decals, mainly to add more variety and interest to the textures in the scene. I mainly wanted to do this with the plaster, since from the references I was using, it seemed to age in several different interesting ways which I wanted to experiment with to make the plaster texture feel less repetitive and to help age the house a little. Since I was already familiar with decals, I wanted to experiment a little further with them. One of the main ways I noticed plaster ages is by thinning in patches, leaving large dips in the surface. Because of this, I wanted to experiment more with what decals could do and how I could utilise them in different ways in my scene. Because of this, I made a decal in Substance Painter of one of these dents in the plaster with only normal information, and when applying it in Unreal engine, although it worked, it did not have the same effect as I was expecting. Instead of covering up the normal information of the plaster texture underneath, it instead combined with it. This did not give off the same effect I was aiming for, since I noted in the areas of plaster which have worn away like this, the worn areas are usually flatter than the undamaged areas. However, I still think that it was effective in creating some variation in the plaster which I was aiming for. Since at this point, I was becoming conscious of not having much time left for this project, I decided to wait until later to experiment to see if there was a way that I could overlay the decal on the texture underneath, rather than combining it.
Other decals I worked on to age the plaster were cracks, which I used normal and a faint colour map to add both the depth, and then some light shadows to help emphasise the cracks and add some detail the the edges of the cracks, making them feel more natural. Lastly for the plaster, I made a leak-like decal, which I planned on putting on humid areas or areas where water would run down regularly and has damaged and stained the plaster underneath. The areas I chose to use this decal the most prominently were there was a corner where the roof met a wall, underneath the windows where water would roll off the corners of the window ledges, and around the drainpipe, indicating a possible leak, emphasising the building's age further because of the wear and tear that would have taken many years to form.
Another method I used to help add some variation was vertex painting. In Designer on the stone brick texture, I was able to edit the mask I used to indicate where the gaps in the bricks were so that I could make it look like moss was growing in between the cracks. I exported the mossy stone brick texture into Unreal Engine, and following a tutorial given in a class, I was able to set up the material in a way so that when I assigned different vertex colours to the mesh, the different versions of the material showed through.
Before & after adding decals
The stone walls with the vertex painting applied
On the meshes with this stone brick material, I used the vertex paint tool in Unreal engine to assign the different vertex colours linked to each version of the material. I think that this was not only effective in adding some extra detail and age to the building, but I think it also helped to 'soften' the appearance of the bricks. I wanted to imply deep cracks between each brick, making the wall feel old and thick, however, without the vertex painting, having these consistent dark shadows felt too harsh and there was too much contrast considering the texture appeared frequently throughout the entire scene. However, having the moss not only lightened the colours of the crack but also made the cracks a lot more shallow. This removed some of the high contrast, giving some breathing room for the texture, and making the high contrast work a lot better in the areas where it did appear.
A final tweak I made to the textures was to adapt the meshes to actually have the depth that appears on the textures. Since I had about 10,000 tris left to work with at this point, I knew that I had a lot of my budget left to improve the feeling of depth. The main example of this is the roof tiles. Since I wasn't completely satisfied with the depth of the texture, I added edge loops in Maya so that I could give the impression that the tiles were actually sloping on top of one another. I also added some geometry to curve the tiles upward, a detail that I felt also got lost from a distance. Although this effect was subtle, I think it was effective in adding the desired depth.
However, after making the house slightly overgrown and adding a lot of age to the building, I felt that it made the house feel like it could have been abandoned. Because of this, I wanted to add a few additional signs that someone lived in the house. These included:
Creating a footprint decal with the footprint tool in Painter. Using what I had learned from the plaster wear decal, I was able to effectively create a decal with only normal and some shadow information that blended with the ground texture. I put the
Leaving some tools lying around the garden. I leant a shovel in the upper walkway both to fill the space and make it look like it was recently in use, and put a spade in the mushroom's flower bed by the basket of mushrooms, to make it look like the gardener was partway through digging them up before it got too dark to continue
Created an emission map on the trim sheet so that I could apply it to the windows, to make it look like there is someone inside the house with a light on. I also added a small flickering detail to the intensity of the emission map, to add a small extra detail to make the lighting feel more realistic, or that the source of the light was some sort of flickering fire. I also added the same effect using a light function material on the lights for the lanterns, and a light I added to help 'sell' the idea of the lights being on inside the house, which adds a faint rim light on the props in front of the windows. The light function material was able to change the intensity of the lights, matching the flickering of the emission maps, and making the lighting of the scene feel more 'alive'.
Footprint decals
Additional set dressing
Adding light functions
Lastly, came the final touches and lighting to the scene. Since I had added a light on inside the house, and implied that one of the gardener's jobs had been left for the day, I knew I wanted to make an evening scene. This would also go well with the large amount of blue, brown and reddish colours I had used throughout the scene. I set up an evening lighting setting in the early blockout stages of the project, however, I think this was too intense. The lighting was very orange, and since it contrasted so much with the blue, it made any blue textures appear more black and caused a lot of detail to get lost. Because of this, I decided on an early evening where the light was more of a warm white, improving the brightness and decreasing the altered appearance of the blue materials. When deciding on the angle of the sun, I paid close attention to how the shadows fell. I wanted to make sure that none of the most important assets was being covered in shadows, but I also wanted to utilise the shadows to fill any less detailed areas, to give more interest and contrast to these areas.
To help reinforce a fantasy or magical feel for the scene, I decided to experiment with Unreal's Niagara system to make a basic particle system. I had used the particle systems in Unity before, so I feel like this helped me to effectively and quickly create a system of glowing particles hanging in the air, being gently blown around by the wind, which I tried to match the intensity of to the foliage in the scene so everything felt cohesive. I think that this was effective in creating a more magic or fantasy feeling, which I feel got somewhat lost along the way, and it also added some additional, gentle movement to help the scene feel alive, without being too busy.
When approaching the saddled animal project, I knew that I wanted to choose an animal where I would be able to develop the saddle and any other loads that it was carrying. This is because I already know that I have a preference for environments over characters, so I wanted to give myself the space to be able to create assets and develop skills in potentially new workflows that could feed into the skills I would need as an environment artist, as well as leave me with a portfolio piece that would be more relevant to the job role I would want to pursue, even if I don’t fully display the animal in my portfolio. However, since this was a creature-based project, I had to ensure that I also executed the animal well and made it my main priority. Because of this, I started to research which animals could be a good choice for a method of transporting heavy loads.
Since the animal would need to be strong to fulfil its intended purpose, I mainly focused on trying to find a larger, bulky animal which I thought I could base an interesting concept around. After some time, I came across an image of a large cow decorated with very colourful, patterned fabrics. This turned out to be a Tibetan Yak that had been decorated for a festival (Tenphel, 2023). I found this concept very interesting and decided that a cow or yak like this would be a very suitable choice for the type of animal I wanted to make; a large, strong, loadbearing animal.
I started to concept some ideas for what I wanted the cow to look like, considering the detailed decorations I wanted to include and its purpose to help carry or transport items or people. To help me gain further inspiration, I took reference from concepts for Horizon Zero Dawn, a game that I enjoy with a reminiscent, detailed visual style that I thought could fit well with a design like this. After starting with a basic sketch of what I thought the cow could look like, which I briefly iterated on and added visual elements similar to those of Horizon Zero Dawn which I thought were the most interesting.
However, During the concepting process, I kept in mind the limitations of this project: mainly the timescale and the tri budget for the saddle. I had to keep in mind that I only had 5 weeks for this project, so I focused the details mainly on things that could be done with textures, such as patterned stitches that I could quickly paint in Substance Painter, and I made sure that as many of the different elements were as separate from each other as possible so that if I had to cut out some parts due to tri or time limits, I would not need to make any changes to my concept or pre-existing assets. I also focused on creating simple and repetitive shapes, such as large strings of beads and tassels or ribbons.
I also considered the hair of the animal. Although I believe that adding the long fur around the belly and legs would be possible with the time limits and budgets, I also wanted to make a ‘Plan B’, in case I was not able to complete this in time.
Concept sketches of the Yak
I was able to find some references of more common bulls, which were completely short-furred and looked very similar to the Tibetan yaks. I decided to start modelling following the references of these bulls, because not only was the anatomy clearer, but if I did not have time to add the fur to turn the cow into a yak, I would still have a convincing bull model to present, and if I did have time, the model would still look like the original yaks I was taking inspiration from.
The moodboard I used to guide this project alongside the Horizon Zero Dawn artbook. I tried to focus on gathering references that showed the entirety of the cow's anatomy in detail and from multiple different angles.
Tenphel, S. (2023) The Significance of Yaks for Tibetan People (Online) Available from: https://www.tibettravel.org/tibet-travel-guide/significance-of-yaks.html [Accessed 8th January, 2024)
To start modelling the Yak, I used ZSpheres to create the very basic shape and lay out the proportions of the model. During this stage, I tried to get the proportions as correct as possible, since this is the stage where it would be the easiest to change them. I initially struggled with getting the proportions correct, especially the length of the body and the length of the legs. However, I found that measuring my references helped me to get this correct. Much like human anatomy, I found that a lot of the cow's anatomy fit very we together when measuring the head. I generally found that the length of the body was 4 heads long, and the positioning of the legs and joints also fit very well when measuring this. This allowed me to achieve much more realistic and accurate proportions.
At this point, I was also considering the pose of the model, and how easy it would be for a rigger or animator to rig the model and use it for animation later on, in addition to making sure that I had easy access to every part of the cow to sculpt on and retopologise later. Whilst maintaining the proportions, I tried to make sure that the legs were spaced apart yet still in a neutral pose, and that the tail was angled in one straight line, at approximately the right length for when it was curved down to a more natural position later by an animator. This meant that there would be no strange deformations when the animal was posed, and I would also be able to get to areas, such as the inside of the leg joints, to sculpt any details.
Once I was satisfied with the basic shape, I was then able to use the Adaptive Skin tool to turn the ZSpheres into an editable mesh. This left me with a very rounded shape that I could then carve away at . However, before I started sculpting, I wanted to add a few additional landmarks for the animal I did not include on my base ZSphere mesh, mainly the horns and ears. I used the curve alpha brush to add some basic horns, and I used an IMM brush to add some capsules which I then flattened and ZRemeshed to the side of the head to create some basic ears. When adding the ears, I took inspiration from an African Water Buffalo's large, downturned ears. This is because I designed my cow to have several earrings or decorations in each ear, so I wanted to ensure that I could fit these details in without having to make them too small, and avoid the ears feeling too crowded.
ZSphere base mesh
The AdaptiveSkin basemesh, and the blockout of the horns and ears
Next. I moved on to refining the shapes. In a lot of areas, I focused on carving away at the base mesh instead of adding, since I felt that the base mesh looked very inflated and too thick in a lot of places. I initially focused on carving out shapes to achieve a basic form using the flatten bush, this was particularly useful for forms such as the head and legs which I found were a lot more rectangular and had quite defined planes, and for the upper parts of the body where the belly seemed to flatten, and taper in slightly towards the spine.
Next, I considered the muscle structure and how this would influence the forms. I used anatomical diagrams of the cow's muscles to understand where every muscle was and looked back on the pictures of cows I had gathered to see if I could spot where these muscles were on the real cows and how much they could be seen and influence the forms. I started by sculpting each muscle very lightly so that they still had some influence on the form, then went over the muscles I noticed were the most prominent in my photo references. These included the muscles around the neck, shoulders, and upper legs. I wanted to make sure that all of these muscles were clear and defined because of the intended purpose of this
Once I had the anatomy laid out, I moved on to detailing. I started by drawing out the basic position for the eyes, nose, mouth and details on the hooves. This allowed me to test the proportions of these more fine details before committing to anything more final since I could more easily move the details around without worrying about deforming any detailed forms. Using close-up references of each part of the more detailed anatomy, I then worked on making sure all of the details were accurate. I used tools such as masking out areas and splitting up my mesh to be able to sculpt in fine details without affecting other small detailed areas nearby. This came in especially useful for the eye area, since it allowed me to work on the upper and lower eyelid independently of one another when I added detail, but I could still merge and blend them into the rest of the body when they were ready.
Work-in progress of detailing the anatomy and adding the facial features
Modelling the detais around the eye
The finished base sculpt
Next, I needed to add the fur. I tried to approach this in a way that would give me the most effective and convincing result, in the least amount of time possible. From the point of choosing to make a Yak, I knew that I would probably achieve the longest fur with hair cards, to create a convincing effect. However, using hair cards over the entire model. Therefore, I decided to sculpt hair onto the cow instead, to save on time and the tri-budget by not needing to use hair cards over the entire cow, and this would also leave a base underneath the areas that would need the hair cards, so that if there were any areas which could be seen through the hair cards, it will still have a good base texture.
To do this, I started by modelling to 'samples' of fur first on separate planes, one for the shortest areas, and one for the medium-long areas, since I noted that the length of the fur changed on different areas of the face and body. I then used the separate sculpts of each piece of the fur to create an alpha for the brushes, which I was then able to quickly place over each part of the model, and added layers to my cow sculpt so that I could easily organise sections of fur and control their intensity later on. Since I wanted to achieve a realistic effect, I wanted to make sure that I maid attention to where the short transitioned from short to medium, and from medium to long, where the hair cards would be placed. On the areas where I planned to place the haircards, I made sure to make the hair alphas on these areas where larger than those on the medium-length areas. This is because not only did it make the hair appear longer and in larger 'clumps', but it would also help to avoid the long areas of fur becoming oversaturated with detail if the hair cards I make are slightly transparent in places. This would help to avoid the area becoming noisy, making the fur feel unnatural or overworked, and distracting from other more important areas.
At this point, I felt that the animal was ready to retopologise, and I could properly focus on creating the saddle and other props.
The fur sculpts I made to use on a brush
Finished Sculpt of the Cow
Since I knew that completing the entire of my concept would be ambitionus, I tried to work through modelling the saddle in a way where the most important areas to the design nd breif were prioritised. Because of this, I started with the area that would help to show the animal's function the most, mainly the saddle and reins. If I had time, I then planned to move on to the more decorative areas of the design.
To model the saddle, I used several new tools and techniques within ZBrush, the main of these being separating sections of the mesh into polygroups using masks, and using Zmodeller to create cleanly modelled props. Starting with the saddle. I furst duplicated the cow's base mesh (I made sure to do this before baking the fur layers, so that the fur texture would not be present on any of the props), then I masked out a section of the cow's back in the shape of a saddle in orthographic view, so that any perspective would not interfere with the symmetery or shape of the saddle. On the duplicate, I then separated the area I masked off into a separate polygroup and isolated it, then deleted any hidden part of the spare cow mesh, leaving me with a plane in the basic shape of the saddle that fit perfectly around the body of the cow.
One of the most useful tools I used for modelling the props was ZModeller, which I used to extrude the polygroup to give it thickness. I also used some of the sculpting tool to add some smoother variations to the depth, giving it a more organic shape. However, there were sections of the props that would be a lot more difficult to use ZModeller for, especially the seat elements of the saddle since they were flowing shapes that extruded weirdly from the base part. To model them, I instead decided to add cubes and sculpt them in a way that would fit well with the saddle. I then used Dynamesh to combine the different meshes into one, which allowed me to blend the different shapes into one, and add further details that went across both the seat and base of the saddle.
Process of modelling the saddle
I used a similar method to sculpt many of the props, taking into consideration how I would retopologise each part and what details would be be better to add in the the texturing stage.
I decided that all of the stitching could be added in Substance Painter, and I made sure to experiment with this beforehand. I found that there is a very wide variety of stitch patterns pre-built into Substance Painter, that I could quickly put in place with the new spline draw tools. I also found that there was a puckered fabric brush, that I could also use to add some subtle folds around where two different parts were stitched together, or to add some additional definition around where the more decorative stitching was placed.
I continued to model in many elements of the cow in ZBrush, mainly those made of fabric, leather or other more organic materials that flowed easily, or objects that relied heavily on the form of the cow underneath. However, there were some items that I did not include in the ZBrush sculpt. These included more solid objects, such as beads, most metal details, and earrings. However, I was still concious about my tri count budget for the saddle, since I am limited to 7K tris for any saddle parts or accessories.
Work-in-progress of adding the saddle & decorations
Because of this, I took into consideration how I could lower my tri-count but still keep as many details as possible. I thought that the most effective way to do this was ensure that any dipped areas, like those seen on the reins and around the saddle strap, were shallow enough to be a detail that I could bake down easily to avoid needing to add the dips in my lowpoly mesh. However, the main way I wanted to to to add smaller details was through alphas. On my concept, there were a lot of smaller, somewhat flat details that I thought could work on alphas to make the mesh appear more detailed than it actually is.
To do this, I modelled some highpoly versions of these details in Maya, considering how I would bake them onto the plane. This was mainly through avoiding giving them too much depth that would make them difficult to bake onto a flat plane, and not adding too much detail because of the lower-resolution of the texture budget for alphas, and because of how small the details would be anyway. Adding too much detail could make these small details become muddy or unclear.
I then decimated all of the highpoly sculpts, and imported them into Maya for retopology.
Finished cow & saddle sculpt
To start retopologising, I wanted to focus on the cow. This is because not only is it the main part of the project, but a lot of the topology of the props would depend on that of the cow, or I could use the cow topology to more quickly retopologise some of the tighter-fitting straps and blankets.
Since I did not feel as confident in retopologising, I started by making it very low-poly, focusing on creating the main loops needed for clean deformation to keep it as simple as possible. These areas were around the eyes, ears, muzzle, mouth, legs, and tail. Keeping it low-poly made it a lot easier to work out how each of the more important loops would connect together too. Once I had the basic loops in place, I found it a lot easier to find ways that the topology would form any additional necessary loops, and flow together across the structure of the muscles and face/body without needing to use any N-pols or E-pols, or manipulate topology to for example, join 5 polygons to 3.
Once I was feeling more confident about the base I had created for myself, I found it a lot easier to expand on the topology I had, placing polygons around the form of the jaw, and joining the body and head without much trouble, despite needing to modify some topology to connect higher amounts of polygons on the face to a lower amount of polygons on the body.
Additionally, I tried experimenting with several ways that I could speed up the retopology process further, by using techniques and tools other than using Maya's quad-draw tool. The main one of these I used was putting in as few polygons as possible to define the basic form, such as extruding from the loops around the hip to the knee, and then the knee to the ankle, and so forth. I was then able to use the Insert Edge Loop tool to quickly insert several, evenly-spaced loops around the extrusions I had made. To get the new loops to conform to the shape of the leg underneath, I was able to use the soft selection tool with highpoly selected as the live mesh, to very quickly conform the low-poly to the right shape, since the soft selection selected a larger area at once, and a small update to the selected area, such as slightly scaling it, would snap it immediately to the live mesh underneath.
Once I had a basic, lower-poly version of the cow mesh made, I was then able to add in more edge loops to make the most of the 23,000 tri budget available to me, to smooth out the mesh and ensure that there were plenty of edge loops around areas that would be deforming, but I still made sure to leave a few thousand tris spare to add the haircards later on.
Laying out the basic topology
When retopologising the saddle, I was a lot more conscious of the tri-count available. This is because I had a lot of detail to fit into 7,000 tris, and I also had to consider that the brief says that my meshes should not be overly faceted, and the fact that my saddle meshes should largely conform with the cow topology to avoid issues such as clipping. To retopologise a lot of the saddle, I duplicated sections of the cow lowpoly, scaled it up slightly, and then used the live mesh on the highpoly of the asset I was retopologising. To avoid the above issues as much as possible, I did not initially remove any edge loops from the retopologised props, in case they fit into my budget later on.
However, there were some assets which I had to retopologise mostly from scratch, mainly the reins, stirrups and the saddle itself. For the reins and saddle, I had to more closely consider the topology of the cow itself, since these assets can move alongside the cow. To start retopologising, I started both parts as low-poly as I could, but then added more loops later, as I did with the cow. I also made sure that the loops lined up as much as possible with that of the cow, and in some places, slightly adjusted the loops on the cow to better fit where the saddle was placed. I also wanted to pay attention to the reins, since they would be moving alongside the neck. Although I would likely need to use fewer tris and edge loops on the reins than the neck because of the budget, I still had to ensure that they could deform well when the cow moved its head or body, so I still tried to align the loops of the reins as close to the neck and body topology as closely as I could within budget.
However, there were a few exceptions to this, mainly being the stirrups. Since the stirrups are solid objects, I felt that it was not as important that this topology fits as closely as other assets, for example, the blankets on the cow's back, since they would not be deforming or bending.
Retopologising the reins
Because of the tight budget, I wanted to take advantage of this where I could. I aimed to retopologise the stirrups as low-poly as possible without looking overly faceted since I did not need to worry about deformation. I tried to make sure I could bake as much detail from the sculpt as possible without adding extra topology, and tried to identify other areas which would not deform, so I could get away with lessening the amount of tris used.
The last thing I did to best optimise my saddle meshes' budgets was to make sure I deleted any hidden faces. I did have to consider how much of the mesh would be seen or what could clip through the cow's body when deforming, however, I was able to remove much of the underside of the straps, blankets and saddle since they would not be seen alone and would need to travel a long distance to clip through to the outside of the cow's mesh. Another way I tried to avoid clipping on the low-poly areas was to slightly scale up some tighter-fitting areas, to give the cow mesh more room to move underneath the saddle mesh before it clipped through. However, I still had to be conscious of the topology whilst doing this, as well as how this would affect the bake. If I scaled up the low-poly meshes too much, they would bake very poorly, and clipping could still occur in some areas, especially around the joints, meaning I had to leave some extra edge loops in places to support this. Because of this, I mainly used this method on areas such as the shins, because this smaller section would barely deform, and the saddle mesh in this area avoided any joints or deforming areas.
There was one final tool which I found useful in all of the retopology, which was Maya's sculpt smooth tool. Although Maya's sculpting tools are somewhat primitive, I found this tool very useful for cleaning up and relaxing a lot of the topology at the end of the retopology process. The smooth tool is described as 'averaging vertices', so with the highpoly mesh still live, I used the smooth brush tool to average the vertices of the low-poly, whilst still conforming to the highpoly. This left a very smooth and clean result in very little time, which I think would be effective in aiding smooth and realistic deformation of the meshes and making the retopology look more professional.
Retopologised meshes
Next, I moved on to UV unwraping the meshes. I started with the cow again, since I had a lot more budget to work with. I first started by separating out UV islands for each part of the budget; one texture for the eyes, one for the head, and one for the body, alongside one for alphas/haircards which would come later. I also wanted to find ways that I could optimise the texture space, for example, I felt that I did not need to put both eyes on the eye texture sheet. I could instead only have the texture for one eye on the texture, and make both eyes use the same part of the texture since there would be no 'butterflying' textures, and both eyes would look identical anyway. However, I had to consider this more deeply when it came to the rest of the cow since there could be obviously mirrored textures here, which I would want to avoid.
However, when looking at my reference pictures, I noticed a lot of ways that I could hide this on my finished model, mainly on the body. A lot of my references of Yak had a mane down its back, so I thought that I could use haircards to cover the seam here. As well as this, there would be hair cards along the belly, hiding the mirror even more. This led me to unwrap only half of the cow's body and mirror it onto the other side to give me the best-resolution texture possible since I would barely need to trade off a visible mirror. In a game setting, this would also matter even less, because of the cow's use as a mount, a lot of the back and neck would either be covered by the saddle or obscured by the player model, making any seams even less noticeable, even if I were only able to use a few hair cards to cover it because of budget or time restrictions, etc.
Head UVs
Body UVs
Eye UVs
Saddle & Prop UVs
When it came to unwrapping the saddle, I started to consider each part individually when deciding if I should mirror each part or not. For a lot of assets, I found that there were convenient places to hide seams down the centre, for example, a detail covering the centre point of the reins around the nose, or where the blankets were covered by the saddle, which I found to be the most useful to save a lot of UV space. This would help me to achieve a higher texel density across the props since I would be able to make all of the unique textures larger on my texture sheet. However, one of the main assets I did not mirror was the saddle. This is because it is a very large prop which has no good places to hide a seam, so if this model were to be used in a game as a mount, the seam or mirrored textures could become very noticeable.
When adding in some basic hair cards, I tried to keep them as minimal as possible. This is because I had a low texture budget for alphas. I wanted to make hair cards that I could reuse as much as possible in different areas, allowing each of the textures to take up more space on the texture sheet, therefore being a higher resolution.
The cow split into material IDs
To do this, I split the hair cards up into 5 main parts: eyelashes, whiskers, short fur (to use around the ears, hooves, and mane), long dense fur (for around the belly and legs), and long thin fur (mainly for the tail). I then made 5 places and roughly placed them around the cow to help me visualise what each part would look like on the cow, alongside copies of each of the planes placed flat to the side so that I have an easier surface to work on.
To finalise my UVs, I made sure to move any mirrored or duplicated UVs across to another part of the UV grid, so that they would still use the same textures, but would not be picked up in the bake. In this part, I had to be mindful of which side of an object's UVs would be the original, and which ones would be the mirror. A good example of this would be one of the blanket's on the cow's back, since on one side, part of it is covered by a bag. I needed to make sure that I made the side without the bag the original side to be baked, since if I did it with the bag side being the original, that could leave artefacts from the bag on the wrong side of the blanket, or it could also leave a shadow on the Ambient Occlusion map.
An example of moving the UVs to accurately mirror without baking artefacts
However, closer to the end of the retopology process, I started to run out of budget for the saddle. Because of this, it led me to find ways in which I could still include the smaller details of my concept, still within my budget.
The main way I did this was by creating the smaller details by using alphas. In my concept, I had some small beaded details which sat flat against the yak's body. I feel that these details would be very easy to add on an alpha because their small size and closeness to the body would make it harder to notice t hat these details were baked onto a flat plane. They would also help me to break up some of the larger shapes in my model, helping these areas to feel more detailed than they actually are. To be able to make these, I had to move on to the baking and texturing phase.
Although texturing and baking has become a mostly straightforward process for me, there were some additional things that I needed to consider when texturing the animal.
The main of these things was making sure that there were no visible seams where the different materials connected. The main area where there could be a visible seam was where the head material joined on to the body. I wanted to make sure that the bake for each of these materials was as accurate and clean as possible so that I was able to use baked maps such as the curvature and ambient occlusion to add any additional definition or detail to the materials in a way that would not create any seams.
To start doing this, I baked down the highpoly sculpt onto my low poly mesh, using the 'exploded' method, where the saddle was pulled away from the body of the cow so that details on the cow's back would also be baked down to meet a requirement of the brief; that the saddle would need to be removable. It would also mean that there would be no chance of any artefacts from the saddle being baked on to the cow, or vice-versa. I found that the bake worked very well, as there was no visible seams in any of the areas in which the materials set, which meant I would be able to follow through on my plan of making use of the baked maps to texture the animal.
I mainly did this by using the ambient occlusion and curvature maps to add some extra definition to the fur. Once I added the correct colour and roughness values to the cow, I found that the fur felt flat and the normal information of the fur that I had made in ZBrush was hard to see. To help add more dimension and clarity, I used the curvature map to add some highlights on the highest points of the fur, and used the ambient occlusion map to add shadows between different clumps of fur. I though that this would somewhat imitate real fur, since different areas of the fur would be more in shadow than others due to the fur being layered over itself. However, I had to be careful not to overdo the intensity of these effects, since it could give off a stylised effect. Having strong highlights baked into the textures of the cow could create an effect that wouldn't make sense in some lighting settings, since the areas where I've added highlights to in the textures may need to be in shadow in certain situations. After some time, I was able to find a balance of these effects which added some extra definition to the fur, without looking stylised when the model was put into shadow.
However, since I was trying to create a realistic effect, I wanted to take the detail in the fur further. Painter comes with some built-in fur textures which are much finer than what I had sculpted in ZBrush, and so I aimed to use these to add some fine details of smaller strands of fur. However, I had to consider how I could do this in a way that would not create visible seams. To do this, I planned to create the effect on the head of the cow using tri-planar projection, and copy it to the body which is a method I expected not to create any seams. This is because tri-planar projection projects the texture over the model, instead of over the UV sheet, essentially ignoring any cuts and seams between different UV shells.
I found that this method worked quite well at first, it left no seams between the two different materials like I expected, however, the direction of the fur did not always follow the right direction. To fix this, I decided that it would be the most effective to rotate the tri-planar projection to follow a more realistic direction of fur growth. However, this meant that there would be a seam between the two materials since the projections would no longer line up. To overcome this, I erased the fur on each of the materials around the seam using a large soft brush to create a soft transition between the two, then added some of these fine strands by hand to make it less noticeable that the fine strand details were not present in this area.
Lastly, to make my textures more convincing, I wanted to add some subtle colour variation to the fur to avoid the colours being too perfect. On my references, it could be seen that some of the yaks' naturally had this slight variation, with some areas being slighly less saturated, brown, or blue than others. On an overlay layer on top of my other layers, and added these colours on areas they seemed to appear on my references. I think that this made my textures seem a lot more realistic and natural, despite the subtlety of it. At this stage, I moved on to adding my animal into Unreal Engine, as well as creating hair cards and a plinth
When I started to consider how I could present my model, I decided to gather some references from more experienced artists on ArtStation to try and gain some inspiration and insight on how they approach this. I found the below 4 examples which took different approaches to presentation and that I felt would work well as references for how I could present my own creature:
Righi, M (2024)
Menza, A (2024)
Lelièvre, M (2024)
Kidd, R (2024)
One thing that all of these pieces have in common is that the plinth is always themed around a natural environment that would be fitting for the creature, for example, the crocodile creature is standing on some rocks around some water. Because of this, I decided to gather some references of Tibetan mountains since this is the place the animal would come from and it would also feel like a suitable environment for a mount such as this to be used in a video game.
To start my own presentation models, I started by blocking out the simple shapes. I planned on framing the yak with a small section of rocks following the edge of the bottom of the plinth.
To make the rocks, I started with simple cubes, paying attention to the overall shapes of my references. The main thing I noticed was that the rocks were shapes in almost step-like patterns which blended into each other in places, so I aimed to imitate this. However, I also needed to consider how the animal would be posed around the rocks. I thought that I could achieve a more dynamic pose by placing the animal around or on the rocks, like how the lion is slightly propped up by different levels of rocks as seen in my references above. To achieve this in my own work I made sure to place a larger section of rock at a height that I could easily pose my cow on later on, but would also feel like a natural part of the landscape in case I don't have time to pose the animal before the deadline.
Once I was satisfied with the placements of all of the rocks, I moved on to sculpting the details in ZBrush.
Blockout of the plinth in Maya
When analysing my references of rock faces and other rocky terrain, I noted that the smaller sections of stone seemed to be a part of one, big form, separated into steps that sometimes blend into one another. To imitate this in ZBrush, I first started by sculpting details on each 'step' of the form. Whilst doing so, I also considered how each step could blend into another to help create a single form. I sculpted additional height between my blockout cubes to help them reach a similar height, and when I was satisfied with individual sections of rock, I merged them together, used Dynamesh to make sure that each section could be blended, and smoothed out any harsh lines where needed to create the effect of the stair-like forms blending into one another.
Sculpting smaller forms
Blending smaller forms together
The finished sculpt of the plinth
Once I was satisfied with the forms of the model, I moved on to texturing. I wanted to pay attention to how the forms of the rocks and grass blended into each other, and also to try and achieve convincing weathering on the rocks.
To help blend the grass and rocks, I used masks in combination with aye filters to help me quickly create a rough and natural edge around areas that I wanted to be blended. After creating a mask for where the rocks needed to be, I started to paint in areas where I wanted the rocks and grass to blend on the flat area of the plinth. To avoid needing to manually blend the areas, I also added a slope blur filter above the painting I was doing to automatically blur and blend the two materials using a noise texture whilst I was painting. I found that this was effective in creating the natural blend that I was aiming for since the noise texture I used in the slope blur filter created slightly jagged edges, where some areas blended smoothly with one another whilst leaving some harsher edges in others, which was similar to what I was seeing in my references or similar terrain.
Next, to make convincing edge wear and ageing, I made use of smart masks. On my references, many of the rocks were worn at sharper corners, so I wanted to imitate this. I first found a smart mask in the Substance Painter Library that interacted with the curvature map of the model in a similar way that I wanted, then I refined the mask by changing settings such as the intensity, spread, and the texture used to add some roughness to the edges used on the curvature map. I was then able to make the layer with this mask match the effect that I was seeing on my references of rocks.
Lastly, since I had some of my tri budget left and some empty space on m texture map, I decided to create a few small planes with a grass texture on them to add some extra detail to the plinth. Although I had a separate budget for textures that needed alphas, I decided against creating a new texture sheet and material for this, since I had the space to create it on the existing plinth texture sheet, and it would be more efficient in the engine as it would reduce the number of draw calls that needed to be rendered. I used what I had learned from my backyard project to create the blades of grass in ZBrush, then bake them onto a plane in Substance painter and add textures. At this point, I felt that the plinth was ready to import into Unreal Engine to start presenting my animal.
The finished plinth in-engine
Kidd, R (2024) Centaur - Hogwarts Legacy [Online]. Available from:https://www.artstation.com/artwork/BX00P4 (Accessed 10th February 2024)
Lelièvre, M (2024) BulbaSaur Movie Version! [Online]. Available from: https://www.artstation.com/artwork/xD6L6E (Accessed 10th February 2024)
Menza, A (2024) Meet Carlos [Online]. Available from: https://www.artstation.com/artwork/blw46v (Accessed 10th February 2024)
Righi, M (2024) New lion test [Online]. Available from: https://www.artstation.com/artwork/49OogY (Accessed 10th February 2024)
To make the hair cards, I decided to use the suggested method of painting them by hand on planes, positioning them around the animal. Since I would need to make many, large hair cards, I would need to make sure to plan the textures carefully to make sure that I was able to achieve an accurate texel density, whilst still being able to make a variety of hair cards that I would need for different areas of the animal. To do this, I started by creating different planes of roughly the sizes that I'd want, and approximately pacing them near the body of the cow in the correct location, so I could both remember what each plane was for, and so that it would be easier to visualise what they would look like. I then duplicated these planes and placed them to the side of the cow to make them easier to work on if needed.
Once I had textured the rest of the cow in Substance Painter, I used the materials I had used on the fur for the body to create the hair cards so that the colours and textures would be consistent. I duplicated the fur texture from the body, put them in a folder with a black mask, then painted on the black mask to add each strand of hair. Especially on the body, I tried to focus on creating a thick-looking hair card, so that I could not need a lot of layers to create the desired effect, since I was still very concious of my tri budget at this point. Additionally, once I had created the base shape of the hair on the card, I added a black mask and a height value to each of the extra layers that made up the fur on the body. This is because I felt that the hair looked very flat, and doing this would allow me to add thinner strands of hair that would be able to add more dimension through adding some height variation to the material. However, I found that the orignal result I got from this looked very flat and cartoon-ish. I think that I initially aimed to make the hair look too thick and opaque, which gave a very unnatural effect. To ammend this, I went back to the black mask of the folder containing all of the fur materials, and erased some thinner strands to start breaking up the original large clumps of fur. When placing the hiar cards on my cow, I found that it created the best effect when I had lots of layers of hair cards, and I had the tri budget left to do this anyway, so at this point, I was less concerned about making the cards appear as if they are thick clumps of fur.
Before fixing the hair card texture
After fixing the hair card texture
However, when I finished fixing the bosy's hair card texture, I still struggled to create a convincing effect. This is because I had to make the hair cards fit around the saddle in a convincing way. The main issues I experienced here was trying to create thick-looking layers of fur without the haircard clipping through the blanket, and to make the fur conform aroudn the saddle strap without clipping too unnartually, although the fur was more flat than I wanted to in some areas when working around the blankets, I felt that clipping through the saddle strap was unavoidable, especially since I also needed to create a convincing effect without the saddle as well. To try and compromise, tried to manipulate a few of the haricards to warp around the strap, to try and 'blend' the fur in with any other haircards that would need to clip through the strap, under the belly. I was hoping that this would help to create a somewhat natural effect without the saddle, whilst making the clipping seem more 'natural' (E.g. the fur is just wrapping around the strap). However, I struggled to do this in a way that would look completely natural in either, so I spent some time to try and create an effect that would not be too noticeable in either form of the model. Once I was happy with the overall placement of the haircards, I moved on to posing the model. I chose to add the haircards first due to the amount of cards that I would need, and when posing, it would be easier to move the fur en-masse, in a way that would also conform with the way that the body is moving in the pose.
Posing the Yak was a fairly simple and easy process. At this stage in the project, I had started to consider the time I had before the deadline, along with balancing finishing the Yak alongside the gorup project. Because of this, I made the desicion to not fully rig the Yak as I felt that this would take too long. However, I still wanted to pose the animal to help improve my overall presentation and make it feel a lot more alive. I felt that the static pose felt very stiff and unnatural and took a lot away from the piece overall. To overcome this, I decided to use the suggested method of creating a static pose for the Yak within ZBrush.
This process proved to be a lot faster than rigging the animal properly. To create the pose, I masked off each of the areas i wanted to move individually, focusing on the animal's joints and bone structure, then used the move and rotate tools to move the masked area towards the final pose I wanted to achieve.
Taking inspration from the other artists' work I used to inform my plinth, I wanted to create a more dynamic pose where the animal was interacting with the plinth in a more interesting way to make it feel more 'integrated' with the part of the world shown in the plinth. To do this, I decided to place the animal standing on one of the rocks with its front two legs, on a larger, flat area that I had created in case I wanted to experiment with a pose such as this.
Creating a pose like this would not only make the animal feel more alive, but also help to create a more interesting composition in my final presentation screenshots, as it would help to break up a lot of the horizontal and vertical lines that naturally appear on bovines, such as the straight, horizontal spine joining to the legs which are often seen in a sturdy, straight vertical position. Moving theses lines to diagonals would help to make the composition feel less rigid and more natural.
Despite posing with the above-mentioned method was mostly quick and easy, I still had to make sure that there were no errors or artefacts occuring throughout the mesh. Despite ensureing that I had the correct geometry to be able to support beds such as this, I found that very bent, sharp angles often created artefacts. Because of this, I made sure to always check the joint that I was moving, and make sure that no artefacts (LIke those seen in the image to the left) were occouring. If I did encounter any issues like this, I made use of ZBrush's sculpting tool such as smooth, to relax the geometry and remove the artefacts, and the clay buildup brush to add any extra dimension in areas where the joints had become flat. I made sure to consider the bone structure of the joint wherever I did this to ensure that the anatomy of the Yak remained correct and believeable. I also used this brush to add any additional definition to any muscles that would be in use the most in this pose, such as if they were supporting large amounts of weight, to suggest the muscles contracting and flexing. This would help to reinforce the anatomy, as well as suggest weight and potential strain on the muscles.
Whilst posing the animal, there were several other things that I wanted to keep in mind and consider to help create a natural and convincing pose. These included:
Lastly, I made sure that any relevant parts of the saddle were affected by gravity, including the stirrup and ribbon around the horn. Because of the way I had been poing th model up to this point, features like this had been moved alongside the cow's body, and therefore were no longer following gravity correctly which made the pose feel a bit odd overall. To ensure that I could cleanly adjust the positioning of these props, I was able to hide the cow, which allowed me to mask off and move each of these parts a lot easier. Doing this made the model feel a lot more grounded and realistic overall, and at this point, I felt that the pose was mostly complete. The last thing I neede to do was to make some small adjustments in Maya. This is because in some area, the haircards and props were sometimes clipping through the saddle or body of the cow in unwanted ways, or had become separated/spaced away from the body. Once I had fixed these issues, I imported the model into Unreal Engine to start creating my final presentation.
The finished pose within ZBrush
There were a fe considerations I made whilst trying to present my model. Since some parts of the animal were very dark, and some others were quite light (Such as the white on the muzzle and some parts of the saddle), I wanted to make sure that it was well separated from the background to make sure that it could be read easily and stand out. To do this, I wanted to make sure I made good use of a rim light on a dark background, to add an 'outline' around the dark areas of the mode, whilst also making sure that the lighter areas of the model can stand out against the dark background. I first started by choosing a dark red background colour, to complement the colours on the saddle. Once I had a dark background to work against, I placed in the main and fill lights to give myself a base to work from and to help m e work out where to put the rim light. For the two lights at the front, I aimed to position them in a way that would leave no dark shadows on the animal where possible. The main area struggled to do this was with the ribbons around the eye, since they were two small objects placed close together, I struggled to find an angle that would not cover at least part of the face. To overcome this, I decided to make use of the contrast to help create a focal point by the eyes, Since I had the white area of the eye and the cream fur around the eye socket, it gave me a light area of value that I could place next to the dark shadows to help create an area of high contrast to draw the eye to this area.
Howeverf, I still felt that this area could use a little more contrast, and that they eye looked very dark and lifeless. To amend this, I decided to add a very subtle emissive effect to the eye material to make the eye appear brighter, since it would not be affected by shadows as intensely. However, i had to make sure not to overdo this since it could very easily create an unnatural and unsettling effect. To make sure that the emissive blended well with the rest of the material, I used the eye albedo texture to make the emissive, significantly darkening it with a divide node in Unreal Engine's material editor. I found that this subtle emission was effective in increasing the contrast of the eye, adding more clarity to the textures and making the eyes feel more alive. However, this method may only be suitable for a presentation situation such as this, since in a game world, the eyes would likely have more lights to reflect from, brightening they eyes and adding life to them in a more natural way. It may start to look unnatural in darker lighting conditions too, such as at night, since the eyes would be 'reflecting' light that does not exist, so the fact that the eyes are actually producing light may be a lot more obvious in a game situation.
When I was ready to add the rim light, I first started by finding a brightness that would work well to 'outline' the model without seeming overpowering. Once I did this, I started to experiment with different camera angles to try to establish from what angles the rim light would need to be seen the most. Once I did this, I then focused on placing the rim light in a way that would separate the model from the background, without spreading too far into the forms of the model and muddying any shapes or details.
When analysing other artists' work to try and gain inspiration for my plinth, I also made note that some of them had a gradient in the background, and there were rarely any drop shadows from the subject cast on it. To try to immitate this, I first changed the lighting channel of the background so that lights in a different channel would not interact with it. However, since it was no longer being affected by any of the lights in the scene, this meant that I had to add an emissive colour to the background to ensure that it was not a solid back. I tried to maintain the previous background colour as much as possible when doing this. To create the backdrop, I wanted to make use of something I had learned from the group project, which I had started working on at this point. This was pairing a light with volumetric fog. I created a point light to give off a round shape, and set the colour to something that was dark so that I could still complement the colours of the subject whilst providing contrast. In the volumetric height fog actor, I then enabled volumetric fog which creates a hazy effect around any lights, much like fog would in the real world. I was then able to adjust the intensity of the light nd the fog to adjust the intensity of the colour and how far the light was diffused. Placing this behind the cow and changing the lighting channel to one used by neighter the cow or background allowed me to have this light in the scene without having to consider how this owuld affect the overall lighting in the scene.
When coming into the group project, I wanted to make sure that I had no pre-existing ideas for it, to leave much more room for brainstorming within my group, and to make sure that I didn't get too 'attached' to an idea when I couldn't be sure that I would be able to make it in this project. When generating the ideas for the groups, we started by discussing the themes that we would all be interested in. We quickly decided that we wanted to follow the theme of 'Utopia', and so began discussing further what styles or more detailed theme we wanted to follow. A member of our group suggested a solar-punk theme, which was also a popular idea among the group since it fell slightly into a sci-fi theme, which we were all interested to explore since we thought it would be an achievable challenge for us, since most of us had not explored making sci-fi assets before.
Although we quickly and easily decided on a theme we wanted to follow, we soon realised that different people in our group had an interest in different art styles. We found that about half of us wanted to use a realistic art style, whilst the other half wanted to do stylised. Although we were able to quickly agree to use a semi-realistic art style as a compromise for everyone, we were initially struggling to find an art style that we would be able to imitate, to make sure that the style was consistent through everyone's work. There were a few suggestions, such as Overwatch, but we felt that styles such as this were too stylised considering some of the group, including myself, were more interested and comfortable with a realistic art style. However, after some feedback and suggestions from the tutors, we eventually decided that The Outer Worlds was a good option for us to follow since it had a level of stylisation that we all agreed on. To make sure that we all stayed on track in terms of art style, we collated a mood board of screenshots from The Outer Worlds showing different materials, characters and objects so that we can refer to them when creating our own assets to make sure that the art styles throughout our scenes match.
A screenshot demonstrating the style of The Outer Worlds (McWhertor, 2019)
As well as this, we had to decide on the specifics of the ideas behind the project. Since we were following a solar punk theme, crating a project heavily focused on plants was a quick decision since the natural world is a main component of a solar punk style. Because of our chosen sci-fi approach, we eventually decided to create different rooms and characters in a research station focused around plants. To develop a narrative for our characters and environment, we decided to use the fact that plants produce oxygen. We brainstormed an idea that the research station is either based on another planet, or on Earth with a destroyed atmosphere with extremely low oxygen levels, and therefore need to live within the research station and research and care for the plants to produce oxygen and try and restore a breathable atmosphere outside.
Once we had a setting and narrative, we decided on rooms and characters to make to fit into this. For the environment team, we decided to make a lab, the office for a head researcher, a cafeteria, and a connecting room/main hall to link the other rooms together in a way that makes sense. I chose/was assigned the cafeteria. Once we had this clearer idea of what we were going to make, we were then able to collate a mood board that we could share to ensure that all of our designs felt similar, and then we moved on to creating concepts for each part of the environment.
Part of the moodboard we created for our scene
McWhertor, M (2019) The difference between The Outer Worlds and Outer Wilds [Online] Available from: https://www.polygon.com/2019/10/25/20932030/outer-worlds-vs-outer-wilds-games [Accessed 9th March 2024]
To start developing my part of the project, I first started by creating a block out in Maya. Since we weren't entirely sure of the layout of the entire level at this point, I wanted to make sure that my room would be easy to fit in amongst the others if needed. This led me to plan a room mostly based on a rectangle since the straight edges and 90-degree corners would likely be easier to fit in than other, more complex shapes. However, I did not want to make the room based completely on a simple shape like this since I felt that it could lead to the room feeling boring in terms of its layout. Additionally, in a lot of the references of Solarpunk buildings that we found, many of them have curved elements to them. Because of this, I added a large, smoothed chamfer to one of the corners to create some interest in the shape of the room. As well as this, I added a similar bevel along the ceiling. Whilst I was making these considerations, I was also considering the lighting in the scene and how I could make the room feel 'More Solarpunk'. One of the main things I noted was that a lot of the scenes were very bright, so I also planned for the curved edge of the room to be a very large window, with lots of bright sunlight streaming in.
Once I had the shape of the room, I started to fill it with blockouts of props and furniture. Because of the room being a canteen, it would likely be very repetitive due to the need for many tables and chairs. This led me to want to add an interesting centrepiece to the room to ensure that the room still felt interesting, despite its repetitive nature. To try and come up with something interesting, I first tried to find something normal that could be found in a cafeteria, then combine it with some interesting references on our Pinterest board. I came to settle on the idea of a salad bar, much like the self-serve ones that can sometimes be found in restaurants. I then decided to combine this with an interesting shelf design we found on Pinterest (Seen on the moodboard above), which was circular and also featured a tree. I felt that this would fit well because as a group, we decided to use a shape language including circles, curves and squares with bevels to remain consistent between different rooms. The tree would also fit well into the solar punk theme. Using this shape language and themes, I also created concept art for several other assets in my scene.
The main page of concept sketches I made to develop my ideas & present to my group
Although I now had one of my hero assets and centrepiece planned out (The salad bar), I still had to think of two more to fit into the brief. To try and work out what these assets should be, I looked at what props I had already included in my blockout. The most interesting of these assets was a vending machine. Since this is a larger and more interesting asset than something like a table, I thought it would be very fitting for a hero asset, since it also presented an opportunity to add lots of detail and interesting parts, due to its size and the details of the prop.
However, I also wanted to consider the time that I had for this project, as well as not using an unreasonable amonut of tris and texture space. A vending machine commonly seen in the rest has the inner mechanisms visible (Such as springs or items holding the inventory in place), which would significantly increase the amount of tris and texture space I would need to use. To overcome this, I thought that creating a design based on a Japanese-style vending machine may be a better choice. The vending machines commonly seen in Japan have a slightly different format; instead of displaying the entire inventory and inner mechanisms of the machine behind the glass, the machines instead shows one of each piece of inventory at the front of the machine on a shelf with lights indicating the availability of each product, with the rest of the stock and inner mechanisms hidden behind it.
I think that this would be a lot more economical in terms of the amount of time, texture space and tris this model will need. This will give me more time to create smaller details that will make the model more convincing, such as creating cans and bottles to display inside the machines. When creating my own design for this hero asset, I will make sure to include thse considerations to be able to be economical, whilst also creating a high-quality hero prop.
A Japanese-style vending machine (Stamp, 2019)
The original coffee machine that I found that I wanted to base my design on (BEIPI, N.D.)
My modified version of the coffee machine
One last thing made in the concepting stage was a logo for the company that this building belonged to, as seen in the top right corner of the original sheet of concept sketches. We decided to include a logo since this would help to give the company an identity, adding further world-building and visual storytelling to all of our scenes. Once we had decided on a name for the company (The Elysium Collective Organisation / E.C.O.), I created a few concepts for a logo that we could all use
To try and optimise everyone's workflow when using the logo, I made several different versions of the logo and icon. These included the main colour version, some variants for use on different background colours, masks that could be used in Substance Painter, and height maps, which could all be useful in different situations. Creating these variants was quite quick, so this seemed effective when considering the fact that we agreed as a group that the company would probably brand itself and its equipment very frequently. Once all of the versions of the logo were done, I shared them with my teammates so that they were ready for them to use as they needed them.
Main coloured version of the full logo
Mask version of the main logo
Main colour version of the logo's icon
Mask version of the icon
BIEPI (N.D.) UPTOWN (Online) Available from: https://www.biepi.net/en/espresso-machines/en-uptown [Accessed 22nd February 2024]
Stamp, E (2019). Japan’s Vending Machine Designs Are Like No Other Country’s (Online) Available from: https://www.architecturaldigest.com/gallery/japan-vending-machine-designs-like-no-other-countrys [Accessed 17th March 2024]
After my backyard project, I felt confident in my workflow and processes for modelling lots of assets for a scene, so this process was mostly effecient and without issue. However, where were some challenges outside of my workflow that I had to overcome.
The main issue was my access to the Unreal Engine file. Since it was a shared file, it had been set up in a way where all team members could work on it simultaneously without creating multiple versions of the file. However, this meant that it was stored on one of my teammate's OneDrive accounts, which I was not able to access from my home computer. Because of the Easter holiday, this meant that I had planned to work on in-engine tools and effects first (Such as blueprints, more complex materials, particle effects, and so on), so that I did not need to rush to get them completed after the Easter holiday. This left me with 3 weeks over the Easter holiday with no access to the Unreal file, so this is when I planned on completing the majority of my modelling, since I could mostly do this without needing access to the Unreal file, and I could still access all of the other software I needed from my home computer. I was able to get some of my modelling done before the holiday started, so I decided to use the time I had to create secondary, more refined versions of my most important final assets to ensure that the scale was correct and to help me determine the level of details needed, both within the assets themselves and the details needed to decorate the scene as a whole.
Another issue that I had to overcome was making some assets tile, mainly the benches and the tables to go along with them. This is because in my blockout, I had not payed enough attention to the sizing of each of the benches that I placed in the scene, leaving me with the same type of bench, but in 3 or 4 different lengths. To overcome this issue caused by the lack of planning here, I decided to make a small segment of the bench that would tile with itself, and instance it within the engine, to allow me to create the different lengths of the benches needed, without needing to create several different versions of the models and/or textures in Maya. This would also be a more effecient method as I would be able to instance each section fo teh seat within Unreal Engine. Although this was not intentional in my concepting phase, I was able to make the models tile by adding intentional seams or breaks within the models. The 'legs' and the backrest of the chairs were divided into several smaller wooden planks placed irectly next to each other, which would mean that I would not have to worry about tiling the textures from one side of the model to the other, and the same thing was true for the cushioned area of the seat. The cusions were also divided in a similar was to the wood planks, with deep crevices between them. By aligning the edges of the cusions to the edge of the segment of the seat, I was able to create a model that looked correct by itself (So I did not have to create a separate, unique piece to put on the end of the benches), but also tiled with itself in a very natural way, leaving no seams and hiding where the model was duplicated when placed next to itself.
Another challenge I had to overcome whilst modelling was creating a modular counter kit, since there were several unique details that I wanted to include within the serving counters of the canteen. First, I had to consider each unique part of the counter that I may need, so that I don't waste time by making pieces that don't get used in the final product. I also considered how I could make unique-looking cabinets whilst modelling the fewest pieces possible. To do this, I decided to make two versions of a counter with shelves in it, as well as some cabinet doors that I could replace the shelves with, or close completely, since having a lot of shelves in my scene would suggest that the storage spaec would be needed in my scene, therefore meaning that I would need to model additional assets that could go on these shelves. Having closed cabinets would suggest that items are being stored here, without needing to actually ut anything inside of them since the doors will never be opened.
Once I knew what variations of the conuters that I wanted, I started modelling, consider how I would be able to make them tile seamlessly with each other. Since I had counters with 'holes' in the surface (Such as a sink or a counter with dips to place trays with the food being served), I first only modelled a flat countertop surface which was 1 meter wide, meaning that I would be able to easily tile materials over the top (Since the counter top fit over half of my 2048x2048/2M texture perfectly, I could tile my materials twice across the texture in Painter to make the material fit once perfectly over the countertop, meaning it will tile when placed end-to-end). Since I would also need to sve texture space elsewhere, I looked for any opportunity to use a trim-sheet type approach to make the materials for the counters. I found that I was able to create just one or two materials for the trims of the counters, the wood panelling at the front, the shelving, as well as reuse the material on the back side of the counter on the cabinet doors. Despite having these large assets, I was able to fit all of the 7 variations of the counters into one 2048x2048 material.
When I started texturing the assets for my scene, I wanted to try and find ways in which I could optimise my workflow since I trim sheet did not seem entirely practical for many of the assets in the scene, especially some smaller ones since their shapes or construction would not create a good-looking result when combined with a trim sheet. The 'flow' of the texture would likely seem odd or there would be a lot of visible seams left over if I used this approach for many of my assets. Because of this, I instead aimed to make my own smart materials in Substance Painter that I could simply apply to each asset with minimal (or no) further modifications or extra texturing needed. This would also help me to achieve a consistent stylised look since the details within each material would be exactly the same between assets.
To make my smart materials, I first made sure I had some assets on which I could make the materials, so that I could better visualise how the materials looked, and to also save a bit of time since I would be able to create the smart materials and texture some assets simultaneously. To start making the materials, I first took the wooden floor texture that I made in Substance Designer and adapted it to leave me with a flat wooden texture, so that the colours alongside any roughness and normal values, were consistent through all of the meshes, helping me to create a more consistent style. I adapted my Designer material by removing the grout and tile effects in a separate document. Additionally, I made another version of the flat wood with a lighter colour, since we had decided as a team to have two separate colours of wood. I then exported these wood textures to Painter.
The original floor tile material that I had made
The adapted versions with the tiling and grout removed in Substance Designer
To create the smart materials, I made sure to put the materials in a folder so that I could turn a group of layers into a smart material later on. Any settings that I had applied within these folders would also get carried across to the smart materials. To make sure that these textures reacted appropriately to all of the assets I applied them to, I first started by making my base wood texture project as Tri-Planar. This means that any seams between UV islands will be ignored since the texture will be projected over the mesh rather than the texture sheet. This will also give me the most accurate control over the direction that the wood grain travels over the model (In most cases). I then started using smart masks to add further details to the textures that would react to the forms of the models I used them on. These details mainly included dust in crevices and edge wear, and smart masks are materials that generate textures based on different maps of the model, such as the curvature, world space normals, or ambient occlusion. To do this, I first added a fill layer creating the texture of the dust or wear that I was aiming for, then I began going through the smart masks available to apply to each texture. I wanted to make sure that these effects were noticeable to add additional interest to the models, however, because of the clean and well-maintained nature of the environment, I had to change several settings in each of the smart masks to make them respond in a way that achieved this impression. Some of these changes include how much it reacts to the curvature or ambient occlusion map of the model, or the noise texture used to generate rough edges on the edge wear. Once I was happy with the material, I then used the folder to turn it into a smart material in my library so it was available for me to drag and drop on any asset I may need to use it on, and the smart masks will automatically update to use the curvature/AO/etc. of the model that they are placed on, rearranging the placement of the dust and wear.
I also wanted to use some of Maya's additional features to help improve the speed of my workflow during this project, primarily Maya's ability to run different kinds of simulations. In this case, the main simulation I wanted to use was the RigidBody simulation. This is a tool that I have used previously that I think would be very useful for a few assets in my scene. The main example of this was adding small packets of butter to a bowl that I had already made for the project. Placing the packets in by hand would take a long time since they are modelled and textured in a way that would make any clipping very noticeable, and the wall of the bowl is quite thin, so I could have spent a lot of time trying to adjust each packet to ensure that there was no visible clipping, as well as making sure none of the packets were clipping through to the outside of the bowl.
However, simulations would help to solve this issue. Applying a RigidBody simulation would mean that each object would receive its own 'hit box' that would interact with any other RigidBodies and prevent any clipping. It would also allow for very natural placements of each packet, since the packets would be affected by gravity, making them settle in a position which is supported and balanced by the other RigidBodies around it. It would also imitate the fact that the bowl would have been refilled by a person, probably also dropping the packets into the bowl, further adding to a natural feeling.
To make the simulation, I first duplicated the butter packet until I reached a number of packets that I estimated would fit into the bowl. I then added a RigidBody component to each of the packets, as well as the bowl. I then added a gravity component to only the packets, so that they would fall into the bowl without the bowl being affected by gravity as well. I was then able to run the simulation and chose a frame where I thought the placement of the packets looked good. I was then able to disconnect the RigidBody node with the frame selected, removing the simulation and freezing the packets in place. Finally, I was able to combine the meshes of the packets to the bowl and export it as a static mesh for Unreal Engine.
Setting up & running the simulation to drop the packets into the bowl
23/03/24, 21:32
Blueprints have been a feature that I have wanted to learn for a while because of their ability to create interactivity and interesting effects within Unreal Engine, as well as create tools which can significantly improve the speed of a workflow. The improvements to workflow speed are the main thing I am interested in for this project, as I have seen multiple opportunities where I can use simple blueprints to improve my workflow by making it partially procedural. Although I am familiar with regular programming, blueprints are comlpetely new to me, so I wanted to gain a better understanding of how this new approach to programming works, and what nodes are available for me to use.
I wanted to start with a blueprint that I thought would be rather simple. I watned to make the ceiling fan spin, however, I fond that when I tried animating this object like I have in the past with the sequencer, I found that this did not work when running the 'game' in Unreal Engine, and only worked when trying to render a video with the movie render queue. This led me to find a tutorial online which explained how to do this in a way which worked within the game view (Tutorial via. Varney, 2022.).
The blueprint that made the ceiling fan spin
From this tutorial, I found that there were two different parts to blueprints, the Event Graph, and the Construction Script. The event graph seemed to be a section that worked over time (E.g. working off different events within a game), therefore the graph I needed to make the fan spin. On the other hand, the construction script seemed to be a part of a blueprint which can set up and create more static things that do not rely on events or time.
To make the fan spin, all that was needed was a single blueprint node, 'Add Actor Local Rotation'. Still following along with the tutorial, I plugged this into the Event Tick node. This meant that the rotation node was triggered every tick inside the game engine (Therefore the 'Event' in the event graph), making the fan spin constantly. I then added a value which made the fan spin at the speed I wanted, which completed this blueprint.
Feeling confident with how this part of blueprints worked, I moved on to trying to follow a tutorial that was more complex. This was a tutorial that would create a tool more me to quickly create my scene, a spline mesh. This is a tool that I am familiar with, but have never made myself before, and would be made in the construction script since the meshed I used with the spline mesh would not change over time or require any interaction with events. This blueprint would create a spline in the world, and place meshes along it until it reached the length of the spline. I again followed a tutorial (Unreal Engine, 2021) to create this blueprint. I think that this was good for familiarising myself with blueprints, and I think my previous knowledge of coding helped me with understanding the process. The blueprint works by first working out the length of each mesh on one axis, as well as the length of the spline. The length of the spline is then divided by the length of the mesh being used, and rounds the number down to give the number of meshes needed to fll the spline without surpassing the length of the spline. This number is then plugged into a node which uses a loop to place an instance of the mesh, for the number of times that the mesh will fit into the spline that was just calculated. This loop is then made into a transfomration value, placing the meshes with the correct spacing along the spline.
The blueprint to make the spline mesh tool
The spline mesh tool in-engine
This blueprint was very effective in improving the speed of my workflow. I initially made the blueprint to add some pipes to the walls since I felt that doing so by hand would be very tedious and time-consuming. Just using the spline mesh for this purpose seemed to save a lot of time, however, I also found alternate uses for it, mainly when it came to the seating.
The blueprint allows me to change out the mesh being placed along the spline very quickly since it is set as a variable, and then the size of the mesh and the number of times it needs to be placed along the spline is automatically recalculated.
When I was planning the seating areas, I focused on creating seating that seemed to fill the space in a natural way, and did not consider how I would actually make this seating, since I had the same style of bench/table which were all different lengths. Whilst making my spline mesh, I realised that I could also use it for these larger assets, since the designs I had made for the tables and chairs could be made as a tileable mesh. This would reduce the amount of meshes that I would need to make, and massively reduce the amount of texture space I would need. To be able to make these benches and tables easily adapt to the lengths I need, I made them in 50CM chunks, leaving deep crevices on the edges to hide any seams where the meshes tile.
When making the meshes, I had to consider how I would be able to make them tile in a way that would not leave seams or be too noticeable. This was especially true for the pipe mesh. This is because I wanted to add a curved piece at each end of the pipes to connect them back into the wall. However, the pipes had wider sections around the main sections to break up the silhouette and clearly communicate that it was a pipe. This caused a problem because the spacing of the main and wider sections would become uneven if I were to add a wider section at the end of each section of pipe. To overcome this, I split the main section in half, and placed the wide scetion in the middle of the mesh instead. Because of the material I wanted to apply, a seam in the middle of the thinner sections would not be an issue. This allowed me to place the straight and curved pipes next to each other, whilst maintaining an even spacing between the wider sections.
Overall, I think that this was very useful in introducing me to blueprints, however, I think that I will need to explore them further, to become more familiar with what nodes are available for me to use, and so it can give me better insight on what tools are possible to make using blueprints within Unreal. They are definitely a tool that I would want to use in future, because of how much time just one blueprint has saved, and I think that I would be able to create some interesting effects using the event graph in combination with the construction script. I will aim to explore online tutorials or courses to become more familiar with the available nodes, and to discover other tools that I could make to help increase my workflow's speed further.
Varney, P (2022) How To Add Movement To Your Environments in Unreal Engine 5 [Online]. Available from: https://youtu.be/pkkktQi2mio?si=2SkCTQy_MY9BydJU [Accessed 27th February 2024]
Unreal Engine (2021) Populating Meshes Along a Spline | Tips & Tricks | Unreal Engine [Online] Available from: https://www.youtube.com/watch?v=OdjvlvGRYRE&t=160s [Accessed 7th March 2024]
FOr several of the assets in the scene, there were several consifetations that I needed to make. The main one of these is how I could best optimise my use of textures and materials. I was initially unsure of how I could do this, since I felt that a lot of my assets would require unique textures, as well as the models and textures sometimes needing to tile with each other seamlessly, which in some cases, I felt could be difficult to do with a trim sheet. However, I tried to make my models fit around my trim sheet as best as I could, rather than the other way around, which I felt could take a lot of time and extensive planning, which I felt would not be possible within the time constraints of this project. Using the smart materials previously mentioned, I built a basic trim sheets of the main materials that we decided to use within the team, leaving most of the space for a tiling wall material, that I made in Designer. Since I did not want the walls to be too noisy, I made the material have only a subtle hexagon effect in the roughness, so it only showed up when looking or shining a light on it from certain angles. I then allocated this wall material to half of my trim sheet material, which would equate to being a meter wide in my scene, which also made it easy for me to make a tilable wall model.
Once I had my trim sheet, I cosidered if and how I would be able to texture some of my assets with a trim sheet, so that I would need less textures and materials within my final scene. The main example of this was a cake stand that I made to be placed at the front of the cafeteria, on the serving counter. I initially planned the shelves to be large, solid pieces of wood, however, I felt tha tthe rest of the model could qutie easily be textured with the trim sheet, but these shelves were too large to fit onto the wood texture on the trim sheet, and it would be very difficult to hide any seams in the textures. TO overcome this, I instead made the shelves out of many smaller planks that I would be able to fit into the trim sheet, with room to move and flip each UV shell over the wood textures to avoid noticeably repetitive textures. I followed this method with any other objects that I could, which saved me a lot of texture space, meaning that I was able to avoid adding several more materials into my scene. This would help to optimise my scene to make sure that it would fit into the minimum FPS requirement of 30, set in the brief.
Other than this, most of my texturing process was very similar to that I have followed in my previous projects, so I encountered very few issues and the process was overall quick and effecient, especially using the smart materials I had created previously. However, some other notable parts of my texturing process included:
When using graphics to add shapes to my models (Such as the recycling symbol on the bin), I added the graphic as a mask where possible, and used the slope blur effect to create slightly jagged edges to the shape to add the effect of a slightly aged and worn carving into the wood
I used Canva to create label decals that I used on the various bottles in the scene to create a more convincing and detailed effect, especially in my vending machine, which is a hero asset for my scene.
I had previously bought the Substance Painter resource 'Decal Aging Tool' by Ehsan Kiani on ArtStation (Referenced below), which I used to make any labels in my scene more convincing and interesting. As the name suggests, this tool helps to create an aged effect on decals, such as adding rips, dirt, glue, and wrinkle effects.
Although it was not something that I was planning to use in this project, we were shown the basics of Substance Sampler during a lecture. I kept this in mind, and later in the project I found it very useful during my texturing workflow, both to save time and to improve the overall quality of my materials.
Since I had left most of the foliage to the later stages of the project, I wanted to make it as efficiently as possible. Since I was still curious about experimenting with photogrammetry, I decided to see if it was a technique that could save me any time during this project, despite the slight stylisation I was aiming for. I decided to test this method with a houseplant that I had, which I thought could fit well in the scene. I took some photos of one of the leaf from several angles, playing close attention to the lighting around it to ensure that it was mostly flat where possible, so that the resulting model would not be affected by this information.
When putting them into Sampler, however, I kept getting an error that was not specified by the program. Because of this, I assumed that my object was either too thin or that the program could not identify what I wanted it to scan. However, when I opened the program, I noticed that as well as creating models, there was an option to turn images into textures. Since I had an image of the leaf directly from above, I inputted this into the texture creation tool, and this gave me a much better result. It was easily able to identify the leaf and also came back with normal and roughness maps which were mostly correct to the real thing. The only issue I encountered with this is that the image was stretched to fit the square texture size, but this would be easy to fix when creating my final textures since I would just need to make sure my image is cropped into a square when I input it into Designer. Since this texture was just to test, I also took the opportunity to experiment with Sampler's other features. I found that there was a layers tool, which included a lot of interesting and useful options. The most useful one of these for the leaf was the stylise layer option, which would help my photogrammetry foliage blend much better into the scene. I had to turn all of the values up to the maximum to give myself an effect which I thought would fit into the scene well, but I thought that it would save me a lot of time compared to sculpting and texturing foliage by hand.
Taking what I had learned from this test, I took several more photos of other plants I could find, which I thought would translate into a texture well. I also decided to experiment with adding some flowers to the texture sheet. In Photoshop, I then imported all of these photographs and arranged them into a
Creating the foliage atlas in Sampler
texture sheet, leaving some room for other foliage that I would make by hand, and paying attention to the real sizes of the leaves and how they would translate on the size of the texture I was using. Whilst in Photoshop, I also used the 'Remove Background' function on each of the images to create an opacity map for my texture, since I noticed that creating one in Sampler was temperamental.
Whilst adjusting my foliage texture in Sampler, another useful layer effect that I noticed was the 'Make it tile' function. This node did exactly this, it edited and morphed the edges of the texture to the opposite edge, helping to create a tiling effect. This gave me another idea of how I could use photogrammetry to improve the textures that I had already created.
The layers used to make the tiling fabric material
At this stage, I was not happy with how the textures for a bench in my scene were looking. I felt that the fabric on the bench looked very bizzare, since it was very flat and did not read as fabric. To try to fix this with photogrammetry, I took a picture of some interesting fabric that I had found, trying to ensure that the fabric was set out flat with no folds, the lighting was flat, and I took the photo from as straight of an angle as possible.
I then took this photo and followed the same process in designer as I did with the tests I did on the leaf of the houseplant, adding a stylisation effect, as well as applying the 'Make it tile' layer that I had found. This was very effective in making a seamless tile, and found that the results I achieved would likely fit in well with the style I was trying to achieve. Once I was happy with the texture that I had made from the photo, I exported it from Sampler as a SBSAR file, a format that could transfer materials between the different Substance programs. I then imported my material into Painter, and I was able to apply my photogrammetry material to the fabric on the chairs. I found that, despite needing some extra work, this made the fabric a lot more interesting and convincing overall, without me needing to spend a lot of time trying to create a similar effect in Painter or Designer. This is definitely a technique that I will keep in mind for my future projects or any other complex materials that I would have access to since despite the slight stylisation of this project, I was able to create a material that fits the scene in very little time.
The photo of the fabric I took compared to the material from Sampler
Before & after adding the photscanned material to the chair
Whilst making the materials for the plants in Sampler, I found another useful tool which I used in mywork. At the same stage in my project, I was trying to make a coffee grinder, where the coffee beans can be senn in the top of the machine. I initially trie to crfeate this effectg by modelling a highpoly mesh of the coffee bean, then I attempted to copy and paste it into the shape needed to fill the grinder. I then planned on baking this down onto a lowpolh mesh, comformed to the overall shape of the highpoly coffee beans. However, this method was proving to be very slow, and Maya was also crashing a lot because of how many polygons the highpoly coffee beans had. However, whilst making my foliage material, I found the 'Scatter Atlas' layer. Out of curiousity, I applied this layer to bette rlearn what else Sampler could do. I found that this layer was able to identify each individual part of the atlas I had made in Sampler, and then randomly scattered them on top of each other to create a layered effect. I then realised that this could be a much more efficient method of creating effects like the coffee beans filling the grinder.
To try and achieve this, I first made an atlas out of the coffee bean highpoly sculpt that I had made. I made multiple copies of the sculpt, rotated each copy to a different angles and set them over a flat plane, which I then baked the highpoly onto in Painter and textured. Once I was happy with the textures I had made, I imported each channel into sampler to set up my material. I then added the 'create atlas' layer to make sure that the material was set up correctly, and then I applied the scatter atlas tool, which created a mostly convincing effect. I also foudn that this tool also made the material scatter wihtout needing to apply the layer effect for this, so I could play around with the different parameters until I was happy without needing to consider how the material will tile.
Preparing the coffee bean model for baking, rotated to imitate seeing the beans from different angles on the bake
Baking the coffee bean onto a flat texture in Painter
Textured coffee bean alphas for the atlas in Sampler
The result after using the 'Scatter Atlas' layer in Sampler
Once I was happy with the material, I then exported it as a SUBSAR file to import back into Painter, then applied it to a low-poly mesh that I would later modify the shape of to create small bumps and surface irregularities that a pile of coffee beans would. This method proved to be much quicker and easier than the original method I had planned, but I would like to experiment with Sampler more in the future to see if there are any other useful functions within the program that I can use that may not necessarily involve scanning real objects or materials. I also believe that this method will be very useful for improving the salad materials seen in the salad bar since I used the same original method to make the salads, and I would like to do this at the end of the project if I have time to do so to add more detail and dimension to my current, somewhat repetitive and flat materials. I also used this method to make a fried rice material.
The material being used in Substance Painter before the shape of the mesh is modified to help create a more convincing shape
The finished model in Unreal Engine
https://www.recycling.com/downloads/recycling-symbol/
https://www.artstation.com/marketplace/p/yBeGV/decal-aging-tool
During this project, it was one of my goals to create more interesting materials, such as adding movement or other effects which are not used for most models. I found a few opportunities to do this within the project. However, I also found a way to expand on my knowledge of materials with all of my materials.
I learnt about master materials and material instances from one of my teammates. These materials function a lot like instanced meshes, improving the scene's performance overall.
This is something that I was interested in trying, so I aimed to make a flexible master material that would be quick and easy to use, alongside the benefits of instancing materials.
I imported 2 very small textures to use as placeholders in my master material without using up too much storage space; a black texture and a flat normal map. I also paired my master material with an export preset that I made in Substance Painter. I set up my master material to use the alpha channel of the albedo map as transparency, and to correctly use each channel from my channel-packed roughness, metal and AO maps that is made automatically from Substance Painter. To make my textures even more efficient, I also set up any emissive maps to be packed into the alpha channel of my channel-packed maps, to work as a mask. This would prevent me from needing extra textures for my emission.
However, since the emission was packed into only one channel, it means that this texture could only be greyscale, which I would usually not want to do. To overcome this, I set up the material to multiply the texture by an intensity variable value that I could access within my instanced material, then overlay a colour which I could also control in each instance of the material. This would allow me to control both how bright the emission was on each material, but also the colour. The only limitation of setting up my material like this is that I would likely not be able to add multiple colours to my emissive map without making a new master material. However, in all of the cases I had planned, I did not need this anyway. If I did end up wanting to add multiple emissive colours on more than one material, I planned to set up a new master material with a new slot to add an RGB emissive texture instead.
The version of my master material that supports transparency
In addition to this, I also created a material that did not use transparency, to ensure that Unreal engine was not trying to process this information in the background of materials that did not need them. As the project progressed, I ended up having to create a few additional master materials too, for example, to support an RGB emission texture rather than overlaying a single colour on a black-and-white mask.
Waterfall Material
Hologram Material
I also wanted to practice moving materials more. I did this with a water material and a hologram material. I made them both in a similar way. I first created a channel-packed texture map that contains 3 different noise textures, specific to each of the materials I wanted to make. For the hologram material, I included stripes of two different thicknesses, as well as a cloudy material to add a cloudy effect to the transparency of the holograms. For the waterfall I made a noise mask that would affect the placement of the colour, another for the transparency, and a third that would affect the world position offset to distort the geometry of the waterfall mesh I use. For both of the materials, I then used the 'panner' node to scroll these channels at different speeds, and in some cases, different directions to avoid an obvious repetitive look.
For the waterfall material, I then combined the noise material for the world position offset, to interact with a Fresnel node to create a refraction effect that had an amplified effect on the refraction, since I felt that the refraction changing with the world position offset effect was quite weak otherwise. I think that including this made the water look a lot more interesting and convincing this way.
For the hologram material, I did a similar thing with the world position offset, to make the edges of the hologram vibrate and warp slightly. I also referenced my master material to combine a mask texture with an overlay colour, so that I could include textures in my holograms (Such as menus, posters, etc.), that were also slightly influenced by a blue hue or had this colour as a background.
Although these materials are quite simple, I think that they improved my understanding and confidence in materials. Creating these materials was not too difficult for me now, which has made me want to explore more complex material creation techniques. I may look into other people's materials that create similar effects to the ones in these materials to expand upon my own knowledge of to improve the effects in these materials, or I may look into other more complex materials that people have made in Unreal engine to try to deconstruct, or 'reverse-engineer' them to improve my own understanding of materials and what else i am able to do within the Unreal Engine material editor.
As well as this, I used a few other techniques that I learned in my past projects. Once of these was vertex painting, mainly to add patches of dirt on the floor, or use the grass wind node alongside area of effect masks to add a slight sway to the leaves on the central tree, blowing in the breeze created by the spinning ceiling fan.
Vertex painting material to add stained areas onto the floor
The material I made to slightly sway the tree's branches in the breeze
Hologram material that supports colour maps
Nearing the end of the project, I modified the greyscale hologram materials to support channel-packed textures (by allowing control of the intensity of R, G, and B channels) so I did not need multiple textures for the greyscale holograms. The material also uses the mask more as a mask rather than a colour map, allowing for more influence and blending with the base blue colour.
Scrolling lines added to screens/emission channels
Standard water material
Since my environment would likely be a busy place, I needed to make sure that I set-dressed the environment so that it felt lived in and used to help the space feel convincing. Because of this, I had to make lots of small assets that I could instance around the scene to help it feel like people regularly use the space, as well as to help build visual storytelling. When adding this set dressing, I considered that this would be a room that would be full of background characters using the space, so I decorated the space as if it were in the middle of being used (e.g. there would be people actively using the appliances, and there would be NPCs sitting at the seating where plates have been put).
The scene without many set dressing assets (As well as broken textures, lighting, etc.)
Whilst creating the set dressing assets, I needed to consider what this room would be intended for, as well as what other additional things people may choose to do in this space. Since this space is a canteen, an obvious first choice for set dressing assets included items such as cutlery, condiments, and food, and would fit the intended use of the scene. Initially, these assets were the only things that I planned on adding to the tables since I was concerned that having a lot of small details like this would make the scene feel too noisy. However, I found that I had the opposite problem. It felt empty in places, and it still didn't feel very 'lived in'. Because of this, I started to consider other things that people would use this room for alongside its main purpose. Since I felt that this room did not especially imply that it is a part of a larger workplace, I thought that a fitting set of assets to add would be work-related objects; including laptops*, stacks of papers/letters/documents, notebooks, work bags, and so on. This would not only help to add variety to my assets and help fill space, but also make the space feel more alive and used in a more authentic way. Additionally, it will help to show that this environment is a part of a larger workplace if a player were to not see my teammate's parts of the environment.
Set dressing with condiments only
*Laptop textures were made by creating a material in Sampler from a photo of my laptop keyboard, as well as screenshots of Google Docs/ Google Sheets for the screens
After adding work-related assets to the set dressing
I also faced the issues of having a lot of unnatural-feeling floorspace or empty walls which I needed to find a way to fill. I aimed to do this in a way that would add further life to the environment. Ways that I aimed to do this included:
Adding a spilled liquid on the floor with a wet floor sign (including a hologram being projection out of the top to add some additional height) and a mop to reduce the size of an empty area in the middle of the floor
Adding TVs on the walls to fill space, provide 'entertainment' for the people using the cafeteria, and to reduce the noise of the frequent vertical lines in the walls
Adding an advertisement above the vending machines, for the same purpose as the TVs
Painting over screenshots of my teammate's character sculpts to add protraits of them on the walls
Another way that I would be able to make the environment feel more lived in is to add more variety to the materials and to make the environment slightly dirty. However, I had to be careful when doing this as I would need to achieve a balance of having noticeable dirt and wear and tear, but not too much since the cafeteria would generally be a very well-cleaned and well-maintained place. As well as vertex painting dirt onto the floor as mentioned in a previous blog post, I mainly did this through decals. I made several decals that I could scatter in a repetitive way around the scene to help break up some repetitive areas, as well as to stop the environment from feeling overly clean or 'sterile'. These decals include:
A coffee stain to put on the tables
Several variations of a stain which I could blend in with several materials in the scene. These would be the most useful in adding 'dirt' since they would be the hardest messes to clean, and therefore the 'dirt' which is most likely to be present in a situation such as this
Small and large dust with a sharp edge. For placing around the rim of the ceilings, in corners, and other places where it is easy for dust to gather and may not be cleaned as often as the work surfaces or tables, for example
Printed text for the wall, discussed further below
As well as adding some dirt and wear and tear to the scene, I also used decals to add more variety to the existing assets without needing to do much additional texturing. I mainly did this for the plates/cutlery and notebooks within the scene. I created variations of dirt on a plate to be able to add a convincing area for people to leave their dirty plates, or to make the repetition of assets less noticeable in the seating area where I had many plates or bowls sat next to each other. Being able to make some of the plates dirty with decals quickly broke up the repetition and added a detail to make the scene feel more alive. I used a similar decal for the notebook, except with written notes and doodles that I could apply over the pages, to add variety much like the plates, allowing me to have notebooks with either work-related content, doodles, have a blank page, or be completely blank.
Stained fabric decal
Dirty plate decals
All decals
At the start of the project, our team decided on a rough story surrounding the environment and characters, which I wanted to make sure that I portrayed through my environment. The story revolved around the earth running out of oxygen, so people were forced to live inside, and the environment we are making is a facility that is conducting research to try and fix the lack of oxygen outside. This led me to add several set dressing assets that implied this, and other smaller details on some other models that help to imply the lack of oxygen outside or how the people in this facility would likely be concerned with monitoring the oxygen inside carefully.
The most obvious asset showing this storyline is the news board hologram, which directly states a low percentage of oxygen outside and how this is the highest level recorded in several years. This would not only help to briefly explain the world of this facility but also imply the age of this problem and that the facility is potentially making a positive impact on the situation.
I also included a few 'nods' to a wider world outside of the facility, such as stating a colony on the moon and there are other sections to the facility that we have not modelled as a group, such as a section implied to keep animals. This would help the world to feel larger and give the player a sense of there being more going on in the world other than what they are doing. Slightly building up a wider world like this would help our environment to feel more authentic, and have a specific place within the world.
It was also suggested within our group that this facility would likely be incredibly large, since not only does it need to serve its function as a research centre, but must also be self-sufficient for the people to survive inside. This would include farming food and other essential resources, providing a range of services to staff, as well as housing the very large number of people that would be needed to ensure that all these processes can run. To do this, I added a few signals within the scene that the facility is very large. The first of which was a direction sign to my teammate's rooms, but also suggesting that the facility is divided into numbered/lettered units. On the sign, I added a detail pointing to the other units, from A - C2. This would help imply that there are 29 units within the facility including the one the cafeteria is in, suggesting that not only the size of the facility, but also that it has expanded over time due to running out of letters and having to start again at A2, B2, and so on.
Another way that I suggested the size in another way was to include a sci-fi style print on the wall, providing a room number, room name, as well as other information almost like an address, 'West wing, cafeteria 11'. The main tool I tried to use here to suggest scale is 'cafeteria 11'. The number of other cafeterias suggested here implies further the scale of the facility and how many people must work here, since at least this many cafeterias were needed to feed everyone.
News board hologram asset
Details suggesting the story (Oxygen farm and wall-mounted oxygen-monitoring screen asset)
Details suggesting the size of the facility/company
FPS on university computers: 40 (Stable)