Overview
VRSL’s DMX control system allows you to transmit professional DMX512 lighting data into VRChat through a video stream. This enables synchronized, real-time control of stage lighting across all players in an instance.The Artnet Grid Node is a separate commercial product available on Gumroad. While VRSL’s shaders and scripts are open source, the Grid Node software is required for DMX functionality.
How It Works
The system encodes DMX data as pixels in a video grid, which is then streamed to VRChat. VRSL’s shaders read these pixels and convert them back to lighting data - all processed on the GPU for maximum performance.Key Advantages
- Universal Sync: All players see the same lighting in real-time
- Hardware Accelerated: 95% shader-based computation
- Industry Standard: Works with any Artnet-compatible software or hardware
- Live Performance Ready: Enables real-time lighting control during events
Prerequisites
Required Software
- Unity 2019.4 or newer
- VRChat SDK3 for Worlds
- UdonSharp
- VRSL package (via VPM)
- AudioLink v2.7+ (recommended)
- Streaming software (OBS Studio recommended)
Required Hardware
- At least one extra monitor (16:9 resolution recommended)
- Sufficient GPU for encoding video stream
- Stable internet connection for streaming
Optional
- VRSL Artnet Grid Node software
- DMX lighting console or software (QLC+, LightKey, etc.)
Installation Steps
VRSL > Control Panel menu- Horizontal Mode (default, recommended for new setups)
- Vertical Mode (alternative layout)
- Legacy Mode (for backwards compatibility)
- TekOSC Grid Reader (included, uses OSC)
- USharpVideo DMX Screen (requires USharpVideo package)
- ProTV DMX Screen (requires ProTV package)
- VideoTXL DMX Screen (requires VideoTXL package)
- Set video URL to your stream
- Enable looping if testing with recorded video
- Adjust resolution to match your grid (typically 1920x1080)
- Spotlight - Moving head spot light
- Washlight - Moving head wash light
- Blinder - High-intensity strobe/blinder
- Flasher - Compact strobe light
- PAR Light - Static PAR can
- Light Bar - Multi-cell light bar
- Disco Ball - Mirror ball effect
VRStageLighting_DMX_Static component- DMX Universe: 1-9 (enable Extended Universes in Control Panel for 2-9)
- DMX Channel: Starting channel (1-512)
- Fixture ID: Unique identifier for vertical/legacy modes
- Max/Min Pan: Horizontal rotation range
- Max/Min Tilt: Vertical rotation range
- Global Intensity: Master brightness
- Light Color Tint: Base color
- Cone Width/Length: Beam size
Setting Up Artnet Grid Node
Configure Grid Node Output
- Launch Artnet Grid Node application
- Select your output resolution (1920x1080 recommended)
- Choose grid mode:
- Horizontal: Matches VRSL Horizontal Mode
- Vertical: Matches VRSL Vertical Mode
- Legacy: Matches VRSL Legacy Mode
- Configure Artnet input:
- Set IP address (usually 127.0.0.1 for local)
- Enable universes you’re using (1-9)
- Set frame rate (30fps recommended)
Route Grid Node to Streaming Software
- In OBS Studio, add a Window Capture or Display Capture source
- Select the Artnet Grid Node window
- Scale to fill your stream output (1920x1080)
- Add to your streaming scene
Connect Your Lighting Software
- In your DMX software (QLC+, LightKey, etc.):
- Enable Artnet output
- Set IP to 127.0.0.1 (or Grid Node PC IP if networked)
- Configure universes to match your fixtures
- Patch your fixtures to DMX channels matching Unity setup
Streaming Configuration
OBS Settings
Video Settings:- Base Resolution: 1920x1080
- Output Resolution: 1920x1080
- FPS: 30 (or 60 for smoother movement)
- Encoder: x264 or NVENC
- Rate Control: CBR
- Bitrate: 6000 kbps minimum (higher is better)
- Keyframe Interval: 2
- Preset: Quality or High Quality
Minimizing Latency
In OBS:- Use Studio Mode to avoid cut transitions
- Reduce output delay settings
- Use wired network connection
- Position video screen close to spawn point
- Use higher bitrate streams
- Enable interpolation in CRT materials for smoother movement
Testing Your Setup
- Verify correct DMX mode is active
- Confirm Custom Render Textures are updating
- Minimum Smoothness: 0 = most smooth (default)
- Maximum Smoothness: 1 = no smoothing
Keep smoothing at maximum (0) for best compression artifact compensation. Only reduce smoothing temporarily if you need quick fixture movements.
Common Issues
Fixtures Not Responding
Check:- DMX mode matches between Control Panel, Video Reader, and Grid Node
- Video stream is playing (not frozen or buffering)
- DMX addressing is correct (universe and channel)
- Fixtures are enabled in Control Panel
- Custom Render Textures are set to Realtime update mode
Jittery or Erratic Movement
Solutions:- Increase stream bitrate (minimum 6000 kbps)
- Enable interpolation in CRT movement material
- Keep smoothing at maximum (0) for most situations
- Check for compression artifacts in stream
- Use wired network connection instead of WiFi
Delayed Response
Reduce latency by:- Using lower-latency streaming protocol
- Reducing keyframe interval
- Minimizing network hops
- Using local streaming server
- Enabling hardware encoding (NVENC/Quick Sync)
Color Incorrect or Washed Out
Verify:- Color space is set to Linear in Unity (Project Settings > Player)
- No color correction filters on DMX grid in OBS
- Stream using lossless or high quality preset
- Video compression is not too aggressive
Advanced Configuration
Extended Universes (9 Universe Mode)
- In VRSL Control Panel, enable “Extended Universes”
- This enables DMX Universes 1-9 (4590 channels total)
- All fixtures will automatically update to support 9-universe mode
- Configure Grid Node to output multiple universes
Signal Detection System
For interpolated CRT shaders:- Select the interpolation CRT material
- Enable “Signal Detection System”
- This automatically disables DMX when invalid video is detected
- Useful for preventing issues during stream disconnects
Custom Fixture Profiles
See Creating Custom Fixtures for detailed instructions on creating your own fixture definitions.Best Practices
Optimization:- Use GPU instancing (automatic with VRSL)
- Keep fixture count under 50 per universe for best performance
- Use appropriate volumetric quality settings
- Disable depth light requirement on Quest builds
- Use stencil masks to prevent light bleed into other rooms
- Organize fixtures into clear hierarchy (Universe 1, Universe 2, etc.)
- Name fixtures descriptively (“Spot-Truss-Front-L”)
- Save DMX patch data using VRSL’s patch export feature
- Document your DMX addressing scheme
- Use fixture groups in lighting console for easier control
Next Steps
- Learn about AudioLink Integration
- Optimize your world with Performance Optimization
- Create Custom Fixtures
- Set up Video Streaming for your performances
Resources
- VRSL Discord - Community support
- Purchase Artnet Grid Node
- VRSL GitHub
- AudioLink GitHub