Building A Racing Game With Your Own Engine

Two brothers Thorsten Folkers and Christian Folkers are building a new racing game ‘DRAG’ with the help of their proprietary engine.

Two brothers Thorsten Folkers and Christian Folkers are building a new racing game ‘DRAG’ with the help of their proprietary engine. Learn more about their production process and little gamedev secrets.

Introduction

Hi! We are just two guys working on this project. Christian Folkers who is my brother, engine developer, programmer and basically the man behind Orontes Engine. My name is Thorsten Folkers and I’m the artist doing vehicle design, level and environment art. We founded Orontes Games together in 2016.

For the sound design, we worked with Adam from tekkAudio who did a great job on the vehicle audio.

1 of 3
1 of 4

It’s hard to say when this project started because developing the engine has been a side project of my brother since 2001. I would say the engine started to look promising around 2011 when so much effort already went into it that it would be a shame to not use it. We then made plans to take it a lot further, but in order to build a usable engine we also needed a use case.

The first idea that came to mind was a story based Sci-Fi game, like everyone from our generation we love the first Metal Gear Solid from 1998. Of course something like that turned out to be a bit unrealistic. We decided it’s probably a good idea to keep it simple, but now we know there is no such thing as ‘simple’ in game development.

We both like competitive multiplayer and are massive petrolheads. We played the original Colin McRae Rally in 1998, Gran Turismo 1 and the original Rollcage in 1999. But we wanted something modern in terms of competitive multiplayer. So the idea was to develop an online gaming focused racing game that we would enjoy playing ourselves.

Seeing the concept-artwork from station02 was the kick-off for this project in december 2012.

concept by station02

Modeling

I started modeling the car – our hero asset – with this concept in mind. But when we looked at it in 3d from different angles and from an actual in-game perspective it started to fall apart. At this point, you can either finish it the way it is and hope for the best, or take drastic measures and delete most of it and start over. Using kitbash parts at this stage was a great way to think outside of the box. You are still going to model everything yourself because often it doesn’t fit properly but it enables you to change stuff quickly and check out different silhouettes.

1 of 2
1 of 2

Finished high-poly meshes

It’s also a good idea to look at real-world engineering and not just model it like you think it is supposed to look. Especially for the suspension parts I used a ton of reference images and still re-did it three times.

1 of 2

The game changer for me was a modeling technique I first saw in a GDC presentation some time ago. They used CAD data and Zbrush dynamesh to transform it into a high-poly mesh. A similar method using 3ds Max proboolean instead of CAD is very well explained by Amsterdam Hilton Hotel on Polycount.

I used this proboolean / dynamesh method on 70% of the car. I really enjoyed working on the high- poly mesh and put a crazy amount of welds in Zbrush.

finished part, low-poly + normalmap

UV’s & texturing

