Skip to main content

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:
  1. Universal Sync - All players see the same lighting state regardless of when they joined
  2. User Control - Any user can stream their own lighting design to the world
  3. 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:
The shader reads this using luminance conversion:

RGB Mode (Nine Universe)

With _NineUniverseMode enabled, each color channel encodes a separate universe:
Shader decoding selects the appropriate color channel:

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 the getValueAtCoords() function:

Fixture Channel Layout

VRSL fixtures use standardized DMX channel layouts:

Moving Light (13 channels)

All channel reading functions automatically handle sector calculation, RGB mode, and value normalization.

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

  1. Streaming Delay - Video encoding and network transmission (typically 0.5-2 seconds)
  2. Video Player Buffering - Unity/VRChat video player processing
  3. Shader Evaluation - Negligible (runs every frame on GPU)
Compression artifacts can scramble movement data. VRSL implements smoothing and interpolation to compensate, but rapid movements may appear delayed.

Integration Example

Reading and using DMX data in a custom shader:

Shader Architecture

Learn how shaders decode and render DMX data

Video Streaming

Understand the complete video streaming pipeline