Custom Track Tutorial/BMD

Programs and Subtutorials
Programs: 
 * SuperBMD - for converting to .bmd format
 * 3d Modeling software (3dsMax / Blender) - for making the model
 * Noclip - For viewing .bmd files

 Modeling Software Choice Most of the work will be done in a 3d modeling program such as Blender or 3dsmax. While you can use Sketchup, why would you lol. Blender is completely free and can do everything that you would need to do. For making course models, it is easier than using Sketchup. Additionally, there are many other programs that allow a user to make 3d models, but Blender and 3dsmax are the main ones.

Subtutorials:
 * Using SuperBMD

Modeling
While taking a model from another game, making very minimal edits (if at all), then using that as the model can be easier than making a model from scratch, making your own model provides more creative choices, a more original finished product, and generally a more engaging track making experience. Additionally, it allows you to learn how to use your modeling program of choice in a deeper way - skills which can be transferred to non-track making applications. It is highly recommended for new modders to make something from (at least partially) from scratch for this reason. There are many tutorials on youtube on how to model a course in Blender. Parts 1,2,3, and 6 of this series are extremely useful.

Scaling
The scaling of a track greatly effects gameplay experience. Tracks that are too short can feel like not enough of an experience, while tracks that are too long can get boring. The width of the roads also affects gameplay experience. When roads are too thin, courses feel cramped, and players feel like they have less room to move around. When roads are too wide, the course can seem very boring; the road takes up so much space on the screen that the background decorations are out of view. In order to ensure good scaling:
 * Import a vanilla .bco (converted to a .obj) to make sure that the course model itself, including walls and roads, are about the right size.
 * Roads are generally 3000 - 4000 units wide. Depending on the units used in the course modeling program, this may be scaled by some factor.

Layouts
The layout of a track defines the main path that players will be driving on. There is a lot of flexibility with these, but some guidelines can improve gameplay experience.
 * Long straightaways can be boring for lower-level players that do not know how to snake.
 * Sharp hairpin turns can be annoying for all players, but can be done.
 * Avoid unnecessary ramps that cause too much airtime. If you want to have a ramp, make sure that there is an alternate path that is flatter. Item boxes can be played on the ramped path to balance the paths out.

Boundaries
Boundaries along the entirety of the course, whether they are walls or deadzones, are a necessary part of any track. Deadzones will be covered in more detail when covering the collision model. When designing walls, one important thing to keep in mind is that wall collision triangles are horizontal, not vertical. This favors the use of 3d boundaries instead of 2d ones.

Sourcing
Many custom track creators do not make their own textures from scratch. Instead, they get them from other games and edit them to their liking. noclip allows people to see models from other games, and this can be a great way to look for textures to use.

Technical Limitations

 * The largest texture that the game can load is 1024x1024. Most textures should be 128x128 / 256x256. The smallest texture allowed is 8x8.
 * Textures should have dimensions that are powers of 2. This means that the valid texture dimensions are 8, 16, 32, 64, 128, 256, 512, and 1024.
 * Having textures that are mirrored, clamped, or have mipmaps require use of a texheader.json file when using SuperBMD.

Skyboxes
Skyboxes are the domed sky model that surrounds tracks. In vanilla, the skybox can be part of the main course model, or it can be its own dedicated file. When they are in their own file, they are named coursename_sky.bmd. This separate file can be added / deleted to any course .arc at will. The process for making them is the same as the course model.

Exporting

 * By default, SuperBMD will make a model that will cull back facing triangles. This means that only the "front" of a face will actually show up in game. The "front" of a face should be towards where the player is going to look.
 * In 3dsmax, a selected front facing face will be highlighted red, and a selected back facing face will be highlighted dark red.
 * In Blender, enabling "Face Geometry" in the Overlays menu will highlight front facing faces as blue and back facing faces as red.

Exporting for SuperBMD

 * Make sure to Reset Xforms before exporting as .dae / .fbx. Not doing can cause meshes to be extremely out of place.
 * In 3dsMax, put the object's pivot at the origin. In the Affect Pivot panel, select "Affect Pivot Only" and then move the pivot to the origin. Then, in the Utilities panel, there is a "Reset XForm" button. Select your meshes, and then select "Reset Selected". Then, Collapse All modifiers for the meshes.
 * In Blender, select all meshes, then enter Control + A, and select all transforms.
 * Do not have any bones in your model. The game will render only the meshes skinned to a root bone, so having bones is completely pointless.
 * Combine Materials
 * To increase efficiency, make sure that each material only exists on one mesh.

Exporting for RiiStudio

 * Riistudio will automatically reset transforms. It will also automatically combine materials between meshes if the --merge-mats option is set.

Converting using SuperBMD
See the tutorial on Using SuperBMD for information. Using more options than what is listed in that tutorial may be necessary.
 * If exporting as .dae or .fbx, make sure that the "--rotate" option is enabled
 * If exporting from Blender, make sure that the "--nosort" option is enabled

Converting using RiiStudio
See the tutorial on Using Riistudio for information. Using more options than what is listed in that tutorial may be necessary.

SuperBMD vs RiiStudio: A comparison of two tools both developed by massive weebs
This comparison will only apply to custom tracks.

SuperBMD

 * SuperBMD preset files are .json files that hold material and texture header data. There are two files for each .bmd model.
 * Easier to edit textures when converting from .dae/.fbx
 * Preset files are easier to edit directly

RiiStudio

 * RiiStudio preset files are binary files that contain the complete material and texture data for a track. There is one of these per material.
 * Live visual editor
 * Easier to share around common materials, including textures.
 * Can combine identical materials on different meshes, potentially reducing or avoiding lag.
 * Acts like all meshes have transformations reset, making the exporting process easier.
 * Has GUI option

WHEN TESTING A NEW .BMD FOR THE FIRST TIME, TAKE OUT THE ANIMATIONS
'''Your course will crash if you do not do this. This includes .btp, .btk, and .brk files. Do NOT touch any of the files in the "objects" folder.'''