RX-9 motorcycle and rider
Original procedural vehicle artwork for RAMPAGE. All geometry and fine-grain surface maps were authored in this project; no downloaded models, commercial assets, third-party logos or external licences are involved.
Integration
Namespace Rampage, component BikeVisual. The current API includes the measured-suspension input:
void Build(Color livery, bool includeRider = true);
void SetSuspension(float front, float rear);
void SetBrakeLight(float value);
float BrakeLight01 { get; }
void SetPose(float speedKph, float leanDegrees, float steer, float throttle,
float attackSide, float attackPhase, float impact);
void SetLivery(Color color);
- Parent owns motion, pitch/yaw, physics and contacts. Generated objects contain no colliders or rigidbodies.
- Forward is +Z. The reference origin is road +0.65 m. Axles are
(0, -0.31, ±0.75), with tyre outer radius 0.34 m and contact height -0.65 m. - Positive lean banks toward +X by rolling around the tyre contact plane. Steering is normalized -1…1 and turns the entire raked front assembly. Speed is km/h. Impact is clamped to -1…1.
- Call
SetSuspensionbeforeSetPose. Inputs are measured signed axle travel in metres from the visual's nominal 0.65 m COM clearance: positive is compression/upward travel, negative is extension.BikeControllermeasures each accepted spherecast's clearance, exposes compression relative toTuning.RideHeight, and adds0.65 - RideHeightwhen transferring it to the visual. A missed contact uses the configured full droop. No time-based sine or fabricated impact bump drives suspension. - Call
SetBrakeLight(AppliedBrake01)beforeSetPose. The controller supplies its measured final brake value, including assistance. The visual clamps finite input to 0–1 and treats NaN/infinity as zero. Positive input brightens with a short game-time rise; zero immediately restores the dim running light, including after a reset.BrakeLight01exposes the displayed smoothed signal for input QA. A garage build starts and stays at zero unless explicitly driven. Zero game delta time freezes the positive-input smoothing. - Call
SetPoseonce per rendered frame. It advances wheel rotation usingTime.deltaTime, smooths visual roll, adjusts rider tuck, and maintains hand contact with the steering bar. The lower fork, fender, brakes, and front wheel move on the fork axis; the chrome stanchions telescope to the fixed upper housing. Bars and cockpit stay chassis-mounted. Rear wheel, brake, chain, and hugger rotate with the swingarm; the rear shock follows its moving attachment. Vertical travel is compensated for visual banking, and the rear arm retains its length with a finite mechanical travel limit. Zero game delta time does not advance the wheels. attackSideis -1 left / +1 right;attackPhaseis normalized 0…1. Both legs use independent two-bone geometry. The boot reaches full extension around phase 0.30–0.41, matching the gameplay action's 0.22 s preparation, 0.14 s active interval and 0.52 s recovery.Buildmay be called again; it hides and destroys the previous generated root.includeRider=falseworks for a bare-bike garage exhibit.SetLiveryreplaces paint slots on both rigid meshes and the skinned rider, and updates the rider's separate coloured textile material.
Artwork
The fictional RX-9 has a modern, compact naked/sport silhouette. Catmull-Rom lofts form the tank, knee inset, stepped seat, tail, side cowls, chin shell, fenders and exhaust. Tyres have crowned cross-sections, sidewall rings and staggered fine sipes. Alloy split spokes surround drilled dual front rotors, a drilled rear rotor, hubs and sprocket. The mechanical package includes cast swingarm, trellis frame, radiator fins and hose, crankcase covers with bolts, cylinder-head fins, paired curved exhaust headers, carbon silencer, chain rollers, footrests and a helical rear shock spring. The cockpit includes grips, switch housings, brake levers, mirrored bar-end mirrors, display and flyscreen. Emissive strips form the running lights, indicators and tail light.
The clothed rider has a shaped torso and hips, tapered organic upper/lower limbs, fitted gloves with finger/thumb forms, reinforced boots and soles, shoulder/elbow/knee/shin protection, collar, zipper and back protector. A sculpted full-face helmet includes a distinct chin bar, vents, rear lip, hinge hardware, visor seal and metallic reflective visor. Contact IK keeps both hands on the bars while the body tucks and shifts and one leg prepares, extends and recovers. This is an original articulated procedural character, not a scanned or motion-captured human.
The v5 foreground revision replaces the inflated jacket, sleeve and trouser inserts with shallow surfaces that follow their garment profiles. A longer jacket hem overlaps the narrower trouser waist; lumbar stretch panels, waist stitching and shoulder/side seams give the suit a more tailored construction. The back, shoulder and elbow pads conform to the garment instead of adding large rounded volumes. Helmet side graphics follow the existing curved shell, with two small rear vent slots on each side. The existing riding pose, contact IK, kick timing, bones, weights and physics are unchanged.
The v6 lamp/seat revision follows the actual garage and forest captures. A wider rear end cap supports a recessed red lens, dark bezel and five fine optical dividers. Its brightness responds to braking instead of remaining at one bright running-light level. A recessed projector surround, curved reflective lens and small emitter replace the headlamp's plain glazing. The saddle receives a separate nonmetallic fine-grain material, with low-contrast piping and stitches following the existing seat contour. The rider rig and physical dimensions of the wheel/contact system are unchanged. These captures show the prior version; a GPU review of v6 is pending while driver-update testing is paused.
Materials and performance
Uses the shared MaterialLibrary.Get contract. Distinct materials describe coated paint, satin alloy, brushed steel, rubber, carbon, anodized fork tubes, engine castings, leather, textile, armour, helmet, visor and lamps. Fine procedural normal textures supply rubber grain, cloth weave and carbon twill; each is 128², generated once.
Coloured suit inserts use their own nonmetallic textile material (smoothness 0.23, clearcoat 0), with the shared cloth normal map and a slightly muted livery tint. Helmet graphics retain coated paint. The v5 revision adds one material submesh to the same rider renderer. Counting the source topology gives 14,444 fewer triangles per rider than v4: 2,204 panel/vent triangles replace 16,648 triangles from the previous inserts. This is a topology calculation, not a measured GPU performance improvement.
Material keys are bike_paint, bike_ivory, bike_rubber, bike_alloy, bike_brushed_steel, bike_engine, bike_carbon, bike_anodised_gold, bike_caliper, bike_display, bike_led_white, bike_led_red, bike_indicator, rider_leather, rider_fabric, rider_suit_accent, rider_armor, rider_helmet, and rider_visor.
The additional shared bike_saddle material reuses the existing fine-grain normal texture. Every bike owns one cloned rear-lens material; only that clone's emission color changes. The shared dim running-light template is not animated. Rebuilding or destroying BikeVisual destroys its previous owned clone. The clone disables instancing, uses the existing HDRP/Lit emission configuration, and requires no material property block, custom GPU buffer, additional light or dynamic GI. Emission intensity runs from 0.65 to 12 with a square-root response to the displayed brake signal; final perceived brightness remains subject to the scene's exposure and tone mapping.
Source topology accounting for v6 gives 752 additional triangles per bike: 496 for saddle seams, a net 96 for the rear lens/bezel/dividers, and a net 160 for the headlamp optic. Existing material groups absorb the fixed details. The independent rear-lens renderer replaces the old dedicated rear-lamp material group, so the authored rigid-renderer count is unchanged. This is a source count, not a measured frame-time result.
All source and combined meshes use a static cache. Fixed mechanical detail is merged by material into chassis, steering, lower-fork, swingarm, shock, and wheel groups. The rider's fifteen articulated segments are consolidated into one cached skinned mesh, with one influence per vertex and material submeshes; clothes and hardware do not each incur an independent renderer. No Update methods, extra physics solvers, per-frame mesh allocations, point lights or per-bike texture copies are added. The mesh remains readable because the initial combination and skin consolidation read shared source vertices. Integrated eight-bike frame measurements and their conditions are recorded in QA-RESULTS.md; a separate per-bike draw-call or GPU timing benchmark is not claimed.
Verification and current limits
The artwork is integrated into the Unity 6000.3.24f1 / HDRP 17.3 Windows build. The latest measured-suspension hierarchy also passes source compilation against the actual Unity 6.3 Core and Animation assemblies; its integrated capture and performance status is tracked in the central QA report. BikeController creates and poses the racing visual; the application creates the reusable garage exhibit. The original isolated Unity assembly compilation was followed by full project imports/builds and actual garage and eight-rider race captures. Reviewed captures show coherent geometry and articulated rider poses. Unity launches and integrated tests were coordinated by the root task.
The v5 suit/helmet revision is visible in the actual 21:16 garage/forest captures linked above. Its earlier source comparison confirmed unchanged pose, joint placement and skin consolidation apart from the cache version. The isolated Unity 6.6 diagnostic baseline was copied before that artwork change so its initial native-engine comparison remains separate.
The full Runtime and Editor source, including v6 and the controller's brake-light call, passes offline compilation against the actual Unity 6000.3.24f1 / HDRP 17.3 assemblies with no warnings or errors (14 September 2026, 22:43 local time). Seven direct calls to the compiled SetBrakeLight method verified clamping, NaN/infinity handling and immediate zero/reset clearing without constructing native Unity objects. An analytic audit sampled 6,006 seam-surface points for finite coordinates and valid section widths/heights. Material ownership and cache versions were checked in source. These checks do not establish rendered lens brightness, eight-bike material isolation during playback or physical-controller acceptance; the upcoming virtual-input/GPU QA must verify those after rendering resumes.
Normals and triangle winding were checked for lofts, axle lathes, tubes, visor and rotor faces. The generated visual reference dimensions and contact plane match the integration contract. A sampled tyre-geometry audit found a minimum local Y of approximately -0.6514 m, including the surface sipes. Material swapping supports the multi-material skinned rider. There is no imported animator controller, facial rig, ragdoll or unique crash mesh; impact response uses the riding rig, and lean is limited to 53 degrees for the upright arcade presentation.
The visual result is an original stylized arcade motorcycle and rider. Convincing fabric folds, more natural character anatomy, richer surface detail, and more refined bodywork remain art-production work; the realistic AAA target is not achieved. QA-RESULTS.md is the current authority for integrated measurements, rendered evidence, and remaining acceptance work.