This project represents the culmination of my time at De Montfort university. My final major project or FMP, where I can showcase all that I have learnt in one large scale final piece. To that end I aim to make something here that will push me both creatively as well as technically.
For some time now, I have been a little obsessed about Star Citizen, from a creative standpoint. I admire that the team behind the game has pushed the boundaries of what is possible, making environments and assets to a level of fidelity previously unimaginable. I was particularly impressed with their “Eye to Planet” technical demonstration. I had been itching for an opportunity to make something aligned to this and this seems like an ideal time to realise this ambition with my own explorable interactive spaceship, with both an interior and exterior in the Unreal Engine.
One of my initial steps with this idea, was to login to Star Citizen, take the time to walk around the universe and immerse myself whilst getting a sense of the scale of everything. I quickly came across a large multi-crew ship and I knew almost immediately that I wanted to create something similar; it mirrored my own ideas almost perfectly. Whilst exploring this ship I was struck with how even the most basic of things had been considered, like where the crew showered or ate their meals, something all too often absent within other games.
On my travels in Star Citizen I noticed that all the assets where very high poly and had extremely high texel densities, this made everything look crisp and beautiful. I had some idea how this had been achieved but wanted to know more as I felt a good understanding of the technical process was essential for attempting a project of this scale. I knew from the outset I would not be able to texture something this large using my traditional approach of using substance painter, atleast not for everything.
One of the most useful resources I found during this research was a forum post on Polycount (Polycount, 2015) that explained the process. The community had done their own research and experimentation was useful as it gave me a clear idea of how to approach some of the technical issues presented within this project. The key takeaways from this were: tiling materials; making the geometry in a way to take advantage of custom normals, which equated to essentially chamfering all the edges and making heavy use of decals with normal maps and parallax occlusion to fake geometry. The approach I was aiming to replicate, something that I had come to refer to as the “Star Citizen approach”, had been used in another title- Alien Isolation which was released in 2014. This game was another excellent source of reference material.
PLANNING & PRESENTATION
Part of any successful project is effective planning and, as this will be my largest and most important project to date, its importance cannot be understated. To this end I made a comprehensive breakdown of what I was going to do with my time, outlining each step in the production process.
I decided that the ship I was going to make was going to be large, hence the name, Corvette, to the extent that it would contain a flight deck, mess area, sleeping quarters, bathroom, captains quarters, cargo area and various corridors. My reasoning for including all these elements was that I felt a ship needed to feel like it could support its crew on a long deep space mission and thus would need certain facilities to accommodate human habitation for extended periods, this was also one of the elements of the Star Citizen ships that had impressed me the most. To order my ideas I drew an initial sketch of what I wanted to create. I then had a rethink of what I wished to achieve and matched this to the time available. I decided I was being too ambitious so decided to limit myself to making the external ship and then three internal rooms- a flight deck, mess compartment and crew compartment. I would still have the space of a large ship but the doors to these areas would be locked. This would allow me to really focus on telling a story with these rooms and making them seem detailed rather than stretching my time over more rooms.
Before getting overly ahead of myself with what I wanted to make, I first had to run my ideas past my tutors. I did this in the form of a presentation, where I explained my idea with the aid of a slide show.
Listening to the feedback from my tutors, one of the main elements they wanted to see was a human element, something that made the ship feel lived in and used, as opposed to simply a collection of bland rooms. I agreed with this and changed my plan, to include a final pass once all the major elements had been created to add the “Human Element”. This would include personal effects of the crew, ranging from notes to all manner of object. With this in mind, I am glad I I decided to include the crew compartment in my ship as this would make it easier to add a human element with personal family pictures etc.
The project will make use of level streaming as each part of the ship will be its own small self contained level. The advantages of this approach is that I will be able to edit each level independently of the rest of the larger environment, allowing for quicker load times and responsiveness in the editor as well as the main advantage of allowing each level to be streamed as needed when the player is exploring the environment.
Consistency and professional workflows are extremely important to me and this project will be no different in that regard. As well as working in best practices it also allows me to avoid wasted time and maintain a well organised project.
Owing to the scale of this project, with its multiple rooms, I will prefix two letters before the object, for example, fd (FlightDeck) Name of object and Number of object, so a typical asset will name named fd_pilotschair_01, common elements used throughout the environment that are used across multiple levels will be prefixed ce_ this naming convention allows me to keep track of where objects belong and easily find things in the editor without exhaustive searching
- Flight Deck (FD) – This represents the Cockpit area of the ship with all the flight controls.
- Forward Corridor (FC) – Small corridor connecting the flight deck to the Crew Compartment.
- Crew Compartment (CC) – Communal area with mess table and facilities to make and prepare food, a general living space.
- Crew Quaters (CQ) – Sleeping and wash space, containing beds and a shower/toilet area.
- Main Corridors (MC) – Two large corridors that run the length of the ship, containing airlock docking hatches and storage.
- Enginnering Compartment (EC) – Engineering space containing the engine and other vital machinery.
- Cargo Bay (CB) – Large Cargo bay type area at the very rear of the ship with a ramp to access the outside area.
- Captains Cabin (CB) – Captains personal space, including bed, small washroom/toilet and study.
- Space Port (SP) – Exterior environment, with cityscape, fully modelled ship exterior and ground support equipment.
RESEARCH & REFERENCE
With this project, I am keen to create something from my own imagination, something that is hopefully not derivative or simply a carbon copy of something that might be found in the Star Citizen universe. In order to achieve this, I will collect my primary reference from the real world, mostly from military and commercial aviation.
My first port of call will be the Imperial War Museum at Duxford, a treasure trove of reference material of aircraft, spanning several eras, with both military and commercial examples on display. I had previously visited for another project in the third year, the Hind Helicopter, but was unfortunately unable to locate the hind at the time owning to the sheer scale of the site and the number of objects on exhibition. Additionally, a more local site, the Newark Air Museum to increase the diversity of reference material.
I had taken reference images on my first visit, but I had focused more on helicopters and rotary wing type machines, an unfortunate oversight as collecting a wider range of reference could have saved me another trip. On my second visit, I collected a broader range of reference, as there might be elements that initially don’t seem useful, but might have other applications later, as I’m sure my designs will evolve naturally over time. I was particularly interested in high altitude and extremely fast aircraft, such as the Concord, Blackbird, Tornado and Eurofighter. The later two mainly for their simple grey military fatigue, something I have taken a liking too and the first for their near space operational environment.
My spaceship should be grounded and should look like it could actually exist and work, what I mean by this is that it should draw heavily from the base reference material and look like something from the real world, with easily recognisable components, such as engines, flight control surfaces, landing gear etc.
During the planning phase of this project, I had created a character on Star Citizen and explored their game world, with a mind to looking at how things where put together and to get a feel for if this project was something I really wanted to tackle. At the time I had taken limited screenshots, without a mind towards serious reference gathering and a little hesitation to not get locked into the Star Citizen style, as to avoid becoming derivative. After I had decided that this was what I really wanted to do, I felt that I needed a greater breadth of reference material to work from, so I spent more time in the game world looking at every aspect of the ship construction, from floor plates to wall panels.
Additionally I also searched the internet and collected a vast collection of reference for elements that I felt I needed more information for, such as landing gear and smaller details.
With my now vast reference library of both game screenshots and photographs from the Imperial War Museum, I felt I needed a way to access the information, in a less unwieldy way. Having hundreds of photographs is great, however locating a specific one can be quite challenging, and then going back to that photo quickly can be time consuming as well. The best way to organise all my reference material I felt was to use Pureref, however I was mindful that I didn’t want to create one massive moodboard that would present a similar problem like having too much reference material, so I decided to create multiple moodboards, each one focusing on one of the sub levels of the project.
I created different reference boards using PureRef so I had images for the external elements of the ship as well as the different interior areas of the ship. At my project brief hand in meeting I received advice about making the areas look lived in and so planned some of these elements and added to my reference boards.
Each one of my moodboards was targered at a specific part of the ship, whether it be interior, exterior or propwork. Here is a selection of a few of them:
UNITS, SCALE, GRIDS & SNAPS
Owing to this project making a heavy use of modularity, a key aspect to get right is the grid. This is so objects can easily snap together without leaving any ugly gaps between the meshes allowing light and other unwanted effects to bleed into the environment. Setting this up was straightforward; I simply set the unit grids inside 3DS max to match that of Unreal Engine, and, whilst modelling the blockout basic form of an object, I would use grid snaps to ensure everything lined up perfectly.
Matching the grid in 3DS Max with Unreal allowed me to ensure everything was aligned correctly, allowing me to quickly produce assets that snapped together.
Although I had kind of jumped ahead slightly with making this floor section, I felt it was important to nail down the grid setting to ensure I didn’t have a headache later. This was merely just to affirm to myself that everything was working as intended.
Creating a simple version of the overall environment is a fundamental step within this project as it is interactive. Everything has to be scaled correctly so that the players avatar can traverse the ship without coming across doorways that are too narrow or ceilings that are too low.
The way I went about this was to firstly create the environment using the BSP brush tools inside the Unreal Engine. Once I was happy with the overall shape language and feel of the space, from both a visual and an interactive perspective, I would then export the BSP as a static mesh and import it into 3DS Max where I model all the extra details into the space. I found the most efficient workflow for myself was to create the environment using grid snaps and, once I was happy with it, save each element as it own 3DS max file and then continue to further refine each element.
As you can see in the above, the overall shapes of the space have been preserved, with the sloped wall panelling and space for the pipework. I took the decision to avoid making details such as pipes, stairs and trim inside Unreal and just focused on the large shapes, opting to work these out later in 3DS Max where I had more control. Additionally when exporting from Unreal to 3DS Max, Unreal has the annoying hindrance of triangulating the BSP brushes leading to time wasted trying to qualify things manually, hence the fewer objects created like this the better.
Additionally I also took the time to set the lighting up in my whitebox to ensure everything worked well together, and that elements where not obscured in shadow rendering them pointless. I feel that the lighting element of this project cannot be left to the last moment and should be done along side the fundamental building blocks of the environment, ensuring everything works in harmony.
I extended the process from the major elements to the smaller prop level, to ensure that everything fitted and looked right when arranged together. I’m glad that I did this because it actually changed how I thought about the major architectural elements to avoid scenes looking too cluttered and busy. Its also really important to make sure props are the right size and don’t feel too big or too small when compared with the character. With the pilot’s chair for example, the first version of the block out I created, which I thought was going to be correct from look at the real scale of similar objects, looked far to small and needed to be increased slightly just to look visually good.
A major element of the success of this project was to stream the different elements and not have everything all loaded at the same time. My initial idea was to use world composition; something that I had previous experience with from a previous project. However, I quickly learned that it was not suited for the kind of project that I had in mind and more for open worlds with large landscapes. I had to change the streaming method to streaming volumes instead. I created several level streaming volumes, one for each room of the spaceship and the exterior, corresponding with the way I had created each room as its own level.
Before I switched over to the new streaming method, I did some experimentation in another throw away project to test out the idea before trying it on my live version of the game, these tests proved successful.
I created a master persistent level that contained all the streaming levels as sub levels, inside the persistent level I put all my global effects, such as fog, fill light, post processing volumes etc, this meant I didn’t need to duplicate these and that they would be constant across all the levels. I decided to make each of area of the whole ship in to different sub levels even though I did not intend on submitting all of these rooms. I thought that this would allow me to add more to this project at a later date and would also give me the freedom to decide exactly what rooms I want to submit.
Quite a major element of this project is the use of custom normals, as a way to fake having a normal map applied to an object without having to have one, freeing up texture budget to be used elsewhere. Although this seems counter intuitive as your trading one budget for another, modern GPU architecture is much more effective at processing large amounts of polygons compared to large amounts of textures.
The beauty of this approach is that it is extremely simple and very effective. The way it works is via the use of a single smoothing group, in conjunction with facing the normals in a specific direction. When attempting to do this without enough information we run into the problem of weird shading errors as seen below in the first cube. The essential element of this is to have another normal between major faces allowing us to create an average between the normals, the below image illustrates this.
Cubes are easy enough but more complex shapes require a helping hand, as facing the normals in the correct direction can be a laborious and time consuming affair when presented with hundreds of faces. After searching for a solution to this, I came across the script, Improved Face weighted Normals. This tool allowed me to click a single button and have an almost perfect alignment on all my normals. The tool isn’t perfect however and still requires manual attention to ensure everything looks perfect.
A core feature of my project was to have interactive elements. One of the first of these happened to be the humble door (out of a necessity, as testing got tedious running into doors that wouldn’t open). I went about my interactive doors by using blueprints. My idea was to have an invisible interaction-box around the door that would trigger an animation when the players avatar overlapped the trigger, the animation would be a simple leap between the starting location of the door in X coordinates to the location of the door at the end of its movement coordinates. I also included a reverse animation that would play after 10 seconds if the players avatar was no longer overlapping the trigger in order to reset the door back to the closed position.
I decided to further improve the doors in my environment as I was becoming a lot more confident with blueprints and how to make interesting things happen with them. I went about this by overhauling my door blueprint. I included a door name decal in the form of a text render that I could change on the fly using variables, this allowed me to label the door on the back and front easily, allowing each door in the entire environment to look different. Additionally I included the ability to lock the door to seal off sections of the ship I did not intend to complete for the final hand in. I also added a few graphical elements such as lights for the keypads, and normal decals for rivets and so forth. the door became a blueprint that could be placed anywhere in the level and instantly look good and relevant to where it was in the world. At the same time I also included a sound effect that was played when the door moved.
Another core milestone for this project is the successful implementation of decals that have normal height and diffuse information. As stated previously in this blog, I had come across a very helpful article on Polycount that had given me some idea of where to start with this. My very early trials yielded interesting results and I quickly found that this wasn’t actually something to be worried about.
After further reading on Polycount, a user mentioned a package called Decal Machine. This interested me a lot as this project is so heavy on the application of this that I felt I required more ways to improve my workflow.
Decal Machine is actually a plugin for Blender, a package that I had previously used before joining the course, however, 3 years using 3D Studio Max had somewhat dulled my skills with it. Initially I was worried that I could not afford the time to relearn the package, however after a while of using it things quickly started to click into place and I felt comfortable again. Decal Machine did indeed prove to be the time saver I had hoped it would be. Not only does the program automatically bake meshes into decals, with normal, height and curvature maps, it also creates Atlas textures of the decals you’ve just created easily and allows you to add new decals to your existing Atlas later. As I had planned to use a few large atlas textures for this express purpose this was nice indeed. Another feature, that I was amazed to find in this little plugin, was the ability to deform decals on planes to the geometry of the target object, as seen in the above image. It was easily possible to contort my decals to wrap around an object at the click on a button. I feel that this package alone will save me a few weeks that I can better spend on modelling or polish.
I had to learn how to use blender 2.8, which I found to be quite a good program, easily on par with the likes of 3DStudio max these days. The transition to blender 2.8 was due to the update of the decal machine plugin. Inside blender I applied all the decals to the exterior of the ship, which worked very well. One of the major elements that made blender good for the application of decals was the projection function, where I could project decals onto curved surfaces.
Decals, both info and normal based where a major element of this project, and as mentioned previously in this blog I had used decal machine to create them, at least the normal based ones. However, the process was a lot more involved than this. I had to create a master material for the decals to use as I wanted to be able to control things like roughness and scratches at the material level, this would allow me to create a degree of variety without having to put it directly into the albedo. The scratches allowed me to have decals on the floor, where people work to be more worn than those decals on the walls. The overall feel of the project that I was creating was of a heavily used and dirty ship and allowing a certain degree of grunge in my materials was essential. Again, this linked to the feedback from tutors to having more human elements in the scene making the ship look like it had been lived on.
In my project I have 3 main types of decals: info decals are what I call decals for things like signage, stickers, labels and I also use text renders as another form of decal. I have used the text render function extensively and layered it with other grunge decals to great effect. The final type of decal in my scene is the normal decal. Originally, I had planned to have these decals use world position offset to have height information, however I couldn’t get this working correctly with the exterior and interior lighting schemes so decided to cut it. The decals were appearing black, and it would have been time prohibitive to have completed the feature in a timely manner. In the end my normal decals only used normal information, along with albedo and metalness from my master material.
I started by modelling a collection of assets that could be used everywhere, a kit of bits. this included elements such as skirting boards, floor panels, wall sections and so on. Once I had created a large amount of these, complaint with the grid setting in UE4, as to ensure they would snap together, I then went into UE4 and arranged them into the rooms.
I worked back to front with my enviroments, making the flight deck, the forward corridor, mess compartment, port and starboard corridors, airlock room and crew quaters. Once I had created all the rooms in the spaceship, I proceeded to making various clutter items.
For the interior, I mostly modeled the ship inside 3ds Max, however for certain elements, such as the padding on the spacesuit chambers, I decided to use Zbrush, as modeling organic forms in Max isn’t as easy and I was keen to do whatever I could to save time and work as smart as possible. With the control stick and the padding, I started with a base model in Max before exporting to Zbrush to sculpt the finer details, such as the nobs and the leather bag around the base of the stick.
Modelling the exterior was a task that I deliberately left to late in the process, because the internal volume of the ship needed to avoid sticking out of the exterior. The exterior also created a light block for the star light to stream in through the windows. The windows and doors also needed to line up perfectly on both exterior and interior models. I knew that once I was finished with the internal design, I could no longer change it because this would create alignment problems. To create the exterior, I started by blocking out the major shapes using bsp brushes inside unreal engine, this gave me the basic form and the locations of all the openings, I then exported this to 3ds Max.
From the basic form, mostly as a guide to know where the major elements needed to be, I started blocking in the major shapes until I was fairly happy with the design of the ship and its shape language.
I was keen to base my design heavily on real world objects, so the ship was largely influenced by modern naval ships, this influence can most clearly be seen with the addition of radar domes. I had visited Portsmouth a few years ago and been impressed with the new destroyers leaving the dock. I was keen to add some of these elements into my ship as often with space games the space ships are linked to the navy. I also paid close attention to the function of the ship and what major elements it would need such as: radar turrets; communication dishes; larger anti-ship turrets; fins; control surfaces and so on. All these little details are essential and I wanted my ship to appear somewhat realistic.
Once I was finished with the modelling phase, I then proceeded to unwrap the ship, which took longer than expected owning to its sheer size.
I created two major types of decal, the info decal, which is just flat colour, for things like the labels and signage, and normal decals, such as rivets, basically decals that use normal maps.
I had major problems with Decal Machine unfortunately, as in the most recent built the ability to export to atlas textures has been removed, and the software has been migrated from blender 1.79 to blender 2.80, which is a total rewrite of blender and for the better, although I was unaware that this function had been removed in the latest version until the very end of the decal process. Resulting in quite a significant amount of lost time trying to devise a work around, the work around was not elegant but it worked. I created each decal as its own instance material from a master material, setting the 2D image as a parameter that could be changed on the material instance level. This sped up the process but led to a model with an excessive amount of materials. Hopefully in the future when the atlas export function is added back to the software, I can improve the efficiency of the decal work on the exterior. This problem likewise extended itself into the interior.
When I first imagined this project, I had intended to create the spaceship on a landing pad in a futuristic city, as if the ship was undergoing the process of being serviced or refueled, much like an aircraft on a stand in an airport. However, I quickly realised that this would reduce the amount of time I would have to polish and create the main elements, being the ship itself, and was too large in scope for this project and the time I had. I created a block out of the idea to make a scene like this before I started this project.
With the limited time in mind I made the decision to set the scene in space instead, and although this wasn’t my original intention, I believe it will work equally as well. I decided this approach would ensure that the focus of the project would be the ship. This way I would not need to model and texture other elements. I wanted to ensure that the ship was centre stage in the scene as this would be the element that took the most time to make. I believe that having too many other elements such as support vehicles, or the buildings would detract from this.
The first stage to creating the space scene was creating the skybox itself, as this would create the “space” in my space scene. The default one in unreal wasn’t suitable so I had to create my own from scratch. I did this by creating a new blueprint, adding the sky dome mesh from the unreal engine files and then creating my own HDR skybox, using a piece of software called spacescape. Initially I tried to go for a really colourful spacescape, with loads of nebula and other fancy space features, however when I saw this in the game engine I was dissatisfied as the background became to much of a feature in its own right and was a distracting set against the other elements, after trial and error I decided to make the space background, much more muted but still interesting with a few lone bright stars as to not becoming a major eye draw and more of a background fill. When tested, this looked really nice outside the windows of the ship.
The next next major element was a planet, I mostly included this to give a sense of scale, as without any points of reference it’s hard to determine how big or small things are in space. I knew making the planet as a mesh would be cost prohibitive, especially with creating a smooth curve, and as the planet was only ever intended as an object to be seen from looking out of a spaceship window, I felt it would be best to create it as a 2d sprite.
I experimented with billboard materials that turned to face the player, this worked well on the smaller elements, however, with larger elements the parallax effect was noticeable. to correct this I made the larger elements in the scene planes that did not move and remained static, this stopped them appearing to move as the player walked around.
I went about making my planet in photoshop, starting with a base grey value study of a sphere and then building it up. I was pleased with the results, until I came across the work of Matthias Schmidt on ArtStation. I found my planets to be woefully lacking, I didn’t know how he had created his planets but I figured what gave them that edge was being able to see the curvature in the texture, his planets looked 3d and mine flat. I had the idea to create a basic 3d model of a planet, and apply a 2d texture I had created, this gave me the texture and the volume I was looking for and after some hand painting I was approaching what Matthais had achieved. I knew that I couldn’t spend too much time on this though as it was a small detail in a much larger environment, so I had to move on. If I had more time I’m sure I could have improved my planets to be on par with Schmidts work.
Once I had created the base for the process to create the planets, I proceeded to make a large gas giant, as I had been inspired by the opening scenes of avatar, and a small moon, earth-like in nature.
I initially had all the planets as billboard materials that turned to face the camera, however as the gas giant was rather large the billboard effect was actually noticeable from inside the ship, breaking the illusion, to combat this I placed the image on a simple plane and this fixed the issue. I retained the billboard effect for the smaller planets.
I created a master material for the planets and made instances of it, with exposed 2d image parameters that I could use to easily change the image, and thus the planet. I also added in a desaturation parameter to make the most of the graphics I had created, this allowed for more variety of planets without having to create more images and use more texture memory.
Once all the planets were added, the next thing was to add a source of light. I created a star by creating a super-emissive material and placing it on a cube. As the cube was so far away from the player it appeared to look like a sphere. I created the star as a cube instead of a sphere since a sphere would have a lot more polygons and thus be more expensive. I also played with the post processing effects to make it so that the star would have a strong lens flare, I had trouble with this since the other lights in my scene had the same effect, until I was able to set a threshold for the lens flare. By making the star super bright it was above the threshold and thus the only object in the scene that had that effect, which was exactly the outcome that I was aiming for.
I then added directional lights to the scene and set their lighting channel to 2, and the exterior of the ship to 2 so that the light from outside would not light the interior spaces.
The scene was completed, however it felt somewhat empty and devoid, being the void of space perhaps this was appropriate, but I felt it needed something else. Especially since I had been told by tutors during feedback on my initial plans that I needed to add more human elements to my ship. I figured that this probably applied to all areas of the project and thought that some other human activity around the planet would be a good idea. To this end I created NPC spaceships, another motivation for creating these was again to create reference points and a sense of scale.
I created the spaceships by first modelling a few different types of ship, a small fighter and a larger capital ship. I felt the larger ships didn’t need to be textured as they would always be seen from an extreme distance and thus making it a wasted effort. The fighters however would get much closer so I wanted these in substance painter. To make the ships look more interesting I added engine glow effects by using the same material I had created for the sun, I added another parameter to change the colour and brightness of the glow. This allowed the engines to have a blue bright glow. I made the spaceships blueprints so I could add further details like blinking lights, engine glows and sounds. I then created another spline blueprint actor that the ships would follow. To ensure that the ships did not all travel at the same speed, I created another variable so that the larger ships would move slower and so that the fighters could have varying velocities.
The completed effect was an alive exterior environment with ships buzzing past, a star in the distance and a planet, with the main environment and vehicle in the middle. I felt that this added extra interest when looking out of the ship’s windows whilst being an interesting setting for looking at the ship from the outside. However, it did not detract from the main focus; which is the ship but instead added a way to depict scale.
When I started the project, I was keen for the displays in the flight deck to be dynamic and update on the fly with random numbers and details to make the scene feel more alive. This was partly born out of the desire to make the scene more performant since having excessive numbers of rendered videos would be intensive on the video memory and would not be dynamic. I decided to use interface widgets rendered to materials to make my dynamic displays. This also gave me a lot of creative control where I could move elements and design things easily. The interface widget also had the ability to have blueprint code inside them. This allowed for me to cast to them from other blueprints and give them variables. The ability for the displays to have variables is something I used extensively. I made the screens on the doors linked to the door variables of name and locked status. This information then populated on the screens. For example, when I decided to lock sections of the ship off, I could easily click on the locked button and label each side of the door.
When it came to designing the flight deck instruments, I used a lot of basic interface elements like circular and liner throbber to give an animated feel. I also made the radar bar sweep across by doing some basic blueprint work. I experimented a lot with trying to make my computer screens actually look like computer screens by giving them glass materials on planes in-front of the widget. This felt like a bad way of doing things because it was duplicating geometry and creating effectively complicated shaders. Later on, near the end of the project, I revisited the screens and edited the widget material in the engine files directly so that it could look like a computer screen with roughness without having to stack layers of planes where my screens where. This reduced the shader complexity and made the screens look a lot better.
I expanded the use of these screens to other parts of the ship. From the cockpit displays they spread to: the doors, as mentioned; the thermostats in the compartments; the tablet computers; computer screens and bed pod displays. Overall, I feel that the displays are one of the best elements in my scene and I am very proud of them.
The materials in the project were a major element that worked in conjunction with the decals, I created several different types of materials, mostly a derivative of the master material. The master material is where I created numerous variables and parameters, the idea behind this was that I could use the parameters at the material instance level to make variation easily without having manually make loads of individual materials. The heavy use of instancing of materials was vital to make my scene more performant, one regret I have is that my materials became very messy the more complex they became and I even had trouble remembering what part controlled what towards the end. I feel that I should be better at commenting my work so that I can read and understand my own work the more complex it becomes over time.
I made extensive use of Substance Alchemist, a new material creation program from the developers of Substance Designer and Painter. I found its operation similar in nature to the likes of Bitmap2Material. I used it to create several quick unique materials, such as the dish material for the exterior radar turrets and so on.
I felt like the ship needed some more elements to make the scene feel more alive. I added space dust outside the window of the spaceship to create the appearance of motion. Initially my dust particles appeared inside the ship but to combat this I created a simple plane to block the particles from entering the ship. I also created a smoke particle effect to waft down from the ceiling areas. The engines of the spaceship were another major area where I employed particles. I created a cone mesh and a transparent material with an emissive function to mimic the effect of a thruster. I then stacked and layered this to give the thruster the effect of depth. The particles from the engine where supplemented with lighting effects on the hull and inside the engines. I used the same material that I used for the star but, as I previously stated, had added parameters to change the colours and brightness to give it a blue glow. I felt that the overall look of the engine was quite good in the end.
I created numerous sound effects for this project to add another dimension, these stacked well with the interactive elements. For example, I created a sound effect for when the door moved by recording a deodorant can spraying. I then edited this sound using audacity before adding it into the game and used blueprints to trigger it at the correct time. I also added an ambient background noise to give some atmosphere. I did this by recording some ambient noise of machines around the house. I also used another interactive element of having an intercom system that the player could interact with. When pressed the intercom makes a bosun’s call whistle. I liked this extra element of interactivity. I did originally have some sound effects of the space ships that flew across past the ship but these did not work as well and would have taken too long to finesse. I decided to focus on the internal sounds which added more to the atmosphere rather than extra features that could perhaps be added later. I had read articles about Star Citizen and their decision to make sound carry in space in their games. I went for a similar approach and so my engines had a sound when the player scanned around the outside of the ship.
Another important element of the audio in my scene was for it to be immersive, for example the electrical hum of the lights is only auditable when the player walks under the lighting in the scene, I achieved this by playing with the attention settings of the sounds in engine.
I added a simple flashlight by editing the blueprint of the player character. The flashlight was a rather simple effect; simply using a dynamic spotlight with its visibility set to false to true upon the player using the “T” key. To make the torch look more like a torch I took a photograph of the effect my own torch created on the wall and then edited the levels of this and then using this, I created a light function material. This allowed me to create the effect of the torch halo on the wall. I also recorded the sound of my clicking the torch on and off and then added this into the game when the torch was toggled. I added the torch to test the game and as another interactive element that again added some human elements to the game.
A main menu was a core feature that I intended to add from the very start of the project. I wanted the main menu to be dynamic and have animated moving elements. I did this by using the same spline spaceships I had created for the exterior of the main map. This created the effect of things moving around in the background. After using UMG widgets for all my interactive displays, I felt very confident to tackle the main menu using them. I created several buttons and even found a background blur function inside the UMG editor.
This was a godsend as I had attempted the blur the background for a few hours by using the depth of field settings inside the camera actor. I created the main vehicle spaceship in my main menu as a flat 2D rendered image to reduce the load time of the main menu. I also added my planets and other elements. When I was happy with the look of the main menu, I then added a number of buttons; the main buttons taking the player to the interactive game world and the other taking the player into the camera actor fly through sequence. I also added the ability to open my portfolio on ArtStation and my Blog for the development of the project. I decided to add these features for the degree show, when my project would be on display.
PROPS AND HUMAN ELEMENTS
With the props around the ship I really wanted to think of function, and what the crew of this ship would need for their jobs. I also wanted to make it a appear lived in and perhaps less orderly then a usual navy vessel. To this end, I created two main types of props: the functional ship based props, such as smoke alarms, cctv cameras, vents and so on and the human element, something that had been mentioned at one of my assessments.
The human element props included things like clipboards, coffee mugs, paper money, playing cards and uniform items. These could then be scattered around the ship to make it feel like it had a crew that lived and worked there. I decided to make these elements inside substance painter as this gave me a greater degree of control and made the items feel more alive compared to the decal and tiling material approach, that worked well for things like wall panels but no so much for smaller items. It has been suggested by one of my tutors to do this.
For the functional ship-based props I made various elements including some cameras, wifi hubs, alarm klaxons, bins, wires and an intercom system. I made these using the same approach as above.
The process that I used to create most of the hand painted props was to start with a block out model in 3Dstudio max, at the same time making the low poly model and unwrapping. I then took the model into Zbrush and modelled the finer details. this process saved me a lot of time, as things like text and designs could be created by using custom alphas created for the task at hand.
I knew the above process worked well, as I had used it on my previous project to create the World War 1 trench train, where I had created similar metal plates for the side of the locomotive.
I was keen to add cloth elements to this project, as I felt the combination of hard surface objects would juxtapose and work well with the more organic free flowing forms of cloth. An area that I had planned from the start to include this was my crew compartment. I had drawn heavy influence from real world naval ships and submarines where the bunk beds have blue curtains, and are often located in busy areas. in order to achieve this I had to learn a new software package, Marvelous Designer. This package proved to be easier than expected to pick up and before long I had the curtains created and in the game.
Once I had created my curtains, I then proceeded to texture them in substance painter, adding extra folds and details by creating a cloth material. Finally I imported my curtains into Unreal and as a final touch decided to experiment with subsurface scattering.
Having been quite pleased with the results of the previous object, I was keen to further experiment with Marvelous Designer, I proceeded to use the same process to create a number of ration packs that I could scatter around the various interior environments.
I wanted the project to include interactive elements from the very beginning, to start with I did this by having doors that opened and closed as the player walked around the ship environment, I felt however that these were not enough and almost so much of a background feature that they would not even be noticed. To resolve this I included intercom posts, that the player could walk up to an use, which would play a sound.
To ensure that the player would notice that the intercoms could be used I decided to include some text, “press ‘F’ to use” to ensure that this could be easily read I added in the blueprint a simple location transformation tied to the position of the player camera so that it would turn to face the player. This was needed for places where the income was close to the hull because otherwise the text would not be readable.
The blueprint that controls the intercom includes facility for the intercom to be named differently depending on where it is in the ship. I felt this was important as each intercom on a real ship would have a different name/label. I also included some other basic elements like the ability for it to only be used every few seconds to stop potential spamming of the sound effect.
Getting feedback from my peers and tutors was a major element of this project, I spoke extensively with my peers and their feedback helped me hone the project to a much greater degree of quality than I would have otherwise been able to achieve working on my own. Through LinkedIn, I reached out to people working in the industry that I had met through university. These were people who had offered to critique my work previously. I was pleased with their feedback and made changes as recommended.
This project has been a very different one for me in terms of design and workflow. For my first few projects of third year, I worked mainly on 2 real world vehicles that had a design to base my model on. This project was vastly different as it was all made up of elements from my own imagination. This did at first present a challenge as I had to balance time restraints, artistic vision and my own expectations. As the project advanced however I came to very much enjoy the task of creating something entirely of my own making.
I feel that I have successfully used references from multiple sources and have therefore managed to create a look that uses both real world references such as navy vessels, aircraft and other military vehicles as well as Sci-Fi inspired elements such as spaceships. This referencing stage was crucial in this project since it gave me a concrete look that led the remainder of the design process.
My project makes use of many different workflow techniques and programs that are widely used within the industry. Many are ones I have used before such as Blender, Zbrush and Substance Painter. This project has also relied heavily on me learning and improving my skills on various new technical aspects, such as the use of decals and blueprints. I am pleased with how these elements have added to my project as the use of them is very relevant within the context of the games design industry. I have also very much enjoyed the process of learning these new skills through through both online tutorials as well as experimentation.
My aim after leaving this course is to join the games industry as a 3D artist. Specifically I would love to join either as a vehicle, environment or prop artist. With this in mind, I wanted to ensure my project utilised the skills that would be needed within this specific context. I feel that I have done this as I have built a detailed vehicle that uses a wide range of props to set up a realistic, interesting and seemingly ‘lived in’ environment.
Overall, I feel that I have successfully completed this project in accordance to the instructions I gave myself at the onset of the project. I have enjoyed the challenge of creating a larger scene using a variety of reference sources. I also believe that I have developed and become proficient in key skills that are exceedingly valuable within an industry context.
Polycount (2015) Decal Technique from Star Citizen. Polycount. Available from: https://polycount.com/discussion/155894/decal-technique-from-star-citizen/p1 [Accessed 4.1.19]
Cloud Imperium Games (2018) Star Citizen [Online] Cloud Imperium Games