Migrating from Built in - towneh/vrsl-urp GitHub Wiki
Migrating from Built-in
Moving a world from the original VR Stage Lighting package, which targets the Built-in pipeline, to this one. The two can be installed at the same time, which is what makes the move incremental rather than all at once.
Why both can coexist
Everything that could collide has a different name: the asset GUIDs, the shader names (VRSL-URP/… here against VRSL/… there), the C# namespaces (VRSL.URP against VRSL) and the DMX shader globals (_VRSLU_DMX* against _Udon_DMX*).
Each package runs its own decode chain and its own render passes, side by side. Having both costs two decode chains, and what it buys is the chance to compare the old and new fixture in the same scene before you commit.
The two menu items
Both appear only while the original package is present, both match fixtures by the prefab they came from, and both can be run again safely.
- VRSL → URP → Migrate Scene Fixtures (Add URP Siblings) places the matching URP fixture beside each original at the same world transform and leaves the original in place. The URP fixture lights the scene under URP while the original keeps rendering under the old path, so you can compare them before deleting the originals.
- VRSL → URP → Convert Custom Fixtures In-Place (Component + Material) swaps the component and the material on fixtures you built yourself rather than from a stock prefab.
The sibling pass recognises every stock fixture prefab in all three grid layouts, Horizontal, Vertical and Legacy, on both the DMX and AudioLink sides: the spot and wash movers, the blinder and par (13 and 5 channel), the laser, the discoball, the flasher, the light bars and the 6x4 strobe. Movers, blinders, pars and the discoball come across as realtime lights; the rest keep the same component they had, since those fixtures are still shader-driven here.
A fixture here takes its grid layout from the manager, so a Legacy or Vertical fixture comes across as the same Horizontal URP prefab a Horizontal one does. Set the manager's DMX Input to the grid the world's video carries (see DMX Sources). The Horizontal prefabs carry the original package's v2.4 materials, which were retuned for Horizontal only, so a migrated Legacy or Vertical fixture can look brighter or glossier than the original did.
Legacy fixtures are recognised from both places the original package kept them: Prefabs/DMX/Legacy Mode/, and Shaders/Basic Surface Shaders/Legacy Mode/, which VRSL v2.1 to v2.3.0 shipped and v2.4.0 removed. A world built on one of those releases can carry either set.
The 5-channel Vertical light bar has no URP prefab and is left where it is; the summary names it so nothing is passed over silently.
Light stencils don't come across. This package has no light stencil, so the original package's stencil masks (the VRSL-StencilMask-* prefabs, or anything on the Light Stencil or Light Restoration Stencil material or shader) no longer keep light off anything. Both menu items list any they find in the scene and leave them for you to delete; clicking an entry's Console line selects it. To keep fixture light off an area, aim the fixtures away from it, narrow their cone or shorten their range. A fixture still lights a surface on the far side of a wall, because the lights cast no shadows (only short contact shadows). Beams stop at whatever stands in front of them, and flares and lasers hide behind what blocks them.
AudioLink fixtures come across only when AudioLink is installed, since their URP components need it. Without it the tool migrates the DMX fixtures, leaves the AudioLink ones where they are and lists them in the summary; install AudioLink and run it again to bring them across.
Releases up to 0.3.0-rc.4 shipped per-layout URP prefabs for the Legacy and Vertical layouts, and 0.2.0-rc.6 and earlier migrated Legacy and Vertical fixtures onto them. They're gone now: a scene that still holds one shows a Missing Prefab in its place, and running the sibling pass over it again adds a second fixture beside each one. Open such a scene with 0.3.0-rc.4 or earlier and run VRSL → URP → Replace Superseded Prefabs in Scene first, which moves it onto the single prefabs and keeps what was set on each instance and each manager's DMX Input.
The in-place pass recognises the DMX Static, AudioLink Static and AudioLink Laser components.
Each URP fixture comes across as its original stood: switched off if the original was, on its layer and tag, and with its light off if the original's fixture component was.
A migrated fixture keeps its tint, global and final intensity and AudioLink band multiplier relative to the original prefab's default rather than as raw values. This package tuned those for its own lighting: the original fixtures mostly default to a tint of 2 where this package's movers and discoballs use 1, and the original AudioLink wash runs at intensity 1 and band multiplier 2.5 where this package's runs at 0.15 and 1. So a fixture you never changed arrives at this package's values and looks like a freshly placed one, and one you changed keeps its share. Everything that decides what a show does comes across as it was: addresses, pan and tilt inversion and ranges, AudioLink switched on or off, band, gobo, strobe and spin. The original DMX wash inverts its pan where this package's doesn't, so a migrated wash keeps inverting it and pans the way your show was programmed.
An AudioLink mover's Cone Width becomes its spot angle the same way: the original spot's width of 2.25 gives this package's 25°, the wash's 2.7 gives 60°, and a wider or narrower cone scales in the same share, never under 5°. Pars and blinders keep their spot angle, because the original's Cone Width never changed their light. A script you're porting that set ConeWidth on an AudioLink fixture can do the same at runtime: light.spotAngle = light.SpotAngleForLegacyConeWidth(width); on the fixture's AudioLink realtime light.
If a setting can't be carried across, the Console says which one, once per run, and the new fixture keeps its prefab's value. If you changed a setting on an original that the URP fixture has no place for, such as Cone Length on a DMX fixture, the Console names it for that fixture and the summary counts it, so you can check the URP fixture by hand.
The URP fixtures sit beside the originals, so anything else in the scene that points at an original, such as a lights button's call or a script's field, keeps working until you delete it. Migrate Scene Fixtures doesn't change those. Its summary counts the references into the originals and anything you added to them (a child object or a component), and the Console lists each with where it belongs on the URP fixture: the URP fixture itself, its fixture component, or its part of the same name. Clicking a line selects it. Deal with those before deleting the originals.
The in-place conversion does replace the component, so it moves references to it across: a field that can hold the URP component, or a button's call to a method the URP component also has with the same arguments, points at the new one. A field typed to the original's class can't, and is left empty and named in the Console.
Which versions it runs on
Both menu items need the original package installed and compiling, and a compile error in any package stops every script in the project compiling, this one included.
- VRSL 2.8 or newer on Unity 6000.4 compiles, with deprecation warnings, and the migration runs as it is.
- VRSL 2.7.1 or newer on Unity 6000.5 or newer doesn't compile: three lines in its editor scripts call
GetInstanceID(), which 6000.5 removed. Embed the package (move its folder fromLibrary/PackageCacheintoPackages/) and changeAssetDatabase.GetAssetPath(this.GetInstanceID())toAssetDatabase.GetAssetPath(this)inEditor/VRSL_DMXPatchSettings.cs(two lines) andEditor/VRSL_FixtureDefinitions.cs(one). - VRSL before 2.8 builds its fixtures on UdonSharp, which comes with VRChat's SDK and doesn't support Unity 6, so it doesn't compile in a project this package runs in.
Afterwards
If you remove the original package, any fixture that still referenced it keeps missing-script slots. The package cleans those up in memory whenever a scene opens, without marking the scene dirty, so there is no save prompt and nothing to do.
Two things that were true of the old package are not true here, and both remove a step:
- No depth light. The old package needed a scene light for depth and shipped a prefab for it. Depth now comes from the pipeline, so a room with no lights in it at all still lights surfaces and renders beams.
- No control panel for the shader globals. The manager publishes the DMX grid textures itself and switches its decode textures to realtime, so the panel that used to do that is not needed on the URP path. The panel that ships is an optional overlay for the local user, adjusting the managers' quality and intensity; see The control panel in Fixture Configuration Reference.
One thing changed on purpose: a DMX fixture at full output is now half as bright as it was, because maxIntensity is defined on the same scale as a URP spot light's Intensity. On fixtures that looked right before, double maxIntensity or set curveMod to 1.