For my final MA project I chose a science fiction theme. I chose a not-too-distant future on Mars for the setting. The atmosphere and landscape is tough and barren with frequent sandstorms. All modelling, texturing, lighting, VFX and animation was done by moi.
I used Unreal’s landscape tool to create a vista of the Mars surface, using topographical data from https://astrogeology.usgs.gov. This data came in the form of large height maps which required cropping to a manageable size. Some adjustment of the height map was necessary to achieve the desired result, specifcally adjusting the levels to give greater contrast, and applying some light blue to smooth out some artefacts in the image.
For some of the VFX elements such as the mining drill steam I used a particle emitter with a flipbook texture to create variation. I used my homebrew flipbook maker tool which I authored in Python. For details on my flipbook maker tool check out my blog.
For the barrel prop in my scene I used a range of techniques to achieve a result that looks convincing without breaking the bank performance-wise. I wanted it to be of rugged design, with protective bars on the sides and an obvious lid. As an extra detail I wanted it to have a window on the front to show the liquid contents inside. I also wanted to use a range of material type so that the different components stood out against each other.
I modelled the barrel in 3 stages:
- Low poly – to be used in the final scene.
- Medium poly – UV’d exactly the same as the low poly. This mesh is has beveled smooth edges and is used to receive the bake from the high poly mesh
- High poly – includes all details and beveled edges for baking onto the medium poly
This workflow allowed me to create clean bakes without distortion or smearing, thanks to the supporting edges of the medium poly mesh. Full details of this technique can be found on Warren Marhall’s YouTube video on Face Weighted Normals.
For some extra detail on the lid of the barrel I used floating decals. I created a trimsheet of horizontally tiling panels and some fixings such as bolts and vents which I could use for the building structures’ modular walls, so why not reuse them on my props?
I experimented with using multiple materials on the mesh for each of the material types of plastic, metal and rubber however this proved to be expensive on draw calls so instead I baked Base, Normal and ORM textures in Substance Painter using the medium and high poly meshes.
I used a custom HLSL shader to convert the normal map to a curvature map which, with a bit of tinkering, gave some nice looking edge wear which I could adjust in the material instance.
I wanted to add a window to the front and back sides showing the liquid inside, however I didn’t want to use an expensive translucent shader and I also didn’t want to add unnecessary polygons to the mesh for the window frame and hole.
I created a shader using the BumpOffset node to create the illusion of depth, and added a bubbly water texture. As the player moves past the barrel, the paralax effect gives the impression that the bubbles are deep inside the barrel.
For extra va va voom I added a panner to the bubbles texture so make the bubbles rise to the surface, and added some noise distortion to its UVs to make the bubbles wobble from side to side as they rise.
Using a master material meant that it was straightforward to adjust the details and appearance multiple barrels in the scene.
To connect the two floors in the scene I created an elevator system consisting of an elevator car and a sliding door on each level. I modelled the elevator carriage and door in Maya using the same workflow as for the barrel. I spent a lot of time compacting the UV shells into 4 UV spaces, stacking shells where possible to save on texture space.
I wanted to create an industrial, rugged looking elevator car which looked well used and worn. I used hand rail and lighting props from the main scene to decorate the interior.
Once the mesh and shaders were in place I created a blueprint to control the lift system. This included box collisions on each floor to call the lift when the player enters them, and a collision box inside the lift to trigger the door close animations and then cause the lift to travel.
I am happy with the outcome of the fnal scene. It closely adheres to the original vision, even though some compromises had to be made due to time constraints. I learned a lot about hard surface modelling and I enjoyed learning about techniques around face weighted normals which contributed a lot to the quality of my in-game assets. However, the learning curve on this area was steep, which is why production of assets took a lot longer than I expected.
For the final sequence I decided to render the scene to PNG frames and combine them using the command line tool FFMPEG. For details on this see this blog post.