And why it is NOT ideal to use Hard Edges Only
If you are going to create a game-ready asset, then you should be aware of a major issue when using hard edges on your low-poly model. A hard edge is basically a non-beveled edge. No chamfering at all, no bevel at all. See the screenshot below, a 3d geo from the front fender of a car. That geo contains just hard edges.
To resolve the facetting, we are applying smooth shading or smoothing groups to the Normals. Smoothing Groups inside 3dsmax. When using Blender we can select the edges we would like to sharpen (Edit Mode (Press Tab), Select Edges, Ctrl+E, Mark Sharp). Maya, C4D, etc. every tool has its own feature. The screenshot below is from Blender, selecting the sharp edges.
As we can see, we can identify which edges we would like to sharpen. Everything else will be smoothed, depending on the Smoothing Angle.
Important to mention: Next step would be the unwrapping process. And once the unwrapping is done, we could import the model into Substance Painter or Marmoset Toolbag to start our baking and texturing process. Attention and mark my words. If you would consider after your unwrapping process a high-resolution model for baking, you’ll have a major problem.
Stay tuned and keep reading what the 3D Visualizer is talking about. I will explain that issue and demonstrate it with this example.
However, if your client is fine with the low-poly hard-edges on this model, you can be very happy and proceed with Substance Painter or Marmoset Toolbag.
The bake you are generating at this point is based on the low-poly hard edged model. We can call it our final optimized low-poly model. If everyone is happy with the edges, and the final appearance in your game engine, you can call it a day. Everyone is happy. Boom done.
What if you need to bake High Resolution Model?
But what if? What if someone is not happy with the edgy look and the facetted appearance? Somebody like me? lol; Often times your client might still get back to you as well, asking if it’s possible to smooth visible and noticeable hard edges, because they might look still to facetted. As we all know, smoothing Normals has it’s limitation.
That being said, what else can we do to resolve this? Ideally, we can start a new bake with a high-resolution model. First of all, you’ll have to create the high-resolution model. How you want to do this, well this is up to you.
Either you start modelling a second model that contains all the beveled edges with a much higher poly density. Or… you apply on your low-poly hard edge model a non destructive Subdivision Modifier. The choice is yours.
My choice is clear. Instead of modeling your object twice, it’s best to have one low-resolution model that can be also used with a Subdivision Surface Modifier. But will that do it? Is there anything else we would need to consider first on our low-poly mesh before we can start baking our high-resolution mesh?
The Problem when baking a high-resolution model on a hard edge low-poly model
As described above, and as Nike tells us to do. Let’s do it and let’s test it. Let’s import our low-poly model that only contains hard edges. And let’s also import our high-resolution model, that has 5-additional subdivisions applied. Note: On the high resolution model you can go crazy with polygons. Because you will not use that model within your game.
As higher you go, as more accuaracy you will have for your final bake. Doesn’t matter if you use Blender, Maya, Max, or even Zbrush with Millions of Polygons.
The result clearly shows the issue. It doesn’t matter if you are trying to resolve this issue with Substance Painter or Marmoset Toolbag. It doesn’t matter if you are using Diffusion to blur pixels on the edges of the Normals. Also a higher sampling for the Antialiasing will not resolve this problem. Because it’s not an antialiasing issue.
What a bummer. At this point, you have a major problem. The baking process will fail and can’t resolve this isse anymore.
The current baking software tools (Substance Painter, or Marmoset Toolbag) can’t handle bakes on hard edges that you wactually want to have smooth. If you run a bake on a hard edge, you can’t simulate a perfectly round beveled edge. As a result you’ll get artifacts and nasty seams that will impact the final look of your texture maps.
Most of the time, those bakes can’t be used. Because it will always impact your final textures. And therefore, the shader or material alone can’t fix it either.
Will you always see such seams from the distance? Or when you apply a ton of layers inside of Substance Painter? Dirt maps, etc.? Sure you can try to “blend” and resolve those issues with a bunch of blend layers. But you’ll never be able to get rid of them entirely, because it’s within your baked texture maps. So what’s the solution to this problem and how can we fix it?
Baking with Beveled Edges – One Segment Only
Now that we have discovered that issue. How can we resolve this problem? How to get clean bakes on hard edges? To resolve this issue, we need to add a bevel. One simple Bevel with one segment only will resolve the baking issue. Well, let’s have a look.
First of all, you need to decide very carefully what specific edges you would like to bevel. You don’t need to bevel all edges. Just the ones, that shouldn’t be 100% hard edges. In this case, I decided to select the following lines or edges.
The Blue lines show the edges I decided to bevel. IMPORTANT AND ATTENTION: Keep in mind. When I decided to bevel those edges, I am not bevelling the edges in the physical model. Instead, I am using a non-destructive workflow by using the Bevel modifier. This is very important. Because you can always go back to your hard edged model very easily and change the edges you would like to bevel or not.
Blender Bevel Modifier Settings
That being said. Let’s have a look using the Blender Bevel Modifier. Below you can see my Bevel Modifier settings. I use Edges and Weights. This allows you to select manually every single edge you want to apply a weight value between 0-1. The amount is the space or the width of the bevel. How thick you want to create your chamfer.
I only use 1 Segment. This one segment is the key for clean baking. Yes, you could even use more. But for performance purpose, I try to keep the poly amount as low as possible. And one segment only, does the trick.
When you use the bevel modifier, it’s easy to overlap intersections. To avoid those issues you can click Clamp Overlap. To get a better shading result, I also select Harden Normals.
The screenshot below shows the result after applying the Bevel Modifier with the settings above. As you can see, the Beveling is non-destructive on the selected edges only.
This is it when preparing the low-resolution mesh for baking with a high-resolution mesh. Of course, don’t forget you have the UVW’s unwrapped. And no overlapping UVW’s. Ohterwise you’ll run into other baking issues. And of course, all normals have to be oriented into the right direction. You can check this in Blender by pressing Viewport Overlays, Face Orientation.
Now it’s time to export the selected mesh. I use for this purpose an FBX file.
Preparing the High Resolution Mesh by adding a Subdivision Modifier and Crease
Well, we are still not done with Blender. Now it’s time to prepare the high resolution mesh. As I mentioned before, it makes sense to use a non destructive workflow. This way, you can always use your low-poly mesh to generate a high-resolution mesh.
The solution to that is a so called Subdivision Surface Modifier. You can add it to your mesh and also select different subdivision levels. However, don’t underestime this process. If you have a very complex model, it will take some serious time to select the proper edges.
We are still not done preparing the mesh for the final high-resolution bake. What? Even more needs to be done? That is right. The next step is to select edges that need to be creased. Keep in mind, the Crease operation only works for Subdivisions, while the Sharp operation only works on Normals.
Please also notice, that you need to select Use Creases and Use Custom Normals. If you don’t do that and you would export the high-resolution mesh, you will have again artifacts in the baking process. Especially not checking Custom Normals would cause baking artifacts.
Once everything is checked and ready for export. Simple select your mesh and export your high resolution model.
Substance Painter Baking with High Resolution Model
Now that we prepared both models and we exported both fbx files, it’s time to import first the low resolution model into Substance Painter. Keep in mind, when importing load now the low-res model that contains the beveled edges.
After the import, just bake the model itself, without having a high-resolution model loaded. I usually do this, just to check the bake. A clear bake indicates no UVW problems. Any visible artifacts are usually UVW issues.
The screenshot above also shows the wireframe overlay, so you can see the low-resolution model, but with the bevel of one segment applied.
You can still clearly see, that the edges are kinda sharp. Because it’s the low-resolution model. Talking about the shape of the fender, that should be actually round like a circle.
Now, let’s compare this result when baking with the High Resolution Mesh. See below the screenshot.
Now we got super smooth and nice round shapes on the normals. Below the same low-resolution model with the high-resolution bake. I assigned a high-reflective Material to see very clearly the difference.
We also got rid of the nasty jaggy edges. The artifacts we have been getting on the hard edges only. To showcase again the difference. Same snapshot with the basic white material assigned.
As you can see, if you ever decide to bake your low resolution mesh with a high-resolution mesh, it’s critical to assign one bevel segment to edges, that are not 100% sharp. You will slightly increase your total poly account in exchange for a better and cleaner bake, smooth and round edges, and overall a better and nicer render within your game.
Especially for Games on Mobile Devices and VR Games running on the Oculus Quest 2 it’s important to keep your poly count low. This non-destructive workflow seems to be an excellent way to get good looking results.
However, keep in mind that you don’t want to unwrap your model twice. That’s why you should now before your project starts, if you are going to bake with a high-resolution mesh or not. As we can see, If you are going to bake with a high-resolution mesh, you should add on the necessary edges custom bevels with one segment.
And if you decide to do that, you need to unwrap that model, and not the model with the hard edges. Otherwise, you would need to unwrap the model twice.
The choice is yours. My personl choice will always favor better looking graphics. However, when I was running tests for my Quest 2 Applications, I for sure optimized my base model and used only beveled edges where needed. VR has to perform steady without any drops in the FPS or the experience will end in motion sickness.
On the flipside. If I am going to launch a game with the latest Unreal Engine UE5, using Nanite and Lumen, I can use pretty heavy geomtry without any further consideration. In fact, I just created another Demo running my Mad Max Game with steady 90 FPS on my Nvidia RTX 2080 GPU by having millions of polygons in my game.
That being said. I hope this breakdown and explanation will help you for your personal use and further development of Real Time and runtime graphics and video games. That being said, stay safe and healthy and Happy Pixeling! Cheers!
Other Sources explaining the same issue:
Josh Gambrell did an amazing job explaing the same issue. How to create game ready bevels in Blender.