Making a Real-Time Controller in MoI 3D, ZBrush & UE4

Robin Mariančík has told us about the working process behind the TRNTL Controller project, shared the tools he used for retopology, and spoke about what setup would be more effective while lighting.


Hello, my name is Robin, and I am currently in my last year of college in Ostrava. For most of my life, I have been studying graphics and illustration, but approximately 3 years ago I got a chance to create my first game-ready model and instantly fell in love with 3D graphics. Since then, I have been working hard on improving my skills and gaining as much knowledge as possible. A lot of the knowledge I have accumulated over these years came from a Romanian AAA character artist named Georgian Avasilcutei (Nimlot26). He has been actively streaming his whole process on Twitch and making it possible for people to learn from him.

Getting Started

Picking a modeling reference is the easy part, in general. It is good to pick things that are quite complex and will challenge your skills. In my case, it was a concept from an artist called Yongs I stumbled upon on Pinterest. Shortly before starting this model, I began learning MoI 3D. This software provides an excellent way to create complex hard-surface shapes with ease, eliminates the need to worry about topology, and gives you the ability to focus solely on modeling. And as I wanted to learn this software more in-depth, I decided to make the model there. 

Modeling in MoI 3D

I started the model with a very simple block out of basic proportions. Then I kept on refining the shapes and adding other elements while closely observing the reference. It is quite important not to start filleting too soon. A lot of the time you realize you may have missed a detail, or you need to edit a part of your model. If that part is already filleted it may be hard to do the necessary operation and, in some cases, you need to model the whole part over again. For that reason, I do fillets for most parts as the last step.

From a simple block out to a more detailed version

If I know I am about to do an operation that I am not so sure is going to be final, I like to save that particular part for later (just in case I would want to go back to it). I do that by duplicating the part over somewhere else and then I apply a unique color to it that I am not using for the main model. This allows me to quickly show and hide these “saved for later” parts in the Styles menu.

Orange parts = “saved for later”

Filleting some more complex, or rather more organic shapes can provide to be difficult. Although with experience you will learn what kind of shapes work well with fillets, sometimes it just won’t work, and it is best not to waste your time fixing it and instead do the fillets later in ZBrush. As an example, I will show a different model I have been working on, where the combined shapes were intersecting in weird ways or were too close to each other and it would have been difficult to fillet them. I proceeded to keep this part as it is and made the fillet in ZBrush.

In retrospect, as I was trying to make all the fillets on the controller in MoI 3D, I spent a lot of time making things work and could have saved some time if I were to leave the fillets for ZBrush. On the other hand, this experience taught me how the fillets behave under certain circumstances, which allows me to avoid any problems beforehand. (For context, I finished this controller approximately half a year ago, so I gathered even more experience in MoI 3D between now and then).

The beige part would be too difficult, if not impossible to fillet so I kept it as it is

Working with ZBrush

Exporting from MoI 3D is simple, first, you need to select all the parts you want to export and then export them under file>export as an OBJ. After you name the object and click save, a meshing options menu will pop up. I usually keep the angle at a default value and change the "Divide larger than" to 0.1 or 0.05. MoI 3D will give you a very nice live preview of how the exported mesh will look, lower values of "Divide larger than" will give you more polygons. I usually try to find the lowest number of polygons that will give me enough roundness to support the DynaMeshing process in ZBrush.  

Export options

Because I knew my computer would not be able to handle the whole model in one ZBrush scene, I split it into 5 different files. When you import the file into ZBrush you get one sub-tool, where each element has its own poly-group. First, I usually select all the small parts (like screws) I'm not sculpting on and separate them into their own sub-tool.

After that, I pair the usually bigger parts with smaller details into one sub-tool and parts that are similar in size and detail to a different sub-tool. In other words, I want to DynaMesh as many parts in one go as I can, and because some parts require higher amounts of polygons to support their details and some more simple ones do not need as many, I split them accordingly.

When DynaMeshing multiple elements in one go it is important to turn on the "groups" option, so they will not fuse into one mesh. I start the DynaMeshing process with lower a number (around 500) and if the resolution is not enough, I go back with ctrl+z, increase the number and repeat until I get a good resolution. When the resolution is good enough to support all the details, I smooth the object with the Polish option you can find in the Deformation pallete.

By using lower amounts of polish, you eliminate the polygonal look that often tends to reside after the DynaMeshing process. In the case of an object that did not have any fillets, it is possible to create them by using the polish function paired with the morph target feature. I do this process for all the parts I will be sculpting on. And if the final scene is too heavy for your computer, as it was in my case, it is a good idea to use subdivision levels.

High poly with applied polypaint

To convert the object into subdivision levels you need to duplicate the given object, ZRemesh it to the smallest number of polygons possible, and then keep using the projection feature, while increasing the subdivision levels to the desired amount (you can find the projection feature under sub-tool pallete>project>project all).

