# Road material and mesh-role audit r303

The extracted city GLBs share materials across different mesh roles, so road
compositing cannot safely be selected from a material name alone. In the L4RA
and L4RD exports, `RDP_ROADSTRIP_FREEWAYCE (76daf5a9)` appears 152 and 151 times,
mostly on `TRN_CS_CEILINGSA_NRND_CHOP__0_0` and `TRN_CN_CEILINGSA_NRND_CHOP__0_0`.
L4RB also uses the same material on `TRN_NEWBOTTOM03/04_CHOP_*` and
`TRN_TRAINLINE01_0_0`. The earlier attempt to treat this material as an opaque
road surface was therefore unsupported and has been removed.

The renderer now determines road compositing while each source mesh is still
available. Its batch key includes both material index and road-composite mode,
so a material shared by a street and a non-road object can be drawn differently
without leaking road shader behavior onto that object. The current road-role
patterns cover the extracted `ROADA_CHOP`, `ROAD_01_CHOP`, `RDP_DRAG`,
`ROADDRAG`, and airport road-patch names. Source and packaged `viewer.js` match.

A 1280 × 720 Vulkan Chrome capture of packaged L4RA at Route 450 loaded the city
scene, displayed `RDP_LANEA_YS_AA_KT (d1c901ef)` beneath the player, and reported
no page exceptions. That material/mesh combination is not the FREEWAYCE case;
the capture is a regression check, not evidence of a visible road-lighting
improvement. The asphalt remains dark, and the car finish remains flat. See
`webgl-city/review/images/439-r303-road-material-role-check.png`.
