Hang Glider (Bally 1976)¶
A Cinema 4D ray-traced EM table build with deep drop target and standup target pivot point workflows, ball shadow implementation, and EM-specific scoring mechanics. Key contributors: cyberpez, gtxjoe, benji084, rothbauerw, apophis79, and lumigado.
Build Story¶
An EM (electromechanical) table rendered in Cinema 4D, Hang Glider advanced the understanding of animated primitive pivot points and orientation requirements that became standard across VPW builds. The project also documented historically interesting EM scoring mechanisms.
Table-Specific Details¶
Mechanisms & Hardware¶
- Drop target pivot point setup: Pivot at or just below playfield level, centered on X/Y axes. Target must face drain at RotZ=0. Using
ObjRotZinstead ofRotZcauses all hit angle calculations to be incorrect because Roth's brick check evaluates perpendicular velocity usingRotZ. If mesh faces wrong direction at correct RotZ, reimport with 180-degree rotation rather than using negative DTMaxBend. - Standup target pivot: Pivot at the base (not center) so the target tilts back at the base when hit. Center pivot causes spinner-like rotation.
- Animated primitive orientation rules: Default position (all Rot/ObjRot = 0) should be parallel/perpendicular to axes. Use RotZ for playfield placement, never pre-rotate the mesh. Set unchecked "Static Rendering", not collidable, type = Toy.
- ObjRotZ vs RotZ distinction: ObjRotZ orients globally in VPX world; RotX/RotY/RotZ orient based on the primitive's own orientation system. Use ObjRotZ for neutral orientation, RotZ for playfield placement, RotX/RotY for runtime animation.
Art & Visuals¶
- Baked primitive lighting settings: DisableLighting = 0 (not 1, which causes blown-out appearance). DisableLightingFromBelow = 1 for metal/opaque primitives. This lets VPX add ambient lighting while preventing unrealistic through-lighting.
- Ball shadow over playfield mesh holes: Shadow disappears when ball rolls over areas where the playfield mesh has cut-out holes because the ball's Z drops slightly into the hole. Fix: keep shadow at a fixed Z height rather than tracking ball Z. Alternative: use alpha transparency in the playfield image instead of mesh holes.
- Low-resolution proxy rendering (C4D): Render at 4K with AI upsampling 4x4 for 2-3 minute bakes, sufficient for layout checking and debugging. Set up all compositing files at 4K, swap in high-quality renders for final output.
EM Scoring: "Over The Top" Mechanism¶
Bally EM games of the 1970s used an "Over The Top" feature for score rollovers. When a player exceeded 99,990 points (max on 5 reels): - A buzzer sounded for 2-3 seconds - An "Over The Top" backglass light illuminated briefly - The timer was mechanical -- a flashing bulb's filament heated up and bent to disconnect itself, with duration affected by environmental temperature - Sequential rollovers buzzed shorter since the bulb hadn't cooled - Later production runs replaced this with permanent 100K relay lights per player, reportedly at the request of German distributors
Known Issues¶
- Drop target bricking bug: Setting
DTEnableBrick = 0did not fully disable bricking because perpendicular velocity calculations were wrong from ObjRotZ/RotZ confusion. Debug technique: change DTAnim timer interval from 10ms to 1000ms for slow-motion animation (warning: breaks DTReset height calculation because the Z-translation formula is time-dependent).
Techniques Developed Here¶
- Drop target RotZ orientation requirement -- RotZ=0 must face drain, not ObjRotZ
- Animated primitive orientation rules -- default position, RotZ for placement, RotX/RotY for animation
- Ball shadow fixed-Z technique for playfield mesh holes
See Also¶
- 3D Art Pipeline -- pivot points, object orientation
- Build Workflow -- drop target setup
- Physics Tuning -- drop target layback