For the UV’s I used a combination of 3ds max built-in tools, roadkill, tex-tools and also Maya. This is my workflow:

  • 3ds Max – unwrap, add seems, quick planar and pelt, simple pack

  • Roadkill – use LSCM and check stretch

  • Maya – pack UV’s with uv_layout

  • 3ds Max – set smoothing groups by uv-shells with tex-tools

  • The texturing was done with Quixel Suite. For the main materials I started with a base metal, put a PVC layer, dirt layer and a dust layer on top. I assembled a small material library with different pre- configured masks for different applications like edge damage vs surface scratches – more or less dirt and also the dirt direction. Some materials for the suspension parts have an oil layer on top with a pre configured masks. These materials were applied by mat ID’s. Of course a lot of painting was necessary too. Sometimes the surface scratches were all over the place.

    Some of the decals on the car are static so they have been added directly to the texture within Quixel. Other decals can be changed by the player so they are floating geometry and not included in the textures.

    1 of 3
    1 of 3

    This is what the final result looks like in the game. Body colors, brake light color and starting number can be set individually. You can also choose a nationality which is represented by a small flag on the rear of the car.

    1 of 2

    Animation

    Regarding the suspension animation – it’s simple forward kinematic inside 3ds Max. The full travel way for steering as well as suspension movement is baked as ready made linear keyframe animation.

    This gets exported with the mesh and the individual animation clips are setup in the engine. One special helper point is exported like a normal bone together with this data. This special bone follows the wheel throughout the animation. It always represents the final position and orientation of the wheel hub for every keyframe. We now create a mapping from keyframe to final wheel hub transformation by playing back the animation once and recording the position and orientation of this helper point. If you now inverse this mapping you know which keyframe to use to get, lets say 10% steering left. This way you can take the needed wheel position from the physic and set the fitting key frame from the animation data. The firmness and other physical elements of the car are setup in the engine.

    Stages

    I started working on the stages by painting a track layout in Photoshop. Modeled the track in 3ds max based on the layout, rendered a heightmap and combined that with the terrain inside World Machine. The terrain together with the race track turned out pretty nice but some areas near the track surface had been eroded to much by World Machine. So I took it into Zbrush and sculpted a lot of mid-size details near the track and adjusted some height differences. In retrospective I should have done less sculpting in Zbrush and instead add the mid-size details after retopology. By adding the details first I spent more time on terrain retopology.

    The terrain is then retopologized. We separate the track surface from the terrain because on the track surface we use two materials which are blended by vertex. These materials have a lot of variation in them in order to get interesting surface structures. But because there is so much information in them we need two materials to break the tiling. If we had only one material the tiling would be very obvious.

    On the surrounding terrain we use 3 to 4 materials that are optimized for large application with much less visible tiling. They are applied by splat map from world machine and then improved by painting in the editor. To hide the poly edge where the terrain meets the track surface, we use a transition decal which overlaps the terrain approximately one meter and uses the same materials and UV’s as the track surface. It’s faded out by vertex alpha. On top of the track we use larger decals for tire tracks and to give certain areas more uniqueness.

    The water puddles are done by tileable parallax decals. The heightmap and vertex color information is used to control the water level. So we can have a lot of small puddles or a few big puddles with the same material.

    For the second stage I used a slightly different approach. I painted the track layout like before but used two splines in 3ds max to represent the track surface. One spline on the outside and one on the inside. This way I was able to plan the width variation of the track early on. At this point we had the driving physics almost finished so I was able to do a lot of test drives.

    Driving

    We built a proper 4-suspension physics which simulates the car highly realistic.

    This way you can have understeer / oversteer like in a real rally car. The car is all-wheel-drive with a power split of 20-80 front to rear and has a 50/50 weight balance. Players experience weight transfer under braking or acceleration which can cause lift-off oversteer. If you are going to fast and slam the brakes mid corner you will experience understeer, just like in a real car. As a racing driver you can use all these effects to your advantage. We setup the car so that it has perfect balance in terms of over- understeer but because it is a race car you won’t have electronic helpers like Traction-Control or Anti-Slip Regulation (ASR). Back in the golden era of Group-B rallying it was just about you and the machine.

    “If everything seems under control, you’re not going fast enough.” ― Mario Andretti

    During alpha testing, we realised that this is tremendous fun when you are an experienced driver, but don’t worry – we built a wider track as second stage where you can see most corners well ahead. So you can focus on learning how to drive. We are in closed beta right now and will bring DRAG to Steam early access in early 2018.

    We hope you enjoyed this breakdown! We want to thank 80 Level for the opportunity to get in touch with you and that you will enjoy playing DRAG as much as we do already.

    Thorsten Folkers, 3D Artist

    Join discussion

    Comments 9

    • Davide

      Excellent work!
      I'll follow the progression waiting to see it completed. Cheers!
      Davide (dean Linux user)

      0

      Davide

      ·6 years ago·
    • Boszormenyi Szebasztian

      Hi Nathaniel,

      Thank you for your detailed and helpful answer! As I see, this part of the game development could be as interesting as the modeling and asset creating process so far. But I am sure that needs endurance allot! :)

      Thanks again!

      Cheers,

      Sebastian

      0

      Boszormenyi Szebasztian

      ·6 years ago·
    • Nathaniel

      Hi Szebi001,

      I have a whole training series on how to code game engines from scratch.  It is free on you tube.  It is broken up into two parts.  
      Christian has a good list of books which I would also recommend those books and maybe also Cg Shaders book too from Nvidia.  He is right those books he listed are not for beginners they are for pros and they are excellent books. That is why I am offering you to go through my training videos on game development because it will fill in a lot of the blanks you will need to be able to read the books he listed.

      Shader Development:
      https://www.youtube.com/watch?v=rXHh1WjQ3Ec&list=PLHOOv0PGqvQPwgEs4vGJBVAiEB4mVZtna

      Game Engine Development:
      https://www.youtube.com/watch?v=45ZMgB2c7xQ&list=PLHOOv0PGqvQMRSgfyTZi82hTtX1dSysbG

      First I cover only the basic mathematics note a good bit of the more advanced stuff requires knowledge of calculus 3, 4, Linear Algebra, Discrete Mathematics, and calculus based physics courses.  I do not try to teach all of those math courses rather I think a college is best for that but there is enough math and physics covered in the videos to get you more than started.  

      The second course covers then writing rest of the game engine since you will already have an understanding of shader coding at that point and then it makes it much easier to dive into coding a game engine from scratch when we have already covered core concepts and a portion of the game engine pipeline architecture without having try to cram everything into one lesson like a lot of books do for the first chapter then spend the whole rest of the book explaining the first chapter of the book.  

      Cheers,
      Nathaniel Nesler

      0

      Nathaniel

      ·6 years ago·
    • Boszormenyi Szebasztian

      Hi Folkers', :)

      It's a really interesting and pretty complex project what you are working on. I am a petrolhead too and a new hobbyist in the topic of 3d modeling and game design so I read your article with honest happy.
      I would like to ask from Christian that did you have any preliminary studie in the field of programming or you learnt it self-educated? Is it possible to find game engine development discussions or forums or everybody works with Unity and UE nowadays?
      These books are really promising, I just have to refresh and greatly upgrade my knowledge in C++.

      Thanks for your answer!

      BR

      0

      Boszormenyi Szebasztian

      ·6 years ago·
    • Christian Folkers

      Hi Wylder,

      always happy to see someone interested in engine programming. I just had a quick look at my bookshelf and this is what i found and can recommend:

      Game Programming Gems (1 - 8)
      GPU Gems (1 - 3)
      Shader X (3 - 7)
      GPU Pro (1 - 6)

      The Game Programming Gems Series covers everything. The rest only talks about graphics programming. They are not exactly for beginners and require a profound understanding of C++. I am sorry, i don't know of any tutorial or tutorial style book describing engine programming and being of any use.

      I know it looks futile in the beginning but a very popular saying in Germany is "Der Weg ist das Ziel" which would translate to "The journey is the destination".

      0

      Christian Folkers

      ·6 years ago·
    • Wylder

      I'm really interested in the resources you used to develop your engine. Do you recommend any books or tutorials that you referred to?

      0

      Wylder

      ·6 years ago·
    • CobaltUDK

      Jncredible job, guys. I hope you succeed with this game, you deserve it.

      0

      CobaltUDK

      ·6 years ago·
    • Thorsten Folkers

      Hi Andrew!

      the steam store page has not yet been released. But in the meantime you can check out our Dev-Log on polycount where we post news and breakdowns every now and then.
      http://polycount.com/discussion/183339/ong-offroad-racer-indie-game-dev-log

      0

      Thorsten Folkers

      ·6 years ago·
    • Andrew

      Is there a website to follow up more on this game?

      0

      Andrew

      ·6 years ago·

    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