[ONG] Offroad Racer - Indie Game Dev Log

defragger
defragger sublime tool
Latest Image:



Hi guys,

we (my brother and I) are working on a game project, which obviously will not be called offroad racer on release. We would like to share some insights and behind the scenes because basically, why not. There is no big company attached ... no nda´s and stuff. I learned so much reading this kind of topics on polycount that I feel like maybe this will help someone somehow or at least be entertaining for the real game developers who will probably laugh at our mistakes. ;)

....well, who are you people?

We are 30 and 28 years old and have been working in military software development in germany for some time. I did a brief stint in game dev but sadly game companies in germany tend to like browser games very much.

....so?

We love games and we love developing games and the technology behind them even more. So we both quit our jobs and are working on this project fulltime now .... YAY!

....good for yeee! How is this supposed to work then?

We are planning on releasing our game on steam later this year. Since we are only two guys doing all the work and also developing our own engine this is a massive task.

....wait, you chumps are developing your own engine??

Developing the entire engine will be great, my brother said. It will be fun, he said. Yeah, but seriously it already starts paying off with the suspension animation, driving physics, wheel blur .... local splitscreen playing online and whatnot. But I dont want to bore you with details at this point.

....yeah, now show some pictures! And after reading your freakin life story they better be good -.-

Thanks for reading and keep in mind that we are still very much working on this so most is alpha, alpha. Like proper alpha!

High-poly renderings (more on artstation):



The car is pretty much modular. This is a bake check of the mainframe module (low-poly plus normal) baked with knald:


I purchased this awesome kit http://mvhaitsma.artstation.com/projects/Wdzqv and also the one with the cables.
And used it whenever possible:


I also purchased the "325 hard surface alphas". Unfortunately I couldnt use them as much as I had hoped, but still.

And here are some ingame shots (ignore terrible sky):








suspension at work (ignore terrible ground texture):


driving with oversteer through power and opposite lock:


suspension rigging:


car inside engine editor:


Will post more in the future!

Welcome!

It looks like you're new here. Sign in or register to get started.
134

