Great work and breakdown! Thanks for sharing :)
Thiago has escaped from a question about how is the policy in Blizzard :) Or it's just too short quote?
Please put head title as podcast!
After a short break, we’ve talked with Kimmo Kaunela about his most recent Desert Express scene and how he’s going to build a new game out of it.
I have worked with a few mobile game titles where I did 3D and UI work. We used Unity for those. For the last few months I have been working with a huge VR game at work. I’m responsible for all of the visual side of things and since it’s running in Unreal Engine I can use my knowledge that I have learned from my previous projects. VR is amazing platform but at the same time very challenging to work with because it needs to run smoothly all the time and things that work well with regular games might look very bad in VR.
I also started to learn more about UE4 blueprint system and so far that feels awesome. I don’t know how to write code at all but with blueprints I feel that I’m a programmer that can do basic gameplay features. It’s well integrated into the whole engine so I can use it to make different tools that help to make art faster.
This project was interesting to work with because I had a solid deadline and a good idea for the hero asset. I wanted to achieve good looking results but still wanted to keep it optimized because my plan was to use this project as a base for a game. Contest last around two months so I planned to use half of that time for making the car and half for environment and UE4 work. I also soon noticed that like 95% of other competitors used offline renderers like Vray so I needed to work very hard to get the results I needed to compete with them.
After collecting a lot of reference photos from the car and different desert locations (even shots from Mars) I started to think a backstory because I could only sent one render for this competition so it needed to tell that story well.
Then I started to make a level blockout and used the car to get better idea about scale. I also started to test different light setups in Unreal Engine. I ended up using fully dynamic lighting with a skylight and one directional light. I also used distance field ambient occlusion to have more shadowing on the large rocks.
For the rocks I tried a lot of different ways to see what would be the fastest way for me to get good results. I accidentally found a workflow where I modeled a bunch of different boxes and placed them in a way that I could block out interesting silhouettes. This is super-fast and you can make changes easily. Then I just exported them into ZBrush where I dynameshed them and started to smooth them a bit. Using flatten brush and trim dynamic brush I could make different blocky rock shapes very fast.
Car was the focal point for this project and I had a huge list of different things I wanted to add to it. Some of them were crazy like caterpillar tracks or huge missile on top of the roof. I just couldn’t get them to work with the back story so I decided to remove them from my list. I focused more on the modifications on top of the basic Ford Escort body. It’s pretty hard to even recognize it anymore because the huge modifications.
In this fictional world cars need to be able to move fast and have enough torque to move in different sand terrains so I wanted to add a hint that this car have power. What could show it better than a turbo that is so huge that someone had to cut a hole to the hood for it. Also everything is bolted tight so things will not break in battles. Front bumper is welded together from different parts and driver also put a skull there to show that you don’t want to mess with this car or it’s driver. There is also a huge gas tank in the back because driving distances are huge and going fast will drain a lot of fuel. Rear wheel drive with a lot of power means that rear wheels need to have a lot of traction and they need to be wide enough. Front wheels are going to be more optimized for steering.
Cars would also act as status symbols so different clans would paint cars their own way. This car belongs to a leader and there is a crown icon painted to the body. He or she also marked kills to the rear back side window panel. I also added some bullet holes around the car and few to the windshield. Because all of this viewer might start to think what happened to the driver.
I have modeled a lot of cars in my life and every time when I start to model one it feels exciting. I don’t like to model modern sport cars so I decided to model one of my favorite cars that is Ford Escort MKI.
It’s actually pretty simple to model cars. I first assigned some reference shots to planes in 3ds Max like front, side, rear and top. Then I just modeled the car using basic poly modeling and made sure it matched with all of the views so proportions were right. Symmetry modifier in 3ds Max is one of the best tools that I have came across in modeling apps. I used it a lot and since the subject was a car I didn’t have to think any asymmetry details at that stage. I modeled the base hi-poly car in max and then exported it into ZBrush where I sculpted final details. I also needed to model objects in a way that would allow me to open doors, rotate wheels etc…
I tried to approach this car like I would work with environments so I separated it different parts in a way that made sense. Body is the largest part of this car so that is handled as one big unique piece. All of the metal parts on the body would be another piece. Wheels that contains rims and tires are one and so on. This helps when making UVs because then you don’t have to fit the whole car into one texture and you can prioritize different parts. It’s not optimal to have one huge texture and if you want to make the car customizable then it would be a better idea to use more smaller textures. Body need to have bigger texture compared to wheels because there are much more area to cover. Metal parts can also share some of the texture space like pipes and bolts. It’s also easier to work with only certain parts at the same time and when sculpting final details you could really push a lot of polygons and details even on weaker systems. Also texturing is more straight forward this way since you don’t have to handle huge amount of different materials at a same time in Substance Designer or with other texturing tool.
For the tires I just modeled a long straight piece of tire. I made sure it looped right and then I just baked it down into height and normal maps. Then in Substance Designer I just add some damage details and sand that fills different parts of the tire profile. Final tires are just low-poly tubes that are unwrapped so that they are using that baked information and it works pretty well with just a normal and albedo maps. The key is to allow tire texture to loop in x-axis.
Almost all of the texturing is done inside Substance Designer. I would say everything except the flame pattern which I made in Photoshop. I just love to work with Substance Designer. It’s so fast to make textures with it from the scratch or use baked maps as a base. For this project I planned a lot what kind of materials do I need because I wanted to reuse different parts.
Since Substance Designer is all about procedural texturing I wanted to create a small library of different generic materials. I needed to have a generic metal that would have rust. I also needed sand, rubber, plastic and painted metal materials. Then I could use these as a sub graphs in my main graphs. When I made changes to the sand material then those same changes happened in every graphs that used that sand material and results were consistent. For some materials I exposed different parameters like for the painted metal I exposed paint color so then I could make the car blue but gas tank on the back orange and they both were still using the same sub graph.
I baked every map in Substance Designer since it’s super fast. In the past I used xNormal but it’s much easier to do everything in one app. Even though I tried to keep things clean and organized I ended up pretty messy looking setups. That is a drawback when working too fast. When working in a team this would not be the optimal thing to do.
A lot of time went into thinking material setups in Unreal Engine. I made few master materials that were pretty complex and full of static switches and then made instances out of them. Hardest one was the rock material. I ended up making different masks in Substance Designer for each rock set using normal and height maps and then made a generic rock texture that I tiled x number of times in UE4 and turned rock edges brighter to make it more interesting using masks. I also used WorldAlignedBlend to add sand on top of the rocks. This node is very useful and easy to use.
So for the game I have to create a lot of different assets on top of what I already have. I can use same materials and lighting setups but since this game will have pretty huge playable area I need to make sure it runs smoothly. I need to look more into level streaming and other LOD techniques. Right now I’m designing the game and planning everything what I need to do and how to do them. When designing is done then I’m going to start creating more different features and modules. Hopefully I have something more solid to show in the near future.
I’m planning to keep the development very transparent and show project progression as much as possible. This game is not going to be for everyone but rather more like a game that I need to make because I have a story and tools to tell it. Right now there are two developers in the team and we are working with this just for fun in our free time.
I have some experience with offline renderers like VRay and Mental Ray but one thing that I don’t like with them is the rendering time. I like to test different settings like different lighting setups or material settings but if my time goes to waiting for my test renders to finish then that doesn’t sound like a workflow that I want to use. Offline renderers sure can produce amazing results but it’s a tradeoff with rendering time.
Since a lot of real-time engines supports PBR and they have pretty good lighting systems I decided to use Unreal Engine and also I made the car drivable so the end result was much more than just a single static image. This also made it possible to actually start turning this competition entry into a game and thanks to blueprints I’m able to add more gameplay to it.
There are also a lot of other engines out there that I could have used like Unity or CryEngine but for me Unreal Engine visual scripting tools and rendering features made me to chose it. UE4 has pretty much everything I needed for this competition and that I can use to make a game and hopefully finish it some day.