Overview
VRSL’s core innovation is transmitting DMX512 lighting data through a video stream. This approach enables synchronized lighting control across all users in a VRChat world, allowing live performances and real-time lighting programming from external software.The system is 95% shader-based, including pixel reading from the video stream. Only 5% uses scripts for GPU instancing and property management.
Why Video Streaming?
VRSL uses video streaming to achieve three critical goals:- Universal Sync - All players see the same lighting state regardless of when they joined
- User Control - Any user can stream their own lighting design to the world
- Live Performance - Enables real-time control during events with minimal latency
The Grid Node System
The VRSL Grid Node (sold separately) receives Art-Net or sACN DMX data and converts it into a video texture:- Each 16×16 pixel block represents one DMX channel
- Supports vertical mode (13 columns × 67 rows = 871 channels) or horizontal mode (120 × 13 = 1,560 channels)
- Can operate in RGB mode for expanded universe support (up to 9 universes)
- Uses OSC for real-time synchronization during editor testing
Grid Layout
In vertical mode, the grid is organized as:Channel Encoding
Standard Mode
In standard mode, a single DMX value is encoded across all RGB components:RGB Mode (Nine Universe)
With_NineUniverseMode enabled, each color channel encodes a separate universe:
Sector & Channel Addressing
VRSL uses a sector-based addressing system to locate channels in the grid:Coordinate Calculation
UV Mapping
The calculated sector coordinates are converted to texture UV coordinates:The system includes special offset corrections for edge cases to compensate for streaming compression artifacts.
Reading DMX Values
Shaders access DMX data using thegetValueAtCoords() function:
Fixture Channel Layout
VRSL fixtures use standardized DMX channel layouts:Moving Light (13 channels)
Legacy vs Industry Mode
VRSL supports two grid reading modes:Legacy Mode
Older coordinate system for backward compatibility:Industry Mode (Current)
More efficient coordinate calculation with proper resolution scaling:Performance Characteristics
Hardware Acceleration
- All pixel reading happens on the GPU
- No CPU-side texture access or parsing
- Uses point sampling (
VRSL_PointClampSampler) to avoid interpolation - Supports GPU instancing for rendering hundreds of fixtures
Latency Sources
- Streaming Delay - Video encoding and network transmission (typically 0.5-2 seconds)
- Video Player Buffering - Unity/VRChat video player processing
- Shader Evaluation - Negligible (runs every frame on GPU)
Integration Example
Reading and using DMX data in a custom shader:Related Topics
Shader Architecture
Learn how shaders decode and render DMX data
Video Streaming
Understand the complete video streaming pipeline