import { makeCameraPresets, makeThumbnailStrategy } from './factory'; import type { MachineDossier } from './types'; export const GEARBOX_AND_DRIVE_DOSSIERS = [ { machineId: 'planetary-gearbox', slugAliases: ['epicyclic-gearbox', 'planetary-gear-set', 'planetary-gear-train'], title: 'Planetary Gearbox', category: 'Gearboxes & Drives', difficulty: 'Intermediate', complexityScore: 5, registryKeywords: ['planetary', 'epicyclic', 'sun gear', 'planet carrier', 'ring gear', 'gear ratio'], oneParagraphDescription: 'A planetary gearbox uses a central sun gear, orbiting planet gears, and an internal ring gear to create compact coaxial speed reduction or overdrive. The model supports selectable input, output, and held members so learners can see how different constraints change rotation direction and ratio.', learningObjectives: [ 'Identify the sun, planets, carrier, and ring gear.', 'Explain why planet gears both spin and orbit.', 'Compare ratio modes by holding different members fixed.', 'Understand why planetary sets are compact and coaxial.', ], facts: [ { label: 'Basic members', value: 'Sun, planets, carrier, ring', details: 'Three active members produce multiple ratios depending on which is input, output, and held.', }, { label: 'Packaging', value: 'Coaxial input/output', details: 'Useful when high torque density is needed in a compact radial envelope.', }, { label: 'Common uses', value: 'Automatic transmissions, hybrid drives, robotics', details: 'Planetary sets combine ratio flexibility with good load sharing.', }, { label: 'Load sharing', value: 'Multiple planet meshes', details: 'Torque is shared across planet gears if carrier and manufacturing tolerances are controlled.', }, { label: 'Typical reduction', value: '3:1–10:1 per stage', details: 'Multiple stages can be cascaded for much higher reductions.', }, ], componentTree: [ { id: 'planetary-gear-core', name: 'Epicyclic gear core', kind: 'assembly', description: 'The meshing sun, planet gears, ring gear, and carrier form the ratio-producing train.', engineeringRole: 'Creates compact coaxial transmission with selectable reaction member.', materialHint: 'machined steel gears with blue carrier and dark housing', labelAnchor: [0, 0, 0], explodedOffset: [0, 0, 0.2], replacementNode: 'PlanetaryGearCore', animationChannels: ['sun-rotation', 'planet-spin', 'carrier-orbit', 'ring-rotation'], children: [ { id: 'sun-gear', name: 'Sun gear', kind: 'part', description: 'Central external gear meshing with all planet gears.', engineeringRole: 'Often serves as the high-speed input in reduction configurations.', materialHint: 'warm machined steel', labelAnchor: [0, 0.12, 0], explodedOffset: [0, 0, 0.45], replacementNode: 'SunGear', animationChannels: ['sun-rotation'], }, { id: 'planet-gears', name: 'Planet gears', kind: 'assembly', description: 'Equally spaced gears that mesh with both the sun and internal ring teeth.', engineeringRole: 'Share load while spinning on pins and orbiting with the carrier.', materialHint: 'polished steel with individual tooth highlights', labelAnchor: [0.72, 0.12, 0], explodedOffset: [0.38, 0, 0.5], replacementNode: 'PlanetGears', animationChannels: ['planet-spin', 'carrier-orbit'], }, { id: 'planet-carrier', name: 'Planet carrier', kind: 'part', description: 'Cage holding planet pins and providing the orbital output member.', engineeringRole: 'Combines planet pin forces and transmits them as coaxial torque.', materialHint: 'blue anodized carrier plate', labelAnchor: [0, -0.12, 0.12], explodedOffset: [0, 0, 0.75], replacementNode: 'PlanetCarrier', animationChannels: ['carrier-orbit'], }, { id: 'ring-gear', name: 'Internal ring gear', kind: 'part', description: 'Outer gear with inward-facing teeth around the planet set.', engineeringRole: 'Acts as input, output, or reaction member depending on mode.', materialHint: 'dark steel annulus with visible internal teeth', labelAnchor: [0, 0.98, 0], explodedOffset: [0, 0.38, 0.35], replacementNode: 'RingGear', animationChannels: ['ring-rotation'], }, ], }, { id: 'planetary-shafts-controls', name: 'Shafts, bearings, and mode controls', kind: 'assembly', description: 'Coaxial input/output shafts, reaction brake, and selector overlay define the active ratio.', engineeringRole: 'Makes the otherwise abstract member constraints visible and interactive.', materialHint: 'dark housing, polished shafts, orange brake band', labelAnchor: [0, -0.8, 0], explodedOffset: [0, -0.25, 0], replacementNode: 'PlanetaryShaftsControls', animationChannels: ['mode-selection-highlight'], children: [ { id: 'input-shaft-planetary', name: 'Input shaft', kind: 'part', description: 'Coaxial shaft driving the selected input member.', engineeringRole: 'Applies torque to sun, carrier, or ring depending on chosen mode.', materialHint: 'polished steel shaft with blue input arrow', labelAnchor: [-0.12, -0.98, 0], explodedOffset: [-0.12, -0.48, 0], replacementNode: 'PlanetaryInputShaft', animationChannels: ['sun-rotation', 'ring-rotation', 'carrier-orbit'], }, { id: 'output-shaft-planetary', name: 'Output shaft', kind: 'part', description: 'Coaxial shaft coupled to the selected output member.', engineeringRole: 'Carries the computed ratio result to the load.', materialHint: 'polished steel shaft with amber output arrow', labelAnchor: [0.12, -1.08, 0], explodedOffset: [0.12, -0.5, 0], replacementNode: 'PlanetaryOutputShaft', animationChannels: ['carrier-orbit', 'ring-rotation', 'sun-rotation'], }, { id: 'reaction-brake', name: 'Reaction brake', kind: 'control', description: 'Diagrammatic brake band showing which member is held stationary.', engineeringRole: 'Provides the fixed reaction needed to produce speed reduction.', materialHint: 'warm orange brake band', labelAnchor: [0.95, -0.52, 0], explodedOffset: [0.45, -0.25, 0], replacementNode: 'ReactionBrake', animationChannels: ['mode-selection-highlight'], }, { id: 'ratio-mode-overlay', name: 'Ratio mode overlay', kind: 'sensor', description: 'Text and arrows displaying active input, output, held member, and ratio.', engineeringRole: 'Connects kinematic constraints to visible speed and direction.', materialHint: 'emissive typography overlay', labelAnchor: [-0.9, -0.52, 0], explodedOffset: [-0.45, -0.25, 0], replacementNode: 'RatioModeOverlay', animationChannels: ['mode-selection-highlight'], }, ], }, ], labels: [ { partId: 'sun-gear', text: 'Sun gear is the central member', position: [0.05, 0.2, 0.52], priority: 'primary' }, { partId: 'planet-gears', text: 'Planets spin and orbit', position: [0.86, 0.24, 0.42], priority: 'primary' }, { partId: 'ring-gear', text: 'Internal teeth form the outer member', position: [0.14, 1.12, 0.32], priority: 'primary' }, { partId: 'reaction-brake', text: 'Held member sets the ratio', position: [1.12, -0.58, 0.26], priority: 'secondary' }, ], cameraPresets: makeCameraPresets(4.3, [0, 0, 0.12], { id: 'gear-mesh', label: 'Gear Mesh', position: [1.2, 1.45, 2.25], target: [0.28, 0.15, 0.12], description: 'Close-up of sun, planet, and ring tooth contact.', }), guidedTour: [ { id: 'members', title: 'Four members, many ratios', body: 'The sun, ring, and carrier can each be input, output, or held to create different ratios.', cameraPresetId: 'isometric', highlightedPartIds: ['sun-gear', 'planet-gears', 'planet-carrier', 'ring-gear'], durationSeconds: 7, animationTimeScale: 0.45, setExplode: 0.08, }, { id: 'planet-motion', title: 'Spin plus orbit', body: 'Each planet gear spins on its pin while the carrier orbits the pins around the sun.', cameraPresetId: 'gear-mesh', highlightedPartIds: ['planet-gears', 'planet-carrier', 'sun-gear'], durationSeconds: 7, animationTimeScale: 0.35, setExplode: 0.14, }, { id: 'reaction-member', title: 'Holding the ring', body: 'With the ring held by the reaction brake and the sun driven, the carrier turns slower with more torque.', cameraPresetId: 'front', highlightedPartIds: ['ring-gear', 'reaction-brake', 'input-shaft-planetary', 'output-shaft-planetary'], durationSeconds: 7, animationTimeScale: 0.45, setExplode: 0.18, }, { id: 'mode-overlay', title: 'Ratio mode selector', body: 'Switching the held member changes direction and speed without changing the physical gear set.', cameraPresetId: 'top', highlightedPartIds: ['ratio-mode-overlay', 'sun-gear', 'planet-carrier', 'ring-gear'], durationSeconds: 6, animationTimeScale: 0.4, setExplode: 0.12, }, ], animationModel: { nominalRpm: 120, cycleSecondsAtNominal: 0.5, loopMode: 'continuous', stepCount: 3, primaryDriver: 'selected-member-angular-velocity', engineeringNotes: 'The default teaching mode drives the sun, holds the ring, and outputs the carrier. Additional modes can be selected by changing member angular velocities from the Willis equation.', channels: [ { id: 'sun-rotation', label: 'Sun gear rotation', targetPartIds: ['sun-gear', 'input-shaft-planetary'], transform: 'rotation', driver: 'input angular velocity ωs', expression: 'rotate sun at selected input speed; default +1.0 normalized', phaseDeg: 0, notes: 'Reverse direction when sun is output in alternate modes.', }, { id: 'planet-spin', label: 'Planet gear spin', targetPartIds: ['planet-gears'], transform: 'rotation', driver: 'mesh constraint', expression: 'planet spin derived from sun/ring relative velocity and gear tooth counts', phaseDeg: 0, notes: 'Planets spin opposite sun in default held-ring reduction.', }, { id: 'carrier-orbit', label: 'Carrier orbit', targetPartIds: ['planet-carrier', 'planet-gears', 'output-shaft-planetary'], transform: 'rotation', driver: 'Willis equation', expression: 'ωcarrier = (Ns·ωsun + Nr·ωring) / (Ns + Nr)', phaseDeg: 0, notes: 'With ring fixed, carrier turns same direction as sun at reduced speed.', }, { id: 'ring-rotation', label: 'Ring gear rotation', targetPartIds: ['ring-gear'], transform: 'rotation', driver: 'selected ratio mode', expression: 'default ωring = 0; alternate modes rotate ring as input or output', phaseDeg: 0, notes: 'Reaction brake material should glow when ring is held.', }, { id: 'mode-selection-highlight', label: 'Mode selection highlight', targetPartIds: ['reaction-brake', 'ratio-mode-overlay'], transform: 'material', driver: 'selected mode', expression: 'highlight input blue, output amber, held member orange', phaseDeg: 0, notes: 'Overlay text should remain synchronized with selected kinematic mode.', }, ], }, explodedView: { defaultDistance: 0.3, maxDistance: 1.05, groups: [ { id: 'ring-up', label: 'Ring gear', partIds: ['ring-gear', 'reaction-brake'], axis: 'y', direction: 1, order: 1, reason: 'Lifts the internal gear to reveal planet meshes and the reaction brake.', }, { id: 'carrier-forward', label: 'Carrier and planets', partIds: ['planet-carrier', 'planet-gears'], axis: 'z', direction: 1, order: 2, reason: 'Separates the orbiting assembly from the central sun.', }, { id: 'shafts-down', label: 'Input/output shafts', partIds: ['input-shaft-planetary', 'output-shaft-planetary', 'ratio-mode-overlay'], axis: 'y', direction: -1, order: 3, reason: 'Exposes coaxial input and output routing.', }, ], }, crossSection: { defaultAxis: 'z', recommendedPlanes: [ { id: 'gear-plane', label: 'Gear mesh plane', axis: 'z', offset: 0.05, description: 'Cuts through the sun, planets, and ring teeth.', }, { id: 'shaft-centreline', label: 'Shaft centreline', axis: 'y', offset: -0.15, description: 'Shows coaxial input and output shaft layering.', }, ], }, thumbnail: makeThumbnailStrategy( ['ring-gear', 'planet-gears', 'sun-gear'], ['planet-carrier', 'reaction-brake'], 'Render front-on with ring teeth and three planets visible; add blue input and amber output arrows.', ), assetReplacement: { proceduralBlueprintId: 'planetary-gearbox', preferredGlbPath: 'src/assets/machines/planetary-gearbox/planetary-gearbox.glb', rootNodeName: 'PlanetaryGearbox', requiredNamedNodes: ['SunGear', 'PlanetGears', 'PlanetCarrier', 'RingGear'], optionalNamedNodes: ['PlanetaryInputShaft', 'PlanetaryOutputShaft', 'ReactionBrake', 'RatioModeOverlay', 'HousingCutaway'], materialSlots: ['machined-steel', 'carrier-blue', 'reaction-orange', 'housing-dark', 'input-blue', 'output-amber'], coordinateSystem: 'Y up, gear plane in XY, gearbox axis along Z, origin at sun gear centre.', replacementInstructions: 'Planet gear pivots must be centered on their own pins and parented under the carrier orbit group. Keep ring gear as a separate selectable internal-tooth annulus.', }, relatedMachines: ['manual-gearbox-5-speed', 'differential-gear', 'worm-gear-drive'], }, { machineId: 'differential-gear', slugAliases: ['open-differential', 'automotive-differential', 'bevel-differential'], title: 'Differential Gear', category: 'Gearboxes & Drives', difficulty: 'Intermediate', complexityScore: 5, registryKeywords: ['differential', 'spider gears', 'side gears', 'ring gear', 'cornering', 'torque split'], oneParagraphDescription: 'An open differential lets left and right drive wheels rotate at different speeds while receiving torque through a shared carrier. The procedural assembly shows the ring gear driving a carrier, spider gears walking around side gears during cornering, and axle arrows that demonstrate equal torque but unequal speed.', learningObjectives: [ 'Identify ring gear, pinion, carrier, spider gears, side gears, and axle shafts.', 'Explain why wheel speeds differ during a turn.', 'Understand that an open differential splits torque but not necessarily speed.', 'Recognize the traction limitation when one wheel has low grip.', ], facts: [ { label: 'Purpose', value: 'Allows wheel speed difference', details: 'Outer wheels travel a larger radius in a turn and must rotate faster.', }, { label: 'Torque behavior', value: 'Approximately equal axle torque', details: 'An open differential sends equal torque to both side gears, limited by the lower-traction side.', }, { label: 'Gear type', value: 'Bevel spider gears', details: 'Small bevel gears mesh with side gears while rotating with the carrier.', }, { label: 'Vehicle location', value: 'Final drive axle or transaxle', details: 'Driven by a pinion and ring gear before torque reaches axle shafts.', }, { label: 'Enhancements', value: 'Limited-slip and locking variants', details: 'Additional clutch, brake, or gear systems limit excessive speed difference.', }, ], componentTree: [ { id: 'final-drive-input', name: 'Final drive input', kind: 'assembly', description: 'Pinion and ring gear turn longitudinal drive torque into carrier rotation.', engineeringRole: 'Provides final reduction and rotates the differential carrier.', materialHint: 'machined bevel gears with oil-dark housing', labelAnchor: [0, 0.45, 0], explodedOffset: [0, 0.25, 0], replacementNode: 'FinalDriveInput', animationChannels: ['pinion-rotation', 'ring-carrier-rotation'], children: [ { id: 'drive-pinion', name: 'Drive pinion', kind: 'part', description: 'Small bevel pinion connected to the driveshaft.', engineeringRole: 'Drives the larger ring gear and changes torque direction.', materialHint: 'polished steel spiral bevel pinion', labelAnchor: [-0.85, 0.28, 0], explodedOffset: [-0.48, 0.12, 0], replacementNode: 'DrivePinion', animationChannels: ['pinion-rotation'], }, { id: 'ring-gear-differential', name: 'Ring gear', kind: 'part', description: 'Large bevel ring bolted to the differential carrier.', engineeringRole: 'Multiplies torque and spins the carrier around the axle axis.', materialHint: 'dark machined gear with warm tooth edges', labelAnchor: [0, 0.72, 0], explodedOffset: [0, 0.45, 0], replacementNode: 'DifferentialRingGear', animationChannels: ['ring-carrier-rotation'], }, ], }, { id: 'differential-carrier-assembly', name: 'Carrier and spider gears', kind: 'assembly', description: 'Rotating cage carrying spider pinions between the left and right side gears.', engineeringRole: 'Splits torque while permitting relative axle speed.', materialHint: 'blue carrier cage and steel bevel gears', labelAnchor: [0, 0, 0], explodedOffset: [0, 0, 0.22], replacementNode: 'DifferentialCarrierAssembly', animationChannels: ['ring-carrier-rotation', 'spider-spin'], children: [ { id: 'differential-carrier', name: 'Differential carrier', kind: 'part', description: 'Cage bolted to the ring gear and rotating around the axle axis.', engineeringRole: 'Holds spider pins and transmits final-drive torque into the differential gearset.', materialHint: 'blue cast carrier cage', labelAnchor: [0, 0.1, 0], explodedOffset: [0, 0, 0.38], replacementNode: 'DifferentialCarrier', animationChannels: ['ring-carrier-rotation'], }, { id: 'spider-gears', name: 'Spider gears', kind: 'assembly', description: 'Small bevel pinions mounted on cross shafts inside the carrier.', engineeringRole: 'Walk around side gears when axle speeds differ.', materialHint: 'polished steel bevel pinions', labelAnchor: [0.2, 0.24, 0.16], explodedOffset: [0.22, 0.14, 0.45], replacementNode: 'SpiderGears', animationChannels: ['spider-spin'], }, { id: 'cross-pin', name: 'Cross pin', kind: 'part', description: 'Shaft supporting the spider gears in the carrier.', engineeringRole: 'Carries gear separating forces and defines spider gear axis.', materialHint: 'hardened steel pin', labelAnchor: [0, 0.34, 0], explodedOffset: [0, 0.22, 0.46], replacementNode: 'CrossPin', animationChannels: ['ring-carrier-rotation'], }, ], }, { id: 'differential-output-axles', name: 'Side gears and axles', kind: 'assembly', description: 'Left and right side gears spline to axle shafts and rotate at turn-dependent speeds.', engineeringRole: 'Deliver torque to each wheel while allowing speed difference.', materialHint: 'machined steel gears and amber/cool axle arrows', labelAnchor: [0, -0.45, 0], explodedOffset: [0, -0.25, 0], replacementNode: 'DifferentialOutputAxles', animationChannels: ['left-axle-rotation', 'right-axle-rotation', 'cornering-speed-overlay'], children: [ { id: 'left-side-gear', name: 'Left side gear', kind: 'part', description: 'Bevel gear splined to the left axle shaft.', engineeringRole: 'Receives torque from spider gears and drives the left wheel.', materialHint: 'cool blue steel gear', labelAnchor: [-0.42, -0.12, 0], explodedOffset: [-0.55, -0.08, 0], replacementNode: 'LeftSideGear', animationChannels: ['left-axle-rotation'], }, { id: 'right-side-gear', name: 'Right side gear', kind: 'part', description: 'Bevel gear splined to the right axle shaft.', engineeringRole: 'Receives torque from spider gears and drives the right wheel.', materialHint: 'warm amber steel gear', labelAnchor: [0.42, -0.12, 0], explodedOffset: [0.55, -0.08, 0], replacementNode: 'RightSideGear', animationChannels: ['right-axle-rotation'], }, { id: 'left-axle', name: 'Left axle shaft', kind: 'part', description: 'Output shaft leading to the inside or outside wheel depending on turn direction.', engineeringRole: 'Carries wheel torque while rotating at wheel-specific speed.', materialHint: 'blue output shaft', labelAnchor: [-1.05, -0.22, 0], explodedOffset: [-0.75, -0.12, 0], replacementNode: 'LeftAxle', animationChannels: ['left-axle-rotation'], }, { id: 'right-axle', name: 'Right axle shaft', kind: 'part', description: 'Output shaft opposite the left axle.', engineeringRole: 'Rotates faster on the outside of a turn and slower on the inside.', materialHint: 'amber output shaft', labelAnchor: [1.05, -0.22, 0], explodedOffset: [0.75, -0.12, 0], replacementNode: 'RightAxle', animationChannels: ['right-axle-rotation'], }, { id: 'cornering-speed-overlay', name: 'Cornering speed overlay', kind: 'sensor', description: 'Arc arrows and numeric multipliers showing inside and outside wheel speeds.', engineeringRole: 'Turns the differential kinematics into an intuitive vehicle-cornering diagram.', materialHint: 'emissive blue and amber arrows', labelAnchor: [0, -0.85, 0], explodedOffset: [0, -0.52, 0], replacementNode: 'CorneringSpeedOverlay', animationChannels: ['cornering-speed-overlay'], }, ], }, ], labels: [ { partId: 'ring-gear-differential', text: 'Ring gear drives the carrier', position: [0, 0.9, 0.28], priority: 'primary' }, { partId: 'spider-gears', text: 'Spider gears spin only when axle speeds differ', position: [0.35, 0.38, 0.32], priority: 'primary' }, { partId: 'left-side-gear', text: 'Side gears spline to axles', position: [-0.52, -0.22, 0.28], priority: 'secondary' }, { partId: 'cornering-speed-overlay', text: 'Outer wheel rotates faster in a turn', position: [0, -1.05, 0.24], priority: 'secondary' }, ], cameraPresets: makeCameraPresets(4.8, [0, 0, 0], { id: 'spider-mesh', label: 'Spider Mesh', position: [1.25, 1.15, 2.35], target: [0.05, 0.05, 0], description: 'Close-up of spider gears meshing with side gears inside the carrier.', }), guidedTour: [ { id: 'drive-to-carrier', title: 'Final drive rotates the carrier', body: 'The pinion drives the ring gear, and the ring gear turns the whole differential carrier.', cameraPresetId: 'front', highlightedPartIds: ['drive-pinion', 'ring-gear-differential', 'differential-carrier'], durationSeconds: 7, animationTimeScale: 0.45, setExplode: 0.1, }, { id: 'straight-line', title: 'Straight-line driving', body: 'When both wheels need the same speed, spider gears orbit with the carrier but do not spin much on their pins.', cameraPresetId: 'spider-mesh', highlightedPartIds: ['spider-gears', 'left-side-gear', 'right-side-gear'], durationSeconds: 7, animationTimeScale: 0.35, setExplode: 0.16, crossSection: { axis: 'z', offset: 0 }, }, { id: 'cornering', title: 'Cornering speed difference', body: 'In a turn, spider gears walk around the slower side gear, allowing the outside axle to rotate faster.', cameraPresetId: 'top', highlightedPartIds: ['spider-gears', 'left-axle', 'right-axle', 'cornering-speed-overlay'], durationSeconds: 8, animationTimeScale: 0.35, setExplode: 0.22, }, { id: 'traction-limit', title: 'Open differential limitation', body: 'Because torque is shared through the gear mesh, a low-grip wheel can limit useful torque on the other side.', cameraPresetId: 'isometric', highlightedPartIds: ['left-side-gear', 'right-side-gear', 'cornering-speed-overlay'], durationSeconds: 6, animationTimeScale: 0.3, setExplode: 0.18, }, ], animationModel: { nominalRpm: 90, cycleSecondsAtNominal: 0.667, loopMode: 'continuous', stepCount: 3, primaryDriver: 'carrier-speed-and-turn-bias', engineeringNotes: 'Default mode demonstrates a left turn with right axle faster than left. Straight-line mode sets axle speeds equal and minimizes spider spin.', channels: [ { id: 'pinion-rotation', label: 'Drive pinion rotation', targetPartIds: ['drive-pinion'], transform: 'rotation', driver: 'driveshaft speed', expression: 'rotate pinion faster than ring gear according to final-drive ratio', phaseDeg: 0, notes: 'Pinion axis is perpendicular to axle axis.', }, { id: 'ring-carrier-rotation', label: 'Ring and carrier rotation', targetPartIds: ['ring-gear-differential', 'differential-carrier', 'cross-pin'], transform: 'rotation', driver: 'pinion mesh ratio', expression: 'carrier angular speed is average of left and right axle speeds', phaseDeg: 0, notes: 'Carrier continues rotating even when spider gears spin on their pins.', }, { id: 'spider-spin', label: 'Spider gear spin', targetPartIds: ['spider-gears'], transform: 'rotation', driver: 'left/right axle speed difference', expression: 'spin on cross-pin proportional to right axle speed minus left axle speed', phaseDeg: 0, notes: 'Zero or near-zero in straight-line demo.', }, { id: 'left-axle-rotation', label: 'Left axle rotation', targetPartIds: ['left-side-gear', 'left-axle'], transform: 'rotation', driver: 'carrier speed minus turn bias', expression: 'ωleft = ωcarrier - Δω', phaseDeg: 0, notes: 'Inside wheel in default left-turn demonstration.', }, { id: 'right-axle-rotation', label: 'Right axle rotation', targetPartIds: ['right-side-gear', 'right-axle'], transform: 'rotation', driver: 'carrier speed plus turn bias', expression: 'ωright = ωcarrier + Δω', phaseDeg: 0, notes: 'Outside wheel in default left-turn demonstration.', }, { id: 'cornering-speed-overlay', label: 'Cornering speed overlay', targetPartIds: ['cornering-speed-overlay'], transform: 'material', driver: 'turn bias', expression: 'display speed multipliers and arrow length from Δω', phaseDeg: 0, notes: 'Overlay helps explain equal torque but unequal speed.', }, ], }, explodedView: { defaultDistance: 0.32, maxDistance: 1.15, groups: [ { id: 'final-drive-up', label: 'Final drive', partIds: ['drive-pinion', 'ring-gear-differential'], axis: 'y', direction: 1, order: 1, reason: 'Separates the pinion/ring reduction from the differential gearset.', }, { id: 'carrier-forward', label: 'Carrier and spider gears', partIds: ['differential-carrier', 'spider-gears', 'cross-pin'], axis: 'z', direction: 1, order: 2, reason: 'Opens the carrier so internal spider action is visible.', }, { id: 'axles-outward', label: 'Side gears and axles', partIds: ['left-side-gear', 'right-side-gear', 'left-axle', 'right-axle'], axis: 'x', direction: 1, order: 3, reason: 'Shows separate axle speeds and side gear connections.', }, ], }, crossSection: { defaultAxis: 'z', recommendedPlanes: [ { id: 'carrier-centre', label: 'Carrier centre', axis: 'z', offset: 0, description: 'Cuts through spider gears and side gears.', }, { id: 'axle-axis', label: 'Axle axis', axis: 'y', offset: -0.12, description: 'Exposes both side gears and axle shaft splines.', }, ], }, thumbnail: makeThumbnailStrategy( ['ring-gear-differential', 'differential-carrier', 'left-axle', 'right-axle'], ['spider-gears', 'cornering-speed-overlay'], 'Render with the carrier cut open and asymmetric axle arrows to convey the cornering demonstration.', ), assetReplacement: { proceduralBlueprintId: 'differential-gear', preferredGlbPath: 'src/assets/machines/differential-gear/differential-gear.glb', rootNodeName: 'DifferentialGear', requiredNamedNodes: [ 'DrivePinion', 'DifferentialRingGear', 'DifferentialCarrier', 'SpiderGears', 'LeftSideGear', 'RightSideGear', 'LeftAxle', 'RightAxle', ], optionalNamedNodes: ['CrossPin', 'CorneringSpeedOverlay', 'HousingCutaway', 'BearingCaps'], materialSlots: ['machined-steel', 'carrier-blue', 'housing-dark', 'input-blue', 'output-amber', 'overlay-emissive'], coordinateSystem: 'Y up, axle axis along X, pinion approaches from negative Z, origin at side-gear centre.', replacementInstructions: 'Spider gears require local spin pivots plus a parent carrier rotation. Keep left and right side gears independent so cornering speed bias can be animated.', }, relatedMachines: ['bevel-gear-set', 'planetary-gearbox', 'manual-gearbox-5-speed'], }, { machineId: 'manual-gearbox-5-speed', slugAliases: ['manual-gearbox', 'five-speed-manual-transmission', 'synchromesh-gearbox'], title: 'Manual Gearbox (5-speed)', category: 'Gearboxes & Drives', difficulty: 'Advanced', complexityScore: 8, registryKeywords: ['manual transmission', '5 speed', 'synchromesh', 'layshaft', 'selector forks', 'gear pairs'], oneParagraphDescription: 'A five-speed manual gearbox uses constant-mesh gear pairs, a layshaft, synchronizer hubs, and selector forks to provide driver-selectable ratios. The procedural cutaway groups gears by ratio and animates synchro sleeve engagement so learners can distinguish freely spinning gears from the locked output member.', learningObjectives: [ 'Identify input shaft, layshaft, output shaft, gear pairs, synchros, selector forks, and reverse idler.', 'Explain how constant-mesh gears can spin freely until locked by a synchronizer.', 'Compare low, high, and direct/overdrive ratios.', 'Understand why selector interlocks prevent simultaneous gear engagement.', ], facts: [ { label: 'Gear count', value: '5 forward + reverse', details: 'The teaching model shows five forward ratios and a separate reverse idler path.', }, { label: 'Engagement', value: 'Dog teeth via synchronizer sleeve', details: 'The synchro matches speed before dog teeth lock the selected gear to the output shaft.', }, { label: 'Input path', value: 'Input gear drives layshaft', details: 'The layshaft carries fixed gears that mesh with freely spinning output gears.', }, { label: 'Driver control', value: 'Selector forks and rails', details: 'The shifter moves one fork at a time to slide a synchronizer sleeve.', }, { label: 'Applications', value: 'Cars, light trucks, motorsport', details: 'Valued for efficiency, control, and mechanical simplicity.', }, ], componentTree: [ { id: 'manual-transmission-shafts', name: 'Transmission shafts', kind: 'assembly', description: 'Input shaft, layshaft, and output shaft carry torque through selectable gear meshes.', engineeringRole: 'Organizes the torque path and supports rotating gear pairs.', materialHint: 'polished steel shafts with blue input and amber output markers', labelAnchor: [0, 0, 0], explodedOffset: [0, -0.18, 0], replacementNode: 'ManualTransmissionShafts', animationChannels: ['input-shaft-rotation', 'layshaft-rotation', 'output-shaft-rotation'], children: [ { id: 'manual-input-shaft', name: 'Input shaft', kind: 'part', description: 'Shaft driven by the clutch and engine.', engineeringRole: 'Brings engine torque into the gearbox and drives the layshaft cluster.', materialHint: 'polished steel with blue arrow', labelAnchor: [-1.3, 0.22, 0], explodedOffset: [-0.35, 0, 0], replacementNode: 'ManualInputShaft', animationChannels: ['input-shaft-rotation'], }, { id: 'layshaft', name: 'Layshaft', kind: 'part', description: 'Countershaft carrying fixed gears that rotate together.', engineeringRole: 'Transfers torque from input to the selected output gear pair.', materialHint: 'dark steel shaft with fixed gear cluster', labelAnchor: [0, -0.42, 0], explodedOffset: [0, -0.5, 0], replacementNode: 'Layshaft', animationChannels: ['layshaft-rotation'], }, { id: 'manual-output-shaft', name: 'Output shaft', kind: 'part', description: 'Shaft connected to prop shaft or final drive.', engineeringRole: 'Receives torque when a selected gear is locked by its synchronizer.', materialHint: 'polished steel with amber arrow', labelAnchor: [1.28, 0.22, 0], explodedOffset: [0.35, 0, 0], replacementNode: 'ManualOutputShaft', animationChannels: ['output-shaft-rotation'], }, ], }, { id: 'manual-gear-pairs', name: 'Constant-mesh gear pairs', kind: 'assembly', description: 'Five forward gear pairs and a reverse idler are always meshed but not always transmitting torque.', engineeringRole: 'Provide different speed ratios by gear tooth-count differences.', materialHint: 'machined steel gears with ratio color bands', labelAnchor: [0, 0.35, 0], explodedOffset: [0, 0.28, 0], replacementNode: 'ManualGearPairs', animationChannels: ['free-gear-spin', 'selected-ratio-highlight'], children: [ { id: 'first-second-gear-pair', name: '1st/2nd gear pair group', kind: 'assembly', description: 'Large reduction gears for launch and low-speed acceleration.', engineeringRole: 'Multiplies torque at the expense of output speed.', materialHint: 'large steel gears with blue ratio bands', labelAnchor: [-0.72, 0.42, 0], explodedOffset: [-0.18, 0.38, 0], replacementNode: 'FirstSecondGearPair', animationChannels: ['free-gear-spin', 'selected-ratio-highlight'], }, { id: 'third-fourth-gear-pair', name: '3rd/4th gear pair group', kind: 'assembly', description: 'Mid-range ratios for acceleration and cruising.', engineeringRole: 'Balances torque multiplication and road speed.', materialHint: 'medium steel gears with white ratio bands', labelAnchor: [0.05, 0.42, 0], explodedOffset: [0, 0.38, 0], replacementNode: 'ThirdFourthGearPair', animationChannels: ['free-gear-spin', 'selected-ratio-highlight'], }, { id: 'fifth-gear-pair', name: '5th gear pair', kind: 'assembly', description: 'High or overdrive gear pair for efficient cruising.', engineeringRole: 'Reduces engine speed relative to road speed.', materialHint: 'smaller steel gears with amber band', labelAnchor: [0.72, 0.42, 0], explodedOffset: [0.18, 0.38, 0], replacementNode: 'FifthGearPair', animationChannels: ['free-gear-spin', 'selected-ratio-highlight'], }, { id: 'reverse-idler', name: 'Reverse idler', kind: 'part', description: 'Intermediate gear inserted to reverse output rotation.', engineeringRole: 'Adds one mesh so the output direction reverses.', materialHint: 'dark steel idler gear with red marker', labelAnchor: [-0.1, 0.82, 0], explodedOffset: [0, 0.68, 0], replacementNode: 'ReverseIdler', animationChannels: ['reverse-idler-engagement'], }, ], }, { id: 'synchro-selector-system', name: 'Synchro and selector system', kind: 'assembly', description: 'Synchronizer hubs, sleeves, forks, and rails select one gear while matching speed.', engineeringRole: 'Locks the chosen gear to the output shaft only after friction cones synchronize speed.', materialHint: 'brass cones, blue forks, amber selected sleeve', labelAnchor: [0, 0.85, 0], explodedOffset: [0, 0.52, 0], replacementNode: 'SynchroSelectorSystem', animationChannels: ['synchro-sleeve-slide', 'selector-fork-motion', 'selected-ratio-highlight'], children: [ { id: 'synchro-hubs', name: 'Synchronizer hubs', kind: 'assembly', description: 'Splined hubs fixed to the output shaft.', engineeringRole: 'Carry the sliding sleeve and transmit locked gear torque to the output shaft.', materialHint: 'dark steel hubs with brass cones', labelAnchor: [-0.22, 0.72, 0], explodedOffset: [-0.05, 0.6, 0], replacementNode: 'SynchroHubs', animationChannels: ['synchro-sleeve-slide'], }, { id: 'synchro-sleeves', name: 'Synchronizer sleeves', kind: 'assembly', description: 'Sliding collars with dog teeth that lock the selected gear.', engineeringRole: 'Engage one side or the other to couple a free gear to the shaft.', materialHint: 'amber highlighted collars', labelAnchor: [0.22, 0.72, 0], explodedOffset: [0.05, 0.68, 0], replacementNode: 'SynchroSleeves', animationChannels: ['synchro-sleeve-slide', 'selected-ratio-highlight'], }, { id: 'selector-forks', name: 'Selector forks', kind: 'assembly', description: 'Forks that move synchronizer sleeves along the shaft.', engineeringRole: 'Translate driver shift-rail motion into sleeve engagement.', materialHint: 'blue anodized forks', labelAnchor: [0, 1.08, 0], explodedOffset: [0, 0.86, 0], replacementNode: 'SelectorForks', animationChannels: ['selector-fork-motion'], }, { id: 'shift-rails', name: 'Shift rails and interlock', kind: 'part', description: 'Parallel rails and detents that permit only one gear selection at a time.', engineeringRole: 'Prevents two ratios from being locked simultaneously.', materialHint: 'polished rods with red detent dots', labelAnchor: [0, 1.28, 0], explodedOffset: [0, 1.02, 0], replacementNode: 'ShiftRails', animationChannels: ['selector-fork-motion'], }, ], }, ], labels: [ { partId: 'layshaft', text: 'Layshaft gears rotate together', position: [0, -0.62, 0.26], priority: 'primary' }, { partId: 'synchro-sleeves', text: 'Sleeve locks one free gear to output', position: [0.32, 0.9, 0.3], priority: 'primary' }, { partId: 'selector-forks', text: 'Selector fork slides the synchro sleeve', position: [0.1, 1.24, 0.28], priority: 'secondary' }, { partId: 'reverse-idler', text: 'Reverse idler changes rotation direction', position: [0.02, 1.0, 0.24], priority: 'detail' }, ], cameraPresets: makeCameraPresets(5.8, [0, 0.28, 0], { id: 'synchro-cutaway', label: 'Synchro Cutaway', position: [1.45, 1.5, 2.8], target: [0.1, 0.68, 0], description: 'Close-up on selector fork, sleeve, and dog teeth engagement.', }), guidedTour: [ { id: 'constant-mesh-layout', title: 'Constant mesh layout', body: 'The gear pairs are already meshed; selecting a gear means locking one free gear to the output shaft.', cameraPresetId: 'isometric', highlightedPartIds: ['manual-input-shaft', 'layshaft', 'manual-output-shaft', 'manual-gear-pairs'], durationSeconds: 8, animationTimeScale: 0.4, setExplode: 0.08, }, { id: 'low-to-high-ratios', title: 'Ratios change by gear size', body: 'Large low gears multiply torque, while fifth gear reduces engine speed for cruising.', cameraPresetId: 'front', highlightedPartIds: ['first-second-gear-pair', 'third-fourth-gear-pair', 'fifth-gear-pair'], durationSeconds: 7, animationTimeScale: 0.45, setExplode: 0.16, }, { id: 'synchro-engagement', title: 'Synchronizer engagement', body: 'The fork moves a sleeve; friction synchronizes speed before dog teeth lock the selected gear.', cameraPresetId: 'synchro-cutaway', highlightedPartIds: ['selector-forks', 'synchro-hubs', 'synchro-sleeves'], durationSeconds: 8, animationTimeScale: 0.25, setExplode: 0.26, crossSection: { axis: 'z', offset: 0 }, }, { id: 'reverse-path', title: 'Reverse adds an idler', body: 'The reverse idler inserts an extra gear mesh so the output shaft turns opposite the input.', cameraPresetId: 'top', highlightedPartIds: ['reverse-idler', 'layshaft', 'manual-output-shaft'], durationSeconds: 6, animationTimeScale: 0.35, setExplode: 0.2, }, ], animationModel: { nominalRpm: 300, cycleSecondsAtNominal: 0.2, loopMode: 'demonstration', stepCount: 6, primaryDriver: 'selected-gear-index', engineeringNotes: 'Animation should support play-through from neutral through gears 1–5 and reverse. Gear meshes rotate continuously, while the selected synchro sleeve slides during gear changes.', channels: [ { id: 'input-shaft-rotation', label: 'Input shaft rotation', targetPartIds: ['manual-input-shaft'], transform: 'rotation', driver: 'engine speed', expression: 'rotate at selected RPM regardless of gear selection unless paused', phaseDeg: 0, notes: 'Input rotation provides visible reference for all ratios.', }, { id: 'layshaft-rotation', label: 'Layshaft rotation', targetPartIds: ['layshaft'], transform: 'rotation', driver: 'input constant mesh', expression: 'rotate layshaft according to input gear pair reduction', phaseDeg: 0, notes: 'Fixed gears on layshaft rotate together as one cluster.', }, { id: 'free-gear-spin', label: 'Free output gear spin', targetPartIds: ['first-second-gear-pair', 'third-fourth-gear-pair', 'fifth-gear-pair'], transform: 'rotation', driver: 'constant gear mesh', expression: 'all free gears spin at their mesh speeds even when not selected', phaseDeg: 0, notes: 'Opacity or rim color distinguishes free-spinning gears from locked selected gear.', }, { id: 'synchro-sleeve-slide', label: 'Synchro sleeve slide', targetPartIds: ['synchro-sleeves', 'synchro-hubs'], transform: 'translation', driver: 'gear change event', expression: 'neutral center, slide left or right toward selected gear dog teeth with eased engagement', phaseDeg: 0, notes: 'Pause briefly at cone contact before dog engagement for educational clarity.', }, { id: 'selector-fork-motion', label: 'Selector fork motion', targetPartIds: ['selector-forks', 'shift-rails'], transform: 'translation', driver: 'selected gear index', expression: 'move only the fork associated with the selected synchro hub', phaseDeg: 0, notes: 'Interlock rail highlight shows other forks locked out.', }, { id: 'selected-ratio-highlight', label: 'Selected torque path highlight', targetPartIds: ['first-second-gear-pair', 'third-fourth-gear-pair', 'fifth-gear-pair', 'synchro-sleeves'], transform: 'material', driver: 'selected gear index', expression: 'highlight active mesh and sleeve amber; dim inactive free gears', phaseDeg: 0, notes: 'Also updates ratio text in the viewer facts panel.', }, { id: 'output-shaft-rotation', label: 'Output shaft rotation', targetPartIds: ['manual-output-shaft'], transform: 'rotation', driver: 'selected gear ratio', expression: 'ωoutput = ωinput / selectedRatio; zero in neutral; negative in reverse', phaseDeg: 0, notes: 'Reverse mode should visibly reverse output arrow direction.', }, { id: 'reverse-idler-engagement', label: 'Reverse idler engagement', targetPartIds: ['reverse-idler'], transform: 'translation', driver: 'reverse selection', expression: 'idler slides into mesh and rotates opposite the layshaft/output relation', phaseDeg: 0, notes: 'Only active for reverse step.', }, ], }, explodedView: { defaultDistance: 0.34, maxDistance: 1.28, groups: [ { id: 'shafts-apart', label: 'Shafts', partIds: ['manual-input-shaft', 'layshaft', 'manual-output-shaft'], axis: 'y', direction: -1, order: 1, reason: 'Separates the three shaft lines for torque-path teaching.', }, { id: 'gear-pairs-up', label: 'Gear pairs', partIds: ['first-second-gear-pair', 'third-fourth-gear-pair', 'fifth-gear-pair', 'reverse-idler'], axis: 'y', direction: 1, order: 2, reason: 'Lifts gear pairs to compare tooth size and ratio groups.', }, { id: 'selectors-up', label: 'Selector system', partIds: ['synchro-hubs', 'synchro-sleeves', 'selector-forks', 'shift-rails'], axis: 'y', direction: 1, order: 3, reason: 'Opens the engagement hardware above the gear train.', }, ], }, crossSection: { defaultAxis: 'z', recommendedPlanes: [ { id: 'shaft-centres', label: 'Shaft centre planes', axis: 'z', offset: 0, description: 'Longitudinal gearbox cutaway through shaft axes and gear teeth.', }, { id: 'synchro-sleeve', label: 'Synchro sleeve section', axis: 'x', offset: 0.1, description: 'Shows sleeve, hub, cone, and dog tooth engagement geometry.', }, ], }, thumbnail: makeThumbnailStrategy( ['manual-input-shaft', 'layshaft', 'manual-output-shaft', 'manual-gear-pairs'], ['synchro-sleeves', 'selector-forks'], 'Use a transparent case with three shaft lines and an amber selected gear path.', ), assetReplacement: { proceduralBlueprintId: 'manual-gearbox-5-speed', preferredGlbPath: 'src/assets/machines/manual-gearbox-5-speed/manual-gearbox-5-speed.glb', rootNodeName: 'ManualGearbox5Speed', requiredNamedNodes: [ 'ManualInputShaft', 'Layshaft', 'ManualOutputShaft', 'FirstSecondGearPair', 'ThirdFourthGearPair', 'FifthGearPair', 'SynchroHubs', 'SynchroSleeves', 'SelectorForks', 'ShiftRails', ], optionalNamedNodes: ['ReverseIdler', 'ClutchStub', 'TransmissionCaseCutaway', 'Bearings', 'DetentBalls'], materialSlots: ['machined-steel', 'brass-synchro', 'selector-blue', 'selected-amber', 'housing-glass', 'reverse-red'], coordinateSystem: 'Y up, shaft axes along X, input at negative X and output at positive X, layshaft below output shaft.', replacementInstructions: 'Keep each ratio pair as a separate group and expose synchro sleeves as linearly animated nodes. Free output gears should be separate from the output shaft where possible.', }, relatedMachines: ['planetary-gearbox', 'differential-gear', 'bevel-gear-set'], }, { machineId: 'continuously-variable-transmission', slugAliases: ['cvt', 'continuously-variable-transmission-cvt', 'belt-cvt'], title: 'CVT (Continuously Variable Transmission)', category: 'Gearboxes & Drives', difficulty: 'Intermediate', complexityScore: 5, registryKeywords: ['cvt', 'belt', 'variable pulley', 'ratio', 'sheave', 'transmission'], oneParagraphDescription: 'A belt CVT changes ratio continuously by moving conical pulley sheaves so the belt rides at different effective radii on the input and output pulleys. The procedural assembly animates sheave separation, belt pitch radius, and speed arrows to show ratio changes without stepped gears.', learningObjectives: [ 'Identify primary pulley, secondary pulley, movable sheaves, belt, and actuators.', 'Explain how changing belt radius changes speed ratio.', 'Compare low-ratio launch and high-ratio cruise states.', 'Understand why belt tension and clamping force are critical.', ], facts: [ { label: 'Ratio style', value: 'Continuous range', details: 'The effective pulley radii vary smoothly rather than stepping between fixed gear pairs.', }, { label: 'Core components', value: 'Two variable pulleys and belt', details: 'Conical sheaves force the belt to climb or descend as spacing changes.', }, { label: 'Applications', value: 'Scooters, cars, snowmobiles, industrial drives', details: 'Useful when keeping the engine near an efficient speed is valuable.', }, { label: 'Belt type', value: 'Rubber V-belt or steel push belt', details: 'Automotive CVTs often use segmented steel belts or chains under high clamping force.', }, { label: 'Control', value: 'Hydraulic or centrifugal actuation', details: 'Actuators coordinate both pulleys to maintain belt length and tension.', }, ], componentTree: [ { id: 'cvt-primary-pulley', name: 'Primary variable pulley', kind: 'assembly', description: 'Input pulley with fixed and movable conical sheaves.', engineeringRole: 'Changes the drive radius applied by the engine input.', materialHint: 'polished conical steel with blue input marker', labelAnchor: [-0.75, 0, 0], explodedOffset: [-0.22, 0, 0], replacementNode: 'CVTPrimaryPulley', animationChannels: ['primary-sheave-motion', 'primary-pulley-rotation'], children: [ { id: 'primary-fixed-sheave', name: 'Primary fixed sheave', kind: 'part', description: 'Stationary conical half of the input pulley.', engineeringRole: 'Provides one side of the V groove for belt traction.', materialHint: 'machined steel cone', labelAnchor: [-0.9, 0.28, 0], explodedOffset: [-0.32, 0.1, 0], replacementNode: 'PrimaryFixedSheave', animationChannels: ['primary-pulley-rotation'], }, { id: 'primary-movable-sheave', name: 'Primary movable sheave', kind: 'part', description: 'Axially sliding cone that changes belt groove width.', engineeringRole: 'Forces the belt inward for low ratio or outward for high ratio.', materialHint: 'machined steel cone with blue actuator ring', labelAnchor: [-0.62, 0.28, 0], explodedOffset: [-0.12, 0.1, 0], replacementNode: 'PrimaryMovableSheave', animationChannels: ['primary-sheave-motion', 'primary-pulley-rotation'], }, { id: 'primary-actuator', name: 'Primary actuator', kind: 'control', description: 'Hydraulic or centrifugal mechanism moving the input sheave.', engineeringRole: 'Controls input pitch radius based on speed and load.', materialHint: 'blue hydraulic ring', labelAnchor: [-1.05, -0.28, 0], explodedOffset: [-0.42, -0.16, 0], replacementNode: 'PrimaryActuator', animationChannels: ['ratio-control-highlight'], }, ], }, { id: 'cvt-secondary-pulley', name: 'Secondary variable pulley', kind: 'assembly', description: 'Output pulley that changes in the opposite direction to preserve belt length.', engineeringRole: 'Receives belt force and sets output speed/torque.', materialHint: 'polished conical steel with amber output marker', labelAnchor: [0.75, 0, 0], explodedOffset: [0.22, 0, 0], replacementNode: 'CVTSecondaryPulley', animationChannels: ['secondary-sheave-motion', 'secondary-pulley-rotation'], children: [ { id: 'secondary-fixed-sheave', name: 'Secondary fixed sheave', kind: 'part', description: 'Stationary conical half of the output pulley.', engineeringRole: 'Provides the output pulley traction surface.', materialHint: 'machined steel cone', labelAnchor: [0.62, 0.28, 0], explodedOffset: [0.12, 0.1, 0], replacementNode: 'SecondaryFixedSheave', animationChannels: ['secondary-pulley-rotation'], }, { id: 'secondary-movable-sheave', name: 'Secondary movable sheave', kind: 'part', description: 'Axially sliding cone coordinated with the primary pulley.', engineeringRole: 'Maintains belt tension while varying output pitch radius.', materialHint: 'machined steel cone with amber actuator ring', labelAnchor: [0.9, 0.28, 0], explodedOffset: [0.32, 0.1, 0], replacementNode: 'SecondaryMovableSheave', animationChannels: ['secondary-sheave-motion', 'secondary-pulley-rotation'], }, { id: 'secondary-actuator', name: 'Secondary actuator and torque sensor', kind: 'control', description: 'Spring, ramp, or hydraulic system that reacts to torque demand.', engineeringRole: 'Maintains clamping force and coordinates ratio under load.', materialHint: 'amber hydraulic ring', labelAnchor: [1.05, -0.28, 0], explodedOffset: [0.42, -0.16, 0], replacementNode: 'SecondaryActuator', animationChannels: ['ratio-control-highlight'], }, ], }, { id: 'cvt-belt-and-overlays', name: 'Belt and ratio overlays', kind: 'assembly', description: 'The flexible belt, pitch-radius markers, and ratio readout show how the pulleys trade radius.', engineeringRole: 'Transfers torque by friction while making the continuous ratio visible.', materialHint: 'dark rubber or steel belt with emissive pitch circles', labelAnchor: [0, 0.62, 0], explodedOffset: [0, 0.38, 0], replacementNode: 'CVTBeltAndOverlays', animationChannels: ['belt-motion', 'pitch-radius-overlay', 'ratio-control-highlight'], children: [ { id: 'cvt-belt', name: 'V-belt / steel push belt', kind: 'part', description: 'Looped belt running between the two variable pulleys.', engineeringRole: 'Transfers tangential force between input and output pitch radii.', materialHint: 'dark segmented belt with subtle ribbing', labelAnchor: [0, 0.54, 0], explodedOffset: [0, 0.46, 0], replacementNode: 'CVTBelt', animationChannels: ['belt-motion'], }, { id: 'pitch-radius-overlay', name: 'Pitch radius overlay', kind: 'sensor', description: 'Circles showing effective belt radius on each pulley.', engineeringRole: 'Translates sheave position into the active speed ratio.', materialHint: 'emissive blue/amber circular guides', labelAnchor: [0, 0.9, 0], explodedOffset: [0, 0.62, 0], replacementNode: 'PitchRadiusOverlay', animationChannels: ['pitch-radius-overlay'], }, { id: 'ratio-readout', name: 'Ratio readout', kind: 'sensor', description: 'Numeric display showing current low-to-high ratio state.', engineeringRole: 'Makes continuous ratio change measurable for learners.', materialHint: 'glass panel with tabular numerals', labelAnchor: [0, -0.78, 0], explodedOffset: [0, -0.5, 0], replacementNode: 'RatioReadout', animationChannels: ['ratio-control-highlight'], }, ], }, ], labels: [ { partId: 'cvt-belt', text: 'Belt rides at variable pitch radii', position: [0, 0.72, 0.32], priority: 'primary' }, { partId: 'primary-movable-sheave', text: 'Input sheave spacing sets drive radius', position: [-0.68, 0.44, 0.28], priority: 'primary' }, { partId: 'secondary-movable-sheave', text: 'Output sheave moves opposite direction', position: [0.95, 0.44, 0.28], priority: 'secondary' }, { partId: 'ratio-readout', text: 'Ratio changes continuously', position: [0, -0.94, 0.24], priority: 'secondary' }, ], cameraPresets: makeCameraPresets(4.7, [0, 0.08, 0], { id: 'belt-radius', label: 'Belt Radius', position: [1.2, 1.25, 2.35], target: [0, 0.28, 0], description: 'Close-up showing belt pitch radius and conical sheave spacing.', }), guidedTour: [ { id: 'two-pulleys-one-belt', title: 'Two pulleys, one belt', body: 'Torque passes from the primary pulley through the belt to the secondary pulley.', cameraPresetId: 'isometric', highlightedPartIds: ['cvt-primary-pulley', 'cvt-secondary-pulley', 'cvt-belt'], durationSeconds: 7, animationTimeScale: 0.45, setExplode: 0.06, }, { id: 'low-ratio', title: 'Low ratio for launch', body: 'The belt sits low on the primary pulley and high on the secondary pulley for torque multiplication.', cameraPresetId: 'front', highlightedPartIds: ['primary-movable-sheave', 'secondary-movable-sheave', 'pitch-radius-overlay'], durationSeconds: 7, animationTimeScale: 0.35, setExplode: 0.12, }, { id: 'high-ratio', title: 'High ratio for cruise', body: 'The sheaves trade positions, raising the primary radius and lowering the secondary radius.', cameraPresetId: 'belt-radius', highlightedPartIds: ['cvt-belt', 'pitch-radius-overlay', 'ratio-readout'], durationSeconds: 7, animationTimeScale: 0.35, setExplode: 0.16, }, { id: 'clamping-force', title: 'Clamping force matters', body: 'Actuators squeeze the belt hard enough to transmit torque without slip.', cameraPresetId: 'top', highlightedPartIds: ['primary-actuator', 'secondary-actuator', 'cvt-belt'], durationSeconds: 6, animationTimeScale: 0.45, setExplode: 0.18, }, ], animationModel: { nominalRpm: 600, cycleSecondsAtNominal: 0.1, loopMode: 'demonstration', stepCount: 5, primaryDriver: 'ratio-parameter-0-to-1', engineeringNotes: 'Use a looping ratio sweep from low to high and back. Maintain approximate belt length by moving primary and secondary pitch radii in opposite directions.', channels: [ { id: 'primary-pulley-rotation', label: 'Primary pulley rotation', targetPartIds: ['primary-fixed-sheave', 'primary-movable-sheave'], transform: 'rotation', driver: 'input speed', expression: 'rotate input pulley at selected RPM', phaseDeg: 0, notes: 'Input speed can remain constant during ratio demonstration.', }, { id: 'secondary-pulley-rotation', label: 'Secondary pulley rotation', targetPartIds: ['secondary-fixed-sheave', 'secondary-movable-sheave'], transform: 'rotation', driver: 'input speed and current ratio', expression: 'ωsecondary = ωprimary × primaryPitchRadius / secondaryPitchRadius', phaseDeg: 0, notes: 'Output speed visibly increases as ratio sweeps toward cruise.', }, { id: 'primary-sheave-motion', label: 'Primary sheave motion', targetPartIds: ['primary-movable-sheave'], transform: 'translation', driver: 'ratio parameter r', expression: 'movable sheave closes as r increases, pushing belt outward', phaseDeg: 0, notes: 'Motion is axial along pulley shaft.', }, { id: 'secondary-sheave-motion', label: 'Secondary sheave motion', targetPartIds: ['secondary-movable-sheave'], transform: 'translation', driver: 'ratio parameter r', expression: 'movable sheave opens as r increases, letting belt ride inward', phaseDeg: 180, notes: 'Opposite phase to primary to preserve belt length.', }, { id: 'belt-motion', label: 'Belt travel', targetPartIds: ['cvt-belt'], transform: 'deformation', driver: 'pulley pitch radii', expression: 'update belt loop control points and scroll belt texture along path', phaseDeg: 0, notes: 'Use a diagrammatic belt path when exact flexible deformation is not available.', }, { id: 'pitch-radius-overlay', label: 'Pitch radius overlay', targetPartIds: ['pitch-radius-overlay'], transform: 'deformation', driver: 'ratio parameter r', expression: 'scale blue and amber pitch circles to current effective radii', phaseDeg: 0, notes: 'Overlay gives an accurate visual ratio even with simplified belt geometry.', }, { id: 'ratio-control-highlight', label: 'Ratio and actuator highlight', targetPartIds: ['primary-actuator', 'secondary-actuator', 'ratio-readout'], transform: 'material', driver: 'ratio parameter and clamp force', expression: 'show low, mid, high ratio states and clamp-force intensity', phaseDeg: 0, notes: 'Readout should use tabular numerals from the app typography system.', }, ], }, explodedView: { defaultDistance: 0.32, maxDistance: 1.1, groups: [ { id: 'pulleys-outward', label: 'Pulley assemblies', partIds: [ 'primary-fixed-sheave', 'primary-movable-sheave', 'primary-actuator', 'secondary-fixed-sheave', 'secondary-movable-sheave', 'secondary-actuator', ], axis: 'x', direction: 1, order: 1, reason: 'Separates input and output pulleys for radius comparison.', }, { id: 'belt-up', label: 'Belt and overlays', partIds: ['cvt-belt', 'pitch-radius-overlay', 'ratio-readout'], axis: 'y', direction: 1, order: 2, reason: 'Lifts the belt path and readout above the pulleys.', }, ], }, crossSection: { defaultAxis: 'z', recommendedPlanes: [ { id: 'pulley-centres', label: 'Pulley centres', axis: 'z', offset: 0, description: 'Shows conical sheave profiles and belt wedge contact.', }, { id: 'belt-span', label: 'Belt span', axis: 'y', offset: 0.48, description: 'Slices through the belt loop to show top run and pitch overlays.', }, ], }, thumbnail: makeThumbnailStrategy( ['cvt-primary-pulley', 'cvt-secondary-pulley', 'cvt-belt'], ['pitch-radius-overlay', 'ratio-readout'], 'Render with unequal pitch circles and a curved belt path to make continuous ratio control visible.', ), assetReplacement: { proceduralBlueprintId: 'continuously-variable-transmission', preferredGlbPath: 'src/assets/machines/continuously-variable-transmission/continuously-variable-transmission.glb', rootNodeName: 'ContinuouslyVariableTransmission', requiredNamedNodes: [ 'PrimaryFixedSheave', 'PrimaryMovableSheave', 'SecondaryFixedSheave', 'SecondaryMovableSheave', 'CVTBelt', ], optionalNamedNodes: ['PrimaryActuator', 'SecondaryActuator', 'PitchRadiusOverlay', 'RatioReadout', 'TransmissionHousingCutaway'], materialSlots: ['machined-steel', 'belt-dark', 'input-blue', 'output-amber', 'overlay-emissive', 'housing-glass'], coordinateSystem: 'Y up, pulley shaft axes along Z, primary at negative X and secondary at positive X.', replacementInstructions: 'Movable sheaves must slide along the pulley axis. The belt can be a skinned mesh, curve tube, or segmented path as long as pitch-radius overlays remain separate selectable nodes.', }, relatedMachines: ['manual-gearbox-5-speed', 'planetary-gearbox', 'worm-gear-drive'], }, { machineId: 'worm-gear-drive', slugAliases: ['worm-drive', 'worm-gearbox', 'worm-and-wheel'], title: 'Worm Gear Drive', category: 'Gearboxes & Drives', difficulty: 'Intermediate', complexityScore: 4, registryKeywords: ['worm gear', 'worm wheel', 'self locking', 'right angle', 'gear reduction'], oneParagraphDescription: 'A worm gear drive uses a screw-like worm meshing with a worm wheel to produce high reduction in a compact right-angle package. The viewer demonstrates sliding tooth contact, high ratio, output torque multiplication, and the self-locking condition when wheel back-driving friction exceeds the lead angle.', learningObjectives: [ 'Identify the worm screw, worm wheel, shafts, housing, and lubrication bath.', 'Explain why one worm revolution advances the wheel by a small number of teeth.', 'Relate lead angle and friction to self-locking behavior.', 'Recognize the sliding-contact efficiency tradeoff.', ], facts: [ { label: 'Shaft angle', value: 'Usually 90°', details: 'The worm axis crosses the worm wheel axis at right angles.', }, { label: 'Reduction ratio', value: '10:1–100:1+', details: 'A single-start worm advances one wheel tooth per worm revolution.', }, { label: 'Contact type', value: 'Mostly sliding', details: 'Sliding action creates heat and requires lubrication.', }, { label: 'Self-locking', value: 'Possible at low lead angles', details: 'The wheel may not back-drive the worm if friction prevents reverse motion.', }, { label: 'Applications', value: 'Hoists, adjusters, steering boxes, conveyors', details: 'Used when high reduction and compact right-angle layout are valuable.', }, ], componentTree: [ { id: 'worm-input-assembly', name: 'Worm input assembly', kind: 'assembly', description: 'Screw-like worm, input shaft, and bearings drive the wheel tooth by tooth.', engineeringRole: 'Provides high-speed input and creates large reduction through screw lead.', materialHint: 'polished hardened steel worm with blue input arrow', labelAnchor: [-0.45, 0.25, 0], explodedOffset: [-0.25, 0.1, 0], replacementNode: 'WormInputAssembly', animationChannels: ['worm-rotation'], children: [ { id: 'worm-screw', name: 'Worm screw', kind: 'part', description: 'Helical screw gear meshing with the worm wheel teeth.', engineeringRole: 'Each revolution advances the wheel according to worm start count.', materialHint: 'polished helical steel', labelAnchor: [-0.35, 0.28, 0], explodedOffset: [-0.42, 0.18, 0], replacementNode: 'WormScrew', animationChannels: ['worm-rotation'], }, { id: 'worm-input-shaft', name: 'Input shaft', kind: 'part', description: 'Shaft carrying the worm and motor input torque.', engineeringRole: 'Supports the worm and resists axial thrust from sliding contact.', materialHint: 'blue steel shaft', labelAnchor: [-0.92, 0.28, 0], explodedOffset: [-0.58, 0.18, 0], replacementNode: 'WormInputShaft', animationChannels: ['worm-rotation'], }, { id: 'thrust-bearings', name: 'Thrust bearings', kind: 'part', description: 'Bearings reacting axial load generated by the worm helix.', engineeringRole: 'Prevent axial movement and reduce friction under thrust load.', materialHint: 'dark bearing rings', labelAnchor: [-0.72, 0.48, 0], explodedOffset: [-0.5, 0.38, 0], replacementNode: 'ThrustBearings', animationChannels: [], }, ], }, { id: 'worm-wheel-output', name: 'Worm wheel output assembly', kind: 'assembly', description: 'Large toothed wheel, output shaft, and load indicator show slow high-torque output.', engineeringRole: 'Converts worm motion into reduced right-angle shaft rotation.', materialHint: 'bronze wheel, amber output shaft, torque gauge', labelAnchor: [0.35, -0.12, 0], explodedOffset: [0.22, -0.12, 0], replacementNode: 'WormWheelOutput', animationChannels: ['worm-wheel-rotation', 'torque-overlay'], children: [ { id: 'worm-wheel', name: 'Worm wheel', kind: 'part', description: 'Bronze gear with concave teeth mating with the worm thread.', engineeringRole: 'Receives sliding force and rotates slowly with high torque.', materialHint: 'warm bronze gear', labelAnchor: [0.38, -0.02, 0], explodedOffset: [0.32, -0.12, 0], replacementNode: 'WormWheel', animationChannels: ['worm-wheel-rotation'], }, { id: 'worm-output-shaft', name: 'Output shaft', kind: 'part', description: 'Right-angle shaft attached to the worm wheel.', engineeringRole: 'Delivers reduced speed and multiplied torque to the load.', materialHint: 'amber steel shaft', labelAnchor: [0.38, -0.65, 0], explodedOffset: [0.32, -0.55, 0], replacementNode: 'WormOutputShaft', animationChannels: ['worm-wheel-rotation'], }, { id: 'self-locking-brake-overlay', name: 'Self-locking overlay', kind: 'sensor', description: 'Diagram showing whether the wheel can back-drive the worm.', engineeringRole: 'Connects worm lead angle and friction to back-driving behavior.', materialHint: 'emissive orange lock icon and arrows', labelAnchor: [0.85, -0.28, 0], explodedOffset: [0.62, -0.22, 0], replacementNode: 'SelfLockingBrakeOverlay', animationChannels: ['self-locking-demonstration'], }, ], }, { id: 'worm-housing-lubrication', name: 'Housing and lubrication', kind: 'assembly', description: 'Cutaway housing, oil bath, and heat indicator show the sliding-contact environment.', engineeringRole: 'Maintains alignment, contains lubricant, and removes heat.', materialHint: 'dark cast housing, transparent amber oil', labelAnchor: [0, -0.75, 0], explodedOffset: [0, -0.35, 0], replacementNode: 'WormHousingLubrication', animationChannels: ['oil-splash', 'heat-overlay'], children: [ { id: 'worm-housing', name: 'Cutaway housing', kind: 'part', description: 'Rigid enclosure supporting bearings and protecting the gear mesh.', engineeringRole: 'Controls shaft alignment and contains lubricant.', materialHint: 'dark cast iron with cutaway edge', labelAnchor: [0, -0.88, 0], explodedOffset: [0, -0.52, 0], replacementNode: 'WormHousing', animationChannels: [], }, { id: 'lubrication-bath', name: 'Lubrication bath', kind: 'effect', description: 'Oil volume and splash traces at the worm-wheel mesh.', engineeringRole: 'Reduces sliding friction and carries heat away from the tooth contact.', materialHint: 'transparent amber oil', labelAnchor: [-0.18, -0.54, 0], explodedOffset: [-0.08, -0.42, 0], replacementNode: 'LubricationBath', animationChannels: ['oil-splash'], }, { id: 'heat-overlay', name: 'Heat overlay', kind: 'sensor', description: 'Warm contact patch indicating efficiency loss at high load.', engineeringRole: 'Shows why worm drives require lubrication and thermal design.', materialHint: 'red-orange thermal gradient', labelAnchor: [0.12, 0.1, 0.18], explodedOffset: [0.1, 0.05, 0.3], replacementNode: 'HeatOverlay', animationChannels: ['heat-overlay'], }, ], }, ], labels: [ { partId: 'worm-screw', text: 'Worm screw advances the wheel slowly', position: [-0.42, 0.44, 0.28], priority: 'primary' }, { partId: 'worm-wheel', text: 'Bronze wheel gives high reduction', position: [0.52, 0.08, 0.3], priority: 'primary' }, { partId: 'self-locking-brake-overlay', text: 'Low lead angle can resist back-driving', position: [1, -0.32, 0.25], priority: 'secondary' }, { partId: 'lubrication-bath', text: 'Sliding contact needs lubrication', position: [-0.22, -0.68, 0.24], priority: 'detail' }, ], cameraPresets: makeCameraPresets(4.2, [0, -0.05, 0], { id: 'tooth-contact', label: 'Tooth Contact', position: [1.15, 1.05, 2.1], target: [0.1, 0.08, 0], description: 'Close-up on the worm thread sliding across wheel teeth.', }), guidedTour: [ { id: 'right-angle-reduction', title: 'Right-angle high reduction', body: 'The worm shaft drives the wheel at ninety degrees with a large reduction per stage.', cameraPresetId: 'isometric', highlightedPartIds: ['worm-screw', 'worm-wheel', 'worm-output-shaft'], durationSeconds: 7, animationTimeScale: 0.45, setExplode: 0.08, }, { id: 'single-tooth-advance', title: 'One revolution, small advance', body: 'A single-start worm advances the wheel by one tooth for every worm revolution.', cameraPresetId: 'tooth-contact', highlightedPartIds: ['worm-screw', 'worm-wheel', 'heat-overlay'], durationSeconds: 7, animationTimeScale: 0.25, setExplode: 0.15, crossSection: { axis: 'z', offset: 0 }, }, { id: 'self-locking', title: 'Self-locking demonstration', body: 'In back-drive mode the output wheel attempts to move, but the worm resists when lead angle and friction prevent reverse motion.', cameraPresetId: 'front', highlightedPartIds: ['self-locking-brake-overlay', 'worm-wheel', 'worm-screw'], durationSeconds: 7, animationTimeScale: 0.35, setExplode: 0.18, }, { id: 'lubrication', title: 'Sliding contact and heat', body: 'Unlike rolling spur gears, the worm mesh has significant sliding contact, so oil and heat management are important.', cameraPresetId: 'right', highlightedPartIds: ['lubrication-bath', 'heat-overlay', 'thrust-bearings'], durationSeconds: 6, animationTimeScale: 0.45, setExplode: 0.2, }, ], animationModel: { nominalRpm: 180, cycleSecondsAtNominal: 0.333, loopMode: 'continuous', stepCount: 4, primaryDriver: 'worm-angle', engineeringNotes: 'Default ratio is 30:1 with a single-start worm. Back-drive demonstration freezes the worm while applying output torque and shows lock overlay instead of reversing the worm.', channels: [ { id: 'worm-rotation', label: 'Worm screw rotation', targetPartIds: ['worm-screw', 'worm-input-shaft'], transform: 'rotation', driver: 'input shaft angle θ', expression: 'rotate worm continuously about input shaft axis', phaseDeg: 0, notes: 'Thread texture should scroll consistently with rotation direction.', }, { id: 'worm-wheel-rotation', label: 'Worm wheel output rotation', targetPartIds: ['worm-wheel', 'worm-output-shaft'], transform: 'rotation', driver: 'worm angle and tooth ratio', expression: 'ωwheel = ωworm / toothCount for single-start worm', phaseDeg: 0, notes: 'Default speed is visibly much slower than worm speed.', }, { id: 'torque-overlay', label: 'Torque multiplication overlay', targetPartIds: ['worm-output-shaft'], transform: 'material', driver: 'gear ratio', expression: 'scale amber output arrow length with reduction ratio', phaseDeg: 0, notes: 'Complements speed reduction animation.', }, { id: 'self-locking-demonstration', label: 'Self-locking demonstration', targetPartIds: ['self-locking-brake-overlay'], transform: 'material', driver: 'back-drive toggle', expression: 'show locked icon and stopped worm when output attempts reverse drive', phaseDeg: 0, notes: 'Use a separate UI mode from normal forward-drive animation.', }, { id: 'oil-splash', label: 'Lubrication splash', targetPartIds: ['lubrication-bath'], transform: 'flow', driver: 'worm and wheel speed', expression: 'small amber droplets and oil film move near the mesh contact', phaseDeg: 0, notes: 'Intensity increases with RPM.', }, { id: 'heat-overlay', label: 'Mesh heat overlay', targetPartIds: ['heat-overlay'], transform: 'material', driver: 'load and sliding speed', expression: 'warm contact patch brightens with load and speed', phaseDeg: 0, notes: 'Explains lower efficiency compared with rolling gear meshes.', }, ], }, explodedView: { defaultDistance: 0.3, maxDistance: 1.05, groups: [ { id: 'worm-left', label: 'Worm input', partIds: ['worm-screw', 'worm-input-shaft', 'thrust-bearings'], axis: 'x', direction: -1, order: 1, reason: 'Separates the screw-like input from the wheel mesh.', }, { id: 'wheel-right', label: 'Worm wheel output', partIds: ['worm-wheel', 'worm-output-shaft', 'self-locking-brake-overlay'], axis: 'x', direction: 1, order: 2, reason: 'Opens the output side and lock demonstration.', }, { id: 'housing-down', label: 'Housing and oil', partIds: ['worm-housing', 'lubrication-bath', 'heat-overlay'], axis: 'y', direction: -1, order: 3, reason: 'Reveals lubrication and heat effects below the gear mesh.', }, ], }, crossSection: { defaultAxis: 'z', recommendedPlanes: [ { id: 'mesh-centre', label: 'Mesh centre', axis: 'z', offset: 0, description: 'Cuts through the worm/wheel contact patch and oil film.', }, { id: 'shaft-angle', label: 'Shaft angle', axis: 'y', offset: 0.05, description: 'Shows the ninety-degree relationship between worm and output shafts.', }, ], }, thumbnail: makeThumbnailStrategy( ['worm-screw', 'worm-wheel', 'worm-housing'], ['self-locking-brake-overlay', 'heat-overlay'], 'Use a close meshing angle with the bronze wheel and helical worm clearly visible.', ), assetReplacement: { proceduralBlueprintId: 'worm-gear-drive', preferredGlbPath: 'src/assets/machines/worm-gear-drive/worm-gear-drive.glb', rootNodeName: 'WormGearDrive', requiredNamedNodes: ['WormScrew', 'WormWheel', 'WormInputShaft', 'WormOutputShaft'], optionalNamedNodes: ['ThrustBearings', 'SelfLockingBrakeOverlay', 'WormHousing', 'LubricationBath', 'HeatOverlay'], materialSlots: ['machined-steel', 'bronze', 'housing-dark', 'oil-amber', 'heat-red', 'input-blue', 'output-amber'], coordinateSystem: 'Y up, worm input axis along X, wheel output axis along Z, gear mesh centered at origin.', replacementInstructions: 'The worm and wheel must have independent pivots around perpendicular axes. Keep overlay meshes separate from physical gear geometry for display-mode toggles.', }, relatedMachines: ['bevel-gear-set', 'planetary-gearbox', 'continuously-variable-transmission'], }, { machineId: 'bevel-gear-set', slugAliases: ['right-angle-bevel-gears', 'spiral-bevel-gear-set', 'bevel-gears'], title: 'Bevel Gear Set', category: 'Gearboxes & Drives', difficulty: 'Beginner', complexityScore: 3, registryKeywords: ['bevel gear', 'right angle drive', 'spiral bevel', 'pinion', 'crown gear'], oneParagraphDescription: 'A bevel gear set transmits rotation between intersecting shafts, most commonly at a right angle. The procedural model compares straight and spiral bevel tooth forms, highlights pitch cones, and shows how a small pinion can drive a larger crown gear for both direction change and reduction.', learningObjectives: [ 'Identify bevel pinion, crown gear, pitch cones, shafts, and bearings.', 'Explain why bevel gears are shaped as cones rather than cylinders.', 'Compare straight and spiral bevel tooth contact.', 'Relate gear tooth counts to speed reduction.', ], facts: [ { label: 'Shaft relationship', value: 'Intersecting axes', details: 'Bevel gears are used when shaft axes meet, commonly at 90 degrees.', }, { label: 'Pitch geometry', value: 'Conical pitch surfaces', details: 'Tooth size tapers because the effective pitch radius changes along the cone.', }, { label: 'Variants', value: 'Straight, spiral, hypoid', details: 'Spiral teeth improve smoothness and load capacity compared with straight teeth.', }, { label: 'Applications', value: 'Differentials, hand drills, right-angle drives', details: 'Common wherever compact direction change is required.', }, { label: 'Reduction', value: 'Tooth count ratio', details: 'A smaller pinion driving a larger gear reduces speed and multiplies torque.', }, ], componentTree: [ { id: 'bevel-mesh-assembly', name: 'Bevel gear mesh', kind: 'assembly', description: 'Pinion and crown gear mesh on intersecting pitch cones.', engineeringRole: 'Changes shaft direction while transmitting torque through tapered teeth.', materialHint: 'polished steel with pitch-cone overlays', labelAnchor: [0, 0.1, 0], explodedOffset: [0, 0, 0.18], replacementNode: 'BevelMeshAssembly', animationChannels: ['pinion-rotation', 'crown-gear-rotation', 'mesh-contact-highlight'], children: [ { id: 'bevel-pinion', name: 'Bevel pinion', kind: 'part', description: 'Smaller gear on the input shaft with tapered teeth.', engineeringRole: 'Drives the larger crown gear and sets ratio with its tooth count.', materialHint: 'cool polished steel', labelAnchor: [-0.42, 0.25, 0], explodedOffset: [-0.38, 0.16, 0], replacementNode: 'BevelPinion', animationChannels: ['pinion-rotation'], }, { id: 'crown-gear', name: 'Crown gear', kind: 'part', description: 'Larger bevel gear on the output shaft.', engineeringRole: 'Receives torque at an intersecting axis and rotates at ratio speed.', materialHint: 'warm machined steel', labelAnchor: [0.42, -0.1, 0], explodedOffset: [0.38, -0.12, 0], replacementNode: 'CrownGear', animationChannels: ['crown-gear-rotation'], }, { id: 'pitch-cone-overlay', name: 'Pitch cone overlay', kind: 'sensor', description: 'Transparent cones showing the theoretical rolling surfaces.', engineeringRole: 'Explains why bevel teeth taper toward the cone apex.', materialHint: 'transparent blue conical surfaces', labelAnchor: [0, 0.55, 0], explodedOffset: [0, 0.35, 0], replacementNode: 'PitchConeOverlay', animationChannels: ['mesh-contact-highlight'], }, { id: 'spiral-tooth-overlay', name: 'Spiral tooth overlay', kind: 'sensor', description: 'Optional highlighted tooth trace comparing spiral and straight bevel contact.', engineeringRole: 'Shows progressive engagement and smoother load transfer of spiral bevel teeth.', materialHint: 'emissive amber curved tooth traces', labelAnchor: [0.55, 0.28, 0], explodedOffset: [0.48, 0.22, 0], replacementNode: 'SpiralToothOverlay', animationChannels: ['mesh-contact-highlight'], }, ], }, { id: 'bevel-shaft-supports', name: 'Shafts and supports', kind: 'assembly', description: 'Input/output shafts, bearings, and housing hold gear axes at the correct intersection.', engineeringRole: 'Maintains mesh alignment and reacts thrust loads from bevel contact.', materialHint: 'dark housing, polished shafts, bearing rings', labelAnchor: [0, -0.65, 0], explodedOffset: [0, -0.3, 0], replacementNode: 'BevelShaftSupports', animationChannels: ['pinion-rotation', 'crown-gear-rotation'], children: [ { id: 'bevel-input-shaft', name: 'Input shaft', kind: 'part', description: 'Shaft carrying the bevel pinion.', engineeringRole: 'Introduces input torque along the first axis.', materialHint: 'blue input shaft', labelAnchor: [-0.88, 0.08, 0], explodedOffset: [-0.62, 0.05, 0], replacementNode: 'BevelInputShaft', animationChannels: ['pinion-rotation'], }, { id: 'bevel-output-shaft', name: 'Output shaft', kind: 'part', description: 'Shaft attached to the crown gear at right angle.', engineeringRole: 'Delivers redirected and ratio-changed torque.', materialHint: 'amber output shaft', labelAnchor: [0.1, -0.92, 0], explodedOffset: [0.08, -0.62, 0], replacementNode: 'BevelOutputShaft', animationChannels: ['crown-gear-rotation'], }, { id: 'bevel-bearings', name: 'Tapered bearings', kind: 'part', description: 'Bearing supports resisting radial and axial loads.', engineeringRole: 'Maintain tooth contact pattern under bevel thrust forces.', materialHint: 'dark bearing rings with roller hints', labelAnchor: [0.72, -0.52, 0], explodedOffset: [0.48, -0.4, 0], replacementNode: 'BevelBearings', animationChannels: [], }, { id: 'bevel-housing-cutaway', name: 'Housing cutaway', kind: 'part', description: 'Rigid enclosure with a removed quadrant for visibility.', engineeringRole: 'Holds bearing bores at precise intersecting axes.', materialHint: 'dark cast housing with glass cut edge', labelAnchor: [0, -1.12, 0], explodedOffset: [0, -0.78, 0], replacementNode: 'BevelHousingCutaway', animationChannels: [], }, ], }, ], labels: [ { partId: 'bevel-pinion', text: 'Pinion input on first axis', position: [-0.55, 0.38, 0.28], priority: 'primary' }, { partId: 'crown-gear', text: 'Crown gear turns the output axis', position: [0.56, 0.02, 0.3], priority: 'primary' }, { partId: 'pitch-cone-overlay', text: 'Pitch cones meet at the apex', position: [0, 0.72, 0.25], priority: 'secondary' }, { partId: 'spiral-tooth-overlay', text: 'Spiral teeth engage progressively', position: [0.75, 0.38, 0.22], priority: 'detail' }, ], cameraPresets: makeCameraPresets(4, [0, -0.05, 0], { id: 'pitch-cones', label: 'Pitch Cones', position: [1.15, 1.05, 2], target: [0.08, 0.1, 0], description: 'Close-up of conical pitch geometry and gear mesh.', }), guidedTour: [ { id: 'right-angle-drive', title: 'Intersecting shaft drive', body: 'The bevel pinion drives the crown gear on a shaft at right angles.', cameraPresetId: 'isometric', highlightedPartIds: ['bevel-pinion', 'crown-gear', 'bevel-input-shaft', 'bevel-output-shaft'], durationSeconds: 7, animationTimeScale: 0.45, setExplode: 0.06, }, { id: 'pitch-cone-geometry', title: 'Conical gear geometry', body: 'The transparent pitch cones show the theoretical rolling surfaces that define bevel gear shape.', cameraPresetId: 'pitch-cones', highlightedPartIds: ['pitch-cone-overlay', 'bevel-pinion', 'crown-gear'], durationSeconds: 6, animationTimeScale: 0.35, setExplode: 0.12, crossSection: { axis: 'z', offset: 0 }, }, { id: 'spiral-contact', title: 'Straight versus spiral teeth', body: 'Spiral tooth traces engage gradually, reducing noise and spreading load.', cameraPresetId: 'front', highlightedPartIds: ['spiral-tooth-overlay', 'bevel-pinion', 'crown-gear'], durationSeconds: 6, animationTimeScale: 0.28, setExplode: 0.15, }, { id: 'support-loads', title: 'Bearings hold the contact pattern', body: 'Bevel gears create thrust loads, so bearing support and housing stiffness are critical.', cameraPresetId: 'right', highlightedPartIds: ['bevel-bearings', 'bevel-housing-cutaway', 'bevel-output-shaft'], durationSeconds: 6, animationTimeScale: 0.45, setExplode: 0.2, }, ], animationModel: { nominalRpm: 180, cycleSecondsAtNominal: 0.333, loopMode: 'continuous', stepCount: 3, primaryDriver: 'pinion-angle', engineeringNotes: 'Use tooth-count ratio to drive output speed. Mesh-contact highlights should travel through the contact patch in the direction of rolling/sliding action.', channels: [ { id: 'pinion-rotation', label: 'Pinion rotation', targetPartIds: ['bevel-pinion', 'bevel-input-shaft'], transform: 'rotation', driver: 'input shaft angle θ', expression: 'rotate pinion about input axis', phaseDeg: 0, notes: 'Input axis is perpendicular to output axis.', }, { id: 'crown-gear-rotation', label: 'Crown gear rotation', targetPartIds: ['crown-gear', 'bevel-output-shaft'], transform: 'rotation', driver: 'pinion angle and tooth-count ratio', expression: 'ωcrown = -ωpinion × Npinion / Ncrown', phaseDeg: 0, notes: 'Negative sign communicates opposite mesh direction around intersecting axes.', }, { id: 'mesh-contact-highlight', label: 'Mesh contact highlight', targetPartIds: ['pitch-cone-overlay', 'spiral-tooth-overlay'], transform: 'material', driver: 'gear mesh phase', expression: 'move highlight along contact trace once per tooth mesh interval', phaseDeg: 0, notes: 'Spiral overlay can be toggled to compare straight and spiral variants.', }, ], }, explodedView: { defaultDistance: 0.28, maxDistance: 1, groups: [ { id: 'pinion-axis-out', label: 'Pinion axis', partIds: ['bevel-pinion', 'bevel-input-shaft'], axis: 'x', direction: -1, order: 1, reason: 'Separates the input shaft and pinion from the mesh.', }, { id: 'crown-axis-down', label: 'Crown axis', partIds: ['crown-gear', 'bevel-output-shaft'], axis: 'y', direction: -1, order: 2, reason: 'Pulls output components away to show intersecting axes.', }, { id: 'overlays-up', label: 'Geometry overlays', partIds: ['pitch-cone-overlay', 'spiral-tooth-overlay'], axis: 'y', direction: 1, order: 3, reason: 'Lifts teaching overlays above the physical gear set.', }, ], }, crossSection: { defaultAxis: 'z', recommendedPlanes: [ { id: 'mesh-plane', label: 'Mesh plane', axis: 'z', offset: 0, description: 'Cuts through both gear pitch cones and tooth contact.', }, { id: 'output-bearing', label: 'Output bearing line', axis: 'x', offset: 0.1, description: 'Shows bearing support and bevel thrust path.', }, ], }, thumbnail: makeThumbnailStrategy( ['bevel-pinion', 'crown-gear', 'pitch-cone-overlay'], ['spiral-tooth-overlay', 'bevel-input-shaft', 'bevel-output-shaft'], 'Render the two shafts at a crisp right angle with semi-transparent pitch cones.', ), assetReplacement: { proceduralBlueprintId: 'bevel-gear-set', preferredGlbPath: 'src/assets/machines/bevel-gear-set/bevel-gear-set.glb', rootNodeName: 'BevelGearSet', requiredNamedNodes: ['BevelPinion', 'CrownGear', 'BevelInputShaft', 'BevelOutputShaft'], optionalNamedNodes: ['PitchConeOverlay', 'SpiralToothOverlay', 'BevelBearings', 'BevelHousingCutaway'], materialSlots: ['machined-steel', 'input-blue', 'output-amber', 'overlay-blue', 'overlay-amber', 'housing-dark'], coordinateSystem: 'Y up, output shaft along Y, input shaft along X, gear apex near origin.', replacementInstructions: 'Set independent gear pivots on intersecting shaft axes. If spiral bevel geometry is supplied, retain SpiralToothOverlay as a separate educational mesh for variant comparison.', }, relatedMachines: ['differential-gear', 'worm-gear-drive', 'manual-gearbox-5-speed'], }, ] as const satisfies readonly MachineDossier[];