Warlok¶
VLM implementation with VR backglass segment display innovation for Warlok (Gottlieb 1982).
Build Notes¶
VLM Backglass and Segment Display Rendering¶
Render segment displays using VLM toolkit for VR backglass:
- Create camera pointing horizontally at backbox
- Each segment in Blender like playfield light
- Use plastics material setup on backglass image
- Everything must be in camera view
- Apply prefix to export (e.g., "B" for backglass)
Segments render with depth and glow vs flat B2S approach. Check Bram Stoker Dracula for reference implementation.
Contributors: metated, apophis79
GI Control ROM Integration¶
GI not responding to ROM initially. Counter-intuitive fix: Change SolGi from TRUE to FALSE in Sub Table1_Init. Required for proper ROM GI control on Warlok.
See VPinMame integration primer for detailed information.
Contributors: metated, apophis79
Backglass Lamp ID Discovery Methods¶
Finding Controller.Lamp numbers for backglass lights:
- Check table manual for lamp matrix
- Study backglass wiring diagrams
- Watch videos of machine in action
- Use All-in-1 Visual B2S tool
- Check existing B2S files - IDs often named in editor
All-in-1 B2S provides visual render of ROM for finding correct IDs.
Contributors: apophis79, dgrimmreaper, hauntfreaks
3D & Art¶
Insert Tray Baking with Layer Separators¶
Insert images baking flat on playfield instead of in trays. Solutions:
- Add layer separator below playfield surface (like BtC setup)
- Link to PF object using VLM mask option
- Verify layer separator works in Blender rendering mode first
- Check plastic in non-opaque collection
- Verify layer separator material compatible with Blender 4.2+
- Set "hide parts behind" correctly on BM_Playfield
Tray image may bake correctly underneath but still show flat on top if layer separator incorrect.
Contributors: metated, apophis79
Spinner and Wire Visibility via Unwrapping¶
Spinner rods and wire gates barely visible after bake. Solution: Unwrap objects to force toolkit to keep all polygons.
Texture size recommendations:
- 256x256: Minimum, ok for small wires
- 512x512+: Better for VR face-on-glass viewing
- Consider whole spinner vs just wire when choosing resolution
Contributors: apophis79, cyberpez
Metal Shader for Unwrapped Objects¶
Unwrapped Objects Rendering Black
Metal shaders only work with camera-rendered objects.
Unwrapped baked objects rendering black. Cause: Metal shader applied to unwrapped objects. Change to non-metal shader for unwrapped bakes.
Contributor: bord1947
Smart UV Unwrap vs Lightmap Pack¶
Lightmap Pack creates "mosaic" pattern up close - million tiny islands.
Better approaches:
- Start with Smart UV Unwrap
- If Smart UV doesn't look good, set seams manually then Unwrap
- Lightmap Pack ok for distant objects
Smart UV reported texture size limits at 100% bake on large objects - may need resolution reduction.
Contributors: metated, apophis79, oqqsan
Raytraced Ball Shadows GI Height Setting¶
Ball shadows not appearing on playfield from split GI lights.
Cause: GI light zPos too low (-8).
Solution: Set z to roughly ball center when resting on playfield - typically 28 (ball at 25 when resting). Shadows only cast from lights at proper height.
Contributors: apophis79, metated
VLM Nestmap Memory Errors¶
Error "expected 'Image' type found 'Image' instead" during nestmap process = out of memory.
Solution:
- Restart computer
- Close all other applications
- Retry nestmap generation
Caused by insufficient RAM for nestmap texture atlas generation.
Contributor: apophis79
Best Practices¶
Flipper Ghost Images from Static Lightmaps¶
Ghost flippers visible during gameplay but correct in Live Edit.
Cause: Flipper lightmaps set to "Static Rendering".
Solution: Uncheck Static Rendering for both bakemaps AND lightmaps. Live editor renders all non-static objects (why issue disappears there).
Toolkit auto-exports lightmaps as non-static but verify after manual changes.
Contributors: mechaenron, apophis79, metated
Troubleshooting¶
Playfield Transparency Shader Issues¶
Playfield semi-transparent in VPX.
Root cause: Missing hole mask in playfield shader. Hole mask different from insert mask:
- Insert mask: Black (transparent inserts) and white (wood + insert decals)
- Hole mask: Defines alpha holes in playfield
Temporary fix: Set hole mask input to 0 instead of 1.
Proper fix: Create actual hole mask image.
Contributors: frank_enste1n, metated