[Assetto Corsa] Irungattukottai, Chennai

I need to bear in mind this is the first sentence people see when this link gets shared.
Anyway, I’ve gotten quite stuck into modding Assetto Corsa over the past week, the workflow I’m using for the Sheffield map is similar to that of AC: using reference data from satellite imagery and streetmap data, and importing it into 3D.

Cadwell

The Cadwell track, after a curious search to see if there is one available was placed on a ‘someones done this already, and done a fantastic job of it – so I don’t need to (yet!)’ list.
Despite being a list with a very long name, it’s a very short list so far.

I recorded a little race around it, added some music to the replay and uploaded it.

I decided to look for a track that I couldn’t find, something new – and that’s where two of the creative projects I’m working on coalesced.

I’d set out to use free and open source software to build a playable track in Blender – and while I didn’t complete that with Cadwell, it did put me on the right track to actually making usable race circuits.
That’s what this post is about.

India ??

I went on a deep-dive of Indian motor racing circuits, and aside from the world-famous Buddh, I could find very little. This was the niche I was looking for.

I’ve started with the first other major circuit I could find, Madras Motor Race Track (Irungattukottai, Chennai) – and is one of a few circuits I have earmarked for a small India track and car mod pack.

The playlist (currently) has 4 videos of developing and testing Irungattukottai in Blender, and are mostly set to ambient music.

For your benefit, I’ve written this with hindsight – so I hope it saves you some time!

The first part we see is after I’ve downloaded the .osm (OpenStreetMap file) from where I’ve selected the region of the track.
I’ve used blender-osm to import the map data, and I’m now trying to figure out how to get it to run.

Once you have it imported, first thing I do is press 7 on the numpad in Blender to jump to Top view, and select the objects until you find the racetrack, and name it 1ROAD. Anything you name it after that (with no spaces) is entirely up to you. This is the track you will drive on.

I export the 3D file to .fbx and import it with ksEditor, part of the Assetto Corsa SDK, From here, allowing that my map is compliant, export it to the tracks folder in your Assetto Corsa directory.
If you are using Steam, it’ll be in:
C:\Program Files (x86)\Steam\steamapps\common\assettocorsa\content\tracks

A quick way to do this is to find the folder of any track you like, copy it and paste it into a new folder with the name of your track, and change everything in your new folder to suit your level.
Once you’ve exported your map to the .kn5 file format, drop it in this folder and make sure the file has the same name as the folder, and any textures you’ve used are in the tracks textures folder.

More to come

What I learnt

  • Everything needs a texture.
    If it doesn’t have one, it’s going to crash ksEditor
  • .dds (DirectDraw Surfaces) do not support layers.
    You can have transparency, but you can’t have multiple layers.
  • It’s best if your road is low resoultion mesh, high resolution imagery.
  • You will need Blender 2.7x
    Yes, going back to it feels like writing with your left hand, but the .kn5 exporter tool really is the best way of exporting your mesh.
    I found that using 2.9x and exporting to ksEditor only caused problems. Revert, revert to 2.7x, open the example track, and you’re on the way to a playable track.
  • Scale your UVs correctly
    I’d not scaled my grass textures correctly from high-res source photos, and the perspective it gave was that I was driving a car, but the size of an ant – each grass blade was the size of my car!
  • Make your track flat
    When I’d imported my track from my 2.8x experimentation with ksEditor, I’d solidifed the track so that it was 3D and had depth.
    I found though, when importing into 2.7x, hitting the side of the meshes depth sent the car into an uncontrollable spasm.
    The track has to be flat. 1 pixel (to the chefs amongst us, that’s one layer of onion skin).
  • If you use the example file from the Blender KN5 Exporter, use it as an example file, and then delete it
    When you playthrough, the intersection between the example racetrack, and your imported racetrack – it causes glitches will cause you to spin out, and fall into invisible potholes.
    It took me until Part 4 to realise this.
  • Use a UV grid. Google images ‘UV Grid’.
    Find a high resolution version, and apply it to everything.
    It makes a great placeholder image, and you can see exactly where to edit when you want to colour the texture.


Car skinning

No such luck, synapses are firing on all cylinders,
I’ve cancelled an important VLC update for the sake of a screenshot, and now when I try to open anything with it, its only use is a strobe light.

When I run the game, I start at a 2:00 angle, which leads me to beleive that the empty to represent AC_PIT_0 is at a strange (or unsupported) angle.

While playing the lap from the OSM import, I’d timed that I was completing the laps in around 45 seconds, which is obviously ridiculously fast – so I scaled the track to be twice the size, and it now seems to work – and would probably make a good Drift track.

I’ve not completed a full track yet, because:
– there’s no kerbs
– the start position is on the grass
– I’m quite sure that since I doubled the size of the track, the timer markers are in the wrong place.

For now, I’m stuck in the pit, I can see the wall above me that I’d just made – and I can’t move, because I haven’t given the pit floor mesh a pit texture.


