There are AwesomeBump that is written in QT and do not require .NET Framework and has code open.
Интересно, не понятно зачем, но круто. Я бы хотел поучаствовать в проекте
Already have ndo, b2m, knald, and others.. Why another one?
Taras Andrushkiv did an incredible breakdown of the 3D gun production from start to end and shared the tricks he learned during Alexander Boluzhenkov‘s course. Work Organization, 3ds Max workflow and useful scripts, booleans, high and low poly approaches, UVs, textures and rendering in UE4 – in one word, a must-read.
Hello, my name is Taras Andrushkiv, I from Ukraine, currently living in Portugal. I’ve always been a big fan of video games and my dream was working on interesting projects as a 3D artist. This was the reason why I graduated as a game designer. After I finished college I received a job offer from a Portuguese company to work as a 3D designer and I decided to give it a try. I have worked for this company for more than 1 year. During this time I had an opportunity to work on several really interesting and challenging projects like autonomous transport, exoskeleton and other projects that involved 3D printing and photogrammetry. Over time I realized that I really wanted to work in the video game industry so I decided to change the career back to it and this was the main reason why I have taken Alexander Boluzhenkov‘s course. Now I am looking for a job in the game industry as a weapon/prop artist and still working on my portfolio.
In this interview, I will talk about Alexander’s course in general and describe the process of the gun creation based on Joshua Cotter’s concept. Let’s start.
I have some 3D modeling experience but it’s not connected with video game industry, so I was looking for a mentorship in this area to learn the full pipeline from a professional who has worked on multiple AAA projects. Before I have taken the course I saw some Alexander’s streams and learned a lot just form them. So I took this course without hesitation and my expectations were big.
During the course, Alexander shared a lot of knowledge. I keep reviewing the classes because it was impossible to absorb that amount of information at once. He showed the full process of a 3D game-ready asset creation from organizing the project and searching for references to the integration of the 3D model into Unreal Engine. The pipeline Alexander teaches during the course is “painless”. It is flexible and allows you to come back and apply changes to the model whenever you need without losing too much time. He talks not only about the technical process but also teaches how to motivate, discipline and organize yourself. Usually, artists never talk about such things, but in my opinion, they are as important as technical knowledge or even more. In addition to the topics I’ve already mentioned, Alexander also talks about freelance and working in the company, the principal differences between them and answers the question of the century – how to price your work correctly. A big advantage of this course is that Alexander continues supporting you even after studying is over.
The course surpassed all my expectations, and I’d say it is worth every penny you spend.
Motivation vs Productivity
I would like to share with you a few things that I learned during the course and adapted. They work for me and maybe can work for you, too.
First of all, do not use motivation as a condition necessary to start working. Motivation is a temporary state, and it is impossible to stay motivated 24/7/365. To get work done disciple yourself. Yes, it is painful in the beginning but if you want to be productive, you don’t have any other ways. Use a calendar and a time tracker to organize your day and work. I personally use Google Calendar in combination with the Todoist. To track my work time I use Toggl which is a powerful tool because it allows you both to see how much time you spend on one project and analyze how much time you spend on every step of this project. This way you can understand where you’ve spent too much time and improve in this area. To point out useful ideas, books, tutorials and links I use Google Keep.
These applications are free and suitable for different platforms, so you can use them on any device. Try to use these things during 1 project or a month and you will notice how your productivity increases drastically.
I started my work by creating the project folder and folders for each step.
In the 3D model folder, I have folders for the blockout, high and low poly, and references.
In Substance Painter folder I have one more folder for references that I use during the texturing process.
It is especially important to maintain your project organized when you are working in a team. When you pass your project to someone else this person will thank you.
Next, I analyzed the main references dividing them into groups. I did it to better understand the shapes, silhouette, scales, how the details are distributed, etc.
Only after these two steps I started looking for some additional interesting references and created the reference board. I used references from the real life, video games, and concepts. Using references from both worlds, real and digital, in some way can help you to find the balance between functionality and design. To organize all my references I used PureRef.
All the modeling process was done inside 3ds Max, and I used some scripts that helped me to speed the work up. I will talk about them while I’m describing the process.
After I had my project organized and all the references gathered, I started creating the blockout. This step is one of the most important steps because at this point you define the main shape of your object. If you fail and notice a mistake too late, you will waste too much time on solving it. So take your time, be careful and spend “5 minutes more” in order to save hours of hard work. I tried to make the blockout in one mesh and then divide it into large, medium and small parts. This way you can save some time because when you smooth the parts you will have the same distance between them. Otherwise, you’ll have to adjust that distance in the future.
I continued working on the blockout adding more and more details to the model. To make some of the details and cut holes I have used booleans. ProBoolean in 3ds Max is a very powerful tool that can save you many times. There’s also live boolean which you can use by changing the pick option from ‘move’ to ‘instance’. It’s important that the mesh you pick is editable poly as in this mode you will edit and move the mesh.
If you want to save your topology, go to advanced options of ProBoolean and change Planar Edge Removal parameter from ‘Remove All’ to ‘No Edge Removal’.
The main tips I can give you here are the following:
- Go from big shapes to small
- Detail all the parts gradually
- Use the tools that your software solution offers you to speed up the modeling process
- Don’t be afraid to use the booleans
- Create custom hotkeys, at least for the actions you use the most
- Do not forget to save your project incrementally
- Analyze your main reference and if you see repeated elements, create a kitbash
After I had my final blockout I started to slowly transform it to high poly and add small details. The concept I’ve chosen was in perspective so several details were invisible. To model and detail the parts I tried to understand Joshua’s design choices and not to destroy the flow of the design.
To make my high poly model, in most of the cases I used the technique of 2 turbosmooth in a stack. The first one divided the model by smoothing groups and the second one smoothed it.
I saw this technique on Simon Fuchs’s Gumroad. He has some short but really cool tutorials that cost between 0-2$ where he shows crazy tips and tricks. Take a look at his page, he has very cool stuff there. Simon also provides 2 scripts that you can use as custom buttons on your toolbar. These scripts allow you to add and remove 2 turbosmooth with the correct settings just with one click.
When I am not sure about the design choices I try to create several versions of the same object and then choose one of them. I do not delete the remaining objects and save them in a separate layer called recovery. In the same layer, I save all other parts before making crucial choices and use this layer as a backup.
In this part, I can advise you to play with the sharpness of the edges of your objects. This way you can show to the viewer the material of the objects without any textures, and that is super important. Usually, metal parts have more sharpness, plastic has less and rubber’s sharpness will be even smaller.
When making low poly, for some parts I used the same technique as in the blockout. I started defining the main shape and then adding the details until I was happy with the polycount of the objects. This way I got my low poly really fast. Another advantage of this technique is that I had much control over the polycount. For other parts, I just deleted the turbosmooths modifiers and cleaned up the blockout. If you are making a 3D model for your portfolio you can increase the polycount a bit to achieve a more smoothed result.
Here are the scripts I haven’t mentioned but used a lot during the modeling process:
- Pivot script made by Christian Russeler. With this script, you can align pivot to the selected vertex, the center of the selected edge or face, or the center of the object. Also, it allows you to get a pivot from another object.
- Rappatools that give you a set of useful scripts to optimize and speed up your modeling process
I had two texture maps. The first one is for the gun and the second one is for all the attachments. To save UV space I scaled down inner UV parts as well as hidden ones. Some other were overlapped. The more UV space you have, the bigger UV island can be and the better resolution you can have. It means more details will be visible. That why it is so important to save UV space.
During UV mapping I followed some rules. First, I always align UV islands horizontally or vertically and keep UV borders straight when it is possible. These things help me to avoid a jugged result on the edges when I bake the maps. When I am done with UVs, I apply one smoothing group to each UV island. To do this, I use texTool. This tool gives you the possibility to do it just with 3 clicks, and you don’t waste your time in assigning unique smoothing groups to each UV island by hands.
To bake the maps, I used Substance Designer. If you bake your normal map without a cage, it’s important to have 2 low poly models. The first one is just a regular low poly and the second will be needed to tesselate before exporting it. Use the tesselated low poly to bake the normal map and then apply the baked map to you regular low poly. This will help you to avoid some problems with the normal map. Big thanks to Leonardo Iezzi for sharing this technique. Another important thing is when you bake your AO map you need to be sure that the moving parts are not baked with non-moving ones.
Before I started the texturing process I searched for references from the real and virtual worlds. I used references from the video games to understand what result I want to have after in the end.
After the reference board was completed I started to texture the weapon. I always use a black fill layer as a base for all the objects. Then, I create basic materials for each part and start adding details to each material separately. I work in this way because it is easier for me to understand how each texture looks with the rest of the materials.
Let’s talk about a specific case: I will show you how I textured my grip step-by-step. I like to work from bottom to top, so my first step was creating the base material. In this case, it was clean black plastic. On top of this plastic, I added a blue paint layer and a bump layer. A basic plastic material for the grip is created. After that, I started to add some scratches to the blue layer in order to show that the blue color is just a tint and under it, there is black plastic. For that, I used two generators as a base. On top of the generators, I added the paint layer to be able to add or subtract details where I needed. I added wear on the edges, damage and more wear on the parts where the palm and fingers touch the grip. To create the wear effect I used a fill layer with a grunge map inside. After that, I added a little bit of the dust, not too much because I add more dust and dirt on the gun when the materials are ready. I add fingerprints and decals and, finally, (as I’ve just mentioned) more dust and dirt on all the parts. I also like to add a sharpen layer on top to bring more details.
Grip (left) & Gun (right) Materials:
To create almost all the decals I used the basic alphas from Substance Painter. Photoshop was only used for the black decal with the info.
In this part, I’d advise you to again maintain your project organized. If you export your textures to UE4 your colors can’t be brighter than 240 and darker than 40, so try to play between that values. When you import your textures to Unreal you will notice that you objects look different than in Substance Painter. To avoid this issue, use the custom Substance Painter LUT created by Brian Leleux.
I decided to do rendering in Unreal for two reasons. First, I was working on a game-ready weapon so it made more sense to present it in a game engine.
The second reason was that sometimes you can have issues that will be visible only in a game engine. That happened in my case. When I was baking maps I did fast tests inside Marmoset. Everything looked good so I continued to bake other maps and textured the model. During the texturing process, I decided to test the model inside Unreal to see how it looks and there I saw some shading problems. To solve that issue I had to redo some of the UVs, pack them and bake the maps again. As a result, I lost too much time. This was probably my biggest mistake during this project, however, it didn’t upset me. This is experience and only in such a way we can learn and level up.
Let’s get closer to rendering. I should say that this was my first time working with Unreal and I used really basic workflow, so do not expect any magic techniques from me. Some of the tips and tricks I have actually learned from 80lv articles:
First, I again created folders for the project, model, textures and shaders. Remember that keeping everything organized will save you time. After the textures are imported into Unreal you need to change some parameters. Go to the level of detail and change Mip Gen Settings from ‘TextureGroup’ to ‘NoMipmaps’. After you change that you will always see the textures with the resolution you have exported from Substance Painter.
You also need to uncheck sRGB on your ORM texture. If you don’t do that your textures will look weird.
Shaders for non-transparent objects are simple. I connected them to the right places and that’s it.
Shaders for the gun magazine and scope are simple, too. I changed the Blend Mode from ‘Opaque’ to ‘Translucent’ and Lighting Mode from ‘Volumetric NonDirectional’ to ‘Surface ForwardShading’.
There are also some other nodes just to have control on color and opacity level.
Scope glass (left) and Magazine (right) shaders:
I converted the nodes that give control over the opacity and color to parameters and then created a material instance. This way I could change the parameters in real time.
For lighting, I used some old images of Cyberpunk 2077 teaser as an inspiration. I wanted to have a contrasting render with mainly red and orange colors.
To achieve this result, I used tried several HDRIs and played with brightness and contrast values. HDRI was used just as a base. Then I add more lights, usually starting with standard three-point lighting setup as a base and then modify it. During the lighting process, I try to create highlights on the edges of the details which bring depth to the object and separate the mesh from the background.
UE4: Color Grading & Cameras
When I was happy with the lighting I started to play with color grading. I changed the color of lights, added some effects like grain and particles. For the camera, I use a field of view 35. I thinks it works pretty well for props and guns. In order not to lose time, I created a camera for each view I liked. As a result, for the render, I just needed to jump between the cameras and choose the views that worked the best. What’s important, I turn some lights on and off depending on the camera position, and for each camera, I have different sets of lighting.
If you have any question, feel free to email me (firstname.lastname@example.org) or contact via Facebook/ArtStation! I appreciate every kind of feedback. Thanks for reading this breakdown, and I hope you liked it. And of course, big thanks to 80lv for the interview.
Taras Andrushkiv, 3D Artist
Interview conducted by Kirill Tokarev