Track Maker's Guide
Welcome in the track making guide for Supertuxkart version 0.8.2 and upper
Note that making tracks for SuperTuxKart currently requires knowledge of Blender. If you are not at ease in Blender, it is suggested to start by following Blender tutorials.
The objective of this page is to help you to make a track for supertuxkart 0.8.2 and upper with blender 2.7 and stk exporter version 6.0.
It is strongly recommended to read the Style Guidelines, stk universe and Licensing (if you are making tracks/karts for your personal enjoyment then you may not need this, but if you wish to submit your contributions for inclusion into SuperTuxKart having read these articles is an definite prerequisite)
Supertuxkart 0.8.2 and upper uses Antarctica engine a new modern rendering engine that allow more freedom for artist. If you want more information about what's possible with the new engine you can go here
Before jumping into the fun world of making tracks you need some tools.
This guide will give you several examples that can be found in the Media repository. If you wish to work on an existing track, or just see how core tracks are done, it's strongly recommended to check the Media Repository.
Converting an old track to the new engine
If you want to convert a track from SuperTuxKart 0.8 or 0.8.1 to the new engine (0.8.2), here is an outline of the procedure:
- You can find a script named "convert.py" in the same location as other tools in Installing the tools; paste this script in blender's text editor and run it
- In the scene options, select a "skybox" sky if the track previously used a skydome (which is no longer supported).
- Still in scene options, enable shadows and bloom. You can also setup an "ambient light map" if you wish.
- If the track does not contain a sun, add a sun and configure it as "Sun (light and shadows)" in the object options (configure the ambient and diffuse light levels)
- Some materials may need tweaks; especially, use "cutout transparency" whenever possible over "alpha blending" transparency
- You are also encouraged to make use of new features, such as lights, library objects, etc.
- Export the track and test it! You will likely spot a few issues to tweak and improve, so a couple iterations may be required
Data are divided in two main repository. stk-assets which is where the game will find all assets, It's what is released with the game and the media repository where all .blend are stored. The media repository is never released with the game because it's useless.
- karts: kart related data. Each kart has a folder
- library: where node are stored. A node is one or more object that are shared among several tracks. Like a tree or a box
- models: where 3D models are stored with their texture and their icon (gift box, nitro bottle)
- music: all music and config files for music
- sfx: all sound effects
- textures: where texture that are shared among tracks are stored
- tracks: track related data. Each track has a folder
A very similar tree exist with the media repository.
Gameplay is hard to master. Here is some advices we use for our official next generation tracks (Cocoa temple/Candela city)
There is a difference between a good difficulty and something frustrating and impossible. For instance when you jump, you just fly without control and if you crash no matter what you try, there is nothing difficult there, the landing pad is just too small. No matter how you skills are you will always fail. That's exactly what as a track designer you should avoid.
- A balanced main path for everybody (meaning : not too difficult. Of course some tracks will be easier and others will be more challenging, but the most challenging/difficult parts should often be kept for side roads)
- If you do an alternate road that is easy it shouldn't allow for an advantage (because it's easy to use it)
- Reward players who try something different (with items, or a real shortcut. There is a very hard shortcut on the track Gran Paradiso track that allows you to win a few precious seconds)
- Use items to guide the player and make him/her do crazy stuff (like gift boxes)
- It should ALWAYS be very clear where you are allowed to go and what areas are restricted. That doesn't means the track can't be a bit like a maze, but the player should know where he can go not necessarily where it should go (i.e. what constitutes the drivable area should be clearly visible, though of course there can be more than one path leading to the finish line)
- Maze should be used very carefully. If people are constantly lost it's not a good thing
- Try to not break the flow of the track, imagine the track like a river flowing, you should avoid "turbulent" sections
- In most cases, you should avoid making the track too narrow - when playing with lots of AI karts, especially, this will result in a lot of frustrating collisions between karts
Note that you need to be already somewhat familiar with blender. Tutorials are easily found with a Google search.
It's is strongly recommended to follow these step in the following order
- Make a sketch of your track (a pencil and paper work fine)
- Find references online. If you want to make a space ship you should collect pictures/photo/etc about space ship
- Model the track itself (the road). You can follow this tutorial. It's with blender 2.5 but it should work with blender 2.7. This is a long step. Be sure the track is fun to drive.
- One lap should not exceed 1min in difficult mode without items to help you nor enemies to slow you down.
- It's a process that takes many iteration (adjusting etc). Be sure the track is fun to drive and race before going further
- You can use block and very basic geometry to represent building, mountain etc.
- Once the road is finished you can slowly start to make the main landscape, add the building etc
- Add details and small objects
- Use lights and ambient light map to improve the visual quality of your track
Texture your models with UV texturing. Your texture images size must be a power of two, e.g. 512x512 or 1024x1024, in .png. Jpeg are supported but should not be used. Supertuxkart will use automatically GPU texture compression if available.
Blender procedural materials and Cycle material are not supported and most of what you enter in the material buttons window will be ignored. Vertex colors may however be used.
For static objects, most combinations of scale and rotation will export file. However please avoid giving a negative scale to objects (this is bad practice anyway).
More information about polycount, etc. can be found in the Style Guidelines
If you have installed the SuperTuxKart blender plugins as described above, a new panel called SuperTuxKart Scene Properties will appear in the properties window.
Note that in this screenshot, Is a SuperTuxKart track is checked; by default this checkbox is unchecked and many less options are visible. The first thing to do when you make a track is to check this checkbox.
Track main properties (in green)
These are the basic properties like the name of the track, the group where it will be placed, the sky texture, etc
The tracks that are shipped by default with STK are in group "standard"; add-ons have group "Add-Ons". The screenshot is displayed in the track selection menu. The screenshot file must be a 4:3 image scaled into a square size (this is because many GPUs require textures with power-of-two sides, and with powers of 2 you can't create 4:3 images).
For the sky, It's recommended to use the type box because the engine use the skybox for several light effects like reflexion or specularity as a source of colors and light
You can enable Is a battle arena if your track is an arena. The option Is a cutscene is used by the dev team to make cinematic, trailer etc. You can simply ignore it.
You can change the camera rendering distance with Camera far. It might be useful for indoor track. Note: The camera far distance will affect the Depth of field
Track advanced properties (in blue)
Advanced properties are optional, however if you want to use nice effects and make a track more interesting you might want to tune these.
- Driving/laps : These values are related to general race setting. You can change the default number of lap and if the track can be driven in reverse
- Start line positions : You can change the number of karts per row and the distance between them. The more karts, the wider the track must be. The three parameters allow you to shape where the karts start: e.g. you could put more karts in a row and reduce the forwards distance to make the field a bit wider (perhaps even reduce sidewards distance if the track should be too narrow, but be aware of wider karts).
- Weather : You can choose to add a weather effect in your track like snow, rain or a more dramatic effect with lightning.
- Graphical effects : Here you can enable many cool post processing effect like bloom, shadows, fog, etc. The most interesting one is Ambient Light Map. Basically it will use a skybox to lit the whole track instead of using just an ambient color. Warning this is a performance hog. So you should use a skybox that has a smaller resolution than the skybox used for the sky.
If you installed the SuperTuxKart Blender plugins as described above, a new "SuperTuxKart Properties" panel will appear for each object in the scene, in the properties window.
If you select a node from the library you can't change its option from the track. You have to change them in the node blend.
Properties are now classed by group. Here is a description of each group and properties
Object & LOD
- Object Use this if you need to export an object as a separated object. See Separate or Animated Objects
- LOD standalone: Is used in simple cases, when there is a single level of detail (i.e. the object is either visible or non-visible), and the object appears only once (i.e. not appropriate for the trees of a forest).
- LOD model: This is one of the model of the object (high quality, medium quality or low quality)
- LOD instance: This is where the LOD model will be placed.
See Level of Detail for more information about LOD
Lights & sun
These objects are light emitter. They are the only true light source in the game.
To be able to see those effects you must enable advanced pipeline in SuperTuxKart graphical options. You should also enable shadows for the sun if you want to see projected shadows (an object making a shadow on the ground)
- sun (for light & shadows): sun light and shadows will be cast from this position. You can choose the color of the sun.
- light shaft (god rays emitter): god rays will be cast from this position. It's useful to have a sun for god rays and a sun for light emission. The algorithm for shadows doesn't work well if the sun is near the horizon. With this separation you can have a sunset without killing performances. Usually people don't notice that the visual sun and shadows aren't corresponding.
View in blender (green = sun casting shadows, blue = sun visible to the player
Result in supertuxkart
- light A simple point light. You can change in blender parameter the color, the intensity and the distance. If you have enabled fog in the advanced track parameter point light will lit the fog too.
Options in blender
Result in supertuxkart
The green halo is due to the fact that the track has fog enabled. Without fog (like in reality) there is no halo.
Items are used to give you a bonus during the race (like a booster) or to slow you down.
- Banana, Item (gift box), Easter egg (egg hunt mode), Nitro (big) and Nitro (small). These types must be set on empty blender objects (menu Add > Empty). While the objects will not be displayed in blender, they will be exported correctly for SuperTuxKart. (Empties are displayed in Blender as a black X,Y,Z line object).
In blender you can easily add items and other stk related objects
The result in stk
SuperTuxKart supports different end cameras. For a track several cameras can be defined. The cameras will be sorted relative to the main driveline (which is where the karts will drive during end animations) - the camera closest to the beginning of the track first etc. All blender cameras will be used as end cameras, if you want a camera not to be exported, give its 'type' property the value 'ignore'. The following two camera types are currently defined:
- end camera (ahead): The camera flies ahead of the kart, facing towards the kart.
- end camera (fixed): The camera is on a fixed position on the track and does not move. It will always points towards the kart, and will zoom in/out to make sure the kart has a 'reasonable' size (i.e. is not too small).
Additionally a camera defines a property called 'start', which defines a start-sphere. If a kart comes into the start-sphere of the next end camera, this camera will replace the current camera. Note that for an 'ahead' camera the camera position you use in blender is only used to determine the start-sphere, i.e. when the camera should be activated. Once the camera is activated, it will instantly fly ahead of the kart, independent of the camera position in blender.
If you have a series of fixed cameras it is very common that the start-sphere of one camera overlaps (or covers) the previous camera. Otherwise it is likely that the previous camera will show the back of the kart, which might not be that interesting (though feel free to ignore this recommendation of course).
- cutscene camera are used by the dev team to make cinematic, trailer etc. You can simply ignore it.
Other camera types might be added on request - so please let us know if you have a good idea for a different camera type.
- Particle emitter: type to be set on empty; the specified particles will be emitted from this location in the track. See Particles File
- sound emitter: a sound will be played at this location. May only be applied to a blender empty object. Has property rolloff which indicates how quickly the sound fades out when you go further away from the emitter, and the volume property which indicates how loud the sound is (between 0 and 1 where 0 is silent and 1 full volume).
- billboard: this property might be set on a plane mesh to create a billboard (flat quad that always looks at the camera). Apply on a quad object that is either along the X axis or Z axis in blender. This is useful to fake halo effects. Note that the Antarctica engine will add automatically a halo around point light if fog is enabled
Trigger & AI
- driveline (main), driveline (additional),checkline, lap line: objects used to guide AIs, count laps and prevent shortcuts. See more information here
- cannon end, cannon start: object used to define where a cannon start and where it ends. More information about the cannon here
- goal line (soccer mode): object used to define where is the goal. If the soccer ball cross this line the score will change (only in soccer mode)
- start position: a start position for 3 strikes battle mode. This type is to be set on empty blender objects (menu Add > Empty). It should have a second property start index indication for which kart position (1 to maximum number of karts) this position is meant.
- action trigger: is used by the dev team to trigger certain actions. You can simply ignore it
Any objects that are part of the main track (i.e. no other special object listed here except objects of type object, see above) can mark one texture to be animated. The object must define the name of the texture in the property texture to animate, and should set the speed of movement by setting Animation X Speed and/or Animation Y Speed. See the following example:
This can be used to simulate liquids flowing like water in a river
You can also use a "movie" texture like this one, for complex effect (fire, clouds, etc). You need to enable anime the texture by step. Animation Y Speed become the number of frame in the texture (in this example 4)
If you use a "movie" texture, it should be only for a very limited amount of frame otherwise you might have performance issues.
If you have installed the SuperTuxKart Blender plugins as described above, you will see a new panel called "SuperTuxKart Image Properties"
Properties are now separated in two groups
Display (in green)
Display properties are properties used to change the visual appearance of the texture, it's material and how it behave with lights. New materials are called shader. When you choose a shader only options relevant to this shader will be displayed.
- Generic (solid): Shader used by default for the majority of solid object. You can add a normal map, a gloss map, a specular map and emit map
- Cutout transparency: Shader used for transparent texture that can be 100% transparent or 100% solid (like a tree branch)
- transparent (blend): Shader used for transparent blending where you can see through (a windows for instance)
- additive: Shader used for additive blending. Used in special effects like fire or explosions
- Unlit: Shader used for solid object that should not be affected by light
- Vegetation: Shader used for vegetation like grass, leaves, etc. Is affect by the wind
- Water shader: /* TODO check if still used */
- Reflection (sphere mapping): /* TODO check if still used */
- Splatting: See splatting for more information
- bubble: /* TODO check if still used */
- Clamp texture horizontally/vertically : see  if you don't know what clamping is.
Backface culling : if backface culling is enabled, this material will only be visible from the side the normal is (see ) /!\ In stk 0.9 due to real time light rendering algorithm, the backface culling doesn't work anymore. You can instead use Blender's "Solidify" modifier w/ a thickness of zero and w/ "Fill Rim" disabled in order to generate duplicate faces pointing the other way on export
Generic Solid Material
The generic solid material is the material you can use for the vast majority of non transparent material, like wood, concrete, rubber (for tires, etc). The main texture used in the Generic Solid shader is the diffuse one. But to improve the quality of your materials you can add two additional textures.
For simplicity reason In SuperTuxKart each color channel in the gloss map represent a different things.
- Red channel: is the specular map. It means how shiny a surface is
- Green channel: is the gloss map. It means how the shininess behave. For instance a wet surface will have a high gloss coefficient, while rubber or latex might be a bit more hazy.
- Blue channel: is the emission map. It means how much the material will emit light. If the light intensity is strong enough it will start to bloom (glow). Important notice: This is only localized and will affect only THE TEXTURE. Not the surrounding area. It's not an equivalent of point light. Usually it's used to force bloom in some particular cases like neons, light bulbs, lanterns, etc.
Normal maps can influence the normal surface of the material. They are used like in any other game engine, to add roughness to a surface.