uniforms: {
asphalt: UniformNode<"color", Color>;
burn: UniformNode<"float", number>;
centre: UniformNode<"float", number>;
centreLine: UniformNode<"color", Color>;
cobblestone: UniformNode<"color", Color>;
concrete: UniformNode<"color", Color>;
cracks: UniformNode<"float", number>;
curb: UniformNode<"color", Color>;
damage: UniformNode<"float", number>;
dirt: UniformNode<"color", Color>;
edgeLines: UniformNode<"float", number>;
grass: UniformNode<"color", Color>;
gravel: UniformNode<"color", Color>;
laneLines: UniformNode<"float", number>;
lanes: UniformNode<"float", number>;
marking: UniformNode<"color", Color>;
patch: UniformNode<"color", Color>;
patches: UniformNode<"float", number>;
potholes: UniformNode<"float", number>;
ruts: UniformNode<"float", number>;
sidewalk: UniformNode<"color", Color>;
slabSize: UniformNode<"float", number>;
snow: UniformNode<"float", number>;
surface: UniformNode<"float", number>;
wear: UniformNode<"float", number>;
wetness: UniformNode<"float", number>;
width: UniformNode<"float", number>;
} = ...
Procedural road surface material (TSL): asphalt with lane markings, worn tyre tracks, cracks and patches; cobblestones; gravel; rutted dirt with potholes and a grassy crown; paved sidewalks with joints, curbs and bridge concrete. Weathered through threejs-weathering: wet asphalt darkens and turns mirror-like with puddles on the flat, ruts and potholes fill with water, snow clears first from the tyre tracks, damage opens alligator cracks, burn chars.
Geometry convention (the same as threejs-city's road mesh):
uv= (metres across from the centreline, metres along), aroadPartfloat attribute with ROAD_PART codes. Other geometry can map its own attributes through RoadSurfaceContext.