From df3b4e3875b7cd382a3ddec07dd9f4de8f2413b3 Mon Sep 17 00:00:00 2001 From: AcChosen Date: Sun, 27 Nov 2022 12:32:21 -0500 Subject: [PATCH] Quest Compatibility Update -Added toggle to disable depth light requirements for VRSL shaders on a per scene basis for Quest compatibility -Added toggle to remove 2D and 3D noise effects from volumetric shaders to reduce their overhead on quest. -Implmented many toggles as keywords for static branching instead of dynamic branching to improve performance slightly. -Slight performance improvement on volumetric shaders. -Fixed 3D noise time bug --- ...StageLighting-ExampleScene-AudioLink.unity | 193 +++++++-- ...-DMX-DesktopViewerExample-Horizontal.unity | 121 +++++- ...Example-Horizontal_UdonProgramSources.meta | 8 - ...pleScene-DMX-EditorViaOSC-Horizontal.unity | 120 ++++++ ...-AudioLink-StandardMover-VolumetricMat.mat | 12 +- ...-Blinder-LensFlareMat-AltForAnimations.mat | 1 + .../VRSL-AudioLink-Blinder-LensFlareMat.mat | 1 + ...VRSL-AudioLink-WashMover-VolumetricMat.mat | 8 +- ...-StandardMover-VolumetricMat-HQ-Legacy.mat | 6 +- ...ndardMover-VolumetricMat-HQ-Horizontal.mat | 8 +- ...tandardMover-VolumetricMat-HQ-Vertical.mat | 6 +- ...VRSL-WashMover-VolumetricMat-HQ-Legacy.mat | 6 +- ...-WashMover-VolumetricMat-HQ-Horizontal.mat | 10 +- ...SL-WashMover-VolumetricMat-HQ-Vertical.mat | 6 +- ...SL-Blinder-LensFlareMat-Horizontal-5CH.mat | 2 + .../VRSL-Blinder-LensFlareMat-Legacy-5CH.mat | 2 + .../VRSL-Blinder-LensFlareMat-Legacy.mat | 2 + .../VRSL-Blinder-LensFlareMat-Horizontal.mat | 2 + ...VRSL-Blinder-LensFlareMat-Vertical-5CH.mat | 2 + .../VRSL-Blinder-LensFlareMat-Vertical.mat | 2 + .../VRSL-LensFlareBase-Flasher-Legacy.mat | 2 + .../VRSL-LensFlareBase-Flasher-Horizontal.mat | 2 + .../VRSL-LensFlareBase-Flasher-Vertical.mat | 2 + .../MoverLight--RTP-SplitMesh-SingleSided.fbx | Bin 155116 -> 0 bytes ...rLight--RTP-SplitMesh-SingleSided.fbx.meta | 157 -------- Prefabs/VRSL-LocalUIControlPanel.prefab | 2 + Scripts/Editor/VRSL_ManagerWindow.cs | 163 +++++++- Scripts/Editor/VRSL_UdonEditor.cs | 10 + Scripts/Other/VRSL_LocalUIControlPanel.asset | 379 +++++++++++++----- Scripts/Other/VRSL_LocalUIControlPanel.cs | 81 ++++ ...dioLink-StandardMover-VolumetricFrag.cginc | 241 +++++------ ...ioLink-StandardMover-VolumetricMesh.shader | 12 +- ...-AudioLink-WashMover-VolumetricMesh.shader | 9 +- .../Shared/VRSL-AudioLink-Defines.cginc | 4 +- ...RSL-AudioLink-StaticLight-LensFlare.shader | 135 +++---- .../VRSL-DMX-Static-DiscoBall-L-1CH.prefab | 5 +- Shaders/Editor/VRSLInspector.cs | 85 ++-- .../VRSL-StandardMover-VolumetricFrag.cginc | 216 +++++----- .../VRSL-StandardMover-VolumetricMesh.shader | 8 +- .../VRSL-WashMover-VolumetricMesh.shader | 7 +- .../VRSL-FlasherStatic-LensFlare.shader | 13 +- .../VRSL-StaticLight-LensFlare-5CH.shader | 12 +- .../VRSL-StaticLight-LensFlare.shader | 63 +-- ...erpolated-Color+Intensity-Horizontal.asset | 2 +- ...wer-Interpolated-Movement-Horizontal.asset | 2 +- .../DMXRTViewer-SpinTimer-Horizontal.asset | 2 +- ...DMXRTViewer-StrobeTimings-Horizontal.asset | 2 +- 47 files changed, 1424 insertions(+), 710 deletions(-) delete mode 100644 Example Scenes/DMX-DesktopDuplicationScenes (Requires uDesktopDuplicator)/VRStageLighting-ExampleScene-DMX-DesktopViewerExample-Horizontal_UdonProgramSources.meta delete mode 100644 Meshes/FBX/MoverLight--RTP-SplitMesh-SingleSided.fbx delete mode 100644 Meshes/FBX/MoverLight--RTP-SplitMesh-SingleSided.fbx.meta diff --git a/Example Scenes/AudioLink-ExampleScenes/VRStageLighting-ExampleScene-AudioLink.unity b/Example Scenes/AudioLink-ExampleScenes/VRStageLighting-ExampleScene-AudioLink.unity index b3ffd30..b3763a8 100644 --- a/Example Scenes/AudioLink-ExampleScenes/VRStageLighting-ExampleScene-AudioLink.unity +++ b/Example Scenes/AudioLink-ExampleScenes/VRStageLighting-ExampleScene-AudioLink.unity @@ -221,6 +221,21 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 0} m_Modifications: + - target: {fileID: 3151432740593531817, guid: dedfba01424b93148b3d9a42e95ed2f7, + type: 3} + propertyPath: m_IsOn + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3151432740593531817, guid: dedfba01424b93148b3d9a42e95ed2f7, + type: 3} + propertyPath: m_Navigation.m_Mode + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3151432740593531817, guid: dedfba01424b93148b3d9a42e95ed2f7, + type: 3} + propertyPath: onValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_StringArgument + value: _CheckDepthLightStatus + objectReference: {fileID: 0} - target: {fileID: 4902972101965582961, guid: dedfba01424b93148b3d9a42e95ed2f7, type: 3} propertyPath: m_AnchorMax.x @@ -596,6 +611,16 @@ PrefabInstance: propertyPath: tiltRangeTarget value: -180 objectReference: {fileID: 0} + - target: {fileID: 5595631434132784427, guid: dedfba01424b93148b3d9a42e95ed2f7, + type: 3} + propertyPath: _volumetricNoise + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5595631434132784427, guid: dedfba01424b93148b3d9a42e95ed2f7, + type: 3} + propertyPath: _requireDepthLight + value: 1 + objectReference: {fileID: 0} - target: {fileID: 5595631434132784427, guid: dedfba01424b93148b3d9a42e95ed2f7, type: 3} propertyPath: serializationData.Prefab @@ -1147,6 +1172,11 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: -0.000015258789 objectReference: {fileID: 0} + - target: {fileID: 2881618057933502406, guid: 161d81f8a11b22d42ae4e81f522939d3, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 4628212643147990498, guid: 161d81f8a11b22d42ae4e81f522939d3, type: 3} propertyPath: band @@ -1173,6 +1203,11 @@ PrefabInstance: value: objectReference: {fileID: 4628212643147990498, guid: 161d81f8a11b22d42ae4e81f522939d3, type: 3} + - target: {fileID: 5925805451780157428, guid: 161d81f8a11b22d42ae4e81f522939d3, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7970878009445922391, guid: 161d81f8a11b22d42ae4e81f522939d3, type: 3} propertyPath: m_Name @@ -1407,7 +1442,7 @@ PrefabInstance: - target: {fileID: 8370683083737037791, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} propertyPath: m_LocalRotation.w - value: 0.9957226 + value: 0.9953993 objectReference: {fileID: 0} - target: {fileID: 8370683083737037791, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} @@ -1417,7 +1452,7 @@ PrefabInstance: - target: {fileID: 8370683083737037791, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} propertyPath: m_LocalRotation.y - value: 0.09239346 + value: 0.095813654 objectReference: {fileID: 0} - target: {fileID: 8370683084096826084, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} @@ -1523,7 +1558,7 @@ PrefabInstance: - target: {fileID: 8370683084189262413, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} propertyPath: m_LocalPosition.x - value: 0.38 + value: 0.41 objectReference: {fileID: 0} - target: {fileID: 8370683084189262413, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} @@ -1533,27 +1568,32 @@ PrefabInstance: - target: {fileID: 8370683084189262413, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} propertyPath: m_LocalPosition.z - value: 2.03 + value: 2.11 + objectReference: {fileID: 0} + - target: {fileID: 8370683084247272370, guid: 2aa50be2d32099842af2903a918a56f7, + type: 3} + propertyPath: m_IsActive + value: 1 objectReference: {fileID: 0} - target: {fileID: 8370683084744376644, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} propertyPath: m_LocalRotation.w - value: 0.04348758 + value: 0.044308264 objectReference: {fileID: 0} - target: {fileID: 8370683084744376644, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} propertyPath: m_LocalRotation.x - value: -0.08151921 + value: -0.084953025 objectReference: {fileID: 0} - target: {fileID: 8370683084744376644, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} propertyPath: m_LocalRotation.y - value: -0.4686644 + value: -0.46031496 objectReference: {fileID: 0} - target: {fileID: 8370683084744376644, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} propertyPath: m_LocalRotation.z - value: -0.8785313 + value: -0.8825701 objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} @@ -1743,6 +1783,11 @@ PrefabInstance: propertyPath: m_LocalPosition.z value: -2.43 objectReference: {fileID: 0} + - target: {fileID: 672503850487982185, guid: dd0fe316ce2ca824ead0901561087fd3, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 672503850984956575, guid: dd0fe316ce2ca824ead0901561087fd3, type: 3} propertyPath: m_LocalRotation.w @@ -2032,6 +2077,11 @@ PrefabInstance: propertyPath: publicVariablesUnityEngineObjects.Array.data[6] value: objectReference: {fileID: 361300295} + - target: {fileID: 8370683084247272370, guid: 2aa50be2d32099842af2903a918a56f7, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 8370683084744376644, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} propertyPath: m_LocalRotation.w @@ -2233,6 +2283,11 @@ PrefabInstance: propertyPath: m_LocalPosition.z value: -2.56 objectReference: {fileID: 0} + - target: {fileID: 672503850487982185, guid: dd0fe316ce2ca824ead0901561087fd3, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 672503850984956575, guid: dd0fe316ce2ca824ead0901561087fd3, type: 3} propertyPath: m_LocalRotation.w @@ -2514,6 +2569,11 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: -0.000015258789 objectReference: {fileID: 0} + - target: {fileID: 2881618057933502406, guid: 161d81f8a11b22d42ae4e81f522939d3, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 4628212643147990498, guid: 161d81f8a11b22d42ae4e81f522939d3, type: 3} propertyPath: lightColorTint.b @@ -2535,6 +2595,11 @@ PrefabInstance: value: objectReference: {fileID: 4628212643147990498, guid: 161d81f8a11b22d42ae4e81f522939d3, type: 3} + - target: {fileID: 5925805451780157428, guid: 161d81f8a11b22d42ae4e81f522939d3, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7970878009445922391, guid: 161d81f8a11b22d42ae4e81f522939d3, type: 3} propertyPath: m_Name @@ -2719,6 +2784,11 @@ PrefabInstance: propertyPath: m_LocalPosition.z value: 1.5 objectReference: {fileID: 0} + - target: {fileID: 8370683084247272370, guid: 2aa50be2d32099842af2903a918a56f7, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 8370683084744376644, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} propertyPath: m_LocalRotation.w @@ -3178,12 +3248,12 @@ PrefabInstance: type: 3} propertyPath: DynamicMaterials.Array.data[8] value: - objectReference: {fileID: 2100000, guid: 3dc789fcff109bd4a8ed838655c5fe85, type: 2} + objectReference: {fileID: 2100000, guid: e27b434902443f34a9e2c103795abbf3, type: 2} - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, type: 3} propertyPath: DynamicMaterials.Array.data[9] value: - objectReference: {fileID: 2100000, guid: e27b434902443f34a9e2c103795abbf3, type: 2} + objectReference: {fileID: 2100000, guid: 3dc789fcff109bd4a8ed838655c5fe85, type: 2} - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, type: 3} propertyPath: DynamicMaterials.Array.data[10] @@ -3208,17 +3278,17 @@ PrefabInstance: type: 3} propertyPath: DynamicMaterials.Array.data[14] value: - objectReference: {fileID: 2100000, guid: 29935870faf4e494299fc9c75a5be2f6, type: 2} + objectReference: {fileID: 2100000, guid: cf4505a08a0a93d4c9bee38264bd2d73, type: 2} - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, type: 3} propertyPath: DynamicMaterials.Array.data[15] value: - objectReference: {fileID: 2100000, guid: cf4505a08a0a93d4c9bee38264bd2d73, type: 2} + objectReference: {fileID: 2100000, guid: 1e5e69646ccc2ef4294992a17022832b, type: 2} - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, type: 3} propertyPath: DynamicMaterials.Array.data[16] value: - objectReference: {fileID: 2100000, guid: 1e5e69646ccc2ef4294992a17022832b, type: 2} + objectReference: {fileID: 2100000, guid: 29935870faf4e494299fc9c75a5be2f6, type: 2} - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, type: 3} propertyPath: DynamicMaterials.Array.data[17] @@ -3243,17 +3313,17 @@ PrefabInstance: type: 3} propertyPath: DynamicMaterials.Array.data[21] value: - objectReference: {fileID: 2100000, guid: df8af7c6b49d2b94392404c2f3a87cc5, type: 2} + objectReference: {fileID: 2100000, guid: 547d40805583e1c458aa8baf22f77ba5, type: 2} - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, type: 3} propertyPath: DynamicMaterials.Array.data[22] value: - objectReference: {fileID: 2100000, guid: 547d40805583e1c458aa8baf22f77ba5, type: 2} + objectReference: {fileID: 2100000, guid: 8036e184e66d8d54da31bdefb608f58e, type: 2} - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, type: 3} propertyPath: DynamicMaterials.Array.data[23] value: - objectReference: {fileID: 2100000, guid: 8036e184e66d8d54da31bdefb608f58e, type: 2} + objectReference: {fileID: 2100000, guid: df8af7c6b49d2b94392404c2f3a87cc5, type: 2} - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, type: 3} propertyPath: DynamicMaterials.Array.data[24] @@ -3322,7 +3392,7 @@ PrefabInstance: - target: {fileID: 8370683083737037791, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} propertyPath: m_LocalRotation.w - value: 0.99583685 + value: 0.99233353 objectReference: {fileID: 0} - target: {fileID: 8370683083737037791, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} @@ -3332,7 +3402,7 @@ PrefabInstance: - target: {fileID: 8370683083737037791, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} propertyPath: m_LocalRotation.y - value: -0.09115339 + value: -0.12358903 objectReference: {fileID: 0} - target: {fileID: 8370683084096826084, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} @@ -3423,7 +3493,7 @@ PrefabInstance: - target: {fileID: 8370683084189262413, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} propertyPath: m_LocalPosition.x - value: -0.36 + value: -0.42 objectReference: {fileID: 0} - target: {fileID: 8370683084189262413, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} @@ -3433,7 +3503,7 @@ PrefabInstance: - target: {fileID: 8370683084189262413, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} propertyPath: m_LocalPosition.z - value: 1.95 + value: 1.66 objectReference: {fileID: 0} - target: {fileID: 8370683084247272370, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} @@ -3443,22 +3513,22 @@ PrefabInstance: - target: {fileID: 8370683084744376644, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} propertyPath: m_LocalRotation.w - value: -0.044285353 + value: -0.063444 objectReference: {fileID: 0} - target: {fileID: 8370683084744376644, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} propertyPath: m_LocalRotation.x - value: 0.079672664 + value: 0.10606152 objectReference: {fileID: 0} - target: {fileID: 8370683084744376644, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} propertyPath: m_LocalRotation.y - value: -0.48381165 + value: -0.50941294 objectReference: {fileID: 0} - target: {fileID: 8370683084744376644, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} propertyPath: m_LocalRotation.z - value: -0.87041223 + value: -0.85160106 objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} @@ -3684,6 +3754,11 @@ PrefabInstance: propertyPath: publicVariablesUnityEngineObjects.Array.data[5] value: objectReference: {fileID: 7890732830020983326} + - target: {fileID: 8370683084247272370, guid: 2aa50be2d32099842af2903a918a56f7, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 8370683084744376644, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} propertyPath: m_LocalRotation.w @@ -4020,6 +4095,11 @@ PrefabInstance: propertyPath: publicVariablesUnityEngineObjects.Array.data[5] value: objectReference: {fileID: 401837026} + - target: {fileID: 8370683084247272370, guid: 2aa50be2d32099842af2903a918a56f7, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 8370683084744376644, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} propertyPath: m_LocalRotation.w @@ -4210,6 +4290,11 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: -0.000015258789 objectReference: {fileID: 0} + - target: {fileID: 2881618057933502406, guid: 161d81f8a11b22d42ae4e81f522939d3, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 4628212643147990498, guid: 161d81f8a11b22d42ae4e81f522939d3, type: 3} propertyPath: lightColorTint.b @@ -4231,6 +4316,11 @@ PrefabInstance: value: objectReference: {fileID: 4628212643147990498, guid: 161d81f8a11b22d42ae4e81f522939d3, type: 3} + - target: {fileID: 5925805451780157428, guid: 161d81f8a11b22d42ae4e81f522939d3, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7970878009445922391, guid: 161d81f8a11b22d42ae4e81f522939d3, type: 3} propertyPath: m_Name @@ -4350,6 +4440,11 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: -0.000015258789 objectReference: {fileID: 0} + - target: {fileID: 2881618057933502406, guid: 161d81f8a11b22d42ae4e81f522939d3, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 4628212643147990498, guid: 161d81f8a11b22d42ae4e81f522939d3, type: 3} propertyPath: lightColorTint.b @@ -4371,6 +4466,11 @@ PrefabInstance: value: objectReference: {fileID: 4628212643147990498, guid: 161d81f8a11b22d42ae4e81f522939d3, type: 3} + - target: {fileID: 5925805451780157428, guid: 161d81f8a11b22d42ae4e81f522939d3, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7970878009445922391, guid: 161d81f8a11b22d42ae4e81f522939d3, type: 3} propertyPath: m_Name @@ -5155,6 +5255,11 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: -0.000015258789 objectReference: {fileID: 0} + - target: {fileID: 2881618057933502406, guid: 161d81f8a11b22d42ae4e81f522939d3, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 4628212643147990498, guid: 161d81f8a11b22d42ae4e81f522939d3, type: 3} propertyPath: lightColorTint.b @@ -5176,6 +5281,11 @@ PrefabInstance: value: objectReference: {fileID: 4628212643147990498, guid: 161d81f8a11b22d42ae4e81f522939d3, type: 3} + - target: {fileID: 5925805451780157428, guid: 161d81f8a11b22d42ae4e81f522939d3, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7970878009445922391, guid: 161d81f8a11b22d42ae4e81f522939d3, type: 3} propertyPath: m_Name @@ -5351,6 +5461,11 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 7203171348618848644, guid: 269647a339f4d1c47951638c83aa839b, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7346385784703776053, guid: 269647a339f4d1c47951638c83aa839b, type: 3} propertyPath: serializedProgramAsset @@ -5575,6 +5690,11 @@ PrefabInstance: propertyPath: publicVariablesUnityEngineObjects.Array.data[6] value: objectReference: {fileID: 1930212409} + - target: {fileID: 8370683084247272370, guid: 2aa50be2d32099842af2903a918a56f7, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 8370683084744376644, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} propertyPath: m_LocalRotation.w @@ -5895,6 +6015,11 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: -0.000015258789 objectReference: {fileID: 0} + - target: {fileID: 2881618057933502406, guid: 161d81f8a11b22d42ae4e81f522939d3, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 4628212643147990498, guid: 161d81f8a11b22d42ae4e81f522939d3, type: 3} propertyPath: band @@ -5921,6 +6046,11 @@ PrefabInstance: value: objectReference: {fileID: 4628212643147990498, guid: 161d81f8a11b22d42ae4e81f522939d3, type: 3} + - target: {fileID: 5925805451780157428, guid: 161d81f8a11b22d42ae4e81f522939d3, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7970878009445922391, guid: 161d81f8a11b22d42ae4e81f522939d3, type: 3} propertyPath: m_Name @@ -6113,6 +6243,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-AudioLink-DiscoBall objectReference: {fileID: 0} + - target: {fileID: 4247945514636141393, guid: a7acda2f5fe7dfd4aaa49ec10a2d5586, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 5548051813897782700, guid: a7acda2f5fe7dfd4aaa49ec10a2d5586, type: 3} propertyPath: serializationData.Prefab @@ -7420,6 +7555,11 @@ PrefabInstance: propertyPath: publicVariablesUnityEngineObjects.Array.data[5] value: objectReference: {fileID: 0} + - target: {fileID: 8370683084247272370, guid: 2aa50be2d32099842af2903a918a56f7, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 2aa50be2d32099842af2903a918a56f7, type: 3} --- !u!1001 &9043110790762904854 @@ -7515,6 +7655,11 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 180.00002 objectReference: {fileID: 0} + - target: {fileID: 672503850487982185, guid: dd0fe316ce2ca824ead0901561087fd3, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 1089010062832540286, guid: dd0fe316ce2ca824ead0901561087fd3, type: 3} propertyPath: targetToFollow diff --git a/Example Scenes/DMX-DesktopDuplicationScenes (Requires uDesktopDuplicator)/VRStageLighting-ExampleScene-DMX-DesktopViewerExample-Horizontal.unity b/Example Scenes/DMX-DesktopDuplicationScenes (Requires uDesktopDuplicator)/VRStageLighting-ExampleScene-DMX-DesktopViewerExample-Horizontal.unity index d1995e3..58d9096 100644 --- a/Example Scenes/DMX-DesktopDuplicationScenes (Requires uDesktopDuplicator)/VRStageLighting-ExampleScene-DMX-DesktopViewerExample-Horizontal.unity +++ b/Example Scenes/DMX-DesktopDuplicationScenes (Requires uDesktopDuplicator)/VRStageLighting-ExampleScene-DMX-DesktopViewerExample-Horizontal.unity @@ -472,6 +472,11 @@ PrefabInstance: propertyPath: publicVariablesUnityEngineObjects.Array.size value: 0 objectReference: {fileID: 0} + - target: {fileID: 5825422817945746806, guid: b3e8ff051cc2d684aa255ceccce9b96f, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 6606377100955968320, guid: b3e8ff051cc2d684aa255ceccce9b96f, type: 3} propertyPath: m_RootOrder @@ -664,6 +669,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Static-ParLight-H (Sector 5-Alt) objectReference: {fileID: 0} + - target: {fileID: 8473887432807896544, guid: 946b3c09cfa93244c90a4b0ac7764b44, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 946b3c09cfa93244c90a4b0ac7764b44, type: 3} --- !u!4 &269083155 stripped @@ -741,6 +751,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Mover-Spotlight-H (Sector 0-Invert) objectReference: {fileID: 0} + - target: {fileID: 6935407641794089727, guid: f5be3cfe3f15bfb4e9477904c5af9daf, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7730740239420329161, guid: f5be3cfe3f15bfb4e9477904c5af9daf, type: 3} propertyPath: m_RootOrder @@ -893,6 +908,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Mover-Spotlight-H (Sector 3-Invert) objectReference: {fileID: 0} + - target: {fileID: 6935407641794089727, guid: f5be3cfe3f15bfb4e9477904c5af9daf, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7730740239420329161, guid: f5be3cfe3f15bfb4e9477904c5af9daf, type: 3} propertyPath: m_RootOrder @@ -1260,6 +1280,11 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 3561410614008698204, guid: e9dde3e86ccb8ca4bb4ecbe35a6fa7b1, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 8117001334545528025, guid: e9dde3e86ccb8ca4bb4ecbe35a6fa7b1, type: 3} propertyPath: m_Name @@ -1368,6 +1393,11 @@ PrefabInstance: propertyPath: publicVariablesUnityEngineObjects.Array.size value: 0 objectReference: {fileID: 0} + - target: {fileID: 5825422817945746806, guid: b3e8ff051cc2d684aa255ceccce9b96f, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 6606377100955968320, guid: b3e8ff051cc2d684aa255ceccce9b96f, type: 3} propertyPath: m_RootOrder @@ -1530,6 +1560,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Mover-Spotlight-H (Sector 3) objectReference: {fileID: 0} + - target: {fileID: 6935407641794089727, guid: f5be3cfe3f15bfb4e9477904c5af9daf, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7730740239420329161, guid: f5be3cfe3f15bfb4e9477904c5af9daf, type: 3} propertyPath: m_RootOrder @@ -1794,6 +1829,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Mover-Spotlight-H (Sector 1) objectReference: {fileID: 0} + - target: {fileID: 6935407641794089727, guid: f5be3cfe3f15bfb4e9477904c5af9daf, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7730740239420329161, guid: f5be3cfe3f15bfb4e9477904c5af9daf, type: 3} propertyPath: m_RootOrder @@ -2010,6 +2050,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Static-ParLight-H (Sector 6-Alt) objectReference: {fileID: 0} + - target: {fileID: 8473887432807896544, guid: 946b3c09cfa93244c90a4b0ac7764b44, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 946b3c09cfa93244c90a4b0ac7764b44, type: 3} --- !u!4 &674297278 stripped @@ -2202,6 +2247,11 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 3561410614008698204, guid: e9dde3e86ccb8ca4bb4ecbe35a6fa7b1, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 8117001334545528025, guid: e9dde3e86ccb8ca4bb4ecbe35a6fa7b1, type: 3} propertyPath: m_Name @@ -2457,6 +2507,11 @@ PrefabInstance: propertyPath: publicVariablesUnityEngineObjects.Array.size value: 0 objectReference: {fileID: 0} + - target: {fileID: 5825422817945746806, guid: b3e8ff051cc2d684aa255ceccce9b96f, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 6606377100955968320, guid: b3e8ff051cc2d684aa255ceccce9b96f, type: 3} propertyPath: m_RootOrder @@ -2603,6 +2658,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Mover-Spotlight-H (Sector 0) objectReference: {fileID: 0} + - target: {fileID: 6935407641794089727, guid: f5be3cfe3f15bfb4e9477904c5af9daf, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7730740239420329161, guid: f5be3cfe3f15bfb4e9477904c5af9daf, type: 3} propertyPath: m_RootOrder @@ -2818,6 +2878,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Static-ParLight-H (Sector 4) objectReference: {fileID: 0} + - target: {fileID: 8473887432807896544, guid: 946b3c09cfa93244c90a4b0ac7764b44, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 946b3c09cfa93244c90a4b0ac7764b44, type: 3} --- !u!4 &912224517 stripped @@ -3126,6 +3191,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Mover-Spotlight-H (Sector 2-Invert) objectReference: {fileID: 0} + - target: {fileID: 6935407641794089727, guid: f5be3cfe3f15bfb4e9477904c5af9daf, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7730740239420329161, guid: f5be3cfe3f15bfb4e9477904c5af9daf, type: 3} propertyPath: m_RootOrder @@ -3555,6 +3625,11 @@ PrefabInstance: propertyPath: m_Name value: Directional Light (For Depth) objectReference: {fileID: 0} + - target: {fileID: 353812187978428513, guid: dc2b8d13712a0f3488413e49afae73ef, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 1895161030725929991, guid: dc2b8d13712a0f3488413e49afae73ef, type: 3} propertyPath: m_RootOrder @@ -3779,6 +3854,11 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 3561410614008698204, guid: e9dde3e86ccb8ca4bb4ecbe35a6fa7b1, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 8117001334545528025, guid: e9dde3e86ccb8ca4bb4ecbe35a6fa7b1, type: 3} propertyPath: m_Name @@ -4069,6 +4149,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Static-ParLight-H (Sector 5) objectReference: {fileID: 0} + - target: {fileID: 8473887432807896544, guid: 946b3c09cfa93244c90a4b0ac7764b44, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 946b3c09cfa93244c90a4b0ac7764b44, type: 3} --- !u!4 &1526241255 stripped @@ -4270,6 +4355,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Static-ParLight-H (Sector 4-Alt) objectReference: {fileID: 0} + - target: {fileID: 8473887432807896544, guid: 946b3c09cfa93244c90a4b0ac7764b44, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 946b3c09cfa93244c90a4b0ac7764b44, type: 3} --- !u!4 &1549262145 stripped @@ -4711,6 +4801,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Static-ParLight-H (Sector 6) objectReference: {fileID: 0} + - target: {fileID: 8473887432807896544, guid: 946b3c09cfa93244c90a4b0ac7764b44, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 946b3c09cfa93244c90a4b0ac7764b44, type: 3} --- !u!4 &1636251377 stripped @@ -4985,6 +5080,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Mover-Spotlight-H (Sector 2) objectReference: {fileID: 0} + - target: {fileID: 6935407641794089727, guid: f5be3cfe3f15bfb4e9477904c5af9daf, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7730740239420329161, guid: f5be3cfe3f15bfb4e9477904c5af9daf, type: 3} propertyPath: m_RootOrder @@ -5244,6 +5344,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Mover-Spotlight-H (Sector 1-Invert) objectReference: {fileID: 0} + - target: {fileID: 6935407641794089727, guid: f5be3cfe3f15bfb4e9477904c5af9daf, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7730740239420329161, guid: f5be3cfe3f15bfb4e9477904c5af9daf, type: 3} propertyPath: m_RootOrder @@ -5700,6 +5805,11 @@ PrefabInstance: propertyPath: tiltRangeTarget value: -180 objectReference: {fileID: 0} + - target: {fileID: 5595631434132784427, guid: dedfba01424b93148b3d9a42e95ed2f7, + type: 3} + propertyPath: _requireDepthLight + value: 1 + objectReference: {fileID: 0} - target: {fileID: 5595631434132784427, guid: dedfba01424b93148b3d9a42e95ed2f7, type: 3} propertyPath: serializationData.Prefab @@ -6321,6 +6431,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Static-DiscoBall-H (Sector 39) objectReference: {fileID: 0} + - target: {fileID: 7053024667453560164, guid: 22192b7ad03f22a4db578b035fdca38d, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7053024667453560171, guid: 22192b7ad03f22a4db578b035fdca38d, type: 3} propertyPath: _syncMethod @@ -6481,17 +6596,17 @@ PrefabInstance: - target: {fileID: 1590388465911483962, guid: 8c5b2abb4f158154cad77f35b9ce2643, type: 3} propertyPath: m_LocalPosition.x - value: -0.28 + value: -1.42 objectReference: {fileID: 0} - target: {fileID: 1590388465911483962, guid: 8c5b2abb4f158154cad77f35b9ce2643, type: 3} propertyPath: m_LocalPosition.y - value: -0.02 + value: -0.77 objectReference: {fileID: 0} - target: {fileID: 1590388465911483962, guid: 8c5b2abb4f158154cad77f35b9ce2643, type: 3} propertyPath: m_LocalPosition.z - value: 0 + value: 0.7 objectReference: {fileID: 0} - target: {fileID: 1590388465911483962, guid: 8c5b2abb4f158154cad77f35b9ce2643, type: 3} diff --git a/Example Scenes/DMX-DesktopDuplicationScenes (Requires uDesktopDuplicator)/VRStageLighting-ExampleScene-DMX-DesktopViewerExample-Horizontal_UdonProgramSources.meta b/Example Scenes/DMX-DesktopDuplicationScenes (Requires uDesktopDuplicator)/VRStageLighting-ExampleScene-DMX-DesktopViewerExample-Horizontal_UdonProgramSources.meta deleted file mode 100644 index 94a240a..0000000 --- a/Example Scenes/DMX-DesktopDuplicationScenes (Requires uDesktopDuplicator)/VRStageLighting-ExampleScene-DMX-DesktopViewerExample-Horizontal_UdonProgramSources.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: cf72b39105aa84d45a5a1dcc2af9722c -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Example Scenes/DMX-EditorViaOSCScenes/VRStageLighting-ExampleScene-DMX-EditorViaOSC-Horizontal.unity b/Example Scenes/DMX-EditorViaOSCScenes/VRStageLighting-ExampleScene-DMX-EditorViaOSC-Horizontal.unity index e016f69..0603a76 100644 --- a/Example Scenes/DMX-EditorViaOSCScenes/VRStageLighting-ExampleScene-DMX-EditorViaOSC-Horizontal.unity +++ b/Example Scenes/DMX-EditorViaOSCScenes/VRStageLighting-ExampleScene-DMX-EditorViaOSC-Horizontal.unity @@ -398,6 +398,11 @@ PrefabInstance: propertyPath: publicVariablesUnityEngineObjects.Array.size value: 0 objectReference: {fileID: 0} + - target: {fileID: 5825422817945746806, guid: b3e8ff051cc2d684aa255ceccce9b96f, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 6606377100955968320, guid: b3e8ff051cc2d684aa255ceccce9b96f, type: 3} propertyPath: m_RootOrder @@ -590,6 +595,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Static-ParLight-H (Sector 5-Alt) objectReference: {fileID: 0} + - target: {fileID: 8473887432807896544, guid: 946b3c09cfa93244c90a4b0ac7764b44, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 946b3c09cfa93244c90a4b0ac7764b44, type: 3} --- !u!4 &269083155 stripped @@ -667,6 +677,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Mover-Spotlight-H (Sector 0-Invert) objectReference: {fileID: 0} + - target: {fileID: 6935407641794089727, guid: f5be3cfe3f15bfb4e9477904c5af9daf, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7730740239420329161, guid: f5be3cfe3f15bfb4e9477904c5af9daf, type: 3} propertyPath: m_RootOrder @@ -824,6 +839,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Mover-Spotlight-H (Sector 3-Invert) objectReference: {fileID: 0} + - target: {fileID: 6935407641794089727, guid: f5be3cfe3f15bfb4e9477904c5af9daf, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7730740239420329161, guid: f5be3cfe3f15bfb4e9477904c5af9daf, type: 3} propertyPath: m_RootOrder @@ -1192,6 +1212,11 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 3561410614008698204, guid: e9dde3e86ccb8ca4bb4ecbe35a6fa7b1, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 8117001334545528025, guid: e9dde3e86ccb8ca4bb4ecbe35a6fa7b1, type: 3} propertyPath: m_Name @@ -1300,6 +1325,11 @@ PrefabInstance: propertyPath: publicVariablesUnityEngineObjects.Array.size value: 0 objectReference: {fileID: 0} + - target: {fileID: 5825422817945746806, guid: b3e8ff051cc2d684aa255ceccce9b96f, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 6606377100955968320, guid: b3e8ff051cc2d684aa255ceccce9b96f, type: 3} propertyPath: m_RootOrder @@ -1462,6 +1492,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Mover-Spotlight-H (Sector 3) objectReference: {fileID: 0} + - target: {fileID: 6935407641794089727, guid: f5be3cfe3f15bfb4e9477904c5af9daf, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7730740239420329161, guid: f5be3cfe3f15bfb4e9477904c5af9daf, type: 3} propertyPath: m_RootOrder @@ -1726,6 +1761,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Mover-Spotlight-H (Sector 1) objectReference: {fileID: 0} + - target: {fileID: 6935407641794089727, guid: f5be3cfe3f15bfb4e9477904c5af9daf, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7730740239420329161, guid: f5be3cfe3f15bfb4e9477904c5af9daf, type: 3} propertyPath: m_RootOrder @@ -1942,6 +1982,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Static-ParLight-H (Sector 6-Alt) objectReference: {fileID: 0} + - target: {fileID: 8473887432807896544, guid: 946b3c09cfa93244c90a4b0ac7764b44, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 946b3c09cfa93244c90a4b0ac7764b44, type: 3} --- !u!4 &674297278 stripped @@ -2134,6 +2179,11 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 3561410614008698204, guid: e9dde3e86ccb8ca4bb4ecbe35a6fa7b1, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 8117001334545528025, guid: e9dde3e86ccb8ca4bb4ecbe35a6fa7b1, type: 3} propertyPath: m_Name @@ -2389,6 +2439,11 @@ PrefabInstance: propertyPath: publicVariablesUnityEngineObjects.Array.size value: 0 objectReference: {fileID: 0} + - target: {fileID: 5825422817945746806, guid: b3e8ff051cc2d684aa255ceccce9b96f, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 6606377100955968320, guid: b3e8ff051cc2d684aa255ceccce9b96f, type: 3} propertyPath: m_RootOrder @@ -2541,6 +2596,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Mover-Spotlight-H (Sector 0) objectReference: {fileID: 0} + - target: {fileID: 6935407641794089727, guid: f5be3cfe3f15bfb4e9477904c5af9daf, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7730740239420329161, guid: f5be3cfe3f15bfb4e9477904c5af9daf, type: 3} propertyPath: m_RootOrder @@ -2756,6 +2816,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Static-ParLight-H (Sector 4) objectReference: {fileID: 0} + - target: {fileID: 8473887432807896544, guid: 946b3c09cfa93244c90a4b0ac7764b44, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 946b3c09cfa93244c90a4b0ac7764b44, type: 3} --- !u!4 &912224517 stripped @@ -3064,6 +3129,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Mover-Spotlight-H (Sector 2-Invert) objectReference: {fileID: 0} + - target: {fileID: 6935407641794089727, guid: f5be3cfe3f15bfb4e9477904c5af9daf, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7730740239420329161, guid: f5be3cfe3f15bfb4e9477904c5af9daf, type: 3} propertyPath: m_RootOrder @@ -3493,6 +3563,11 @@ PrefabInstance: propertyPath: m_Name value: Directional Light (For Depth) objectReference: {fileID: 0} + - target: {fileID: 353812187978428513, guid: dc2b8d13712a0f3488413e49afae73ef, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 1895161030725929991, guid: dc2b8d13712a0f3488413e49afae73ef, type: 3} propertyPath: m_RootOrder @@ -3717,6 +3792,11 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 3561410614008698204, guid: e9dde3e86ccb8ca4bb4ecbe35a6fa7b1, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 8117001334545528025, guid: e9dde3e86ccb8ca4bb4ecbe35a6fa7b1, type: 3} propertyPath: m_Name @@ -4007,6 +4087,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Static-ParLight-H (Sector 5) objectReference: {fileID: 0} + - target: {fileID: 8473887432807896544, guid: 946b3c09cfa93244c90a4b0ac7764b44, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 946b3c09cfa93244c90a4b0ac7764b44, type: 3} --- !u!4 &1526241255 stripped @@ -4208,6 +4293,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Static-ParLight-H (Sector 4-Alt) objectReference: {fileID: 0} + - target: {fileID: 8473887432807896544, guid: 946b3c09cfa93244c90a4b0ac7764b44, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 946b3c09cfa93244c90a4b0ac7764b44, type: 3} --- !u!4 &1549262145 stripped @@ -4649,6 +4739,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Static-ParLight-H (Sector 6) objectReference: {fileID: 0} + - target: {fileID: 8473887432807896544, guid: 946b3c09cfa93244c90a4b0ac7764b44, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 946b3c09cfa93244c90a4b0ac7764b44, type: 3} --- !u!4 &1636251377 stripped @@ -4923,6 +5018,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Mover-Spotlight-H (Sector 2) objectReference: {fileID: 0} + - target: {fileID: 6935407641794089727, guid: f5be3cfe3f15bfb4e9477904c5af9daf, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7730740239420329161, guid: f5be3cfe3f15bfb4e9477904c5af9daf, type: 3} propertyPath: m_RootOrder @@ -5182,6 +5282,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Mover-Spotlight-H (Sector 1-Invert) objectReference: {fileID: 0} + - target: {fileID: 6935407641794089727, guid: f5be3cfe3f15bfb4e9477904c5af9daf, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7730740239420329161, guid: f5be3cfe3f15bfb4e9477904c5af9daf, type: 3} propertyPath: m_RootOrder @@ -5638,11 +5743,21 @@ PrefabInstance: propertyPath: tiltRangeTarget value: -180 objectReference: {fileID: 0} + - target: {fileID: 5595631434132784427, guid: dedfba01424b93148b3d9a42e95ed2f7, + type: 3} + propertyPath: _volumetricNoise + value: 1 + objectReference: {fileID: 0} - target: {fileID: 5595631434132784427, guid: dedfba01424b93148b3d9a42e95ed2f7, type: 3} propertyPath: isUsingAudioLink value: 0 objectReference: {fileID: 0} + - target: {fileID: 5595631434132784427, guid: dedfba01424b93148b3d9a42e95ed2f7, + type: 3} + propertyPath: _requireDepthLight + value: 1 + objectReference: {fileID: 0} - target: {fileID: 5595631434132784427, guid: dedfba01424b93148b3d9a42e95ed2f7, type: 3} propertyPath: serializationData.Prefab @@ -6264,6 +6379,11 @@ PrefabInstance: propertyPath: m_Name value: VRSL-DMX-Static-DiscoBall-H (Sector 39) objectReference: {fileID: 0} + - target: {fileID: 7053024667453560164, guid: 22192b7ad03f22a4db578b035fdca38d, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7053024667453560171, guid: 22192b7ad03f22a4db578b035fdca38d, type: 3} propertyPath: _syncMethod diff --git a/Materials/Lights/AudioLink/StandardMover/VRSL-AudioLink-StandardMover-VolumetricMat.mat b/Materials/Lights/AudioLink/StandardMover/VRSL-AudioLink-StandardMover-VolumetricMat.mat index a1ae174..e25cb30 100644 --- a/Materials/Lights/AudioLink/StandardMover/VRSL-AudioLink-StandardMover-VolumetricMat.mat +++ b/Materials/Lights/AudioLink/StandardMover/VRSL-AudioLink-StandardMover-VolumetricMat.mat @@ -10,7 +10,8 @@ Material: m_Name: VRSL-AudioLink-StandardMover-VolumetricMat m_Shader: {fileID: 4800000, guid: a9ae9924e60e8b04293b700af7aba257, type: 3} m_ShaderKeywords: _DNENABLER_NONE _ENABLEOSC_ON _ENABLESPIN_ON _GOBOBEAMSPLITENABLE_ON - _TOGGLEMAGICNOISE_ON _USERAWGRID_ON + _MAGIC_NOISE_ON _MAGIC_NOISE_ON_ON _TOGGLEMAGICNOISE_ON _USEDEPTHLIGHT_ON _USERAWGRID_ON + _USE_DEPTH_LIGHT m_LightmapFlags: 4 m_EnableInstancingVariants: 1 m_DoubleSidedGI: 0 @@ -149,8 +150,9 @@ Material: - _IntersectionMod: 10 - _IsEven: 0 - _LMStrength: 1 - - _LensMaxBrightness: 10 + - _LensMaxBrightness: 2 - _LightProbeMethod: 0 + - _MAGIC_NOISE_ON: 1 - _MagicNoiseScale: 2.5 - _MaxConeLength: 1 - _MaxMinPanAngle: 0 @@ -158,16 +160,17 @@ Material: - _Metallic: 0.501 - _ModX: 0 - _ModY: 0 - - _Noise2Power: 0.9 + - _Noise2Power: 0.856 - _Noise2Stretch: 2.5 - _Noise2StretchInside: 2.5 - _Noise2X: 0 - _Noise2Y: 7.5 - _Noise2Z: 1 - - _NoisePower: 0.75 + - _NoisePower: 0.797 - _NoiseSeed: 420 - _NumBands: 4 - _PanInvert: 0 + - _PotatoMode: 0 - _ProjectionDistanceFallOff: 0.01 - _ProjectionFade: 2.35 - _ProjectionFadeCurve: 1.99 @@ -215,6 +218,7 @@ Material: - _ToggleMagicNoise: 1 - _TriplanarFalloff: 1 - _UniversalIntensity: 1 + - _UseDepthLight: 1 - _UseRawGrid: 1 - _UseWorldNorm: 0 - _XOffset: 0 diff --git a/Materials/Lights/AudioLink/StaticLight-Blinder/VRSL-AudioLink-Blinder-LensFlareMat-AltForAnimations.mat b/Materials/Lights/AudioLink/StaticLight-Blinder/VRSL-AudioLink-Blinder-LensFlareMat-AltForAnimations.mat index 6e0df9c..51e954e 100644 --- a/Materials/Lights/AudioLink/StaticLight-Blinder/VRSL-AudioLink-Blinder-LensFlareMat-AltForAnimations.mat +++ b/Materials/Lights/AudioLink/StaticLight-Blinder/VRSL-AudioLink-Blinder-LensFlareMat-AltForAnimations.mat @@ -124,6 +124,7 @@ Material: - _UVScale: 1 - _UVSec: 0 - _UniversalIntensity: 1 + - _UseDepthLight: 1 - _UsePreMultiplyAlpha: 0 - _UseRawGrid: 1 - _ZWrite: 1 diff --git a/Materials/Lights/AudioLink/StaticLight-Blinder/VRSL-AudioLink-Blinder-LensFlareMat.mat b/Materials/Lights/AudioLink/StaticLight-Blinder/VRSL-AudioLink-Blinder-LensFlareMat.mat index 6b4b3e3..d22baf0 100644 --- a/Materials/Lights/AudioLink/StaticLight-Blinder/VRSL-AudioLink-Blinder-LensFlareMat.mat +++ b/Materials/Lights/AudioLink/StaticLight-Blinder/VRSL-AudioLink-Blinder-LensFlareMat.mat @@ -124,6 +124,7 @@ Material: - _UVScale: 1 - _UVSec: 0 - _UniversalIntensity: 1 + - _UseDepthLight: 1 - _UsePreMultiplyAlpha: 0 - _UseRawGrid: 1 - _ZWrite: 1 diff --git a/Materials/Lights/AudioLink/WashMover/VRSL-AudioLink-WashMover-VolumetricMat.mat b/Materials/Lights/AudioLink/WashMover/VRSL-AudioLink-WashMover-VolumetricMat.mat index 89169b8..34d4b55 100644 --- a/Materials/Lights/AudioLink/WashMover/VRSL-AudioLink-WashMover-VolumetricMat.mat +++ b/Materials/Lights/AudioLink/WashMover/VRSL-AudioLink-WashMover-VolumetricMat.mat @@ -10,7 +10,8 @@ Material: m_Name: VRSL-AudioLink-WashMover-VolumetricMat m_Shader: {fileID: 4800000, guid: e94b1a2d8b9ef034da37a82c4fb64b60, type: 3} m_ShaderKeywords: _DNENABLER_NONE _ENABLECOLORTEXTURESAMPLE_ON _ENABLEOSC_ON _ENABLESPIN_ON - _GOBOBEAMSPLITENABLE_ON _TOGGLEMAGICNOISE_ON _USERAWGRID_ON + _GOBOBEAMSPLITENABLE_ON _MAGIC_NOISE_ON _TOGGLEMAGICNOISE_ON _USEDEPTHLIGHT_ON + _USERAWGRID_ON _USE_DEPTH_LIGHT m_LightmapFlags: 4 m_EnableInstancingVariants: 1 m_DoubleSidedGI: 0 @@ -151,6 +152,7 @@ Material: - _LMStrength: 1 - _LensMaxBrightness: 1.5 - _LightProbeMethod: 0 + - _MAGIC_NOISE_ON: 1 - _MagicNoiseScale: 2.5 - _MaxConeLength: 1 - _MaxMinPanAngle: 0 @@ -158,7 +160,7 @@ Material: - _Metallic: 0.501 - _ModX: 0 - _ModY: 0 - - _Noise2Power: 0.935 + - _Noise2Power: 0.844 - _Noise2Stretch: 1.5 - _Noise2StretchInside: 1.5 - _Noise2X: 0 @@ -168,6 +170,7 @@ Material: - _NoiseSeed: 420 - _NumBands: 4 - _PanInvert: 0 + - _PotatoMode: 0 - _ProjectionDistanceFallOff: 0.01 - _ProjectionFade: 2.35 - _ProjectionFadeCurve: 1.99 @@ -215,6 +218,7 @@ Material: - _ToggleMagicNoise: 1 - _TriplanarFalloff: 1 - _UniversalIntensity: 1 + - _UseDepthLight: 1 - _UseRawGrid: 1 - _UseWorldNorm: 0 - _XOffset: 0 diff --git a/Materials/Lights/DMX/MoverLight - Spotlight/LegacyMode/VRSL-StandardMover-VolumetricMat-HQ-Legacy.mat b/Materials/Lights/DMX/MoverLight - Spotlight/LegacyMode/VRSL-StandardMover-VolumetricMat-HQ-Legacy.mat index 2cc1207..a04c317 100644 --- a/Materials/Lights/DMX/MoverLight - Spotlight/LegacyMode/VRSL-StandardMover-VolumetricMat-HQ-Legacy.mat +++ b/Materials/Lights/DMX/MoverLight - Spotlight/LegacyMode/VRSL-StandardMover-VolumetricMat-HQ-Legacy.mat @@ -10,7 +10,7 @@ Material: m_Name: VRSL-StandardMover-VolumetricMat-HQ-Legacy m_Shader: {fileID: 4800000, guid: 67a0beb6b3a31dc4e8b2d2344df6a994, type: 3} m_ShaderKeywords: _DNENABLER_NONE _ENABLECOMPATIBILITYMODE_ON _ENABLEOSC_ON _GOBOBEAMSPLITENABLE_ON - _TOGGLEMAGICNOISE_ON _USERAWGRID_ON + _MAGIC_NOISE_ON _TOGGLEMAGICNOISE_ON _USERAWGRID_ON _USE_DEPTH_LIGHT m_LightmapFlags: 4 m_EnableInstancingVariants: 1 m_DoubleSidedGI: 0 @@ -146,12 +146,14 @@ Material: - _LegacyGoboRange: 0 - _LensMaxBrightness: 60 - _LightProbeMethod: 0 + - _MAGIC_NOISE_ON: 1 - _MaxConeLength: 1 - _MaxMinPanAngle: 90 - _MaxMinTiltAngle: -90 - _Metallic: 0.501 - _ModX: 0 - _ModY: 0 + - _NineUniverseMode: 0 - _Noise2Power: 0.9 - _Noise2Stretch: 2 - _Noise2StretchInside: 1.75 @@ -161,6 +163,7 @@ Material: - _NoisePower: 0.75 - _NoiseSeed: 420 - _PanInvert: 0 + - _PotatoMode: 0 - _ProjectionDistanceFallOff: 0.01 - _ProjectionFade: 2.35 - _ProjectionFadeCurve: 1.99 @@ -204,6 +207,7 @@ Material: - _ToggleMagicNoise: 1 - _TriplanarFalloff: 1 - _UniversalIntensity: 1 + - _UseDepthLight: 1 - _UseRawGrid: 1 - _UseWorldNorm: 0 - _XOffset: 0 diff --git a/Materials/Lights/DMX/MoverLight - Spotlight/VRSL-StandardMover-VolumetricMat-HQ-Horizontal.mat b/Materials/Lights/DMX/MoverLight - Spotlight/VRSL-StandardMover-VolumetricMat-HQ-Horizontal.mat index 50630a0..750eaff 100644 --- a/Materials/Lights/DMX/MoverLight - Spotlight/VRSL-StandardMover-VolumetricMat-HQ-Horizontal.mat +++ b/Materials/Lights/DMX/MoverLight - Spotlight/VRSL-StandardMover-VolumetricMat-HQ-Horizontal.mat @@ -9,8 +9,8 @@ Material: m_PrefabAsset: {fileID: 0} m_Name: VRSL-StandardMover-VolumetricMat-HQ-Horizontal m_Shader: {fileID: 4800000, guid: 67a0beb6b3a31dc4e8b2d2344df6a994, type: 3} - m_ShaderKeywords: _DNENABLER_NONE _ENABLEOSC_ON _GOBOBEAMSPLITENABLE_ON _TOGGLEMAGICNOISE_ON - _USERAWGRID_ON + m_ShaderKeywords: _DNENABLER_NONE _ENABLEOSC_ON _GOBOBEAMSPLITENABLE_ON _MAGIC_NOISE_ON + _MAGIC_NOISE_ON_ON _TOGGLEMAGICNOISE_ON _USERAWGRID_ON _USE_DEPTH_LIGHT m_LightmapFlags: 4 m_EnableInstancingVariants: 1 m_DoubleSidedGI: 0 @@ -146,6 +146,7 @@ Material: - _LegacyGoboRange: 0 - _LensMaxBrightness: 60 - _LightProbeMethod: 0 + - _MAGIC_NOISE_ON: 1 - _MaxConeLength: 1 - _MaxMinPanAngle: 90 - _MaxMinPanAngleInstanced: 180 @@ -154,6 +155,7 @@ Material: - _Metallic: 0.501 - _ModX: 0 - _ModY: 0 + - _NineUniverseMode: 0 - _Noise2Power: 0.9 - _Noise2Stretch: 2 - _Noise2StretchInside: 1.75 @@ -163,6 +165,7 @@ Material: - _NoisePower: 0.75 - _NoiseSeed: 420 - _PanInvert: 0 + - _PotatoMode: 0 - _ProjectionDistanceFallOff: 0.01 - _ProjectionFade: 2.35 - _ProjectionFadeCurve: 1.99 @@ -206,6 +209,7 @@ Material: - _ToggleMagicNoise: 1 - _TriplanarFalloff: 1 - _UniversalIntensity: 1 + - _UseDepthLight: 1 - _UseRawGrid: 1 - _UseWorldNorm: 0 - _XOffset: 0 diff --git a/Materials/Lights/DMX/MoverLight - Spotlight/VerticalMode/VRSL-StandardMover-VolumetricMat-HQ-Vertical.mat b/Materials/Lights/DMX/MoverLight - Spotlight/VerticalMode/VRSL-StandardMover-VolumetricMat-HQ-Vertical.mat index de6d7c7..2707488 100644 --- a/Materials/Lights/DMX/MoverLight - Spotlight/VerticalMode/VRSL-StandardMover-VolumetricMat-HQ-Vertical.mat +++ b/Materials/Lights/DMX/MoverLight - Spotlight/VerticalMode/VRSL-StandardMover-VolumetricMat-HQ-Vertical.mat @@ -10,7 +10,7 @@ Material: m_Name: VRSL-StandardMover-VolumetricMat-HQ-Vertical m_Shader: {fileID: 4800000, guid: 67a0beb6b3a31dc4e8b2d2344df6a994, type: 3} m_ShaderKeywords: _DNENABLER_NONE _ENABLEOSC_ON _ENABLESPIN_ON _ENABLEVERTICALMODE_ON - _GOBOBEAMSPLITENABLE_ON _TOGGLEMAGICNOISE_ON _USERAWGRID_ON + _GOBOBEAMSPLITENABLE_ON _MAGIC_NOISE_ON _TOGGLEMAGICNOISE_ON _USERAWGRID_ON _USE_DEPTH_LIGHT m_LightmapFlags: 4 m_EnableInstancingVariants: 1 m_DoubleSidedGI: 0 @@ -146,12 +146,14 @@ Material: - _LegacyGoboRange: 0 - _LensMaxBrightness: 60 - _LightProbeMethod: 0 + - _MAGIC_NOISE_ON: 1 - _MaxConeLength: 1 - _MaxMinPanAngle: 90 - _MaxMinTiltAngle: -90 - _Metallic: 0.501 - _ModX: 0 - _ModY: 0 + - _NineUniverseMode: 0 - _Noise2Power: 0.85 - _Noise2Stretch: 2 - _Noise2StretchInside: 1.75 @@ -161,6 +163,7 @@ Material: - _NoisePower: 0.75 - _NoiseSeed: 420 - _PanInvert: 0 + - _PotatoMode: 0 - _ProjectionDistanceFallOff: 0.01 - _ProjectionFade: 2.35 - _ProjectionFadeCurve: 1.99 @@ -204,6 +207,7 @@ Material: - _ToggleMagicNoise: 1 - _TriplanarFalloff: 1 - _UniversalIntensity: 1 + - _UseDepthLight: 1 - _UseRawGrid: 1 - _UseWorldNorm: 0 - _XOffset: 0 diff --git a/Materials/Lights/DMX/MoverLight - Washlight/LegacyMode/VRSL-WashMover-VolumetricMat-HQ-Legacy.mat b/Materials/Lights/DMX/MoverLight - Washlight/LegacyMode/VRSL-WashMover-VolumetricMat-HQ-Legacy.mat index 074b9f3..f75be4e 100644 --- a/Materials/Lights/DMX/MoverLight - Washlight/LegacyMode/VRSL-WashMover-VolumetricMat-HQ-Legacy.mat +++ b/Materials/Lights/DMX/MoverLight - Washlight/LegacyMode/VRSL-WashMover-VolumetricMat-HQ-Legacy.mat @@ -10,7 +10,7 @@ Material: m_Name: VRSL-WashMover-VolumetricMat-HQ-Legacy m_Shader: {fileID: 4800000, guid: da75de52174b0924f9a93e9a37146aed, type: 3} m_ShaderKeywords: _DNENABLER_NONE _ENABLECOMPATIBILITYMODE_ON _ENABLEOSC_ON _ENABLESPIN_ON - _TOGGLEMAGICNOISE_ON _USERAWGRID_ON + _MAGIC_NOISE_ON _TOGGLEMAGICNOISE_ON _USERAWGRID_ON _USE_DEPTH_LIGHT m_LightmapFlags: 4 m_EnableInstancingVariants: 1 m_DoubleSidedGI: 0 @@ -146,12 +146,14 @@ Material: - _LegacyGoboRange: 0 - _LensMaxBrightness: 1 - _LightProbeMethod: 0 + - _MAGIC_NOISE_ON: 1 - _MaxConeLength: 1 - _MaxMinPanAngle: 90 - _MaxMinTiltAngle: -90 - _Metallic: 0.501 - _ModX: 0 - _ModY: 0 + - _NineUniverseMode: 0 - _Noise2Power: 0.75 - _Noise2Stretch: 2 - _Noise2StretchInside: 1.5 @@ -161,6 +163,7 @@ Material: - _NoisePower: 0.75 - _NoiseSeed: 420 - _PanInvert: 0 + - _PotatoMode: 0 - _ProjectionDistanceFallOff: 0.01 - _ProjectionFade: 2.35 - _ProjectionFadeCurve: 1.99 @@ -204,6 +207,7 @@ Material: - _ToggleMagicNoise: 1 - _TriplanarFalloff: 1 - _UniversalIntensity: 1 + - _UseDepthLight: 1 - _UseRawGrid: 1 - _UseWorldNorm: 0 - _XOffset: 0 diff --git a/Materials/Lights/DMX/MoverLight - Washlight/VRSL-WashMover-VolumetricMat-HQ-Horizontal.mat b/Materials/Lights/DMX/MoverLight - Washlight/VRSL-WashMover-VolumetricMat-HQ-Horizontal.mat index e61d866..4535fe8 100644 --- a/Materials/Lights/DMX/MoverLight - Washlight/VRSL-WashMover-VolumetricMat-HQ-Horizontal.mat +++ b/Materials/Lights/DMX/MoverLight - Washlight/VRSL-WashMover-VolumetricMat-HQ-Horizontal.mat @@ -9,8 +9,8 @@ Material: m_PrefabAsset: {fileID: 0} m_Name: VRSL-WashMover-VolumetricMat-HQ-Horizontal m_Shader: {fileID: 4800000, guid: da75de52174b0924f9a93e9a37146aed, type: 3} - m_ShaderKeywords: _DNENABLER_NONE _ENABLEOSC_ON _ENABLESPIN_ON _TOGGLEMAGICNOISE_ON - _USERAWGRID_ON + m_ShaderKeywords: _DNENABLER_NONE _ENABLEOSC_ON _ENABLESPIN_ON _MAGIC_NOISE_ON + _TOGGLEMAGICNOISE_ON _USERAWGRID_ON _USE_DEPTH_LIGHT m_LightmapFlags: 4 m_EnableInstancingVariants: 1 m_DoubleSidedGI: 0 @@ -146,13 +146,15 @@ Material: - _LegacyGoboRange: 0 - _LensMaxBrightness: 1 - _LightProbeMethod: 0 + - _MAGIC_NOISE_ON: 1 - _MaxConeLength: 4.97 - _MaxMinPanAngle: 90 - _MaxMinTiltAngle: -90 - _Metallic: 0.501 - _ModX: 0 - _ModY: 0 - - _Noise2Power: 0.96 + - _NineUniverseMode: 0 + - _Noise2Power: 0.887 - _Noise2Stretch: 2 - _Noise2StretchInside: 1.5 - _Noise2X: 0 @@ -161,6 +163,7 @@ Material: - _NoisePower: 0.75 - _NoiseSeed: 420 - _PanInvert: 0 + - _PotatoMode: 0 - _ProjectionDistanceFallOff: 0.01 - _ProjectionFade: 2.35 - _ProjectionFadeCurve: 1.99 @@ -204,6 +207,7 @@ Material: - _ToggleMagicNoise: 1 - _TriplanarFalloff: 1 - _UniversalIntensity: 1 + - _UseDepthLight: 1 - _UseRawGrid: 1 - _UseWorldNorm: 0 - _XOffset: 0 diff --git a/Materials/Lights/DMX/MoverLight - Washlight/VerticalMode/VRSL-WashMover-VolumetricMat-HQ-Vertical.mat b/Materials/Lights/DMX/MoverLight - Washlight/VerticalMode/VRSL-WashMover-VolumetricMat-HQ-Vertical.mat index 267997b..389f730 100644 --- a/Materials/Lights/DMX/MoverLight - Washlight/VerticalMode/VRSL-WashMover-VolumetricMat-HQ-Vertical.mat +++ b/Materials/Lights/DMX/MoverLight - Washlight/VerticalMode/VRSL-WashMover-VolumetricMat-HQ-Vertical.mat @@ -10,7 +10,7 @@ Material: m_Name: VRSL-WashMover-VolumetricMat-HQ-Vertical m_Shader: {fileID: 4800000, guid: da75de52174b0924f9a93e9a37146aed, type: 3} m_ShaderKeywords: _DNENABLER_NONE _ENABLEOSC_ON _ENABLESPIN_ON _ENABLEVERTICALMODE_ON - _TOGGLEMAGICNOISE_ON _USERAWGRID_ON + _MAGIC_NOISE_ON _TOGGLEMAGICNOISE_ON _USERAWGRID_ON _USE_DEPTH_LIGHT m_LightmapFlags: 4 m_EnableInstancingVariants: 1 m_DoubleSidedGI: 0 @@ -146,12 +146,14 @@ Material: - _LegacyGoboRange: 0 - _LensMaxBrightness: 1 - _LightProbeMethod: 0 + - _MAGIC_NOISE_ON: 1 - _MaxConeLength: 1 - _MaxMinPanAngle: 90 - _MaxMinTiltAngle: -90 - _Metallic: 0.501 - _ModX: 0 - _ModY: 0 + - _NineUniverseMode: 0 - _Noise2Power: 0.75 - _Noise2Stretch: 1 - _Noise2StretchInside: 1 @@ -161,6 +163,7 @@ Material: - _NoisePower: 0.75 - _NoiseSeed: 420 - _PanInvert: 0 + - _PotatoMode: 0 - _ProjectionDistanceFallOff: 0.01 - _ProjectionFade: 2.35 - _ProjectionFadeCurve: 1.99 @@ -204,6 +207,7 @@ Material: - _ToggleMagicNoise: 1 - _TriplanarFalloff: 1 - _UniversalIntensity: 1 + - _UseDepthLight: 1 - _UseRawGrid: 1 - _UseWorldNorm: 0 - _XOffset: 0 diff --git a/Materials/Lights/DMX/StaticLight-Blinder/5-Channel/VRSL-Blinder-LensFlareMat-Horizontal-5CH.mat b/Materials/Lights/DMX/StaticLight-Blinder/5-Channel/VRSL-Blinder-LensFlareMat-Horizontal-5CH.mat index a3fca87..19ad6b3 100644 --- a/Materials/Lights/DMX/StaticLight-Blinder/5-Channel/VRSL-Blinder-LensFlareMat-Horizontal-5CH.mat +++ b/Materials/Lights/DMX/StaticLight-Blinder/5-Channel/VRSL-Blinder-LensFlareMat-Horizontal-5CH.mat @@ -94,6 +94,7 @@ Material: - _LightSourceViewSpaceRadius: 0.05 - _Metallic: 0 - _Mode: 0 + - _NineUniverseMode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 - _ReferenceDistance: 10 @@ -109,6 +110,7 @@ Material: - _UVScale: 1 - _UVSec: 0 - _UniversalIntensity: 1 + - _UseDepthLight: 1 - _UsePreMultiplyAlpha: 0 - _UseRawGrid: 1 - _ZWrite: 1 diff --git a/Materials/Lights/DMX/StaticLight-Blinder/LegacyMode/5-Channel/VRSL-Blinder-LensFlareMat-Legacy-5CH.mat b/Materials/Lights/DMX/StaticLight-Blinder/LegacyMode/5-Channel/VRSL-Blinder-LensFlareMat-Legacy-5CH.mat index c72bf13..b8a83b6 100644 --- a/Materials/Lights/DMX/StaticLight-Blinder/LegacyMode/5-Channel/VRSL-Blinder-LensFlareMat-Legacy-5CH.mat +++ b/Materials/Lights/DMX/StaticLight-Blinder/LegacyMode/5-Channel/VRSL-Blinder-LensFlareMat-Legacy-5CH.mat @@ -94,6 +94,7 @@ Material: - _LightSourceViewSpaceRadius: 0.05 - _Metallic: 0 - _Mode: 0 + - _NineUniverseMode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 - _ReferenceDistance: 10 @@ -109,6 +110,7 @@ Material: - _UVScale: 1 - _UVSec: 0 - _UniversalIntensity: 1 + - _UseDepthLight: 1 - _UsePreMultiplyAlpha: 0 - _UseRawGrid: 1 - _ZWrite: 1 diff --git a/Materials/Lights/DMX/StaticLight-Blinder/LegacyMode/VRSL-Blinder-LensFlareMat-Legacy.mat b/Materials/Lights/DMX/StaticLight-Blinder/LegacyMode/VRSL-Blinder-LensFlareMat-Legacy.mat index 0492188..f92d5d3 100644 --- a/Materials/Lights/DMX/StaticLight-Blinder/LegacyMode/VRSL-Blinder-LensFlareMat-Legacy.mat +++ b/Materials/Lights/DMX/StaticLight-Blinder/LegacyMode/VRSL-Blinder-LensFlareMat-Legacy.mat @@ -94,6 +94,7 @@ Material: - _LightSourceViewSpaceRadius: 0.05 - _Metallic: 0 - _Mode: 0 + - _NineUniverseMode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 - _ReferenceDistance: 10 @@ -109,6 +110,7 @@ Material: - _UVScale: 1 - _UVSec: 0 - _UniversalIntensity: 1 + - _UseDepthLight: 1 - _UsePreMultiplyAlpha: 0 - _UseRawGrid: 1 - _ZWrite: 1 diff --git a/Materials/Lights/DMX/StaticLight-Blinder/VRSL-Blinder-LensFlareMat-Horizontal.mat b/Materials/Lights/DMX/StaticLight-Blinder/VRSL-Blinder-LensFlareMat-Horizontal.mat index 6e8ca2c..c2832f8 100644 --- a/Materials/Lights/DMX/StaticLight-Blinder/VRSL-Blinder-LensFlareMat-Horizontal.mat +++ b/Materials/Lights/DMX/StaticLight-Blinder/VRSL-Blinder-LensFlareMat-Horizontal.mat @@ -94,6 +94,7 @@ Material: - _LightSourceViewSpaceRadius: 0.05 - _Metallic: 0 - _Mode: 0 + - _NineUniverseMode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 - _ReferenceDistance: 10 @@ -109,6 +110,7 @@ Material: - _UVScale: 1 - _UVSec: 0 - _UniversalIntensity: 1 + - _UseDepthLight: 1 - _UsePreMultiplyAlpha: 0 - _UseRawGrid: 1 - _ZWrite: 1 diff --git a/Materials/Lights/DMX/StaticLight-Blinder/VerticalMode/5-Channel/VRSL-Blinder-LensFlareMat-Vertical-5CH.mat b/Materials/Lights/DMX/StaticLight-Blinder/VerticalMode/5-Channel/VRSL-Blinder-LensFlareMat-Vertical-5CH.mat index cb2f669..464538c 100644 --- a/Materials/Lights/DMX/StaticLight-Blinder/VerticalMode/5-Channel/VRSL-Blinder-LensFlareMat-Vertical-5CH.mat +++ b/Materials/Lights/DMX/StaticLight-Blinder/VerticalMode/5-Channel/VRSL-Blinder-LensFlareMat-Vertical-5CH.mat @@ -94,6 +94,7 @@ Material: - _LightSourceViewSpaceRadius: 0.05 - _Metallic: 0 - _Mode: 0 + - _NineUniverseMode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 - _ReferenceDistance: 10 @@ -109,6 +110,7 @@ Material: - _UVScale: 1 - _UVSec: 0 - _UniversalIntensity: 1 + - _UseDepthLight: 1 - _UsePreMultiplyAlpha: 0 - _UseRawGrid: 1 - _ZWrite: 1 diff --git a/Materials/Lights/DMX/StaticLight-Blinder/VerticalMode/VRSL-Blinder-LensFlareMat-Vertical.mat b/Materials/Lights/DMX/StaticLight-Blinder/VerticalMode/VRSL-Blinder-LensFlareMat-Vertical.mat index 3017043..dd4e3a0 100644 --- a/Materials/Lights/DMX/StaticLight-Blinder/VerticalMode/VRSL-Blinder-LensFlareMat-Vertical.mat +++ b/Materials/Lights/DMX/StaticLight-Blinder/VerticalMode/VRSL-Blinder-LensFlareMat-Vertical.mat @@ -94,6 +94,7 @@ Material: - _LightSourceViewSpaceRadius: 0.05 - _Metallic: 0 - _Mode: 0 + - _NineUniverseMode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 - _ReferenceDistance: 10 @@ -109,6 +110,7 @@ Material: - _UVScale: 1 - _UVSec: 0 - _UniversalIntensity: 1 + - _UseDepthLight: 1 - _UsePreMultiplyAlpha: 0 - _UseRawGrid: 1 - _ZWrite: 1 diff --git a/Materials/Lights/DMX/StaticLight-LightBarAndFlashers/LegacyMode/VRSL-LensFlareBase-Flasher-Legacy.mat b/Materials/Lights/DMX/StaticLight-LightBarAndFlashers/LegacyMode/VRSL-LensFlareBase-Flasher-Legacy.mat index 792cfd8..8d46a02 100644 --- a/Materials/Lights/DMX/StaticLight-LightBarAndFlashers/LegacyMode/VRSL-LensFlareBase-Flasher-Legacy.mat +++ b/Materials/Lights/DMX/StaticLight-LightBarAndFlashers/LegacyMode/VRSL-LensFlareBase-Flasher-Legacy.mat @@ -94,6 +94,7 @@ Material: - _LightSourceViewSpaceRadius: 0.05 - _Metallic: 0 - _Mode: 0 + - _NineUniverseMode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 - _ReferenceDistance: 10 @@ -109,6 +110,7 @@ Material: - _UVScale: 1 - _UVSec: 0 - _UniversalIntensity: 1 + - _UseDepthLight: 1 - _UsePreMultiplyAlpha: 0 - _UseRawGrid: 1 - _ZWrite: 1 diff --git a/Materials/Lights/DMX/StaticLight-LightBarAndFlashers/VRSL-LensFlareBase-Flasher-Horizontal.mat b/Materials/Lights/DMX/StaticLight-LightBarAndFlashers/VRSL-LensFlareBase-Flasher-Horizontal.mat index c57431b..2f41483 100644 --- a/Materials/Lights/DMX/StaticLight-LightBarAndFlashers/VRSL-LensFlareBase-Flasher-Horizontal.mat +++ b/Materials/Lights/DMX/StaticLight-LightBarAndFlashers/VRSL-LensFlareBase-Flasher-Horizontal.mat @@ -94,6 +94,7 @@ Material: - _LightSourceViewSpaceRadius: 0.05 - _Metallic: 0 - _Mode: 0 + - _NineUniverseMode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 - _ReferenceDistance: 10 @@ -109,6 +110,7 @@ Material: - _UVScale: 1 - _UVSec: 0 - _UniversalIntensity: 1 + - _UseDepthLight: 1 - _UsePreMultiplyAlpha: 0 - _UseRawGrid: 1 - _ZWrite: 1 diff --git a/Materials/Lights/DMX/StaticLight-LightBarAndFlashers/VerticalMode/VRSL-LensFlareBase-Flasher-Vertical.mat b/Materials/Lights/DMX/StaticLight-LightBarAndFlashers/VerticalMode/VRSL-LensFlareBase-Flasher-Vertical.mat index 5dd9bcb..40e7a29 100644 --- a/Materials/Lights/DMX/StaticLight-LightBarAndFlashers/VerticalMode/VRSL-LensFlareBase-Flasher-Vertical.mat +++ b/Materials/Lights/DMX/StaticLight-LightBarAndFlashers/VerticalMode/VRSL-LensFlareBase-Flasher-Vertical.mat @@ -94,6 +94,7 @@ Material: - _LightSourceViewSpaceRadius: 0.05 - _Metallic: 0 - _Mode: 0 + - _NineUniverseMode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 - _ReferenceDistance: 10 @@ -109,6 +110,7 @@ Material: - _UVScale: 1 - _UVSec: 0 - _UniversalIntensity: 1 + - _UseDepthLight: 1 - _UsePreMultiplyAlpha: 0 - _UseRawGrid: 1 - _ZWrite: 1 diff --git a/Meshes/FBX/MoverLight--RTP-SplitMesh-SingleSided.fbx b/Meshes/FBX/MoverLight--RTP-SplitMesh-SingleSided.fbx deleted file mode 100644 index d8ba7bd8c3b1c15affe2ab40b8640111d0b0c6e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 155116 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%0A!QC;mtbBoOOWt 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�>||hnJI1oLW|u{seCa`uWE7LuYV7%h6}qAtXXy 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�M(wMD=Phl_?-iDj=7)|JpEs&R^|t~DIWChS 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 VRStageLighting_AudioLink_Laser[] audioLinkLasers = obj.GetUdonSharpComponentsInChildren(); // VRStageLighting_DMX_Static[] dmxLights = obj.GetUdonSharpComponentsInChildren(); + VRSL_LocalUIControlPanel[] controlPanels = obj.GetUdonSharpComponentsInChildren(); #pragma warning restore 0618 //suppressing obsoletion warnings // if(staticLights != null) // { @@ -791,6 +792,15 @@ namespace VRSL.EditorScripts } } } + + if(controlPanels != null) + { + foreach(VRSL_LocalUIControlPanel panel in controlPanels) + { + panel._CheckDepthLightStatus(); + //Debug.Log("AutoChecking Status"); + } + } // if(animatedLights != null) // { // foreach(VRStageLighting_Animated_Static fixture in animatedLights) diff --git a/Scripts/Other/VRSL_LocalUIControlPanel.asset b/Scripts/Other/VRSL_LocalUIControlPanel.asset index 8256066..4039f6a 100644 --- a/Scripts/Other/VRSL_LocalUIControlPanel.asset +++ b/Scripts/Other/VRSL_LocalUIControlPanel.asset @@ -44,7 +44,7 @@ MonoBehaviour: Data: - Name: Entry: 12 - Data: 38 + Data: 41 - Name: Entry: 7 Data: @@ -1379,19 +1379,19 @@ MonoBehaviour: Data: - Name: $k Entry: 1 - Data: isUsingDMX + Data: volumetricNoiseToggle - Name: $v Entry: 7 Data: 65|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 - Data: isUsingDMX + Data: volumetricNoiseToggle - Name: k__BackingField Entry: 7 Data: 66|System.RuntimeType, mscorlib - Name: Entry: 1 - Data: System.Boolean, mscorlib + Data: UnityEngine.UI.Toggle, UnityEngine.UI - Name: Entry: 8 Data: @@ -1433,19 +1433,25 @@ MonoBehaviour: Data: - Name: $k Entry: 1 - Data: isUsingAudioLink + Data: isUsingDMX - Name: $v Entry: 7 Data: 68|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 - Data: isUsingAudioLink + Data: isUsingDMX - Name: k__BackingField - Entry: 9 - Data: 66 + Entry: 7 + Data: 69|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.Boolean, mscorlib + - Name: + Entry: 8 + Data: - Name: k__BackingField Entry: 9 - Data: 66 + Data: 69 - Name: k__BackingField Entry: 7 Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib @@ -1460,7 +1466,55 @@ MonoBehaviour: Data: true - Name: _fieldAttributes Entry: 7 - Data: 69|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 70|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: isUsingAudioLink + - Name: $v + Entry: 7 + Data: 71|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: isUsingAudioLink + - Name: k__BackingField + Entry: 9 + Data: 69 + - Name: k__BackingField + Entry: 9 + Data: 69 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 72|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -1484,13 +1538,13 @@ MonoBehaviour: Data: DMXMode - Name: $v Entry: 7 - Data: 70|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 73|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: DMXMode - Name: k__BackingField Entry: 7 - Data: 71|System.RuntimeType, mscorlib + Data: 74|System.RuntimeType, mscorlib - Name: Entry: 1 Data: System.Int32, mscorlib @@ -1499,7 +1553,7 @@ MonoBehaviour: Data: - Name: k__BackingField Entry: 9 - Data: 71 + Data: 74 - Name: k__BackingField Entry: 7 Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib @@ -1514,13 +1568,13 @@ MonoBehaviour: Data: true - Name: _fieldAttributes Entry: 7 - Data: 72|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 75|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 3 - Name: Entry: 7 - Data: 73|UnityEngine.SpaceAttribute, UnityEngine.CoreModule + Data: 76|UnityEngine.SpaceAttribute, UnityEngine.CoreModule - Name: height Entry: 4 Data: 10 @@ -1529,7 +1583,7 @@ MonoBehaviour: Data: - Name: Entry: 7 - Data: 74|UnityEngine.HeaderAttribute, UnityEngine.CoreModule + Data: 77|UnityEngine.HeaderAttribute, UnityEngine.CoreModule - Name: header Entry: 1 Data: 0 = Horizontal Mode 1 = Vertical Mode 2 = Legacy Mode @@ -1538,7 +1592,7 @@ MonoBehaviour: Data: - Name: Entry: 7 - Data: 75|UnityEngine.RangeAttribute, UnityEngine.CoreModule + Data: 78|UnityEngine.RangeAttribute, UnityEngine.CoreModule - Name: min Entry: 4 Data: 0 @@ -1568,13 +1622,13 @@ MonoBehaviour: Data: DMX_CRTS_Horizontal - Name: $v Entry: 7 - Data: 76|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 79|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: DMX_CRTS_Horizontal - Name: k__BackingField Entry: 7 - Data: 77|System.RuntimeType, mscorlib + Data: 80|System.RuntimeType, mscorlib - Name: Entry: 1 Data: UnityEngine.CustomRenderTexture[], UnityEngine.CoreModule @@ -1583,7 +1637,7 @@ MonoBehaviour: Data: - Name: k__BackingField Entry: 9 - Data: 77 + Data: 80 - Name: k__BackingField Entry: 7 Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib @@ -1598,13 +1652,13 @@ MonoBehaviour: Data: true - Name: _fieldAttributes Entry: 7 - Data: 78|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 81|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 1 - Name: Entry: 7 - Data: 79|UnityEngine.SpaceAttribute, UnityEngine.CoreModule + Data: 82|UnityEngine.SpaceAttribute, UnityEngine.CoreModule - Name: height Entry: 4 Data: 20 @@ -1631,16 +1685,16 @@ MonoBehaviour: Data: DMX_CRTS_Vertical - Name: $v Entry: 7 - Data: 80|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 83|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: DMX_CRTS_Vertical - Name: k__BackingField Entry: 9 - Data: 77 + Data: 80 - Name: k__BackingField Entry: 9 - Data: 77 + Data: 80 - Name: k__BackingField Entry: 7 Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib @@ -1655,7 +1709,7 @@ MonoBehaviour: Data: true - Name: _fieldAttributes Entry: 7 - Data: 81|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 84|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -1679,16 +1733,16 @@ MonoBehaviour: Data: DMX_CRTS_Legacy - Name: $v Entry: 7 - Data: 82|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 85|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: DMX_CRTS_Legacy - Name: k__BackingField Entry: 9 - Data: 77 + Data: 80 - Name: k__BackingField Entry: 9 - Data: 77 + Data: 80 - Name: k__BackingField Entry: 7 Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib @@ -1703,7 +1757,7 @@ MonoBehaviour: Data: true - Name: _fieldAttributes Entry: 7 - Data: 83|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 86|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -1727,16 +1781,16 @@ MonoBehaviour: Data: AudioLink_CRTs - Name: $v Entry: 7 - Data: 84|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 87|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: AudioLink_CRTs - Name: k__BackingField Entry: 9 - Data: 77 + Data: 80 - Name: k__BackingField Entry: 9 - Data: 77 + Data: 80 - Name: k__BackingField Entry: 7 Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib @@ -1751,7 +1805,7 @@ MonoBehaviour: Data: true - Name: _fieldAttributes Entry: 7 - Data: 85|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 88|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -1773,72 +1827,18 @@ MonoBehaviour: - Name: $k Entry: 1 Data: fixtureGizmos - - Name: $v - Entry: 7 - Data: 86|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - - Name: k__BackingField - Entry: 1 - Data: fixtureGizmos - - Name: k__BackingField - Entry: 9 - Data: 71 - - Name: k__BackingField - Entry: 9 - Data: 71 - - Name: k__BackingField - Entry: 7 - Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib - - Name: - Entry: 6 - Data: - - Name: - Entry: 8 - Data: - - Name: k__BackingField - Entry: 5 - Data: true - - Name: _fieldAttributes - Entry: 7 - Data: 87|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - - Name: - Entry: 12 - Data: 1 - - Name: - Entry: 7 - Data: 88|UnityEngine.HideInInspector, UnityEngine.CoreModule - - Name: - Entry: 8 - Data: - - Name: - Entry: 13 - Data: - - Name: - Entry: 8 - Data: - - Name: - Entry: 8 - Data: - - Name: - Entry: 8 - Data: - - Name: - Entry: 7 - Data: - - Name: $k - Entry: 1 - Data: panRangeTarget - Name: $v Entry: 7 Data: 89|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 - Data: panRangeTarget + Data: fixtureGizmos - Name: k__BackingField Entry: 9 - Data: 55 + Data: 74 - Name: k__BackingField Entry: 9 - Data: 55 + Data: 74 - Name: k__BackingField Entry: 7 Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib @@ -1880,13 +1880,13 @@ MonoBehaviour: Data: - Name: $k Entry: 1 - Data: tiltRangeTarget + Data: panRangeTarget - Name: $v Entry: 7 Data: 92|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 - Data: tiltRangeTarget + Data: panRangeTarget - Name: k__BackingField Entry: 9 Data: 55 @@ -1934,19 +1934,19 @@ MonoBehaviour: Data: - Name: $k Entry: 1 - Data: useLegacyStaticLights + Data: tiltRangeTarget - Name: $v Entry: 7 Data: 95|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 - Data: useLegacyStaticLights + Data: tiltRangeTarget - Name: k__BackingField Entry: 9 - Data: 66 + Data: 55 - Name: k__BackingField Entry: 9 - Data: 66 + Data: 55 - Name: k__BackingField Entry: 7 Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib @@ -1988,19 +1988,19 @@ MonoBehaviour: Data: - Name: $k Entry: 1 - Data: useExtendedUniverses + Data: useLegacyStaticLights - Name: $v Entry: 7 Data: 98|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 - Data: useExtendedUniverses + Data: useLegacyStaticLights - Name: k__BackingField Entry: 9 - Data: 66 + Data: 69 - Name: k__BackingField Entry: 9 - Data: 66 + Data: 69 - Name: k__BackingField Entry: 7 Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib @@ -2016,6 +2016,61 @@ MonoBehaviour: - Name: _fieldAttributes Entry: 7 Data: 99|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 100|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: useExtendedUniverses + - Name: $v + Entry: 7 + Data: 101|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: useExtendedUniverses + - Name: k__BackingField + Entry: 9 + Data: 69 + - Name: k__BackingField + Entry: 9 + Data: 69 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 102|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], + mscorlib - Name: Entry: 12 Data: 0 @@ -2031,6 +2086,128 @@ MonoBehaviour: - Name: Entry: 8 Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: _volumetricNoise + - Name: $v + Entry: 7 + Data: 103|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: _volumetricNoise + - Name: k__BackingField + Entry: 9 + Data: 69 + - Name: k__BackingField + Entry: 9 + Data: 69 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 104|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], + mscorlib + - Name: + Entry: 12 + Data: 2 + - Name: + Entry: 7 + Data: 105|UdonSharp.FieldChangeCallbackAttribute, UdonSharp.Runtime + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 106|UnityEngine.SerializeField, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: _requireDepthLight + - Name: $v + Entry: 7 + Data: 107|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: _requireDepthLight + - Name: k__BackingField + Entry: 9 + Data: 69 + - Name: k__BackingField + Entry: 9 + Data: 69 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 108|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], + mscorlib + - Name: + Entry: 12 + Data: 2 + - Name: + Entry: 7 + Data: 109|UdonSharp.FieldChangeCallbackAttribute, UdonSharp.Runtime + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 110|UnityEngine.SerializeField, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: - Name: Entry: 13 Data: diff --git a/Scripts/Other/VRSL_LocalUIControlPanel.cs b/Scripts/Other/VRSL_LocalUIControlPanel.cs index 3b9ca48..ea57eae 100644 --- a/Scripts/Other/VRSL_LocalUIControlPanel.cs +++ b/Scripts/Other/VRSL_LocalUIControlPanel.cs @@ -41,6 +41,7 @@ namespace VRSL public UnityEngine.UI.Text masterSliderText, fixtureSliderText, volumetricSliderText, projectionSliderText, discoBallSliderText, laserSliderText, bloomSliderText; public float fixtureIntensityMax = 1.0f, volumetricIntensityMax = 1.0f, projectionIntensityMax = 1.0f, discoballIntensityMax = 1.0f, laserIntensityMax = 1.0f; + public UnityEngine.UI.Toggle volumetricNoiseToggle; public bool isUsingDMX = true; public bool isUsingAudioLink = true; [Space(10)] @@ -70,9 +71,40 @@ namespace VRSL public bool useLegacyStaticLights = false; public bool useExtendedUniverses = false; + [FieldChangeCallback(nameof(VolumetricNoise)), SerializeField] + private bool _volumetricNoise = true; + public bool VolumetricNoise + { + set + { + _volumetricNoise = value; + _CheckDepthLightStatus(); + } + get => _volumetricNoise; + } + + [FieldChangeCallback(nameof(RequireDepthLight)), SerializeField] + private bool _requireDepthLight = true; + + public bool RequireDepthLight + { + set + { + _requireDepthLight = value; + _CheckDepthLightStatus(); + _DepthLightStatusReport(); + } + get => _requireDepthLight; + } + + public void OnEnable() + { + _CheckDepthLightStatus(); + } void Start() { + _CheckDepthLightStatus(); _SetFinalIntensity(); _SetFixtureIntensity(); _SetVolumetricIntensity(); @@ -84,6 +116,43 @@ namespace VRSL _CheckkExtendedUniverses(); _ForceUpdateVideoSampleTexture(); } + + public void _Test() + { + Debug.Log("This is a test"); + } + + public void _CheckDepthLightStatus() + { + + foreach(Material mat in volumetricMaterials) + { + mat.SetInt("_PotatoMode", _volumetricNoise ? 0 : 1); + mat.SetInt("_UseDepthLight", _requireDepthLight ? 1 : 0); + SetKeyword(mat, "_USE_DEPTH_LIGHT", (Mathf.FloorToInt(mat.GetInt("_UseDepthLight"))) == 1 ? true : false); + SetKeyword(mat, "_MAGIC_NOISE_ON", (Mathf.FloorToInt(mat.GetInt("_MAGIC_NOISE_ON"))) == 1 ? true : false); + SetKeyword(mat, "_POTATO_MODE_ON", (Mathf.FloorToInt(mat.GetInt("_PotatoMode"))) == 1 ? true : false); + } + foreach(Material mat in projectionMaterials) + { + mat.SetInt("_UseDepthLight", _requireDepthLight ? 1 : 0); + } + foreach(Material mat in fixtureMaterials) + { + mat.SetInt("_UseDepthLight", _requireDepthLight ? 1 : 0); + } + } + void _DepthLightStatusReport() + { + // if(_requireDepthLight) + // { + // Debug.Log("VRSL Control Panel: Enabling Depth Light Requirement"); + // } + // else + // { + // Debug.Log("VRSL Control Panel: Disabling Depth Light Requirement"); + // } + } void EnableCRTS(CustomRenderTexture[] rtArray) { @@ -270,6 +339,18 @@ namespace VRSL bloomSliderText.text = Mathf.Round(bloomSlider.value * 100.0f).ToString(); } } + + void SetKeyword(Material mat, string keyword, bool status) + { + if (status) + { + mat.EnableKeyword(keyword); + } + else + { + mat.DisableKeyword(keyword); + } + } } #if !COMPILER_UDONSHARP && UNITY_EDITOR diff --git a/Shaders/AudioLink/MovingLights/VRSL-AudioLink-StandardMover-VolumetricFrag.cginc b/Shaders/AudioLink/MovingLights/VRSL-AudioLink-StandardMover-VolumetricFrag.cginc index 9ecfb8d..633d68c 100644 --- a/Shaders/AudioLink/MovingLights/VRSL-AudioLink-StandardMover-VolumetricFrag.cginc +++ b/Shaders/AudioLink/MovingLights/VRSL-AudioLink-StandardMover-VolumetricFrag.cginc @@ -9,29 +9,25 @@ inline float CorrectedLinearEyeDepth(float z, float B) #endif return 1.0 / (z/UNITY_MATRIX_P._34 + B); } -float Fresnel(float3 Normal, float3 ViewDir, float Power) -{ - return pow(max(0, dot(normalize(Normal), -ViewDir)), Power); -} - -//3D noise based on iq's https://www.shadertoy.com/view/4sfGzS -//HLSL conversion by Orels1~ -half Noise(float3 p) -{ - float3 i = floor(p); p -= i; - p *= p * (3. - 2. * p); - float2 uv = (p.xy + i.xy + float2(37, 17) * i.z + .5)*0.00390625; - //uv.y *= -1; - float4 uv4 = float4(uv.x, uv.y * -1, 0.0, 0.0); - p.xy = tex2Dlod(_LightMainTex, uv4).yx; - return lerp(p.x, p.y, p.z); -} - -const float3x3 m = float3x3( 0.00, 0.80, 0.60, - -0.80, 0.36, -0.48, - -0.60, -0.48, 0.64 ); - + float Fresnel(float3 Normal, float3 ViewDir, float Power) + { + return pow(max(0, dot(normalize(Normal), -ViewDir)), Power); + } +#ifndef _POTATO_MODE_ON + //3D noise based on iq's https://www.shadertoy.com/view/4sfGzS + //HLSL conversion by Orels1~ + half Noise(float3 p) + { + float3 i = floor(p); p -= i; + p *= p * (3. - 2. * p); + float2 uv = (p.xy + i.xy + float2(37, 17) * i.z + .5)*0.00390625; + //uv.y *= -1; + float4 uv4 = float4(uv.x, uv.y * -1, 0.0, 0.0); + p.xy = tex2Dlod(_LightMainTex, uv4).yx; + return lerp(p.x, p.y, p.z); + } +#endif float4 VolumetricLightingBRDF(v2f i, fixed facePos) { @@ -67,9 +63,6 @@ float4 VolumetricLightingBRDF(v2f i, fixed facePos) #endif half widthNormalized = i.coneWidth/5.5; - //not sure why this was here... Keeping it just in case... it shouldn't do anything technically. - // i.uv.x = saturate(i.uv.x); - // i.uv.y = saturate(i.uv.y); //Get gobo selection! Getting this in vertex shader seems to cause weird artifacting for some reason! @@ -85,26 +78,35 @@ float4 VolumetricLightingBRDF(v2f i, fixed facePos) wpos.z = unity_CameraToWorld[2][3]; //Get Gobo Spin speed information - float goboSpinSpeed = IF(checkPanInvertY() == 1, -getGoboSpinSpeed(), getGoboSpinSpeed()); + //float goboSpinSpeed = IF(checkPanInvertY() == 1, -getGoboSpinSpeed(), getGoboSpinSpeed()); + float goboSpinSpeed = checkPanInvertY() == 1 ? -getGoboSpinSpeed() : getGoboSpinSpeed(); float spinSpeed = UNITY_ACCESS_INSTANCED_PROP(Props,_EnableSpin); //CREDIT TO DJ LUKIS FOR MIRROR DEPTH CORRECTION //Get Screen Pos UVs - float perspectiveDivide = 1.0f / i.pos.w; - float4 direction = i.worldDirection * perspectiveDivide; - float2 screenUV = i.screenPos.xy / i.screenPos.w; - //Sampling Depth - float depth = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, screenUV); - //Correct for mirrors as Eye Depth - depth = CorrectedLinearEyeDepth(depth, direction.w); - //Convert to Raw Depth - depth = (1.0 - (depth * _ZBufferParams.w)) / (depth * _ZBufferParams.z); - //Convert to Linear01 Deppth - depth = Linear01Depth(depth); + #ifdef _USE_DEPTH_LIGHT + float perspectiveDivide = 1.0f / i.pos.w; + float4 direction = i.worldDirection * perspectiveDivide; + float2 screenUV = i.screenPos.xy / i.screenPos.w; + //Sampling Depth + float depth = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, screenUV); + //Correct for mirrors as Eye Depth + depth = CorrectedLinearEyeDepth(depth, direction.w); + //Convert to Raw Depth + depth = (1.0 - (depth * _ZBufferParams.w)) / (depth * _ZBufferParams.z); + //Convert to Linear01 Deppth + depth = Linear01Depth(depth); + + //Attempt to fade cone away when intersecting with another object + float intersectionFade = saturate(((depth * _ProjectionParams.z) - i.screenPos.w)); + intersectionFade = lerp(1, intersectionFade, saturate(i.uv.x * _FadeAmt)); + #else + float intersectionFade = 1.0; + #endif + + + - //Attempt to fade cone away when intersecting with another object - float intersectionFade = saturate(((depth * _ProjectionParams.z) - i.screenPos.w)); - intersectionFade = lerp(1, intersectionFade, saturate(i.uv.x * _FadeAmt)); //Attempt to fade cone away when intersecting with the camera. //Starts to fade about 1 meter away(x/1). increase divisor to increase distance @@ -121,13 +123,13 @@ float4 VolumetricLightingBRDF(v2f i, fixed facePos) //Generate gradient for cone. // #ifndef WASH - half grad = gobo > 1 ? _GradientModGOBO * 0.6f : _GradientMod * 0.8f; + + #ifndef _POTATO_MODE_ON + half grad = gobo > 1 ? _GradientModGOBO * 0.6f : _GradientMod * 0.8f; + #else + half grad = gobo > 1 ? _GradientModGOBO * 0.95f : _GradientMod * 0.8f; + #endif fixed gradientTexture = saturate((pow(-uvMap.x + 1, grad))); - //fixed gradientTexture = saturate((pow(-uvMap.x + 1, 2.25))); - // #else - // float camFadeMod = saturate(1/(i.camAngleLen.y)); - // fixed gradientTexture = saturate((pow(-uvMap.x + 1, lerp(2.25, 2.25+(getConeWidth()),camFadeMod)))); - // #endif fixed4 col = gradientTexture.r; //Calculate View Direction for fading edges. @@ -160,69 +162,76 @@ float4 VolumetricLightingBRDF(v2f i, fixed facePos) //Combine Gradient with emission color, intersection fade and camera fade. col = col * emissionTint * cameraFade; //return cameraFade; + #ifndef _POTATO_MODE_ON + //Generate 2D noise texture, add scroll effect, and map to cone. + float2 texUV = i.uv2; + texUV.x = texUV.x + (_Time.y*0.1) * 0.75; + texUV.y = texUV.y + (_Time.y*0.1) * 0.1; + #if !defined(WASH) + float4 tex = tex2D(_NoiseTex, texUV); + #else + float4 tex = float4(1,1,1,1); + #endif - //Generate 2D noise texture, add scroll effect, and map to cone. - float2 texUV = i.uv2; - texUV.x = texUV.x + (_Time.y*0.1) * 0.75; - texUV.y = texUV.y + (_Time.y*0.1) * 0.1; - #if !defined(WASH) - float4 tex = tex2D(_NoiseTex, texUV); - #else - float4 tex = float4(1,1,1,1); - #endif - - //initialize 3D noise value and 2D noise strength value - float threeDNoise = 1.0; - half np = 0.0; - - - //If we are using 3D noise... - if(_ToggleMagicNoise > 0) - { - //Get vertex/frag position in worldspace - float3 worldposNoise = i.worldPos.xyz; - //Add Scrolling effect - worldposNoise.x += ((_Time.y*0.1) * _Noise2X); - worldposNoise.y += ((_Time.y*0.1) * _Noise2Y); - worldposNoise.z += ((_Time.y*0.1) * _Noise2Z); - //Add Tiling effect - float3 q = noiseScaleThreeD * worldposNoise.xyz; - - //Use IQ's noise calculation equation to calculate 3D noise in world space. - //Currently only sampling the noise twice as sampling anymore isn't creating any visible improvements. - threeDNoise = 0.5000*Noise( q ); - q = mul(m,q)*2.01; - threeDNoise += 0.2500*Noise( q ); - // q = mul(m,q)*2.02; - // threeDNoise += 0.1250*Noise( q ); - // q = mul(m,q)*2.03; - // threeDNoise += 0.0625*Noise( q ); - // q = mul(m,q)*2.01; + //initialize 3D noise value and 2D noise strength value + float threeDNoise = 1.0; + half np = 0.0; - //If we aren't using gobos, remove the 2D noise effect - np = gobo > 1 ? _NoisePower : 0.0; - //Set 3D Noise Power - #ifndef WASH - float newNP = lerp(_Noise2Power - 0.2, _Noise2Power, gradientTexture.r); - threeDNoise = lerp(1, threeDNoise, newNP); - #else - threeDNoise = lerp(1, threeDNoise, _Noise2Power); - #endif - } - //If we aren't using 3D noise.. - else - { - //If we are using gobos, add another 0.2 to the 2D noise power strength. - #ifndef WASH - np = gobo > 1 ? clamp(0,1,_NoisePower + 0.2) : _NoisePower; - #else - //tex = tex2D(_NoiseTex, texUV); - np = _NoisePower; - #endif - } - //Mix 2D noise Power - tex = lerp(fixed4(1, 1, 1, 1), tex, np); + //If we are using 3D noise... + #ifdef _MAGIC_NOISE_ON + //if(_ToggleMagicNoise > 0) + //{ + //Get vertex/frag position in worldspace + float3 worldposNoise = i.worldPos.xyz; + //Add Scrolling effect + worldposNoise.x += ((_Time.y*0.1) * _Noise2X); + worldposNoise.y += ((_Time.y*0.1) * _Noise2Y); + worldposNoise.z += ((_Time.y*0.1) * _Noise2Z); + //Add Tiling effect + float3 q = noiseScaleThreeD * worldposNoise.xyz; + + //Use IQ's noise calculation equation to calculate 3D noise in world space. + //Currently only sampling the noise twice as sampling anymore isn't creating any visible improvements. + threeDNoise = 0.5000*Noise( q ); + // q = mul(float3x3( 0.00000, 0.80000, 0.60000, + // -0.80000, 0.36000, -0.48000, + // -0.60000, -0.48000, 0.64000),q)*2.01; + // //q = q * m; + // threeDNoise += 0.2500*Noise( q ); + // q = mul(m,q)*2.02; + // threeDNoise += 0.1250*Noise( q ); + // q = mul(m,q)*2.03; + // threeDNoise += 0.0625*Noise( q ); + // q = mul(m,q)*2.01; + + //If we aren't using gobos, remove the 2D noise effect + np = gobo > 1 ? _NoisePower : 0.0; + //Set 3D Noise Power + #ifndef WASH + float newNP = lerp(_Noise2Power - 0.2, _Noise2Power, gradientTexture.r); + threeDNoise = lerp(1, threeDNoise, newNP); + #else + threeDNoise = lerp(1, threeDNoise, _Noise2Power); + #endif + //} + //If we aren't using 3D noise.. + #else + //else + //{ + //If we are using gobos, add another 0.2 to the 2D noise power strength. + #ifndef WASH + np = gobo > 1 ? clamp(0,1,_NoisePower + 0.2) : _NoisePower; + #else + np = _NoisePower; + #endif + //} + #endif + + //Mix 2D noise Power + tex = lerp(fixed4(1, 1, 1, 1), tex, np); + + #endif //Find Greyscale value of cone. float3 newCol = (col.r + col.g + col.b)/3; @@ -235,12 +244,14 @@ float4 VolumetricLightingBRDF(v2f i, fixed facePos) } //float satMod = gobo > 1 ? 5.0 : 0.0; - newCol.xyz = lerp(col.xyz,newCol * 5, saturate(pow(saturate(gradientTexture - 0.25), _SaturationLength - satMod)) * tex.r); + #ifndef _POTATO_MODE_ON + newCol.xyz = lerp(col.xyz,newCol * 5, saturate(pow(saturate(gradientTexture - 0.25), _SaturationLength - satMod)) * tex.r); + #else + newCol.xyz = lerp(col.xyz,newCol * 5, saturate(pow(saturate(gradientTexture - 0.25), _SaturationLength - satMod))); + #endif col.xyz = lerp(col.xyz, newCol.xyz, _Saturation); //Mix in blinding effect. - // col*= ((i.blindingEffect * (i.blindingEffect * 0.25))); - //col*= ((i.blindingEffect)); col = lerp(col, col*i.blindingEffect * i.blindingEffect * 10, gradientTexture); //col*=6.0; col = lerp(col, fixed4(0,0,0,0), saturate(pow(i.uv.x,.5))); @@ -251,7 +262,8 @@ float4 VolumetricLightingBRDF(v2f i, fixed facePos) //Choose split strength and pattern based on information in i.stripeinfo. float splitter = (sin(i.uv.y * pi * floor(i.stripeInfo.x) * 2 + (_Time.w * spinSpeed)) + 1.0); //Do not use beam splitting if we aren't using gobos. - float splitstr = IF(_GoboBeamSplitEnable == 1 && gobo > 1, i.stripeInfo.y, 0); + //float splitstr = IF(_GoboBeamSplitEnable == 1 && gobo > 1, i.stripeInfo.y, 0); + float splitstr = _GoboBeamSplitEnable == 1 && gobo > 1 ? i.stripeInfo.y : 0; splitter = lerp(1.0, splitter, splitstr); #else float splitter = 1.0; @@ -259,9 +271,14 @@ float4 VolumetricLightingBRDF(v2f i, fixed facePos) //Mix in 2D noise, beam splitting, and 3D noise. - col *= tex; + #ifndef _POTATO_MODE_ON + col *= tex; + col *= threeDNoise; + #else + col *= 0.35; + #endif col *= splitter; - col *= threeDNoise; + //Add more power to Inner side of cone float4 result = col; diff --git a/Shaders/AudioLink/MovingLights/VRSL-AudioLink-StandardMover-VolumetricMesh.shader b/Shaders/AudioLink/MovingLights/VRSL-AudioLink-StandardMover-VolumetricMesh.shader index 4adfbda..00f4e3c 100644 --- a/Shaders/AudioLink/MovingLights/VRSL-AudioLink-StandardMover-VolumetricMesh.shader +++ b/Shaders/AudioLink/MovingLights/VRSL-AudioLink-StandardMover-VolumetricMesh.shader @@ -61,7 +61,7 @@ _NoiseTex ("NoiseTex", 2D) = "white" {} _NoisePower("Noise Strength", Range(0, 1)) = 1 _NoiseSeed ("Noise Seed", float) = 0 - [Toggle]_ToggleMagicNoise ("Toggle Magic Noise", Int) = 1 + [ToggleUI]_MAGIC_NOISE_ON ("Toggle Magic Noise", Int) = 1 //_ThreeDNoiseScaleInside ("Inside Magic Noise Scale", Range(-10, 10)) = 1 _Noise2Stretch ("Outside Magic Noise Scale", Range(-10, 10)) = 1 _Noise2StretchInside ("Inside Magic Noise Scale", Range(-10, 10)) = 1 @@ -101,6 +101,9 @@ _GradientMod ("Gradient Modifier", Range(1, 4)) = 2.25 _GradientModGOBO ("Gradient Modifier GOBO", Range(1, 4)) = 2.25 + [Toggle]_UseDepthLight("Toggle The Requirement of the depth light to function.", Int) = 1 + [Toggle]_PotatoMode("Reduces the overhead on the fragment shader by removing both noise components to extra texture sampling", Int) = 0 + //[Space(16)] @@ -135,13 +138,16 @@ #pragma vertex vert #pragma fragment frag //#pragma multi_compile_fog + #pragma shader_feature_local _MAGIC_NOISE_ON + #pragma shader_feature_local _USE_DEPTH_LIGHT + #pragma shader_feature_local _POTATO_MODE_ON #pragma multi_compile_instancing #pragma instancing_options assumeuniformscaling #define VOLUMETRIC_YES //To identify the pass in the vert/frag - + + #include "UnityCG.cginc" #include "../Shared/VRSL-AudioLink-Defines.cginc" //Property Defines are here - float3 thisIsAChange; #include "../Shared/VRSL-AudioLink-Functions.cginc" //Custom Functions struct appdata diff --git a/Shaders/AudioLink/MovingLights/VRSL-AudioLink-WashMover-VolumetricMesh.shader b/Shaders/AudioLink/MovingLights/VRSL-AudioLink-WashMover-VolumetricMesh.shader index d3e3d3f..1ee0a96 100644 --- a/Shaders/AudioLink/MovingLights/VRSL-AudioLink-WashMover-VolumetricMesh.shader +++ b/Shaders/AudioLink/MovingLights/VRSL-AudioLink-WashMover-VolumetricMesh.shader @@ -61,7 +61,7 @@ _NoiseTex ("NoiseTex", 2D) = "white" {} _NoisePower("Noise Strength", Range(0, 1)) = 1 _NoiseSeed ("Noise Seed", float) = 0 - [Toggle]_ToggleMagicNoise ("Toggle Magic Noise", Int) = 1 + [ToggleUI]_MAGIC_NOISE_ON ("Toggle Magic Noise", Int) = 1 //_ThreeDNoiseScaleInside ("Inside Magic Noise Scale", Range(-10, 10)) = 1 _Noise2Stretch ("Outside Magic Noise Scale", Range(-10, 10)) = 1 _Noise2StretchInside ("Inside Magic Noise Scale", Range(-10, 10)) = 1 @@ -101,6 +101,9 @@ _GradientMod ("Gradient Modifier", Range(1, 4)) = 2.25 _GradientModGOBO ("Gradient Modifier GOBO", Range(1, 4)) = 2.25 + [Toggle]_UseDepthLight("Toggle The Requirement of the depth light to function.", Int) = 1 + [Toggle]_PotatoMode("Reduces the overhead on the fragment shader by removing both noise components to extra texture sampling", Int) = 0 + //[Space(16)] @@ -139,9 +142,11 @@ #define VOLUMETRIC_YES //To identify the pass in the vert/frag #define WASH + #pragma shader_feature_local _MAGIC_NOISE_ON + #pragma shader_feature_local _USE_DEPTH_LIGHT + #pragma shader_feature_local _POTATO_MODE_ON #include "UnityCG.cginc" #include "../Shared/VRSL-AudioLink-Defines.cginc" //Property Defines are here - float3 thisIsAChange; #include "../Shared/VRSL-AudioLink-Functions.cginc" //Custom Functions struct appdata diff --git a/Shaders/AudioLink/Shared/VRSL-AudioLink-Defines.cginc b/Shaders/AudioLink/Shared/VRSL-AudioLink-Defines.cginc index 63442fd..cdb90fb 100644 --- a/Shaders/AudioLink/Shared/VRSL-AudioLink-Defines.cginc +++ b/Shaders/AudioLink/Shared/VRSL-AudioLink-Defines.cginc @@ -38,7 +38,7 @@ float4x4 _viewToWorld; #endif float4 _NoiseTex_ST; float _NoisePower, _NoiseSeed, _Noise2X, _Noise2Y, _Noise2Z, _Noise2Power, _Noise2StretchInside; -uint _ToggleMagicNoise; +//int _MAGIC_NOISE_ON; float _SpecularLMOcclusion; float _SpecLMOcclusionAdjust; @@ -60,7 +60,7 @@ float _ProjectionIntensity; float _ProjectionRange; float4 _ProjectionRangeOrigin; float _ProjectionFade, _ProjectionFadeCurve, _ProjectionDistanceFallOff; -uint _GoboBeamSplitEnable; +uint _GoboBeamSplitEnable, _UseDepthLight; half _GradientMod, _GradientModGOBO; diff --git a/Shaders/AudioLink/StaticLights/VRSL-AudioLink-StaticLight-LensFlare.shader b/Shaders/AudioLink/StaticLights/VRSL-AudioLink-StaticLight-LensFlare.shader index 5ca50a2..0842d8f 100644 --- a/Shaders/AudioLink/StaticLights/VRSL-AudioLink-StaticLight-LensFlare.shader +++ b/Shaders/AudioLink/StaticLights/VRSL-AudioLink-StaticLight-LensFlare.shader @@ -48,6 +48,8 @@ // [Toggle]_ShouldDoFlicker("ShouldDoFlicker", FLoat) = 1 // _FlickerAnimSpeed("FlickerAnimSpeed", Float) = 5 // _FlickResultIntensityLowestPoint("FlickResultIntensityLowestPoint", range(0,1)) = 0.5 + + [Toggle]_UseDepthLight("Toggle The Requirement of the depth light to function.", Int) = 1 } SubShader { @@ -201,26 +203,6 @@ o.uv = TRANSFORM_TEX(v.uv, _MainTex); o.color = v.color * e; - - // float2 scaleXY_WS = float2( - // length(float3(unity_ObjectToWorld[0].x, unity_ObjectToWorld[1].x, unity_ObjectToWorld[2].x)), // scale x axis - // length(float3(unity_ObjectToWorld[0].y, unity_ObjectToWorld[1].y, unity_ObjectToWorld[2].y)) // scale y axis // scale z axis - // ); - - // float4 world_origin = mul(UNITY_MATRIX_M, float4(0,0,0,1)); - // float4 view_origin = float4(UnityObjectToViewPos(float3(0,0,0)),1); - - // float scale = (_ScaleFactor * (length(view_origin)/_ReferenceDistance)) + (1 - _ScaleFactor); - - - - // float4 worldPos = mul(UNITY_MATRIX_M, float4(scale, scale, scale, 1) * v.vertex); - // float4 flippedWorldPos = float4(-1,1,-1,1) * (worldPos - world_origin) + world_origin; - // //float4 viewPos = mul(UNITY_MATRIX_V, worldPos); - // float4 viewPos = flippedWorldPos - world_origin + view_origin; - // viewPos = float4(viewPos.x, viewPos.y, viewPos.z, viewPos.w); - // float4 clipPos = mul(UNITY_MATRIX_P, viewPos); - // o.vertex = clipPos; float3 quadPivotPosOS = float3(0,0,0); float3 quadPivotPosWS = TransformObjectToWorld(quadPivotPosOS); float3 quadPivotPosVS = TransformWorldToView(quadPivotPosWS); @@ -253,52 +235,55 @@ //Test for n*n grid in view space, where quad pivot is grid's center. //For each iteration, //if that test point passed the scene depth occlusion test, we add 1 to visibilityTestPassedCount - for(int x = -COUNT; x <= COUNT; x++) + if(_UseDepthLight) { - for(int y = -COUNT; y <= COUNT ; y++) + for(int x = -COUNT; x <= COUNT; x++) { - float3 testPosVS = quadPivotPosVS; - testPosVS.xy += float2(x,y) * maxSingleAxisOffset;//add 2D test grid offset, in const view space unit - float4 PivotPosCS = mul(UNITY_MATRIX_P,float4(testPosVS,1)); - float4 PivotScreenPos = ComputeScreenPos(PivotPosCS); - float2 screenUV = PivotScreenPos.xy/PivotScreenPos.w; + for(int y = -COUNT; y <= COUNT ; y++) + { + float3 testPosVS = quadPivotPosVS; + testPosVS.xy += float2(x,y) * maxSingleAxisOffset;//add 2D test grid offset, in const view space unit + float4 PivotPosCS = mul(UNITY_MATRIX_P,float4(testPosVS,1)); + float4 PivotScreenPos = ComputeScreenPos(PivotPosCS); + float2 screenUV = PivotScreenPos.xy/PivotScreenPos.w; - //if screenUV out of bound, treat it as occluded, because no correct depth texture data can be used to compare - if(screenUV.x > 1 || screenUV.x < 0 || screenUV.y > 1 || screenUV.y < 0) - continue; //exit means occluded + //if screenUV out of bound, treat it as occluded, because no correct depth texture data can be used to compare + if(screenUV.x > 1 || screenUV.x < 0 || screenUV.y > 1 || screenUV.y < 0) + continue; //exit means occluded - //we don't have tex2D() in vertex shader, because rasterization is not done by GPU, so we use tex2Dlod() with mip0 instead - float4 ssd = SAMPLE_DEPTH_TEXTURE_LOD(_CameraDepthTexture, float4(screenUV, 0.0, 0.0));//(uv.x,uv.y,0,mipLevel) - float sampledSceneDepth = ssd.x; - float linearEyeDepthFromSceneDepthTexture = LinearEyeDepth(sampledSceneDepth); - float linearEyeDepthFromSelfALU = PivotPosCS.w; //clip space .w is view space z, = linear eye depth + //we don't have tex2D() in vertex shader, because rasterization is not done by GPU, so we use tex2Dlod() with mip0 instead + float4 ssd = SAMPLE_DEPTH_TEXTURE_LOD(_CameraDepthTexture, float4(screenUV, 0.0, 0.0));//(uv.x,uv.y,0,mipLevel) + float sampledSceneDepth = ssd.x; + float linearEyeDepthFromSceneDepthTexture = LinearEyeDepth(sampledSceneDepth); + float linearEyeDepthFromSelfALU = PivotPosCS.w; //clip space .w is view space z, = linear eye depth - //do the actual depth comparision test - //+1 means flare test point is visible in screen space - //+0 means flare test point blocked by other objects in screen space, not visible - visibilityTestPassedCount += linearEyeDepthFromSelfALU + _DepthOcclusionTestZBias < linearEyeDepthFromSceneDepthTexture ? 1 : 0; + //do the actual depth comparision test + //+1 means flare test point is visible in screen space + //+0 means flare test point blocked by other objects in screen space, not visible + visibilityTestPassedCount += linearEyeDepthFromSelfALU + _DepthOcclusionTestZBias < linearEyeDepthFromSceneDepthTexture ? 1 : 0; + } } + float visibilityResult01 = visibilityTestPassedCount * divider;//0~100% visiblility result + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //if camera too close to flare , smooth fade out to prevent flare blocking camera too much (usually for fps games) + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + visibilityResult01 *= smoothstep(_StartFadeinDistanceWorldUnit,_EndFadeinDistanceWorldUnit,linearEyeDepthOfFlarePivot); + + // if(_ShouldDoFlicker) + // { + // float flickerMul = 0; + // //TODO: expose more control to noise? (send me an issue in GitHub, if anyone need this) + // flickerMul += saturate(sin(_Time.y * _FlickerAnimSpeed * 1.0000)) * (1-_FlickResultIntensityLowestPoint) + _FlickResultIntensityLowestPoint; + // flickerMul += saturate(sin(_Time.y * _FlickerAnimSpeed * 0.6437)) * (1-_FlickResultIntensityLowestPoint) + _FlickResultIntensityLowestPoint; + // visibilityResult01 *= saturate(flickerMul/2); + // } + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //apply all combinations(visibilityResult01) to vertex color + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + o.color.a *= visibilityResult01; + o.vertex = visibilityResult01 < divider ? 0 : o.vertex; } - float visibilityResult01 = visibilityTestPassedCount * divider;//0~100% visiblility result - - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //if camera too close to flare , smooth fade out to prevent flare blocking camera too much (usually for fps games) - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - visibilityResult01 *= smoothstep(_StartFadeinDistanceWorldUnit,_EndFadeinDistanceWorldUnit,linearEyeDepthOfFlarePivot); - - // if(_ShouldDoFlicker) - // { - // float flickerMul = 0; - // //TODO: expose more control to noise? (send me an issue in GitHub, if anyone need this) - // flickerMul += saturate(sin(_Time.y * _FlickerAnimSpeed * 1.0000)) * (1-_FlickResultIntensityLowestPoint) + _FlickResultIntensityLowestPoint; - // flickerMul += saturate(sin(_Time.y * _FlickerAnimSpeed * 0.6437)) * (1-_FlickResultIntensityLowestPoint) + _FlickResultIntensityLowestPoint; - // visibilityResult01 *= saturate(flickerMul/2); - // } - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //apply all combinations(visibilityResult01) to vertex color - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - o.color.a *= visibilityResult01; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //premultiply alpha to rgb after alpha's calculation is done ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -311,7 +296,7 @@ //invalid this vertex (and all connected vertices). //This 100% early exit at clipping stage will prevent any rasterization & fragment shader cost at all ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - o.vertex = visibilityResult01 < divider ? 0 : o.vertex; + float3 hsvFC = RGB2HSV(o.color.xyz); @@ -321,42 +306,14 @@ float satMask = lerp(1, 0, pow(distance(half2(0.5, 0.5), o.uv), _ColorSat)); o.color = lerp(o.color, e2, satMask); - - - - // UNITY_TRANSFER_FOG(o,o.vertex); return o; } - - - - fixed4 frag (v2f i) : SV_Target { - // float2 screenposUV = i.screenPos.xy / i.screenPos.w; - // //CREDIT TO DJ LUKIS FOR MIRROR DEPTH CORRECTION - // float perspectiveDivide = 1.0f / i.vertex.w; - // float4 depthdirect = i.worldDirection * perspectiveDivide; - // float sceneZ = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, screenposUV); - // #if UNITY_REVERSED_Z - // if (sceneZ == 0) - // #else - // if (sceneZ == 1) - // #endif - // return float4(0,0,0,1); - // float depth = CorrectedLinearEyeDepth(sceneZ, depthdirect.w); - // //Convert from Corrected Linear Eye Depth to Linear01Depth - // //Credit: https://www.cyanilux.com/tutorials/depth/#eye-depth - // depth = (1.0 - (depth * _ZBufferParams.w)) / (depth * _ZBufferParams.z); - // depth = Linear01Depth(depth); fixed4 col = saturate(tex2D(_MainTex, i.uv )-_RemoveTextureArtifact) * i.color; - // float2 p = i.uv * 2.0 - 1.0; - // col *= (lerp(1, 0, abs(p.x))) * (lerp(1, 0, abs(p.y))); - // apply fog - UNITY_APPLY_FOG(i.fogCoord, col); - + UNITY_APPLY_FOG(i.fogCoord, col); col *= i.maskX; return col; } diff --git a/Shaders/Basic Surface Shaders/Legacy Mode/VRSL-DMX-Static-DiscoBall-L-1CH.prefab b/Shaders/Basic Surface Shaders/Legacy Mode/VRSL-DMX-Static-DiscoBall-L-1CH.prefab index 72f250c..46f50c5 100644 --- a/Shaders/Basic Surface Shaders/Legacy Mode/VRSL-DMX-Static-DiscoBall-L-1CH.prefab +++ b/Shaders/Basic Surface Shaders/Legacy Mode/VRSL-DMX-Static-DiscoBall-L-1CH.prefab @@ -95,7 +95,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: serializationData: - SerializedFormat: 2 + SerializedFormat: 0 SerializedBytes: ReferencedUnityObjects: [] SerializedBytesString: @@ -153,7 +153,8 @@ MonoBehaviour: AllowCollisionOwnershipTransfer: 0 Reliable: 1 _syncMethod: 3 - serializedProgramAsset: {fileID: 0} + serializedProgramAsset: {fileID: 11400000, guid: 73c0c1abc14a568409919c82ce7846d0, + type: 2} programSource: {fileID: 11400000, guid: ef420e90c9d72084fb6b3f2fbc441821, type: 2} serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABh0AAAAAAAAAAi8CAAAAAUsAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBCAG8AbwBsAGUAYQBuACwAIABtAHMAYwBvAHIAbABpAGIAXQBdACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgACAAAABgIAAAAAAAAAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwB0AHIAaQBuAGcALAAgAG0AcwBjAG8AcgBsAGkAYgAnAQoAAABTAHkAbQBiAG8AbABOAGEAbQBlAAERAAAAZQBuAGEAYgBsAGUARABNAFgAQwBoAGEAbgBuAGUAbABzACcBBAAAAHQAeQBwAGUAARgAAABTAHkAcwB0AGUAbQAuAEIAbwBvAGwAZQBhAG4ALAAgAG0AcwBjAG8AcgBsAGkAYgArAQUAAABWAGEAbAB1AGUAAQcFAi8DAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAMAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQYAAABzAGUAYwB0AG8AcgAnAQQAAAB0AHkAcABlAAEWAAAAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgAXAQUAAABWAGEAbAB1AGUAAAAAAAcFAi8EAAAAAUoAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBTAGkAbgBnAGwAZQAsACAAbQBzAGMAbwByAGwAaQBiAF0AXQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ABAAAAAYCAAAAAAAAACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAdAByAGkAbgBnACwAIABtAHMAYwBvAHIAbABpAGIAJwEKAAAAUwB5AG0AYgBvAGwATgBhAG0AZQABDwAAAGcAbABvAGIAYQBsAEkAbgB0AGUAbgBzAGkAdAB5ACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAaQBuAGcAbABlACwAIABtAHMAYwBvAHIAbABpAGIAHwEFAAAAVgBhAGwAdQBlAAAAgD8HBQIwBAAAAAUAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQ4AAABmAGkAbgBhAGwASQBuAHQAZQBuAHMAaQB0AHkAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwBpAG4AZwBsAGUALAAgAG0AcwBjAG8AcgBsAGkAYgAfAQUAAABWAGEAbAB1AGUAAACAPwcFAi8FAAAAAVwAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAVQBuAGkAdAB5AEUAbgBnAGkAbgBlAC4AQwBvAGwAbwByACwAIABVAG4AaQB0AHkARQBuAGcAaQBuAGUALgBDAG8AcgBlAE0AbwBkAHUAbABlAF0AXQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ABgAAAAYCAAAAAAAAACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAdAByAGkAbgBnACwAIABtAHMAYwBvAHIAbABpAGIAJwEKAAAAUwB5AG0AYgBvAGwATgBhAG0AZQABDgAAAGwAaQBnAGgAdABDAG8AbABvAHIAVABpAG4AdAAnAQQAAAB0AHkAcABlAAEpAAAAVQBuAGkAdAB5AEUAbgBnAGkAbgBlAC4AQwBvAGwAbwByACwAIABVAG4AaQB0AHkARQBuAGcAaQBuAGUALgBDAG8AcgBlAE0AbwBkAHUAbABlAAMBBQAAAFYAYQBsAHUAZQAvBgAAAAEpAAAAVQBuAGkAdAB5AEUAbgBnAGkAbgBlAC4AQwBvAGwAbwByACwAIABVAG4AaQB0AHkARQBuAGcAaQBuAGUALgBDAG8AcgBlAE0AbwBkAHUAbABlACAAAABAIAAAAEAgAAAAQCAAAABABQcFAjACAAAABwAAAAYCAAAAAAAAACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAdAByAGkAbgBnACwAIABtAHMAYwBvAHIAbABpAGIAJwEKAAAAUwB5AG0AYgBvAGwATgBhAG0AZQABCQAAAGkAbgB2AGUAcgB0AFAAYQBuACcBBAAAAHQAeQBwAGUAARgAAABTAHkAcwB0AGUAbQAuAEIAbwBvAGwAZQBhAG4ALAAgAG0AcwBjAG8AcgBsAGkAYgArAQUAAABWAGEAbAB1AGUAAAcFAjACAAAACAAAAAYCAAAAAAAAACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAdAByAGkAbgBnACwAIABtAHMAYwBvAHIAbABpAGIAJwEKAAAAUwB5AG0AYgBvAGwATgBhAG0AZQABCgAAAGkAbgB2AGUAcgB0AFQAaQBsAHQAJwEEAAAAdAB5AHAAZQABGAAAAFMAeQBzAHQAZQBtAC4AQgBvAG8AbABlAGEAbgAsACAAbQBzAGMAbwByAGwAaQBiACsBBQAAAFYAYQBsAHUAZQAABwUCMAIAAAAJAAAABgIAAAAAAAAAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwB0AHIAaQBuAGcALAAgAG0AcwBjAG8AcgBsAGkAYgAnAQoAAABTAHkAbQBiAG8AbABOAGEAbQBlAAEMAAAAaQBzAFUAcABzAGkAZABlAEQAbwB3AG4AJwEEAAAAdAB5AHAAZQABGAAAAFMAeQBzAHQAZQBtAC4AQgBvAG8AbABlAGEAbgAsACAAbQBzAGMAbwByAGwAaQBiACsBBQAAAFYAYQBsAHUAZQAABwUCMAIAAAAKAAAABgIAAAAAAAAAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwB0AHIAaQBuAGcALAAgAG0AcwBjAG8AcgBsAGkAYgAnAQoAAABTAHkAbQBiAG8AbABOAGEAbQBlAAEMAAAAZgBvAGwAbABvAHcAVABhAHIAZwBlAHQAJwEEAAAAdAB5AHAAZQABGAAAAFMAeQBzAHQAZQBtAC4AQgBvAG8AbABlAGEAbgAsACAAbQBzAGMAbwByAGwAaQBiACsBBQAAAFYAYQBsAHUAZQAABwUCMAQAAAALAAAABgIAAAAAAAAAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwB0AHIAaQBuAGcALAAgAG0AcwBjAG8AcgBsAGkAYgAnAQoAAABTAHkAbQBiAG8AbABOAGEAbQBlAAEVAAAAdABhAHIAZwBlAHQARgBvAGwAbABvAHcATABlAHIAcABTAHAAZQBlAGQAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwBpAG4AZwBsAGUALAAgAG0AcwBjAG8AcgBsAGkAYgAfAQUAAABWAGEAbAB1AGUAAACgQQcFAi8HAAAAAV4AAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAVQBuAGkAdAB5AEUAbgBnAGkAbgBlAC4AVgBlAGMAdABvAHIAMwAsACAAVQBuAGkAdAB5AEUAbgBnAGkAbgBlAC4AQwBvAHIAZQBNAG8AZAB1AGwAZQBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAwAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQwAAAB0AGEAcgBnAGUAdABPAGYAZgBzAGUAdAAnAQQAAAB0AHkAcABlAAErAAAAVQBuAGkAdAB5AEUAbgBnAGkAbgBlAC4AVgBlAGMAdABvAHIAMwAsACAAVQBuAGkAdAB5AEUAbgBnAGkAbgBlAC4AQwBvAHIAZQBNAG8AZAB1AGwAZQADAQUAAABWAGEAbAB1AGUALwgAAAABKwAAAFUAbgBpAHQAeQBFAG4AZwBpAG4AZQAuAFYAZQBjAHQAbwByADMALAAgAFUAbgBpAHQAeQBFAG4AZwBpAG4AZQAuAEMAbwByAGUATQBvAGQAdQBsAGUAIAAAAAAgAAAAACAAAAAABQcFAjACAAAADQAAAAYCAAAAAAAAACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAdAByAGkAbgBnACwAIABtAHMAYwBvAHIAbABpAGIAJwEKAAAAUwB5AG0AYgBvAGwATgBhAG0AZQABDgAAAGUAbgBhAGIAbABlAEEAdQB0AG8AUwBwAGkAbgAnAQQAAAB0AHkAcABlAAEYAAAAUwB5AHMAdABlAG0ALgBCAG8AbwBsAGUAYQBuACwAIABtAHMAYwBvAHIAbABpAGIAKwEFAAAAVgBhAGwAdQBlAAAHBQIwAgAAAA4AAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQwAAABlAG4AYQBiAGwAZQBTAHQAcgBvAGIAZQAnAQQAAAB0AHkAcABlAAEYAAAAUwB5AHMAdABlAG0ALgBCAG8AbwBsAGUAYQBuACwAIABtAHMAYwBvAHIAbABpAGIAKwEFAAAAVgBhAGwAdQBlAAEHBQIwBAAAAA8AAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQ4AAAB0AGkAbAB0AE8AZgBmAHMAZQB0AEIAbAB1AGUAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwBpAG4AZwBsAGUALAAgAG0AcwBjAG8AcgBsAGkAYgAfAQUAAABWAGEAbAB1AGUAAAC0QgcFAjAEAAAAEAAAAAYCAAAAAAAAACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAdAByAGkAbgBnACwAIABtAHMAYwBvAHIAbABpAGIAJwEKAAAAUwB5AG0AYgBvAGwATgBhAG0AZQABEgAAAHAAYQBuAE8AZgBmAHMAZQB0AEIAbAB1AGUARwByAGUAZQBuACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAaQBuAGcAbABlACwAIABtAHMAYwBvAHIAbABpAGIAHwEFAAAAVgBhAGwAdQBlAAAAAAAHBQIwAwAAABEAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQoAAABzAGUAbABlAGMAdABHAE8AQgBPACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQABAAAABwUCLwkAAAABZQAAAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAC4AVQBkAG8AbgBWAGEAcgBpAGEAYgBsAGUAYAAxAFsAWwBVAG4AaQB0AHkARQBuAGcAaQBuAGUALgBNAGUAcwBoAFIAZQBuAGQAZQByAGUAcgBbAF0ALAAgAFUAbgBpAHQAeQBFAG4AZwBpAG4AZQAuAEMAbwByAGUATQBvAGQAdQBsAGUAXQBdACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgASAAAABgIAAAAAAAAAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwB0AHIAaQBuAGcALAAgAG0AcwBjAG8AcgBsAGkAYgAnAQoAAABTAHkAbQBiAG8AbABOAGEAbQBlAAEMAAAAbwBiAGoAUgBlAG4AZABlAHIAZQByAHMAJwEEAAAAdAB5AHAAZQABMgAAAFUAbgBpAHQAeQBFAG4AZwBpAG4AZQAuAE0AZQBzAGgAUgBlAG4AZABlAHIAZQByAFsAXQAsACAAVQBuAGkAdAB5AEUAbgBnAGkAbgBlAC4AQwBvAHIAZQBNAG8AZAB1AGwAZQABAQUAAABWAGEAbAB1AGUALwoAAAABMgAAAFUAbgBpAHQAeQBFAG4AZwBpAG4AZQAuAE0AZQBzAGgAUgBlAG4AZABlAHIAZQByAFsAXQAsACAAVQBuAGkAdAB5AEUAbgBnAGkAbgBlAC4AQwBvAHIAZQBNAG8AZAB1AGwAZQATAAAABgEAAAAAAAAADAAAAAAHBQcFAjAEAAAAFAAAAAYCAAAAAAAAACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAdAByAGkAbgBnACwAIABtAHMAYwBvAHIAbABpAGIAJwEKAAAAUwB5AG0AYgBvAGwATgBhAG0AZQABCQAAAGMAbwBuAGUAVwBpAGQAdABoACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAaQBuAGcAbABlACwAIABtAHMAYwBvAHIAbABpAGIAHwEFAAAAVgBhAGwAdQBlAAAAIEAHBQIwBAAAABUAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQoAAABjAG8AbgBlAEwAZQBuAGcAdABoACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAaQBuAGcAbABlACwAIABtAHMAYwBvAHIAbABpAGIAHwEFAAAAVgBhAGwAdQBlAAAACEEHBQIwAgAAABYAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAREAAABzAGkAbgBnAGwAZQBDAGgAYQBuAG4AZQBsAE0AbwBkAGUAJwEEAAAAdAB5AHAAZQABGAAAAFMAeQBzAHQAZQBtAC4AQgBvAG8AbABlAGEAbgAsACAAbQBzAGMAbwByAGwAaQBiACsBBQAAAFYAYQBsAHUAZQAABwUCLwsAAAABSgAAAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAC4AVQBkAG8AbgBWAGEAcgBpAGEAYgBsAGUAYAAxAFsAWwBTAHkAcwB0AGUAbQAuAFUASQBuAHQAMwAyACwAIABtAHMAYwBvAHIAbABpAGIAXQBdACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAXAAAABgIAAAAAAAAAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwB0AHIAaQBuAGcALAAgAG0AcwBjAG8AcgBsAGkAYgAnAQoAAABTAHkAbQBiAG8AbABOAGEAbQBlAAEHAAAAYwBoAGEAbgBuAGUAbAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBVAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABkBBQAAAFYAYQBsAHUAZQAAAAAABwUCMAQAAAAYAAAABgIAAAAAAAAAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwB0AHIAaQBuAGcALAAgAG0AcwBjAG8AcgBsAGkAYgAnAQoAAABTAHkAbQBiAG8AbABOAGEAbQBlAAENAAAAbQBhAHgAQwBvAG4AZQBMAGUAbgBnAHQAaAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAGkAbgBnAGwAZQAsACAAbQBzAGMAbwByAGwAaQBiAB8BBQAAAFYAYQBsAHUAZQAAAIA/BwUCMAMAAAAZAAAABgIAAAAAAAAAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwB0AHIAaQBuAGcALAAgAG0AcwBjAG8AcgBsAGkAYgAnAQoAAABTAHkAbQBiAG8AbABOAGEAbQBlAAEKAAAAZABtAHgAQwBoAGEAbgBuAGUAbAAnAQQAAAB0AHkAcABlAAEWAAAAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgAXAQUAAABWAGEAbAB1AGUAAQAAAAcFAjADAAAAGgAAAAYCAAAAAAAAACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAdAByAGkAbgBnACwAIABtAHMAYwBvAHIAbABpAGIAJwEKAAAAUwB5AG0AYgBvAGwATgBhAG0AZQABCwAAAGQAbQB4AFUAbgBpAHYAZQByAHMAZQAnAQQAAAB0AHkAcABlAAEWAAAAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgAXAQUAAABWAGEAbAB1AGUAAQAAAAcFAjACAAAAGwAAAAYCAAAAAAAAACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAdAByAGkAbgBnACwAIABtAHMAYwBvAHIAbABpAGIAJwEKAAAAUwB5AG0AYgBvAGwATgBhAG0AZQABEwAAAHUAcwBlAEwAZQBnAGEAYwB5AFMAZQBjAHQAbwByAE0AbwBkAGUAJwEEAAAAdAB5AHAAZQABGAAAAFMAeQBzAHQAZQBtAC4AQgBvAG8AbABlAGEAbgAsACAAbQBzAGMAbwByAGwAaQBiACsBBQAAAFYAYQBsAHUAZQAABwUCMAMAAAAcAAAABgIAAAAAAAAAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwB0AHIAaQBuAGcALAAgAG0AcwBjAG8AcgBsAGkAYgAnAQoAAABTAHkAbQBiAG8AbABOAGEAbQBlAAEHAAAAQwBoAGEAbgBuAGUAbAAnAQQAAAB0AHkAcABlAAEWAAAAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgAXAQUAAABWAGEAbAB1AGUAAAAAAAcFAjACAAAAHQAAAAYCAAAAAAAAACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAdAByAGkAbgBnACwAIABtAHMAYwBvAHIAbABpAGIAJwEKAAAAUwB5AG0AYgBvAGwATgBhAG0AZQABDwAAAGwAZQBnAGEAYwB5AEcAbwBiAG8AUgBhAG4AZwBlACcBBAAAAHQAeQBwAGUAARgAAABTAHkAcwB0AGUAbQAuAEIAbwBvAGwAZQBhAG4ALAAgAG0AcwBjAG8AcgBsAGkAYgArAQUAAABWAGEAbAB1AGUAAAcFAjADAAAAHgAAAAYCAAAAAAAAACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAdAByAGkAbgBnACwAIABtAHMAYwBvAHIAbABpAGIAJwEKAAAAUwB5AG0AYgBvAGwATgBhAG0AZQABHwAAAF8AXwBfAFUAZABvAG4AUwBoAGEAcgBwAEIAZQBoAGEAdgBpAG8AdQByAFYAZQByAHMAaQBvAG4AXwBfAF8AJwEEAAAAdAB5AHAAZQABFgAAAFMAeQBzAHQAZQBtAC4ASQBuAHQAMwAyACwAIABtAHMAYwBvAHIAbABpAGIAFwEFAAAAVgBhAGwAdQBlAAIAAAAHBQIwAgAAAB8AAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAS4AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBQAGUAcgBzAGkAcwB0AEQAYQB0AGEARgByAG8AbQBVAHAAZwByAGEAZABlAF8AXwBfACcBBAAAAHQAeQBwAGUAARgAAABTAHkAcwB0AGUAbQAuAEIAbwBvAGwAZQBhAG4ALAAgAG0AcwBjAG8AcgBsAGkAYgArAQUAAABWAGEAbAB1AGUAAQcFBwUHBQ== publicVariablesUnityEngineObjects: diff --git a/Shaders/Editor/VRSLInspector.cs b/Shaders/Editor/VRSLInspector.cs index 13de2e8..5541063 100644 --- a/Shaders/Editor/VRSLInspector.cs +++ b/Shaders/Editor/VRSLInspector.cs @@ -72,7 +72,9 @@ public class VRSLInspector : ShaderGUI MaterialProperty _Noise2Stretch = null; MaterialProperty _Noise2StretchInside = null; MaterialProperty _Noise2Power = null; - MaterialProperty _ToggleMagicNoise = null; + MaterialProperty _MAGIC_NOISE_ON = null; + MaterialProperty _UseDepthLight = null; + MaterialProperty _PotatoMode = null; MaterialProperty _GradientMod = null; MaterialProperty _GradientModGOBO = null; // MaterialProperty _InsideConeNormalMap = null; @@ -251,7 +253,7 @@ public class VRSLInspector : ShaderGUI GUILayout.Space(5); if(isDiscoBall) { - DiscoballGUI(materialEditor, props); + DiscoballGUI(materialEditor, props, material); return; } @@ -259,17 +261,17 @@ public class VRSLInspector : ShaderGUI { if(isMoverLight && isFixture) { - MoverLightFixtureGUI(materialEditor, props); + MoverLightFixtureGUI(materialEditor, props, material); return; } if(isMoverLight && isVolumetric) { - MoverLightVolumetricGUI(materialEditor, props); + MoverLightVolumetricGUI(materialEditor, props, material); return; } if(isMoverLight && isProjection) { - MoverLightProjectionGUI(materialEditor,props); + MoverLightProjectionGUI(materialEditor,props, material); return; } } @@ -277,12 +279,12 @@ public class VRSLInspector : ShaderGUI { if(isStaticLight && isFixture) { - StaticLightFixtureGUI(materialEditor,props); + StaticLightFixtureGUI(materialEditor,props, material); return; } if(isStaticLight && isProjection) { - StaticLightProjectionGUI(materialEditor,props); + StaticLightProjectionGUI(materialEditor,props, material); return; } } @@ -290,17 +292,17 @@ public class VRSLInspector : ShaderGUI { if(isRTStrobe && !isRTSpin) { - DMXStrobeGUI(materialEditor,props); + DMXStrobeGUI(materialEditor,props, material); return; } else if(isRTSpin && !isRTStrobe) { - DMXSpinnerGUI(materialEditor, props); + DMXSpinnerGUI(materialEditor, props, material); return; } else { - DMXInterpolationGUI(materialEditor,props); + DMXInterpolationGUI(materialEditor,props, material); return; } } @@ -309,7 +311,7 @@ public class VRSLInspector : ShaderGUI } - public void AudioLinkGUI(MaterialEditor matEditor, MaterialProperty[] props) + public void AudioLinkGUI(MaterialEditor matEditor, MaterialProperty[] props, Material target) { if(isAudioLink) { @@ -337,9 +339,9 @@ public class VRSLInspector : ShaderGUI } } - public void StaticLightProjectionGUI(MaterialEditor matEditor, MaterialProperty[] props) + public void StaticLightProjectionGUI(MaterialEditor matEditor, MaterialProperty[] props, Material target) { - AudioLinkGUI(matEditor, props); + AudioLinkGUI(matEditor, props, target); //DMX CONTROLS if(isDMXCompatible) { @@ -378,7 +380,7 @@ public class VRSLInspector : ShaderGUI matEditor.ShaderProperty(_UniversalIntensity, new GUIContent("Universal Intensity", "Sets the maximum brightness value of both Final and GLobal Intensity. Good for personalized settings of the max brightness of the shader by other users via UI. Is non-instanced.")); GUILayout.Space(10); matEditor.ShaderProperty(_Emission, new GUIContent("Light Emission Color", "The color of the light!. Use this to color the emissive part of the material.")); - ColorTextureSamplingGUI(matEditor, props); + ColorTextureSamplingGUI(matEditor, props, target); //matEditor.ShaderProperty(_CurveMod, new GUIContent("Light Intensity Curve Modifier", "Curve modifier for light intensity.")); matEditor.ShaderProperty(_FixtureMaxIntensity, new GUIContent("Lens Max Brightness", "General slider for adjusting the max brightness of the lens")); @@ -438,9 +440,9 @@ public class VRSLInspector : ShaderGUI // EditorGUI.indentLevel--; } - public void StaticLightFixtureGUI(MaterialEditor matEditor, MaterialProperty[] props) + public void StaticLightFixtureGUI(MaterialEditor matEditor, MaterialProperty[] props, Material target) { - AudioLinkGUI(matEditor, props); + AudioLinkGUI(matEditor, props, target); //DMX CONTROLS if(isDMXCompatible) { @@ -477,7 +479,7 @@ public class VRSLInspector : ShaderGUI matEditor.ShaderProperty(_FinalIntensity, new GUIContent("Final Intensity", "Sets the maximum brightness value of Global Intensity. Good for personalized settings of the max brightness of the shader by other users via UI.")); matEditor.ShaderProperty(_UniversalIntensity, new GUIContent("Universal Intensity", "Sets the maximum brightness value of both Final and GLobal Intensity. Good for personalized settings of the max brightness of the shader by other users via UI. Is non-instanced.")); matEditor.ShaderProperty(_Emission, new GUIContent("Light Emission Color", "The color of the light!. Use this to color the emissive part of the material.")); - ColorTextureSamplingGUI(matEditor, props); + ColorTextureSamplingGUI(matEditor, props, target); matEditor.ShaderProperty(_CurveMod, new GUIContent("Light Intensity Curve Modifier", "Curve modifier for light intensity.")); matEditor.ShaderProperty(_FixtureMaxIntensity, new GUIContent("Lens Max Brightness", "General slider for adjusting the max brightness of the lens")); matEditor.ShaderProperty(_FixutreIntensityMultiplier, new GUIContent ("Intensity Multiplier", "Multiplier for the lens brightness. Good for adjusting to increase bloom")); @@ -513,9 +515,9 @@ public class VRSLInspector : ShaderGUI // matEditor.RenderQueueField(); } - public void MoverLightProjectionGUI(MaterialEditor matEditor, MaterialProperty[] props) + public void MoverLightProjectionGUI(MaterialEditor matEditor, MaterialProperty[] props, Material target) { - AudioLinkGUI(matEditor, props); + AudioLinkGUI(matEditor, props, target); //DMX CONTROLS if(isDMXCompatible) { @@ -558,7 +560,7 @@ public class VRSLInspector : ShaderGUI matEditor.ShaderProperty(_FixtureBaseRotationY, new GUIContent("Rotation Y Offset", "Offset the Y Rotation of the fixture.")); matEditor.ShaderProperty(_FixtureRotationX, new GUIContent("Rotation X Offset", "Offset the X Rotation of the fixture.")); matEditor.ShaderProperty(_Emission, new GUIContent("Light Emission Color", "The color of the light!. Use this to color the emissive part of the material.")); - ColorTextureSamplingGUI(matEditor, props); + ColorTextureSamplingGUI(matEditor, props, target); //matEditor.ShaderProperty(_, new GUIContent("Light Emission Color", "The color of the light!. Use this to color the emissive part of the material.")); //matEditor.ShaderProperty(_FixutreIntensityMultiplier, new GUIContent ("Intensity Multiplier", "Multiplier for the brightness. Good for adjusting to increase bloom")); matEditor.EnableInstancingField(); @@ -657,9 +659,9 @@ public class VRSLInspector : ShaderGUI // matEditor.RenderQueueField(); } - public void MoverLightVolumetricGUI(MaterialEditor matEditor, MaterialProperty[] props) + public void MoverLightVolumetricGUI(MaterialEditor matEditor, MaterialProperty[] props, Material target) { - AudioLinkGUI(matEditor, props); + AudioLinkGUI(matEditor, props, target); //DMX CONTROLS if(isDMXCompatible) { @@ -701,7 +703,7 @@ public class VRSLInspector : ShaderGUI matEditor.ShaderProperty(_Emission, new GUIContent("Light Emission Color", "The color of the light!. Use this to color the emissive part of the material.")); matEditor.ShaderProperty(_FixtureBaseRotationY, new GUIContent("Rotation Y Offset", "Offset the Y Rotation of the fixture.")); matEditor.ShaderProperty(_FixtureRotationX, new GUIContent("Rotation X Offset", "Offset the X Rotation of the fixture.")); - ColorTextureSamplingGUI(matEditor, props); + ColorTextureSamplingGUI(matEditor, props, target); matEditor.ShaderProperty(_Saturation, new GUIContent("Saturation", "Saturation modifier for light color.")); matEditor.ShaderProperty(_SaturationLength, new GUIContent("Saturation Length", "Har far from the source does the saturation slider affect the shader.")); matEditor.ShaderProperty(_LensMaxBrightness, new GUIContent("Lens Max Brightness", "General slider for adjusting the max brightness of the lens")); @@ -731,7 +733,12 @@ public class VRSLInspector : ShaderGUI matEditor.TexturePropertySingleLine(new GUIContent("Magic 3D Noise Texture", "A magical texture for generating 3D Perlin Noise at runtime! Code and texture based on https://www.shadertoy.com/view/4sfGzS by iq!"), _LightMainTex); //if(!isDMXCompatible) //{ - matEditor.ShaderProperty(_ToggleMagicNoise, new GUIContent("Enable Magic 3D Noise", "Enable Second layer of world space, faux 3D Noise")); + matEditor.ShaderProperty(_UseDepthLight, new GUIContent("Use Depth Light", "Enable/Disable the reliance of the depth light for this volumetric shader.")); + matEditor.ShaderProperty(_MAGIC_NOISE_ON, new GUIContent("Enable Magic 3D Noise", "Enable Second layer of world space, faux 3D Noise")); + matEditor.ShaderProperty(_PotatoMode, new GUIContent("Potato Mode", "Reduces the overhead on the fragment shader by removing both noise components to extra texture sampling.")); + SetKeyword(target, "_MAGIC_NOISE_ON", (Mathf.FloorToInt(target.GetInt("_MAGIC_NOISE_ON"))) == 1 ? true : false); + SetKeyword(target, "_USE_DEPTH_LIGHT", (Mathf.FloorToInt(target.GetInt("_UseDepthLight"))) == 1 ? true : false); + SetKeyword(target, "_POTATO_MODE_ON", (Mathf.FloorToInt(target.GetInt("_PotatoMode"))) == 1 ? true : false); //if(isDMXCompatible) // { matEditor.ShaderProperty(_Noise2Stretch, new GUIContent("Outside Magic Noise Scale", "Second Layer of Noise Scale")); @@ -819,9 +826,9 @@ public class VRSLInspector : ShaderGUI } - public void MoverLightFixtureGUI(MaterialEditor matEditor, MaterialProperty[] props) + public void MoverLightFixtureGUI(MaterialEditor matEditor, MaterialProperty[] props, Material target) { - AudioLinkGUI(matEditor, props); + AudioLinkGUI(matEditor, props, target); //DMX CONTROLS if(isDMXCompatible) { @@ -860,7 +867,7 @@ public class VRSLInspector : ShaderGUI matEditor.ShaderProperty(_Emission, new GUIContent("Light Emission Color", "The color of the light!. Use this to color the emissive part of the material.")); matEditor.ShaderProperty(_FixtureBaseRotationY, new GUIContent("Rotation Y Offset", "Offset the Y Rotation of the fixture.")); matEditor.ShaderProperty(_FixtureRotationX, new GUIContent("Rotation X Offset", "Offset the X Rotation of the fixture.")); - ColorTextureSamplingGUI(matEditor, props); + ColorTextureSamplingGUI(matEditor, props, target); matEditor.ShaderProperty(_Saturation, new GUIContent("Saturation", "Saturation modifier for light color.")); matEditor.ShaderProperty(_LensMaxBrightness, new GUIContent("Lens Max Brightness", "General slider for adjusting the max brightness of the lens")); matEditor.ShaderProperty(_FixutreIntensityMultiplier, new GUIContent ("Intensity Multiplier", "Multiplier for the lens brightness. Good for adjusting to increase bloom")); @@ -910,7 +917,7 @@ public class VRSLInspector : ShaderGUI // matEditor.RenderQueueField(); } - public void ColorTextureSamplingGUI(MaterialEditor matEditor, MaterialProperty[] props) + public void ColorTextureSamplingGUI(MaterialEditor matEditor, MaterialProperty[] props, Material target) { if(isDMXCompatible || isRTShader || isDiscoBall) return; matEditor.ShaderProperty(_EnableColorTextureSample, new GUIContent("Enable Color Texture Sampling", "Check this box if you wish to sample seperate texture for the color. The color will be influenced by the intensity of the original emission color!")); @@ -926,9 +933,9 @@ public class VRSLInspector : ShaderGUI - public void DiscoballGUI(MaterialEditor matEditor, MaterialProperty[] props) + public void DiscoballGUI(MaterialEditor matEditor, MaterialProperty[] props, Material target) { - AudioLinkGUI(matEditor, props); + AudioLinkGUI(matEditor, props, target); //DMX CONTROLS if(isDMXCompatible) { @@ -981,7 +988,7 @@ public class VRSLInspector : ShaderGUI } - public void DMXInterpolationGUI(MaterialEditor matEditor, MaterialProperty[] props) + public void DMXInterpolationGUI(MaterialEditor matEditor, MaterialProperty[] props, Material target) { GUILayout.Space(5); EditorGUI.indentLevel++; @@ -998,7 +1005,7 @@ public class VRSLInspector : ShaderGUI EditorGUI.indentLevel--; GUILayout.Space(5); } - public void DMXStrobeGUI(MaterialEditor matEditor, MaterialProperty[] props) + public void DMXStrobeGUI(MaterialEditor matEditor, MaterialProperty[] props, Material target) { GUILayout.Space(5); EditorGUI.indentLevel++; @@ -1010,7 +1017,7 @@ public class VRSLInspector : ShaderGUI GUILayout.Space(5); } - public void DMXSpinnerGUI(MaterialEditor matEditor, MaterialProperty[] props) + public void DMXSpinnerGUI(MaterialEditor matEditor, MaterialProperty[] props, Material target) { GUILayout.Space(5); EditorGUI.indentLevel++; @@ -1103,6 +1110,18 @@ public class VRSLInspector : ShaderGUI } + public static void SetKeyword(Material mat, string keyword, bool status) + { + if (status) + { + mat.EnableKeyword(keyword); + } + else + { + mat.DisableKeyword(keyword); + } + } + diff --git a/Shaders/MovingLights/VRSL-StandardMover-VolumetricFrag.cginc b/Shaders/MovingLights/VRSL-StandardMover-VolumetricFrag.cginc index 745245f..0acca94 100644 --- a/Shaders/MovingLights/VRSL-StandardMover-VolumetricFrag.cginc +++ b/Shaders/MovingLights/VRSL-StandardMover-VolumetricFrag.cginc @@ -13,23 +13,20 @@ float Fresnel(float3 Normal, float3 ViewDir, float Power) { return pow(max(0, dot(Normal, -ViewDir)), Power); } - -//3D noise based on iq's https://www.shadertoy.com/view/4sfGzS -//HLSL conversion by Orels1~ -half Noise(float3 p) -{ - float3 i = floor(p); p -= i; - p *= p * (3. - 2. * p); - float2 uv = (p.xy + i.xy + float2(37, 17) * i.z + .5)*0.00390625; - //uv.y *= -1; - float4 uv4 = float4(uv.x, uv.y * -1, 0.0, 0.0); - p.xy = tex2Dlod(_LightMainTex, uv4).yx; - return lerp(p.x, p.y, p.z); -} - -const float3x3 m = float3x3( 0.00, 0.80, 0.60, - -0.80, 0.36, -0.48, - -0.60, -0.48, 0.64 ); +#ifndef _POTATO_MODE_ON + //3D noise based on iq's https://www.shadertoy.com/view/4sfGzS + //HLSL conversion by Orels1~ + half Noise(float3 p) + { + float3 i = floor(p); p -= i; + p *= p * (3. - 2. * p); + float2 uv = (p.xy + i.xy + float2(37, 17) * i.z + .5)*0.00390625; + //uv.y *= -1; + float4 uv4 = float4(uv.x, uv.y * -1, 0.0, 0.0); + p.xy = tex2Dlod(_LightMainTex, uv4).yx; + return lerp(p.x, p.y, p.z); + } +#endif float4 VolumetricLightingBRDF(v2f i, fixed facePos) @@ -62,21 +59,25 @@ float4 VolumetricLightingBRDF(v2f i, fixed facePos) //CREDIT TO DJ LUKIS FOR MIRROR DEPTH CORRECTION //Get Screen Pos UVs //float perspectiveDivide = 1.0f / i.pos.w; - float4 direction = i.worldDirection * (1.0f / i.pos.w); - float2 screenUV = i.screenPos.xy / i.screenPos.w; - //Sampling Depth - float depth = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, screenUV); - //Correct for mirrors as Eye Depth - depth = CorrectedLinearEyeDepth(depth, direction.w); - //Convert to Raw Depth - depth = (1.0 - (depth * _ZBufferParams.w)) / (depth * _ZBufferParams.z); - //Convert to Linear01 Deppth - depth = Linear01Depth(depth); + #ifdef _USE_DEPTH_LIGHT + float4 direction = i.worldDirection * (1.0f / i.pos.w); + float2 screenUV = i.screenPos.xy / i.screenPos.w; + //Sampling Depth + float depth = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, screenUV); + //Correct for mirrors as Eye Depth + depth = CorrectedLinearEyeDepth(depth, direction.w); + //Convert to Raw Depth + depth = (1.0 - (depth * _ZBufferParams.w)) / (depth * _ZBufferParams.z); + //Convert to Linear01 Deppth + depth = Linear01Depth(depth); - //Attempt to fade cone away when intersecting with another object - float intersectionFade = saturate(((depth * _ProjectionParams.z) - i.screenPos.w)); - intersectionFade = lerp(1, intersectionFade, saturate(i.uv.x * _FadeAmt)); + //Attempt to fade cone away when intersecting with another object + float intersectionFade = saturate(((depth * _ProjectionParams.z) - i.screenPos.w)); + intersectionFade = lerp(1, intersectionFade, saturate(i.uv.x * _FadeAmt)); + #else + float intersectionFade = 1.0; + #endif //Attempt to fade cone away when intersecting with the camera. //float cameraFade = i.camAngleCamfade.y; @@ -89,7 +90,11 @@ float4 VolumetricLightingBRDF(v2f i, fixed facePos) i.uv.x = saturate(i.uv.x * 1.5); //Generate gradient for cone. - half grad = i.intensityStrobeGOBOSpinSpeed.w > 1 ? _GradientModGOBO * 0.6f : _GradientMod * 0.8f; + #ifndef _POTATO_MODE_ON + half grad = i.intensityStrobeGOBOSpinSpeed.w > 1 ? _GradientModGOBO * 0.6f : _GradientMod * 0.8f; + #else + half grad = i.intensityStrobeGOBOSpinSpeed.w > 1 ? _GradientModGOBO * 0.95f : _GradientMod*1.75f; + #endif fixed gradientTexture = saturate((pow(-uvMap.x + 1, grad))); fixed4 col = gradientTexture.r; @@ -121,74 +126,79 @@ float4 VolumetricLightingBRDF(v2f i, fixed facePos) //Get Strobe information float strobe = isStrobe() == 1 ? i.intensityStrobeGOBOSpinSpeed.y : 1; - //Generate 2D noise texture, add scroll effect, and map to cone. - float2 texUV = i.uv2; - texUV.x = (_Time.y*0.1) * 0.75f + texUV.x; - texUV.y = (_Time.y*0.1) * 0.10f + texUV.y; - #if !defined(WASH) - float4 tex = tex2D(_NoiseTex, texUV); - #else - float4 tex = float4(1,1,1,1); + #ifndef _POTATO_MODE_ON + //Generate 2D noise texture, add scroll effect, and map to cone. + float2 texUV = i.uv2; + texUV.x = (_Time.y*0.1) * 0.75f + texUV.x; + texUV.y = (_Time.y*0.1) * 0.10f + texUV.y; + #if !defined(WASH) + float4 tex = tex2D(_NoiseTex, texUV); + #else + float4 tex = float4(1,1,1,1); + #endif + + //initialize 3D noise value and 2D noise strength value + float threeDNoise = 1.0f; + half np = 0.0f; + + //If we are using 3D noise... + #ifdef _MAGIC_NOISE_ON + //if(_ToggleMagicNoise > 0) + //{ + //Get vertex/frag position in worldspace + float3 worldposNoise = i.worldPos.xyz; + //Add Scrolling effect + worldposNoise.x += ((_Time.y*0.1) * _Noise2X); + worldposNoise.y += ((_Time.y*0.1) * _Noise2Y); + worldposNoise.z += ((_Time.y*0.1) * _Noise2Z); + //Add Tiling effect + //float3 q = threeDNoiseScale * worldposNoise.xyz; + float3 q = float3(0,0,0); + q.x = threeDNoiseScale * worldposNoise.x; + q.y = threeDNoiseScale * worldposNoise.y; + q.z = threeDNoiseScale * worldposNoise.z; + + //Use IQ's noise calculation equation to calculate 3D noise in world space. + //Currently only sampling the noise twice as sampling anymore isn't creating any visible improvements. + threeDNoise = 0.5000f*Noise( q ); + // q = mul(float3x3( 0.00000, 0.80000, 0.60000, + // -0.80000, 0.36000, -0.48000, + // -0.60000, -0.48000, 0.64000),q)*2.01; + // //q = q * m; + // threeDNoise += 0.2500*Noise( q ); + // q = mul(m,q)*2.02; + // threeDNoise += 0.1250*Noise( q ); + // q = mul(m,q)*2.03; + // threeDNoise += 0.0625*Noise( q ); + // q = mul(m,q)*2.01; + + //If we aren't using gobos, remove the 2D noise effect + np = i.intensityStrobeGOBOSpinSpeed.w > 1 ? _NoisePower : 0.0; + //Set 3D Noise Power + #ifndef WASH + float newNP = lerp(_Noise2Power - 0.2, _Noise2Power, gradientTexture.r); + threeDNoise = lerp(1, threeDNoise, newNP); + #else + threeDNoise = lerp(1, threeDNoise, _Noise2Power); + #endif + //} + //If we aren't using 3D noise.. + #else + //{ + //If we are using gobos, add another 0.2 to the 2D noise power strength. + //np = i.intensityStrobeGOBOSpinSpeed.w > 1 ? clamp(0,1,_NoisePower + 0.2) : _NoisePower; + #ifndef WASH + np = i.intensityStrobeGOBOSpinSpeed.w > 1 ? clamp(0,1,_NoisePower + 0.2) : _NoisePower; + #else + //tex = tex2D(_NoiseTex, texUV); + np = _NoisePower; + #endif + //} + #endif + //Mix 2D noise Power + tex = lerp(fixed4(1, 1, 1, 1), tex, np); #endif - //initialize 3D noise value and 2D noise strength value - float threeDNoise = 1.0f; - half np = 0.0f; - - //If we are using 3D noise... - if(_ToggleMagicNoise > 0) - { - //Get vertex/frag position in worldspace - float3 worldposNoise = i.worldPos.xyz; - //Add Scrolling effect - worldposNoise.x += ((_Time.y*0.1) * _Noise2X); - worldposNoise.y += ((_Time.y*0.1) * _Noise2Y); - worldposNoise.z += ((_Time.y*0.1) * _Noise2Z); - //Add Tiling effect - //float3 q = threeDNoiseScale * worldposNoise.xyz; - float3 q = float3(0,0,0); - q.x = threeDNoiseScale * worldposNoise.x; - q.y = threeDNoiseScale * worldposNoise.y; - q.z = threeDNoiseScale * worldposNoise.z; - - //Use IQ's noise calculation equation to calculate 3D noise in world space. - //Currently only sampling the noise twice as sampling anymore isn't creating any visible improvements. - threeDNoise = 0.5000f*Noise( q ); - q = mul(m,q)*2.01f; - threeDNoise += 0.2500f*Noise( q ); - // q = mul(m,q)*2.02; - // threeDNoise += 0.1250*Noise( q ); - // q = mul(m,q)*2.03; - // threeDNoise += 0.0625*Noise( q ); - // q = mul(m,q)*2.01; - - //If we aren't using gobos, remove the 2D noise effect - np = i.intensityStrobeGOBOSpinSpeed.w > 1 ? _NoisePower : 0.0; - //Set 3D Noise Power - #ifndef WASH - float newNP = lerp(_Noise2Power - 0.2, _Noise2Power, gradientTexture.r); - threeDNoise = lerp(1, threeDNoise, newNP); - #else - threeDNoise = lerp(1, threeDNoise, _Noise2Power); - #endif - } - //If we aren't using 3D noise.. - else - { - //If we are using gobos, add another 0.2 to the 2D noise power strength. - //np = i.intensityStrobeGOBOSpinSpeed.w > 1 ? clamp(0,1,_NoisePower + 0.2) : _NoisePower; - #ifndef WASH - np = i.intensityStrobeGOBOSpinSpeed.w > 1 ? clamp(0,1,_NoisePower + 0.2) : _NoisePower; - #else - //tex = tex2D(_NoiseTex, texUV); - np = _NoisePower; - #endif - } - - //Mix 2D noise Power - tex = lerp(fixed4(1, 1, 1, 1), tex, np); - - //Mix in blinding effect. //col*= ((i.blindingEffect)); @@ -214,7 +224,11 @@ float4 VolumetricLightingBRDF(v2f i, fixed facePos) // col *= tex; // col *= splitter; // col *= threeDNoise; - col *= tex * splitter * threeDNoise; + #ifndef _POTATO_MODE_ON + col *= tex * splitter * threeDNoise; + #else + col *= splitter; + #endif //Add more power to Inner side of cone float4 result = col; @@ -265,7 +279,11 @@ float4 VolumetricLightingBRDF(v2f i, fixed facePos) } // float satMod = i.intensityStrobeGOBOSpinSpeed.w > 1 ? 5.0 : 0.0; //Create fake white power effect at source of cone and use Saturation and Saturation Length to blend that effect - newCol.xyz = lerp(result.xyz,newCol * 10, saturate((pow(saturate(gradientTexture - 0.25), _SaturationLength - satMod)) * tex.r) +0.005); + #ifndef _POTATO_MODE_ON + newCol.xyz = lerp(result.xyz,newCol * 10, saturate((pow(saturate(gradientTexture - 0.25), _SaturationLength - satMod)) * tex.r) +0.005); + #else + newCol.xyz = lerp(result.xyz,newCol * 10, saturate((pow(saturate(gradientTexture - 0.25), _SaturationLength - satMod))) +0.005); + #endif result.xyz = (lerp(result.xyz, newCol.xyz, _Saturation)) * gifi; //Mix in Camera angle into strength for outside faces, increase strength for inside faces. result = facePos > 0 ? lerp(result * i.camAngleCamfade.x, result, i.camAngleCamfade.y) : result * 3; diff --git a/Shaders/MovingLights/VRSL-StandardMover-VolumetricMesh.shader b/Shaders/MovingLights/VRSL-StandardMover-VolumetricMesh.shader index 8942887..3c48cf4 100644 --- a/Shaders/MovingLights/VRSL-StandardMover-VolumetricMesh.shader +++ b/Shaders/MovingLights/VRSL-StandardMover-VolumetricMesh.shader @@ -60,7 +60,7 @@ _NoiseTex ("NoiseTex", 2D) = "white" {} _NoisePower("Noise Strength", Range(0, 1)) = 1 _NoiseSeed ("Noise Seed", float) = 0 - [Toggle]_ToggleMagicNoise ("Toggle Magic Noise", Int) = 1 + [Toggle]_MAGIC_NOISE_ON ("Toggle Magic Noise", Int) = 1 _Noise2Stretch ("Outside Magic Noise Scale", Range(-10, 10)) = 1 _Noise2StretchInside ("Inside Magic Noise Scale", Range(-10, 10)) = 1 _Noise2X ("Magic Noise X Scroll", Range(-10, 10)) = 1 @@ -99,6 +99,9 @@ _GradientMod ("Gradient Modifier", Range(1, 4)) = 2.25 _GradientModGOBO ("Gradient Modifier GOBO", Range(1, 4)) = 2.25 + [Toggle]_UseDepthLight("Toggle The Requirement of the depth light to function.", Int) = 1 + [Toggle]_PotatoMode("Reduces the overhead on the fragment shader by removing both noise components to extra texture sampling", Int) = 0 + @@ -135,6 +138,9 @@ //#pragma multi_compile_fog #pragma multi_compile_instancing #pragma instancing_options assumeuniformscaling + #pragma shader_feature_local _MAGIC_NOISE_ON + #pragma shader_feature_local _USE_DEPTH_LIGHT + #pragma shader_feature_local _POTATO_MODE_ON #define VOLUMETRIC_YES //To identify the pass in the vert/frag #include "UnityCG.cginc" diff --git a/Shaders/MovingLights/VRSL-WashMover-VolumetricMesh.shader b/Shaders/MovingLights/VRSL-WashMover-VolumetricMesh.shader index 35e9aa5..7907f8c 100644 --- a/Shaders/MovingLights/VRSL-WashMover-VolumetricMesh.shader +++ b/Shaders/MovingLights/VRSL-WashMover-VolumetricMesh.shader @@ -58,7 +58,7 @@ _NoiseTex ("NoiseTex", 2D) = "white" {} _NoisePower("Noise Strength", Range(0, 1)) = 1 _NoiseSeed ("Noise Seed", float) = 0 - [Toggle]_ToggleMagicNoise ("Toggle Magic Noise", Int) = 1 + [ToggleUI]_MAGIC_NOISE_ON ("Toggle Magic Noise", Int) = 1 _Noise2Stretch ("Outside Magic Noise Scale", Range(-10, 10)) = 1 _Noise2StretchInside ("Inside Magic Noise Scale", Range(-10, 10)) = 1 _Noise2X ("Magic Noise X Scroll", Range(-10, 10)) = 1 @@ -97,6 +97,8 @@ _GradientMod ("Gradient Modifier", Range(1, 4)) = 2.25 _GradientModGOBO ("Gradient Modifier GOBO", Range(1, 4)) = 2.25 + [Toggle]_UseDepthLight("Toggle The Requirement of the depth light to function.", Int) = 1 + [Toggle]_PotatoMode("Reduces the overhead on the fragment shader by removing both noise components to extra texture sampling", Int) = 0 @@ -133,6 +135,9 @@ //#pragma multi_compile_fog #pragma multi_compile_instancing #pragma instancing_options assumeuniformscaling + #pragma shader_feature_local _MAGIC_NOISE_ON + #pragma shader_feature_local _USE_DEPTH_LIGHT + #pragma shader_feature_local _POTATO_MODE_ON #define VOLUMETRIC_YES //To identify the pass in the vert/frag #define WASH #include "UnityCG.cginc" diff --git a/Shaders/StaticLights/VRSL-FlasherStatic-LensFlare.shader b/Shaders/StaticLights/VRSL-FlasherStatic-LensFlare.shader index 26f5e0a..387fbe0 100644 --- a/Shaders/StaticLights/VRSL-FlasherStatic-LensFlare.shader +++ b/Shaders/StaticLights/VRSL-FlasherStatic-LensFlare.shader @@ -49,6 +49,8 @@ [Toggle]_ShouldDoFlicker("ShouldDoFlicker", FLoat) = 1 _FlickerAnimSpeed("FlickerAnimSpeed", Float) = 5 _FlickResultIntensityLowestPoint("FlickResultIntensityLowestPoint", range(0,1)) = 0.5 + + [Toggle]_UseDepthLight("Toggle The Requirement of the depth light to function.", Int) = 1 } SubShader { @@ -115,6 +117,7 @@ float _FlickResultIntensityLowestPoint; float _ShouldDoFlicker; half _RemoveTextureArtifact, _CurveMod; + uint _UseDepthLight; #include "../Shared/VRSL-DMXFunctions.cginc" float4x4 GetWorldToViewMatrix() @@ -251,6 +254,8 @@ //Test for n*n grid in view space, where quad pivot is grid's center. //For each iteration, //if that test point passed the scene depth occlusion test, we add 1 to visibilityTestPassedCount + if(_UseDepthLight) + { for(int x = -COUNT; x <= COUNT; x++) { for(int y = -COUNT; y <= COUNT ; y++) @@ -283,7 +288,9 @@ //if camera too close to flare , smooth fade out to prevent flare blocking camera too much (usually for fps games) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// visibilityResult01 *= smoothstep(_StartFadeinDistanceWorldUnit,_EndFadeinDistanceWorldUnit,linearEyeDepthOfFlarePivot); - + o.color.a *= visibilityResult01; + o.vertex = visibilityResult01 < divider ? 0 : o.vertex; + } // if(_ShouldDoFlicker) // { // float flickerMul = 0; @@ -295,7 +302,7 @@ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //apply all combinations(visibilityResult01) to vertex color ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - o.color.a *= visibilityResult01; + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //premultiply alpha to rgb after alpha's calculation is done @@ -309,7 +316,7 @@ //invalid this vertex (and all connected vertices). //This 100% early exit at clipping stage will prevent any rasterization & fragment shader cost at all ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - o.vertex = visibilityResult01 < divider ? 0 : o.vertex; + float3 hsvFC = RGB2HSV(o.color.xyz); diff --git a/Shaders/StaticLights/VRSL-StaticLight-LensFlare-5CH.shader b/Shaders/StaticLights/VRSL-StaticLight-LensFlare-5CH.shader index 3f997c3..3ae2c50 100644 --- a/Shaders/StaticLights/VRSL-StaticLight-LensFlare-5CH.shader +++ b/Shaders/StaticLights/VRSL-StaticLight-LensFlare-5CH.shader @@ -48,6 +48,8 @@ [Toggle]_ShouldDoFlicker("ShouldDoFlicker", FLoat) = 1 _FlickerAnimSpeed("FlickerAnimSpeed", Float) = 5 _FlickResultIntensityLowestPoint("FlickResultIntensityLowestPoint", range(0,1)) = 0.5 + + [Toggle]_UseDepthLight("Toggle The Requirement of the depth light to function.", Int) = 1 } SubShader { @@ -116,6 +118,7 @@ float _FlickResultIntensityLowestPoint; float _ShouldDoFlicker; half _RemoveTextureArtifact, _CurveMod; + uint _UseDepthLight; #include "../Shared/VRSL-DMXFunctions.cginc" float4x4 GetWorldToViewMatrix() @@ -223,6 +226,8 @@ //Test for n*n grid in view space, where quad pivot is grid's center. //For each iteration, //if that test point passed the scene depth occlusion test, we add 1 to visibilityTestPassedCount + if(_UseDepthLight) + { for(int x = -COUNT; x <= COUNT; x++) { for(int y = -COUNT; y <= COUNT ; y++) @@ -255,6 +260,9 @@ //if camera too close to flare , smooth fade out to prevent flare blocking camera too much (usually for fps games) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// visibilityResult01 *= smoothstep(_StartFadeinDistanceWorldUnit,_EndFadeinDistanceWorldUnit,linearEyeDepthOfFlarePivot); + o.vertex = visibilityResult01 < divider ? 0 : o.vertex; + o.color.a *= visibilityResult01; + } // if(_ShouldDoFlicker) // { @@ -267,7 +275,7 @@ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //apply all combinations(visibilityResult01) to vertex color ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - o.color.a *= visibilityResult01; + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //premultiply alpha to rgb after alpha's calculation is done @@ -281,7 +289,7 @@ //invalid this vertex (and all connected vertices). //This 100% early exit at clipping stage will prevent any rasterization & fragment shader cost at all ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - o.vertex = visibilityResult01 < divider ? 0 : o.vertex; + // float3 hsvFC = RGB2HSV(o.color.xyz); diff --git a/Shaders/StaticLights/VRSL-StaticLight-LensFlare.shader b/Shaders/StaticLights/VRSL-StaticLight-LensFlare.shader index ee19ab8..18022f9 100644 --- a/Shaders/StaticLights/VRSL-StaticLight-LensFlare.shader +++ b/Shaders/StaticLights/VRSL-StaticLight-LensFlare.shader @@ -48,6 +48,8 @@ [Toggle]_ShouldDoFlicker("ShouldDoFlicker", FLoat) = 1 _FlickerAnimSpeed("FlickerAnimSpeed", Float) = 5 _FlickResultIntensityLowestPoint("FlickResultIntensityLowestPoint", range(0,1)) = 0.5 + + [Toggle]_UseDepthLight("Toggle The Requirement of the depth light to function.", Int) = 1 } SubShader { @@ -116,6 +118,7 @@ float _FlickResultIntensityLowestPoint; float _ShouldDoFlicker; half _RemoveTextureArtifact, _CurveMod; + uint _UseDepthLight; #include "../Shared/VRSL-DMXFunctions.cginc" float4x4 GetWorldToViewMatrix() @@ -223,39 +226,43 @@ //Test for n*n grid in view space, where quad pivot is grid's center. //For each iteration, //if that test point passed the scene depth occlusion test, we add 1 to visibilityTestPassedCount - for(int x = -COUNT; x <= COUNT; x++) + if(_UseDepthLight) { - for(int y = -COUNT; y <= COUNT ; y++) + for(int x = -COUNT; x <= COUNT; x++) { - float3 testPosVS = quadPivotPosVS; - testPosVS.xy += float2(x,y) * maxSingleAxisOffset;//add 2D test grid offset, in const view space unit - float4 PivotPosCS = mul(UNITY_MATRIX_P,float4(testPosVS,1)); - float4 PivotScreenPos = ComputeScreenPos(PivotPosCS); - float2 screenUV = PivotScreenPos.xy/PivotScreenPos.w; + for(int y = -COUNT; y <= COUNT ; y++) + { + float3 testPosVS = quadPivotPosVS; + testPosVS.xy += float2(x,y) * maxSingleAxisOffset;//add 2D test grid offset, in const view space unit + float4 PivotPosCS = mul(UNITY_MATRIX_P,float4(testPosVS,1)); + float4 PivotScreenPos = ComputeScreenPos(PivotPosCS); + float2 screenUV = PivotScreenPos.xy/PivotScreenPos.w; - //if screenUV out of bound, treat it as occluded, because no correct depth texture data can be used to compare - if(screenUV.x > 1 || screenUV.x < 0 || screenUV.y > 1 || screenUV.y < 0) - continue; //exit means occluded + //if screenUV out of bound, treat it as occluded, because no correct depth texture data can be used to compare + if(screenUV.x > 1 || screenUV.x < 0 || screenUV.y > 1 || screenUV.y < 0) + continue; //exit means occluded - //we don't have tex2D() in vertex shader, because rasterization is not done by GPU, so we use tex2Dlod() with mip0 instead - float4 ssd = SAMPLE_DEPTH_TEXTURE_LOD(_CameraDepthTexture, float4(screenUV, 0.0, 0.0));//(uv.x,uv.y,0,mipLevel) - float sampledSceneDepth = ssd.x; - float linearEyeDepthFromSceneDepthTexture = LinearEyeDepth(sampledSceneDepth); - float linearEyeDepthFromSelfALU = PivotPosCS.w; //clip space .w is view space z, = linear eye depth + //we don't have tex2D() in vertex shader, because rasterization is not done by GPU, so we use tex2Dlod() with mip0 instead + float4 ssd = SAMPLE_DEPTH_TEXTURE_LOD(_CameraDepthTexture, float4(screenUV, 0.0, 0.0));//(uv.x,uv.y,0,mipLevel) + float sampledSceneDepth = ssd.x; + float linearEyeDepthFromSceneDepthTexture = LinearEyeDepth(sampledSceneDepth); + float linearEyeDepthFromSelfALU = PivotPosCS.w; //clip space .w is view space z, = linear eye depth - //do the actual depth comparision test - //+1 means flare test point is visible in screen space - //+0 means flare test point blocked by other objects in screen space, not visible - visibilityTestPassedCount += linearEyeDepthFromSelfALU + _DepthOcclusionTestZBias < linearEyeDepthFromSceneDepthTexture ? 1 : 0; + //do the actual depth comparision test + //+1 means flare test point is visible in screen space + //+0 means flare test point blocked by other objects in screen space, not visible + visibilityTestPassedCount += linearEyeDepthFromSelfALU + _DepthOcclusionTestZBias < linearEyeDepthFromSceneDepthTexture ? 1 : 0; + } } + float visibilityResult01 = visibilityTestPassedCount * divider;//0~100% visiblility result + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //if camera too close to flare , smooth fade out to prevent flare blocking camera too much (usually for fps games) + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + visibilityResult01 *= smoothstep(_StartFadeinDistanceWorldUnit,_EndFadeinDistanceWorldUnit,linearEyeDepthOfFlarePivot); + o.vertex = visibilityResult01 < divider ? 0 : o.vertex; + o.color.a *= visibilityResult01; } - float visibilityResult01 = visibilityTestPassedCount * divider;//0~100% visiblility result - - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //if camera too close to flare , smooth fade out to prevent flare blocking camera too much (usually for fps games) - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - visibilityResult01 *= smoothstep(_StartFadeinDistanceWorldUnit,_EndFadeinDistanceWorldUnit,linearEyeDepthOfFlarePivot); - // if(_ShouldDoFlicker) // { // float flickerMul = 0; @@ -267,7 +274,7 @@ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //apply all combinations(visibilityResult01) to vertex color ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - o.color.a *= visibilityResult01; + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //premultiply alpha to rgb after alpha's calculation is done @@ -281,7 +288,7 @@ //invalid this vertex (and all connected vertices). //This 100% early exit at clipping stage will prevent any rasterization & fragment shader cost at all ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - o.vertex = visibilityResult01 < divider ? 0 : o.vertex; + // float3 hsvFC = RGB2HSV(o.color.xyz); diff --git a/Textures/RTs/DMXRTViewer-Interpolated-Color+Intensity-Horizontal.asset b/Textures/RTs/DMXRTViewer-Interpolated-Color+Intensity-Horizontal.asset index 4891bd1..362e886 100644 --- a/Textures/RTs/DMXRTViewer-Interpolated-Color+Intensity-Horizontal.asset +++ b/Textures/RTs/DMXRTViewer-Interpolated-Color+Intensity-Horizontal.asset @@ -40,7 +40,7 @@ CustomRenderTexture: m_InitMaterial: {fileID: 0} m_InitColor: {r: 0, g: 0, b: 0, a: 1} m_InitTexture: {fileID: 0} - m_UpdateMode: 1 + m_UpdateMode: 2 m_InitializationMode: 0 m_UpdateZoneSpace: 0 m_CurrentUpdateZoneSpace: 0 diff --git a/Textures/RTs/DMXRTViewer-Interpolated-Movement-Horizontal.asset b/Textures/RTs/DMXRTViewer-Interpolated-Movement-Horizontal.asset index 7bcbbe5..c026f25 100644 --- a/Textures/RTs/DMXRTViewer-Interpolated-Movement-Horizontal.asset +++ b/Textures/RTs/DMXRTViewer-Interpolated-Movement-Horizontal.asset @@ -40,7 +40,7 @@ CustomRenderTexture: m_InitMaterial: {fileID: 0} m_InitColor: {r: 0, g: 0, b: 0, a: 1} m_InitTexture: {fileID: 0} - m_UpdateMode: 1 + m_UpdateMode: 2 m_InitializationMode: 0 m_UpdateZoneSpace: 0 m_CurrentUpdateZoneSpace: 0 diff --git a/Textures/RTs/DMXRTViewer-SpinTimer-Horizontal.asset b/Textures/RTs/DMXRTViewer-SpinTimer-Horizontal.asset index 6fed95a..06ac055 100644 --- a/Textures/RTs/DMXRTViewer-SpinTimer-Horizontal.asset +++ b/Textures/RTs/DMXRTViewer-SpinTimer-Horizontal.asset @@ -40,7 +40,7 @@ CustomRenderTexture: m_InitMaterial: {fileID: 0} m_InitColor: {r: 0, g: 0, b: 0, a: 1} m_InitTexture: {fileID: 0} - m_UpdateMode: 1 + m_UpdateMode: 2 m_InitializationMode: 0 m_UpdateZoneSpace: 0 m_CurrentUpdateZoneSpace: 0 diff --git a/Textures/RTs/DMXRTViewer-StrobeTimings-Horizontal.asset b/Textures/RTs/DMXRTViewer-StrobeTimings-Horizontal.asset index 04bf0ac..55ff584 100644 --- a/Textures/RTs/DMXRTViewer-StrobeTimings-Horizontal.asset +++ b/Textures/RTs/DMXRTViewer-StrobeTimings-Horizontal.asset @@ -40,7 +40,7 @@ CustomRenderTexture: m_InitMaterial: {fileID: 0} m_InitColor: {r: 0, g: 0, b: 0, a: 1} m_InitTexture: {fileID: 0} - m_UpdateMode: 1 + m_UpdateMode: 2 m_InitializationMode: 0 m_UpdateZoneSpace: 0 m_CurrentUpdateZoneSpace: 0