Hi, I’m Jake. I’m from Ohio, USA, and have been working in the 3D industry for over 10 years. Primarily, I have worked on simulation and education application development in Unity targeting mobile and PC devices. I have worked on a few very small indie titles and within the mod community for Skyrim and Chivalry: Medieval Warfare. Currently, I am a freelance artist, Assistant Professor of Animation at the University of Saint Francis in Fort Wayne, Indiana, and I also run a solo game studio in my spare time.
I got into doing 3D back in 2008 and it wasn’t my intention. I studied Game Art and Design at the Art Institute of Pittsburgh in the hopes of becoming a concept artist. Taking my first 3D class exposed me to an area of game development I hadn’t considered. From then on, I have just continued to work on my craft with personal side projects or professional work. I’m always looking to learn more and I hope if there’s at least one thing to draw from this article, it’s to learn to teach yourself because software and pipelines are always changing.
The entire project came out of a little doodle in the corner of my notepad during a meeting. Most of my work is hard-surface, and since I was a kid, I’ve always had a fascination with the deep oceans. So, I think it’s just some of that childhood interest bubbling through with a cartoony vibe.
I wanted to keep the design uniform by echoing the spherical shapes throughout the design. It needed to be cartoony and fun but realistic. Stylistically, I approached it from kind of an Overwatch/Fortnite angle. Looking through an array of designs from both games helped guide some of the proportions, color palette, and functionality. To ensure the model stayed readable as a submarine, photos of submarines were also referenced and informed the design of parts like the fins, propellers, and ballast tanks.
The modeling process involved what I’d call a “chaos to order” approach. Most of the work was done in Maya and then some detailing in ZBrush. With the main body of the sub, I started with a sphere and then started using other shapes to get the overall form using booleans and just jamming forms into others. It created for some really gross topology, but it achieved an acceptable silhouette.
Once the silhouette was settled, the mesh was completely rebuilt with a proper poly flow. The mesh was built with X symmetry so the little plates and bolts could be duplicated to the other side. Instancing meshes with symmetry also enabled for quick adjustments. Utilizing radial symmetry made adding bolts around the front glass and on the top ring quick. Using forethought can be important for things like bolts. By making the unwrapped low-resolution bolt and placing it with the high-resolution bolt, it saved a lot of time and effort as opposed to trying to rebuild and unwrap all of them separately later.
As the model progressed, I used the crease tool to ensure the edges stayed sharp when subdivided. I knew this would not translate to ZBrush, so I subdivided the mesh several times before sending it over.
Once the mesh was sent over to ZBrush, all the parts were broken up into their different subtools for easier manipulation. I created a small library of alpha masks to use for creating some of the smaller panels, vents, and holes. I created the alphas by modeling them quickly in 3ds Max and importing them to ZBrush. From there, I positioned the viewing camera and used the Alpha slot’s “Grab Doc” button to turn the mesh into an alpha texture.
The details were all finished up in ZBrush, decimated, and sent back to Maya for retopo. Some of the high-resolution mesh I was able to optimize for the low instead of rebuilding everything. I unwrapped the model into a single UV sheet. The high resolution was exported from ZBrush and the low from Maya. They were brought into xNormal for normal and ambient occlusion map projection. In Maya, I created a cage for the submarine to be sent to xNormal to help with the projection accuracy. Several cages had to be created and baked multiple times to keep normal distortion to a minimum. Those were composited together inside of Photoshop.
Windows & Ballast Tanks
Some odd things can happen when subdividing a sphere. Because of how points converge on a sphere, the top and bottom of the shape are all triangles. When subdivided, they’re converted to quads and some smoothing issues start to reveal themselves. For this reason, on the main window, I don’t have the convergence of these points. It would be much cleaner looking if I did have them converge, but smoothing wise, it would create problems when projecting my normal map. The low poly has the convergence of these points across the window for flow and doesn’t have to worry about the shadowing because it is not being subdivided.
The ballast tanks on the sides were pretty straight forward. I started with a sphere and extruded it to become a capsule. Edge loops were added for better density when subdivided. The paneling on them was detailed in ZBrush by using some of the alphas that I had created. I used a handle from Joseph Drust’s IMM ModelKit from ZBrush to use as a base and added some segmentation for detail.
Most of the details added into the design were more “fly by the seat of my pants” than methodical. The propeller obviously made sense as a propulsion system for the craft as did the fins and hatch wheel. Everything else was just a trial and error. At one point I had a big robotic arm hanging out the bottom bay doors. It seemed a bit too cartoony and just didn’t fit the overall aesthetic, so I scrapped it.
For texturing, I used Substance Painter and followed a PBR workflow. I tried out some different color swatches and created some masked folders to quickly swap material types to specific areas. The style started out disjointed because the model was more stylized, but the materials were trying to prove too realistic. I reworked some of my materials and toned down the wear and tear. Some of the decals were made in photoshop and then brought in to use as either layer masks or brush alphas. For each material type, I added a mask layer to paint more organic wear and scratches.
The biggest challenge was definitely the texturing. I had a pair of inspired styles being referenced (Overwatch/Fornite) and needed to adhere to their aesthetic. Working through multiple iterations, as well as feedback from my 3D community, helped resolve this. It’s great to get involved in communities that can give you feedback to improve your work and help you grow as a professional. Sometimes, when working on projects like this, you can come across issues that your software has no great solutions for. After rebuilding the low-resolution mesh, Maya kept giving me errors in the unwrap that I could not solve. I did a mesh clean up, merged some vertices, and took care of non-manifold geometry. Even exporting and reimporting could not fix the issue. So, I sent the model over to 3ds Max. There were no issues in Max, but Maya for whatever reason was getting hung up, even with the history having been deleted. Sometimes, you might find a solution but no answer to the problem.