Lord of the Rings Virtual Edition (Stern 2003, modded)¶
Fantasy/modded table build (2021-2022) by apophis79 (scripting/lead) with tomate80 (Blender/3D models), sixtoe (VR), iaakki (physics/Rubberizer), flupper1 (high-to-low poly baking), benji084 (optimization), and astronasty (game rules). A modded table (not strict recreation) that generated unique challenges around custom mechs, embedded-image effects, and massive toy polygon budgets. Key technical contributions include the Instant Meshes decimation workflow, ball glow tracking via VPX lights, and Lampz fade speed tuning.
Build Story¶
LOTR VE is a modded/fantasy reimagining of the Stern LOTR table with custom mechanisms (Orthanc tower VUK, Sauron eye ball-tracking, Palantir embedded-image sphere, glowing Sting sword). The build pushed polygon budgets -- the mountain/lava toy alone was 350K polygons before optimization. The custom nature of the table required solving problems that strict recreations do not encounter, such as fitting VUK mechanisms inside fantasy tower models and scripting eye-tracking animations.
Table-Specific Details¶
Mechanisms & Hardware¶
Orthanc tower VUK integration: The realistic tower model could not accommodate the VUK mech internally. sixtoe's solution: keep the front and right side of the tower plus the top, delete the back and left walls, and fit the VUK inside the remaining shell. This hides the ball transport from the player's viewing angle.
Sauron Eye look-at-ball logic: The Palantir/Sauron Eye was scripted to track the ball position during gameplay. The eye image sits between two halves of a sphere (inner and outer shell). The "look logic" calculates ball position relative to the eye and rotates the eye texture to face the ball.
Palantir embedded-image sphere: Created by making the sphere in two parts (inner and outer shell) with an image placed between them. The transparent outer shell with refraction creates the illusion of the image being embedded inside the orb. Separated from the rest of the model to allow scripting (rotation, BDL effects).
Ball glow effect: To make the ball "glow" under the glowing Sting sword, a VPX light follows the ball's XY position every frame. Unlike ball textures (which must be set before ball creation and cannot change), VPX lights can be repositioned and modified in real time.
Art & Visuals¶
Instant Meshes decimation: External software "Instant Meshes" produced dramatically better decimation results than Blender's Decimate modifier for 3D scanned toys -- reducing a model from 180MB/high-poly to 3MB/30K polygons while maintaining shape. The critical limitation: UV maps are lost. Workaround: use Blender Cycles' high-to-low poly baking to transfer textures from the original to the decimated mesh.
Dark toy material settings: For dark-colored 3D scanned toys (Balrog, Shelob), glossy roughness of 0 looks best -- even 0.1 creates visible speckling artifacts. Tested at 1.0 (matte), 0.1 (speckled), and 0.0 (clean shiny) -- 0.0 produced the most natural look for dark figurines.
Lattice modifier for ramp repositioning: When a complex ramp model needed bending around a pop bumper, tomate80 used Blender's Lattice modifier to deform the geometry to fit without remodeling from scratch.
Clear Custom Split Normals Data: When importing models from other formats (SketchUp, etc.) into Blender, using "Clear Custom Split Normals Data" fixes visual glitches from different smoothing/normal data handling.
HDRI selection: The artist_workshop_8k HDRI was identified as particularly good for pinball rendering.
Physics & Gameplay¶
Roth saucer code for VUK: apophis79 integrated rothbauerw's improved kicker/saucer physics for the Gollum VUK to fix sticky ball behavior. When VUK kickers are too small, balls get stuck and cannot be nudged free.
Lampz fade speed tuning: Flippers (lower) fading differently than upper playfield lights was traced to Lampz fade speed configuration, not a timer problem. LampTimer.Interval = 6 with Lampz.FadeSpeedUp(x) = 1/7 and Lampz.FadeSpeedDown(x) = 1/35. These values are interdependent -- changing the interval without adjusting fade speeds changes the visual behavior.
Mountain toy polygon count: 350K polygons for a decorative element. Removing the mountain portion dropped to 39K (tower alone). Unnecessary bottom geometry (never visible from the player's angle) should always be removed.
Known Issues¶
64-bit VPX requires 64-bit Freezy/dmdext: Mixing 32-bit dmdext with 64-bit VPX causes crashes or missing DMD.
Ball image must be set before creating balls: Ball texture cannot be changed dynamically after ball creation. The glow effect works around this by using VPX lights instead.
Techniques Developed Here¶
- Instant Meshes decimation workflow for scanned toys
- High-to-low poly baking in Blender Cycles for UV transfer after decimation
- artist_workshop_8k HDRI recommendation for pinball rendering