From 8e7b56173ae063d3472e6aef07dfca57c9f48b2c Mon Sep 17 00:00:00 2001 From: Greg Aring Date: Thu, 7 Dec 2017 16:40:53 -0500 Subject: [PATCH 1/7] doublebuffer path updates --- .../Demo/Scenes/OSVR-UnityVR-Demo.unity | 2711 +++++++++++++---- .../Assets/OSVRUnity/src/OsvrRenderManager.cs | 8 +- .../Assets/OSVRUnity/src/OsvrUnityNativeVR.cs | 12 +- OSVR-Unity/Assets/OSVRUnity/src/VRSurface.cs | 2 +- 4 files changed, 2100 insertions(+), 633 deletions(-) diff --git a/OSVR-Unity/Assets/OSVRUnity/Sample/Demo/Scenes/OSVR-UnityVR-Demo.unity b/OSVR-Unity/Assets/OSVRUnity/Sample/Demo/Scenes/OSVR-UnityVR-Demo.unity index 216bf06..c038ff5 100644 --- a/OSVR-Unity/Assets/OSVRUnity/Sample/Demo/Scenes/OSVR-UnityVR-Demo.unity +++ b/OSVR-Unity/Assets/OSVRUnity/Sample/Demo/Scenes/OSVR-UnityVR-Demo.unity @@ -1,19 +1,19 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!29 &1 -SceneSettings: +OcclusionCullingSettings: m_ObjectHideFlags: 0 - m_PVSData: - m_PVSObjectsArray: [] - m_PVSPortalsArray: [] + serializedVersion: 2 m_OcclusionBakeSettings: smallestOccluder: 5 smallestHole: 0.25 backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 7 + serializedVersion: 8 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -25,6 +25,7 @@ RenderSettings: m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} m_AmbientIntensity: 1 m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} m_SkyboxMaterial: {fileID: 2100000, guid: 48646e618662d7a4da8decdfe3bc6274, type: 2} m_HaloStrength: 0.5 m_FlareStrength: 1 @@ -41,7 +42,7 @@ RenderSettings: --- !u!157 &4 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 7 + serializedVersion: 9 m_GIWorkflowMode: 1 m_GISettings: serializedVersion: 2 @@ -53,7 +54,7 @@ LightmapSettings: m_EnableBakedLightmaps: 1 m_EnableRealtimeLightmaps: 0 m_LightmapEditorSettings: - serializedVersion: 4 + serializedVersion: 8 m_Resolution: 1 m_BakeResolution: 1 m_TextureWidth: 1024 @@ -66,40 +67,57 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 0 - m_DirectLightInLightProbes: 1 m_FinalGather: 0 m_FinalGatherFiltering: 1 m_FinalGatherRayCount: 256 m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFiltering: 0 + m_PVRFilteringMode: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousColorSigma: 1 + m_PVRFilteringAtrousNormalSigma: 1 + m_PVRFilteringAtrousPositionSigma: 1 m_LightingDataAsset: {fileID: 0} - m_RuntimeCPUUsage: 25 + m_ShadowMaskMode: 2 --- !u!196 &5 NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: serializedVersion: 2 + agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 agentSlope: 45 agentClimb: 0.4 ledgeDropHeight: 0 maxJumpAcrossDistance: 0 - accuratePlacement: 0 minRegionArea: 2 - cellSize: 0.16666666 manualCellSize: 0 + cellSize: 0.16666666 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 m_NavMeshData: {fileID: 0} --- !u!1 &97775140 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 97775141} - - 33: {fileID: 97775144} - - 23: {fileID: 97775142} + - component: {fileID: 97775141} + - component: {fileID: 97775144} + - component: {fileID: 97775142} m_Layer: 0 m_Name: pillar m_TagString: Untagged @@ -116,10 +134,10 @@ Transform: m_LocalRotation: {x: 0, y: -0.7071068, z: 0, w: 0.7071068} m_LocalPosition: {x: 0.50481904, y: 3.05, z: -8.201789} m_LocalScale: {x: 2, y: 6, z: 2} - m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} m_Children: [] m_Father: {fileID: 1474803928} m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} --- !u!23 &97775142 MeshRenderer: m_ObjectHideFlags: 0 @@ -134,7 +152,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 926489ece7dc4c440977be56882d0bd0, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -142,12 +162,13 @@ MeshRenderer: m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &97775144 MeshFilter: @@ -161,11 +182,11 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 100020, guid: b505ecb46d46f8748abdafa5bec5eaaf, type: 3} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 276435861} - - 33: {fileID: 276435863} - - 23: {fileID: 276435862} + - component: {fileID: 276435861} + - component: {fileID: 276435863} + - component: {fileID: 276435862} m_Layer: 0 m_Name: floor m_TagString: Untagged @@ -182,10 +203,10 @@ Transform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0.06901227, z: 0} m_LocalScale: {x: 218.14139, y: 3.1542416, z: 218.14139} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_Children: [] m_Father: {fileID: 1474803928} m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &276435862 MeshRenderer: m_ObjectHideFlags: 0 @@ -201,7 +222,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 4b129a766c919aa4487b71dce37531d8, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -209,12 +232,13 @@ MeshRenderer: m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &276435863 MeshFilter: @@ -229,10 +253,10 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 298178201} - - 108: {fileID: 298178200} + - component: {fileID: 298178201} + - component: {fileID: 298178200} m_Layer: 0 m_Name: pointlight m_TagString: Untagged @@ -247,7 +271,7 @@ Light: m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 298178199} m_Enabled: 1 - serializedVersion: 7 + serializedVersion: 8 m_Type: 1 m_Color: {r: 0.75, g: 0.75, b: 0.75, a: 1} m_Intensity: 1 @@ -272,6 +296,8 @@ Light: m_Lightmapping: 1 m_AreaSize: {x: 1, y: 1} m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 --- !u!4 &298178201 @@ -283,20 +309,20 @@ Transform: m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} m_Children: [] m_Father: {fileID: 805800313} m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} --- !u!1 &361992479 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 361992480} - - 33: {fileID: 361992483} - - 23: {fileID: 361992481} + - component: {fileID: 361992480} + - component: {fileID: 361992483} + - component: {fileID: 361992481} m_Layer: 0 m_Name: pillar m_TagString: Untagged @@ -313,10 +339,10 @@ Transform: m_LocalRotation: {x: 0, y: -0.7071068, z: 0, w: 0.7071068} m_LocalPosition: {x: -0.4848179, y: 1.532, z: 8.949689} m_LocalScale: {x: 2, y: 2.9627726, z: 2.000002} - m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} m_Children: [] m_Father: {fileID: 1474803928} m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} --- !u!23 &361992481 MeshRenderer: m_ObjectHideFlags: 0 @@ -331,7 +357,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 926489ece7dc4c440977be56882d0bd0, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -339,12 +367,13 @@ MeshRenderer: m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &361992483 MeshFilter: @@ -358,10 +387,10 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 432816919} - - 114: {fileID: 432816918} + - component: {fileID: 432816919} + - component: {fileID: 432816918} m_Layer: 0 m_Name: QuitOnEscape m_TagString: Untagged @@ -389,20 +418,20 @@ Transform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0.5675555, y: -0.08848229, z: -2.038508} m_LocalScale: {x: 1, y: 1, z: 1} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &681714040 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 681714041} - - 33: {fileID: 681714044} - - 23: {fileID: 681714042} + - component: {fileID: 681714041} + - component: {fileID: 681714044} + - component: {fileID: 681714042} m_Layer: 0 m_Name: pillar m_TagString: Untagged @@ -419,10 +448,10 @@ Transform: m_LocalRotation: {x: -0, y: -0.3877868, z: -0, w: 0.9217491} m_LocalPosition: {x: 6.0164957, y: 0.955, z: 6.5148067} m_LocalScale: {x: 2, y: 1.8097968, z: 2} - m_LocalEulerAnglesHint: {x: 0, y: -45.634003, z: 0} m_Children: [] m_Father: {fileID: 1474803928} m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -45.634003, z: 0} --- !u!23 &681714042 MeshRenderer: m_ObjectHideFlags: 0 @@ -437,7 +466,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 926489ece7dc4c440977be56882d0bd0, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -445,12 +476,13 @@ MeshRenderer: m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &681714044 MeshFilter: @@ -509,6 +541,52 @@ Prefab: m_RemovedComponents: [] m_ParentPrefab: {fileID: 100100000, guid: 0b82dd794175b304a87805e4b38fbe84, type: 2} m_IsPrefabParent: 0 +--- !u!1001 &768058370 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4234171006776236, guid: d5378b36bf661cc41ba14eeed487417e, type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4234171006776236, guid: d5378b36bf661cc41ba14eeed487417e, type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4234171006776236, guid: d5378b36bf661cc41ba14eeed487417e, type: 2} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4234171006776236, guid: d5378b36bf661cc41ba14eeed487417e, type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4234171006776236, guid: d5378b36bf661cc41ba14eeed487417e, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4234171006776236, guid: d5378b36bf661cc41ba14eeed487417e, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4234171006776236, guid: d5378b36bf661cc41ba14eeed487417e, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4234171006776236, guid: d5378b36bf661cc41ba14eeed487417e, type: 2} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 1194294178642958, guid: d5378b36bf661cc41ba14eeed487417e, type: 2} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: d5378b36bf661cc41ba14eeed487417e, type: 2} + m_IsPrefabParent: 0 --- !u!1001 &800756649 Prefab: m_ObjectHideFlags: 0 @@ -548,6 +626,10 @@ Prefab: propertyPath: m_RootOrder value: 3 objectReference: {fileID: 0} + - target: {fileID: 1907447898282924, guid: 8e57e3c8e2a715f4d970247716df86c7, type: 2} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} m_RemovedComponents: [] m_ParentPrefab: {fileID: 100100000, guid: 8e57e3c8e2a715f4d970247716df86c7, type: 2} m_IsPrefabParent: 0 @@ -556,12 +638,12 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 805800313} - - 33: {fileID: 805800312} - - 135: {fileID: 805800311} - - 23: {fileID: 805800310} + - component: {fileID: 805800313} + - component: {fileID: 805800312} + - component: {fileID: 805800311} + - component: {fileID: 805800310} m_Layer: 0 m_Name: sun m_TagString: Untagged @@ -583,7 +665,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 1be7eb640bbc552438766068864f6b66, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -591,12 +675,13 @@ MeshRenderer: m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!135 &805800311 SphereCollider: @@ -626,22 +711,22 @@ Transform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 80.376, z: 0} m_LocalScale: {x: 9.727282, y: 9.727276, z: 9.727276} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_Children: - {fileID: 298178201} - {fileID: 1706894959} m_Father: {fileID: 1474803928} m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1024092978 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 100018, guid: b505ecb46d46f8748abdafa5bec5eaaf, type: 3} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 1024092979} - - 33: {fileID: 1024092981} - - 23: {fileID: 1024092980} + - component: {fileID: 1024092979} + - component: {fileID: 1024092981} + - component: {fileID: 1024092980} m_Layer: 0 m_Name: floor m_TagString: Untagged @@ -658,10 +743,10 @@ Transform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: -0.0070893243, z: 0} m_LocalScale: {x: 1.477957, y: 1.477957, z: 1.477957} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_Children: [] m_Father: {fileID: 1474803928} m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1024092980 MeshRenderer: m_ObjectHideFlags: 0 @@ -677,7 +762,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 4b129a766c919aa4487b71dce37531d8, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -685,12 +772,13 @@ MeshRenderer: m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &1024092981 MeshFilter: @@ -705,11 +793,11 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 1053001829} - - 33: {fileID: 1053001832} - - 23: {fileID: 1053001830} + - component: {fileID: 1053001829} + - component: {fileID: 1053001832} + - component: {fileID: 1053001830} m_Layer: 0 m_Name: pillar m_TagString: Untagged @@ -726,10 +814,10 @@ Transform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -8.58, y: 2.336, z: 0.37395} m_LocalScale: {x: 2, y: 4.5728035, z: 2.000001} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_Children: [] m_Father: {fileID: 1474803928} m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1053001830 MeshRenderer: m_ObjectHideFlags: 0 @@ -744,7 +832,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 926489ece7dc4c440977be56882d0bd0, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -752,12 +842,13 @@ MeshRenderer: m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &1053001832 MeshFilter: @@ -771,11 +862,11 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 100016, guid: b505ecb46d46f8748abdafa5bec5eaaf, type: 3} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 1233944574} - - 33: {fileID: 1233944576} - - 23: {fileID: 1233944575} + - component: {fileID: 1233944574} + - component: {fileID: 1233944576} + - component: {fileID: 1233944575} m_Layer: 0 m_Name: floor m_TagString: Untagged @@ -792,10 +883,10 @@ Transform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -0, y: -0.24301311, z: 0} m_LocalScale: {x: 4.938097, y: 4.9380946, z: 4.9380946} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_Children: [] m_Father: {fileID: 1474803928} m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1233944575 MeshRenderer: m_ObjectHideFlags: 0 @@ -811,7 +902,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 4b129a766c919aa4487b71dce37531d8, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -819,12 +912,13 @@ MeshRenderer: m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &1233944576 MeshFilter: @@ -839,11 +933,11 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 1375509065} - - 33: {fileID: 1375509068} - - 23: {fileID: 1375509066} + - component: {fileID: 1375509065} + - component: {fileID: 1375509068} + - component: {fileID: 1375509066} m_Layer: 0 m_Name: pillar m_TagString: Untagged @@ -860,10 +954,10 @@ Transform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 8.6, y: 0.595, z: 0.37395} m_LocalScale: {x: 2, y: 1.0907731, z: 2.000001} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_Children: [] m_Father: {fileID: 1474803928} m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1375509066 MeshRenderer: m_ObjectHideFlags: 0 @@ -878,7 +972,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 926489ece7dc4c440977be56882d0bd0, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -886,12 +982,13 @@ MeshRenderer: m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &1375509068 MeshFilter: @@ -905,9 +1002,9 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 100022, guid: b505ecb46d46f8748abdafa5bec5eaaf, type: 3} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 1474803928} + - component: {fileID: 1474803928} m_Layer: 0 m_Name: environment m_TagString: Untagged @@ -924,7 +1021,6 @@ Transform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: -1.5, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_Children: - {fileID: 1375509065} - {fileID: 1053001829} @@ -941,16 +1037,17 @@ Transform: - {fileID: 805800313} m_Father: {fileID: 0} m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1579802414 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 1579802415} - - 33: {fileID: 1579802418} - - 23: {fileID: 1579802416} + - component: {fileID: 1579802415} + - component: {fileID: 1579802418} + - component: {fileID: 1579802416} m_Layer: 0 m_Name: pillar m_TagString: Untagged @@ -967,10 +1064,10 @@ Transform: m_LocalRotation: {x: -0, y: -0.92598146, z: -0, w: 0.3775691} m_LocalPosition: {x: -6.466659, y: 1.902, z: 6.0167375} m_LocalScale: {x: 2.000001, y: 3.7039647, z: 2.000002} - m_LocalEulerAnglesHint: {x: 0, y: -135.634, z: 0} m_Children: [] m_Father: {fileID: 1474803928} m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: -135.634, z: 0} --- !u!23 &1579802416 MeshRenderer: m_ObjectHideFlags: 0 @@ -985,7 +1082,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 926489ece7dc4c440977be56882d0bd0, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -993,12 +1092,13 @@ MeshRenderer: m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &1579802418 MeshFilter: @@ -1012,11 +1112,11 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 1584297551} - - 33: {fileID: 1584297554} - - 23: {fileID: 1584297552} + - component: {fileID: 1584297551} + - component: {fileID: 1584297554} + - component: {fileID: 1584297552} m_Layer: 0 m_Name: pillar m_TagString: Untagged @@ -1033,10 +1133,10 @@ Transform: m_LocalRotation: {x: -0, y: -0.92598146, z: -0, w: 0.3775691} m_LocalPosition: {x: 6.486658, y: 0.204, z: -5.268836} m_LocalScale: {x: 2.000001, y: 0.30846643, z: 2.000001} - m_LocalEulerAnglesHint: {x: 0, y: -135.634, z: 0} m_Children: [] m_Father: {fileID: 1474803928} m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: -135.634, z: 0} --- !u!23 &1584297552 MeshRenderer: m_ObjectHideFlags: 0 @@ -1051,7 +1151,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 926489ece7dc4c440977be56882d0bd0, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -1059,12 +1161,13 @@ MeshRenderer: m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &1584297554 MeshFilter: @@ -1078,11 +1181,11 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 1589557434} - - 33: {fileID: 1589557437} - - 23: {fileID: 1589557435} + - component: {fileID: 1589557434} + - component: {fileID: 1589557437} + - component: {fileID: 1589557435} m_Layer: 0 m_Name: pillar m_TagString: Untagged @@ -1099,10 +1202,10 @@ Transform: m_LocalRotation: {x: -0, y: -0.3877868, z: -0, w: 0.9217491} m_LocalPosition: {x: -5.9964952, y: 2.777, z: -5.7669067} m_LocalScale: {x: 2, y: 5.454432, z: 2.000001} - m_LocalEulerAnglesHint: {x: 0, y: -45.634003, z: 0} m_Children: [] m_Father: {fileID: 1474803928} m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: -45.634003, z: 0} --- !u!23 &1589557435 MeshRenderer: m_ObjectHideFlags: 0 @@ -1117,7 +1220,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 926489ece7dc4c440977be56882d0bd0, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -1125,12 +1230,13 @@ MeshRenderer: m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &1589557437 MeshFilter: @@ -1144,11 +1250,11 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 1706894959} - - 198: {fileID: 1706894961} - - 199: {fileID: 1706894960} + - component: {fileID: 1706894959} + - component: {fileID: 1706894961} + - component: {fileID: 1706894960} m_Layer: 0 m_Name: particle system m_TagString: Untagged @@ -1165,12 +1271,13 @@ Transform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_Children: [] m_Father: {fileID: 805800313} m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!199 &1706894960 ParticleSystemRenderer: + serializedVersion: 3 m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} @@ -1184,7 +1291,9 @@ ParticleSystemRenderer: m_Materials: - {fileID: 10301, guid: 0000000000000000f000000000000000, type: 0} - {fileID: 0} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -1192,12 +1301,13 @@ ParticleSystemRenderer: m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 1 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 m_RenderMode: 0 m_SortMode: 0 @@ -1210,6 +1320,8 @@ ParticleSystemRenderer: m_NormalDirection: 1 m_RenderAlignment: 0 m_Pivot: {x: 0, y: 0, z: 0} + m_UseCustomVertexStreams: 0 + m_VertexStreams: 0001030405 m_Mesh: {fileID: 0} m_Mesh1: {fileID: 0} m_Mesh2: {fileID: 0} @@ -1220,65 +1332,53 @@ ParticleSystem: m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1706894958} - serializedVersion: 4 + serializedVersion: 5 lengthInSec: 5 + simulationSpeed: 1 + looping: 1 + prewarm: 1 + playOnAwake: 1 + autoRandomSeed: 1 startDelay: + serializedVersion: 2 + minMaxState: 0 scalar: 0 + minScalar: 0 maxCurve: serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 + m_Curve: [] m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 minCurve: serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 + m_Curve: [] m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 - speed: 1 - looping: 1 - prewarm: 1 - playOnAwake: 1 - moveWithTransform: 0 - autoRandomSeed: 1 + moveWithTransform: 1 + moveWithCustomTransform: {fileID: 0} scalingMode: 1 randomSeed: 1444735993 InitialModule: - serializedVersion: 2 + serializedVersion: 3 enabled: 1 startLifetime: + serializedVersion: 2 + minMaxState: 0 scalar: 0.2 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -1289,12 +1389,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -1302,18 +1404,22 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 startSpeed: + serializedVersion: 2 + minMaxState: 0 scalar: 8 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -1324,12 +1430,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -1337,34 +1445,21 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 startColor: serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} maxGradient: - key0: - serializedVersion: 2 - rgba: 4294967295 - key1: - serializedVersion: 2 - rgba: 4294967295 - key2: - serializedVersion: 2 - rgba: 0 - key3: - serializedVersion: 2 - rgba: 0 - key4: - serializedVersion: 2 - rgba: 0 - key5: - serializedVersion: 2 - rgba: 0 - key6: - serializedVersion: 2 - rgba: 0 - key7: - serializedVersion: 2 - rgba: 0 + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} ctime0: 0 ctime1: 65535 ctime2: 0 @@ -1381,33 +1476,19 @@ ParticleSystem: atime5: 0 atime6: 0 atime7: 0 + m_Mode: 0 m_NumColorKeys: 2 m_NumAlphaKeys: 2 minGradient: - key0: - serializedVersion: 2 - rgba: 4294967295 - key1: - serializedVersion: 2 - rgba: 4294967295 - key2: - serializedVersion: 2 - rgba: 0 - key3: - serializedVersion: 2 - rgba: 0 - key4: - serializedVersion: 2 - rgba: 0 - key5: - serializedVersion: 2 - rgba: 0 - key6: - serializedVersion: 2 - rgba: 0 - key7: - serializedVersion: 2 - rgba: 0 + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} ctime0: 0 ctime1: 65535 ctime2: 0 @@ -1424,22 +1505,25 @@ ParticleSystem: atime5: 0 atime6: 0 atime7: 0 + m_Mode: 0 m_NumColorKeys: 2 m_NumAlphaKeys: 2 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} - minMaxState: 0 startSize: + serializedVersion: 2 + minMaxState: 0 scalar: 1.98 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -1450,12 +1534,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -1463,18 +1549,22 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 startSizeY: + serializedVersion: 2 + minMaxState: 0 scalar: 1 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -1485,12 +1575,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -1498,18 +1590,22 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 startSizeZ: + serializedVersion: 2 + minMaxState: 0 scalar: 1 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -1520,12 +1616,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -1533,18 +1631,22 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 startRotationX: + serializedVersion: 2 + minMaxState: 0 scalar: 0 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -1555,12 +1657,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -1568,18 +1672,22 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 startRotationY: + serializedVersion: 2 + minMaxState: 0 scalar: 0 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -1590,12 +1698,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -1603,18 +1713,22 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 startRotation: + serializedVersion: 2 + minMaxState: 0 scalar: 0 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -1625,12 +1739,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -1638,47 +1754,181 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 randomizeRotationDirection: 0 - gravityModifier: NaN maxNumParticles: 1000 size3D: 0 rotation3D: 0 + gravityModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: NaN + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0.5 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.5 + inSlope: 0.5 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 ShapeModule: - serializedVersion: 2 + serializedVersion: 4 enabled: 1 type: 14 - radius: 0.01 angle: 84.02 length: 5 boxX: 1 boxY: 1 boxZ: 1 - arc: NaN + radius: + value: 0.01 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0.5 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.5 + inSlope: 0.5 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + arc: + value: NaN + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0.5 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.5 + inSlope: 0.5 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 placementMode: 0 m_Mesh: {fileID: 0} m_MeshRenderer: {fileID: 0} m_SkinnedMeshRenderer: {fileID: 0} m_MeshMaterialIndex: 0 m_MeshNormalOffset: 0 + m_MeshScale: 1 m_UseMeshMaterialIndex: 0 m_UseMeshColors: 1 - randomDirection: 0 + alignToDirection: 0 + randomDirectionAmount: 0 + sphericalDirectionAmount: 0 EmissionModule: enabled: 1 - serializedVersion: 2 - m_Type: 0 - rate: + serializedVersion: 4 + rateOverTime: + serializedVersion: 2 + minMaxState: 0 scalar: 10 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -1689,12 +1939,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -1702,33 +1954,67 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 + rateOverDistance: + serializedVersion: 2 minMaxState: 0 - cnt0: 30 - cnt1: 30 - cnt2: 30 - cnt3: 30 - cntmax0: 30 - cntmax1: 30 - cntmax2: 30 - cntmax3: 30 - time0: 0 - time1: 0 - time2: 0 - time3: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0.5 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.5 + inSlope: 0.5 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 m_BurstCount: 0 + m_Bursts: [] SizeModule: enabled: 1 curve: + serializedVersion: 2 + minMaxState: 1 scalar: 1 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 1 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 1 outSlope: 0 @@ -1739,12 +2025,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -1752,18 +2040,22 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 1 y: + serializedVersion: 2 + minMaxState: 1 scalar: 1 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 1 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 1 outSlope: 0 @@ -1774,12 +2066,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -1787,18 +2081,22 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 1 z: + serializedVersion: 2 + minMaxState: 1 scalar: 1 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 1 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 1 outSlope: 0 @@ -1809,12 +2107,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -1822,21 +2122,25 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 1 separateAxes: 0 RotationModule: enabled: 0 x: + serializedVersion: 2 + minMaxState: 0 scalar: 0 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -1847,12 +2151,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -1860,18 +2166,22 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 y: + serializedVersion: 2 + minMaxState: 0 scalar: 0 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -1882,12 +2192,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -1895,18 +2207,22 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 curve: + serializedVersion: 2 + minMaxState: 0 scalar: 0.7853982 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -1917,12 +2233,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -1930,37 +2248,24 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 separateAxes: 0 ColorModule: enabled: 0 gradient: serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} maxGradient: - key0: - serializedVersion: 2 - rgba: 4294967295 - key1: - serializedVersion: 2 - rgba: 4294967295 - key2: - serializedVersion: 2 - rgba: 0 - key3: - serializedVersion: 2 - rgba: 0 - key4: - serializedVersion: 2 - rgba: 0 - key5: - serializedVersion: 2 - rgba: 0 - key6: - serializedVersion: 2 - rgba: 0 - key7: - serializedVersion: 2 - rgba: 0 + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} ctime0: 0 ctime1: 65535 ctime2: 0 @@ -1977,33 +2282,19 @@ ParticleSystem: atime5: 0 atime6: 0 atime7: 0 + m_Mode: 0 m_NumColorKeys: 2 m_NumAlphaKeys: 2 minGradient: - key0: - serializedVersion: 2 - rgba: 4294967295 - key1: - serializedVersion: 2 - rgba: 4294967295 - key2: - serializedVersion: 2 - rgba: 0 - key3: - serializedVersion: 2 - rgba: 0 - key4: - serializedVersion: 2 - rgba: 0 - key5: - serializedVersion: 2 - rgba: 0 - key6: - serializedVersion: 2 - rgba: 0 - key7: - serializedVersion: 2 - rgba: 0 + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} ctime0: 0 ctime1: 65535 ctime2: 0 @@ -2020,24 +2311,27 @@ ParticleSystem: atime5: 0 atime6: 0 atime7: 0 + m_Mode: 0 m_NumColorKeys: 2 m_NumAlphaKeys: 2 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} - minMaxState: 1 UVModule: enabled: 0 frameOverTime: + serializedVersion: 2 + minMaxState: 1 scalar: 0.9999 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 1 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 1 outSlope: 0 @@ -2048,12 +2342,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -2061,18 +2357,22 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 1 startFrame: + serializedVersion: 2 + minMaxState: 0 scalar: 0 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -2083,12 +2383,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -2096,27 +2398,33 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 tilesX: 1 tilesY: 1 animationType: 0 rowIndex: 0 cycles: 1 uvChannelMask: -1 + flipU: 0 + flipV: 0 randomRow: 1 VelocityModule: enabled: 0 x: + serializedVersion: 2 + minMaxState: 0 scalar: 0 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -2127,12 +2435,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -2140,18 +2450,22 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 y: + serializedVersion: 2 + minMaxState: 0 scalar: 0 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -2162,12 +2476,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -2175,18 +2491,22 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 z: - scalar: 0 + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -2197,12 +2517,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -2210,22 +2532,26 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 inWorldSpace: 0 InheritVelocityModule: enabled: 0 m_Mode: 0 m_Curve: + serializedVersion: 2 + minMaxState: 0 scalar: 0 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -2236,12 +2562,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -2249,20 +2577,24 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 ForceModule: enabled: 0 x: + serializedVersion: 2 + minMaxState: 0 scalar: 0 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -2273,12 +2605,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -2286,18 +2620,22 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 y: + serializedVersion: 2 + minMaxState: 0 scalar: 0 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -2308,12 +2646,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -2321,18 +2661,22 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 z: + serializedVersion: 2 + minMaxState: 0 scalar: 0 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -2343,12 +2687,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -2356,7 +2702,6 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 inWorldSpace: 0 randomizePerFrame: 0 ExternalForcesModule: @@ -2365,16 +2710,21 @@ ParticleSystem: ClampVelocityModule: enabled: 0 x: + serializedVersion: 2 + minMaxState: 0 scalar: 1 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -2385,12 +2735,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -2398,18 +2750,22 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 y: + serializedVersion: 2 + minMaxState: 0 scalar: 1 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -2420,12 +2776,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -2433,18 +2791,22 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 z: + serializedVersion: 2 + minMaxState: 0 scalar: 1 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -2455,12 +2817,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -2468,18 +2832,22 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 magnitude: + serializedVersion: 2 + minMaxState: 0 scalar: 1 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -2490,12 +2858,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -2503,23 +2873,27 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 separateAxis: 0 inWorldSpace: 0 dampen: 1 - SizeBySpeedModule: + NoiseModule: enabled: 0 - curve: + strength: + serializedVersion: 2 + minMaxState: 0 scalar: 1 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 1 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 1 outSlope: 0 @@ -2530,31 +2904,37 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 - value: 1 + - serializedVersion: 2 + time: 0 + value: 0 inSlope: 0 - outSlope: 0 + outSlope: 0.5 tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 + - serializedVersion: 2 + time: 1 + value: 0.5 + inSlope: 0.5 outSlope: 0 tangentMode: 0 m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 1 - y: + strengthY: + serializedVersion: 2 + minMaxState: 0 scalar: 1 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 1 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 1 outSlope: 0 @@ -2565,31 +2945,37 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 - value: 1 + - serializedVersion: 2 + time: 0 + value: 0 inSlope: 0 - outSlope: 0 + outSlope: 0.5 tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 + - serializedVersion: 2 + time: 1 + value: 0.5 + inSlope: 0.5 outSlope: 0 tangentMode: 0 m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 1 - z: + strengthZ: + serializedVersion: 2 + minMaxState: 0 scalar: 1 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 1 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 1 outSlope: 0 @@ -2600,107 +2986,213 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 - value: 1 + - serializedVersion: 2 + time: 0 + value: 0 inSlope: 0 - outSlope: 0 + outSlope: 0.5 tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 + - serializedVersion: 2 + time: 1 + value: 0.5 + inSlope: 0.5 outSlope: 0 tangentMode: 0 m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 1 - range: {x: 0, y: 1} separateAxes: 0 - RotationBySpeedModule: - enabled: 0 - x: + frequency: 0.5 + damping: 1 + octaves: 1 + octaveMultiplier: 0.5 + octaveScale: 2 + quality: 2 + scrollSpeed: + serializedVersion: 2 + minMaxState: 0 scalar: 0 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 outSlope: 0 tangentMode: 0 - - time: 1 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 + outSlope: 0.5 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.5 + inSlope: 0.5 outSlope: 0 tangentMode: 0 m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minCurve: + remap: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 0 + maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 outSlope: 0 tangentMode: 0 - - time: 1 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 + outSlope: 0.5 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.5 + inSlope: 0.5 outSlope: 0 tangentMode: 0 m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 - y: - scalar: 0 + remapY: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 outSlope: 0 tangentMode: 0 - - time: 1 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 + outSlope: 0.5 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.5 + inSlope: 0.5 outSlope: 0 tangentMode: 0 m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minCurve: + remapZ: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 0 + maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 outSlope: 0 tangentMode: 0 - - time: 1 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 + outSlope: 0.5 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.5 + inSlope: 0.5 outSlope: 0 tangentMode: 0 m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 + remapEnabled: 0 + SizeBySpeedModule: + enabled: 0 curve: - scalar: 0.7853982 + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 - value: 1 + - serializedVersion: 2 + time: 0 + value: 0 inSlope: 0 - outSlope: 0 + outSlope: 1 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 - inSlope: 0 + inSlope: 1 outSlope: 0 tangentMode: 0 m_PreInfinity: 2 @@ -2709,12 +3201,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -2722,127 +3216,24 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 - separateAxes: 0 - range: {x: 0, y: 1} - ColorBySpeedModule: - enabled: 0 - gradient: + y: serializedVersion: 2 - maxGradient: - key0: - serializedVersion: 2 - rgba: 4294967295 - key1: - serializedVersion: 2 - rgba: 4294967295 - key2: - serializedVersion: 2 - rgba: 0 - key3: - serializedVersion: 2 - rgba: 0 - key4: - serializedVersion: 2 - rgba: 0 - key5: - serializedVersion: 2 - rgba: 0 - key6: - serializedVersion: 2 - rgba: 0 - key7: - serializedVersion: 2 - rgba: 0 - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minGradient: - key0: - serializedVersion: 2 - rgba: 4294967295 - key1: - serializedVersion: 2 - rgba: 4294967295 - key2: - serializedVersion: 2 - rgba: 0 - key3: - serializedVersion: 2 - rgba: 0 - key4: - serializedVersion: 2 - rgba: 0 - key5: - serializedVersion: 2 - rgba: 0 - key6: - serializedVersion: 2 - rgba: 0 - key7: - serializedVersion: 2 - rgba: 0 - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} minMaxState: 1 - range: {x: 0, y: 1} - CollisionModule: - enabled: 0 - serializedVersion: 3 - type: 0 - collisionMode: 0 - plane0: {fileID: 0} - plane1: {fileID: 0} - plane2: {fileID: 0} - plane3: {fileID: 0} - plane4: {fileID: 0} - plane5: {fileID: 0} - m_Dampen: - scalar: 0 + scalar: 1 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 - outSlope: 0 + outSlope: 1 tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 outSlope: 0 tangentMode: 0 m_PreInfinity: 2 @@ -2851,33 +3242,39 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 - value: 0 + - serializedVersion: 2 + time: 0 + value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 - value: 0 + - serializedVersion: 2 + time: 1 + value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 - m_Bounce: + z: + serializedVersion: 2 + minMaxState: 1 scalar: 1 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 - value: 1 + - serializedVersion: 2 + time: 0 + value: 0 inSlope: 0 - outSlope: 0 + outSlope: 1 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 - inSlope: 0 + inSlope: 1 outSlope: 0 tangentMode: 0 m_PreInfinity: 2 @@ -2886,12 +3283,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 1 inSlope: 0 outSlope: 0 @@ -2899,18 +3298,26 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 + range: {x: 0, y: 1} + separateAxes: 0 + RotationBySpeedModule: + enabled: 0 + x: + serializedVersion: 2 minMaxState: 0 - m_EnergyLossOnCollision: scalar: 0 + minScalar: 0 maxCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -2921,12 +3328,14 @@ ParticleSystem: minCurve: serializedVersion: 2 m_Curve: - - time: 0 + - serializedVersion: 2 + time: 0 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - time: 1 + - serializedVersion: 2 + time: 1 value: 0 inSlope: 0 outSlope: 0 @@ -2934,21 +3343,304 @@ ParticleSystem: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - minMaxState: 0 - minKillSpeed: 0 - maxKillSpeed: 10000 - radiusScale: 1 - collidesWith: + y: serializedVersion: 2 - m_Bits: 4294967295 - maxCollisionShapes: 256 - quality: 0 - voxelSize: 0.5 - collisionMessages: 0 - collidesWithDynamic: 1 - interiorCollisions: 0 - TriggerModule: - enabled: 0 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + range: {x: 0, y: 1} + ColorBySpeedModule: + enabled: 0 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + range: {x: 0, y: 1} + CollisionModule: + enabled: 0 + serializedVersion: 3 + type: 0 + collisionMode: 0 + plane0: {fileID: 0} + plane1: {fileID: 0} + plane2: {fileID: 0} + plane3: {fileID: 0} + plane4: {fileID: 0} + plane5: {fileID: 0} + m_Dampen: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Bounce: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_EnergyLossOnCollision: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minKillSpeed: 0 + maxKillSpeed: 10000 + radiusScale: 1 + collidesWith: + serializedVersion: 2 + m_Bits: 4294967295 + maxCollisionShapes: 256 + quality: 0 + voxelSize: 0.5 + collisionMessages: 0 + collidesWithDynamic: 1 + interiorCollisions: 0 + TriggerModule: + enabled: 0 collisionShape0: {fileID: 0} collisionShape1: {fileID: 0} collisionShape2: {fileID: 0} @@ -2961,24 +3653,792 @@ ParticleSystem: exit: 0 radiusScale: 1 SubModule: + serializedVersion: 2 + enabled: 0 + subEmitters: + - emitter: {fileID: 0} + type: 0 + properties: 0 + LightsModule: enabled: 0 - subEmitterBirth: {fileID: 0} - subEmitterBirth1: {fileID: 0} - subEmitterCollision: {fileID: 0} - subEmitterCollision1: {fileID: 0} - subEmitterDeath: {fileID: 0} - subEmitterDeath1: {fileID: 0} + ratio: 0 + light: {fileID: 0} + randomDistribution: 1 + color: 1 + range: 1 + intensity: 1 + rangeCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0.5 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.5 + inSlope: 0.5 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + intensityCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0.5 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.5 + inSlope: 0.5 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + maxLights: 20 + TrailModule: + enabled: 0 + ratio: 1 + lifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0.5 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.5 + inSlope: 0.5 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minVertexDistance: 0.2 + textureMode: 0 + worldSpace: 0 + dieWithParticles: 1 + sizeAffectsWidth: 1 + sizeAffectsLifetime: 0 + inheritParticleColor: 1 + colorOverLifetime: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + widthOverTrail: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0.5 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.5 + inSlope: 0.5 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorOverTrail: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + CustomDataModule: + enabled: 0 + mode0: 0 + vectorComponentCount0: 4 + color0: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + vector0_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0.5 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.5 + inSlope: 0.5 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vector0_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0.5 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.5 + inSlope: 0.5 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vector0_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0.5 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.5 + inSlope: 0.5 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vector0_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0.5 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.5 + inSlope: 0.5 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + mode1: 0 + vectorComponentCount1: 4 + color1: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + vector1_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0.5 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.5 + inSlope: 0.5 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vector1_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0.5 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.5 + inSlope: 0.5 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vector1_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0.5 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.5 + inSlope: 0.5 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vector1_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0.5 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.5 + inSlope: 0.5 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 --- !u!1 &1814809801 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 1814809805} - - 33: {fileID: 1814809804} - - 135: {fileID: 1814809803} - - 23: {fileID: 1814809802} + - component: {fileID: 1814809805} + - component: {fileID: 1814809804} + - component: {fileID: 1814809803} + - component: {fileID: 1814809802} m_Layer: 0 m_Name: moon m_TagString: Untagged @@ -3000,7 +4460,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 84759e1ab6862004baa1620fcdf97ae1, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -3008,12 +4470,13 @@ MeshRenderer: m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!135 &1814809803 SphereCollider: @@ -3043,7 +4506,7 @@ Transform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 70.732, z: 0} m_LocalScale: {x: 7.510821, y: 7.510817, z: 7.510817} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_Children: [] m_Father: {fileID: 1474803928} m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/OSVR-Unity/Assets/OSVRUnity/src/OsvrRenderManager.cs b/OSVR-Unity/Assets/OSVRUnity/src/OsvrRenderManager.cs index 8bf3a3b..922ad8d 100644 --- a/OSVR-Unity/Assets/OSVRUnity/src/OsvrRenderManager.cs +++ b/OSVR-Unity/Assets/OSVRUnity/src/OsvrRenderManager.cs @@ -109,7 +109,7 @@ private static extern void // If so, change the return type here to Byte [DllImport(PluginName)] private static extern int - SetColorBufferFromUnity(System.IntPtr texturePtr, int eye); + SetColorBufferFromUnity(System.IntPtr texturePtr, int eye, int frame); [DllImport(PluginName)] private static extern void @@ -130,7 +130,7 @@ private static extern void // UnityPluginLoad is not needed // UnityPluginUnload is not needed - private bool _linkDebug = false; //causes crash on exit if true, only enable for debugging + private bool _linkDebug = true; //causes crash on exit if true, only enable for debugging //persistent singleton private static OsvrRenderManager _instance; @@ -311,9 +311,9 @@ public int CreateRenderManager(OSVR.ClientKit.ClientContext clientContext) } //Pass pointer to eye-camera RenderTexture to the Unity Rendering Plugin - public void SetEyeColorBuffer(IntPtr colorBuffer, int eye) + public void SetEyeColorBuffer(IntPtr colorBuffer, int eye, int frame) { - SetColorBufferFromUnity(colorBuffer, eye); + SetColorBufferFromUnity(colorBuffer, eye, frame); } //Get a pointer to the plugin's rendering function diff --git a/OSVR-Unity/Assets/OSVRUnity/src/OsvrUnityNativeVR.cs b/OSVR-Unity/Assets/OSVRUnity/src/OsvrUnityNativeVR.cs index 7f1ac0c..03ce4f0 100644 --- a/OSVR-Unity/Assets/OSVRUnity/src/OsvrUnityNativeVR.cs +++ b/OSVR-Unity/Assets/OSVRUnity/src/OsvrUnityNativeVR.cs @@ -331,8 +331,10 @@ private void CreateRenderTextures() RenderTexture.active = StereoTargetRenderTexture0; //Set the native texture pointer so we can access this texture from the plugin - RenderManager.SetEyeColorBuffer(renderTexture.GetNativeTexturePtr(), 0); - RenderManager.SetEyeColorBuffer(renderTexture.GetNativeTexturePtr(), 1); + RenderManager.SetEyeColorBuffer(renderTexture.GetNativeTexturePtr(), 0, 0); + RenderManager.SetEyeColorBuffer(renderTexture.GetNativeTexturePtr(), 1, 0); + RenderManager.SetEyeColorBuffer(renderTexture.GetNativeTexturePtr(), 0, 1); + RenderManager.SetEyeColorBuffer(renderTexture.GetNativeTexturePtr(), 1, 1); } else //two-camera setup { @@ -363,8 +365,10 @@ private void CreateRenderTextures() //set rendermanager color buffers //Set the native texture pointer so we can access this texture from the plugin - RenderManager.SetEyeColorBuffer(renderTexture0.GetNativeTexturePtr(), 0); - RenderManager.SetEyeColorBuffer(renderTexture1.GetNativeTexturePtr(), 1); + RenderManager.SetEyeColorBuffer(renderTexture0.GetNativeTexturePtr(), 0, 0); + RenderManager.SetEyeColorBuffer(renderTexture1.GetNativeTexturePtr(), 1, 0); + RenderManager.SetEyeColorBuffer(renderTexture0.GetNativeTexturePtr(), 0, 1); + RenderManager.SetEyeColorBuffer(renderTexture1.GetNativeTexturePtr(), 1, 1); } } diff --git a/OSVR-Unity/Assets/OSVRUnity/src/VRSurface.cs b/OSVR-Unity/Assets/OSVRUnity/src/VRSurface.cs index 76f1f38..e9d5b58 100644 --- a/OSVR-Unity/Assets/OSVRUnity/src/VRSurface.cs +++ b/OSVR-Unity/Assets/OSVRUnity/src/VRSurface.cs @@ -139,7 +139,7 @@ public void SetRenderTexture(RenderTexture rt) RenderTexture.active = RenderToTexture; //Set the native texture pointer so we can access this texture from the plugin - Eye.Viewer.DisplayController.RenderManager.SetEyeColorBuffer(RenderToTexture.GetNativeTexturePtr(), (int)Eye.EyeIndex); + Eye.Viewer.DisplayController.RenderManager.SetEyeColorBuffer(RenderToTexture.GetNativeTexturePtr(), (int)Eye.EyeIndex, 0); } public RenderTexture GetRenderTexture() { From d6f0bee90470269b25268dcbf2e360c553dd325a Mon Sep 17 00:00:00 2001 From: Greg Aring Date: Wed, 13 Dec 2017 20:48:30 -0500 Subject: [PATCH 2/7] Fixed crash in multi-pass code path --- .../Demo/Scenes/OSVR-UnityVR-Demo.unity | 4 +- .../Assets/OSVRUnity/src/OsvrRenderManager.cs | 6 +- .../Assets/OSVRUnity/src/OsvrUnityNativeVR.cs | 226 +++++++++++++----- 3 files changed, 173 insertions(+), 63 deletions(-) diff --git a/OSVR-Unity/Assets/OSVRUnity/Sample/Demo/Scenes/OSVR-UnityVR-Demo.unity b/OSVR-Unity/Assets/OSVRUnity/Sample/Demo/Scenes/OSVR-UnityVR-Demo.unity index c038ff5..f2b5ac3 100644 --- a/OSVR-Unity/Assets/OSVRUnity/Sample/Demo/Scenes/OSVR-UnityVR-Demo.unity +++ b/OSVR-Unity/Assets/OSVRUnity/Sample/Demo/Scenes/OSVR-UnityVR-Demo.unity @@ -582,7 +582,7 @@ Prefab: objectReference: {fileID: 0} - target: {fileID: 1194294178642958, guid: d5378b36bf661cc41ba14eeed487417e, type: 2} propertyPath: m_IsActive - value: 1 + value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] m_ParentPrefab: {fileID: 100100000, guid: d5378b36bf661cc41ba14eeed487417e, type: 2} @@ -628,7 +628,7 @@ Prefab: objectReference: {fileID: 0} - target: {fileID: 1907447898282924, guid: 8e57e3c8e2a715f4d970247716df86c7, type: 2} propertyPath: m_IsActive - value: 0 + value: 1 objectReference: {fileID: 0} m_RemovedComponents: [] m_ParentPrefab: {fileID: 100100000, guid: 8e57e3c8e2a715f4d970247716df86c7, type: 2} diff --git a/OSVR-Unity/Assets/OSVRUnity/src/OsvrRenderManager.cs b/OSVR-Unity/Assets/OSVRUnity/src/OsvrRenderManager.cs index 922ad8d..ade555b 100644 --- a/OSVR-Unity/Assets/OSVRUnity/src/OsvrRenderManager.cs +++ b/OSVR-Unity/Assets/OSVRUnity/src/OsvrRenderManager.cs @@ -109,7 +109,7 @@ private static extern void // If so, change the return type here to Byte [DllImport(PluginName)] private static extern int - SetColorBufferFromUnity(System.IntPtr texturePtr, int eye, int frame); + SetColorBufferFromUnity(System.IntPtr texturePtr, int eye, int buffer); [DllImport(PluginName)] private static extern void @@ -311,9 +311,9 @@ public int CreateRenderManager(OSVR.ClientKit.ClientContext clientContext) } //Pass pointer to eye-camera RenderTexture to the Unity Rendering Plugin - public void SetEyeColorBuffer(IntPtr colorBuffer, int eye, int frame) + public void SetEyeColorBuffer(IntPtr colorBuffer, int eye, int buffer) { - SetColorBufferFromUnity(colorBuffer, eye, frame); + SetColorBufferFromUnity(colorBuffer, eye, buffer); } //Get a pointer to the plugin's rendering function diff --git a/OSVR-Unity/Assets/OSVRUnity/src/OsvrUnityNativeVR.cs b/OSVR-Unity/Assets/OSVRUnity/src/OsvrUnityNativeVR.cs index 03ce4f0..87f395a 100644 --- a/OSVR-Unity/Assets/OSVRUnity/src/OsvrUnityNativeVR.cs +++ b/OSVR-Unity/Assets/OSVRUnity/src/OsvrUnityNativeVR.cs @@ -57,6 +57,11 @@ public enum StereoRigSetup [HideInInspector] public RenderTexture StereoTargetRenderTexture1; + [HideInInspector] + public RenderTexture StereoTargetRenderTexture0_buffer2; + [HideInInspector] + public RenderTexture StereoTargetRenderTexture1_buffer2; + private ClientKit _clientKit; private OSVR.ClientKit.DisplayConfig _displayConfig; @@ -68,7 +73,8 @@ public enum StereoRigSetup //variables for controlling use of osvrUnityRenderingPlugin.dll which enables DirectMode private OsvrRenderManager _renderManager; private bool _renderManagerConfigFound = false; - + // private IEnumerator _endOfFrameCoroutine; + // private WaitForEndOfFrame _waitForEndOfFrame; public OSVR.ClientKit.DisplayConfig DisplayConfig { @@ -89,23 +95,25 @@ public uint TotalDisplayHeight set { _totalSurfaceHeight = value; } } - + private int numBuffers = 2; + private int iteration = 1; + void Awake() { _camera0 = GetComponent(); _camera0CachedTransform = this.transform; if (stereoRigSetup == StereoRigSetup.TwoCameras) { - Camera[] cameras = transform.parent.GetComponentsInChildren(); - foreach(Camera c in cameras) + Camera[] cameras = transform.parent.GetComponentsInChildren(); + foreach (Camera c in cameras) { - if(c != _camera0) + if (c != _camera0) { _camera1 = c; //set the right eye camera to the main camera's sibling. _camera1CachedTransform = _camera1.transform; } } - if(cameras.Length < 2) + if (cameras.Length < 2) { Debug.LogError("[OSVR-Unity] Two-camera VR setup cannot find 2nd camera. Add a 2nd camera as a sibling of the main camera."); } @@ -225,8 +233,25 @@ void Init() RenderManager.ConstructBuffers(); } SetRenderParams(); - } + // _waitForEndOfFrame = new WaitForEndOfFrame(); + // _endOfFrameCoroutine = EndOfFrame(); + + // StartCoroutine(_endOfFrameCoroutine); + } + // This couroutine is called every frame. + /* IEnumerator EndOfFrame() + { + while (true) + { + yield return _waitForEndOfFrame; + if(_displayConfigInitialized && RenderManager != null && _renderManagerConfigFound) + { + SwapRenderTextures(); + + } + } + }*/ /* * We currently are only able to set the projection matrix of each eye with a two camera setup, via camera.projectionMatrix. * For configurations where the projection matrix for each eye is identical, we use the one-camera setup. @@ -261,7 +286,7 @@ private void SetupStereoCamerarig() _camera1 = rightEyeCamera; _camera1CachedTransform = _camera1.transform; } - } + } } @@ -320,6 +345,7 @@ private void CreateRenderTextures() if (stereoRigSetup == StereoRigSetup.OneCameraBothEyes) { + //create a RenderTexture for this eye's camera to render into RenderTexture renderTexture = new RenderTexture((int)TotalDisplayWidth, (int)TotalDisplayHeight, 24, RenderTextureFormat.Default); if (QualitySettings.antiAliasing > 0) @@ -327,14 +353,36 @@ private void CreateRenderTextures() renderTexture.antiAliasing = QualitySettings.antiAliasing; } StereoTargetRenderTexture0 = renderTexture; + StereoTargetRenderTexture0.Create(); _camera0.targetTexture = StereoTargetRenderTexture0; - RenderTexture.active = StereoTargetRenderTexture0; + // RenderTexture.active = StereoTargetRenderTexture0; //Set the native texture pointer so we can access this texture from the plugin RenderManager.SetEyeColorBuffer(renderTexture.GetNativeTexturePtr(), 0, 0); RenderManager.SetEyeColorBuffer(renderTexture.GetNativeTexturePtr(), 1, 0); - RenderManager.SetEyeColorBuffer(renderTexture.GetNativeTexturePtr(), 0, 1); - RenderManager.SetEyeColorBuffer(renderTexture.GetNativeTexturePtr(), 1, 1); + + if (numBuffers == 2) + { + //create a RenderTexture for this eye's camera to render into + RenderTexture rt2 = new RenderTexture((int)TotalDisplayWidth, (int)TotalDisplayHeight, 24, RenderTextureFormat.Default); + if (QualitySettings.antiAliasing > 0) + { + rt2.antiAliasing = QualitySettings.antiAliasing; + } + StereoTargetRenderTexture0_buffer2 = rt2; + StereoTargetRenderTexture0_buffer2.Create(); + // RenderTexture.active = StereoTargetRenderTexture0_buffer2; + + RenderManager.SetEyeColorBuffer(rt2.GetNativeTexturePtr(), 0, 1); + RenderManager.SetEyeColorBuffer(rt2.GetNativeTexturePtr(), 1, 1); + //make the first target active + + RenderTexture.active = StereoTargetRenderTexture0; + + + } + + } else //two-camera setup { @@ -348,8 +396,10 @@ private void CreateRenderTextures() renderTexture0.antiAliasing = QualitySettings.antiAliasing; } StereoTargetRenderTexture0 = renderTexture0; + StereoTargetRenderTexture0.Create(); _camera0.targetTexture = StereoTargetRenderTexture0; + //right eye OSVR.ClientKit.Viewport rightEyeViewport = RenderManager.GetEyeViewport(1); @@ -361,18 +411,119 @@ private void CreateRenderTextures() renderTexture1.antiAliasing = QualitySettings.antiAliasing; } StereoTargetRenderTexture1 = renderTexture1; + StereoTargetRenderTexture1.Create(); _camera1.targetTexture = StereoTargetRenderTexture1; + //set rendermanager color buffers + //Set the native texture pointer so we can access this texture from the plugin //set rendermanager color buffers //Set the native texture pointer so we can access this texture from the plugin RenderManager.SetEyeColorBuffer(renderTexture0.GetNativeTexturePtr(), 0, 0); RenderManager.SetEyeColorBuffer(renderTexture1.GetNativeTexturePtr(), 1, 0); - RenderManager.SetEyeColorBuffer(renderTexture0.GetNativeTexturePtr(), 0, 1); - RenderManager.SetEyeColorBuffer(renderTexture1.GetNativeTexturePtr(), 1, 1); + + if(numBuffers == 2) + { + //create a RenderTexture for this eye's camera to render into + RenderTexture renderTexture0_b2 = new RenderTexture(leftEyeViewport.Width, leftEyeViewport.Height, 24, RenderTextureFormat.Default); + if (QualitySettings.antiAliasing > 0) + { + renderTexture0_b2.antiAliasing = QualitySettings.antiAliasing; + } + StereoTargetRenderTexture0_buffer2 = renderTexture0_b2; + StereoTargetRenderTexture0_buffer2.Create(); + + + + //create a RenderTexture for this eye's camera to render into + RenderTexture renderTexture1_b2 = new RenderTexture(leftEyeViewport.Width, rightEyeViewport.Height, 24, RenderTextureFormat.Default); + if (QualitySettings.antiAliasing > 0) + { + renderTexture1_b2.antiAliasing = QualitySettings.antiAliasing; + } + StereoTargetRenderTexture1_buffer2 = renderTexture1_b2; + StereoTargetRenderTexture1_buffer2.Create(); + + //set rendermanager color buffers + //Set the native texture pointer so we can access this texture from the plugin + RenderManager.SetEyeColorBuffer(renderTexture0_b2.GetNativeTexturePtr(), 0, 1); + //set rendermanager color buffers + //Set the native texture pointer so we can access this texture from the plugin + RenderManager.SetEyeColorBuffer(renderTexture1_b2.GetNativeTexturePtr(), 1, 1); + + RenderTexture.active = StereoTargetRenderTexture0; + + } + + } } + /* void Update() + { + SwapRenderTextures(); + }*/ + + void SwapRenderTextures() + { + int frame = iteration % 2; + if (stereoRigSetup == StereoRigSetup.OneCameraBothEyes) + { + RenderTexture buff; + if (frame == 0) + { + buff = StereoTargetRenderTexture0; + // RenderTexture.active = StereoTargetRenderTexture0; + _camera0.targetTexture = StereoTargetRenderTexture0; + + + } + else + { + buff = StereoTargetRenderTexture0_buffer2; + // RenderTexture.active = StereoTargetRenderTexture0_buffer2; + _camera0.targetTexture = StereoTargetRenderTexture0_buffer2; + + } + } + else + { + RenderTexture buff0; + RenderTexture buff1; + if (frame == 0) + { + buff0 = StereoTargetRenderTexture0; + _camera0.targetTexture = StereoTargetRenderTexture0; + + buff1 = StereoTargetRenderTexture1; + _camera1.targetTexture = StereoTargetRenderTexture1; + + + } + else + { + buff0 = StereoTargetRenderTexture0_buffer2; + _camera0.targetTexture = StereoTargetRenderTexture0_buffer2; + + buff1 = StereoTargetRenderTexture1_buffer2; + _camera1.targetTexture = StereoTargetRenderTexture1_buffer2; + + } + } + // RenderManager.SetEyeColorBuffer(buff.GetNativeTexturePtr(), 0); + // RenderManager.SetEyeColorBuffer(buff.GetNativeTexturePtr(), 1); + iteration++; + } + + void OnPreCull() + { + if (_displayConfigInitialized && RenderManager != null && _renderManagerConfigFound) + { + + SwapRenderTextures(); + } + } + void LateUpdate() { @@ -395,6 +546,7 @@ void LateUpdate() UpdateEyePoses(); } GL.IssuePluginEvent(RenderManager.GetRenderEventFunction(), OsvrRenderManager.RENDER_EVENT); + // SwapRenderTextures(); } } @@ -464,7 +616,7 @@ public void UpdateEyePoses() Vector3 pos1 = OSVR.Unity.Math.ConvertPosition(eyePose1.translation); Quaternion rot1 = OSVR.Unity.Math.ConvertOrientation(eyePose1.rotation); - if(stereoRigSetup == StereoRigSetup.OneCameraBothEyes) + if (stereoRigSetup == StereoRigSetup.OneCameraBothEyes && _camera0CachedTransform != null) { Quaternion slerpedRot = Quaternion.Slerp(rot0, rot1, 0.5f); Vector3 pos = new Vector3((pos0.x + pos1.x) * 0.5f, (pos0.y + pos1.y) * 0.5f, (pos0.z + pos1.z) * 0.5f); @@ -474,7 +626,7 @@ public void UpdateEyePoses() Vector3 invPos = -pos; _camera0CachedTransform.localPosition = Quaternion.Inverse(slerpedRot) * invPos; } - else //two-camera setup + else if (_camera0CachedTransform != null && _camera1CachedTransform != null)//two-camera setup { //this script is attached to the left eye, with a right-eye sibling gameobject _camera0CachedTransform.localRotation = Quaternion.Inverse(rot0); @@ -485,7 +637,7 @@ public void UpdateEyePoses() invPos = -pos1; _camera1CachedTransform.localPosition = Quaternion.Inverse(rot1) * invPos; } - + } // Updates the position and rotation of the head @@ -517,48 +669,6 @@ public bool CheckDisplayStartup() return DisplayConfig != null && _displayConfigInitialized && DisplayConfig.CheckDisplayStartup(); } - public void ExitRenderManager() - { - if (_renderManagerConfigFound && RenderManager != null) - { - RenderManager.ExitRenderManager(); - } - } - - void OnApplicationQuit() - { - ExitRenderManager(); - } - - /* - private void OnGUI() - { - if (Event.current.type.Equals(EventType.Repaint)) - { - - //Retrieves the number of dropped frames reported by the VR SDK. - int droppedFrames; - if (VRStats.TryGetDroppedFrameCount(out droppedFrames)) - { - GUI.Label(new Rect(0, 0, 200, 200), "Dropped frames: " + droppedFrames); - } - - //Retrieves the number of times the current frame has been drawn to the device as reported by the VR SDK. - int framePresentCount; - if (VRStats.TryGetFramePresentCount(out framePresentCount)) - { - GUI.Label(new Rect(0, 200, 200, 200), "Frame Present Count: " + framePresentCount); - } - - //Retrieves the time spent by the GPU last frame, in seconds, as reported by the VR SDK. - float gpuTimeSpentLastFrame; - if (VRStats.TryGetGPUTimeLastFrame(out gpuTimeSpentLastFrame)) - { - GUI.Label(new Rect(0, 400, 200, 200), "GPU Time spent last frame: " + gpuTimeSpentLastFrame); - } - } - } - */ } } } \ No newline at end of file From 04b92393cf7390e6012dd66d6d6ca64f8e09bc22 Mon Sep 17 00:00:00 2001 From: Greg Aring Date: Thu, 14 Dec 2017 23:02:00 -0500 Subject: [PATCH 3/7] updates to work with double-buffered rendering plugin --- .../Assets/OSVRUnity/src/OsvrRenderManager.cs | 2 +- .../Assets/OSVRUnity/src/OsvrUnityNativeVR.cs | 127 +++++++----------- 2 files changed, 53 insertions(+), 76 deletions(-) diff --git a/OSVR-Unity/Assets/OSVRUnity/src/OsvrRenderManager.cs b/OSVR-Unity/Assets/OSVRUnity/src/OsvrRenderManager.cs index ade555b..22415e6 100644 --- a/OSVR-Unity/Assets/OSVRUnity/src/OsvrRenderManager.cs +++ b/OSVR-Unity/Assets/OSVRUnity/src/OsvrRenderManager.cs @@ -130,7 +130,7 @@ private static extern void // UnityPluginLoad is not needed // UnityPluginUnload is not needed - private bool _linkDebug = true; //causes crash on exit if true, only enable for debugging + private bool _linkDebug = false; //causes crash on exit if true, only enable for debugging //persistent singleton private static OsvrRenderManager _instance; diff --git a/OSVR-Unity/Assets/OSVRUnity/src/OsvrUnityNativeVR.cs b/OSVR-Unity/Assets/OSVRUnity/src/OsvrUnityNativeVR.cs index 87f395a..eba6808 100644 --- a/OSVR-Unity/Assets/OSVRUnity/src/OsvrUnityNativeVR.cs +++ b/OSVR-Unity/Assets/OSVRUnity/src/OsvrUnityNativeVR.cs @@ -28,6 +28,7 @@ */ using OSVR.Unity; using System.Collections; +using System.Collections.Generic; using UnityEngine; using UnityEngine.VR; using System; @@ -39,6 +40,13 @@ namespace Unity [RequireComponent(typeof(Camera))] public class OsvrUnityNativeVR : MonoBehaviour { + private const int NUM_RENDERBUFFERS = 2; + private const int LEFT_EYE = 0; + private const int RIGHT_EYE = 1; + private const int LEFT_EYE_BUFFER_2 = 2; + private const int RIGHT_EYE_BUFFER_2 = 3; + private const int FIRST_BUFFER = 0; + private const int SECOND_BUFFER = 1; public enum StereoRigSetup { @@ -46,21 +54,17 @@ public enum StereoRigSetup TwoCameras }; public StereoRigSetup stereoRigSetup = StereoRigSetup.OneCameraBothEyes; - public Camera _camera0; //the main camera in a one-camera setup, or the left eye in a two-camera setup - public Camera _camera1; //null in a one-camera setup, or the right eye in a two-camera setup + public Camera _camera0; //the main camera in a one-camera setup, or the left eye in a two-camera setup + public Camera _camera1; //null in a one-camera setup, or the right eye in a two-camera setup - private Transform _camera0CachedTransform; - private Transform _camera1CachedTransform; + private Transform _camera0CachedTransform; + private Transform _camera1CachedTransform; - [HideInInspector] - public RenderTexture StereoTargetRenderTexture0; - [HideInInspector] - public RenderTexture StereoTargetRenderTexture1; + private RenderTexture StereoTargetRenderTextureLeft; + private RenderTexture StereoTargetRenderTextureRight; + private RenderTexture StereoTargetRenderTextureLeft_buffer2; + private RenderTexture StereoTargetRenderTextureRight_buffer2; - [HideInInspector] - public RenderTexture StereoTargetRenderTexture0_buffer2; - [HideInInspector] - public RenderTexture StereoTargetRenderTexture1_buffer2; private ClientKit _clientKit; private OSVR.ClientKit.DisplayConfig _displayConfig; @@ -73,8 +77,6 @@ public enum StereoRigSetup //variables for controlling use of osvrUnityRenderingPlugin.dll which enables DirectMode private OsvrRenderManager _renderManager; private bool _renderManagerConfigFound = false; - // private IEnumerator _endOfFrameCoroutine; - // private WaitForEndOfFrame _waitForEndOfFrame; public OSVR.ClientKit.DisplayConfig DisplayConfig { @@ -95,8 +97,7 @@ public uint TotalDisplayHeight set { _totalSurfaceHeight = value; } } - private int numBuffers = 2; - private int iteration = 1; + private int frameCount = 0; void Awake() { @@ -234,24 +235,8 @@ void Init() } SetRenderParams(); - // _waitForEndOfFrame = new WaitForEndOfFrame(); - // _endOfFrameCoroutine = EndOfFrame(); - - // StartCoroutine(_endOfFrameCoroutine); } - // This couroutine is called every frame. - /* IEnumerator EndOfFrame() - { - while (true) - { - yield return _waitForEndOfFrame; - if(_displayConfigInitialized && RenderManager != null && _renderManagerConfigFound) - { - SwapRenderTextures(); - - } - } - }*/ + /* * We currently are only able to set the projection matrix of each eye with a two camera setup, via camera.projectionMatrix. * For configurations where the projection matrix for each eye is identical, we use the one-camera setup. @@ -344,24 +329,22 @@ private void CreateRenderTextures() { if (stereoRigSetup == StereoRigSetup.OneCameraBothEyes) { - - //create a RenderTexture for this eye's camera to render into RenderTexture renderTexture = new RenderTexture((int)TotalDisplayWidth, (int)TotalDisplayHeight, 24, RenderTextureFormat.Default); if (QualitySettings.antiAliasing > 0) { renderTexture.antiAliasing = QualitySettings.antiAliasing; } - StereoTargetRenderTexture0 = renderTexture; - StereoTargetRenderTexture0.Create(); - _camera0.targetTexture = StereoTargetRenderTexture0; + StereoTargetRenderTextureLeft = renderTexture; + StereoTargetRenderTextureLeft.Create(); + _camera0.targetTexture = StereoTargetRenderTextureLeft; // RenderTexture.active = StereoTargetRenderTexture0; //Set the native texture pointer so we can access this texture from the plugin RenderManager.SetEyeColorBuffer(renderTexture.GetNativeTexturePtr(), 0, 0); RenderManager.SetEyeColorBuffer(renderTexture.GetNativeTexturePtr(), 1, 0); - if (numBuffers == 2) + if (NUM_RENDERBUFFERS == 2) { //create a RenderTexture for this eye's camera to render into RenderTexture rt2 = new RenderTexture((int)TotalDisplayWidth, (int)TotalDisplayHeight, 24, RenderTextureFormat.Default); @@ -369,15 +352,15 @@ private void CreateRenderTextures() { rt2.antiAliasing = QualitySettings.antiAliasing; } - StereoTargetRenderTexture0_buffer2 = rt2; - StereoTargetRenderTexture0_buffer2.Create(); + StereoTargetRenderTextureLeft_buffer2 = rt2; + StereoTargetRenderTextureLeft_buffer2.Create(); // RenderTexture.active = StereoTargetRenderTexture0_buffer2; RenderManager.SetEyeColorBuffer(rt2.GetNativeTexturePtr(), 0, 1); RenderManager.SetEyeColorBuffer(rt2.GetNativeTexturePtr(), 1, 1); //make the first target active - RenderTexture.active = StereoTargetRenderTexture0; + RenderTexture.active = StereoTargetRenderTextureLeft; } @@ -395,9 +378,9 @@ private void CreateRenderTextures() { renderTexture0.antiAliasing = QualitySettings.antiAliasing; } - StereoTargetRenderTexture0 = renderTexture0; - StereoTargetRenderTexture0.Create(); - _camera0.targetTexture = StereoTargetRenderTexture0; + StereoTargetRenderTextureLeft = renderTexture0; + StereoTargetRenderTextureLeft.Create(); + _camera0.targetTexture = StereoTargetRenderTextureLeft; @@ -410,9 +393,9 @@ private void CreateRenderTextures() { renderTexture1.antiAliasing = QualitySettings.antiAliasing; } - StereoTargetRenderTexture1 = renderTexture1; - StereoTargetRenderTexture1.Create(); - _camera1.targetTexture = StereoTargetRenderTexture1; + StereoTargetRenderTextureRight = renderTexture1; + StereoTargetRenderTextureRight.Create(); + _camera1.targetTexture = StereoTargetRenderTextureRight; //set rendermanager color buffers //Set the native texture pointer so we can access this texture from the plugin @@ -421,7 +404,7 @@ private void CreateRenderTextures() RenderManager.SetEyeColorBuffer(renderTexture0.GetNativeTexturePtr(), 0, 0); RenderManager.SetEyeColorBuffer(renderTexture1.GetNativeTexturePtr(), 1, 0); - if(numBuffers == 2) + if(NUM_RENDERBUFFERS == 2) { //create a RenderTexture for this eye's camera to render into RenderTexture renderTexture0_b2 = new RenderTexture(leftEyeViewport.Width, leftEyeViewport.Height, 24, RenderTextureFormat.Default); @@ -429,8 +412,8 @@ private void CreateRenderTextures() { renderTexture0_b2.antiAliasing = QualitySettings.antiAliasing; } - StereoTargetRenderTexture0_buffer2 = renderTexture0_b2; - StereoTargetRenderTexture0_buffer2.Create(); + StereoTargetRenderTextureLeft_buffer2 = renderTexture0_b2; + StereoTargetRenderTextureLeft_buffer2.Create(); @@ -440,8 +423,8 @@ private void CreateRenderTextures() { renderTexture1_b2.antiAliasing = QualitySettings.antiAliasing; } - StereoTargetRenderTexture1_buffer2 = renderTexture1_b2; - StereoTargetRenderTexture1_buffer2.Create(); + StereoTargetRenderTextureRight_buffer2 = renderTexture1_b2; + StereoTargetRenderTextureRight_buffer2.Create(); //set rendermanager color buffers //Set the native texture pointer so we can access this texture from the plugin @@ -450,7 +433,7 @@ private void CreateRenderTextures() //Set the native texture pointer so we can access this texture from the plugin RenderManager.SetEyeColorBuffer(renderTexture1_b2.GetNativeTexturePtr(), 1, 1); - RenderTexture.active = StereoTargetRenderTexture0; + RenderTexture.active = StereoTargetRenderTextureLeft; } @@ -459,30 +442,25 @@ private void CreateRenderTextures() } - /* void Update() - { - SwapRenderTextures(); - }*/ - void SwapRenderTextures() { - int frame = iteration % 2; + int frame = frameCount % 2; if (stereoRigSetup == StereoRigSetup.OneCameraBothEyes) { RenderTexture buff; if (frame == 0) { - buff = StereoTargetRenderTexture0; + buff = StereoTargetRenderTextureLeft; // RenderTexture.active = StereoTargetRenderTexture0; - _camera0.targetTexture = StereoTargetRenderTexture0; + _camera0.targetTexture = StereoTargetRenderTextureLeft; } else { - buff = StereoTargetRenderTexture0_buffer2; + buff = StereoTargetRenderTextureLeft_buffer2; // RenderTexture.active = StereoTargetRenderTexture0_buffer2; - _camera0.targetTexture = StereoTargetRenderTexture0_buffer2; + _camera0.targetTexture = StereoTargetRenderTextureLeft_buffer2; } } @@ -492,27 +470,26 @@ void SwapRenderTextures() RenderTexture buff1; if (frame == 0) { - buff0 = StereoTargetRenderTexture0; - _camera0.targetTexture = StereoTargetRenderTexture0; + buff0 = StereoTargetRenderTextureLeft; + _camera0.targetTexture = StereoTargetRenderTextureLeft; - buff1 = StereoTargetRenderTexture1; - _camera1.targetTexture = StereoTargetRenderTexture1; + buff1 = StereoTargetRenderTextureRight; + _camera1.targetTexture = StereoTargetRenderTextureRight; } else { - buff0 = StereoTargetRenderTexture0_buffer2; - _camera0.targetTexture = StereoTargetRenderTexture0_buffer2; + buff0 = StereoTargetRenderTextureLeft_buffer2; + _camera0.targetTexture = StereoTargetRenderTextureLeft_buffer2; - buff1 = StereoTargetRenderTexture1_buffer2; - _camera1.targetTexture = StereoTargetRenderTexture1_buffer2; + buff1 = StereoTargetRenderTextureRight_buffer2; + _camera1.targetTexture = StereoTargetRenderTextureRight_buffer2; } } - // RenderManager.SetEyeColorBuffer(buff.GetNativeTexturePtr(), 0); - // RenderManager.SetEyeColorBuffer(buff.GetNativeTexturePtr(), 1); - iteration++; + + frameCount++; } void OnPreCull() From 01fb5423cf59f0e2fe438fa23c412a19282d3a21 Mon Sep 17 00:00:00 2001 From: Greg Aring Date: Sat, 30 Dec 2017 00:17:06 -0500 Subject: [PATCH 4/7] Updated libarries --- .../libs/armeabi-v7a/libosvrPluginKit.so | Bin 137860 -> 137864 bytes .../libs/armeabi-v7a/libosvrRenderManager.so | Bin 614628 -> 614628 bytes .../libosvrUnityRenderingPlugin.so | Bin 31584 -> 37232 bytes .../armeabi-v7a/osvrUnityAndroidPlugin.jar | Bin 3340 -> 3340 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/OSVR-Unity/Assets/Plugins/Android/libs/armeabi-v7a/libosvrPluginKit.so b/OSVR-Unity/Assets/Plugins/Android/libs/armeabi-v7a/libosvrPluginKit.so index 9276a028318c44225d7745f0552fb2caf518b8e1..fd9a189fc7263b3424b08fc47426e33698e50514 100644 GIT binary patch delta 1927 zcmZ9LT}YEr7{{OUYC5HcO>{X7KT1JGC`m%PNQ*AA4-oRAh@3UQN~f8_q}II9vM47N z%)mgSpbH^vu2p!Ul%OSjfoMS=P$8O;LETtp|FfOf_q^|OvFH7r=Q+u-IZ*-lIJ)@24DcPWI$$UG28A!g`#Zrm!D@d1tOmb;`6y8g)9U$PH7q!v zILyRdI4AsegQAIMb!C)r@(G- zEo$i=EHH=K&JQ5U1Ftloei%H94P&VB1De4Ds~Bxm!rWunKWyMn2A%^?Ml;IBJP#ij zSwX~1+Q3|JMr^o&*Y|)+!0Lg`VApD`-VN>ptMw7^s9EC$@NAsMsra+3i4U_ z_q)9_L!NoQ8G{_{c+JQuV4k;#yi4RmB0EKH7Wur$*G29VIUw>AkzXO3F?Sl-hTL1q zD48huc`q9|;NjEM;P1!{mPPLZ%cApBWYPPFeQ z{vsGHi+&Nj;xQN9&y^R!5BwrGpl+_yi=G9RMc)rrgYR!N@Kpo%fOVojz=ACLN3bmV z5?B^J%c&Q=7%Yo^3M`9$3oMKN2CNf(84I%LdG&hHE5Wkp_rS8~&%kQ%HxS>T7kv|0 z4PJMGb)sJ~G&};!q7NH*A~<=QIjSYoU8dk*f)dAkBZ*2Cn-6ALm6Qnf+PB-LY+wOj IolUX+2Tphg2LJ#7 delta 1915 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 CHSb#h delta 8314 zcmZu$30zc1((l&{Fvy^wpm;J2g5U*sEd&)9@yVzt#3O1nVqzjjFuEZ|jb_joqgfAh zjEz@f5|enKLOeh>u9_G(*Cya+jAw)_&YP0~gS_#a@81tZ%=gXjS5vR5yQ`|JyXsZH zt~nc7b2hRhO$aW2*QRxT(QUqA^O=XAJLZ*~{NkBdmYb>Wb|hbL2M9Ng0DP))qYLkWKCZ{%5s5f;F4-=fGVc}sx z{~1TgDxpc*XDbNFGUbIQ2OWHtlB#AIc`FH7Z#os8EZi_X3=d1aJCTy$=C&8#fxcGs z9?$`kD9LVaxBi9hzlxAN(+pi$_*wMo*4*nnxUFgRyM){@?b3w_S4^jL$?;bvQ?j_( z#)Q?daSFxkn{1v9`eo4bo9TU^e>L@s2ov&58Th|q%8U3V=-?}uC3@)Kv-j2z5^u`r zX$<;oE+y&Bsb z50|!UJt50Y|A{;-+<9ktRN3+W|v#5)BE;9P8?;W4kYshZBuF@)Run9fAMG}3a zQY-qGoU+ty^x77zgT~&L(^8fgh{uzblhRbN9iEO`j!ATz7EdLX5{Yc%ykg4%HY-8s zI_Br=@z8dm_6NzkNRzNzPb*aWta1|kw7-_?ef$1xiJT5BBxE=IQVUoE_!_VWu)UoR z*$?~)U<<1sOS=j`v49LZQ23IiW`GK0GcstR*Yw(NS$wk4HSy=`be}~Y4Ru~cZN_L4 zxND2_-jx_Ui9eP#AFF{vGM-4TKDD>qE`}7cplB?IdI}?{PFDpv2nCpcS7{ z9G1WakE5wx4rgVPhAWDOtIl8lkA^Rutu-V;LmVWF0X~G|a)unzPq@hLkE7oRe`lx1 z(4L(IF%C0%&h{o#mzk8f*su8;T zeR|ys_P^-(NFiBq7F7%5*s&}cD`c}Z%mBw^yo! zrZ`@i;!k$IK{Hs)1lns@f&CjvRirMp$iorY(_qt+?bWE*ROP-c@c}*EwXka$(%>5C z9}V2d)=!{a`^|JGiaOCtj1%{c@)ZkDv?;y>ty*X;w(AX=BE6z@5zMp7GW&G`eJwWqnn+_ZF4;)mUn{R5`&i|*9*bOJYg43d@fNM{ zgSQ65i+gP3bnW|udD9TRAMO1Sj6fl(j~$WHg6J58mX-% z5&zAumjtb|6xQ#F_Sgxa(Ueq_~(fu|N6TUnwKL&SPH zhuJ65IYEIoFOlff+Ai7W+=cNLS4{35tiifZ3S8Uc4Y7n-v15;?Eu!>bqp{bo#I?C&Xb}Et7 zYrNW5go^QqRExZl#Z0BiA^oWjX$$CQtxH{95+M3uLpj;I>?Q6b#rg!L88$Aa@B4$C~W=je}KnTan*Veyf zK)$Vi%YZ8O@^l)XsCV6Tuj-tj3&nd|k~OZ-4>h`*?!}$skklkug;!P#raMu2)fU_* z5nAy_H;I$vRqU7PG|BIi+75^aNq&)am_cK^uCBEsGz&-7o7)ukKYY`DF|;YWOY$Bz zV+I}g-1*v@?xIk=uA8E6LoJV{cK7{@VMHi@4RBeD@xBTdAIa5^{FOIl`pA^Jl9lO= z@tE=u+f8?Nv=B}ryv3#1UxREsUk+i?3_532t~IHM`z7D15|g$?ixG$gi~Pvi;~v?en8VlyFVJ2>13UEs4L6*(LSe6HxRR?o z18NE=s!-*i#)9%vs4uPQjd9Sv72Kh{xQQzj6Sr71Vd7TSYbKp#tgtkhc-g{D%xpF> z+p23ZvD|sny{F?ST~Ectl}>IVRZQ#&6PG$?NdfTInvRdXHQU+bt)CwTw0P^y6&6`< zJ@2j&cmgce!{Iw6X-&|N_Hjq+-t+gsa0xwb`l zRI~EJhizMwk6po~TjaJ}ZTuzoo>U(b{2%XYnqJCQXVYjw&kkqPzX`uHDVv5R{$RQ3 z&J8*5wg^konnr#NPBu7>7EZY(5PCDgs}mki{7aTRi+1X?*TUWVxh04j7V@}pC(D~f z<3s-CxaqD59;xfAICBkN#8%|QBeUq6#`ccMx6=0e6s0$=ir2fp8YaohTp=iOQ~vC> zLcj)J>hco33q!UMoe%fBD@F9(Cdn^AU|jG(-7rO9lw;VAp$Hdka47b!k4chyIK0vO zLx=Y^D)Mn19Vt+`)y=stxbjOQx}W}Y=EeyY!uGvLBilteZW~f`(TcD-`y3_1_$A9r z5AhtcmkBQ+^K7y2W-B_=?!Ku9llDo-Um4&E^V#b!(Y&Ap`=VRziw_wd&wCoHe~HEj zX{_sPI(Noc`x=zwafr%W+maN-G4|Lh5o&w z5n?U!C^qz~ca~0&)QJ0r>z6@gbLSB#i?M0Q7Id zA{l~*Re%P74?1c9Z2&4j+h$ycgx>&YznGA%I0c^sv?(B@BcSdLUbW&(7$IC>m9NlV zF$=82(_*s^W#?w&NU%Z`6^HF`)cS!Xl+<+b6{}Fn>BI!^R^`hL;Wt+ElU4R!Q#dRBI*q z4|X_*#tT2N>Kr;pNN0w*bgK7lyM*NY#a!Awrr6?VphYuLdd-Kbd`k`%@XiCRs47`- ziWh{g2Z$C6IlYEC=hB%%Fw1zA&fstKS83Lyq1MmzZ7ZV1=)sTV84ul(BoDBT6(^4L z!On;t^hlnd@cLUNxi28jYL@@*Qi(r6QE!wcV}ZL^KN;D+x%W_|cYBsKk9LZ=YCBO+ z+R=)1(JT*e;gtsg6yO6P=@25x1R^dh;d!)khojbwrDgR6<24sf5@By( zxFqjn*XGeg|D(3_#t(>kpClh*VYvv@6KrHIj*}Bz_YG5Y?GTD)xd)D`q^CvRbzfKI zSNxk&o0?_4>rX?f&R^-Fary63>*|#Avsw0WMWc8z%abt<1KaJSJjf9 z>TT(bCL+l?dwSz$!V^^wUVN9Fa?pS9L*;Mm&s;hWhy0m&IK8xEEAnX9uDkC2=FX`K z*c&f;Z66{2$4#mp$lV{Mpb*-?%JS%M6UJdKo5{yHlALDK&E?Ot@L%J#wu>Z-HlmHz z35BRPH><)^Z~N#aSq~m>iPi;1kj<#!OjKzh5fWb10@@N-^?VvKHOfXo^hQT5I(j|T zG1TUTwr=RIs@Diu4;W!0)iC0o^$(~wk?>a^8}Y!}lPl8L_}8#T(^=kYnC57< z@io+OquI^Z=qwy(Qy0((zln&y4S;hjZvpKT?{;{JeEq#EvQQnW3eEC)r)o#l+|W{$ z$t-VosCIbS)#SgkvR|~Cv#QRP|J1c~)>e}glJ0(6|xWzeU znbg)v3BV6n;_Gx?WV!3R(ueYe`@Z#KNnrT1FzS#i6P)kC$pl9S&gbm=*Xh7^+nq^s zJCv4V>=vh4Rx$s4`X1gKrhGanpr=z)WR|t?95y7olTTwqd=wT{SOfzW;3zYhCBA{0 z_#(@D14qo`Y}Xs8NIzshzCowrY#q6XCJ8xg)*{-;d%D9c|HPIr!Y33rJFrO0CXMM_eb*nm zdVQQ({sAxD%bli(ZMJg(Q`nt1X@v1hN5p~j+f^w+rp}n~en(GGb4h!J+T(~kklwh3 zbWo_BjwnzckYI({>IgfK(zq~Aqfl=n{Vn%OX-ta?Q0PUV-v<3hTw8^n58CK8z9BKY zokG9j(gz@$cYVlnMw)H~bm;A6TjCVf)s zZWNg11ZMy^Y0aEUaN?XAa27Umz6B@B8N7q!2-*<} z+|3z?_7sKJ#o@2;G|s+~Dhag)V>Lpjh-7*Hp`3lN((;*^pTHAf-+5G72_2Uf4N;b* zknLImr>9v$cC3&B?i9Y&SxnJwadvrsiWq`O$YeK{(1;G_90B#aG0Sryk7t?ALYC5j zeI`95(T2)^`UW)@p91mO5T74n&|P+`317BooJdF{uWDXjN@KcTb%ks{hX7dWNW}jl zM?d`MJHqk5z!9Q++vt-lZ#$GI-jd5*Tg)TGizo+CRO@&&1=R0R-*i_6b0bpF;{p@j zq96BL@GzkMoPXRw5)l}Vs!BPj{ODH2{peO>$@be+AQbV(r=$h z!SdU$;>#dk5wrZr#_{+DZI=GF@FMnzozwb8L1?10?R^iPHu%BjXxMy})i0xAe+#tU zyp;-j0vB6-c9IxCdFcL%do38hO_&pZkCEu30{cyla+^E7|snTN7wT$>3T}JN3J0 z>wj=@i{^BknPS8Ta_OV!9R3OEmCD|t->!wqo9Y(w`@pwpxbe07E2O6836VghuI?MXxo2Ayqt5)VUcPvRlY_9PzeS)1ZvveEV= zASPOy0z$OiLK5U24!^%o@pSk5Tcl#i58=Y+aR61TS?+NE3+zC>?K}LZ*iPYpsBJ&~ zpRpa5wn`sJMbc%rmfVsbxlDLMrH7H5EBJnDythGGEAh!{5<*J!=M<*n-Wln%RE~Tv z$^F?JBaQ6vKlctui&3tY=)XW+%u``|_K}f>q*lzwm)9C^@-y(~fNa2}Jc!FBu%@&Sn!R!x!OG*kB1FO-mVY|nu0lv7y zV~hiS06YjdXP3t~1$g?09%DZ6ppQJpLg13!0ASUp9-{;JIr6$z}(R5z}>*l-RCiCfh+cVjA_6-kMn-T1)*gy zV(I*4)`4KPT=f+qWu6ZI0IaDrw=SX>oN9i^ca8o1~UMzI|re_J@RnaZ zMgb06_ukwR3h)A`0NwzfvbiO`o}vJLg~YFo5^aQBVQ(1J1BJV6pFtflm|p^Yn??z~ z!4rIPCj3IofL{1)PWUxg2A=b#Qi2yP!PidZdab%l7_D{<7phqO8ufU*epA<~!-BLU zC|@`H)a0Z;A>nKxXIHgi`)hDt$3EulbI{rJQ!AHQ*I6al@l~zZ*}OOCRoD*{LiwH7 zI>VD;eLxqo@b}fR;j>3SVV}gXmqA<5{CL<`zJWIH9Lh>a&{(s-kQCR1+4?S7_M*4 zUdFOGdmUDwHTx&F32fmyJG)LDhJ~o+NW+Bn@Nh1!7$5iLvpB=z*F(hhR%||*i)#-J=%Gr*;u-CB_U<-w;bR%|&d*0K7rZ0Fx^Qq>xqWNTsm{5q( zJ6SwXP;mZ}-n?}XTgY2e*vGte8NcvUeod=dQdV84HVVRTY}RJDpuzZbb8*?G&Fb+% z!i}=(Pt~oiruqFv>#OMo(5} z`{|EyS(e4B(f6qf>bbaMThHQ;L&OcX@VNTvE9w_EJ$*&J8+7X{>RW%Idv8X(vr340 z>W=zruv_0zt4z3~Wk~! zQT@(VTvW5Oolrl0S$%FBE~}Yv66@LewtCwR+*Y&H QlWJU7m(`zC|M}Vf0)i9thX4Qo diff --git a/OSVR-Unity/Assets/Plugins/Android/libs/armeabi-v7a/libosvrUnityRenderingPlugin.so b/OSVR-Unity/Assets/Plugins/Android/libs/armeabi-v7a/libosvrUnityRenderingPlugin.so index 121eefc7e58a3642f89f25e0f1334e6c50b8a474..c77a5137e9d0135483000f30543c3d11c5ef6f4f 100644 GIT binary patch literal 37232 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%0Am}-{^i;i>kW;V;M2__0WUur~GNLLF z*Idj5Jz7InomxH-0m##^)grtFKW84S0eYv$Nn4}YDaa_jIM6;2)j@Su c2fk~9HC@%I>Aj2qUhmCSjQyvo1g`4+H}iW!)&Kwi diff --git a/OSVR-Unity/Assets/Plugins/Android/libs/armeabi-v7a/osvrUnityAndroidPlugin.jar b/OSVR-Unity/Assets/Plugins/Android/libs/armeabi-v7a/osvrUnityAndroidPlugin.jar index 53ba2ba24e6dbf157798562b4d64fd146dda6973..d1510ac2aacf40bad72f0b1dac2ec3cf24496085 100644 GIT binary patch delta 113 zcmeB?>XG6N@MdNaVc_84VDPD%x{>!dBQucRe4Wvj%i(j+!j%O-)QuAsv~HN{Dwp7{ zpQLo|fTqP{8TpC4A20rA4De>>xcs&_Ntug*;id=!Lx49UlL!Ocw8XG6N@MdNaVc_84VEDY#cq8v|MrI(r`8uO5m&0la=irAQ{L>CNa3^Ya+Z^bN zJK{2@F}Og@(oRYG(c=Hi0p9E!FKr_#mAM!gZi+B41b8zti7>!Tn;gOu#sM_V8>D9P HCY~q&L*^w& From 795ec1a1c7aa8c05725bd228ca096c55f36a488b Mon Sep 17 00:00:00 2001 From: Greg Aring Date: Tue, 13 Feb 2018 11:45:38 -0500 Subject: [PATCH 5/7] Multithreaded rendering fix and android rendering plgin update --- .../Assets/OSVRUnity/src/OsvrRenderManager.cs | 18 ++++++---- .../Assets/OSVRUnity/src/OsvrUnityNativeVR.cs | 32 ++++++++++++------ .../libosvrUnityRenderingPlugin.so | Bin 37232 -> 44952 bytes 3 files changed, 33 insertions(+), 17 deletions(-) diff --git a/OSVR-Unity/Assets/OSVRUnity/src/OsvrRenderManager.cs b/OSVR-Unity/Assets/OSVRUnity/src/OsvrRenderManager.cs index 22415e6..eb9916e 100644 --- a/OSVR-Unity/Assets/OSVRUnity/src/OsvrRenderManager.cs +++ b/OSVR-Unity/Assets/OSVRUnity/src/OsvrRenderManager.cs @@ -59,9 +59,15 @@ private struct OSVR_ViewportDescription public double height; //< Last pixel on the right of the viewport in pixels } - public const int RENDER_EVENT = 0; - public const int SHUTDOWN_EVENT = 1; + public const int CREATE_RENDERMANAGER_EVENT = 0; + public const int CREATE_RENDERBUFFERS_EVENT = 1; public const int UPDATE_RENDERINFO_EVENT = 2; + public const int RENDER_EVENT = 3; + public const int RESET_YAW_EVENT = 4; + public const int SET_ROOM_ROTATION_EVENT = 5; + public const int CLEAR_ROOM_ROTATION_EVENT = 6; + public const int SHUTDOWN_RENDERMANAGER_EVENT = 7; + private const string PluginName = "osvrUnityRenderingPlugin"; [UnmanagedFunctionPointer(CallingConvention.Winapi)] @@ -73,7 +79,7 @@ private struct OSVR_ViewportDescription //Create and Register RenderBuffers [DllImport(PluginName)] private static extern Byte - ConstructRenderBuffers(); + CreateRenderBuffers(); //Create a RenderManager object in the plugin, passing in a ClientContext [DllImport(PluginName)] @@ -199,7 +205,7 @@ public int InitRenderManager() //Called after RM is created and after Unity RenderTexture's are created and assigned via SetEyeColorBuffer public int ConstructBuffers() { - return ConstructRenderBuffers(); + return CreateRenderBuffers(); } public void SetNearClippingPlaneDistance(float near) @@ -222,7 +228,7 @@ public void SetRoomRotationUsingHead() { #if UNITY_5_2 || UNITY_5_3 || UNITY_5_4 || UNITY_5_5 || UNITY_5_6 || UNITY_2017 ClientKit.instance.context.SetRoomRotationUsingHead(); - GL.IssuePluginEvent(GetRenderEventFunc(), 3); + GL.IssuePluginEvent(GetRenderEventFunc(), SET_ROOM_ROTATION_EVENT); #endif } @@ -231,7 +237,7 @@ public void ClearRoomToWorldTransform() { #if UNITY_5_2 || UNITY_5_3 || UNITY_5_4 || UNITY_5_5 || UNITY_5_6 || UNITY_2017 ClientKit.instance.context.ClearRoomToWorldTransform(); - GL.IssuePluginEvent(GetRenderEventFunc(), 4); + GL.IssuePluginEvent(GetRenderEventFunc(), CLEAR_ROOM_ROTATION_EVENT); #endif } diff --git a/OSVR-Unity/Assets/OSVRUnity/src/OsvrUnityNativeVR.cs b/OSVR-Unity/Assets/OSVRUnity/src/OsvrUnityNativeVR.cs index eba6808..a89682d 100644 --- a/OSVR-Unity/Assets/OSVRUnity/src/OsvrUnityNativeVR.cs +++ b/OSVR-Unity/Assets/OSVRUnity/src/OsvrUnityNativeVR.cs @@ -127,6 +127,7 @@ void Start() { Debug.LogError("[OSVR-Unity] OsvrUnityNativeVR requires a ClientKit object in the scene."); } + CreateRenderManager(); } @@ -154,7 +155,7 @@ void SetVRAppSettings() // Setup RenderManager for DirectMode or non-DirectMode rendering. // Checks to make sure Unity version and Graphics API are supported, // and that a RenderManager config file is being used. - void InitRenderManager() + void CreateRenderManager() { //check if we are configured to use RenderManager or not string renderManagerPath = _clientKit.context.getStringParameter("/renderManagerConfig"); @@ -181,13 +182,16 @@ void InitRenderManager() else { // attempt to create a RenderManager in the plugin - int result = _renderManager.InitRenderManager(); + /*int result = _renderManager.InitRenderManager(); if (result != 0) { Debug.LogError("[OSVR-Unity] Failed to create RenderManager."); _renderManagerConfigFound = false; VRSettings.enabled = false; //disable VR mode - } + }*/ + + GL.IssuePluginEvent(RenderManager.GetRenderEventFunction(), OsvrRenderManager.CREATE_RENDERMANAGER_EVENT); + } } else @@ -198,7 +202,7 @@ void InitRenderManager() // Get a DisplayConfig object from the server via ClientKit. // Setup stereo rendering with DisplayConfig data. - void Init() + IEnumerator Init() { //get the DisplayConfig object from ClientKit if (_clientKit == null || _clientKit.context == null) @@ -208,31 +212,36 @@ void Init() Debug.LogError("[OSVR-Unity] ClientContext is null. Can't setup display."); _osvrClientKitError = true; } - return; + yield return null; } SetVRAppSettings(); _displayConfig = _clientKit.context.GetDisplayConfig(); if (_displayConfig == null) { - return; + yield return null; } _displayConfigInitialized = true; - InitRenderManager(); + // InitRenderManager(); if (!_renderManagerConfigFound || RenderManager == null) { - return; + yield return null; } - SetupStereoCamerarig(); + + //@todo figure out why the function below crashes with multithreading + // SetupStereoCamerarig(); + SetResolution(); CreateRenderTextures(); //create RenderBuffers in RenderManager if (_renderManagerConfigFound && RenderManager != null) { - RenderManager.ConstructBuffers(); + GL.IssuePluginEvent(RenderManager.GetRenderEventFunction(), OsvrRenderManager.CREATE_RENDERBUFFERS_EVENT); + // RenderManager.ConstructBuffers(); } + SetRenderParams(); } @@ -508,7 +517,7 @@ void LateUpdate() // keep trying until we have initialized if (!_displayConfigInitialized) { - Init(); + StartCoroutine(Init()); } else if (_displayConfigInitialized && RenderManager != null && _renderManagerConfigFound) { @@ -639,6 +648,7 @@ public void UpdateHeadPose() _camera0CachedTransform.localRotation = Quaternion.Inverse(slerpedRot); Vector3 invPos = -pos; _camera0CachedTransform.localPosition = Quaternion.Inverse(slerpedRot) * invPos; + } public bool CheckDisplayStartup() diff --git a/OSVR-Unity/Assets/Plugins/Android/libs/armeabi-v7a/libosvrUnityRenderingPlugin.so b/OSVR-Unity/Assets/Plugins/Android/libs/armeabi-v7a/libosvrUnityRenderingPlugin.so index c77a5137e9d0135483000f30543c3d11c5ef6f4f..fb72a8005b6a4a1b7665792f3c6fc2bc38607695 100644 GIT binary patch literal 44952 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 VXz?9_gDCgLF8m)t69U)d{y+BnKo9@` literal 37232 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 Date: Tue, 13 Feb 2018 15:40:31 -0500 Subject: [PATCH 6/7] Fixes crash on Windows.There are now different RenderManager startup sequences for Windows and Android. Creating RM via GL.IssuePluginEvent is required for multithreaded rendering on Android. --- .../Assets/OSVRUnity/src/DisplayController.cs | 2 +- .../Assets/OSVRUnity/src/OsvrRenderManager.cs | 2 +- .../Assets/OSVRUnity/src/OsvrUnityNativeVR.cs | 25 +++++++++++++------ 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/OSVR-Unity/Assets/OSVRUnity/src/DisplayController.cs b/OSVR-Unity/Assets/OSVRUnity/src/DisplayController.cs index 94567b7..9a6ff52 100644 --- a/OSVR-Unity/Assets/OSVRUnity/src/DisplayController.cs +++ b/OSVR-Unity/Assets/OSVRUnity/src/DisplayController.cs @@ -189,7 +189,7 @@ void SetupDisplay() //create RenderBuffers in RenderManager if(UseRenderManager && RenderManager != null) { - RenderManager.ConstructBuffers(); + RenderManager.CreateBuffers(); } SetRenderParams(); } diff --git a/OSVR-Unity/Assets/OSVRUnity/src/OsvrRenderManager.cs b/OSVR-Unity/Assets/OSVRUnity/src/OsvrRenderManager.cs index eb9916e..61db30c 100644 --- a/OSVR-Unity/Assets/OSVRUnity/src/OsvrRenderManager.cs +++ b/OSVR-Unity/Assets/OSVRUnity/src/OsvrRenderManager.cs @@ -203,7 +203,7 @@ public int InitRenderManager() //Create and Register RenderBuffers in RenderManager //Called after RM is created and after Unity RenderTexture's are created and assigned via SetEyeColorBuffer - public int ConstructBuffers() + public int CreateBuffers() { return CreateRenderBuffers(); } diff --git a/OSVR-Unity/Assets/OSVRUnity/src/OsvrUnityNativeVR.cs b/OSVR-Unity/Assets/OSVRUnity/src/OsvrUnityNativeVR.cs index a89682d..9bba68d 100644 --- a/OSVR-Unity/Assets/OSVRUnity/src/OsvrUnityNativeVR.cs +++ b/OSVR-Unity/Assets/OSVRUnity/src/OsvrUnityNativeVR.cs @@ -181,16 +181,19 @@ void CreateRenderManager() } else { +#if UNITY_ANDROID + //we have to create RenderManager on the rendering thread on Android, but not on Windows + GL.IssuePluginEvent(RenderManager.GetRenderEventFunction(), OsvrRenderManager.CREATE_RENDERMANAGER_EVENT); +#else // attempt to create a RenderManager in the plugin - /*int result = _renderManager.InitRenderManager(); + int result = _renderManager.InitRenderManager(); if (result != 0) { Debug.LogError("[OSVR-Unity] Failed to create RenderManager."); _renderManagerConfigFound = false; VRSettings.enabled = false; //disable VR mode - }*/ - - GL.IssuePluginEvent(RenderManager.GetRenderEventFunction(), OsvrRenderManager.CREATE_RENDERMANAGER_EVENT); + } +#endif } } @@ -223,14 +226,15 @@ IEnumerator Init() } _displayConfigInitialized = true; - // InitRenderManager(); if (!_renderManagerConfigFound || RenderManager == null) { yield return null; } - //@todo figure out why the function below crashes with multithreading - // SetupStereoCamerarig(); +#if !UNITY_ANDROID + //@todo figure out why the function below crashes with Android multithreading + SetupStereoCamerarig(); +#endif SetResolution(); CreateRenderTextures(); @@ -238,8 +242,13 @@ IEnumerator Init() //create RenderBuffers in RenderManager if (_renderManagerConfigFound && RenderManager != null) { +#if UNITY_ANDROID + //we have to create renderbufffers on the rendering thread on Android, but not on Windows GL.IssuePluginEvent(RenderManager.GetRenderEventFunction(), OsvrRenderManager.CREATE_RENDERBUFFERS_EVENT); - // RenderManager.ConstructBuffers(); +#else + RenderManager.CreateBuffers(); +#endif + } SetRenderParams(); From f466368f72e5a190313cebefc25cbf73f8b3c967 Mon Sep 17 00:00:00 2001 From: Greg Aring Date: Wed, 4 Apr 2018 16:03:05 -0400 Subject: [PATCH 7/7] Fixes multithreaded rendering issues on Android. Fixes Unity version compatibility. Changes some comments. Updated libosvrUnityRenderingPlugin.so which includes choreographer timing. Adds an extra call to OsvrRenderManager for setting client context in the rendering plugin. --- .../Scenes/OSVR-UnityVR-Android-Demo.unity | 2154 ++--------------- OSVR-Unity/Assets/OSVRUnity/src/ClientKit.cs | 16 +- .../Assets/OSVRUnity/src/OsvrRenderManager.cs | 10 + .../Assets/OSVRUnity/src/OsvrUnityNativeVR.cs | 193 +- .../libosvrUnityRenderingPlugin.so | Bin 44952 -> 52904 bytes 5 files changed, 353 insertions(+), 2020 deletions(-) diff --git a/OSVR-Unity/Assets/OSVRUnity/Sample/Demo/Scenes/OSVR-UnityVR-Android-Demo.unity b/OSVR-Unity/Assets/OSVRUnity/Sample/Demo/Scenes/OSVR-UnityVR-Android-Demo.unity index 965b66b..6a1e822 100644 --- a/OSVR-Unity/Assets/OSVRUnity/Sample/Demo/Scenes/OSVR-UnityVR-Android-Demo.unity +++ b/OSVR-Unity/Assets/OSVRUnity/Sample/Demo/Scenes/OSVR-UnityVR-Android-Demo.unity @@ -1,19 +1,19 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!29 &1 -SceneSettings: +OcclusionCullingSettings: m_ObjectHideFlags: 0 - m_PVSData: - m_PVSObjectsArray: [] - m_PVSPortalsArray: [] + serializedVersion: 2 m_OcclusionBakeSettings: smallestOccluder: 5 smallestHole: 0.25 backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 7 + serializedVersion: 8 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -25,6 +25,7 @@ RenderSettings: m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} m_AmbientIntensity: 1 m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} m_SkyboxMaterial: {fileID: 2100000, guid: 48646e618662d7a4da8decdfe3bc6274, type: 2} m_HaloStrength: 0.5 m_FlareStrength: 1 @@ -41,7 +42,7 @@ RenderSettings: --- !u!157 &4 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 7 + serializedVersion: 11 m_GIWorkflowMode: 1 m_GISettings: serializedVersion: 2 @@ -53,7 +54,7 @@ LightmapSettings: m_EnableBakedLightmaps: 1 m_EnableRealtimeLightmaps: 0 m_LightmapEditorSettings: - serializedVersion: 4 + serializedVersion: 9 m_Resolution: 1 m_BakeResolution: 1 m_TextureWidth: 1024 @@ -66,39 +67,61 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 0 - m_DirectLightInLightProbes: 1 m_FinalGather: 0 m_FinalGatherFiltering: 1 m_FinalGatherRayCount: 256 m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 m_LightingDataAsset: {fileID: 0} - m_RuntimeCPUUsage: 25 + m_UseShadowmask: 0 --- !u!196 &5 NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: serializedVersion: 2 + agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 agentSlope: 45 agentClimb: 0.4 ledgeDropHeight: 0 maxJumpAcrossDistance: 0 - accuratePlacement: 0 minRegionArea: 2 - cellSize: 0.16666666 manualCellSize: 0 + cellSize: 0.16666666 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 m_NavMeshData: {fileID: 0} --- !u!1 &35690949 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 35690951} - - 114: {fileID: 35690950} + - component: {fileID: 35690951} + - component: {fileID: 35690950} m_Layer: 0 m_Name: QuitOnEscape m_TagString: Untagged @@ -126,20 +149,20 @@ Transform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0.5675555, y: -0.08848229, z: -2.038508} m_LocalScale: {x: 1, y: 1, z: 1} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &40750486 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 40750487} - - 33: {fileID: 40750489} - - 23: {fileID: 40750488} + - component: {fileID: 40750487} + - component: {fileID: 40750489} + - component: {fileID: 40750488} m_Layer: 0 m_Name: pillar m_TagString: Untagged @@ -156,10 +179,10 @@ Transform: m_LocalRotation: {x: -0, y: -0.3877868, z: -0, w: 0.9217491} m_LocalPosition: {x: -5.9964952, y: 2.777, z: -5.7669067} m_LocalScale: {x: 2, y: 5.454432, z: 2.000001} - m_LocalEulerAnglesHint: {x: 0, y: -45.634003, z: 0} m_Children: [] m_Father: {fileID: 1240259092} m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: -45.634003, z: 0} --- !u!23 &40750488 MeshRenderer: m_ObjectHideFlags: 0 @@ -169,12 +192,15 @@ MeshRenderer: m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 + m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 926489ece7dc4c440977be56882d0bd0, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -182,12 +208,14 @@ MeshRenderer: m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &40750489 MeshFilter: @@ -201,12 +229,12 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 73422368} - - 33: {fileID: 73422371} - - 135: {fileID: 73422370} - - 23: {fileID: 73422369} + - component: {fileID: 73422368} + - component: {fileID: 73422371} + - component: {fileID: 73422370} + - component: {fileID: 73422369} m_Layer: 0 m_Name: sun m_TagString: Untagged @@ -223,12 +251,11 @@ Transform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 80.376, z: 0} m_LocalScale: {x: 9.727282, y: 9.727276, z: 9.727276} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_Children: - {fileID: 2039723749} - - {fileID: 640144953} m_Father: {fileID: 1240259092} m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &73422369 MeshRenderer: m_ObjectHideFlags: 0 @@ -238,12 +265,15 @@ MeshRenderer: m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 + m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 1be7eb640bbc552438766068864f6b66, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -251,12 +281,14 @@ MeshRenderer: m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!135 &73422370 SphereCollider: @@ -282,11 +314,11 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 149056952} - - 33: {fileID: 149056954} - - 23: {fileID: 149056953} + - component: {fileID: 149056952} + - component: {fileID: 149056954} + - component: {fileID: 149056953} m_Layer: 0 m_Name: pillar m_TagString: Untagged @@ -303,10 +335,10 @@ Transform: m_LocalRotation: {x: -0, y: -0.3877868, z: -0, w: 0.9217491} m_LocalPosition: {x: 6.0164957, y: 0.955, z: 6.5148067} m_LocalScale: {x: 2, y: 1.8097968, z: 2} - m_LocalEulerAnglesHint: {x: 0, y: -45.634003, z: 0} m_Children: [] m_Father: {fileID: 1240259092} m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: -45.634003, z: 0} --- !u!23 &149056953 MeshRenderer: m_ObjectHideFlags: 0 @@ -316,12 +348,15 @@ MeshRenderer: m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 + m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 926489ece7dc4c440977be56882d0bd0, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -329,12 +364,14 @@ MeshRenderer: m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &149056954 MeshFilter: @@ -348,11 +385,11 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 207243952} - - 33: {fileID: 207243954} - - 23: {fileID: 207243953} + - component: {fileID: 207243952} + - component: {fileID: 207243954} + - component: {fileID: 207243953} m_Layer: 0 m_Name: pillar m_TagString: Untagged @@ -369,10 +406,10 @@ Transform: m_LocalRotation: {x: 0, y: -0.7071068, z: 0, w: 0.7071068} m_LocalPosition: {x: 0.50481904, y: 3.05, z: -8.201789} m_LocalScale: {x: 2, y: 6, z: 2} - m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} m_Children: [] m_Father: {fileID: 1240259092} m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} --- !u!23 &207243953 MeshRenderer: m_ObjectHideFlags: 0 @@ -382,12 +419,15 @@ MeshRenderer: m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 + m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 926489ece7dc4c440977be56882d0bd0, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -395,12 +435,14 @@ MeshRenderer: m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &207243954 MeshFilter: @@ -409,1845 +451,16 @@ MeshFilter: m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 207243951} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &640144952 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 4 - m_Component: - - 4: {fileID: 640144953} - - 198: {fileID: 640144955} - - 199: {fileID: 640144954} - m_Layer: 0 - m_Name: particle system - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &640144953 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 640144952} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_Children: [] - m_Father: {fileID: 73422368} - m_RootOrder: 1 ---- !u!199 &640144954 -ParticleSystemRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 640144952} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 0 - m_Materials: - - {fileID: 10301, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 0} - m_SubsetIndices: - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_SelectedWireframeHidden: 1 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingOrder: 0 - m_RenderMode: 0 - m_SortMode: 0 - m_MinParticleSize: 0 - m_MaxParticleSize: 0.5 - m_CameraVelocityScale: 0 - m_VelocityScale: 0 - m_LengthScale: 2 - m_SortingFudge: 0 - m_NormalDirection: 1 - m_RenderAlignment: 0 - m_Pivot: {x: 0, y: 0, z: 0} - m_Mesh: {fileID: 0} - m_Mesh1: {fileID: 0} - m_Mesh2: {fileID: 0} - m_Mesh3: {fileID: 0} ---- !u!198 &640144955 -ParticleSystem: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 640144952} - serializedVersion: 4 - lengthInSec: 5 - startDelay: - scalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - speed: 1 - looping: 1 - prewarm: 1 - playOnAwake: 1 - moveWithTransform: 0 - autoRandomSeed: 1 - scalingMode: 1 - randomSeed: 1444735993 - InitialModule: - serializedVersion: 2 - enabled: 1 - startLifetime: - scalar: 0.2 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - startSpeed: - scalar: 8 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - startColor: - serializedVersion: 2 - maxGradient: - key0: - serializedVersion: 2 - rgba: 4294967295 - key1: - serializedVersion: 2 - rgba: 4294967295 - key2: - serializedVersion: 2 - rgba: 0 - key3: - serializedVersion: 2 - rgba: 0 - key4: - serializedVersion: 2 - rgba: 0 - key5: - serializedVersion: 2 - rgba: 0 - key6: - serializedVersion: 2 - rgba: 0 - key7: - serializedVersion: 2 - rgba: 0 - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minGradient: - key0: - serializedVersion: 2 - rgba: 4294967295 - key1: - serializedVersion: 2 - rgba: 4294967295 - key2: - serializedVersion: 2 - rgba: 0 - key3: - serializedVersion: 2 - rgba: 0 - key4: - serializedVersion: 2 - rgba: 0 - key5: - serializedVersion: 2 - rgba: 0 - key6: - serializedVersion: 2 - rgba: 0 - key7: - serializedVersion: 2 - rgba: 0 - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} - minMaxState: 0 - startSize: - scalar: 1.98 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - startSizeY: - scalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - startSizeZ: - scalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - startRotationX: - scalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - startRotationY: - scalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - startRotation: - scalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - randomizeRotationDirection: 0 - gravityModifier: NaN - maxNumParticles: 1000 - size3D: 0 - rotation3D: 0 - ShapeModule: - serializedVersion: 2 - enabled: 1 - type: 14 - radius: 0.01 - angle: 84.02 - length: 5 - boxX: 1 - boxY: 1 - boxZ: 1 - arc: NaN - placementMode: 0 - m_Mesh: {fileID: 0} - m_MeshRenderer: {fileID: 0} - m_SkinnedMeshRenderer: {fileID: 0} - m_MeshMaterialIndex: 0 - m_MeshNormalOffset: 0 - m_UseMeshMaterialIndex: 0 - m_UseMeshColors: 1 - randomDirection: 0 - EmissionModule: - enabled: 1 - serializedVersion: 2 - m_Type: 0 - rate: - scalar: 10 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - cnt0: 30 - cnt1: 30 - cnt2: 30 - cnt3: 30 - cntmax0: 30 - cntmax1: 30 - cntmax2: 30 - cntmax3: 30 - time0: 0 - time1: 0 - time2: 0 - time3: 0 - m_BurstCount: 0 - SizeModule: - enabled: 1 - curve: - scalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 1 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 1 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 1 - y: - scalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 1 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 1 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 1 - z: - scalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 1 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 1 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 1 - separateAxes: 0 - RotationModule: - enabled: 0 - x: - scalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - y: - scalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - curve: - scalar: 0.7853982 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - separateAxes: 0 - ColorModule: - enabled: 0 - gradient: - serializedVersion: 2 - maxGradient: - key0: - serializedVersion: 2 - rgba: 4294967295 - key1: - serializedVersion: 2 - rgba: 4294967295 - key2: - serializedVersion: 2 - rgba: 0 - key3: - serializedVersion: 2 - rgba: 0 - key4: - serializedVersion: 2 - rgba: 0 - key5: - serializedVersion: 2 - rgba: 0 - key6: - serializedVersion: 2 - rgba: 0 - key7: - serializedVersion: 2 - rgba: 0 - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minGradient: - key0: - serializedVersion: 2 - rgba: 4294967295 - key1: - serializedVersion: 2 - rgba: 4294967295 - key2: - serializedVersion: 2 - rgba: 0 - key3: - serializedVersion: 2 - rgba: 0 - key4: - serializedVersion: 2 - rgba: 0 - key5: - serializedVersion: 2 - rgba: 0 - key6: - serializedVersion: 2 - rgba: 0 - key7: - serializedVersion: 2 - rgba: 0 - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} - minMaxState: 1 - UVModule: - enabled: 0 - frameOverTime: - scalar: 0.9999 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 1 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 1 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 1 - startFrame: - scalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - tilesX: 1 - tilesY: 1 - animationType: 0 - rowIndex: 0 - cycles: 1 - uvChannelMask: -1 - randomRow: 1 - VelocityModule: - enabled: 0 - x: - scalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - y: - scalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - z: - scalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - inWorldSpace: 0 - InheritVelocityModule: - enabled: 0 - m_Mode: 0 - m_Curve: - scalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - ForceModule: - enabled: 0 - x: - scalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - y: - scalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - z: - scalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - inWorldSpace: 0 - randomizePerFrame: 0 - ExternalForcesModule: - enabled: 0 - multiplier: 1 - ClampVelocityModule: - enabled: 0 - x: - scalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - y: - scalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - z: - scalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - magnitude: - scalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - separateAxis: 0 - inWorldSpace: 0 - dampen: 1 - SizeBySpeedModule: - enabled: 0 - curve: - scalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 1 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 1 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 1 - y: - scalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 1 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 1 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 1 - z: - scalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 1 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 1 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 1 - range: {x: 0, y: 1} - separateAxes: 0 - RotationBySpeedModule: - enabled: 0 - x: - scalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - y: - scalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - curve: - scalar: 0.7853982 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - separateAxes: 0 - range: {x: 0, y: 1} - ColorBySpeedModule: - enabled: 0 - gradient: - serializedVersion: 2 - maxGradient: - key0: - serializedVersion: 2 - rgba: 4294967295 - key1: - serializedVersion: 2 - rgba: 4294967295 - key2: - serializedVersion: 2 - rgba: 0 - key3: - serializedVersion: 2 - rgba: 0 - key4: - serializedVersion: 2 - rgba: 0 - key5: - serializedVersion: 2 - rgba: 0 - key6: - serializedVersion: 2 - rgba: 0 - key7: - serializedVersion: 2 - rgba: 0 - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minGradient: - key0: - serializedVersion: 2 - rgba: 4294967295 - key1: - serializedVersion: 2 - rgba: 4294967295 - key2: - serializedVersion: 2 - rgba: 0 - key3: - serializedVersion: 2 - rgba: 0 - key4: - serializedVersion: 2 - rgba: 0 - key5: - serializedVersion: 2 - rgba: 0 - key6: - serializedVersion: 2 - rgba: 0 - key7: - serializedVersion: 2 - rgba: 0 - ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 - ctime4: 0 - ctime5: 0 - ctime6: 0 - ctime7: 0 - atime0: 0 - atime1: 65535 - atime2: 0 - atime3: 0 - atime4: 0 - atime5: 0 - atime6: 0 - atime7: 0 - m_NumColorKeys: 2 - m_NumAlphaKeys: 2 - minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} - minMaxState: 1 - range: {x: 0, y: 1} - CollisionModule: - enabled: 0 - serializedVersion: 3 - type: 0 - collisionMode: 0 - plane0: {fileID: 0} - plane1: {fileID: 0} - plane2: {fileID: 0} - plane3: {fileID: 0} - plane4: {fileID: 0} - plane5: {fileID: 0} - m_Dampen: - scalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - m_Bounce: - scalar: 1 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - m_EnergyLossOnCollision: - scalar: 0 - maxCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minCurve: - serializedVersion: 2 - m_Curve: - - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - minMaxState: 0 - minKillSpeed: 0 - maxKillSpeed: 10000 - radiusScale: 1 - collidesWith: - serializedVersion: 2 - m_Bits: 4294967295 - maxCollisionShapes: 256 - quality: 0 - voxelSize: 0.5 - collisionMessages: 0 - collidesWithDynamic: 1 - interiorCollisions: 0 - TriggerModule: - enabled: 0 - collisionShape0: {fileID: 0} - collisionShape1: {fileID: 0} - collisionShape2: {fileID: 0} - collisionShape3: {fileID: 0} - collisionShape4: {fileID: 0} - collisionShape5: {fileID: 0} - inside: 1 - outside: 0 - enter: 0 - exit: 0 - radiusScale: 1 - SubModule: - enabled: 0 - subEmitterBirth: {fileID: 0} - subEmitterBirth1: {fileID: 0} - subEmitterCollision: {fileID: 0} - subEmitterCollision1: {fileID: 0} - subEmitterDeath: {fileID: 0} - subEmitterDeath1: {fileID: 0} --- !u!1 &721978562 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 721978563} - - 33: {fileID: 721978565} - - 23: {fileID: 721978564} + - component: {fileID: 721978563} + - component: {fileID: 721978565} + - component: {fileID: 721978564} m_Layer: 0 m_Name: pillar m_TagString: Untagged @@ -2264,10 +477,10 @@ Transform: m_LocalRotation: {x: 0, y: -0.7071068, z: 0, w: 0.7071068} m_LocalPosition: {x: -0.4848179, y: 1.532, z: 8.949689} m_LocalScale: {x: 2, y: 2.9627726, z: 2.000002} - m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} m_Children: [] m_Father: {fileID: 1240259092} m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} --- !u!23 &721978564 MeshRenderer: m_ObjectHideFlags: 0 @@ -2277,12 +490,15 @@ MeshRenderer: m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 + m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 926489ece7dc4c440977be56882d0bd0, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -2290,12 +506,14 @@ MeshRenderer: m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &721978565 MeshFilter: @@ -2309,12 +527,12 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 737355971} - - 33: {fileID: 737355974} - - 135: {fileID: 737355973} - - 23: {fileID: 737355972} + - component: {fileID: 737355971} + - component: {fileID: 737355974} + - component: {fileID: 737355973} + - component: {fileID: 737355972} m_Layer: 0 m_Name: moon m_TagString: Untagged @@ -2331,10 +549,10 @@ Transform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 70.732, z: 0} m_LocalScale: {x: 7.510821, y: 7.510817, z: 7.510817} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_Children: [] m_Father: {fileID: 1240259092} m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &737355972 MeshRenderer: m_ObjectHideFlags: 0 @@ -2344,12 +562,15 @@ MeshRenderer: m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 + m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 84759e1ab6862004baa1620fcdf97ae1, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -2357,12 +578,14 @@ MeshRenderer: m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!135 &737355973 SphereCollider: @@ -2388,11 +611,11 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 100020, guid: b505ecb46d46f8748abdafa5bec5eaaf, type: 3} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 863878547} - - 33: {fileID: 863878549} - - 23: {fileID: 863878548} + - component: {fileID: 863878547} + - component: {fileID: 863878549} + - component: {fileID: 863878548} m_Layer: 0 m_Name: floor m_TagString: Untagged @@ -2409,10 +632,10 @@ Transform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0.06901227, z: 0} m_LocalScale: {x: 218.14139, y: 3.1542416, z: 218.14139} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_Children: [] m_Father: {fileID: 1240259092} m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &863878548 MeshRenderer: m_ObjectHideFlags: 0 @@ -2423,12 +646,15 @@ MeshRenderer: m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 + m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 4b129a766c919aa4487b71dce37531d8, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -2436,12 +662,14 @@ MeshRenderer: m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &863878549 MeshFilter: @@ -2456,11 +684,11 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 1034111693} - - 33: {fileID: 1034111695} - - 23: {fileID: 1034111694} + - component: {fileID: 1034111693} + - component: {fileID: 1034111695} + - component: {fileID: 1034111694} m_Layer: 0 m_Name: pillar m_TagString: Untagged @@ -2477,10 +705,10 @@ Transform: m_LocalRotation: {x: -0, y: -0.92598146, z: -0, w: 0.3775691} m_LocalPosition: {x: -6.466659, y: 1.902, z: 6.0167375} m_LocalScale: {x: 2.000001, y: 3.7039647, z: 2.000002} - m_LocalEulerAnglesHint: {x: 0, y: -135.634, z: 0} m_Children: [] m_Father: {fileID: 1240259092} m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: -135.634, z: 0} --- !u!23 &1034111694 MeshRenderer: m_ObjectHideFlags: 0 @@ -2490,12 +718,15 @@ MeshRenderer: m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 + m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 926489ece7dc4c440977be56882d0bd0, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -2503,12 +734,14 @@ MeshRenderer: m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &1034111695 MeshFilter: @@ -2562,7 +795,7 @@ Prefab: objectReference: {fileID: 0} - target: {fileID: 11436198, guid: 0b82dd794175b304a87805e4b38fbe84, type: 2} propertyPath: autoStartServer - value: 1 + value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] m_ParentPrefab: {fileID: 100100000, guid: 0b82dd794175b304a87805e4b38fbe84, type: 2} @@ -2619,11 +852,11 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 1206254921} - - 33: {fileID: 1206254923} - - 23: {fileID: 1206254922} + - component: {fileID: 1206254921} + - component: {fileID: 1206254923} + - component: {fileID: 1206254922} m_Layer: 0 m_Name: pillar m_TagString: Untagged @@ -2640,10 +873,10 @@ Transform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -8.58, y: 2.336, z: 0.37395} m_LocalScale: {x: 2, y: 4.5728035, z: 2.000001} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_Children: [] m_Father: {fileID: 1240259092} m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1206254922 MeshRenderer: m_ObjectHideFlags: 0 @@ -2653,12 +886,15 @@ MeshRenderer: m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 + m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 926489ece7dc4c440977be56882d0bd0, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -2666,12 +902,14 @@ MeshRenderer: m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &1206254923 MeshFilter: @@ -2685,9 +923,9 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 100022, guid: b505ecb46d46f8748abdafa5bec5eaaf, type: 3} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 1240259092} + - component: {fileID: 1240259092} m_Layer: 0 m_Name: environment m_TagString: Untagged @@ -2704,7 +942,6 @@ Transform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: -1.5, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_Children: - {fileID: 1550958551} - {fileID: 1206254921} @@ -2721,16 +958,17 @@ Transform: - {fileID: 73422368} m_Father: {fileID: 0} m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1374387673 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 100016, guid: b505ecb46d46f8748abdafa5bec5eaaf, type: 3} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 1374387674} - - 33: {fileID: 1374387676} - - 23: {fileID: 1374387675} + - component: {fileID: 1374387674} + - component: {fileID: 1374387676} + - component: {fileID: 1374387675} m_Layer: 0 m_Name: floor m_TagString: Untagged @@ -2747,10 +985,10 @@ Transform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -0, y: -0.24301311, z: 0} m_LocalScale: {x: 4.938097, y: 4.9380946, z: 4.9380946} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_Children: [] m_Father: {fileID: 1240259092} m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1374387675 MeshRenderer: m_ObjectHideFlags: 0 @@ -2761,12 +999,15 @@ MeshRenderer: m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 + m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 4b129a766c919aa4487b71dce37531d8, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -2774,12 +1015,14 @@ MeshRenderer: m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &1374387676 MeshFilter: @@ -2794,11 +1037,11 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 100018, guid: b505ecb46d46f8748abdafa5bec5eaaf, type: 3} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 1463622032} - - 33: {fileID: 1463622034} - - 23: {fileID: 1463622033} + - component: {fileID: 1463622032} + - component: {fileID: 1463622034} + - component: {fileID: 1463622033} m_Layer: 0 m_Name: floor m_TagString: Untagged @@ -2815,10 +1058,10 @@ Transform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: -0.0070893243, z: 0} m_LocalScale: {x: 1.477957, y: 1.477957, z: 1.477957} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_Children: [] m_Father: {fileID: 1240259092} m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1463622033 MeshRenderer: m_ObjectHideFlags: 0 @@ -2829,12 +1072,15 @@ MeshRenderer: m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 + m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 4b129a766c919aa4487b71dce37531d8, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -2842,12 +1088,14 @@ MeshRenderer: m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &1463622034 MeshFilter: @@ -2862,11 +1110,11 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 1550958551} - - 33: {fileID: 1550958553} - - 23: {fileID: 1550958552} + - component: {fileID: 1550958551} + - component: {fileID: 1550958553} + - component: {fileID: 1550958552} m_Layer: 0 m_Name: pillar m_TagString: Untagged @@ -2883,10 +1131,10 @@ Transform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 8.6, y: 0.595, z: 0.37395} m_LocalScale: {x: 2, y: 1.0907731, z: 2.000001} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_Children: [] m_Father: {fileID: 1240259092} m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1550958552 MeshRenderer: m_ObjectHideFlags: 0 @@ -2896,12 +1144,15 @@ MeshRenderer: m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 + m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 926489ece7dc4c440977be56882d0bd0, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -2909,12 +1160,14 @@ MeshRenderer: m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &1550958553 MeshFilter: @@ -2928,11 +1181,11 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 1668082207} - - 33: {fileID: 1668082209} - - 23: {fileID: 1668082208} + - component: {fileID: 1668082207} + - component: {fileID: 1668082209} + - component: {fileID: 1668082208} m_Layer: 0 m_Name: pillar m_TagString: Untagged @@ -2949,10 +1202,10 @@ Transform: m_LocalRotation: {x: -0, y: -0.92598146, z: -0, w: 0.3775691} m_LocalPosition: {x: 6.486658, y: 0.204, z: -5.268836} m_LocalScale: {x: 2.000001, y: 0.30846643, z: 2.000001} - m_LocalEulerAnglesHint: {x: 0, y: -135.634, z: 0} m_Children: [] m_Father: {fileID: 1240259092} m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: -135.634, z: 0} --- !u!23 &1668082208 MeshRenderer: m_ObjectHideFlags: 0 @@ -2962,12 +1215,15 @@ MeshRenderer: m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 + m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: 926489ece7dc4c440977be56882d0bd0, type: 2} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} @@ -2975,12 +1231,14 @@ MeshRenderer: m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_SelectedWireframeHidden: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &1668082209 MeshFilter: @@ -2994,10 +1252,10 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 2039723749} - - 108: {fileID: 2039723750} + - component: {fileID: 2039723749} + - component: {fileID: 2039723750} m_Layer: 0 m_Name: pointlight m_TagString: Untagged @@ -3014,10 +1272,10 @@ Transform: m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} m_Children: [] m_Father: {fileID: 73422368} m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} --- !u!108 &2039723750 Light: m_ObjectHideFlags: 0 @@ -3025,7 +1283,7 @@ Light: m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 2039723748} m_Enabled: 1 - serializedVersion: 7 + serializedVersion: 8 m_Type: 1 m_Color: {r: 0.75, g: 0.75, b: 0.75, a: 1} m_Intensity: 1 @@ -3050,5 +1308,7 @@ Light: m_Lightmapping: 1 m_AreaSize: {x: 1, y: 1} m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 diff --git a/OSVR-Unity/Assets/OSVRUnity/src/ClientKit.cs b/OSVR-Unity/Assets/OSVRUnity/src/ClientKit.cs index e00d121..7190835 100644 --- a/OSVR-Unity/Assets/OSVRUnity/src/ClientKit.cs +++ b/OSVR-Unity/Assets/OSVRUnity/src/ClientKit.cs @@ -132,12 +132,12 @@ private void EnsureStarted() if (!_osvrServerError) { _osvrServerError = true; - Debug.LogError("[OSVR-Unity] OSVR Server not detected. Start OSVR Server and restart the application."); + Debug.LogError("[OSVR-Unity] ClientKit:: OSVR Server not detected. Start OSVR Server and restart the application."); } } else if (_osvrServerError) { - Debug.Log("[OSVR-Unity] OSVR Server connection established. You can ignore previous errors about the server not being detected."); + Debug.Log("[OSVR-Unity] ClientKit:: OSVR Server connection established. You can ignore previous errors about the server not being detected."); _osvrServerError = false; } @@ -161,17 +161,18 @@ void Awake() Destroy(this.gameObject); } } + EnsureStarted(); } void Start() { - Debug.Log("[OSVR-Unity] In Start()"); + Debug.Log("[OSVR-Unity] In ClientKit::Start()"); EnsureStarted(); } void OnEnable() { - Debug.Log("[OSVR-Unity] In OnEnable()"); + Debug.Log("[OSVR-Unity] In ClientKit::OnEnable()"); EnsureStarted(); } @@ -181,10 +182,11 @@ void Update() _contextObject.update(); } - void LateUpdate() + //is there any merit to using lateupdate? + /* void LateUpdate() { _contextObject.update(); - } + }*/ void Stop() { @@ -194,7 +196,7 @@ void Stop() { if (null != _contextObject) { - Debug.Log("[OSVR-Unity] Shutting down OSVR."); + Debug.Log("[OSVR-Unity] ClientKit::Shutting down OSVR."); _contextObject.Dispose(); _contextObject = null; #if UNITY_STANDALONE_WIN || UNITY_ANDROID diff --git a/OSVR-Unity/Assets/OSVRUnity/src/OsvrRenderManager.cs b/OSVR-Unity/Assets/OSVRUnity/src/OsvrRenderManager.cs index 61db30c..13acd64 100644 --- a/OSVR-Unity/Assets/OSVRUnity/src/OsvrRenderManager.cs +++ b/OSVR-Unity/Assets/OSVRUnity/src/OsvrRenderManager.cs @@ -86,6 +86,11 @@ private static extern Byte private static extern Byte CreateRenderManagerFromUnity(OSVR.ClientKit.SafeClientContextHandle /*OSVR_ClientContext*/ ctx); + //Pass a ClientContext to the Unity rendering plugin + [DllImport(PluginName)] + private static extern Byte + SetOsvrClientContextFromUnity(OSVR.ClientKit.SafeClientContextHandle /*OSVR_ClientContext*/ ctx); + [DllImport(PluginName)] private static extern OSVR.ClientKit.Pose3 GetEyePose(int eye); @@ -201,6 +206,11 @@ public int InitRenderManager() return CreateRenderManager(ClientKit.instance.context); } + public int SetOsvrClientContext() + { + return SetOsvrClientContextFromUnity(ClientKit.instance.context.ContextHandle); + } + //Create and Register RenderBuffers in RenderManager //Called after RM is created and after Unity RenderTexture's are created and assigned via SetEyeColorBuffer public int CreateBuffers() diff --git a/OSVR-Unity/Assets/OSVRUnity/src/OsvrUnityNativeVR.cs b/OSVR-Unity/Assets/OSVRUnity/src/OsvrUnityNativeVR.cs index 9bba68d..e5e3a42 100644 --- a/OSVR-Unity/Assets/OSVRUnity/src/OsvrUnityNativeVR.cs +++ b/OSVR-Unity/Assets/OSVRUnity/src/OsvrUnityNativeVR.cs @@ -65,6 +65,8 @@ public enum StereoRigSetup private RenderTexture StereoTargetRenderTextureLeft_buffer2; private RenderTexture StereoTargetRenderTextureRight_buffer2; + private IEnumerator _endOfFrameCoroutine; + private WaitForEndOfFrame _waitForEndOfFrame; private ClientKit _clientKit; private OSVR.ClientKit.DisplayConfig _displayConfig; @@ -119,7 +121,41 @@ void Awake() Debug.LogError("[OSVR-Unity] Two-camera VR setup cannot find 2nd camera. Add a 2nd camera as a sibling of the main camera."); } } + _waitForEndOfFrame = new WaitForEndOfFrame(); + _endOfFrameCoroutine = EndOfFrame(); + + } + void OnEnable() + { + + } + + void OnDisable() + { + StopCoroutine(_endOfFrameCoroutine); + + } + // This couroutine is called every frame. + IEnumerator EndOfFrame() + { + while (true) + { + yield return _waitForEndOfFrame; + if (_displayConfigInitialized && RenderManager != null && _renderManagerConfigFound) + { + GL.IssuePluginEvent(RenderManager.GetRenderEventFunction(), OsvrRenderManager.RENDER_EVENT); + SwapRenderTextures(); + + } + } } + + void OnPostRender() + { + GL.Flush(); + + } + void Start() { _clientKit = ClientKit.instance; @@ -135,14 +171,17 @@ void Start() void SetVRAppSettings() { //Disable autovr camera tracking since the camera's transform is set by RenderManager poses. -#if UNITY_2017 - if(_clientKit.context.CheckStatus()) - { - VRDevice.DisableAutoVRCameraTracking(_camera0, true); - } +#if UNITY_2017_2_OR_NEWER + UnityEngine.XR.XRDevice.DisableAutoXRCameraTracking(_camera0, true); + UnityEngine.XR.XRSettings.showDeviceView = false; +#elif UNITY_2017_1 + UnityEngine.VR.VRDevice.DisableAutoVRCameraTracking(_camera0, true); + UnityEngine.VR.VRSettings.showDeviceView = false; +#else + UnityEngine.VR.VRSettings.showDeviceView = false; #endif - VRSettings.showDeviceView = false; + //Application.targetFrameRate = 90; Application.targetFrameRate = -1; @@ -157,8 +196,11 @@ void SetVRAppSettings() // and that a RenderManager config file is being used. void CreateRenderManager() { + Debug.Log("[OSVR-Unity] OsvrUnityNativeVR::CreateRenderManager"); + //check if we are configured to use RenderManager or not string renderManagerPath = _clientKit.context.getStringParameter("/renderManagerConfig"); + Debug.LogError("[OSVR-Unity] RenderManager Path = " + renderManagerPath); _renderManagerConfigFound = !(renderManagerPath == null || renderManagerPath.Equals("")); if (_renderManagerConfigFound) { @@ -182,7 +224,12 @@ void CreateRenderManager() else { #if UNITY_ANDROID + Debug.Log("[OSVR-Unity] Passing client context to OSVR-Unity-Rendering plugin."); + RenderManager.SetOsvrClientContext(); + + Debug.Log("[OSVR-Unity] Sending event to create RenderManager in OSVR-Unity-Rendering plugin."); //we have to create RenderManager on the rendering thread on Android, but not on Windows + //which means we have to use GL.IssuePluginEvent rather than calling a function in the plugin directly by name GL.IssuePluginEvent(RenderManager.GetRenderEventFunction(), OsvrRenderManager.CREATE_RENDERMANAGER_EVENT); #else // attempt to create a RenderManager in the plugin @@ -191,7 +238,12 @@ void CreateRenderManager() { Debug.LogError("[OSVR-Unity] Failed to create RenderManager."); _renderManagerConfigFound = false; - VRSettings.enabled = false; //disable VR mode + +#if UNITY_2017_2_0_OR_NEWER + UnityEngine.XR.XRSettings.enabled = false; //disable VR mode +#else + UnityEngine.VR.VRSettings.enabled = false; //disable VR mode +#endif } #endif @@ -205,8 +257,10 @@ void CreateRenderManager() // Get a DisplayConfig object from the server via ClientKit. // Setup stereo rendering with DisplayConfig data. - IEnumerator Init() + void InitDisplayConfig() { + Debug.Log("[OSVR-Unity] OsvrUnityNativeVR::InitDisplayConfig"); + //get the DisplayConfig object from ClientKit if (_clientKit == null || _clientKit.context == null) { @@ -215,46 +269,58 @@ IEnumerator Init() Debug.LogError("[OSVR-Unity] ClientContext is null. Can't setup display."); _osvrClientKitError = true; } - yield return null; + return; } - SetVRAppSettings(); _displayConfig = _clientKit.context.GetDisplayConfig(); if (_displayConfig == null) { - yield return null; + return; } + _displayConfigInitialized = true; - if (!_renderManagerConfigFound || RenderManager == null) - { - yield return null; - } + } + private bool rmInit = false; + void InitRenderManager() + { + Debug.Log("[OSVR-Unity] OsvrUnityNativeVR::InitRenderManager"); #if !UNITY_ANDROID //@todo figure out why the function below crashes with Android multithreading SetupStereoCamerarig(); #endif - SetResolution(); - CreateRenderTextures(); //create RenderBuffers in RenderManager - if (_renderManagerConfigFound && RenderManager != null) - { + if (_renderManagerConfigFound && RenderManager != null && !rmInit) + { + SetVRAppSettings(); + SetResolution(); + CreateRenderTextures(); #if UNITY_ANDROID - //we have to create renderbufffers on the rendering thread on Android, but not on Windows - GL.IssuePluginEvent(RenderManager.GetRenderEventFunction(), OsvrRenderManager.CREATE_RENDERBUFFERS_EVENT); + //we have to create renderbufffers on the rendering thread on Android, but not on Windows + GL.IssuePluginEvent(RenderManager.GetRenderEventFunction(), OsvrRenderManager.CREATE_RENDERBUFFERS_EVENT); #else RenderManager.CreateBuffers(); #endif + SetRenderParams(); + StartCoroutine(_endOfFrameCoroutine); + rmInit = true; + } + else + { + Debug.LogError("[OSVR-Unity] RenderManager Not Initialized."); + if(!_renderManagerConfigFound) + { + Debug.LogError("[OSVR-Unity] RenderManager Config Not Found."); - } + } - SetRenderParams(); + CreateRenderManager(); + } } - /* * We currently are only able to set the projection matrix of each eye with a two camera setup, via camera.projectionMatrix. * For configurations where the projection matrix for each eye is identical, we use the one-camera setup. @@ -332,7 +398,6 @@ private void SetResolution() TotalDisplayWidth += (uint)surfaceDisplayDimensions.Width; //add up the width of each eye TotalDisplayHeight = (uint)surfaceDisplayDimensions.Height; //store the height -- this shouldn't change } - //Set the resolution. Don't force fullscreen if we have multiple display inputs //We only need to do this if we aren't using RenderManager, because it adjusts the window size for us //@todo figure out why this causes problems with direct mode, perhaps overfill factor? @@ -510,25 +575,19 @@ void SwapRenderTextures() frameCount++; } - void OnPreCull() - { - if (_displayConfigInitialized && RenderManager != null && _renderManagerConfigFound) - { - - SwapRenderTextures(); - } - } - - void LateUpdate() { // sometimes it takes a few frames to get a DisplayConfig from ClientKit // keep trying until we have initialized if (!_displayConfigInitialized) { - StartCoroutine(Init()); + InitDisplayConfig(); } - else if (_displayConfigInitialized && RenderManager != null && _renderManagerConfigFound) + else if(_displayConfigInitialized && !rmInit) + { + InitRenderManager(); + } + if (_displayConfigInitialized && rmInit && RenderManager != null && _renderManagerConfigFound) { GL.IssuePluginEvent(RenderManager.GetRenderEventFunction(), OsvrRenderManager.UPDATE_RENDERINFO_EVENT); if (stereoRigSetup == StereoRigSetup.OneCameraBothEyes) @@ -540,7 +599,7 @@ void LateUpdate() { UpdateEyePoses(); } - GL.IssuePluginEvent(RenderManager.GetRenderEventFunction(), OsvrRenderManager.RENDER_EVENT); + // GL.IssuePluginEvent(RenderManager.GetRenderEventFunction(), OsvrRenderManager.RENDER_EVENT); // SwapRenderTextures(); } } @@ -598,39 +657,43 @@ private void SetProjectionMatrix() // Updates the position and rotation of the eye // Optionally, update the viewer associated with this eye + private Vector3 pos0; + private Vector3 pos1; + private Vector3 pos2; + private Quaternion rot0; + private Quaternion rot1; + private Quaternion slerpedRot0; + private OSVR.ClientKit.Pose3 eyePose0; + private OSVR.ClientKit.Pose3 eyePose1; public void UpdateEyePoses() { - OSVR.ClientKit.Pose3 eyePose0 = RenderManager.GetRenderManagerEyePose((byte)0); - OSVR.ClientKit.Pose3 eyePose1 = RenderManager.GetRenderManagerEyePose((byte)1); - + eyePose0 = RenderManager.GetRenderManagerEyePose((byte)0); + eyePose1 = RenderManager.GetRenderManagerEyePose((byte)1); // Convert from OSVR space into Unity space. - Vector3 pos0 = OSVR.Unity.Math.ConvertPosition(eyePose0.translation); - Quaternion rot0 = OSVR.Unity.Math.ConvertOrientation(eyePose0.rotation); + pos0 = OSVR.Unity.Math.ConvertPosition(eyePose0.translation); + rot0 = OSVR.Unity.Math.ConvertOrientation(eyePose0.rotation); - Vector3 pos1 = OSVR.Unity.Math.ConvertPosition(eyePose1.translation); - Quaternion rot1 = OSVR.Unity.Math.ConvertOrientation(eyePose1.rotation); + pos1 = OSVR.Unity.Math.ConvertPosition(eyePose1.translation); + rot1 = OSVR.Unity.Math.ConvertOrientation(eyePose1.rotation); if (stereoRigSetup == StereoRigSetup.OneCameraBothEyes && _camera0CachedTransform != null) { - Quaternion slerpedRot = Quaternion.Slerp(rot0, rot1, 0.5f); - Vector3 pos = new Vector3((pos0.x + pos1.x) * 0.5f, (pos0.y + pos1.y) * 0.5f, (pos0.z + pos1.z) * 0.5f); + slerpedRot0 = Quaternion.Slerp(rot0, rot1, 0.5f); + pos2 = new Vector3((pos0.x + pos1.x) * 0.5f, (pos0.y + pos1.y) * 0.5f, (pos0.z + pos1.z) * 0.5f); // Invert the transformation - _camera0CachedTransform.localRotation = Quaternion.Inverse(slerpedRot); - Vector3 invPos = -pos; - _camera0CachedTransform.localPosition = Quaternion.Inverse(slerpedRot) * invPos; + _camera0CachedTransform.localRotation = Quaternion.Inverse(slerpedRot0); + _camera0CachedTransform.localPosition = Quaternion.Inverse(slerpedRot0) * -pos2; } else if (_camera0CachedTransform != null && _camera1CachedTransform != null)//two-camera setup { //this script is attached to the left eye, with a right-eye sibling gameobject _camera0CachedTransform.localRotation = Quaternion.Inverse(rot0); - Vector3 invPos = -pos0; - _camera0CachedTransform.localPosition = Quaternion.Inverse(rot0) * invPos; + _camera0CachedTransform.localPosition = Quaternion.Inverse(rot0) * -pos0; _camera1CachedTransform.localRotation = Quaternion.Inverse(rot1); - invPos = -pos1; - _camera1CachedTransform.localPosition = Quaternion.Inverse(rot1) * invPos; + _camera1CachedTransform.localPosition = Quaternion.Inverse(rot1) * -pos1; } } @@ -639,24 +702,22 @@ public void UpdateEyePoses() // Optionally, update the viewer associated with this head public void UpdateHeadPose() { - OSVR.ClientKit.Pose3 eyePose0 = RenderManager.GetRenderManagerEyePose((byte)0); - OSVR.ClientKit.Pose3 eyePose1 = RenderManager.GetRenderManagerEyePose((byte)1); - + eyePose0 = RenderManager.GetRenderManagerEyePose((byte)0); + eyePose1 = RenderManager.GetRenderManagerEyePose((byte)1); // Convert from OSVR space into Unity space. - Vector3 pos0 = OSVR.Unity.Math.ConvertPosition(eyePose0.translation); - Quaternion rot0 = OSVR.Unity.Math.ConvertOrientation(eyePose0.rotation); + pos0 = OSVR.Unity.Math.ConvertPosition(eyePose0.translation); + rot0 = OSVR.Unity.Math.ConvertOrientation(eyePose0.rotation); - Vector3 pos1 = OSVR.Unity.Math.ConvertPosition(eyePose1.translation); - Quaternion rot1 = OSVR.Unity.Math.ConvertOrientation(eyePose1.rotation); + pos1 = OSVR.Unity.Math.ConvertPosition(eyePose1.translation); + rot1 = OSVR.Unity.Math.ConvertOrientation(eyePose1.rotation); - Quaternion slerpedRot = Quaternion.Slerp(rot0, rot1, 0.5f); - Vector3 pos = new Vector3((pos0.x + pos1.x) * 0.5f, (pos0.y + pos1.y) * 0.5f, (pos0.z + pos1.z) * 0.5f); + slerpedRot0 = Quaternion.Slerp(rot0, rot1, 0.5f); + pos2 = new Vector3((pos0.x + pos1.x) * 0.5f, (pos0.y + pos1.y) * 0.5f, (pos0.z + pos1.z) * 0.5f); // Invert the transformation - _camera0CachedTransform.localRotation = Quaternion.Inverse(slerpedRot); - Vector3 invPos = -pos; - _camera0CachedTransform.localPosition = Quaternion.Inverse(slerpedRot) * invPos; + _camera0CachedTransform.localRotation = Quaternion.Inverse(slerpedRot0); + _camera0CachedTransform.localPosition = Quaternion.Inverse(slerpedRot0) * -pos2; } diff --git a/OSVR-Unity/Assets/Plugins/Android/libs/armeabi-v7a/libosvrUnityRenderingPlugin.so b/OSVR-Unity/Assets/Plugins/Android/libs/armeabi-v7a/libosvrUnityRenderingPlugin.so index fb72a8005b6a4a1b7665792f3c6fc2bc38607695..b4d86d16284a7fe456f3c4356e5175b770e3797c 100644 GIT binary patch literal 52904 zcmeIbeSDME`9FTA4G^F}LC}iG!h=`@YSR`dirUg7ZE2ykEv!B!p$SbOZDNwvBB<5j zL_f?SpjJV}O&ua?JLNNUAgHL!fh*2!=s=m``oL3h%)|-p_kErF-0kUUis0|}^7GHm zt5>h{KIb}5*LgnoeV^QI$+zlsIz=GHfpzOKxl;8aA z;p8sST4TZ!@z?vcXU7*Jyp8!tj zeF)wFT+8ui;3i9#e;aTvFx4f=4~7Ef2zUzc^}wV@^3MWx0gvL?4t$S*?*e`jSWAC3 z@D||lT>g3BPXzor@EHN`1Ri5W8M*u(;2VHva(oE*5#S7tj{yG#*vN4#3i5B@IF2u* zf^kFoNs{n25}pTKD(KeC{S@UF0=5D_EZ}>99})0Y;KzaEdH%iwegSv@$FneyYyl>HQ-1FP zejOOeGW-(oTLS(Q@E-)+0lZHLKe<2JE5}rSzmjkQ68;4KTKaXcdCS`F)aq3-Bt;M^LLWMj5R18QeX-;SwGv;ZzA{N;pTtH%Zto zVIS~85f`O*53pgSI=@hTJ}LP(0-NTl^C!v2 zqEJr)+tFT0-&ar}xuN_ONqDJ*Uy$$t34bZ!ctjevO6@;ml%YyC@Rd#3t%OOkH|J^=YNE1Eo*n(VM`_h5WPu&qR3AFNGgF8gqvb-?hMXf_ww;a`@wq z$&ddD_L%UeVo~{S2G$IF{L z1x|dp%U`kC%4!_8g`P@>*K>!9Lr2I};|VDRl|`;frz>Eoc2$Pp<#0I`cx+Xbw|gp` zwlcrp<_{z*wi_#NUxfd2O*0CD)q%`PXTaxissUYrER&@go=$He7)uH<+RD5xM`e{C zF6A{fHoq$n^ileuCAR8hW%k@$TR~;M&*4-SReCIy)t-Q_vZB`p=mse3ejasLNLjI;(2oLMVbl%ta0m!f*BjLypQa7r9w`I^`Ccm26jNzQ=XD-xmmx zy)fWgq6Y9zYM1*R#R#lc!Z5D^pJ-(oAfg|Wj z%Y|CiisVgzw~r`dW~%SG$Trb=v~?bX{{;sE|uDCOz2f(siuNTYBe4MgH0G_@?W#P7;2v!pwHw%a{USEYsZz^LQt4{SowhGtW5c}htyME5Fj2YglK?gGE7 zGCQA-T)7o~uPM2V4R~ZnF{ozF9v~&z;dJ(h20;t+cn|94S?CBjDuU+_ZCb!p;j4Ca z3miP>T$!d;I2OCIssaHF%sdpE#?D?C)70SY4nH5O&m-83AbOW85b~5cyv0i@%Xm=M z2EHf7X>JUlUbWktd-+nPmb*fjK>S|E5-T+7QuC~3x$qpynlh~`iefAd3aVX!0NQ6~ z9G+s6jrGiE𝔉fM{XQG6+Ny?>-DflQ`Qz5LLdHu3a2TNwpRGZDqbHOyy3SKNPTe zDxu>tS1zW^X(2cIhI6WoRFqpBGNssN(ON0!0e0nD3$4}FmTC)3u_L#5y3LY5cLvr# zl~q_7)j&AkSGL&Z_jx^KODriCi#bIdP=4f8)g>E>^JA9Plx&-0bE3UssiKwooYgrE zVFOi_o#Co62m1oKg{G;j>C@1x4iltylTFm@wC|VwKhcLdSu4$tUkk2aDBxQ{>1#`V zuhUaq;bYVA*+;9CRE!zwDyzg(frT~cUK=nL6{eWjl1Ua&%DmL_5j5nfa4CMZ8`&zV zuw1s07hBpPLf3qUx5_mat8sO^(p|C&YkbJsZbZ{fw%HJi?{-^oNigK9uwm%(1w7wB zt(Z(swfH>KotbgnR^{-rxMzf10Tc~0Kb!r2$2{D6K5EzIS z`lx{299*}N1P#+AG$75O(Tiq2ThQ$YU<3;}%9V1jx*9HaJFwdWR4v86ssJ`0@by*r zJziI*ceX2}+C9|@DgsJ}P^Tl+IF|X!!hnkcn^``2SX#zK8*h7GdeNHRtk#IyYP4+^ zd8kY8BBX$AN@i8aR~&K#FfJFn0+_2v7sbIeTanAJjxM}iLmv(-xA=aP>-gAwRXD4&+;KB$~IV3u#jn*I1|xEE%)rxNjD`_D^9NuYdf&uk_zhS>Mjl4 ztsMJ$4>tUn`94SlY}ovkuz9W11yhta)9dZRC=6PYn&EREwfXc`G9QKEfsjS&cWm29 zTIurn{yDWvGv}TIKFCIGlhP)O+FQ34hz4(VEp$|Q`FO_{uF>SwaMUrd2k@#JbT*{P z5zeiu=#tH?{2u8pQQFOS39ECRQsJs7^DpU{4(~5rp}RsthdNLvKN|EXRMBqawEq?xr$~VYX1f;RyxNp;@oC zpjT2)wdLaUg7S=Mi-sZ8mW8GO)~JHhu)*<^S5gmW3t==sjA9P2tE&-p9)EPL!p<)v zJgSoU=UW0~kp-G67JEU}!rsf=GXzxBO9(dDl>ERv%}}$1lc8vtVLf&_9qHiIE+sh& zLn{Vk?0M$nL{L5Uu@p|XEh?kqn?m&UMHT!k=#E}nP?ov|E}0*-eNnLUYOcMeW1<~e zm0xZ7B{-$43b=x_zwObV*&I{kD#ziRi;oC=KiE@NombJnv|~5kHOswhVTvlknIBIr z#oSwXGv+0?nnq{%Y!^RS|5f-SD|OD!5*z%{skF0o>agU_DyW-k*u+wZX$L2gs)st}2YZS}k>c9yFkaW2+^FJ&ML7RIFnH z4#noe6DBa*0`xF8`@yNwsdzmLvhyv))hS6qAAug-p1bp1JxAEvbK4?3amN#UA+&my zlIIBtZu3GOFNZj!4u-t^)QG#41#q_JsNpCWa+Xb+q+ zP%CII=;xqCAkEAGbnN3mN0e_9#{|>%{+ld_z z?7xNm3D9c6?Jd}!2JHdSYc2GuTRdnBhz!fPYE^y%{sqVg`W&R0&D=uoBa(Rl)XZ#( zvJJcmR1Vq%x)CIr=KyLzhe4l#LZDJmHfSt}UgO9FX@*`sItUsLS^>HPGz0V|h>Q!= z2>J);C6H{Mfx}+VUqBh4CqZQXpfcrG;8h?C=xxxWAToZHDO7YablXb9!3627pLE{O)3{aVp&$-4@G>gFJ3-&zNhl2FnZ4&1S zlQkK1q2#7P9k<|BtWGn#)7I0nOme!F|E%U$~pc2i4^IwAh40H|0 z)4_*vJ24ZeFK7d(0wkKt03PEG|HJuOQ2_RdpnE|9&|RP)=oZl3pi4nlg2=1_T?g_I zfboL*gGPhuL1ZR_oXn;uzX#t1>ccUyBG4d?tHC#N`%gJ1R>jzqc^l`aIFE3CnsZVRl~d1o z9OvUXPvm?u=gFMU=PNj0$@wbI z*K%IR`FhSbaQ-akhkv1#x0&-c&XtF_9ym8}ZsdGC=ZTz8<~*76G|tmGpUHU!=Vs1x zIM3(2kn$-1>?e-F`2cYYHiw8~z&T9Zh4muwg?JB`csbs^C+3F#yLC521dDSD}80W566m9FvWa_??(XiDS@C zBz`x>U*ffx+lb$T^%n8_Fh3LjIo4pr@5kDa_zKL$#2>)8Nc=%X$tRA1vyk|sn2U%% zhBYm5EO>4vj)jq(_!AiGiLXO@A&x=TOZ-W!H;F%mc0>GWtdWUtK>H#7E7U*nU!(qs zV}M^l{5jM=@fT44#5bY-iNA>YC%zf=PyA)nKk-*k|HSK2|HK>Yw;) zsDI*HQ2)fYqW+0*NBt9j6ZKDg2kM{rPSii~w^0AY-$wlte+TtX9Fy81;vb;?iT@Gx zPkayRpZH$XKk?nDf8rma{)zty^-uf@)cc_+U+E7${ng+@zdU4Ud-JQhLbQqZe)&b8 z4_1Cr*S75|&Av*ouMq6Dg1ttt`vtpOu-gTDsbDV@>^XuxL$Id{_GH1HDA~(^Dm0({X*lPuQjbQf+cDG=+3-(gMUMSde z1bc>HPZ#XTf;~~N8wGoUV2>B<2Encf_Q)AQ|AM_)upbia`vrTWVBam+cMA5cg1ug_ zZxrks$bQlgt8CfvFWWDRo0ThLPIg?I)vO%dc2XJg%|7J{a*sW5OGJMprtQ70;NR($ zr@z8PcIeOT9j(qeI9F(C%o>(|LEbX+kgwDFf6}5nFz7dbYf;LVnvK?XfZl0|Denl^ z9~+o!v<{rT#N6L~hk1K*V^&PtLt9_@mr`rqa`4&p1KwCRbZJB7>W^<+xg2p4jm*QE zpT!@^8ad~ZygLzp35$OOkN=|l#Lg6!nLEOF9lIcRtToX}X%HHkHxziO`4YD>p4>*+ z6RbDe*W0%@N055KR%J)D^qY}pKIpIcI3t*iu^u!5c^R0O{Mu4;-{=0)qFDMqv#&+b zp>!6MPM5sRpRMeW%Ta?kD1OYUUykm$QWxKGjNNji95EzpB=xY(AW`fJgT?q+U7+1zMo`~e!xqw-GH#@GpdBfB>azP9cYdu?4BMT#*mKR+=iOmmY98iJu&=WFv)3Zb zo1lyHbXIB;$o=f)^?ybS_%m9-9p*T<+qxHMFVIl?hU}q8ImVjlj?WosuQ9L49>Q{X zL4&>?t>b5u$Geb6rR}>8%KIq0>Q4ErK|YrqU5>OK1kDEB0^M1`Cxc@1^f^n-H7M;m z=t9}ihWZ-_f2t#*Sj3j#j)%7XzKC@78T?5Lm$=6@jCAX)3D#nSOR$pc2R;1Obo#vv zKYeFhR1Z2Mg;@>veypwNtqJbrhCx=Hd#rVmHF?_uiwxOnTdC<)rhlhQNv|@woifRg ziOchES!!NU-`9GH`|5^K?g7?|t!1dIWUHaxzrDh$w+`7mWY;6jLzLwp)in;`2C;A} zyM-Ia!o>;Ux`!p7k5Tu7S=fiVh5gb^X%3dcs^Mdib}Z5+-#Ua(-_kdKnR&cBt>H5F z1=aypoz-adF5Zx>7}K|x!e5tDV^-Y$?BiD0p;e8vIy@I{Kn-Tv6;>x>U(b5ofV#RE z?eyvf>MvyL%Q@9PVP(h9k+vN~?YkC4Zd%$hkIB;+snuM7kfR{0j2UV-Sk-ta+|HH( z<5V8Uxq)$VBZ{@gCI6lEUuDNTXg%>;(AwRGhK{h|h|wCqop47uhS_y(%9~SK+OqGh z*BPI%df-0%NJ4{Rj6q*%yZ>rvt0O$@NQ_lUEZ?WBD>yaVtb6L6Z=Oh-nlmj||6T0D z8uJo!tUJzK(E8<)@I?idUmwxy4LhEiRc9?|JzQn@bKA&*Q+EW)kM!3m<2u4$x5ii# zj_3`!NBZ=C-D22LZ<)EHpiMD=`lo#KK_tP51JtntPR1)AwCEv!s5QfyYsI0>NsM*POs4_+QEYnt^Mt0tjXI>K*4!k`qQG&@@du`;~fs^ewadZe$x zbEIGY_nSJx+gkfF-`}=&glk*+IM(g(G z_zYc}Yr8+YBfPP-ZysqAwZrFz=UWX8`jc@={B~u>Q)bljmgV)jhdaU>TJ_fW*Ns*^ z+No}gZWC!^J@VcWeyUXuWVFtT7_Q0r<{lHd$2_S_Y2K&bWVGgdv)nW*qQ9jhys9;} zPDwo2*b!dc+Si(aoLpgzeLNL0tZGfh|J8_18Q&3J+xo{QWe4S|)@wwauWnVwed+wQ zv&=oPK^a$OC;6B>W$aS(NPqnH577_Ww%k`g61~RodY}5X?FQo@#P(oo>?;$kx=nqp z=|C%x!VKm*baw2zUzPqEC0sRY;JzWVldVJYo+J(+_1-)aIX<6|+y*_P?0-;SGU60%3J`YVJ+>KjJpUXs5A?X|FVnfc<}C1#_Y^pewh z(d=ra6#+kfDfYReF^|JOAKU=}pwN9>w%Rb-Jx(B-hI&4e<@SajE{_HC=@AUxe~sB$WT)L+v`$;TDYfB%i{nd#maYxwNl9-p6OSPI{PekdjZJ988Lgy-DQG>lH6?_`#cWC=Nf%jj6aR<716ZQ=7m%&L_tswf=J|6n|bQaDqU>^(rU9jH) z`wCDxWJre><=w~nk0CYIUePe=Qf<|J{b;PYl%&L^zD<}iPm+PRr_Ft z-kW6WK9c%7q`pG?PtH)&NjS%J^hl>Y+<4+#Q)}u>?Te<}*U{R)E&Fi2;iX#ZgVu+! z@*cbyBTRE{?gZ=bSExRpJ2PbOpp&I>pGI;H4cVoPdjzY1Q7&rW1m$ABL?aWQ)0Z~3Six9`H)8P*H)8cM$| zZ4d81QNw2LvCZw_H+YH3?-ifBB|1{O3UEB*DJ^}tV=rCw4 z+L}1#LcaxX)f+bVgML>bH-lel4}WwbJNLqu2b~<%pEP{x^pHI-TcO{bL*7-!kp@R> z9etT9AM#$pi=_Ky=AR4NwL`n@;rbI(na=)nI@da)u08zni4=z4 zKizL#oyGW3CR|5tY7cKbF@?GR{`A3?u`eEM8UMh+meH1jEyi&p>fUeBzxaMj-v{2u zj_CcCm~n=N_VD@>>DElr>n{z)zAv|j)1cQ;o4$lz`&g5qg_IMCRugy{^xC&`wj#YI zLa#JiwTCC47*R)YRi9`NFF&3O4Q`B(Uc2OD8p-v^NFrhy$@DrG4>-qPi!)DfCujxe zT=Y8OM4q76oO94?##!~MKQV*pYaG{W%n7v>U&8d7*s0gk$4yLb$mu7Kr7b?#k`CQo z^}v(IrY$|#G86i}7W%#an6g;Y@%_hQmcHL&fSw01JvSfkuIJk0-SvFeaaGT?$9vav z&2d%FZy(2Ka4Z+PJk`-t&+Xxs4$||&6YUl}?qZCMplEvDQs3vr&m*rj zB#hCmNw9urZV#_TDs{&_d3bc(w!PLpTmO=KuBYG*^XHLg@3{;AH#~ed{eLE6R#ty& zz9|x$@gMVse{Zm3#TKhy(>GE1`oUV-B`>SKVZ{ply$Y2ter$UoV);t?#mF#N| zyN@f0U+(*9-cM%_eH?KlKLelGlW~1xPp0+h^QbX(*drTe^;>gOBqli)mzYD-{9$Ee%ft`Z1XA)_gnjkyCf1f zQ&}Ht&WgO2-{-NP0+D^&D2myTnh{xX4chqesjMd?S~IP~kyB%5PB%5`ukJRskA4#; zFJXT2vhG0a3+>@m#~y1+#0s0r7;}6j?AKd|z<&DJ&tacoHNyVQv0B)b$H~3z*d0y! z85HaF&B}E*j?QexgZIgieaa+q`=0}P#JTX;{Y|9V$|ikXT>6GtF^!bcx9vKN0ACzy z$63I)m`{FnwYmm8ggSl?v>tR9Xd$Q&REP0uJ!k{ySknb)r?`SQ7SyNvbM>5(3}BfZS!^@C0t3>gK3uxrk7XId|`-i`J;{+Rvsm~~Ih z%J|6bHd)7_2aG+Y{GN6Ri1i+WF&4ANuA`~Bi?F-s!{&@#M-$nc@!ruZv9^AL&l#qD zlQFhU&U?M|KN#EIJgSD=cywZ}Zj%=Bc^-1(QKJy@i^fc(dPVzZO=_5jj$WFl+w>h9 zOKFZ;$wNJK^vfn4>TyK-ADZHY@G&g>fOhJ=D~@7LJMwLlLGb^&kwX3F%<-mUO%tM;*Z)bt)W2y?`eXg)5#!J9wGLkOfHh*?A5m(DJWMm&@}uvtvFwF!-()9b zR_oKp-dLKj+4$1l$jnu{aaMM@b;yUQ6fi}v<#{t@hDPa0!3*+*H| z&7SabqCM7rhdImsGy6OCSVxxQXO4FqliUMVKQenU+y}0H^pG++qwSBi1J{jo&wjCQ zUBAb(BKxOgeq$Kc9xgiC|M8CSq;Hk6!`CURbH2$a%=zX}X2v)FC~6PSK04wRlD-OB zntk+MmhTI{onh4>PdP_(zR4^c@i_UAE$8d!hW34;-#XPNqp;xApiH)(wARXx&9?E`0IA z)oakBFt;B4Da-S=$YS><_rXX`?V4E^Jbf@yxZz-=WK~Y%)eY}Nlnw7h^sC;97-~Pa zFLuYLF1G8^eo{ws{PH6=V3vL=GGX2NS+#8|Ym=>`U!e7xrTxiclNZl^K^dnrW=0NO z^W?FlrDu-6xA@HQ_m}QH)_2j~WBu;HcyxsFHVkF{=!hnJ0Hf;WBZhU#r0Y&idu8(L zgHRvSng-y1YEvBkCpRU!FBv&<=#<9ml?P{Ke7&>Q*ES@!FJ>UrQ|of;BhCGlOGb`5 z5*yRMF+UQ!;cevnZRGrKcGYKO|6BIOr^X$L?U&fFH!^Bxd-&ScgW!GFy&F+>mYIEM zJ-=*?xY@DG6l;8svI z?D^<#|AF5ub}Clp{*`;ptjik*He6~ibL&&f?1R@Cp18!TOEIioGwZtWx|fI4>BbI) zK5jlT9ktRPKH2dTwodv2=O=k=rqNkPTJ6?;n8yl_^jo*wn&^J4X^h)8^3C|MjX~w9 zSyz7IYm4nm>##j7YnulswN~56gd_cijNXwG=~qZDwvoR#4BmJ3rG_K1eTFs|Ai1r@ zYTkvu{=D5~-_oR?@Oe{)mD=;@BV*jHO_Wtt1@X{;~$zD zPS)CXoSOMck#426?`mb@b*D1WBc?a$v2SP(Kh&a@pcdyNpTI5LG%XE#&tcfNZ@I_Y z5#DvC78l#?{H7K~>#+2;DKGlgG`$&u;pSLf=$gd>M*ym8sZ0zWzBTWkr8;Y}-S}#vJLZ*}X5XCGh&>RUpMMtF_12;68*;D0>``lt#klrt z3qm~}2i+$qD(qCaEQ#b2|eTq??f%0>6zDZ7|cCfA; zCkct$P@d&DYf%z^hh2wq8KI8wjPK}ls6Bia?5W>n;7n+u^$vtt)_N`Mx-n$0Zk;(h zW=t}3_v56fJsiNfSI#&0nv&_{>z4MgzcuD@-Nd1d`c285r(Rf1;M6PO_awit6=(3Y zL$}}AG-zNQC~&qOCO|Q{|&nzb5&y; z`XH@Kz!#w|t3kBCqPcB%yh^*kjc9AbK?6atm&REA+VilVnBMdIQ=kF0pB!7(o~0Jhp^ zPC8m{uoajV%!>?+$NB$)*t%PC6VVIX;1Z|Q2IY8#}f*_b8-kMP+Om=Pt%tew_I;pOSQIW9r??q^lbrja(j2z6lsDMz!Qyf6=r* zlCRKudSpxdt66y$jx~42pmdAjI>d0(t6KO7&IwL8?~mjtXTp!3P{!q3cSrJ*cSmxP zolSboX`eKv<~?K8jm^h+Hqw7%6ZNdN<`j2Q-fGX0(kEsab_^Kv271SUF{`q5)-BBc z5d0?y{vUMuzl$FASETrHv)(!gIzJQMf1J+abrWM6$^M@vWqf;h79_0A2xobipN+A2qD0u;TyW~%4AuShNZQlC_bQVNYx6d34CTv!zvP4m+L^M;aSyyx*B; zc;~-@6+K??ymE~{FX`c><|%7@=s(G8D)HaM{->;|fIW4M@sKjbwr?@)m$+x(Ov`Qk zd9xwoQ_RF?!e1O8vS-lARfAtfp4NgM0%ceqWotI2*~U`-;yc~c?7A5!<<8?bAV;5m zH-Fuevu1uYcXM{#7`VQ6dbhtEN=^f4a$p|LdD(zL>Ti`L`>V5BcMBUZ+?8SlZLNv}H~@^)p$gu1myf z|4jJ#6Ld1t9=`XxY&=uB?o`YxXTtvD?f*0w(_cOljypanZ>;qO?9SB_r88jzJLxzR z9&r4!*{N>Isrm$D@V>Fwca6=1OFZN;7AeQGF}|G%&pv)8TzZT&v#jH2Q$n{;G`k=@ zoOqlGA3yd_oOmcZTG20@Q!ox1aPA9=$GoENkMnfc6T#n3!khy7C+I!UhXe608rr=T zoc2!Q+1}aq!1^oj?p*dxtFrUyuZFa(JT&>!jt&tY{iHiSE%~PdAO57{?)v(TN=Jt- zE?$rK&-7!JL~uic?w??`?8MQhsRxreZJ0m zTBk&G@LC>&e=EA;R+f?dMLmndsLw$fH!9}A&=cHWFf@>Rf&pPhPyVY;xv?7mKB9O& zqkkEYdHK3=Bx4+QE8ZKN@L-Jcg--uQjMA#pKNX|=JVp3_>YJQ}04>-2DWkYt#e{VQn{@95#c z3HoiZidX+^ta1n09*tQ5>(*HK;QN&r(p_8w*+o6pP#l|?9PJdjdysgtW>Zpi_XC}+*0HtHq6y3Oy-a3PBg)aTDA$AXB46$`F z?RtO@`_cdPq(`0l=}fouBY#8s^_vjKP@N(EszP0fD!A=(JkuaQHE%=W+&I4(yed}N zq(gn8{+S=E=fTuQiuAwLQ5LCu&ywFO2E;i=ci}YsN3ptD&`0b?x>g@*#+Ku3p zr+UKIEUz^j=(zhOLqqKf@cQ~^YPW)u{{e>UYbPJ!@j=M|2CxiRJ>+9=lYrzwN zBOHf5Q^W5kzNufW;d9~xYiBY(s5S(Sc3QiVFv70_r*u|u>^?;98*7&_USC@Se&}?^ z-7EirG{Bz)C;x54H^tUY{zAot;D_PAo8kJ}1B`E~UG*jWU)0xbKHPEl0r)q6rKbPd zKRfPj1CDF%xO+JAe{)O6-Ra=lT44v@c(mj0TJT-q%fSzU*VjK+n{!NccOUP#`!%>X zevNd&_k%ZsXZ)+tZ>Mqp6HJz`%Ih>%`a(v! z{@2(|+<3bu(pchNZ(cwNpUB{R$I3%KZZ1-~2DA(hkR z3;6DlF6Nc}aC@El8D|#mK3U+vWn|s*;9OGasGut#y-U>m^d7Yl#k$fLFiH|V5;$AN zwX`cQ4;lUH6-|iN$nSMB;$A0X$n7$giN%8pU9QkQ-zai-Da<-tw-h&d_l#&E?j&N) z>`o3Nm0HzER~_*W@Ux@dq{KoP7dmkB7%BlKS~#_?=~{}eON``z(Zcn5(UKH6TG*~M zqg}hyJ%a3fTkhQXnfbY9n`Q32If{VcIuB3G@jYjkOhKWgD6=HDV6NnDEyBIXv*uZ? zmLi)hQ!uZ@R$#>i%5w^eZlG|9Rh5e?aZR<6-FY{$r{0R`7LBMkt#r>k;_6ZUUT(CJ z1NIWG$4xfh8!lQl)vFHVpgr??mMdlCz-7LQB+7G=Hk!C<9CT-AFo~{x;dd)QAJv7v zAg(p`Rgzu3+CiztjX7C9U%<)k1cd(c7dfgOS9%?lI$R$b9Qtcr@eNAnIyaS2joDX+i(cncFzecG)R`=0vgXpf2 z9`zR`NVIC`5w7>^C%PvH{a_gB>RQa# ze%HMT-EVH_azB?F81U_LFSjWa|G3v0(3R?Ruf4It5lS=CHEG_f2Xu3*#?A7Q6B;MK zVE*a>4tA*!t`0Hc4%IYcXV>WI!#axOoMP}CtjXPXu@D+z-TP@+O%G3yoS0H&$00eBb5k@6_%hTcQt}_ixmOY?oB@3 z@*zn=r=g8^5WCy4RFSmAPdsw(`(g;Y^*}8bn95R z!v0W23?M}?RbX9H&J=}=cQ4`L!54Mf+#D!h+P<{5Au-p76bLMeVi5g4?-UHv`W*Wvya=no+J{ZsmlTMH-_k%S(?Jr5Ka0Nq=$ z=PI1rgX6I~BQxHK83y|b_~UgKmWTgzbog+buk;0#;^1{4cs!^NC^AI7E9gEWp0fbg z;yEIn&2IgP%HQSuAm>Lo|2OBc2uJc4aXx|bt2oc$d>-ewfDcyiej_+u8)o;$i~=WJ zT?{IOt}X$m{1K7CXB6x{qwi1-(!mcg^t;~l+u~&Cjt$XJ-5F3Xagd2--0-V~-v$u< zzH~aU5k$YGd>QKJ9`O4>4}j?Rksk)V0D1)UIEa1&_%M%q25<{VG<&W=J^q*e&vZa_ zvBHgZ0a{+Ewr8@Fo93=$XJuVwOvF#!Pc)__&0u|{Kf+O;fumCH!%@2_$z%e~OvOL; zdx45>BCLHfi{==srz?F2^vg8p`o|2=57Q6VjnG{bo1hyRb4l#zn6cD_x*5?ykKZyx zH&y5x8P(vo%wf^STk1X3=hyS`SHn4-?L3b89~Q!syu#ZgjU0Ggr_)e+cm%5)mE=ze znEWFGrufp#S`=!2;>$HWfZdH}7W|XpWdX+PKp4+ddB5OK@ufSp@cmi-6Qua?77sUS z__Y!)l)@XO@O6^>MhPcM^7WE`0z1K`EU4+#|Er0;wQ7Ydm4 zWfw5X)3U?Jt-l-+{7GMJ3-OPc0j$5!T&kKu3@3K>_hAZo5!Qq2;7j2r3;u+Y1-y=9 z8kaQrG{Jup+zE^E(VVLqHU60r&Jgfh5F{KAuEnqK^rv6@#oC|~tMQcx_*3{37Sk^k z{3$$*<*FIT;-k4-HEMixCzxu~^z5B@82h%9uok~g7@)QBl3h;9B2e3BjZ~ldY%PAZ zy&EJPC*gPr50^0RUf@QJZY;gu3zCE>Lat`jij=UD+$el|+@H3@H(@JSXkR*Q1?Ucx&i`DX=xFVcSwc$<(u-NhoNzgr4#7yKWg@&bc6vHVgiZQhdt=dD6FgPFHxsTcz^vm%{IsebDf~7; zeh>7%9r%=>|B=OA@lkol3Yf~ftfb4Iuw6<|>74J>@uFUmUn$8OB>9ge`8EmHN#WzA z@DWMAa9;QPCP?yb$v;Fd4ltwY^I0i9qZEFXB)^fp5ke8D^W#wglfEK1vdEb~;X_jV ziBkLu&TUkq<|m_P zXOb&`weim`?O!9E@u}Q85%s!{#B z&IMI}Iu8~7yUrq2e>x`>{pn0nHL5?IpQ=WUzw4Y!^`|pc(VxyPRipaTS*vQ)@Eaxn z-4doVGu5c!=}b(-bWSE>x3Hdm3m$~y!L{}NDIxv%7>tF$`BZN>v84W4BZMCZf5Lhp ze68S5@^u2933@sht$2v6&`Z9;jbP(^V=`ZNR6 z`EDHCVqy%+Ex>fXOZg?d2zU?tjU3-b;SoPEUCdDBE?73Azow&s=wgN__XE?jA~L#| zcy?Y)&lptGPkE98azka`EaBII>3K;h{Dxuu^uFZ(nS>7me~a~=m&@z=@W>fPT}XJO zgs%i%VphvX>0Je!&dW#I&z0ouz>h;7S7fmKEdp);uI2a+V3VcGA0J65xxg64nEWQ- zIRgFz@b$pMx&P6#W1|DNY z8M(Y0_y*va94`ZY1UQ4^`+@%gY~=W9;C};Cd!hXO7FaV>pC3s06A7OLE*12v^i$9O z^axA(P5{<-`VUo1zy<+ZfD1eEFvSi$Q@|eJn+1F)ur6C|uVazl7lHc-_+P;N1w7NB zKD(v*B6$b!Q21;3m%#K)SHoL?FBb4YV0zZ8`CrsueeSDaGw@}CzY}<(fL8<4vtdpC zZD5mtj{(y&W6l5K0rZ7e(naQXSiB@zXVLr54G^00pBBppE^)| zrl`di0)9a7e-W6THERA}06#3?OVKds`J?7v0{l2|JkQ@_z%KwJS(e|=fVTiseki{q z2Pw+yz*_!uf!`AFV&FdrcpdOQA^dLOzi>?YxOQ-N{2K5l@Ym8$8=^i}*YfKHZh^m+ z-#Q8J0{#~M$TrLWRS=|S?^^gbC?Ge~AN~m3AO52-K2mEA5v^jOud+u;}jvrguxc zT>fcbdN;(5_DcGG4_Gr)p5qd}=t9j`ZO;}7*GTwo32z3DTc!4&F_;0q1g3XV=zS4N ze;{5qq4!kW9A8Z@pKwF@`I&?tlJEuzH%NGwgii~Y>eoaQEjNVAB)m$(?@IUxa6<{z zy;}d5;bjwXy)p}!_B$EyABy_98Q3!q&&W_-YA?S4et16KX~zIV`gjvqGgSUo312`j zw{S!LS4g;6!V4w5M8dz6@Cy?DorM1&;eSiG-z5rrr-jr+^Zf{5%}{=4NqDw|ZEIM__%~mOZX>vze_U|e};rh zfe-WXg6i8N_*4H30`Ik}zbi=j-7ff3e0zbG5r zo@LaK>R%z@$APu?4oTm81b@o!*T8gscO~p&aNcy;7>oy)f8!V)tlR>u8Iu1wFrDY6 z!A|mT0@Hb(Hedf0n9lRm`W&bn2iD$gr1S@1Afod;>VFh|0x+GA(6BrdI0Kl@hbVm- zk8T8BF63t=FrD`$Y3T#g`JNWvr@(Z+r{#anIQ3mhh_Li_0@L}P*8U>Enjw7-9FKbz z;GY3I<#!w~op;dsit0NFn9dh8oCZwiO&XpFJRX=#JodL)5-tEve7MVBDGP+u-?k6> zlFF3v4rRPkDd_y5x$7rW@x!gk_z->@nKX-D*MVX8&|S- zIhHK(yA)e?e!;BFeEdXm)dE|tt+&__HGW&&rbUgUibMJ7Hk-#szsXH0o2JvJek>XF zqdk0YP0llN)uicTX-^rVn3ro-<%2fnLqA*}Sm-Eo(eF>QRGh8_Rpt4$dG7De1m8rq=Q`4kxtMUDz_F=cpe8b$#Ik{QY6hlf%w=bki*ay-@Rh7)s zG#wvRRk*VF*Uh>3Xw+M%`XCq*&h}aY0bc-#CV7GZM^Z{!v`Xl$*s107@w@D<8nxuC zJTtm}EV#r|;hO8H^r@1YPf0Dum!j1kUsbR(Go3k1nO5HIQ~J!p+~O*~--iM^Sz^g$ zKD3USP%(bLo)n+f`4jKCXm%ca1A2$cSwJ7&Q9eys^72qGr z3em7A(t8%3xlb#nZ*^s9reOBvVOMperb-G%Gwgl^fQ@A&wMWtO(V$Uo>VoD}bN2?{ zvzN*u6iod9w|hvN0}AwnY;JtW?8R*bx1%Hasc+hRl{Tlh%!^*4s4{SK27O#o(VBc` z>nyNZi!CL#lFV887LCR`VLD9)rKE&cR4DnFaX%fYievL27a{~>4%oss*@F51Ys+v zBrPhq8^ThF-`Mt5(r2O3b6`^PJ(Y{iG}b6=AX0ySnuQneyh<8qkd>4)w8A2vucF8o za?lsw^MV+Gb8t5TWi(}K7V;J#{}SI%eF3ktB;cqF()YC0O0l~tJ||`m>WVh1?fimlTys#8Q((4XbhdPP zWaVcT7uyOmOLFL==FpPNvXG}5Jj?3{2DLFAYlHGR!SY-uyC`6GrH5Z5!h~4E?D@m& zrWsLG&syr-C|`(om*zu`r7$Ipm7rT;3l@<6dr37VIa+i00TG#!yXw{A?j<$Tj3^DF zcWD!(wWid&RBE>|p;wKiV*S!J%4*9EVbRiSNK<;x#%`g08?9odK^DEBSAWwC2*|yu zSLqZ})DGTzR;SJLJJA)?-a~hl^e#$+j?nuoh1GbXk3!`Yho+W=u!6(lCf(_?-R^O^ zDlM!BMjcOoU=x}_gOIcqG4+t%6L+>U|buM=_`nXAh8) z>~K1JM1!D(dAtX8^DJ~=u|o@=?~67q;HvOdySfDqo^!5DQ!5;cU0GFu0A>~*icMo@ zFN|qw@OFovkJaZ9Y(@~h3oAalB&c{vWf>33+Q9duI8B}M*(7}Kq6Ly zP0h2G<-&6)E0%SgQ50iwP*9DFXV5-7eGrHy-hCK|CULfb zAgX*XUAy>4y~@L!q7EoOa;oZ*4O4qcs;$^>EAv%h@$R(wLjjwo64%d^xpL3zY833; zil^Hw`EzGry;oUZpmK2Mn+is7ID#f8`>YY{JfBVWb>=Xl4 zm72Du;ii$0FOXYkn#!6!4bAE>L0K``ES4_Ko`dZFi9XE9T4{d#T5ttJ0pAizUt98f zot|o3u5u2eaw^6Qbwb2`6$@+9y*6MhD#W=4E&5~u1=|<21_Z@DZ7#*H*1N3&chJ<> z$cruQXahXo;jMDb#cEvLu5_2I!Wtj4bf}S%Y_lO2-|e>Gl3>VHVPkh@dA`2@CX-Vw zKF@S#W?Z*bIlL_H893-b(J=G#cKV~%P#W4g6lKG;J}zX0PDVmAXa#}JxzI-i?B?LQ zjU;H8F3Iiff}(P-x*F!Y-*T^NDfU$buqB7DufmVp+B&_nT_M%(sa8-CP&$M<9jV6Y z)MsJ9MS;yMpFC`DlSS`KFJBPbXthSvR-;{wMIP$Xy9g;@o03@-^08a6T+U)w0CN@T zqT5*#Z`b@R39Y-V#$jXmM_t-nHDxY8y8?`b!-fZEJDsw$)iI@Fkf9c;wkAlx8%q@y z4{L4QPDPjFV`o}umc=$#g&#Xz+}mdhVw7@}<6R71JKf`F`Ii%A8!XD;`Cope4zZn` zTfHDrae9MGDyXNcyEJsSa_s9p*lzRt1Z~*-mZ+BpYAzVIy_sHbrvz?8!oeJ!-ki_G zzz5-y`CWmKMe28K+eupK^7;Nrpi497Ja1@&Y}BQ;w8^6O)~yAi!JAzR9aUaF-tmQN zG&waKbqwqQyqKKmqPb{-yHdsQ^_beuwX%FtWTEX(oV<*3LlgS)BB?FiUH z0f#3P#Quq$5L?hIsi)do01=xrx|LNa55AvGpxr> zrz0Jl+NC7Z**OMe?0M$n_(whVu@p|XEh?kqn?m&UMHT!k=#E}nP?ov|E}0*-eNnLU zYOcMeW1<~em0xZ7{KPy+``aGfl+7{GuCEOClvU?dVdJm%BD6=gFhvzDbOm^7Ddyh7 z_qbh?wP$_|sm2k6(<~gzs`*#l;3UFgb+YN6wkW`(;Mw6w$Y;;&MbkoO3A0_5LSST2 zO{=$I@+_Bn(nv;IeLlOY&(g{qp)zcryUvsuUPw<$Xk;qL&Ob|C_kQ{pZFEwb2CZDN zCZ_hFt~)YASXlb;P=gj5ovRN)fKI>!sGb%H4q5aZiF!yCJMW0v!cD2HU1~>Y7LNxN zgQgaS&)w*j!iw~UOF@H3W4}Iz=}>=vPJXO z)^==WKJVK%*#ab>uGX~O4WFyCQgVx|)zy~S7K^2z#Afyvlq9pWh0a}|X(|@JLAv3V z7WO!$ZGg104q6A9Hn%CMPauzJJlehRn_~W|?}?LiDDQE(}@P zsWevPt_rxT&5YeVtM)rCz`G~ykx+j&pE{jl?-0c4RMbJe2$HGlxX-0?@$@L!W+|R# zE6giSwXt1Qu`ktM6;e+wi+xiUdaHtN-dlR4&yS@#v(oJp6jS#c^%xYH@`PABQS++q z=N35d{Kydup`mJ>BHyzhfICK^{Nhkr*;&^k-Ol|rot^b0pKpOZT|40DmC@s5937J$ zC9%ODok}}frw&W*tb)3!hD|I{?&FOzuSAjJ+Uzl1^?p$=HCEaanr!T`GFx=#p8b?Y zZQtl-bco|v;Hfs5ro&G2xvg^#$~s>0`A1B7IqwU7S%(udL_7bWr`J6FkOXq0JQE^K z6!+pT9FKJykyx0nElp3qs4a_CQ|~@q@txafQ&N2XAy6?h=qQkm%x!$g4LQnL&VKv> z7ES9%AJczO(`0KCKQ7|6;Td*FJwC!hw&&wWrR&uXg*}SKBUG$o0uIII!V@Mi+XD13 zHv7S;(utR&XmGSS0s-6xo`lEu9?gymnUe6PfU`zP!s%H^NhFLExbz;pY}yNjSkplwRi)EPChyWHk_u5R%-E zpj!}HQ00M?$H@ff=MmK8kSE6iB`N4eLaI&UODY%+_*juy9@Lkp&f)*#km(1C0j23w z!fRNaM$c_{?F(<9sdDuGFVTj<>iu)DvUj}V!SOn*63gZ29yy}>jBwzFWXY@n^#M`3 zbiW+YE__%(m<**$v>1fXDwsRnV@E{y*okuVeqFjCNB7?mQAT9BnQ*2&&^HX){c3Bq zLc&e6ju+(UjtHXtW8laQrAcNBh~lGk=x!>ajas5`)8eC7fg$I=7o6^tAle8AEgq61 z`=_cLi;un~BdQ|>aHGYCPbt{|{}1@ql*C?Tx? literal 44952 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 VXz?9_gDCgLF8m)t69U)d{y+BnKo9@`