Cycling is nothing without its scenery, right?
A decent amount of time was spent in environment creation, as the road and scenery were created a number of different times using different methods each time. This was a fun learning experience. I'll describe only the final method.
First, the general heightmap was created using downloaded GIS data. The real world location was in the Adirondack Park in New York, which I have much affinity towards riding around. From there, the heightmap was smoothed, sculpted a little, and glitches were ironed out.
This is a great tool for environment creation in Unity, especially for large environment creation, created by Nathaniel Doldersum. In the end, a 10km x 10km environment / area was modeled in Unity. Hand painting interesting terrain, and placing trees and vegetation manually would have been time consuming.
TerrainComposer allows users to quickly paint splatmaps (Ground Textures), as well as place Trees and Grass based on certain criteria on the terrain (or random). The most useful tool for me was being able to paint maps for tree and vegetation placement. For example, I was able to create a map for areas that would be really close to the road, another that would be a little further away, and yet another for areas that would be in the distance.
Separating these out in TerrainComposer allowed different placement densities for each mapped area. Thus, more trees would be placed closer to the road, less further away. Vegetation was similar, except that areas deemed far away had nothing placed at all.
Another great tool that is a necessity for Unity racing games, Easyroads3D allows you to manually plot out the route of a road, It creates geometry that will always match the height of the terrain. This allows for placement of roads that is realistically just above the terrain without occurrences of the terrain breaking through the road, and also allows quick editing of placement by moving set markers.
A satellite image of the relevant area was mapped to the terrain. This allowed me to trace the road using Easyroads3D with a great amount of accuracy to real word topography. In the end, the overall course was broken apart into 5 segments to keep the road editing interaction quick and snappy. The length of each road segment was approximately 4km
The environment was filled with trees and vegetation from the Unity asset store. The trees were from the Scots Pine Tree Packageby forst and the Maple Trees by Profi Developers. Grasses and vegetation were mainly from the Unity Terrain Assets library.
The lake in the middle of the environment uses a simple (shader) material that is performance friendly and looks pretty good. This could be enhanced using a truly reflective shader, with a performance hit associated.
Finally, to help with the overall realism, a lightmap of the terrain was baked for static shadow display. This also helps performance since real-time shadow computation is generally expensive.