https://80.lv/articles/building-a-racing-game-with-your-own-engine/
Two brothersThorsten Folkersand 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 isThorsten Folkersand I’m the artist doing vehicle design, level and environment art. We founded Orontes Games together in
For the sound design, we worked with Adam fromtekkAudiowho did a great job on the vehicle audio.
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 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 fromstation02was the kick-off for this project in december
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.
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.
The game changer for me was a modeling technique I first saw in a GDC presentation some time ago. They used CAD data andZbrushdynamesh to transform it into a high-poly mesh. A similar method using3ds Maxproboolean instead of CAD is very well explained by Amsterdam Hilton Hotelon 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 alsoMaya. 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 withQuixel 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.
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.
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 insideWorld 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
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
[OGTITLE]펌글 자신의 엔진으로 레이싱 게임 만들기 Building A Racing Game With Your Own Engine[/OGTITLE]
이 글을 공유하기