So this area here is the pit-lane, and behind this would be the stadium area where spectators are sitting.

Madras Motor Race Track Plans To Host Night Races - carandbike
One iconic landmark of the track that absolutely will not be excluded is the MRF Tyres tyre arch, the start line and multi-storey viewing platforms.

Continuing on from the Pitlane after this tyre ends is a wall with a glass divider, like the ones in the picture above.

This is the wireframe of where the pitlane re-joins the racetrack.
Madras Motor Race Track - Wikiwand
The end of this is actually where the Tyre is, and it reaches from one side of the track, behind a barrier to the outermost point of the pitlane.

By this point, the car would have re-joined the circuit, and the track above is part of the maintance route, which the Ligier Maintenance Vehicle from the video(s) above would drive on.
Both barriers are solid walls with viewing windows above them.

MRF Towers

I don’t know if that’s their real name, but they’re a prominent and majestic outlook onto the track. I clearly know which companies logo to find a hi-resolution image of, and aim towards something like this.
Interestingly, the tyre is not where I would expect it to be from the screenshot above; which is odd, since the tyre bears the MRF logo.

My point for this is the two MRF towers just past the start-line, they’re 1x and 1.5x the size of each other, and the top floor is an actual viewing platform – so it’s a great place to put a camera (or two!).
If you’re feeling creative, you could create a camera, and put a sofa scene infront of it to show people watching from their couch inside of their hotel room!

MMRT upgraded facilities revealed as owners eye Asian-level races

While it is possible to complete a track, the kerbs and run-offs are not in place to help with corners (and I ran most of the racetrack backwards, and was not penalised).
This is next.

Assetto Corsa track modding

I’d been looking for a way to revamp the Sheffield map. ~~
Previously, my primary focus had been an FPS – but now I’m thinking about making it as racetracks for the beautiful Assetto Corsa.

I looked for some videos on the level editor, and there is Race Track Builder (currently £44.99, even amidst the Steam Summer Sale)
Race Track Builder is interesting, because it uses map and terrain data from Google Maps, and you edit in the shape of the track using splines and curves, and export it to FBX format so that ksEditor can read the file and convert it to a map file usable ingame.

This is the video that piqued my interest, and especially towards the end confirmed that what I’m looking to do is possible.

I took my Sheffield map (‘Here’s one I prepared earlier…’) – this was created by using the blender-osm plugin.
I exported it the mesh to a .fbx file (a widely supported 3d model format) so that I could import it into ksEditor.

You click OK, and the application force closes.
But it’s right, the fitness store Decathlon doesn’t have a texture assigned to it because I haven’t worked on it yet.

We at least know that ksEditor is at least reading the file structure of the FBX, and it appears to be compliant.
Only thing is, this is a large map with a lot of buildings without textures.
I need to start smaller, and I want to find a way to do it cheaply; we are after all a shoestring budget studio.

blender-osm

You’ll see a lot of content on this page which is produced with the blender-osm tool with the Sheffield map.
I’m going to start smaller, but use the same process – I’m going to replicate a track I remember from my childhood days, family outings to Cadwell Park near Louth with my dad.

Cadwell Park Track Guide | Cadwell Park Circuit Layout
These are great for reference and in-game layout previews, but I’ll also need to consider heightmap and terrain data on the actual map

Day 2

Not the chronological next day, but the second day where I can sit down and make progress: this project has been in my mind since I started thinking about it, so pieces of the jigsaw have popped into my mind.

Using blender-osm, I zoomed right in to the track and imported the data from its Latitude and Longitude.
I’ve previously imported the terrain data and satellite overlay, and the dark grey is where the road has been imported as 3D data
I’ve imported the file above into the Assetto Corsa level editor to export it to the game, but there are no textures.
As a test, I’ve applied a basic Asphalt texture to the track.
And found the elements in ksEditor that pertain to the actual parts of the track.

I’ve gone around the objects and given anything that doesn’t have a texture in the map (aside from the road and ground) a UV grid texture, as a placeholder so that everything in the level is assigned one.

While I have the mesh in place, the game is not told where the actual track is: Assetto Corsa recognises that there’s a Cadwell track in its game directory, and gets as far as trying to start the game with it: this is good, something is working here.

I need to tell it where the track is, and also race information like where the pit stops, starting line, crash pads, timing sectors, marshall positions and cameras are.
The bottom two are rectifiable quite easily, they’re just pictures.
The top two, though – I will need to explore the files of other, working tracks to see what information I’ll need to supply.

The missing files

ui_track.json
This is various specific details you’re asked about the location of the track.
This is the information that’s populated in the bottom left corner of the preview image below.

Map (Map.png)
An outline of your map with a transparent background


Preview
This is any image you’d like to use as the track preview.
One way of generating this is to click the error message, and run the map – if it’s playable, you can press F8 to capture a screenshot and use that as your map preview.
Since my track doesn’t run yet – I made a quick render in Blender of the track to use as a placeholder for now: you can now see it behind the layout.