I am Henry, and I am the leader of the 3D Modelling Team for Witness to the Revolution. Our team focuses on designing, optimizing and otherwise tweaking 3D and 2D assets to be used by other teams in our recreation of Colonial Boston. The members of this team have all different levels of experience and background in digital art and animation, and I specifically have used Blender, the 3D modelling software the Witness to the Revolution team primarily uses, for about 3 years, albeit self-taught in an unprofessional setting. Primarily my role on this team has been as a Technical Artist, which means that I optimize pre-existing models so that they play nicely with the Unity Engine once the Game Development Team gets their hands on them.

Before I had joined the project in late March, the Witness to the Revolution team had already purchased models of many Bostonian landmark buildings such as the Old State House, Fanueil Hall and the Old North Church. I have been working the most on the Old State House, which besides requiring certain changes to incorporate historical accuracy i.e. adding a staircase to the front of the building, removing the doors that lead down to the subway, also required several key changes in order to get the game to work better in the video game itself.

The biggest challenge of optimizing any model is bringing the overall triangle count down. In 3D Modelling, every model is composed of vertices, edges, and faces. Vertices are single points in a 3 dimensional space, which can then be used to form edges, which is a line drawn between two individual vertices. Similarly, edges can then be used to create faces, a plane in 3D space made up of 3 or more edges. A full 3D model is composed of many faces, edges and vertices.

Example of a single vertex in 3D space
Example of a single edge in 3D space
Example of a single face in 3D space

However, Unity and other game engines have to render a given 3D model dynamically, or they have to always take into account all vertices/edges/faces of a given model at all times, not just the ones that appear in frame. In Unity, a high poly model will also be automatically split into multiple separate models, further exacerbating performance issues.

What happens when a high poly model is loaded into Unity

This means that a technical artist, such as myself, has to make sure that the model is as efficiently built as possible so that the game can run without stuttering to keep up with the data that the model is using.

The original model for the Old State house had every detail of the modern building in fully modeled, from small amounts of beveling on drain pipes to elaborate gold statues up on the top of the building. Unfortunately there are very few programs that can eliminate this detail automatically while preserving the overall shape, so much of the changes that are exemplified below were done “by hand”, or without much assistance from algorithms and programs within Blender.

 

(Above, Top) The original tower, and (Above, Bottom) the new tower after much manual editing; (Below, Top) one of the side entrances from the original model, and (Below, Bottom) the newer model.

 

Some pieces, like the statues, could be fixed by using the Decimate tool, which calculates how to remove detail from an object without destroying its overall shape. As this is a mathematical process, however, it only functions for pieces that are built in a specific way.

  

(Top) The original gold unicorn statue, before using the Decimate tool, (Bottom) and the model afterwards, looking significantly less unicorn-like.

Other details, like numbers on the clock, intricate molding and window panes were deleted entirely.

(Top) One side of the State House with molding + window frames, (Bottom) those frames and molding having been removed after editing.

 

The current model of the Old State House can actually function within the game without slowing it down or crashing it. The next step will be to take all that detail that we lost and reapply in a performance friendly way, using LOD’s and a normal map.

LOD’s, or Levels of Detail, are several copies of the same model all of different- wait for it – levels of detail that developers use to render an object at different distances. For instance, the lowest LOD, or the least detailed model, will be used for rendering the model when the character is really far away, when most of the detail on the model can’t be made out anyway. As the camera or character gets closer, the game will load in progressively more and more detailed models until we reach the highest LOD. Thankfully, Unity has an automatic LOD generator, so this step will not be a big hassle.

The normal map, however, will be a much bigger detail, as this will allow us to give very small details, like much of the detail we deleted entirely, a three-dimensional quality without actually using vertices or faces. Instead, we will take the faces they would “sit” on on the lower detail model, and give them a normal map. This normal map works like a topographical map, telling the rendering engine to raise or drop certain parts of the face, the only difference being that a normal map can also use different colors to indicate more than just height and depth, but also length and width. Now, instead of using the 20+ numbers used to store data for a bump made of vertices and edges and whatnot, we have 10, making those small details much more manageable for the computer to manage.

Once these two details are added, we will have a model that may look even better than before, and also will work far better with the engine, allowing work in all areas to happen much quicker and more efficiently.

Leave a Reply

Your email address will not be published. Required fields are marked *