Eldar Seydamet shared an extensive breakdown of the Honda CX650 3D bike made with Substance Painter, Maya, Unreal Engine, and Marmoset Toolbag.
In case you missed it
You may find these articles interesting
Hi there! I’m Eldar Seydamet and I live in Canada. Currently, I am a Game Environment Art student at Think Tank Online graduating this Summer.
I don’t have any fancy game titles under my belt, nor do I have a Fine Arts degree. I’ve always liked creative things in general, doing lots of life drawing and playing music. I never had the chance to turn those hobbies into a career, especially after immigrating to Canada by myself when I had to resort to various labor jobs. Eventually, I transitioned into IT and electronic security. Thanks to that transition I was able to save up enough money and I decided to try out just the Foundations term at Think Tank Online school in February 2020, while still working full-time. After finishing the term in the Spring of 2020, I lost my job due to the pandemic, which allowed me to fully focus on my passion for 3D art.
Think Tank Online is the absolute best school in my opinion. They do not turn you away if you don’t have a particular background – they teach you everything from scratch. The school staff is an amazing bunch of talented hard-working professionals in the games and film industries, and the student community is out of this world. Despite doing the program online, it felt like I was on campus.
Down below you can check out some examples of my school assignments and projects in the past year.
That said, Think Tank Online is a very intensive program, unlike other schools, they will prepare you for the industry within a year if you put in the work. The trade-off is you have to pick a path: film or game industry; character or environment focus. It was a hard choice for me because, on one hand, I love video games. I remember I had the chance to play Wolfenstein 3D on my dad’s work computer when I was 4 years old. On the other, I love cinematography and the quality you can produce being an artist in that industry.
My love for cinematic quality did not leave me alone and I tried to do my best to push for it in my Honda Cafe Racer project while keeping it very well optimized for games.
The inspiration for the project was simple – I love motorcycles and I miss my old bike. I started working on the Honda CX650 with the intention to place it in my third term school project scene Bike Shed Motorcycle Club as a hero asset and to support the scene.
Just like any project, you’d want to start with the research, scope estimation, and reference gathering. I cannot emphasize the scope enough. Having learned it the hard way, I can definitely say this is the biggest factor you have to pay attention to. Be diligent in your research and estimate all the work you will have to put into the project: break down the complexity of the pipeline and be honest with yourself about your skills.
My rule of thumb now is to add another 25% on top of my time estimation since assets for games take longer to create due to optimization in the pipeline. Also, take into account practical goals like "What will I learn from this project?". I knew that I wanted to improve my modeling, baking, and texturing skills, so I went ahead and started to pull the references together.
To design the custom bike I used two main and two supporting references:
- I used to own a 1982 Honda CX500 myself, and I did quite a few modifications to it back in the day. I incorporated those design elements in the game model. In particular the cockpit area, the tires, the fuel tank, and the rear cowl with the tail light, as well as minor wear and tear.
- Other design parts and the main colors were largely influenced by the One-Up Moto Customs and their Honda CX650 John Player Special.
- Frame, engine, parts, drawings – all the technical elements to better understand the build of the bike. Since I didn’t have my bike anymore I didn’t have the luxury of a real-world reference in front of me, so instead I scoured bike enthusiast forums for different pictures.
- CG references - both real-time and VRay renders, more of a benchmark and comparison. Always compare your work to the latest games or films, because you want to do better than them, or at least be on par.
Blockout and Proportions
Any good project starts with a blockout. It’s an essential part to rough in the dimensions of your asset and to make sure it is scaled correctly for a game engine.
I simply looked up the actual motorcycle model specs and dimensions, and then created a primitive that I put on a non-selectable layer in Maya, so I could see the bounds. The next step would be to import an image plane to start roughing in the blockout with the Create Polygon Faces tool and primitives. It’s important to remember not to commit to details as these are just placeholder meshes.
Be sure to use a mannequin/scale model to check the scale of your asset. Below you can see the Unreal Engine mannequin static mesh in Maya.
And the last thing I wanted to mention is when I work with multiple view image planes I use a simple script that I modified to work in a way that makes it easy to switch X-Ray mode in all 4 viewports at the same time. Feel free to use it.
Moving onto high poly modeling. This stage took the most amount of time. When approaching high poly always ask yourself – will this asset be in cinematics/does it have to be future proof? If yes, then make sure to spend a lot of time on your high poly, putting in the details and taking care of topology to a healthy extent. If not, then you know you can add a lot of height/normal information in Substance Painter so you don’t have to do so much modeling. I went for the first option because getting better at modeling was one of my goals.
When approaching high poly modeling you have to use the good old basic rule like in any art discipline – start with large shapes first, once they are refined – then add the details. Another good habit is to break complex parts into simple ones. And always remember to keep in mind the low poly so you do less work down the road. Some people use the Crease tool a lot, but I prefer to work with bevels and keep duplicates of the mesh for easier low poly adaptation. When you look at this engine cylinder head it’s not that complex.
To tackle more complex shapes, like this carburetor intake body, I start with separate primitives, then I use the Multi-Cut tool to slice a precise loop at the intersection where I would weld the vertices of the meshes together. Once they are welded and unnecessary faces are removed - only then I would proceed to add more loops, bevels, and details.
The engine itself also consists of very simple shapes once it’s taken apart.
One trick I learned is to use a mesh instance in the Duplicate Special tool. This allows you to work on a mesh in the center of the grid utilizing easy world space symmetry. I keep the instance on my second monitor (separate viewport camera) so I can fully focus on the world-centered mesh on my main screen while seeing an Instance mesh placed at odd angles on the bike. This way you don’t have to work with odd angles and constantly set a custom pivot.
When it comes to working with tires, brakes, or any other circular meshes I usually blockout an easy part of a pattern to make sure it’s seamless, then I try to simplify this into a section, work on the pattern of that section, and then once it’s done simply duplicate, rotate and repeat (Shift+D) to complete the circle, after which I just combine the meshes and merge the vertices. I keep a simple disc as a utility mesh so if I lose the perfectly centered pivot of my section I can always pivot it again. In the example below I know in my whole tire I had 40 sections, so if I divide 360 degrees by 40, I would get 9 degrees per section, and I would rotate this section every 9 degrees around the center pivot.
A similar approach to geometric tiling is used when making something repeatable like the radiator fins. It’s always simple shapes to start with, no need to overcomplicate things. Feel free to use deforms or even a soft select to get what you need.
And how about simple air filter bellows?
In this case, I use the method of beveling and extruding in or out every other edge, and the Nitropoly plugin is my absolute favorite tool when it comes to this. This plugin is free, but please consider donating to the developer, it’s worth it.
To mention some other tools I used: ModIt and PlugIt by Wizix. You can certainly live without these tools by creating your own library of hardware to snap onto a surface, but since I bought the tools a while ago on sale and I wanted to save some time – it made perfect sense. Hats off to Wizix for making this stuff!
Lastly, to model all the cables I used the good old EP Curves. You can find plenty of tutorials on how to use these in various ways. My favorite way is to keep my meshes straight for easy UVing, duplicate them, and use Warp Deformer with the curves.
Low Poly and Retopology
Retopology was both easy and hard at the same time. The easy factor was that you could easily use primitives like cylinders for a lot of the parts or simply remove the bevel edge loops from the high poly. For more complex parts, like the engine block, I used the Quad Draw tool to keep it very low.
The hard part was the optimization. My mentor, Jason Gullion, encouraged me to get to the lower tri counts since this is a game asset. It was really hard to reach a compromise since a lot of the motorcycle parts were silhouette-dependent, but Jason took the time to help me understand this better. The general guidelines on what to bake down VS what to leave as geometry is to simply ask yourself: will it affect the silhouette? If yes, then you probably want to leave the geometry. I use the "7" Hotkey in Maya to quickly check my silhouettes in the viewport.
However, things are not always as straightforward. For example, what do you do when you have an internal silhouette dilemma? This means when you press "7", you won’t see this geometry silhouette, but when looking at it in the normal shaded mode you can see the difference with background parts. When looking at the horizontal engine details below, they clearly break the silhouette with the background oil cap. In a case like this, you should ask yourself whether the camera would come close from this angle in a game or your presentation. If yes, then you should keep some form of geometry in your low poly.
For smaller parts, like the brake discs, I had to resort to Alpha Transparency bakes and masking in shader later. It was well worth it because I saved thousands of tris using this method just on that single disc. I would not do the same with larger openings because I wanted to keep the high quality.
I would say creating low polys is more of a mentality than skill. Don’t skip a mesh if you know there are tris you can save on it. Always optimize because cumulatively this will make a huge difference in the end. Before I grasped that concept my low poly was in the 90k tris range. After adjustments, I was able to get it down to 69k.
When it comes to UVs, doing a good packing job on a heroic asset is essential. This is because in games, performance benchmarks need to be considered and there is no luxury of UDIMs. Here’s how I approached the UVs.
I unwrapped every single mesh and kept it out of the 0 to 1 UV space. It is important to try and have as many shells straightened as possible to get the best bakes and to avoid pixelation. I learned it from this 80.lv interview with Aleksandar Danilovac.
In my opinion, this process is best to be dealt with in Headus UV Layout where you can simply press "R" while hovering over a shell and Headus will straighten it automatically no matter how complex it is, as opposed to Maya. Tackling complex assets is really fast and easy in Headus and I highly recommend it. In general, I save 50% of my UVing time thanks to Headus.
You can also run the Optimize and Pack features for a certain amount of time for all the shells: the software will do it all automatically with multiple iterations over time, while you can just relax.
Though for this heroic asset, I used more of a manual approach. Back in Maya, I used the straightened shells to outline the 0 to 1 UV space and then manually fill in the rest of the puzzle. It takes time, but in the end, it was worth it.
When UVing I kept in mind the texel density – all my shells were uniformly set to 10.24 pixels per centimeter at 2K map size. The only odd shells were the cockpit shells - I almost doubled the texel density for them, thinking about riding this bike in an FPS game where the cockpit will be really close to the camera. I split the model into 2 texture sets. The first covers the engine, the dash/cockpit, the radiator and the fuel tank. The other map covers the rest, which is the drivetrain and the suspension.
Last couple of words about UVs. Make sure to refer to the charts correlating the map size and the pixel distance between the shells. It is important to keep the proper shell padding to avoid artifacts when the game engine will mipmap the textures. You can use Maya’s pixel distance measuring tool to measure between 2 UV points.
In Maya, all the parts had to be carefully named and placed in their own baking groups with proper suffixes _low and _high. This is the standard pipeline these days as opposed to the older method of "exploding" the asset to avoid baking artifacts. All the low poly parts are combined into the main low poly group and exported as FBX with a low poly suffix as well. The same goes for the high poly.
The high poly also has different materials assigned to different meshes for the Material ID bake. This is simply to use quick and easy masks in Substance Painter.
All the baking was done in Marmoset Toolbag. I love baking in that software, because of its versatility and the ability to quickly fix the cage and skew issues. In case you are wondering why there are some parts farther away from the main body, it’s because I baked the AO ignoring the baking groups, so I did not want it to affect some parts of the bike, due to mirroring them in the future.
Texturing was the most enjoyable part of the process for me, seeing the model actually come to life in a sense. The first thing you want to do in Substance Painter is to enable the ACES LUT made by Brian Leleux. You can download it here with the installation instructions included. This will give you a better idea of how your textures will look like in Unreal Engine.
When it came to texturing the headlight, I had to use 2 baked normal maps (concave and convex) and paint in normals in SP. The reason behind this is so that you can mask the normals in a way that the refraction shader will bend the light in different directions. I learned it from this tutorial by Andrii Mykhailov and I highly recommend it.
You don’t have to use opacity with this texturing method, but I wanted to see how it behaved in SP because later on, I wanted to apply a custom shader in Unreal Engine.
Texturing is always a matter of layering and checking the references. I looked at dirt and dust patterns on tires, as well as the chunky texture of rubber micro-tears. Of course, you can only go so far with game resolution textures.
In my texturing process, I usually start with a smart mask, then put tileable grunge in a subtract mode to break up the procedural look. After that, I apply warp and/or sharpen filters, and if it’s not enough I would then paint in details manually.
When it came to adding tire side labels I imported some alphas and thanks to straightened tire UV shells it was very easy to add in the 2D view mode in SP.
For metal and painted surfaces, I use the same approach with masking, subtracting, and applying filters. I looked at my own bike photos to see the stone chipping patterns. For these, I imported my own alphas and painted in one mask manually. Another thing is the paint on the engine is different, it’s powder-coated. Luckily Substance Painter has a ready filter for this.
For the welding seams, Substance Painter has a dedicated brush and you can find plenty of tutorials on how to use it best. Once again, this process is all about layering – from plain large to smaller details.
Part of creating a digital asset is learning how it works in real life. It is true for both modeling and texturing. I know that carburetors tend to get grimy because filters need to be oiled.
Substance Painter filter finishes are great for working with plastic and rubber surfaces as well.
When working with assets in Painter I usually place my export masks (for shaders) at the very top. Above it, I leave a PBR checking layer in passthrough mode to check my PBR values.
With experience, you will less likely need this, but it’s always good to double-check if you are within range. This is to ensure your asset will look physically correct in any lighting conditions. I used the 30 sRGB threshold setting in this filter.
I used MT4 for my main beauty shots and breakdowns. This is the first time I used the new MT and I have to say I like it a lot. Marmoset Toolbag 4 comes with a really good library of HDRIs and textures. I only had to model simple geo for the background and then applied the M4 library textures, since I knew the background would be blurry anyways.
I imported the bike in different stances, as well as the high poly and the deconstructed version, then hid them and worked with the cameras and lighting. After setting up the shots and naming the cameras I made separate lighting for each of the cameras and named the folders accordingly. Locking them is valuable so that you don’t disturb them accidentally.
When I worked with my main shot and the video, I placed my lighting rig on a turntable to find the best angles. Using ray tracing is pretty straightforward and Marmoset’s tutorials are more than enough to understand how things work. This is a great way to show off all the reflective surfaces of your asset and enhance your presentation.
One of the limitations of MT, as opposed to Unreal Engine, is that you actually need to know HLSL/GLSL to create your custom shaders. So because of that, I had to also import the second set of geometry for the clear coat. Marmoset Toolbag 4 actually has a good preset to create a clear coat effect, but it did not work with my texturing setup and single geo, which was intended for Unreal Engine in the first place.
The scene setup in Unreal Engine was largely dictated by my Bike Shed MC project. The back area of the shop with the bike display was actually made up and was not part of the real-life Bike Shed reference. I wanted to go with something that would fit the original black and yellow colors so a light wooden display was a good choice to contrast the dark bike.
When it came to lighting, I used mostly big light sources. I learned a bit about this process in this 80.lv interview with Ronan Mahon. Long story short – vehicles are just giant chrome balls, so you want as much lighting on them as possible, preferably hitting the grazing angles similar to a classic 3 point setup. I also set up rear lighting to get those contours.
When talking about shaders, Unreal Engine has a huge edge in this matter. Without knowing how to code you can get some impressive effects with the nodes. Here is an example of the headlight with and without the refractive shader setup. The opacity in the shader lets the emissive light pass through, and the refraction, using the normals, scatters and bends the light nicely.
And of course, the biggest thing was to figure out the car paint shader that introduces the second normal layer.
When I was researching how to make this shader I watched this presentation by Epic Games on rendering techniques for McLaren. After watching this I downloaded the free Automotive Material pack made by Epic Games and studied their beautiful annotated graphs.
This allowed me to reverse engineer the shader and apply it to my texturing setup. I used my mask from Substance Painter to blend the materials at the end of the graph to separate painted surfaces from the rest of the bike.
Scope. Scope. Scope. If you made it this far, you already know the scope is one of the biggest challenges of any project. Never underestimate it. Especially when researching, and always leave extra time in your estimation on top of what you think it might take you and be honest with yourself.
It’s hard to say how long it took me to make this because I was working on my main Bike Shed MC scene at the same time and I reiterated in passes a lot going back and forth between different elements. I also had the drivetrain high poly modeled by the time I started the project and the bulk of the work was completed throughout the Advanced term at Think Tank Online. Roughly, I would say it took me just a bit over 2 weeks.
Advice to Beginners
I would recommend 3 things. First of all, start with smaller and simpler props to grasp the basics of modeling, UVing, baking, and texturing. Once you are comfortable, tackle a bigger project, but pick a topic you are really passionate about because it might take a long time to complete, and you will need that passion to push through complexity.
Get yourself a mentor to help you guide you through your process. I am grateful to my Think Tank mentor Jason Guillion for guiding me through the different aspects of this project.
Have some fun with it! Enjoy the process and the result. And always go the extra mile with your presentation and beyond. Here is me having fun with a possible future scene collaboration. Thanks to Perry Leijten and Mio Zwickl this bike is now rigged and game-ready. The posed character was made by Mio and rigged by Perry as well.