When sculpting on hard surface models, I like to make things slightly crooked and break the evenness of edges to make the object feel less artificial. I also think about what materials the object should be made of and sculpt the damage accordingly. For example, softer materials like rubber would be easier to damage and they would have more dents in them than hard plastic.

After I am done with the sculpting, I apply polypaint with all the different materials I plan to use. This will later be useful during texturing. Something I did not do with this model, that hurt me later was applying the correct names to all the sub-tools. I found out only a few models later that it is optimal to name everything correctly and let Marmoset match high and low poly automatically. 

What I do now is separate all the objects I know will be made into a single low poly mesh and give them a unique name with a “_high” suffix, for example, NiceName_high. If there are multiple different sub-tools that will be used to bake into a single low poly model, it is not necessary to merge them into one sub-tool and you can instead just give them an identical name. After I name everything, I export the object as an FBX. 

Finished retopo for the controller’s body


For retopology, I used Topogun 3 beta. For most of the process, I used the creation tool and made polygons manually. It is good to start simple and keep on adding more loops as you go so it is easier to maintain even topology. One very useful feature for the hard surfaces is the extrude tool paired together with the circle tool. This way you can create cylindrical shapes with ease. This can be also used for uneven shapes. You just need to create the extruded part manually.

Because I knew I was going to use this model in a small UE4 scene and as a portfolio piece I wanted to keep the polycount high enough for closeups, but at a reasonable amount so it would not be too heavy for the UE4 scene. For that reason, before finishing the retopology I did a quick bake test to see whether the silhouettes were smooth enough to support closeups and edited the model accordingly.

When I am finished with retopology, I assign all the corresponding names of the low poly parts to their high poly counterparts but with the “_low” suffix. I export all the individual low poly objects and import them in 3ds Max, where I export them again into a single FBX file, which I use later for UVs and baking.

Naming example (from a different project)


For UVs, I use RizomUV, which allows me to create UVs very quickly and saves me from a lot of headaches. In general, I try to use the lowest number of cuts possible, while keeping the stretching reasonable. A little amount of stretching is not a problem and in retrospect, I could have made fewer cuts even in this model as the stretching would not have increased too much.

Baking and Texturing in Marmoset Toolbag 4

If all the high poly and low poly names are matching, it is possible to use the Quick Loader feature, which automatically puts everything into separate baking groups. In the baking project settings, I like to max out the samples to 64x for all the maps except for vertex color. For vertex color, which is used as a Material ID map it is important to lower the samples to 1x. If we were to bake it with higher samples, it would mix different edges of different colors together and it would not work as a good mask.

As I have been using Marmoset for baking even back when I was using Substance 3D Painter for texturing, I decided to give a try to their texturing features when they released Marmoset Toolbag 4. The workflow is very similar to SP, all the principles are the same and it is very easy to pick it up if you have experience with SP.

There are some features I am missing from Substance 3D Painter, which I am sure will eventually be added, but the main reason I like Marmoset over painter is the consistency of look between Marmoset and UE4. When I import my assets in UE4, they look the same as they looked in the Marmoset viewport and I do not need to do any further tweaking.

There is also the option to switch the viewport quality to fast, which makes painting in 4k incredibly responsive, for the cost of slower switching between different layers, which is a good trade-off for me.

RizomUV UV’s

Final Presentation

The presentation is my favorite part. I remember rendering nicely beveled cubes for fun in Blender back in the days just because I liked playing with lights and making things look nice. In terms of lighting, the most common setup is usually the most effective. Use a key light that will be the main source creating nice shadows, fill light to make the shadows a little bit brighter, and rim light to make the model pop out. I often see beginners not using the diameter parameter, which will make the shadows nice and soft. Then it is all about rotating the scene and trying to find lighting scenarios you like. Do not be afraid to experiment.

For the camera, there are a couple of settings I like to tweak. The first one is a field of view. I really like the telephoto lens look, so I tend to keep this number fairly low, usually between 10-20. The next is the depth of field, which will help add realism to your renders, and even a slight blur will do the trick. Real-life cameras are not perfect and have certain types of distortions, one very well known is chromatic aberration, I keep this value at 0.06, which has worked well for my renders. Because I use my models in UE4, I use the ACES tone map, but sometimes I also like to use Hejl, which is not as contrasty. And lastly, very small amounts of sharpening, bloom, vignette, and grain can help finalize the look.

Lighting setup


This project took me approximately one month and a half from start to finish, while the hours I was working on it were quite variable, so it is hard to gauge the real-time it took me. But as this was pretty much the first model, I created with this pipeline, I made a lot of mistakes that slowed me down. Making mistakes is natural and you should not be afraid to make them as it is what makes you grow. It is also important to take your time when learning and try not to rush things as, in my experience, you will learn most this way. 

If you want to learn any of the software I mentioned above, here are some useful links:

Robin Mariančík, 3D Artist

Interview conducted by Arti Burton

Join discussion

Comments 0

    You might also like

    We need your consent

    We use cookies on this website to make your browsing experience better. By using the site you agree to our use of cookies.Learn more