From e80e325872da4451af14fc3a1e8634680bbcc61c Mon Sep 17 00:00:00 2001 From: Florian Spiess Date: Mon, 20 Nov 2023 15:23:24 +0100 Subject: [PATCH 1/8] Use dimensionality reduction OpenAPI --- .../Scripts/VitrivrVR/Query/Term/CanvasTextTermProvider.cs | 2 +- .../Scripts/VitrivrVR/Query/Term/Pose/PoseTermProvider.cs | 6 +++--- Packages/manifest.json | 2 +- Packages/packages-lock.json | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Assets/Scripts/VitrivrVR/Query/Term/CanvasTextTermProvider.cs b/Assets/Scripts/VitrivrVR/Query/Term/CanvasTextTermProvider.cs index 2c58268..8c965d9 100644 --- a/Assets/Scripts/VitrivrVR/Query/Term/CanvasTextTermProvider.cs +++ b/Assets/Scripts/VitrivrVR/Query/Term/CanvasTextTermProvider.cs @@ -49,7 +49,7 @@ public override List GetTerms() if (categories.Count == 0) return terms; - terms.Add(new QueryTerm(QueryTerm.TypeEnum.TEXT, _textSearchText, categories)); + terms.Add(new QueryTerm(categories, QueryTerm.TypeEnum.TEXT, _textSearchText)); return terms; } diff --git a/Assets/Scripts/VitrivrVR/Query/Term/Pose/PoseTermProvider.cs b/Assets/Scripts/VitrivrVR/Query/Term/Pose/PoseTermProvider.cs index 8b75f2a..e080513 100644 --- a/Assets/Scripts/VitrivrVR/Query/Term/Pose/PoseTermProvider.cs +++ b/Assets/Scripts/VitrivrVR/Query/Term/Pose/PoseTermProvider.cs @@ -24,7 +24,7 @@ public override List GetTerms() var poseData = skeletonValues.Select(values => { // Flip y coordinates because feature internally origin is top left and these coordinates are bottom left - var coordinates = values.SelectMany(pair => new List {pair.point.x, -pair.point.y}).ToList(); + var coordinates = values.SelectMany(pair => new List { pair.point.x, -pair.point.y }).ToList(); var weights = values.Select(pair => pair.weight).ToList(); return new PoseSkeleton(coordinates, weights); @@ -33,14 +33,14 @@ public override List GetTerms() var jsonData = "[" + string.Join(",", poseData.Select(JsonUtility.ToJson)) + "]"; var base64data = Base64Converter.JsonToBase64(jsonData); - return new List {new(QueryTerm.TypeEnum.SKELETON, base64data, new List {"skeletonpose"})}; + return new List { new(new List { "skeletonpose" }, QueryTerm.TypeEnum.SKELETON, base64data) }; } public override string GetTypeName() { return "Pose"; } - + public override void SetInstanceName(string displayName) { if (nameDisplayText != null) diff --git a/Packages/manifest.json b/Packages/manifest.json index ab6d7a7..5ac9466 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -16,7 +16,7 @@ "com.whisper.unity": "https://github.com/Macoron/whisper.unity.git?path=/Packages/com.whisper.unity", "deepspeech": "https://github.com/Spiess/deep-speech-upm.git", "dev.dres.unityclient": "https://github.com/dres-dev/UnityClient.git#v1.1.0", - "org.vitrivr.unityinterface.cineastapi": "https://github.com/vitrivr/CineastUnityInterface.git#v0.1.1", + "org.vitrivr.unityinterface.cineastapi": "https://github.com/vitrivr/CineastUnityInterface.git#feature/dimensionality-reduction", "com.unity.modules.ai": "1.0.0", "com.unity.modules.androidjni": "1.0.0", "com.unity.modules.animation": "1.0.0", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 533beeb..f5bd1a0 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -172,11 +172,11 @@ "hash": "a9573d03cf5ca51310fe3894dcd12a511663998e" }, "org.vitrivr.unityinterface.cineastapi": { - "version": "https://github.com/vitrivr/CineastUnityInterface.git#v0.1.1", + "version": "https://github.com/vitrivr/CineastUnityInterface.git#feature/dimensionality-reduction", "depth": 0, "source": "git", "dependencies": {}, - "hash": "ed4a41d7f05e02700edf8ea02930a348084cc510" + "hash": "b50ebc41d0f4a0f97e69313aed580da29cda8d30" }, "com.unity.modules.ai": { "version": "1.0.0", From edfc09d626baf56b922fa6f38af6f642353e2a86 Mon Sep 17 00:00:00 2001 From: Florian Spiess Date: Tue, 21 Nov 2023 10:31:06 +0100 Subject: [PATCH 2/8] Implement draft of point cloud display --- Assets/Materials/Particle.mat | 113 + Assets/Materials/Particle.mat.meta | 8 + Assets/Materials/particle.png | Bin 0 -> 11499 bytes Assets/Materials/particle.png.meta | 127 + .../Query/Display/Point Cloud Display.prefab | 5015 +++++++++++++++++ .../Display/Point Cloud Display.prefab.meta | 7 + .../Query/Display/Point Cloud Preview.prefab | 85 + .../Display/Point Cloud Preview.prefab.meta | 7 + .../Modular Canvas Query Term Provider.prefab | 79 +- Assets/Prefabs/QueryController.prefab | 12 +- Assets/Scenes/ModularInputScene.unity | 55 +- .../Query/Display/PointCloudDisplay.cs | 304 + .../Query/Display/PointCloudDisplay.cs.meta | 3 + 13 files changed, 5746 insertions(+), 69 deletions(-) create mode 100644 Assets/Materials/Particle.mat create mode 100644 Assets/Materials/Particle.mat.meta create mode 100644 Assets/Materials/particle.png create mode 100644 Assets/Materials/particle.png.meta create mode 100644 Assets/Prefabs/Query/Display/Point Cloud Display.prefab create mode 100644 Assets/Prefabs/Query/Display/Point Cloud Display.prefab.meta create mode 100644 Assets/Prefabs/Query/Display/Point Cloud Preview.prefab create mode 100644 Assets/Prefabs/Query/Display/Point Cloud Preview.prefab.meta create mode 100644 Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs create mode 100644 Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs.meta diff --git a/Assets/Materials/Particle.mat b/Assets/Materials/Particle.mat new file mode 100644 index 0000000..d45d828 --- /dev/null +++ b/Assets/Materials/Particle.mat @@ -0,0 +1,113 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Particle + m_Shader: {fileID: 211, guid: 0000000000000000f000000000000000, type: 0} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _ALPHATEST_ON + m_InvalidKeywords: [] + m_LightmapFlags: 0 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2450 + stringTagMap: + RenderType: TransparentCutout + disabledShaderPasses: + - GRABPASS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: e34d194c1398b4520b59fcbf653f008b, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - PixelSnap: 0 + - _BlendOp: 0 + - _BumpScale: 1 + - _CameraFadingEnabled: 0 + - _CameraFarFadeDistance: 2 + - _CameraNearFadeDistance: 1 + - _ColorMode: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DistortionBlend: 0.5 + - _DistortionEnabled: 0 + - _DistortionStrength: 1 + - _DistortionStrengthScaled: 0 + - _DstBlend: 0 + - _EmissionEnabled: 0 + - _EnableExternalAlpha: 0 + - _FlipbookMode: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _LightingEnabled: 0 + - _Metallic: 0 + - _Mode: 1 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SoftParticlesEnabled: 0 + - _SoftParticlesFarFadeDistance: 1 + - _SoftParticlesNearFadeDistance: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _CameraFadeParams: {r: 0, g: Infinity, b: 0, a: 0} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorAddSubDiff: {r: 0, g: 0, b: 0, a: 0} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Flip: {r: 1, g: 1, b: 1, a: 1} + - _RendererColor: {r: 1, g: 1, b: 1, a: 1} + - _SoftParticleFadeParams: {r: 0, g: 0, b: 0, a: 0} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/Particle.mat.meta b/Assets/Materials/Particle.mat.meta new file mode 100644 index 0000000..f5bbf90 --- /dev/null +++ b/Assets/Materials/Particle.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b34b3a77316924d1883b27c3ec157844 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/particle.png b/Assets/Materials/particle.png new file mode 100644 index 0000000000000000000000000000000000000000..ec7ea98a563f45a1b6967a86f80832223b6bc01c GIT binary patch literal 11499 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 to0^&) w81U?rZEE&igwafM=M1<%=d9}DQpG)|KMa~~(A;g!N8i^~QP7aDkTrktKW<;IF#rGn literal 0 HcmV?d00001 diff --git a/Assets/Materials/particle.png.meta b/Assets/Materials/particle.png.meta new file mode 100644 index 0000000..0421c14 --- /dev/null +++ b/Assets/Materials/particle.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: e34d194c1398b4520b59fcbf653f008b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Query/Display/Point Cloud Display.prefab b/Assets/Prefabs/Query/Display/Point Cloud Display.prefab new file mode 100644 index 0000000..f7567cc --- /dev/null +++ b/Assets/Prefabs/Query/Display/Point Cloud Display.prefab @@ -0,0 +1,5015 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &8742835942472995641 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6862998858405835142} + - component: {fileID: 5110621466039519194} + - component: {fileID: 5007458900436087998} + - component: {fileID: 8758271315740463847} + - component: {fileID: 645510867176438930} + - component: {fileID: 1482056625453783545} + - component: {fileID: 3133740674306290011} + m_Layer: 0 + m_Name: Point Cloud Display + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6862998858405835142 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8742835942472995641} + serializedVersion: 2 + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3698965017546014772} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &5110621466039519194 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8742835942472995641} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 070c530a7ab149549326a3f6c7a50d77, type: 3} + m_Name: + m_EditorClassIdentifier: + system: {fileID: 5007458900436087998} + previewPrefab: {fileID: 7596119260150609305, guid: f0fdb502fc860477b94f70d26cc986de, + type: 3} + previewScale: 0.2 + startColor: 2 + maximumDistanceSquared: 0.01 +--- !u!198 &5007458900436087998 +ParticleSystem: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8742835942472995641} + serializedVersion: 8 + lengthInSec: 1 + simulationSpeed: 1 + stopAction: 0 + cullingMode: 0 + ringBufferMode: 0 + ringBufferLoopRange: {x: 0, y: 1} + emitterVelocityMode: 1 + looping: 0 + prewarm: 0 + playOnAwake: 0 + useUnscaledTime: 0 + autoRandomSeed: 1 + startDelay: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + moveWithTransform: 0 + moveWithCustomTransform: {fileID: 0} + scalingMode: 1 + randomSeed: 0 + InitialModule: + serializedVersion: 3 + enabled: 1 + startLifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 5 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 5 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startColor: + 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_ColorSpace: -1 + 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_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + startSize: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotation: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + randomizeRotationDirection: 0 + gravitySource: 0 + maxNumParticles: 1 + customEmitterVelocity: {x: 0, y: 0, z: 0} + size3D: 0 + rotation3D: 0 + gravityModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ShapeModule: + serializedVersion: 6 + enabled: 0 + type: 4 + angle: 25 + length: 5 + boxThickness: {x: 0, y: 0, z: 0} + radiusThickness: 1 + donutRadius: 0.2 + m_Position: {x: 0, y: 0, z: 0} + m_Rotation: {x: 0, y: 0, z: 0} + m_Scale: {x: 1, y: 1, z: 1} + placementMode: 0 + m_MeshMaterialIndex: 0 + m_MeshNormalOffset: 0 + m_MeshSpawn: + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Mesh: {fileID: 0} + m_MeshRenderer: {fileID: 0} + m_SkinnedMeshRenderer: {fileID: 0} + m_Sprite: {fileID: 0} + m_SpriteRenderer: {fileID: 0} + m_UseMeshMaterialIndex: 0 + m_UseMeshColors: 1 + alignToDirection: 0 + m_Texture: {fileID: 0} + m_TextureClipChannel: 3 + m_TextureClipThreshold: 0 + m_TextureUVChannel: 0 + m_TextureColorAffectsParticles: 1 + m_TextureAlphaAffectsParticles: 1 + m_TextureBilinearFiltering: 0 + randomDirectionAmount: 0 + sphericalDirectionAmount: 0 + randomPositionAmount: 0 + radius: + value: 1 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + arc: + value: 360 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + EmissionModule: + enabled: 0 + serializedVersion: 4 + rateOverTime: + serializedVersion: 2 + minMaxState: 0 + scalar: 10 + minScalar: 10 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rateOverDistance: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_BurstCount: 0 + m_Bursts: [] + SizeModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + RotationModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + 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: + 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_ColorSpace: -1 + 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_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + UVModule: + serializedVersion: 2 + enabled: 0 + mode: 0 + timeMode: 0 + fps: 30 + frameOverTime: + serializedVersion: 2 + minMaxState: 1 + scalar: 0.9999 + minScalar: 0.9999 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startFrame: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedRange: {x: 0, y: 1} + tilesX: 1 + tilesY: 1 + animationType: 0 + rowIndex: 0 + cycles: 1 + uvChannelMask: -1 + rowMode: 1 + sprites: + - sprite: {fileID: 0} + flipU: 0 + flipV: 0 + VelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + radial: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + InheritVelocityModule: + enabled: 0 + m_Mode: 0 + m_Curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LifetimeByEmitterSpeedModule: + enabled: 0 + m_Curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: -0.8 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0.2 + inSlope: -0.8 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Range: {x: 0, y: 1} + ForceModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + randomizePerFrame: 0 + ExternalForcesModule: + serializedVersion: 2 + enabled: 0 + multiplierCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + influenceFilter: 0 + influenceMask: + serializedVersion: 2 + m_Bits: 4294967295 + influenceList: [] + ClampVelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + magnitude: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxis: 0 + inWorldSpace: 0 + multiplyDragByParticleSize: 1 + multiplyDragByParticleVelocity: 1 + dampen: 0 + drag: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + NoiseModule: + enabled: 0 + strength: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + frequency: 0.5 + damping: 1 + octaves: 1 + octaveMultiplier: 0.5 + octaveScale: 2 + quality: 1 + scrollSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remap: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapY: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapZ: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapEnabled: 0 + positionAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rotationAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + sizeAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + SizeBySpeedModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + range: {x: 0, y: 1} + separateAxes: 0 + RotationBySpeedModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + 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_ColorSpace: -1 + 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_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + range: {x: 0, y: 1} + CollisionModule: + enabled: 0 + serializedVersion: 4 + type: 0 + collisionMode: 0 + colliderForce: 0 + multiplyColliderForceByParticleSize: 0 + multiplyColliderForceByParticleSpeed: 0 + multiplyColliderForceByCollisionAngle: 1 + m_Planes: [] + m_Dampen: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Bounce: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + 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: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + 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 + serializedVersion: 2 + inside: 1 + outside: 0 + enter: 0 + exit: 0 + colliderQueryMode: 0 + radiusScale: 1 + primitives: [] + SubModule: + serializedVersion: 2 + enabled: 0 + subEmitters: + - serializedVersion: 3 + emitter: {fileID: 0} + type: 0 + properties: 0 + emitProbability: 1 + LightsModule: + enabled: 0 + ratio: 0 + light: {fileID: 0} + randomDistribution: 1 + color: 1 + range: 1 + intensity: 1 + rangeCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + intensityCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + maxLights: 20 + TrailModule: + enabled: 0 + mode: 0 + ratio: 1 + lifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minVertexDistance: 0.2 + textureMode: 0 + textureScale: {x: 1, y: 1} + ribbonCount: 1 + shadowBias: 0.5 + worldSpace: 0 + dieWithParticles: 1 + sizeAffectsWidth: 1 + sizeAffectsLifetime: 0 + inheritParticleColor: 1 + generateLightingData: 0 + splitSubEmitterRibbons: 0 + attachRibbonsToTransform: 0 + 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_ColorSpace: -1 + 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_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + widthOverTrail: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + 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_ColorSpace: -1 + 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_ColorSpace: -1 + 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_ColorSpace: -1 + 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_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel0: Color + vector0_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_0: X + vector0_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_1: Y + vector0_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_2: Z + vector0_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_3: W + 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_ColorSpace: -1 + 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_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel1: Color + vector1_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_0: X + vector1_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_1: Y + vector1_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_2: Z + vector1_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_3: W +--- !u!199 &8758271315740463847 +ParticleSystemRenderer: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8742835942472995641} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: b34b3a77316924d1883b27c3ec157844, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 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_MeshDistribution: 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_ShadowBias: 0 + m_RenderAlignment: 0 + m_Pivot: {x: 0, y: 0, z: 0} + m_Flip: {x: 0, y: 0, z: 0} + m_EnableGPUInstancing: 1 + m_ApplyActiveColorSpace: 1 + m_AllowRoll: 1 + m_FreeformStretching: 0 + m_RotateWithStretchDirection: 1 + m_UseCustomVertexStreams: 0 + m_VertexStreams: 00010304 + m_UseCustomTrailVertexStreams: 0 + m_TrailVertexStreams: 00010304 + m_Mesh: {fileID: 0} + m_Mesh1: {fileID: 0} + m_Mesh2: {fileID: 0} + m_Mesh3: {fileID: 0} + m_MeshWeighting: 1 + m_MeshWeighting1: 1 + m_MeshWeighting2: 1 + m_MeshWeighting3: 1 + m_MaskInteraction: 0 +--- !u!114 &645510867176438930 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8742835942472995641} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11cac8de724f28d4ca9a7f4f946639ff, type: 3} + m_Name: + m_EditorClassIdentifier: + disablesPointer: 1 + onInteraction: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 5110621466039519194} + m_TargetAssemblyTypeName: VitrivrVR.Query.Display.PointCloudDisplay, Assembly-CSharp + m_MethodName: OnInteraction + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + onGrab: + m_PersistentCalls: + m_Calls: [] + onDrop: + m_PersistentCalls: + m_Calls: [] + onHoverChange: + m_PersistentCalls: + m_Calls: [] + grabTransform: {fileID: 0} +--- !u!65 &1482056625453783545 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8742835942472995641} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 1 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &3133740674306290011 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8742835942472995641} + serializedVersion: 4 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 0 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 126 + m_CollisionDetection: 0 +--- !u!1001 &6571259765020947490 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 6862998858405835142} + m_Modifications: + - target: {fileID: 6323307321772121419, guid: 70b555435f2c5204f817e4c6db7c0b51, + type: 3} + propertyPath: m_Name + value: Wire Box + objectReference: {fileID: 0} + - target: {fileID: 7522296592306451478, guid: 70b555435f2c5204f817e4c6db7c0b51, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7522296592306451478, guid: 70b555435f2c5204f817e4c6db7c0b51, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7522296592306451478, guid: 70b555435f2c5204f817e4c6db7c0b51, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7522296592306451478, guid: 70b555435f2c5204f817e4c6db7c0b51, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7522296592306451478, guid: 70b555435f2c5204f817e4c6db7c0b51, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7522296592306451478, guid: 70b555435f2c5204f817e4c6db7c0b51, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7522296592306451478, guid: 70b555435f2c5204f817e4c6db7c0b51, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7522296592306451478, guid: 70b555435f2c5204f817e4c6db7c0b51, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7522296592306451478, guid: 70b555435f2c5204f817e4c6db7c0b51, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7522296592306451478, guid: 70b555435f2c5204f817e4c6db7c0b51, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 70b555435f2c5204f817e4c6db7c0b51, type: 3} +--- !u!4 &3698965017546014772 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 7522296592306451478, guid: 70b555435f2c5204f817e4c6db7c0b51, + type: 3} + m_PrefabInstance: {fileID: 6571259765020947490} + m_PrefabAsset: {fileID: 0} diff --git a/Assets/Prefabs/Query/Display/Point Cloud Display.prefab.meta b/Assets/Prefabs/Query/Display/Point Cloud Display.prefab.meta new file mode 100644 index 0000000..f72190d --- /dev/null +++ b/Assets/Prefabs/Query/Display/Point Cloud Display.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 38921989b623a43c982371eba213c605 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Query/Display/Point Cloud Preview.prefab b/Assets/Prefabs/Query/Display/Point Cloud Preview.prefab new file mode 100644 index 0000000..7f31f9c --- /dev/null +++ b/Assets/Prefabs/Query/Display/Point Cloud Preview.prefab @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &7037596761741861387 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3073618529642997434} + - component: {fileID: 3455932345790795687} + - component: {fileID: 7596119260150609305} + m_Layer: 0 + m_Name: Point Cloud Preview + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3073618529642997434 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7037596761741861387} + serializedVersion: 2 + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3455932345790795687 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7037596761741861387} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7596119260150609305 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7037596761741861387} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 3a36e19d0150f4ae4ae9b80f13fde34d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 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_AdditionalVertexStreams: {fileID: 0} diff --git a/Assets/Prefabs/Query/Display/Point Cloud Preview.prefab.meta b/Assets/Prefabs/Query/Display/Point Cloud Preview.prefab.meta new file mode 100644 index 0000000..b12ad82 --- /dev/null +++ b/Assets/Prefabs/Query/Display/Point Cloud Preview.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f0fdb502fc860477b94f70d26cc986de +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Query/Term/Provider/Modular Canvas Query Term Provider.prefab b/Assets/Prefabs/Query/Term/Provider/Modular Canvas Query Term Provider.prefab index 4aec6c2..e057412 100644 --- a/Assets/Prefabs/Query/Term/Provider/Modular Canvas Query Term Provider.prefab +++ b/Assets/Prefabs/Query/Term/Provider/Modular Canvas Query Term Provider.prefab @@ -33,7 +33,6 @@ RectTransform: m_Children: - {fileID: 1140059821505615517} m_Father: {fileID: 8196502073609887201} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -165,7 +164,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4202048087754537821} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -292,6 +290,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2623549563969358496} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0.1, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} @@ -300,7 +299,6 @@ Transform: - {fileID: 3071364336885693882} - {fileID: 8964616507572607066} m_Father: {fileID: 8639390620882158983} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &3658003627376917740 GameObject: @@ -333,7 +331,6 @@ RectTransform: m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 8755242148897643704} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 45, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -505,7 +502,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 7333581729424405290} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -636,6 +632,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4315599219316094429} + serializedVersion: 2 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} @@ -649,7 +646,6 @@ Transform: - {fileID: 4218730171575618722} - {fileID: 3247103097694458715} m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!65 &1319126732243636815 BoxCollider: @@ -659,9 +655,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4315599219316094429} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 1 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 0.25, y: 0.1, z: 0.01} m_Center: {x: 0, y: 0, z: 0} --- !u!54 &8943571809015675093 @@ -671,10 +675,21 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4315599219316094429} - serializedVersion: 2 + serializedVersion: 4 m_Mass: 1 m_Drag: 0 m_AngularDrag: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 m_UseGravity: 0 m_IsKinematic: 0 m_Interpolate: 0 @@ -730,6 +745,16 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 37bfaf04ceac41c78725eac6e5465b8f, type: 3} m_Name: m_EditorClassIdentifier: + textTermProviderSelection: {fileID: 6310090573974258106, guid: 50bca41c9b8dfa745882e9c74565ba98, + type: 3} + tagTermProviderSelection: {fileID: 4966802847637547522, guid: a12d4f3654e25174ea623a13993ed9a6, + type: 3} + booleanTermProviderSelection: {fileID: 1862774836151956274, guid: 0b3d9dda998e60b40a2da8947b3e0a55, + type: 3} + mapTermProviderSelection: {fileID: 1124154672167200936, guid: 46bafca4ed5dfa84f8cea27bbaf01f12, + type: 3} + poseTermProviderSelection: {fileID: 3920134374037079714, guid: 77e6183fcedb8044e80a063a1ba9abfe, + type: 3} representationSpacing: 0.05 stageSpacing: 0.1 temporalSpacing: 0.2 @@ -762,6 +787,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4756629512319907078} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0.1, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} @@ -770,7 +796,6 @@ Transform: - {fileID: 8492371390161542851} - {fileID: 1986561282603036588} m_Father: {fileID: 8639390620882158983} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &5715321860538098620 GameObject: @@ -805,7 +830,6 @@ RectTransform: m_Children: - {fileID: 5573449090037795872} m_Father: {fileID: 8196502073609887201} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -929,6 +953,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 5998733680754620406} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0.1, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} @@ -937,7 +962,6 @@ Transform: - {fileID: 6904951683234620650} - {fileID: 407021625313553319} m_Father: {fileID: 8639390620882158983} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &6629327919981479131 GameObject: @@ -973,7 +997,6 @@ RectTransform: m_Children: - {fileID: 8196502073609887201} m_Father: {fileID: 8639390620882158983} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -997,7 +1020,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -1093,7 +1118,6 @@ RectTransform: - {fileID: 7333581729424405290} - {fileID: 4202048087754537821} m_Father: {fileID: 8293692742557482663} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1171,7 +1195,6 @@ RectTransform: m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 4218730171575618722} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 45, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1335,6 +1358,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 8057024999660496298} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0.1, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} @@ -1343,7 +1367,6 @@ Transform: - {fileID: 8352296277359441007} - {fileID: 597108868693547188} m_Father: {fileID: 8639390620882158983} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &8064074291109601193 GameObject: @@ -1376,7 +1399,6 @@ RectTransform: m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 5756201298063300246} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 45, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1548,7 +1570,6 @@ RectTransform: m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 6684900789309483766} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 45, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1694,6 +1715,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 4218730171575618722} m_Modifications: - target: {fileID: 3873349872756319123, guid: 6273aab0a11161b4982ccb9213f6c561, @@ -1792,6 +1814,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 6273aab0a11161b4982ccb9213f6c561, type: 3} --- !u!4 &8964616507572607066 stripped Transform: @@ -1804,6 +1829,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 8639390620882158983} m_Modifications: - target: {fileID: 5678550486045261824, guid: 6273aab0a11161b4982ccb9213f6c561, @@ -1887,6 +1913,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 6273aab0a11161b4982ccb9213f6c561, type: 3} --- !u!1 &1364062390352662899 stripped GameObject: @@ -1905,6 +1934,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 8639390620882158983} m_Modifications: - target: {fileID: 5429355341739817805, guid: 58701e8b7fbd8cf4cb2b3a1b0f528a39, @@ -1978,6 +2008,9 @@ PrefabInstance: value: 0.1 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 58701e8b7fbd8cf4cb2b3a1b0f528a39, type: 3} --- !u!4 &3247103097694458715 stripped Transform: @@ -1990,6 +2023,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 5756201298063300246} m_Modifications: - target: {fileID: 3873349872756319123, guid: 6273aab0a11161b4982ccb9213f6c561, @@ -2088,6 +2122,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 6273aab0a11161b4982ccb9213f6c561, type: 3} --- !u!4 &1986561282603036588 stripped Transform: @@ -2100,6 +2137,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 6684900789309483766} m_Modifications: - target: {fileID: 3873349872756319123, guid: 6273aab0a11161b4982ccb9213f6c561, @@ -2198,6 +2236,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 6273aab0a11161b4982ccb9213f6c561, type: 3} --- !u!4 &407021625313553319 stripped Transform: @@ -2210,6 +2251,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 8755242148897643704} m_Modifications: - target: {fileID: 3873349872756319123, guid: 6273aab0a11161b4982ccb9213f6c561, @@ -2308,6 +2350,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 6273aab0a11161b4982ccb9213f6c561, type: 3} --- !u!4 &597108868693547188 stripped Transform: diff --git a/Assets/Prefabs/QueryController.prefab b/Assets/Prefabs/QueryController.prefab index e0aba2b..bb20c8d 100644 --- a/Assets/Prefabs/QueryController.prefab +++ b/Assets/Prefabs/QueryController.prefab @@ -26,12 +26,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 8661397611067853840} + serializedVersion: 2 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &8661397611067853843 MonoBehaviour: @@ -45,9 +46,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 0e6fee3701cd34a799ec5a464e08ddca, type: 3} m_Name: m_EditorClassIdentifier: - defaultQueryTermProvider: {fileID: 0} + defaultQueryTermManager: {fileID: 0} timer: {fileID: 0} - queryDisplay: {fileID: 0} + queryDisplay: {fileID: 5978004481995343909, guid: 33bd32de084a9446c8c490fa1c5bf8b1, + type: 3} + temporalQueryDisplay: {fileID: 4530341693124885058, guid: c20bd8391b36b5c45b1f3f2049b05ab7, + type: 3} queryAddedEvent: m_PersistentCalls: m_Calls: [] @@ -73,6 +77,8 @@ MonoBehaviour: type: 3} imageSequenceDisplayPrefab: {fileID: 4952956502963791116, guid: 7658a4f1a1cbd41b1b0b737de490e2cc, type: 3} + imageDisplayPrefab: {fileID: 2529607500185689710, guid: 037d5a30e112a2340ad1834e1543b912, + type: 3} --- !u!114 &2730910231105014784 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/Assets/Scenes/ModularInputScene.unity b/Assets/Scenes/ModularInputScene.unity index 6961f9d..afd80e3 100644 --- a/Assets/Scenes/ModularInputScene.unity +++ b/Assets/Scenes/ModularInputScene.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.009389741, g: 0.010874605, b: 0.014736945, a: 1} + m_IndirectSpecularColor: {r: 0.009389737, g: 0.0108745955, b: 0.014736922, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -171,36 +171,6 @@ PrefabInstance: propertyPath: m_Name value: Modular Canvas Query Term Provider objectReference: {fileID: 0} - - target: {fileID: 4398201079036992528, guid: 9d9dd3a1966954f6b8c8f6a335003aca, - type: 3} - propertyPath: mapTermProviderSelection - value: - objectReference: {fileID: 1124154672167200936, guid: 46bafca4ed5dfa84f8cea27bbaf01f12, - type: 3} - - target: {fileID: 4398201079036992528, guid: 9d9dd3a1966954f6b8c8f6a335003aca, - type: 3} - propertyPath: tagTermProviderSelection - value: - objectReference: {fileID: 4966802847637547522, guid: a12d4f3654e25174ea623a13993ed9a6, - type: 3} - - target: {fileID: 4398201079036992528, guid: 9d9dd3a1966954f6b8c8f6a335003aca, - type: 3} - propertyPath: poseTermProviderSelection - value: - objectReference: {fileID: 3920134374037079714, guid: 77e6183fcedb8044e80a063a1ba9abfe, - type: 3} - - target: {fileID: 4398201079036992528, guid: 9d9dd3a1966954f6b8c8f6a335003aca, - type: 3} - propertyPath: textTermProviderSelection - value: - objectReference: {fileID: 6310090573974258106, guid: 50bca41c9b8dfa745882e9c74565ba98, - type: 3} - - target: {fileID: 4398201079036992528, guid: 9d9dd3a1966954f6b8c8f6a335003aca, - type: 3} - propertyPath: booleanTermProviderSelection - value: - objectReference: {fileID: 1862774836151956274, guid: 0b3d9dda998e60b40a2da8947b3e0a55, - type: 3} - target: {fileID: 5562196535703572270, guid: 9d9dd3a1966954f6b8c8f6a335003aca, type: 3} propertyPath: queryTermProviders.Array.size @@ -1600,12 +1570,6 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 7681770014933336791, guid: ef63ab4df42c54592be7590645832b7e, - type: 3} - propertyPath: imageDisplayPrefab - value: - objectReference: {fileID: 2529607500185689710, guid: 037d5a30e112a2340ad1834e1543b912, - type: 3} - target: {fileID: 8661397611067853840, guid: ef63ab4df42c54592be7590645832b7e, type: 3} propertyPath: m_Name @@ -1671,23 +1635,11 @@ PrefabInstance: propertyPath: timer value: objectReference: {fileID: 1083301797} - - target: {fileID: 8661397611067853843, guid: ef63ab4df42c54592be7590645832b7e, - type: 3} - propertyPath: queryDisplay - value: - objectReference: {fileID: 5978004481995343909, guid: 33bd32de084a9446c8c490fa1c5bf8b1, - type: 3} - target: {fileID: 8661397611067853843, guid: ef63ab4df42c54592be7590645832b7e, type: 3} propertyPath: queryTermProvider value: objectReference: {fileID: 0} - - target: {fileID: 8661397611067853843, guid: ef63ab4df42c54592be7590645832b7e, - type: 3} - propertyPath: temporalQueryDisplay - value: - objectReference: {fileID: 4530341693124885058, guid: c20bd8391b36b5c45b1f3f2049b05ab7, - type: 3} - target: {fileID: 8661397611067853843, guid: ef63ab4df42c54592be7590645832b7e, type: 3} propertyPath: defaultQueryTermManager @@ -3175,6 +3127,11 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: + - target: {fileID: 6317846110910224843, guid: 9e86f8938bf545645ac69df2d86083ec, + type: 3} + propertyPath: m_TrackingStateInput.m_Action.m_Name + value: Tracking State Input + objectReference: {fileID: 0} - target: {fileID: 6317846112504510528, guid: 9e86f8938bf545645ac69df2d86083ec, type: 3} propertyPath: m_RootOrder diff --git a/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs b/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs new file mode 100644 index 0000000..6d11488 --- /dev/null +++ b/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs @@ -0,0 +1,304 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.Networking; +using Vitrivr.UnityInterface.CineastApi.Model.Data; +using VitrivrVR.Interaction.System; + +namespace VitrivrVR.Query.Display +{ + public enum Coloration + { + White, + Coordinates, + Score + } + + public class PointCloudDisplay : MonoBehaviour + { + public ParticleSystem system; + public Renderer previewPrefab; + public float previewScale = 0.2f; + public Coloration startColor; + + [Tooltip("Maximum distance (squared) to point such that thumbnail is still displayed")] + public float maximumDistanceSquared = 0.01f; + + private List<(SegmentData segment, Vector3 position, float score)> _points = new(); + + // Interaction variables + // For tracking scaling events. + private readonly Dictionary _activeInteractors = new(); + + // For tracking the interactors currently inside the bounding box and the last segment data they hovered. + private readonly Dictionary _enteredLastSegment = new(); + private readonly Dictionary _enteredPreviews = new(); + + private Camera _camera; + + + private void Start() + { + _camera = Camera.main; + } + + private void Update() + { + UpdateInteraction(); + } + + private void FixedUpdate() + { + UpdatePreview(); + } + + public void Initialize(List<(SegmentData segment, Vector3 position, float score)> items) + { + items = NormalizeToBoundingBox(items); + + var mainConfig = system.main; + mainConfig.maxParticles = items.Count; + + _points = items; + + EmitParticles(startColor); + } + + public void OnInteraction(Transform interactor, bool start) + { + if (start) + { + _activeInteractors.Add(interactor, interactor.position); + } + else + { + _activeInteractors.Remove(interactor); + } + } + + private void OnTriggerEnter(Collider other) + { + if (!other.TryGetComponent(out var interactor)) return; + + _enteredLastSegment.Add(interactor, null); + + var preview = Instantiate(previewPrefab); + preview.transform.localScale = previewScale * Vector3.one; + _enteredPreviews.Add(interactor, preview); + } + + private void OnTriggerExit(Collider other) + { + if (!other.TryGetComponent(out var interactor)) return; + + _enteredLastSegment.Remove(interactor); + + var preview = _enteredPreviews[interactor]; + Destroy(preview.gameObject); + _enteredPreviews.Remove(interactor); + } + + private void EmitParticles(Coloration coloration) + { + system.Clear(); + + switch (coloration) + { + case Coloration.White: + foreach (var emitParams in _points.Select(item => new ParticleSystem.EmitParams + { + position = item.position, + velocity = Vector3.zero, + startLifetime = float.PositiveInfinity, + startSize = .01f, + startColor = Color.white + })) + { + system.Emit(emitParams, 1); + } + + break; + case Coloration.Coordinates: + foreach (var emitParams in _points.Select(item => new ParticleSystem.EmitParams + { + position = item.position, + velocity = Vector3.zero, + startLifetime = float.PositiveInfinity, + startSize = .01f, + startColor = new Color(item.position.x + 0.5f, item.position.y + 0.5f, item.position.z + 0.5f) + })) + { + system.Emit(emitParams, 1); + } + + break; + case Coloration.Score: + // Find min and max score + var scores = _points.Select(item => item.score).ToArray(); + var minScore = scores.Min(); + var maxScore = scores.Max(); + var range = maxScore - minScore; + + foreach (var emitParams in _points.Select(item => new ParticleSystem.EmitParams + { + position = item.position, + velocity = Vector3.zero, + startLifetime = float.PositiveInfinity, + startSize = .01f, + startColor = new Color((item.score - minScore) / range, (item.score - minScore) / range, + (item.score - minScore) / range) + })) + { + system.Emit(emitParams, 1); + } + + break; + default: + throw new ArgumentOutOfRangeException(nameof(coloration), coloration, null); + } + } + + private void UpdateInteraction() + { + if (_activeInteractors.Count != 2) return; + + var positions = _activeInteractors.Keys.Select(key => (_activeInteractors[key], key.position)).ToArray(); + + var (old0, new0) = positions.First(); + var (old1, new1) = positions.Last(); + + var t = transform; + var scalingFactor = (new0 - new1).magnitude / (old0 - old1).magnitude; + // Perform scaling at the center point of the gesture + var position = t.position; + var scalingPoint = (old0 + old1) / 2 - position; + + t.localScale *= scalingFactor; + position += scalingPoint - scalingPoint * scalingFactor; + t.position = position; + + var keys = _activeInteractors.Keys.ToArray(); + foreach (var key in keys) + { + _activeInteractors[key] = key.position; + } + } + + /// + /// Determine which point is closest to the preview position and start the necessary coroutine to download the + /// appropriate texture. + /// Also updates preview location and rotation. + /// + private async void UpdatePreview() + { + if (_points.Count == 0) + return; + + foreach (var interactor in _enteredLastSegment.Keys.ToList()) + { + var position = transform.InverseTransformPoint(interactor.transform.position); + + var (segment, sqrDistance, itemPosition) = _points + .Select(item => (item.segment, (item.position - position).sqrMagnitude, item.position)) + .Aggregate((a, b) => a.sqrMagnitude > b.sqrMagnitude ? b : a); + + var preview = _enteredPreviews[interactor]; + + preview.enabled = sqrDistance < maximumDistanceSquared; + + UpdatePreviewPosRot(itemPosition, preview.transform); + + if (segment == _enteredLastSegment[interactor]) + return; + + var thumbnailURL = await segment.GetThumbnailUrl(); + + StartCoroutine(DownloadTexture(thumbnailURL, segment.Id, itemPosition, interactor, OnDownloadSuccess)); + + _enteredLastSegment[interactor] = segment; + } + } + + /// + /// Normalizes points to fit into a cube of side length 1 centered around the origin. + /// + private static List<(SegmentData segment, Vector3 position, float score)> NormalizeToBoundingBox( + IReadOnlyCollection<(SegmentData segment, Vector3 position, float score)> points) + { + var positions = points.Select(item => item.position).ToArray(); + var x = positions.Select(point => point.x).ToArray(); + var y = positions.Select(point => point.y).ToArray(); + var z = positions.Select(point => point.z).ToArray(); + var xMin = x.Min(); + var xMax = x.Max(); + var yMin = y.Min(); + var yMax = y.Max(); + var zMin = z.Min(); + var zMax = z.Max(); + + // Length of the largest size of the bounding box + var normalizer = Mathf.Max(xMax - xMin, yMax - yMin, zMax - zMin); + + // Center of the bounding box + var center = new Vector3(xMin + xMax, yMin + yMax, zMin + zMax) / 2; + + return points.Select(point => (point.segment, (point.position - center) / normalizer, point.score)).ToList(); + } + + /// + /// Downloads the image from the given URL and transforms it into a texture. + /// + /// Checks if this texture is still current using the provided ID. + /// + /// URL of the image to use as texture + /// ID of the image to be downloaded for checking relevance + /// Position of the item in local space + /// Interactor causing this preview to be shown + /// Function to call when successfully downloaded + private static IEnumerator DownloadTexture(string url, string id, Vector3 itemPosition, Interactor interactor, + Action onSuccess) + { + using var www = UnityWebRequestTexture.GetTexture(url); + yield return www.SendWebRequest(); + + if (www.result is UnityWebRequest.Result.ConnectionError or UnityWebRequest.Result.ProtocolError) + { + Debug.LogError($"URL: {url}\nError: {www.error}"); + } + else + { + var loadedTexture = ((DownloadHandlerTexture)www.downloadHandler).texture; + onSuccess(loadedTexture, id, itemPosition, interactor); + } + } + + private void OnDownloadSuccess(Texture2D loadedTexture, string id, Vector3 itemPosition, Interactor interactor) + { + if (!_enteredLastSegment.ContainsKey(interactor) || id != _enteredLastSegment[interactor].Id) + return; + + var preview = _enteredPreviews[interactor]; + // Set texture + preview.material.mainTexture = loadedTexture; + // Adjust aspect ratio + float factor = Mathf.Max(loadedTexture.width, loadedTexture.height); + var scale = new Vector3(loadedTexture.width / factor, loadedTexture.height / factor, 1); + var t = preview.transform; + t.localScale = scale * previewScale; + UpdatePreviewPosRot(itemPosition, t); + } + + private void UpdatePreviewPosRot(Vector3 itemPosition, Transform previewTransform) + { + // Set position + previewTransform.position = + transform.TransformPoint(itemPosition) + Vector3.up * (previewTransform.localScale.y / 2); + // Rotate towards camera + var forwardVector = previewTransform.position - _camera.transform.position; + forwardVector.y = 0; + previewTransform.rotation = Quaternion.LookRotation(forwardVector); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs.meta b/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs.meta new file mode 100644 index 0000000..af34b99 --- /dev/null +++ b/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 070c530a7ab149549326a3f6c7a50d77 +timeCreated: 1700490384 \ No newline at end of file From bb5d0006fdfb516e582282f2b032b51e9249aaac Mon Sep 17 00:00:00 2001 From: Florian Spiess Date: Wed, 22 Nov 2023 13:10:35 +0100 Subject: [PATCH 3/8] Update score coloring to adjust to min and max scores --- .../Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs b/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs index 6d11488..24bcd64 100644 --- a/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs +++ b/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs @@ -5,6 +5,7 @@ using UnityEngine; using UnityEngine.Networking; using Vitrivr.UnityInterface.CineastApi.Model.Data; +using VitrivrVR.Config; using VitrivrVR.Interaction.System; namespace VitrivrVR.Query.Display @@ -141,14 +142,17 @@ private void EmitParticles(Coloration coloration) var maxScore = scores.Max(); var range = maxScore - minScore; + var similarityColor = ConfigManager.Config.similarityColor.ToColor(); + var dissimilarityColor = ConfigManager.Config.dissimilarityColor.ToColor(); + foreach (var emitParams in _points.Select(item => new ParticleSystem.EmitParams { position = item.position, velocity = Vector3.zero, startLifetime = float.PositiveInfinity, startSize = .01f, - startColor = new Color((item.score - minScore) / range, (item.score - minScore) / range, - (item.score - minScore) / range) + startColor = (item.score - minScore) / range * similarityColor + + (1 - (item.score - minScore) / range) * dissimilarityColor })) { system.Emit(emitParams, 1); From cdba0ee9e37ae90e991876c3a736f577e1459fba Mon Sep 17 00:00:00 2001 From: Florian Spiess Date: Wed, 22 Nov 2023 16:36:33 +0100 Subject: [PATCH 4/8] Fix multi-controller interaction and particle scaling --- .../Query/Display/PointCloudDisplay.cs | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs b/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs index 24bcd64..f0e222b 100644 --- a/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs +++ b/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs @@ -105,6 +105,10 @@ private void EmitParticles(Coloration coloration) { system.Clear(); + // Scale particles by size to allow scaling of point cloud for easier selection and viewing, but do not scale up + // beyond a limit to prevent small displays becoming crowded + var size = .01f / Mathf.Max(transform.localScale.x, 1); + switch (coloration) { case Coloration.White: @@ -113,7 +117,7 @@ private void EmitParticles(Coloration coloration) position = item.position, velocity = Vector3.zero, startLifetime = float.PositiveInfinity, - startSize = .01f, + startSize = size, startColor = Color.white })) { @@ -127,7 +131,7 @@ private void EmitParticles(Coloration coloration) position = item.position, velocity = Vector3.zero, startLifetime = float.PositiveInfinity, - startSize = .01f, + startSize = size, startColor = new Color(item.position.x + 0.5f, item.position.y + 0.5f, item.position.z + 0.5f) })) { @@ -150,7 +154,7 @@ private void EmitParticles(Coloration coloration) position = item.position, velocity = Vector3.zero, startLifetime = float.PositiveInfinity, - startSize = .01f, + startSize = size, startColor = (item.score - minScore) / range * similarityColor + (1 - (item.score - minScore) / range) * dissimilarityColor })) @@ -188,6 +192,8 @@ private void UpdateInteraction() { _activeInteractors[key] = key.position; } + + EmitParticles(startColor); } /// @@ -210,12 +216,17 @@ private async void UpdatePreview() var preview = _enteredPreviews[interactor]; - preview.enabled = sqrDistance < maximumDistanceSquared; + var interactorClose = sqrDistance < maximumDistanceSquared / transform.localScale.x; + + preview.enabled = interactorClose; + + if (!interactorClose) + continue; UpdatePreviewPosRot(itemPosition, preview.transform); if (segment == _enteredLastSegment[interactor]) - return; + continue; var thumbnailURL = await segment.GetThumbnailUrl(); @@ -273,7 +284,7 @@ private static IEnumerator DownloadTexture(string url, string id, Vector3 itemPo } else { - var loadedTexture = ((DownloadHandlerTexture)www.downloadHandler).texture; + var loadedTexture = ((DownloadHandlerTexture) www.downloadHandler).texture; onSuccess(loadedTexture, id, itemPosition, interactor); } } From 0bb3d15007d38d5f069b35b4c84781414693cf99 Mon Sep 17 00:00:00 2001 From: Florian Spiess Date: Mon, 27 Nov 2023 15:06:20 +0100 Subject: [PATCH 5/8] Implement randomized previews in point cloud display --- .../Query/Display/Point Cloud Display.prefab | 4 + .../Query/Display/PointCloudDisplay.cs | 102 +++++++++++++++++- 2 files changed, 102 insertions(+), 4 deletions(-) diff --git a/Assets/Prefabs/Query/Display/Point Cloud Display.prefab b/Assets/Prefabs/Query/Display/Point Cloud Display.prefab index f7567cc..99726ba 100644 --- a/Assets/Prefabs/Query/Display/Point Cloud Display.prefab +++ b/Assets/Prefabs/Query/Display/Point Cloud Display.prefab @@ -56,6 +56,10 @@ MonoBehaviour: previewScale: 0.2 startColor: 2 maximumDistanceSquared: 0.01 + enableRandomizedPreviews: 1 + minimumPreviewDistance: 0.18 + randomizedPreviewScale: 0.1 + hideRandomizedPreviewDistanceSquared: 0.02 --- !u!198 &5007458900436087998 ParticleSystem: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs b/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs index f0e222b..e07644b 100644 --- a/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs +++ b/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs @@ -27,6 +27,16 @@ public class PointCloudDisplay : MonoBehaviour [Tooltip("Maximum distance (squared) to point such that thumbnail is still displayed")] public float maximumDistanceSquared = 0.01f; + [Header("Randomized Previews")] public bool enableRandomizedPreviews = true; + + [Tooltip("Minimum distance between previews to control sparsity")] + public float minimumPreviewDistance = .18f; + + public float randomizedPreviewScale = .1f; + public float hideRandomizedPreviewDistanceSquared = 0.02f; + + private Dictionary _randomizedPreviews = new(); + private List<(SegmentData segment, Vector3 position, float score)> _points = new(); // Interaction variables @@ -52,7 +62,7 @@ private void Update() private void FixedUpdate() { - UpdatePreview(); + UpdatePreviews(); } public void Initialize(List<(SegmentData segment, Vector3 position, float score)> items) @@ -65,6 +75,9 @@ public void Initialize(List<(SegmentData segment, Vector3 position, float score) _points = items; EmitParticles(startColor); + + if (enableRandomizedPreviews) + GeneratePreviews(); } public void OnInteraction(Transform interactor, bool start) @@ -168,6 +181,59 @@ private void EmitParticles(Coloration coloration) } } + private async void GeneratePreviews() + { + // Destroy existing previews + foreach (var (_, preview) in _randomizedPreviews) + { + Destroy(preview.gameObject); + } + + _randomizedPreviews.Clear(); + + // Try to favor points with higher scores as previews + var orderedPoints = _points.OrderByDescending(point => point.score); + + var previewPoints = new List<(SegmentData segment, Vector3 position)>(); + + var sqrMinimumPreviewDistance = minimumPreviewDistance * minimumPreviewDistance; + + foreach (var (segment, position, _) in orderedPoints) + { + if (previewPoints.Count == 0) + { + previewPoints.Add((segment, position)); + continue; + } + + var minSqrDistance = previewPoints.Select(pair => (pair.position - position).sqrMagnitude).Min(); + + // Ignore points too close to existing previews + if (minSqrDistance < sqrMinimumPreviewDistance) + continue; + + previewPoints.Add((segment, position)); + } + + // Create previews + _randomizedPreviews = previewPoints.Select(pair => + { + var preview = Instantiate(previewPrefab); + preview.transform.localScale = previewScale * Vector3.one; + + return (preview, pair.position); + }).ToDictionary(pair => pair.position, pair => pair.preview); + + // Start texture download (must occur after previews are created) + foreach (var (segment, position) in previewPoints) + { + var thumbnailURL = await segment.GetThumbnailUrl(); + + StartCoroutine(DownloadTexture(thumbnailURL, segment.Id, position, null, + OnDownloadSuccessRandomizedPreview)); + } + } + private void UpdateInteraction() { if (_activeInteractors.Count != 2) return; @@ -192,7 +258,7 @@ private void UpdateInteraction() { _activeInteractors[key] = key.position; } - + EmitParticles(startColor); } @@ -201,11 +267,14 @@ private void UpdateInteraction() /// appropriate texture. /// Also updates preview location and rotation. /// - private async void UpdatePreview() + private async void UpdatePreviews() { if (_points.Count == 0) return; + // Enable all randomized previews + _randomizedPreviews.Values.ToList().ForEach(preview => preview.enabled = true); + foreach (var interactor in _enteredLastSegment.Keys.ToList()) { var position = transform.InverseTransformPoint(interactor.transform.position); @@ -223,6 +292,11 @@ private async void UpdatePreview() if (!interactorClose) continue; + // Disable all randomized previews closer to the interactor than the minimum distance + _randomizedPreviews.Where(pair => + (pair.Key - position).sqrMagnitude < hideRandomizedPreviewDistanceSquared / transform.localScale.x) + .ToList().ForEach(pair => pair.Value.enabled = false); + UpdatePreviewPosRot(itemPosition, preview.transform); if (segment == _enteredLastSegment[interactor]) @@ -234,6 +308,12 @@ private async void UpdatePreview() _enteredLastSegment[interactor] = segment; } + + // Update randomized preview positions and rotations + foreach (var (position, preview) in _randomizedPreviews) + { + UpdatePreviewPosRot(position, preview.transform); + } } /// @@ -284,7 +364,7 @@ private static IEnumerator DownloadTexture(string url, string id, Vector3 itemPo } else { - var loadedTexture = ((DownloadHandlerTexture) www.downloadHandler).texture; + var loadedTexture = ((DownloadHandlerTexture)www.downloadHandler).texture; onSuccess(loadedTexture, id, itemPosition, interactor); } } @@ -305,6 +385,20 @@ private void OnDownloadSuccess(Texture2D loadedTexture, string id, Vector3 itemP UpdatePreviewPosRot(itemPosition, t); } + private void OnDownloadSuccessRandomizedPreview(Texture2D loadedTexture, string id, Vector3 itemPosition, + Interactor _) + { + var preview = _randomizedPreviews[itemPosition]; + // Set texture + preview.material.mainTexture = loadedTexture; + // Adjust aspect ratio + float factor = Mathf.Max(loadedTexture.width, loadedTexture.height); + var scale = new Vector3(loadedTexture.width / factor, loadedTexture.height / factor, 1); + var t = preview.transform; + t.localScale = scale * randomizedPreviewScale; + UpdatePreviewPosRot(itemPosition, t); + } + private void UpdatePreviewPosRot(Vector3 itemPosition, Transform previewTransform) { // Set position From 160af43098b2b67aacb4850673411ca90b7ee6ca Mon Sep 17 00:00:00 2001 From: Florian Spiess Date: Mon, 27 Nov 2023 15:56:30 +0100 Subject: [PATCH 6/8] Implement media view generation from point cloud --- .../Query/Display/PointCloudDisplay.cs | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs b/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs index e07644b..328e320 100644 --- a/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs +++ b/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs @@ -7,6 +7,7 @@ using Vitrivr.UnityInterface.CineastApi.Model.Data; using VitrivrVR.Config; using VitrivrVR.Interaction.System; +using VitrivrVR.Media.Display; namespace VitrivrVR.Query.Display { @@ -42,6 +43,7 @@ public class PointCloudDisplay : MonoBehaviour // Interaction variables // For tracking scaling events. private readonly Dictionary _activeInteractors = new(); + private bool _scalePerformed; // For tracking the interactors currently inside the bounding box and the last segment data they hovered. private readonly Dictionary _enteredLastSegment = new(); @@ -89,9 +91,38 @@ public void OnInteraction(Transform interactor, bool start) else { _activeInteractors.Remove(interactor); + + if (_activeInteractors.Count > 0) + return; + + // Check if scaling event occurred + if (!_scalePerformed) + SelectPoint(interactor); + + // Reset scale performed + _scalePerformed = false; } } + private async void SelectPoint(Transform interactor) + { + var position = transform.InverseTransformPoint(interactor.position); + + var (segment, sqrDistance, itemPosition, score) = _points + .Select(item => (item.segment, (item.position - position).sqrMagnitude, item.position, item.score)) + .Aggregate((a, b) => a.sqrMagnitude > b.sqrMagnitude ? b : a); + + var interactorClose = sqrDistance < maximumDistanceSquared / transform.localScale.x; + + if (!interactorClose) + return; + + var worldPosition = transform.TransformPoint(itemPosition); + + await MediaDisplayFactory.CreateDisplay(new ScoredSegment(segment, score), () => { }, worldPosition, + Quaternion.LookRotation(worldPosition - _camera.transform.position)); + } + private void OnTriggerEnter(Collider other) { if (!other.TryGetComponent(out var interactor)) return; @@ -238,6 +269,8 @@ private void UpdateInteraction() { if (_activeInteractors.Count != 2) return; + _scalePerformed = true; + var positions = _activeInteractors.Keys.Select(key => (_activeInteractors[key], key.position)).ToArray(); var (old0, new0) = positions.First(); @@ -275,6 +308,7 @@ private async void UpdatePreviews() // Enable all randomized previews _randomizedPreviews.Values.ToList().ForEach(preview => preview.enabled = true); + // Update interactor previews foreach (var interactor in _enteredLastSegment.Keys.ToList()) { var position = transform.InverseTransformPoint(interactor.transform.position); @@ -364,7 +398,7 @@ private static IEnumerator DownloadTexture(string url, string id, Vector3 itemPo } else { - var loadedTexture = ((DownloadHandlerTexture)www.downloadHandler).texture; + var loadedTexture = ((DownloadHandlerTexture) www.downloadHandler).texture; onSuccess(loadedTexture, id, itemPosition, interactor); } } From 6cc211a4631fe097860a2801c35ed5046c5dc4f5 Mon Sep 17 00:00:00 2001 From: Florian Spiess Date: Fri, 1 Dec 2023 09:22:58 +0100 Subject: [PATCH 7/8] Implement management of point cloud displays Point cloud displays are now managed by the query controller, and can be set to be created or not in the config. Disabling the point cloud displays currently does not disable the previews and enabling them currently does not re-emit particles. --- Assets/Scenes/ModularInputScene.unity | 8 +- .../VitrivrVR/Config/VitrivrVrConfig.cs | 21 ++++ .../VitrivrVR/Query/Display/QueryDisplay.cs | 5 +- .../VitrivrVR/Query/QueryController.cs | 111 ++++++++++++------ Assets/Scripts/VitrivrVR/UI/QueryListView.cs | 6 +- .../Scripts/VitrivrVR/UI/QuerySettingsView.cs | 4 +- 6 files changed, 110 insertions(+), 45 deletions(-) diff --git a/Assets/Scenes/ModularInputScene.unity b/Assets/Scenes/ModularInputScene.unity index afd80e3..c9eb564 100644 --- a/Assets/Scenes/ModularInputScene.unity +++ b/Assets/Scenes/ModularInputScene.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.009389737, g: 0.0108745955, b: 0.014736922, a: 1} + m_IndirectSpecularColor: {r: 0.009389741, g: 0.010874605, b: 0.014736945, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -1635,6 +1635,12 @@ PrefabInstance: propertyPath: timer value: objectReference: {fileID: 1083301797} + - target: {fileID: 8661397611067853843, guid: ef63ab4df42c54592be7590645832b7e, + type: 3} + propertyPath: pointCloudDisplay + value: + objectReference: {fileID: 5110621466039519194, guid: 38921989b623a43c982371eba213c605, + type: 3} - target: {fileID: 8661397611067853843, guid: ef63ab4df42c54592be7590645832b7e, type: 3} propertyPath: queryTermProvider diff --git a/Assets/Scripts/VitrivrVR/Config/VitrivrVrConfig.cs b/Assets/Scripts/VitrivrVR/Config/VitrivrVrConfig.cs index bbef095..ff2e40c 100644 --- a/Assets/Scripts/VitrivrVR/Config/VitrivrVrConfig.cs +++ b/Assets/Scripts/VitrivrVR/Config/VitrivrVrConfig.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using UnityEngine; +using UnityEngine.Serialization; using Vitrivr.UnityInterface.CineastApi.Model.Config; namespace VitrivrVR.Config @@ -112,6 +113,23 @@ public enum SpeechToText /// public SpeechToText defaultSpeechToText; + /// + /// The default setting of whether to create a point cloud display for a query result. + /// + public bool createPointCloud; + + /// + /// The maximum number of points to display in the point cloud. + /// + public int pointCloudPointLimit; + + /// + /// The feature (more specifically feature table name) to use for dimensionality reduction. + /// + public string pointCloudFeature; + + // TODO: Include configuration of point cloud dimensionality reduction + /// /// Enables or disables DRES submission system integration and all associated functionality. /// @@ -171,6 +189,9 @@ private VitrivrVrConfig() defaultMediaVolume = .5f; skipLength = 2.5f; defaultSpeechToText = SpeechToText.Whisper; + createPointCloud = true; + pointCloudPointLimit = 4000; + pointCloudFeature = "openclip"; dresEnabled = false; allowInvalidCertificate = false; submissionIdPrefixLength = 0; diff --git a/Assets/Scripts/VitrivrVR/Query/Display/QueryDisplay.cs b/Assets/Scripts/VitrivrVR/Query/Display/QueryDisplay.cs index e6f8e9d..79eff21 100644 --- a/Assets/Scripts/VitrivrVR/Query/Display/QueryDisplay.cs +++ b/Assets/Scripts/VitrivrVR/Query/Display/QueryDisplay.cs @@ -3,6 +3,7 @@ using Org.Vitrivr.CineastApi.Model; using Vitrivr.UnityInterface.CineastApi.Model.Data; using UnityEngine; +using Vitrivr.UnityInterface.CineastApi; using Vitrivr.UnityInterface.CineastApi.Utils; namespace VitrivrVR.Query.Display @@ -15,10 +16,12 @@ public abstract class QueryDisplay : MonoBehaviour public virtual int NumberOfResults => -1; public QueryResponse QueryData { get; private set; } + public CineastClient QueryClient { get; private set; } - public void Initialize(QueryResponse queryResult) + public void Initialize(QueryResponse queryResult, CineastClient queryClient) { QueryData = queryResult; + QueryClient = queryClient; Initialize(); } diff --git a/Assets/Scripts/VitrivrVR/Query/QueryController.cs b/Assets/Scripts/VitrivrVR/Query/QueryController.cs index 804ca78..f11afcb 100644 --- a/Assets/Scripts/VitrivrVR/Query/QueryController.cs +++ b/Assets/Scripts/VitrivrVR/Query/QueryController.cs @@ -39,8 +39,10 @@ public class QueryChangeEvent : UnityEvent public GameObject timer; public QueryDisplay queryDisplay; public TemporalQueryDisplay temporalQueryDisplay; + public PointCloudDisplay pointCloudDisplay; - public readonly List Queries = new(); + public readonly List queries = new(); + private readonly Dictionary _pointCloudDisplays = new(); public int CurrentQuery { get; private set; } = -1; @@ -152,7 +154,9 @@ public async void RunQuery(List queryTerms) timer.SetActive(true); } - var queryData = await CurrentClient.ExecuteQuery(query, maxResults); + var queryClient = CurrentClient; + + var queryData = await queryClient.ExecuteQuery(query, maxResults); if (_localQueryGuid != localGuid) { @@ -160,7 +164,7 @@ public async void RunQuery(List queryTerms) return; } - InstantiateQueryDisplay(queryData); + InstantiateQueryDisplay(queryData, queryClient); // Query display already created and initialized, but if this is no longer the newest query, do not disable query // indicator @@ -186,7 +190,9 @@ public async void RunQuery(List> stages) timer.SetActive(true); } - var queryData = await CurrentClient.ExecuteQuery(query, maxResults); + var queryClient = CurrentClient; + + var queryData = await queryClient.ExecuteQuery(query, maxResults); if (_localQueryGuid != localGuid) { @@ -194,7 +200,7 @@ public async void RunQuery(List> stages) return; } - InstantiateQueryDisplay(queryData); + InstantiateQueryDisplay(queryData, queryClient); // Query display already created and initialized, but if this is no longer the newest query, do not disable query // indicator @@ -239,15 +245,15 @@ public async void RunQuery(List>> temporalTerms) public void SelectQuery(QueryDisplay display) { - var index = Queries.IndexOf(display); + var index = queries.IndexOf(display); SelectQuery(index); } public void SelectQuery(int index) { - if (0 > index || index >= Queries.Count) + if (0 > index || index >= queries.Count) { - throw new ArgumentException($"Query selection index out of range: {index} (queries: {Queries.Count})"); + throw new ArgumentException($"Query selection index out of range: {index} (queries: {queries.Count})"); } if (CurrentQuery != -1) @@ -279,7 +285,7 @@ public void SelectCineastClient(int index) /// public void RemoveQuery(QueryDisplay display) { - var index = Queries.IndexOf(display); + var index = queries.IndexOf(display); RemoveQuery(index); } @@ -289,9 +295,9 @@ public void RemoveQuery(QueryDisplay display) /// public void RemoveQuery(int index) { - if (0 > index || index >= Queries.Count) + if (0 > index || index >= queries.Count) { - throw new ArgumentException($"Query selection index out of range: {index} (queries: {Queries.Count})"); + throw new ArgumentException($"Query selection index out of range: {index} (queries: {queries.Count})"); } if (index == CurrentQuery) @@ -305,14 +311,18 @@ public void RemoveQuery(int index) } queryRemovedEvent.Invoke(index); - Destroy(Queries[index].gameObject); - Queries.RemoveAt(index); + // Destroy associated point cloud display + if (_pointCloudDisplays.ContainsKey(queries[index])) + Destroy(_pointCloudDisplays[queries[index]].gameObject); + // Destroy query display + Destroy(queries[index].gameObject); + queries.RemoveAt(index); LoggingController.LogInteraction("queryManagement", $"delete {index}", QueryManagement); } public void RemoveAllQueries() { - for (var queryIndex = Queries.Count - 1; queryIndex >= 0; queryIndex--) + for (var queryIndex = queries.Count - 1; queryIndex >= 0; queryIndex--) { RemoveQuery(queryIndex); } @@ -338,22 +348,24 @@ public void NewDisplayFromActive() return; } - var display = Queries[CurrentQuery]; + var display = queries[CurrentQuery]; if (display.GetType() == queryDisplay.GetType()) { NotificationController.Notify($"Current query display already of type {display.GetType().Name}!"); return; } - InstantiateQueryDisplay(display.QueryData); + InstantiateQueryDisplay(display.QueryData, display.QueryClient); } private void SetQueryActive(int index, bool active) { - Queries[index].gameObject.SetActive(active); + queries[index].gameObject.SetActive(active); + if (_pointCloudDisplays.TryGetValue(queries[index], out var pointCloud)) + pointCloud.gameObject.SetActive(active); } - private void InstantiateQueryDisplay(QueryResponse queryData) + private async void InstantiateQueryDisplay(QueryResponse queryData, CineastClient queryClient) { if (CurrentQuery != -1) { @@ -362,15 +374,56 @@ private void InstantiateQueryDisplay(QueryResponse queryData) var display = Instantiate(queryDisplay); + display.Initialize(queryData, queryClient); + + queries.Add(display); + var queryIndex = queries.Count - 1; + queryAddedEvent.Invoke(queryIndex); + queryFocusEvent.Invoke(CurrentQuery, queryIndex); + CurrentQuery = queryIndex; + + if (!ConfigManager.Config.createPointCloud) + return; + + // Create point cloud + var meanFusionResults = queryData.GetMeanFusionResults(); + await CreatePointCloudDisplay(queryClient, meanFusionResults, display); + } + + private void InstantiateQueryDisplay(TemporalQueryResponse queryData) + { + if (CurrentQuery != -1) + { + ClearQuery(); + } + + var display = Instantiate(temporalQueryDisplay); + display.Initialize(queryData); - Queries.Add(display); - var queryIndex = Queries.Count - 1; + queries.Add(display); + var queryIndex = queries.Count - 1; queryAddedEvent.Invoke(queryIndex); queryFocusEvent.Invoke(CurrentQuery, queryIndex); CurrentQuery = queryIndex; } + private async Task CreatePointCloudDisplay(CineastClient queryClient, IEnumerable results, + QueryDisplay display) + { + var pointLimit = ConfigManager.Config.pointCloudPointLimit; + var orderedSegments = results.OrderByDescending(segment => segment.score).Take(pointLimit).ToList(); + var reduceFeatures = + await queryClient.DimensionalityReduceFeature(orderedSegments.Select(ss => ss.segment.Id).ToList(), + ConfigManager.Config.pointCloudFeature); + + var scoreDict = orderedSegments.ToDictionary(ss => ss.segment, ss => (float) ss.score); + + var pointCloud = Instantiate(pointCloudDisplay, Vector3.up, Quaternion.identity); + _pointCloudDisplays[display] = pointCloud; + pointCloud.Initialize(reduceFeatures.Select(res => (res.segment, res.position, scoreDict[res.segment])).ToList()); + } + public SegmentData GetSegment(string segmentId) { return CurrentClient.MultimediaRegistry.GetSegment(segmentId); @@ -390,23 +443,5 @@ public async Task> GetMatchingTags(string tagName) { return await CurrentClient.GetMatchingTags(tagName); } - - private void InstantiateQueryDisplay(TemporalQueryResponse queryData) - { - if (CurrentQuery != -1) - { - ClearQuery(); - } - - var display = Instantiate(temporalQueryDisplay); - - display.Initialize(queryData); - - Queries.Add(display); - var queryIndex = Queries.Count - 1; - queryAddedEvent.Invoke(queryIndex); - queryFocusEvent.Invoke(CurrentQuery, queryIndex); - CurrentQuery = queryIndex; - } } } \ No newline at end of file diff --git a/Assets/Scripts/VitrivrVR/UI/QueryListView.cs b/Assets/Scripts/VitrivrVR/UI/QueryListView.cs index d073d9b..28874c4 100644 --- a/Assets/Scripts/VitrivrVR/UI/QueryListView.cs +++ b/Assets/Scripts/VitrivrVR/UI/QueryListView.cs @@ -34,7 +34,7 @@ public void ClearAll() private void OnQueryAdded(int index) { - var display = QueryController.Instance.Queries[index]; + var display = QueryController.Instance.queries[index]; AddQuery(display); } @@ -65,14 +65,14 @@ private void OnQueryFocus(int oldIndex, int newIndex) private void Initialize() { - var queries = QueryController.Instance.Queries; + var queries = QueryController.Instance.queries; if (queries.Count == 0) { AddQueriesEmptyText(); } else { - foreach (var display in QueryController.Instance.Queries) + foreach (var display in QueryController.Instance.queries) { AddQuery(display); } diff --git a/Assets/Scripts/VitrivrVR/UI/QuerySettingsView.cs b/Assets/Scripts/VitrivrVR/UI/QuerySettingsView.cs index 1a37ef9..0d3a23f 100644 --- a/Assets/Scripts/VitrivrVR/UI/QuerySettingsView.cs +++ b/Assets/Scripts/VitrivrVR/UI/QuerySettingsView.cs @@ -17,7 +17,7 @@ private void Awake() var currentQuery = QueryController.Instance.CurrentQuery; var results = currentQuery == -1 ? "-----" - : QueryController.Instance.Queries[currentQuery].NumberOfResults.ToString(); + : QueryController.Instance.queries[currentQuery].NumberOfResults.ToString(); statisticsTable.table = new[,] { @@ -44,7 +44,7 @@ private void UpdateQueryStatistics(int queryIndex) { var results = queryIndex == -1 ? "-----" - : QueryController.Instance.Queries[queryIndex].NumberOfResults.ToString(); + : QueryController.Instance.queries[queryIndex].NumberOfResults.ToString(); statisticsTable.SetCell(0, 1, results); } From b3c27b640243f923a6e014bc844ae9496186977a Mon Sep 17 00:00:00 2001 From: Florian Spiess Date: Fri, 1 Dec 2023 09:59:19 +0100 Subject: [PATCH 8/8] Fix point cloud enable/disable behavior --- .../VitrivrVR/Config/VitrivrVrConfig.cs | 2 +- .../Query/Display/PointCloudDisplay.cs | 39 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/VitrivrVR/Config/VitrivrVrConfig.cs b/Assets/Scripts/VitrivrVR/Config/VitrivrVrConfig.cs index ff2e40c..94f495f 100644 --- a/Assets/Scripts/VitrivrVR/Config/VitrivrVrConfig.cs +++ b/Assets/Scripts/VitrivrVR/Config/VitrivrVrConfig.cs @@ -190,7 +190,7 @@ private VitrivrVrConfig() skipLength = 2.5f; defaultSpeechToText = SpeechToText.Whisper; createPointCloud = true; - pointCloudPointLimit = 4000; + pointCloudPointLimit = 2000; pointCloudFeature = "openclip"; dresEnabled = false; allowInvalidCertificate = false; diff --git a/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs b/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs index 328e320..0a0acec 100644 --- a/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs +++ b/Assets/Scripts/VitrivrVR/Query/Display/PointCloudDisplay.cs @@ -67,6 +67,38 @@ private void FixedUpdate() UpdatePreviews(); } + private void OnDisable() + { + foreach (var preview in _randomizedPreviews.Values.Where(preview => preview != null)) + { + preview.gameObject.SetActive(false); + } + + foreach (var preview in _enteredPreviews.Values) + { + preview.enabled = false; + } + } + + private void OnEnable() + { + foreach (var preview in _randomizedPreviews.Values) + { + preview.gameObject.SetActive(true); + } + + if (_points.Count > 0) + EmitParticles(startColor); + } + + private void OnDestroy() + { + foreach (var preview in _randomizedPreviews.Values) + { + Destroy(preview.gameObject); + } + } + public void Initialize(List<(SegmentData segment, Vector3 position, float score)> items) { items = NormalizeToBoundingBox(items); @@ -127,6 +159,13 @@ private void OnTriggerEnter(Collider other) { if (!other.TryGetComponent(out var interactor)) return; + // Check if interactor had previously entered but not been removed + if (_enteredLastSegment.ContainsKey(interactor)) + { + _enteredLastSegment[interactor] = null; + return; + } + _enteredLastSegment.Add(interactor, null); var preview = Instantiate(previewPrefab);