Replies

  • LaurentiuN
    LaurentiuN polycounter
    This is freakin awesome, can wait to see more, subscribed.
  • AtticusMars
    AtticusMars greentooth
    Really cool, love the design and the amount of detail you put into the suspension. Wish I had more substantive feedback but seriously, awesome work...

  • Raffles
    Raffles vertex
    Kudos to the highly realistic suspension model you've built. I'd love to read more details about the suspension and physics.

    I'm in the same boat as you, I've built my own graphics and physics engines for my first mobile game. I agree it sounds great at first, and simple enough, but the work is just relentless - even once it's working well, you realise you have to implement every extra little thing you want :)

    How does the blurcage work btw? This is the first time I've heard the term.
  • defragger
    defragger sublime tool
    thank you! Appreciate it!

    Here is a small glance at the first race track level. My personal best time is 1:22 min so far :D



  • defragger
    defragger sublime tool
    Raffles said:
    Kudos to the highly realistic suspension model you've built. I'd love to read more details about the suspension and physics.

    I'm in the same boat as you, I've built my own graphics and physics engines for my first mobile game. I agree it sounds great at first, and simple enough, but the work is just relentless - even once it's working well, you realise you have to implement every extra little thing you want :)

    How does the blurcage work btw? This is the first time I've heard the term.

    thank you!

    My brother does all the programming. I´m just the artist. I will ask him to answer your question about the blurcage. We use the bullet physics engine but he heavily modified it.

    These are the exposed parameters to setup the car handling:



  • miezis
    miezis polycounter lvl 4
    Wonderful detail! And that's a lot of work. 6000 working hours... that's more than two full years of 9-5 with no weekends. Holly molly...
  • defragger
    defragger sublime tool
    miezis said:
    ... that's a lot of work. 6000 working hours... that's more than two full years of 9-5 with no weekends. Holly molly...
    Thanks a lot!
    Yes it has been a ridiculously stupid amount of work so far. I did 9-5 for the cash and 6-2AM of this after. Spent almost every weekend and used all regular vacation and four weeks of additional unpaid vacation 11-4AM every day.
    Thats why we had to go fulltime. After some time its just impossible to carry on.
  • Kroma!
    Kroma! polycounter lvl 9
    This looks really cool, I love the progression you've shown. Those UVs! Following this thread :smiley:
  • Asura
    Asura greentooth
    edited Feb 2017
    Subbed to this thread. Everything here looks dope! Also massive kudos to the suspension rig and materials :)


  • Makkon
    Makkon polycounter
    I love everything in this thread. Excited to see more in the future. Delicious hard surface modeling!
  • Grubber
    Grubber polycounter lvl 15
    Amazing! Subscribed instantly :)
  • defragger
    defragger sublime tool
    edited Feb 2017
    Thank you so much! Really appreciate it!

    I will get back to the car but would like to show you construction of racetrack #1 for now.
    There still is a lot of work to do but we got rid of the dynamic blue sky and added a nice HDRI skydome that added a lot of atmosphere already.



    I started drawing a track layout with photoshop. Took it to 3dsmax and did a quick reconstruction using bend modifier on basically bunch of planes.



    I sculpted in the height differences that I wanted and did a lot of play testing to make sure every corner is rewarding and a little bit challenging. Also to ensure the whole track has nice variations and is not to much of a challenge if that makes sense.



    ... rendered a heightmap of that.



    Plugged that into Worldmachine. Did a simple overlay and painted the ridge and mountains in Worldmachine.
    I´m using the AMAZING TeTo texture toolbox by Iri Shinsoj for splatmap creation and a unique basemap for large scale color-variation.
    https://www.artstation.com/artwork/teto-the-texture-toolbox



     I took the terrain to ZBrush after because it lacked a lot of detail right next to the track. There were nice big mountains and stuff but no mid size details near the track. This is what it looks like after few hours of ZBrush treatment:



    Now I´m retopologizing everything because it´s basically a heighfield and we dont want that for performance reasons. I strive for a nice transition between track and terrain a la GTA5. Already spent hours examining that :D


  • Gazu
    Gazu polycounter lvl 12
    Man this looks pretty promising!
  • martygalinskas3d
    martygalinskas3d polycounter lvl 4
    it looks like the cars are understeering a lot, will you have a hand brake or a rear bias brake system to allow for more oversteering? i'd look at a lot of WRC (world rally cross) footage to see how the cars handle dirt. Another good point of reference would be trophy truck racing because of how similar the suspension travel is on those vehicles to yours.

    This looks really great so far and i love games like this. 
  • Chimp
    Chimp interpolator
    Looks promising, will be following it :)
  • orontes
    orontes polycounter lvl 2
    Hi everyone. Thanks for the encouraging feedback.

    I just wanted to explain a little more regarding the blurcage. The basic idea i got while reading "Shader X6 Chapter 3.4 Per-Pixel Motion Blur for Wheels by Damyan Pepper from Black Rock Studio". It describes the concept of a radial blur very well. They use a cylinder as proxy geometry for the blur direction, but for us this wasn't sufficient. So we turned up with our so called blurcage as shown above. The blurring itself is more modern and similar to "SIGGRAPH 2014 Next Generation Post Processing in Call of Duty: Advanced Warfare". We render the wheel like everything else in the deferred path while marking it with a special material id. Afterwards we copy just the wheels to a half resolution buffer. From there it gets blurred and blended over the scene in one go with the blurcage used as proxy geometry.

    Regarding the over and understeer we tried many many things including first hand real world driving with an FR drive train and much power :) Our first in game physic was indeed like an Understeer Simulator 2017. But i think we now have a more balanced driving and we also did a handbrake for the fun and the real pros. I love rally cross and it was in fact one of our inspirations for this game but you rarely see a real world driver going much too fast into a corner and facing unrecoverable understeer even though it would happen if he did. We plan to get a closed demo out soon to get more feedback on the driving itself.
  • jaker3278
    jaker3278 polycounter lvl 8
    Really great work, the suspension looks great, Will this be available online? 
  • plord
    plord polycounter lvl 5
    This looks awesome! Thanks for sharing the 'how-to' :smiley:
  • Polygons-Pusher
    Polygons-Pusher polycounter lvl 11
    just wow, the design of your vehicle and hard surface is just awesome =). Can't wait to see the alpha !

    Did you and your brother thought about doing a track editor directly in the engine so that you don't hassle too much if you need to do quick changes ?
  • defragger
    defragger sublime tool
    just wow, the design of your vehicle and hard surface is just awesome =). Can't wait to see the alpha !

    Did you and your brother thought about doing a track editor directly in the engine so that you don't hassle too much if you need to do quick changes ?

    Thank you :smiley:

    Yes we thought about a track editor. At this point it is possible to vertex-snap track modules together in engine.
    We decided against a "full on track editor" because its a lot of work and we dont consider it that beneficial at this point. We would like to give an open track editor to the gamers but thats far down the road.

    Our priorities are:

    - gameplay (fun single- / multiplayer online game)
    - stability and performance (linux / windows, 4k resolution)
    - the best gfx we can achieve (need to stick out on steam)
    - get it out on steam 2017

    Everything beeing equally important we have to be careful with new features and cut down on quantity. We think / hope that this is more gamer focused and hopefully will be rewarded in the end.
  • defragger
    defragger sublime tool
    hi guys,

    have been working on foliage and environment lately. Also did some new screenshots today. More over on ArtStation https://www.artstation.com/artwork/A5GVy




  • Froyok
    Froyok greentooth
    Super work !
    I caught it up on ArtStation, will follow more on Polycount now. :)
  • Finalhart
    Finalhart polycounter lvl 6
    Wow, those vehicles have really interesting shapes, subbed for more! Love watching projects like this
  • defragger
    defragger sublime tool
    Froyok said:
    Super work !
    I caught it up on ArtStation, will follow more on Polycount now. :)

    ah damn, now I feel bad for not using Substance on this one ... :smile:
  • kanga
    kanga quad damage
    Top work man! Subbed :smile:
  • I would definitely play this game.. great work so far guys!
  • chinomaker
    chinomaker triangle
    Keep up the great work! 
  • Great nice work indeed. And I love the fact that you mentioned support for Linux. Is there a way to get more information about your engine? I already spotted GTK+/QT with the Adwaita theme.
  • defragger
    defragger sublime tool
    Great nice work indeed. And I love the fact that you mentioned support for Linux. Is there a way to get more information about your engine? I already spotted GTK+/QT with the Adwaita theme.

    It is in fact at home under Linux. My brother did a windows port for the editor and game. I hope my brother will post a little bit more details about the engine.
  • sadpunk
    sadpunk polycounter lvl 9
    Well If I'm gonna raise my head above the parapet (first ever post here) it should be for something truly inspirational and great like this. 

    Excellent community spirit shown with you guys sharing your development endeavours. 

    As a long time developer, mainly in the racing genre, this is very inspiring to me personally and I am very envious of the fact you are working together as brothers. Perfect scenario. 

    Keep up the great work and the excellent posts to this thread. 
  • HAWK12HT
    HAWK12HT polycounter lvl 13
    You guys rock oh boy oh boy how did I miss this!!!! I am just soaked up in your suspension rig and attention to detail! 
    Again all the best for final launch :) 
    I am Fahad from Artstation btw :D 
  • Your engine sounds really impressive. As specially for a two person project. I used GTK3 for some small python programs as well (Mostly for a custom UE4 launcher because epic doesn't provide the launcher on Linux :/). But I didn't knew it could handle a whole engine.
    Do you have a twitter account? I would love to be kept up to date with this project,
  • Ckafee
    Ckafee polycounter lvl 8
    i love your work. you are reall talented. I was wondering if you could make a tutorial/breakdown on how to make such complicated rigs and get them in the engine. and how to get the dynamics damage you were talking about earlier?
  • Hallo ihr beiden, sieht alles fantastisch aus.  o==(========>   weiter so !!      : D
    Grüsse aus Warthausen !
  • defragger
    defragger sublime tool
    @ikkyu71: Danke! Grüße an alle!

    @Ckafee: Thank you!

    I recorded a video "tutorial" about the suspension rigging & animation today. Sorry for my awful english :smile:

    https://youtu.be/PHsIAcdYOXc
  • Ckafee
    Ckafee polycounter lvl 8
    defragger said:
    @ikkyu71: Danke! Grüße an alle!

    @Ckafee: Thank you!

    I recorded a video "tutorial" about the suspension rigging & animation today. Sorry for my awful english :smile:

    https://youtu.be/PHsIAcdYOXc
    I could follow everything, really impressive! most of the look ats and IK sovlers are script in engine again right?
  • defragger
    defragger sublime tool
    Ckafee said:
    I could follow everything, really impressive! most of the look ats and IK sovlers are script in engine again right?

    no, typically everything gets baked to keyframes when exporting as FBX file. The engine doesnt have to deal with IK or anything. On export there is one key placed for every frame with all bone tranformations as fixed values.
  • Ckafee
    Ckafee polycounter lvl 8
    defragger said:

    no, typically everything gets baked to keyframes when exporting as FBX file. The engine doesnt have to deal with IK or anything. On export there is one key placed for every frame with all bone tranformations as fixed values.
    but if you do it that way, you dont have the dynamic physics in engine right?
  • defragger
    defragger sublime tool
    Ckafee said:
    but if you do it that way, you dont have the dynamic physics in engine right?

    ehrm... lets make a very simplified example:

    Front right wheel hits a rock. Physics "says" the front right wheel has traveled up 20%. Engine plays animation clip "spring_FR" to frame 15 which equals 20% up movement. Of course this happens live so the suspension matches to the wheel at all times. Now lets say the player is also steering to the left at the exact same moment the wheel is hitting that rock. Now we also need to play animation clip "steer" to frame 63 but since the wheel has also traveled up it needs to be blended with the animation clip "spring_FR".

    So in other words the suspension is just reacting to the physics.

    It is a lot more complicated than that but lets keep it simple for now.
  • orontes
    orontes polycounter lvl 2
    Yes that's right.

    So how do you get all this into the engine together with real physically moved and steered wheels?

    The way it works is basically this:
    The whole suspension with the spring and all gets set up and animated in 3ds max. Nothing of this is exported directly to the engine. Instead the full travel way for steering as well as suspension movement is baked as ready made key frame animation data together with the bones. This gets exported the exact same way as mocap data. It is a skeleton of bones with there associated vertex weights plus one list of key frames consisting of one transformation per bone per key frame. So you can simple play this back in the engine. Just hit play and you see the suspension moving from full up to full down and afterwards from full left to full right.
    The individual clips get set up in the engine so the scripting knows from which key frame to which you have which animation. You can see this on one of the screenshots above.

    Then comes the trick:
    One special helper point is exported like a normal bone together with this data. This special bone is detected by the engine by its name. It follows the wheel throughout the animation. So it always represents the final position and orientation of the wheel axel for every key frame. The engine now creates a mapping from key frame to final axel transformation by playing back the animation once and recording the position and orientation of this helper bone. If you now inverse this mapping (if you want by searching through it for a specific result value) you know which key frame you have 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. Voila you have a traveling suspension.

    Now comes the problem:
    It gets tricky when you want both, traveling suspension, as well as steering at the same time on the same wheel. Then you have one key frame for the suspension to travel 20% in and another one for it to steer left 10%. You have to use them both at the same time now. This is no problem as long as the two animations affect a different set of bones like for a character when the run animation is played on everything below the waist and the shoot animation on every bone above. In our case this is unfortunately not a solution cause both animation frames affect exactly the same bones.

    And the solution:
    We export a special neutral position on key frame 0. This neutral position has no steering and mid suspension travel. It doesn't belong to any animation directly. It is just used as a reference. When we want to have an animation that does both, steering and travel, we do the following. We subtract the bone transformations of the reference pose from our steering and travel animation transformations. So we have two sets of bone transformations representing the delta between the reference pose to the wanted steering and travel pose each. Now it is just adding everything together. Reference pose plus steering delta, plus travel delta. Voila you have both at the same time.

    This works well but not 100% exact. To not have the wheel look a bit loose on the axel but instead like a fully rigid thing we place it at the helper point and not at the "should be position" that was coming from the physics and was our original input to all of this. This has the nice side effect of giving us the correct camber and inward movement which is not provided by the physics engine.

    Hope i didn't bore you with to much technical stuff here :)
  • Ckafee
    Ckafee polycounter lvl 8
    defragger said:

    ehrm... lets make a very simplified example:

    Front right wheel hits a rock. Physics "says" the front right wheel has traveled up 20%. Engine plays animation clip "spring_FR" to frame 15 which equals 20% up movement. Of course this happens live so the suspension matches to the wheel at all times. Now lets say the player is also steering to the left at the exact same moment the wheel is hitting that rock. Now we also need to play animation clip "steer" to frame 63 but since the wheel has also traveled up it needs to be blended with the animation clip "spring_FR".

    So in other words the suspension is just reacting to the physics.

    It is a lot more complicated than that but lets keep it simple for now.
    Allright i get, and your friend explaned it even indepth. Really interesting to read. Now the following question, if you would (and i say would) script the solvers and the look ats in the engine could you get it 100% perfect to as it is in 3dsmax? and if yes why wouldn't you do it through physics?

    @orontes Great explanation, didnt bore me at all! You guys earn respect:D

Welcome!

It looks like you're new here. Sign in or register to get started.