diff --git a/Assets/000_assets/material/Rain_wave.mat b/Assets/000_assets/material/Rain_wave.mat new file mode 100644 index 00000000..5d421be0 --- /dev/null +++ b/Assets/000_assets/material/Rain_wave.mat @@ -0,0 +1,487 @@ +%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: Rain_wave + m_Shader: {fileID: 4800000, guid: 4af258f019782954c9c32cd616f51c3b, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _DISSOLVE_TEX + m_InvalidKeywords: + - _ALPHAADD_ON + - _CADDTEXUVT_ON + - _CIRCLE_ON_ON + - _CUSTOMDATADIS_ON + - _DISSOLVEAR_ON + - _DISSOLVEPLUSTEXAR_ON + - _DISSOLVEPLUSTEXUVCLIP_ON + - _DISSOLVETEXAR_ON + - _DISSOLVETEXUVCLIP_ON + - _DISTORTMASKTEXAR_ON + - _DISTORTTEXAR_ON + - _DISTORTUINTENSITY_ON + - _DISTORTVINTENSITY_ON + - _FACE_Y + - _IFADDTEXCOLOR_ON + - _IFBEINGDISTORTED_ON + - _IFDISSOLVECOLOR_ON + - _MAINTEXUVCLIP_ON + - _MAINTEX_AR_ON + - _MASKALPHARA_ON + - _MASKPLUSAR_ON + - _MASKTEXAR_ON + - _MASKTEXUVCLIP_ON + - _REFACTIONMASKTEXAR_ON + - _REFACTIONTEXAR_ON + - _VTOAR_ON + - _VTOTEXAR_ON + - _VTOTEXUVCLIP_ON + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: + - Distortion + - AfterDistortion + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AddTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BaseMap: + 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} + - _DisslovePlusTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DissloveTex: + m_Texture: {fileID: 2800000, guid: 8f82e4a8d3d9d084f80e387419b28530, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DissolvePlusTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DissolveTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DistortMaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DistortTex: + 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: d7b8dd640e42194458cd8292833fb86d, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskPlusTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskTex: + m_Texture: {fileID: 0} + 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} + - _RefactionMaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _RefactionTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _VTOMaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _VTOTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddRotate: 0 + - _AddTexAR: 0 + - _AddTexBlend: 0 + - _AddTexC: 0 + - _AddTexCV: 0 + - _AddTexUspeed: 0 + - _AddTexVspeed: 0 + - _AlphaAdd: 1 + - _AlphaClip: 0 + - _AlphaCutoff: 0.5 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendMode: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _CAddTexUV: 0 + - _CAddTexUVT: 1 + - _CenterU: 0.5 + - _CenterV: 0.5 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Comparison: 8 + - _Cull: 2 + - _CullMode: 0 + - _Cullmode: 0 + - _CustomDataToZero: 1 + - _CustomDissolve: 0 + - _CustomDissolvePlusTexUOffset: 0 + - _CustomDissolvePlusTexVOffset: 0 + - _CustomDissolveTexUOffset: 0 + - _CustomDissolveTexVOffset: 0 + - _CustomDistort: 0 + - _CustomDistortFactor: 0 + - _CustomMainTexUOffset: 0 + - _CustomMainTexVOffset: 0 + - _CustomMaskTexUOffset: 0 + - _CustomMaskTexVOffset: 0 + - _CustomRefactionFactor: 0 + - _CustomVTO: 0 + - _CustomdataDis: 1 + - _CustomdataDisT: 0 + - _CustomdataMainTexUV: 0 + - _CustomdataMaskUV: 0 + - _Cutoff: 0.5 + - _DIssloveFactor: 0 + - _DIssloveSoft: 1 + - _DIssloveWide: 0.1 + - _DIssolve_rotat: 0 + - _DepthFade: 1 + - _DepthfadeFactor: 1 + - _Depthfadeon: 0 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DisTex_Uspeed: 0.12 + - _DisTex_Vspeed: 0 + - _DissolveAR: 1 + - _DissolveC: 0 + - _DissolveCV: 0 + - _DissolveFactor: 0 + - _DissolveFactorC: 1 + - _DissolveFactorC1: 1 + - _DissolveOffsetUC1: 1 + - _DissolveOffsetVC1: 1 + - _DissolvePlusAR: 0 + - _DissolvePlusC: 0 + - _DissolvePlusCV: 0 + - _DissolvePlusIntensity: 0.5 + - _DissolvePlusR: 0 + - _DissolvePlusTexAR: 1 + - _DissolvePlusTexDetail: 0 + - _DissolvePlusTexRotator: 0 + - _DissolvePlusTexUClamp: 0 + - _DissolvePlusTexUMirror: 0 + - _DissolvePlusTexUOffsetC: 1 + - _DissolvePlusTexUSpeed: 0 + - _DissolvePlusTexUVClip: 1 + - _DissolvePlusTexVClamp: 0 + - _DissolvePlusTexVMirror: 0 + - _DissolvePlusTexVOffsetC: 1 + - _DissolvePlusTexVSpeed: 0 + - _DissolveSoft: 0.1 + - _DissolveTexAR: 1 + - _DissolveTexDetail: 0 + - _DissolveTexDivide: 1 + - _DissolveTexExp: 1 + - _DissolveTexRotator: 0 + - _DissolveTexUClamp: 0 + - _DissolveTexUMirror: 0 + - _DissolveTexUOffsetC: 1 + - _DissolveTexUSpeed: 0 + - _DissolveTexUVClip: 1 + - _DissolveTexVClamp: 0 + - _DissolveTexVMirror: 0 + - _DissolveTexVOffsetC: 1 + - _DissolveTexVSpeed: 0 + - _DissolveWide: 0.05 + - _DistortDissolveTex: 0 + - _DistortFactor: 0 + - _DistortFactorC: 1 + - _DistortFactorC1: 1 + - _DistortMainTex: 0 + - _DistortMask: 0 + - _DistortMaskTex: 0 + - _DistortMaskTexAR: 1 + - _DistortMaskTexC: 0 + - _DistortMaskTexCV: 0 + - _DistortMaskTexR: 0 + - _DistortRemap: 0 + - _DistortTexAR: 1 + - _DistortTexDetail: 0 + - _DistortTexRotator: 0 + - _DistortTexUMirror: 0 + - _DistortTexUSpeed: 0 + - _DistortTexVMirror: 0 + - _DistortTexVSpeed: 0 + - _DistortTex_Uspeed: 0 + - _DistortTex_Vspeed: 0 + - _DistortUIntensity: 1 + - _DistortVIntensity: 1 + - _Dst: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EdgeValue: 0.49 + - _EnvironmentReflections: 1 + - _FDepth: 0 + - _FDissolvePlusTex: 0 + - _FDissolveTex: 0 + - _FDistortTex: 0 + - _FFnl: 0 + - _FMaskTex: 0 + - _FNLfanxiangkaiguan: 0 + - _Face: 1 + - _Fail: 0 + - _FnlPower: 1 + - _FnlScale: 0 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _IfAddTex: 0 + - _IfAddTexAlpha: 0 + - _IfAddTexColor: 1 + - _IfBeingDistorted: 1 + - _IfDissolveColor: 1 + - _IfDissolveOffsetC: 0 + - _IfDissolvePlus: 0 + - _IfFNLAlpha: 0 + - _IfFlowmap: 0 + - _IfMaskColor: 0 + - _IfMaskPlusTex: 0 + - _IfRefaction: 0 + - _IfRefactionMask: 0 + - _IfVTO: 0 + - _MainAlpha: 1 + - _MainOffsetUC1: 0 + - _MainOffsetVC1: 0 + - _MainRGBA: 14 + - _MainTexAR: 0 + - _MainTexCAFator: 0 + - _MainTexDesaturate: 0 + - _MainTexDetail: 0 + - _MainTexRotator: 0 + - _MainTexUClamp: 0 + - _MainTexUMirror: 0 + - _MainTexUOffsetC: 1 + - _MainTexUSpeed: 0 + - _MainTexUVClip: 1 + - _MainTexVClamp: 0 + - _MainTexVMirror: 0 + - _MainTexVOffsetC: 1 + - _MainTexVSpeed: 0 + - _MainTex_Uspeed: 0 + - _MainTex_Vspeed: 0 + - _MainTex_ar: 1 + - _MainTex_rotat: 0 + - _MaintexC: 0 + - _MaintexCV: 0 + - _MaskAlphaRA: 1 + - _MaskC: 0 + - _MaskCV: 0 + - _MaskOffsetUC1: 0 + - _MaskOffsetVC1: 0 + - _MaskPlusAR: 1 + - _MaskPlusC: 0 + - _MaskPlusCV: 0 + - _MaskPlusR: 0 + - _MaskPlusUspeed: 0 + - _MaskPlusVspeed: 0 + - _MaskTexAR: 1 + - _MaskTexDetail: 0 + - _MaskTexRotator: 0 + - _MaskTexUClamp: 0 + - _MaskTexUMirror: 0 + - _MaskTexUOffsetC: 1 + - _MaskTexUSpeed: 0 + - _MaskTexUVClip: 1 + - _MaskTexVClamp: 0 + - _MaskTexVMirror: 0 + - _MaskTexVOffsetC: 1 + - _MaskTexVSpeed: 0 + - _Mask_Uspeed: 0 + - _Mask_Vspeed: 0 + - _Mask_rotat: 0 + - _Mask_scale: 1 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _Opacity: 1 + - _Parallax: 0.005 + - _Pass: 0 + - _QueueControl: -1 + - _QueueOffset: 0 + - _ReFnl: 0 + - _ReceiveShadows: 1 + - _RefactionFactor: 0 + - _RefactionFactorC: 1 + - _RefactionMaskTexAR: 1 + - _RefactionMaskTexDetail: 0 + - _RefactionMaskTexRotator: 0 + - _RefactionMaskTexUClamp: 0 + - _RefactionMaskTexUMirror: 0 + - _RefactionMaskTexUSpeed: 0 + - _RefactionMaskTexUVClip: 0 + - _RefactionMaskTexVClamp: 0 + - _RefactionMaskTexVMirror: 0 + - _RefactionMaskTexVSpeed: 0 + - _RefactionRemap: 0 + - _RefactionTexAR: 1 + - _RefactionTexDetail: 0 + - _RefactionTexRotator: 0 + - _RefactionTexUMirror: 0 + - _RefactionTexUSpeed: 0 + - _RefactionTexVMirror: 0 + - _RefactionTexVSpeed: 0 + - _Reference: 0 + - _SB: 0 + - _SBCompare: 0 + - _SceenTex: 0 + - _Scr: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _TextureUScale: 1 + - _TextureUValue: 0 + - _TextureVScale: 1 + - _TextureVValue: 0 + - _UVPolar: 0 + - _VTOAR: 1 + - _VTOC: 0 + - _VTOCV: 0 + - _VTOFactor: 0 + - _VTOFactorC1: 1 + - _VTOFactorCustom: 0 + - _VTOR: 0 + - _VTORemap: 0 + - _VTOScale: 1 + - _VTOScaleC: 1 + - _VTOTexAR: 1 + - _VTOTexDetail: 0 + - _VTOTexRotator: 0 + - _VTOTexUClamp: 0 + - _VTOTexUMirror: 0 + - _VTOTexUSpeed: 0 + - _VTOTexUVClip: 1 + - _VTOTexVClamp: 0 + - _VTOTexVMirror: 0 + - _VTOTexVSpeed: 0 + - _VTOTex_Uspeed: 0 + - _VTOTex_Vspeed: 0 + - _Width: 1.8 + - _WorkflowMode: 1 + - _ZTest: 4 + - _ZWrite: 1 + - _Ztest: 4 + - _Zwrite: 0 + - __dirty: 1 + - _circle_ON: 1 + - _fnl_power: 1 + - _fnl_sacle: 0 + - _softFacotr: 1 + - _sot_sting_A: 0 + m_Colors: + - _AddTexBlendModeVec4: {r: 1, g: 0, b: 0, a: 0} + - _AddTexColor: {r: 0, g: 0, b: 0, a: 0} + - _BackFaceColor: {r: 1, g: 1, b: 1, a: 0} + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _DIssloveColor: {r: 1, g: 1, b: 1, a: 1} + - _Dir: {r: 0, g: 0, b: 0, a: 0} + - _DissolveColor: {r: 1, g: 1, b: 1, a: 1} + - _DissolveFactorC2Vec4: {r: 0, g: 0, b: 1, a: 0} + - _DissolveOffsetUC2Vec4: {r: 1, g: 0, b: 0, a: 0} + - _DissolveOffsetVC2Vec4: {r: 0, g: 1, b: 0, a: 0} + - _DistortFactorC2Vec4: {r: 0, g: 0, b: 1, a: 0} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FnlColor: {r: 1, g: 1, b: 1, a: 1} + - _ImageColor: {r: 1.783085, g: 3.1626296, b: 3.979095, a: 1} + - _MainColor: {r: 2.9960783, g: 2.9960783, b: 2.9960783, a: 1} + - _MainOffsetUC2Vec4: {r: 1, g: 0, b: 0, a: 0} + - _MainOffsetVC2Vec4: {r: 0, g: 1, b: 0, a: 0} + - _MainTexRefine: {r: 1, g: 1, b: 1, a: 0} + - _MaskOffsetUC2Vec4: {r: 0, g: 0, b: 1, a: 0} + - _MaskOffsetVC2Vec4: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + - _VTOFactorC2Vec4: {r: 0, g: 0, b: 0, a: 1} + - _fnl_color: {r: 1, g: 1, b: 1, a: 0} + m_BuildTextureStacks: [] +--- !u!114 &3750453632139231137 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 7 diff --git a/Assets/000_assets/material/Rain_wave.mat.meta b/Assets/000_assets/material/Rain_wave.mat.meta new file mode 100644 index 00000000..cb433b39 --- /dev/null +++ b/Assets/000_assets/material/Rain_wave.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 235f9435448da714a924218ed6ead5ea +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/000_assets/model/Cylinder_01.mesh b/Assets/000_assets/model/Cylinder_01.mesh new file mode 100644 index 00000000..879e6282 --- /dev/null +++ b/Assets/000_assets/model/Cylinder_01.mesh @@ -0,0 +1,167 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!43 &4300000 +Mesh: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Cylinder_01 + serializedVersion: 11 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 192 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 66 + localAABB: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 1, y: 1, z: 0.22954164} + m_Shapes: + vertices: [] + shapes: [] + channels: [] + fullWeights: [] + m_BindPose: [] + m_BoneNameHashes: + m_RootBoneNameHash: 0 + m_BonesAABB: [] + m_VariableBoneCountWeights: + m_Data: + m_MeshCompression: 0 + m_IsReadable: 0 + m_KeepVertices: 1 + m_KeepIndices: 1 + m_IndexFormat: 0 + m_IndexBuffer: 00000100020000000300010003000400010003000500040005000600040005000700060007000800060007000900080009000a00080009000b000a000b000c000a000b000d000c000d000e000c000d000f000e000f0010000e000f001100100011001200100011001300120013001400120013001500140015001600140015001700160017001800160017001900180019001a00180019001b001a001b001c001a001b001d001c001d001e001c001d001f001e001f0020001e001f002100200021002200200021002300220023002400220023002500240025002600240025002700260027002800260027002900280029002a00280029002b002a002b002c002a002b002d002c002d002e002c002d002f002e002f0030002e002f003100300031003200300031003300320033003400320033003500340035003600340035003700360037003800360037003900380039003a00380039003b003a003b003c003a003b003d003c003d003e003c003d003f003e003f0040003e003f0041004000 + m_VertexData: + serializedVersion: 3 + m_VertexCount: 66 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 12 + format: 0 + dimension: 3 + - stream: 0 + offset: 24 + format: 0 + dimension: 4 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 40 + format: 0 + dimension: 2 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + m_DataSize: 3168 + _typelessdata: 00000000000080bff50c6b3e63c323b4000080bf000000000000803f0000000000000000000080bf0000803f00000000c2c547bebd147bbff20c6bbec3c547bebe147bbf00000000be147b3fc4c547be00000000000080bf0000783f0000803f00000000000080bff20c6bbe63c323b4000080bf000000000000803f0000000000000000000080bf0000803f0000803fc2c547bebd147bbff50c6b3ec4c547bebe147bbf00000000be147b3fc5c547be00000000000080bf0000783f0000000015efc3be5d836cbff00c6bbe15efc3be5e836cbf000000005e836c3f15efc3be00000000000080bf0000703f0000803f15efc3be5d836cbff70c6b3e16efc3be5e836cbf000000005e836c3f17efc3be00000000000080bf0000703f00000000da390ebf30db54bff20c6bbeda390ebf31db54bf0000000031db543fd9390ebf00000000000080bf0000683f0000803fda390ebf30db54bff50c6b3ed9390ebf31db54bf0000000031db543fd9390ebf00000000000080bf0000683f00000000f30435bff30435bff20c6bbef30435bff30435bf00000000f304353ff30435bf00000000000080bf0000603f0000803ff30435bff30435bff50c6b3ef30435bff30435bf00000000f304353ff30435bf00000000000080bf0000603f0000000030db54bfda390ebff20c6bbe31db54bfd9390ebf00000000da390e3f31db54bf00000000000080bf0000583f0000803f30db54bfda390ebff50c6b3e31db54bfd9390ebf00000000d9390e3f31db54bf00000000000080bf0000583f000000005d836cbf14efc3bef30c6bbe5e836cbf16efc3be0000000017efc33e5e836cbf00000000000080bf0000503f0000803f5d836cbf14efc3bef40c6b3e5e836cbf15efc3be0000000016efc33e5e836cbf00000000000080bf0000503f00000000bd147bbfc5c547bef30c6bbebe147bbfc6c547be00000000c5c5473ebe147bbf00000000000080bf0000483f0000803fbd147bbfc2c547bef40c6b3ebe147bbfc6c547be00000000c3c5473ebe147bbf00000000000080bf0000483f00000000000080bf3dd70533f40c6bbe000080bf000000000000000000000000000080bf00000000000080bf0000403f0000803f000080bf1ea37133f40c6b3e000080bf000000000000000000000000000080bf00000000000080bf0000403f00000000bd147bbfc1c5473ef40c6bbebe147bbfc0c5473e00000000bec547bebe147bbf00000000000080bf0000383f0000803fbd147bbfc2c5473ef30c6b3ebe147bbfc0c5473e00000000c0c547bebe147bbf00000000000080bf0000383f000000005e836cbf14efc33ef40c6bbe5e836cbf10efc33e0000000010efc3be5e836cbf00000000000080bf0000303f0000803f5e836cbf14efc33ef30c6b3e5e836cbf11efc33e0000000012efc3be5e836cbf00000000000080bf0000303f0000000032db54bfd9390e3ff50c6bbe31db54bfda390e3f00000000d9390ebf31db54bf00000000000080bf0000283f0000803f32db54bfd9390e3ff20c6b3e31db54bfd9390e3f00000000d9390ebf31db54bf00000000000080bf0000283f00000000f30435bff304353ff50c6bbef40435bff304353f00000000f20435bff30435bf00000000000080bf0000203f0000803ff30435bff304353ff20c6b3ef40435bff304353f00000000f20435bff30435bf00000000000080bf0000203f00000000d9390ebf32db543ff50c6bbed9390ebf31db543f0000000031db54bfda390ebf00000000000080bf0000183f0000803fd9390ebf32db543ff20c6b3ed9390ebf31db543f0000000031db54bfd9390ebf00000000000080bf0000183f0000000017efc3be5d836c3ff70c6bbe19efc3be5d836c3f000000005d836cbf1aefc3be00000000000080bf0000103f0000803f17efc3be5d836c3ff00c6b3e19efc3be5e836c3f000000005d836cbf1aefc3be00000000000080bf0000103f00000000c1c547bebe147b3ff50c6bbec0c547bebe147b3f00000000be147bbfc0c547be00000000000080bf0000083f0000803fc1c547bebe147b3ff20c6b3ec0c547bebe147b3f00000000be147bbfbfc547be00000000000080bf0000083f000000002ebdbb330000803ff50c6bbe000000000000803f00000000000080bf0000000000000000000080bf0000003f0000803f2ebdbb330000803ff20c6b3e000000000000803f00000000000080bf0000000000000000000080bf0000003f00000000bdc5473ebe147b3ff50c6bbec5c5473ebe147b3f00000000be147bbfc5c5473e00000000000080bf0000f03e0000803fbdc5473ebe147b3ff20c6b3ec4c5473ebe147b3f00000000be147bbfc4c5473e00000000000080bf0000f03e0000000014efc33e5d836c3ff70c6bbe1cefc33e5d836c3f000000005d836cbf1aefc33e00000000000080bf0000e03e0000803f14efc33e5d836c3ff00c6b3e1cefc33e5d836c3f000000005d836cbf1befc33e00000000000080bf0000e03e00000000db390e3f30db543ff50c6bbeda390e3f31db543f0000000030db54bfdb390e3f00000000000080bf0000d03e0000803fdb390e3f30db543ff20c6b3eda390e3f31db543f0000000031db54bfda390e3f00000000000080bf0000d03e00000000f204353ff404353ff50c6bbef104353ff404353f00000000f40435bff304353f00000000000080bf0000c03e0000803ff204353ff404353ff20c6b3ef104353ff404353f00000000f40435bff304353f00000000000080bf0000c03e000000002fdb543fdd390e3ff50c6bbe2fdb543fdc390e3f00000000de390ebf2fdb543f00000000000080bf0000b03e0000803f2fdb543fdd390e3ff20c6b3e2fdb543fde390e3f00000000de390ebf2fdb543f00000000000080bf0000b03e000000005d836c3f19efc33ef40c6bbe5d836c3f19efc33e0000000019efc3be5d836c3f00000000000080bf0000a03e0000803f5d836c3f19efc33ef30c6b3e5d836c3f19efc33e0000000018efc3be5e836c3f00000000000080bf0000a03e00000000bd147b3fc5c5473ef40c6bbebe147b3fc0c5473e00000000bdc547bec0147b3f00000000000080bf0000903e0000803fbd147b3fc6c5473ef30c6b3ebe147b3fc0c5473e00000000c0c547bebe147b3f00000000000080bf0000903e000000000000803ff93ad2b2f40c6bbe0000803f0000000000000000000000000000803f00000000000080bf0000803e0000803f0000803f8f992b30f40c6b3e0000803f0000000000000000000000000000803f00000000000080bf0000803e00000000bd147b3fc9c547bef30c6bbebe147b3fcac547be00000000cbc5473ebe147b3f00000000000080bf0000603e0000803fbd147b3fc6c547bef40c6b3ebe147b3fcac547be00000000c7c5473ebe147b3f00000000000080bf0000603e000000005d836c3f1befc3bef30c6bbe5e836c3f16efc3be0000000017efc33e5e836c3f00000000000080bf0000403e0000803f5d836c3f1befc3bef40c6b3e5e836c3f17efc3be0000000017efc33e5e836c3f00000000000080bf0000403e0000000033db543fd7390ebff20c6bbe33db543fd7390ebf00000000d7390e3f33db543f00000000000080bf0000203e0000803f33db543fd7390ebff50c6b3e33db543fd8390ebf00000000d9390e3f33db543f00000000000080bf0000203e00000000f404353ff20435bff20c6bbef504353ff10435bf00000000f004353ff604353f00000000000080bf0000003e0000803ff404353ff20435bff50c6b3ef504353ff10435bf00000000f104353ff404353f00000000000080bf0000003e00000000db390e3f30db54bff20c6bbedb390e3f30db54bf0000000030db543fdc390e3f00000000000080bf0000c03d0000803fdb390e3f30db54bff50c6b3edb390e3f30db54bf0000000030db543fdc390e3f00000000000080bf0000c03d0000000014efc33e5e836cbff00c6bbe16efc33e5e836cbf000000005e836c3f15efc33e00000000000080bf0000803d0000803f14efc33e5e836cbff70c6b3e16efc33e5e836cbf000000005e836c3f17efc33e00000000000080bf0000803d00000000bcc5473ebe147bbff20c6bbeb8c5473ec0147bbf00000000c0147b3fb8c5473e00000000000080bf0000003d0000803fbcc5473ebe147bbff50c6b3eb8c5473ec0147bbf00000000c0147b3fb8c5473e00000000000080bf0000003d0000000000000000000080bff20c6bbe63c323b4000080bf000000000000803f0000000000000000000080bf000000000000803f00000000000080bff50c6b3e63c323b4000080bf000000000000803f0000000000000000000080bf0000000000000000 + m_CompressedMesh: + m_Vertices: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_UV: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Normals: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Tangents: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Weights: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_NormalSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_TangentSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_FloatColors: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_BoneIndices: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_Triangles: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_UVInfo: 0 + m_LocalAABB: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 1, y: 1, z: 0.22954164} + m_MeshUsageFlags: 0 + m_CookingOptions: 30 + m_BakedConvexCollisionMesh: + m_BakedTriangleCollisionMesh: + m_MeshMetrics[0]: 2.879874 + m_MeshMetrics[1]: 1 + m_MeshOptimizationFlags: -1 + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: diff --git a/Assets/000_assets/model/Cylinder_01.mesh.meta b/Assets/000_assets/model/Cylinder_01.mesh.meta new file mode 100644 index 00000000..8d815d7f --- /dev/null +++ b/Assets/000_assets/model/Cylinder_01.mesh.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3d9a0252a1938b84f9ad7726e1244143 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4300000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/000_assets/model/circle01.fbx b/Assets/000_assets/model/circle01.fbx new file mode 100644 index 00000000..f9423290 Binary files /dev/null and b/Assets/000_assets/model/circle01.fbx differ diff --git a/Assets/000_assets/model/circle01.fbx.meta b/Assets/000_assets/model/circle01.fbx.meta new file mode 100644 index 00000000..62dd88d8 --- /dev/null +++ b/Assets/000_assets/model/circle01.fbx.meta @@ -0,0 +1,109 @@ +fileFormatVersion: 2 +guid: 3b047a3960820144e936b937b1a76722 +ModelImporter: + serializedVersion: 22200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/000_assets/prefab/rain_wave.prefab b/Assets/000_assets/prefab/rain_wave.prefab new file mode 100644 index 00000000..a52be70f --- /dev/null +++ b/Assets/000_assets/prefab/rain_wave.prefab @@ -0,0 +1,14722 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3455392101020918956 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1392282160985552015} + - component: {fileID: 4608735069299288310} + - component: {fileID: 2099796726723291800} + m_Layer: 0 + m_Name: in + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1392282160985552015 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3455392101020918956} + 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: 3146617751311215922} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!198 &4608735069299288310 +ParticleSystem: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3455392101020918956} + serializedVersion: 8 + lengthInSec: 1 + simulationSpeed: 1 + stopAction: 0 + cullingMode: 0 + ringBufferMode: 0 + ringBufferLoopRange: {x: 0, y: 1} + emitterVelocityMode: 1 + looping: 0 + prewarm: 0 + playOnAwake: 1 + 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: 0.55 + 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: 0 + 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: 0.66 + 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: 3.1415925 + 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: 1 + serializedVersion: 4 + rateOverTime: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + 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: 1 + m_Bursts: + - serializedVersion: 2 + time: 0 + countCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 30 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + 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 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + cycleCount: 1 + repeatInterval: 0.01 + probability: 1 + SizeModule: + enabled: 1 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.0020446777 + inSlope: 6.150049 + outSlope: 6.150049 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.13740179 + - serializedVersion: 3 + time: 0.12316489 + value: 0.6096474 + inSlope: 1.0153805 + outSlope: 1.0153805 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.07008216 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + 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: 1 + 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: 0.33333334} + 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: 19291 + atime2: 65535 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 3 + 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: 1 + mode0: 1 + 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: 1 + scalar: 1 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 1.2347053 + outSlope: 1.2347053 + tangentMode: 34 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.448359 + value: 0.55359125 + inSlope: 1.0219716 + outSlope: 1.0219716 + tangentMode: 34 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.80923784 + outSlope: 0.80923784 + tangentMode: 34 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + 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 &2099796726723291800 +ParticleSystemRenderer: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3455392101020918956} + 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: 235f9435448da714a924218ed6ead5ea, 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: 4 + 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: 2 + 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: 1 + m_VertexStreams: 0001030422 + m_UseCustomTrailVertexStreams: 0 + m_TrailVertexStreams: 00010304 + m_Mesh: {fileID: 2956056361018085333, guid: 3b047a3960820144e936b937b1a76722, type: 3} + 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!1 &5162248095919048748 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3146617751311215922} + - component: {fileID: 452051079566297731} + - component: {fileID: 2483756064867599867} + m_Layer: 0 + m_Name: rain_wave + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3146617751311215922 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5162248095919048748} + 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: 5342105230208656581} + - {fileID: 1392282160985552015} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!198 &452051079566297731 +ParticleSystem: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5162248095919048748} + serializedVersion: 8 + lengthInSec: 1 + simulationSpeed: 1 + stopAction: 0 + cullingMode: 0 + ringBufferMode: 0 + ringBufferLoopRange: {x: 0, y: 1} + emitterVelocityMode: 1 + looping: 0 + prewarm: 0 + playOnAwake: 1 + 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: 0.65 + 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: 0 + 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: 0 + 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: 1 + m_Bursts: + - serializedVersion: 2 + time: 0 + countCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 30 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + 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 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + cycleCount: 1 + repeatInterval: 0.01 + probability: 1 + SizeModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.0020446777 + inSlope: 6.150049 + outSlope: 6.150049 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.13740179 + - serializedVersion: 3 + time: 0.12316489 + value: 0.6096474 + inSlope: 1.0153805 + outSlope: 1.0153805 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.07008216 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + 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: 59272 + atime2: 65535 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 3 + 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: 1 + 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: 1 + scalar: 1 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 1.2347053 + outSlope: 1.2347053 + tangentMode: 34 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.448359 + value: 0.55359125 + inSlope: 1.0219716 + outSlope: 1.0219716 + tangentMode: 34 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.80923784 + outSlope: 0.80923784 + tangentMode: 34 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + 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 &2483756064867599867 +ParticleSystemRenderer: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5162248095919048748} + m_Enabled: 0 + 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: 0} + 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: 2 + 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: 1 + m_VertexStreams: 0001030422 + m_UseCustomTrailVertexStreams: 0 + m_TrailVertexStreams: 00010304 + m_Mesh: {fileID: 2534964839176971238, guid: f85ee2ceb2730e646adac4ef10d0dd62, type: 3} + 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!1 &8487000418624198723 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5342105230208656581} + - component: {fileID: 9031295553156032861} + - component: {fileID: 8561938378078797380} + m_Layer: 0 + m_Name: out + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5342105230208656581 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8487000418624198723} + 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: 3146617751311215922} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!198 &9031295553156032861 +ParticleSystem: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8487000418624198723} + serializedVersion: 8 + lengthInSec: 1 + simulationSpeed: 1 + stopAction: 0 + cullingMode: 0 + ringBufferMode: 0 + ringBufferLoopRange: {x: 0, y: 1} + emitterVelocityMode: 1 + looping: 0 + prewarm: 0 + playOnAwake: 1 + 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: 0.65 + 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: 0 + 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: 1 + serializedVersion: 4 + rateOverTime: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + 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: 1 + m_Bursts: + - serializedVersion: 2 + time: 0 + countCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 30 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + 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 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + cycleCount: 1 + repeatInterval: 0.01 + probability: 1 + SizeModule: + enabled: 1 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.0020446777 + inSlope: 6.150049 + outSlope: 6.150049 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.13740179 + - serializedVersion: 3 + time: 0.12316489 + value: 0.6096474 + inSlope: 1.0153805 + outSlope: 1.0153805 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.07008216 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + 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: 1 + 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: 59272 + atime2: 65535 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 3 + 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: 1 + mode0: 1 + 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: 1 + scalar: 1 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 1.2347053 + outSlope: 1.2347053 + tangentMode: 34 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.448359 + value: 0.55359125 + inSlope: 1.0219716 + outSlope: 1.0219716 + tangentMode: 34 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.80923784 + outSlope: 0.80923784 + tangentMode: 34 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + 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 &8561938378078797380 +ParticleSystemRenderer: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8487000418624198723} + 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: 235f9435448da714a924218ed6ead5ea, 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: 4 + 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: 2 + 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: 1 + m_VertexStreams: 0001030422 + m_UseCustomTrailVertexStreams: 0 + m_TrailVertexStreams: 00010304 + m_Mesh: {fileID: 2956056361018085333, guid: 3b047a3960820144e936b937b1a76722, type: 3} + 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 diff --git a/Assets/000_assets/prefab/rain_wave.prefab.meta b/Assets/000_assets/prefab/rain_wave.prefab.meta new file mode 100644 index 00000000..6c00c9fd --- /dev/null +++ b/Assets/000_assets/prefab/rain_wave.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7e40c55f82e37de44a0c3dcb80eb1da5 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/000_assets/tex/Mask_05.tga b/Assets/000_assets/tex/Mask_05.tga new file mode 100644 index 00000000..3608d164 Binary files /dev/null and b/Assets/000_assets/tex/Mask_05.tga differ diff --git a/Assets/000_assets/tex/Mask_05.tga.meta b/Assets/000_assets/tex/Mask_05.tga.meta new file mode 100644 index 00000000..76a8c50e --- /dev/null +++ b/Assets/000_assets/tex/Mask_05.tga.meta @@ -0,0 +1,144 @@ +fileFormatVersion: 2 +guid: 8f82e4a8d3d9d084f80e387419b28530 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + 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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 2 + 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 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 8192 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 8192 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 8192 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 8192 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Windows Store Apps + maxTextureSize: 8192 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/000_assets/tex/Noise_04.png b/Assets/000_assets/tex/Noise_04.png new file mode 100644 index 00000000..245bc4cf Binary files /dev/null and b/Assets/000_assets/tex/Noise_04.png differ diff --git a/Assets/000_assets/tex/Noise_04.png.meta b/Assets/000_assets/tex/Noise_04.png.meta new file mode 100644 index 00000000..f23fa54f --- /dev/null +++ b/Assets/000_assets/tex/Noise_04.png.meta @@ -0,0 +1,144 @@ +fileFormatVersion: 2 +guid: a343a8560a860bf4188c8f63103f455a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + 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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 2 + 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 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 8192 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 8192 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 8192 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 8192 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Windows Store Apps + maxTextureSize: 8192 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateMenuItems.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateMenuItems.cs index ab152ae5..52316189 100644 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateMenuItems.cs +++ b/Assets/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateMenuItems.cs @@ -91,5 +91,10 @@ namespace AmplifyShaderEditor { AmplifyShaderEditorWindow.CreateConfirmationTemplateShader( "2992e84f91cbeb14eab234972e07ea9d" ); } + [MenuItem( "Assets/Create/Amplify Shader/Universal/Unlit 1", false, 85 )] + public static void ApplyTemplateUniversalUnlit1() + { + AmplifyShaderEditorWindow.CreateConfirmationTemplateShader( "d8d51a726274eed4988773f21b79f651" ); + } } } diff --git a/Assets/FR2_Cache.asset b/Assets/FR2_Cache.asset index e35b3c6c..c0c01a78 100644 --- a/Assets/FR2_Cache.asset +++ b/Assets/FR2_Cache.asset @@ -31,15 +31,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: 00000000000000003000000000000000 type: 5 - m_fileInfoHash: 404.asset + m_fileInfoHash: 418.asset m_assetbundle: m_addressable: m_atlas: - m_fileSize: 404 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510519 - m_fileWriteTS: 1744804698 - m_cachefileWriteTS: 1744804698 + m_fileSize: 418 + m_assetChangeTS: 1750962592 + m_fileInfoReadTS: 1750962596 + m_fileWriteTS: 1750962592 + m_cachefileWriteTS: 1750962592 refreshStamp: 2 UseGUIDsList: [] - guid: 00000000000000004000000000000000 @@ -49,10 +49,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 26252 - m_assetChangeTS: 1750518401 - m_fileInfoReadTS: 1750518402 - m_fileWriteTS: 1750518400 - m_cachefileWriteTS: 1750518400 + m_assetChangeTS: 1751044715 + m_fileInfoReadTS: 1751044720 + m_fileWriteTS: 1751044714 + m_cachefileWriteTS: 1751044714 refreshStamp: 2 UseGUIDsList: - guid: fc6c02e75b66345c29e8a25e2e2bda9c @@ -116,10 +116,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 5014 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510519 - m_fileWriteTS: 1746343050 - m_cachefileWriteTS: 1746343050 + m_assetChangeTS: 1750962866 + m_fileInfoReadTS: 1750962876 + m_fileWriteTS: 1750962866 + m_cachefileWriteTS: 1750962866 refreshStamp: 2 UseGUIDsList: - guid: d0e2fc18fe036412f8223b3b3d9ad574 @@ -186,15 +186,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: 00000000000000006100000000000000 type: 5 - m_fileInfoHash: 2523.asset + m_fileInfoHash: 2316.asset m_assetbundle: m_addressable: m_atlas: - m_fileSize: 2523 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510519 - m_fileWriteTS: 1742881564 - m_cachefileWriteTS: 1742881564 + m_fileSize: 2316 + m_assetChangeTS: 1750964954 + m_fileInfoReadTS: 1750964955 + m_fileWriteTS: 1750964954 + m_cachefileWriteTS: 1750964954 refreshStamp: 2 UseGUIDsList: - guid: 0000000000000000f000000000000000 @@ -1760,15 +1760,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: 20904e6182baed446b49fe294fad22b2 type: 2 - m_fileInfoHash: 8241.cs + m_fileInfoHash: 8804.cs m_assetbundle: m_addressable: m_atlas: - m_fileSize: 8241 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510518 - m_fileWriteTS: 1749367808 - m_cachefileWriteTS: 1749367808 + m_fileSize: 8804 + m_assetChangeTS: 1750597263 + m_fileInfoReadTS: 1750597272 + m_fileWriteTS: 1750597147 + m_cachefileWriteTS: 1750597147 refreshStamp: 2 UseGUIDsList: [] - guid: 20e01cb163f347c7819ae286c33baf85 @@ -11540,10 +11540,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 3645 - m_assetChangeTS: 1750516443 - m_fileInfoReadTS: 1750516724 - m_fileWriteTS: 1750516443 - m_cachefileWriteTS: 1750516443 + m_assetChangeTS: 1750971445 + m_fileInfoReadTS: 1750971595 + m_fileWriteTS: 1750971445 + m_cachefileWriteTS: 1750971445 refreshStamp: 2 UseGUIDsList: - guid: bf2edee5c58d82540a51f03df9d42094 @@ -17696,15 +17696,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: 41993de9eb4184946b271ed039f2827a type: 5 - m_fileInfoHash: 358907.prefab + m_fileInfoHash: 358905.prefab m_assetbundle: departure_to_multiverse m_addressable: m_atlas: - m_fileSize: 358907 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510516 - m_fileWriteTS: 1746154601 - m_cachefileWriteTS: 1746154601 + m_fileSize: 358905 + m_assetChangeTS: 1750959345 + m_fileInfoReadTS: 1750959348 + m_fileWriteTS: 1750959345 + m_cachefileWriteTS: 1750959345 refreshStamp: 2 UseGUIDsList: - guid: eb907071d10d7324995ff3aefbc2f1df @@ -21340,15 +21340,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: 81e2cda70e8084a3fb324d644db244fd type: 5 - m_fileInfoHash: 271955.asset + m_fileInfoHash: 273239.asset m_assetbundle: m_addressable: m_atlas: - m_fileSize: 271955 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510516 - m_fileWriteTS: 1749926621 - m_cachefileWriteTS: 1749926621 + m_fileSize: 273239 + m_assetChangeTS: 1751046798 + m_fileInfoReadTS: 1751092989 + m_fileWriteTS: 1751046797 + m_cachefileWriteTS: 1751046797 refreshStamp: 2 UseGUIDsList: - guid: e6b16dc7c203450459bb86e24305f9ca @@ -21369,8 +21369,6 @@ MonoBehaviour: ids: - guid: 80694812942b91b42bc4aad99071ba7e ids: d50000001c000000 - - guid: 0b9510d2790829140953392aae2b6679 - ids: 1c000000d5000000 - guid: f4b4e87edddc74e4e8d6b9d4cc0e31fc ids: - guid: da07703fcc09f8d4799221050659bd55 @@ -21557,14 +21555,8 @@ MonoBehaviour: ids: 1c000000d5000000 - guid: 87529e0fd28c3774fa086315a42b1860 ids: 1c000000d5000000 - - guid: ea579184be3210e458d3beef7ebe7fe0 - ids: 1c000000d5000000 - guid: 94f43f82d46dcdb4db47e75f6c65be01 ids: d50000001c000000 - - guid: 3b9e073ee03f6614898a81df8af9c7ef - ids: 1c000000d5000000 - - guid: bad6c0f0bf6c3aa4690d400a757fa284 - ids: d5000000 - guid: 852af70e3243e31408aa8260c1ef13fb ids: d50000001c000000 - guid: 1e64f8ba631ae514e9a68eaf3620f9a9 @@ -21573,20 +21565,6 @@ MonoBehaviour: ids: d50000001c000000 - guid: a9fd44c7daf773c489b86519d261b198 ids: d50000001c000000 - - guid: eb5037930d3bbe143a8a570722950901 - ids: d50000001c000000 - - guid: 81e4191bebbffee49a87679d87cdc04e - ids: - - guid: 7fae6cb1e0ec9ab4dabf73686e5f0aa1 - ids: 1c000000d5000000 - - guid: b71d66e1b0c0c474fb9f1cf92d3e9e9e - ids: d50000001c000000 - - guid: 544caa0353497f24faed28c569d18fe4 - ids: 1c000000d5000000 - - guid: 4feff79cdc04e1145884512f088bdfde - ids: d50000001c000000 - - guid: 6582f34ddd5f686408c019550cd94c9d - ids: 883600001c000000d13f0000 - guid: 2e7855b3fe5072d4e89ef64d4e988b0a ids: 1c000000d5000000 - guid: 9bd9265533309304db171aa9f916554a @@ -22007,14 +21985,6 @@ MonoBehaviour: ids: d50000001c000000 - guid: e3eb7e0ce65fdb54daef8ada37f7e761 ids: d50000001c000000 - - guid: 6ff9ef53522706d41aea024924a1c692 - ids: 1c000000d5000000 - - guid: 8a1f96c93a153e34a98b5f6dd6bbfebd - ids: 1c000000 - - guid: cbf580e20161a1648a8eaf3a407611f6 - ids: 1c000000d5000000 - - guid: ae95cb7fcab73574c9bc98f66c7aeca5 - ids: d50000001c000000 - guid: 370b6c06925dc4b4cb99bc543ad8be1f ids: d50000001c000000 - guid: 94b968db3033ee14288967574b0846a3 @@ -22065,8 +22035,6 @@ MonoBehaviour: ids: - guid: 1f82daa2ab22a0943a51de0203fee565 ids: - - guid: f20112bdeec2e8d4d9f80e8390e37263 - ids: 1c000000 - guid: 34f35091439de454483d8f703662fe18 ids: - guid: 5618123237d1d3f49a5a6025287065f7 @@ -22167,30 +22135,96 @@ MonoBehaviour: ids: d50000001c000000 - guid: 66995b6b61aed864daa956ae255d7fee ids: d50000001c000000 + - guid: 031554f259eac2848a3f78425c67e910 + ids: 72000000 + - guid: 85c3e9578b45a414bb6507f90e48720a + ids: + - guid: 3f216541647c185428ca5581509954d8 + ids: + - guid: d54759aa63d2527499f0c933fdf37b78 + ids: 30000000 + - guid: 720c743be19718447a881adf4e2707ca + ids: 15000000 + - guid: f5775a9d8f75ec744939ba3702a7fe05 + ids: 1c000000 + - guid: 40caca121c246564eaba4b6de7329e20 + ids: 15000000 + - guid: 4dbc31cf60d8a0549a2be9b95e816376 + ids: 73000000 + - guid: f0cf39229422d1b428bf04e0bc828dc6 + ids: 15000000 + - guid: fb9c9eda58078b14688aa3ca7e93eb3b + ids: 30000000 + - guid: 3b7ed371b1045a7468c77d301d66f1b9 + ids: 1c000000 + - guid: 505bbb3b422a41f44b0bbea401e13fdc + ids: 1c000000 + - guid: ccad1289735ff2846acdd1497362d45b + ids: 15000000 + - guid: 2f2e97c8a35330f49a9cb31ec0f075bf + ids: + - guid: ffb18e7c2ba53c84d850a83811f543ea + ids: 1c000000 + - guid: 578d8aa95b57c2448b22029e590b51c9 + ids: 15000000 + - guid: 1b4d77614bc32d64393fd80c3d80f7db + ids: + - guid: 24202603b497fb941af8d6bed0a66c12 + ids: 15000000 + - guid: b37c44f04f3075045aef6be2c0506551 + ids: 73000000 + - guid: ea0771a0c87f746769a9ffd7286a0665 + ids: 73000000 + - guid: 5bb276fc3eccc674eab768c866424df0 + ids: 15000000 + - guid: a343a8560a860bf4188c8f63103f455a + ids: 1c000000 + - guid: a400b0137c2b44b4f9379311124fe1a1 + ids: 15000000 + - guid: 248ba9b81ec62574eb5c6e70be1e1bdb + ids: 1c000000 + - guid: d7b8dd640e42194458cd8292833fb86d + ids: 1c000000 + - guid: a9dcdb241a7784643b7fe4ea67ffa523 + ids: 15000000 + - guid: 1828b8a7039d30b4497ec4b19fd57158 + ids: 30000000 + - guid: 4a53388d09164bb43971571879adc754 + ids: 15000000 + - guid: fe30e455c04f33342bb3d1c227855682 + ids: 73000000 + - guid: 909ea7d136ae0c349a24f02cac1f5f71 + ids: 73000000 + - guid: 7f808d0c8608b954d8f20cb4132c3049 + ids: 1c000000 + - guid: 5fd213d22763447c4aa106605e06184e + ids: 30000000 + - guid: f20112bdeec2e8d4d9f80e8390e37263 + ids: 1c000000 - guid: 188dfe7e559f13248ba2c41eb5a59328 ids: 1c000000 - - guid: 02f78a9ec76d40f49bfac78c64a754d1 - ids: 1c000000 - - guid: a7ec9e7ad8b847b7ae4510af83c5d868 + - guid: f66c4aa44c09b6a42a2b5b9f9334d824 ids: 1c000000 - guid: 3ee40aa79cd242a5b53b0b0ca4f13f0f ids: 1c000000 - guid: b0f85f7da5042c0448a526d5ecacbfa9 ids: 1c000000 + - guid: ee148e281f3c41c5b4ff5f8a5afe5a6c + ids: 1c000000 - guid: f87b5805002ec9649bcb1b96d8a16ba9 ids: 1c000000 - - guid: f66c4aa44c09b6a42a2b5b9f9334d824 - ids: 1c000000 - - guid: 3028dc075ba8c584d9bc7d1e0255e038 - ids: 1c000000 - - guid: dcc0ed9263c0d524aabeb5f4bd75ecee + - guid: a7ec9e7ad8b847b7ae4510af83c5d868 ids: 1c000000 - guid: 2fd6421f253b4ef1a19526541f9ffc0c ids: 1c000000 - - guid: ee148e281f3c41c5b4ff5f8a5afe5a6c + - guid: 02f78a9ec76d40f49bfac78c64a754d1 + ids: 1c000000 + - guid: 3028dc075ba8c584d9bc7d1e0255e038 ids: 1c000000 - guid: 93f09189124b21e479fc891dbc1b93bf ids: 1c000000 + - guid: dcc0ed9263c0d524aabeb5f4bd75ecee + ids: 1c000000 - guid: 8113366f9f7cec647878e3af2fb98922 type: 9 m_fileInfoHash: 19671.png @@ -27234,10 +27268,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 3642 - m_assetChangeTS: 1750516443 - m_fileInfoReadTS: 1750516724 - m_fileWriteTS: 1750516443 - m_cachefileWriteTS: 1750516443 + m_assetChangeTS: 1750971445 + m_fileInfoReadTS: 1750971595 + m_fileWriteTS: 1750971444 + m_cachefileWriteTS: 1750971444 refreshStamp: 2 UseGUIDsList: - guid: bf2edee5c58d82540a51f03df9d42094 @@ -28085,15 +28119,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: f1f4327ac58492948a90f2a7b5c99f4e type: 5 - m_fileInfoHash: 1362566.prefab + m_fileInfoHash: 1308591.prefab m_assetbundle: departure_to_multiverse m_addressable: m_atlas: - m_fileSize: 1362566 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510515 - m_fileWriteTS: 1748079479 - m_cachefileWriteTS: 1748079479 + m_fileSize: 1308591 + m_assetChangeTS: 1750949385 + m_fileInfoReadTS: 1750949386 + m_fileWriteTS: 1750949386 + m_cachefileWriteTS: 1750949386 refreshStamp: 2 UseGUIDsList: - guid: ed3350df76a990c4ba0848b24f43a95d @@ -46075,10 +46109,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 2688 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510513 - m_fileWriteTS: 1747728592 - m_cachefileWriteTS: 1747728592 + m_assetChangeTS: 1751005870 + m_fileInfoReadTS: 1751005880 + m_fileWriteTS: 1750971594 + m_cachefileWriteTS: 1750971594 refreshStamp: 2 UseGUIDsList: [] - guid: 53a7b15acf3ceaf41b7f56dbca27f6c8 @@ -48281,15 +48315,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: 836ab6bd424664b3cb74dd0fcb08c039 type: 2 - m_fileInfoHash: 4734.cs + m_fileInfoHash: 5267.cs m_assetbundle: m_addressable: m_atlas: - m_fileSize: 4734 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510513 - m_fileWriteTS: 1744655570 - m_cachefileWriteTS: 1744655570 + m_fileSize: 5267 + m_assetChangeTS: 1750952236 + m_fileInfoReadTS: 1750952245 + m_fileWriteTS: 1750952215 + m_cachefileWriteTS: 1750952215 refreshStamp: 2 UseGUIDsList: [] - guid: 836aceb6bf15047ffb768a3f1b73f56a @@ -51047,15 +51081,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: b388e3ab3a2252f429acfdc008621406 type: 9 - m_fileInfoHash: 2131.manifest + m_fileInfoHash: 2066.manifest m_assetbundle: m_addressable: m_atlas: - m_fileSize: 2131 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510513 - m_fileWriteTS: 1748079479 - m_cachefileWriteTS: 1748079479 + m_fileSize: 2066 + m_assetChangeTS: 1751005870 + m_fileInfoReadTS: 1751005880 + m_fileWriteTS: 1750971594 + m_cachefileWriteTS: 1750971594 refreshStamp: 2 UseGUIDsList: [] - guid: b3f8be1d5379c4d059d88a709145ec48 @@ -53110,15 +53144,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: e365a28188395451e95f60530805d7ca type: 2 - m_fileInfoHash: 7271.cs + m_fileInfoHash: 7285.cs m_assetbundle: m_addressable: m_atlas: - m_fileSize: 7271 - m_assetChangeTS: 1750572268 - m_fileInfoReadTS: 1750572287 - m_fileWriteTS: 1750572040 - m_cachefileWriteTS: 1750572040 + m_fileSize: 7285 + m_assetChangeTS: 1750597263 + m_fileInfoReadTS: 1750597272 + m_fileWriteTS: 1750597147 + m_cachefileWriteTS: 1750597147 refreshStamp: 2 UseGUIDsList: [] - guid: e3161f1cd14e4e2799db62e6545115de @@ -58986,10 +59020,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 24053 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510512 - m_fileWriteTS: 1746155381 - m_cachefileWriteTS: 1746155381 + m_assetChangeTS: 1750958295 + m_fileInfoReadTS: 1750958296 + m_fileWriteTS: 1750958295 + m_cachefileWriteTS: 1750958295 refreshStamp: 2 UseGUIDsList: [] - guid: 44e8ffd026f750849aedc675e8b89c89 @@ -64438,15 +64472,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: a48a638548bdb6645bfa74867dc72087 type: 2 - m_fileInfoHash: 9176.cs + m_fileInfoHash: 9204.cs m_assetbundle: m_addressable: m_atlas: - m_fileSize: 9176 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510511 - m_fileWriteTS: 1749462148 - m_cachefileWriteTS: 1749462148 + m_fileSize: 9204 + m_assetChangeTS: 1750597263 + m_fileInfoReadTS: 1750597272 + m_fileWriteTS: 1750597147 + m_cachefileWriteTS: 1750597147 refreshStamp: 2 UseGUIDsList: [] - guid: a48a9e08d9023374fab5d929e609b9bd @@ -65140,15 +65174,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: b4c5757a536b2e14bbb3c3fa2ed0a8e4 type: 2 - m_fileInfoHash: 11267.cs + m_fileInfoHash: 11336.cs m_assetbundle: m_addressable: m_atlas: - m_fileSize: 11267 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510511 - m_fileWriteTS: 1749367808 - m_cachefileWriteTS: 1749367808 + m_fileSize: 11336 + m_assetChangeTS: 1750597263 + m_fileInfoReadTS: 1750597272 + m_fileWriteTS: 1750597147 + m_cachefileWriteTS: 1750597147 refreshStamp: 2 UseGUIDsList: [] - guid: b43651fb085b38445ade3f9de3ab0636 @@ -66257,17 +66291,21 @@ MonoBehaviour: ids: 30000000 - guid: c40be3174f62c4acf8c1216858c64956 type: 5 - m_fileInfoHash: 3839.asset + m_fileInfoHash: 6134.asset m_assetbundle: m_addressable: m_atlas: - m_fileSize: 3839 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510511 - m_fileWriteTS: 1743748158 - m_cachefileWriteTS: 1743748158 + m_fileSize: 6134 + m_assetChangeTS: 1751014599 + m_fileInfoReadTS: 1751014600 + m_fileWriteTS: 1751014599 + m_cachefileWriteTS: 1751014599 refreshStamp: 2 UseGUIDsList: + - guid: f41bcf9b1f0eb6446907e2c52c9f2d39 + ids: 73000000 + - guid: f0cf39229422d1b428bf04e0bc828dc6 + ids: 15000000 - guid: f62c9c65cf3354c93be831c8bc075510 ids: 73000000 - guid: 36f118343fc974119bee3d09e2111500 @@ -66322,6 +66360,12 @@ MonoBehaviour: ids: 30000000 - guid: 6cda457ac28612740adb23da5d39ea92 ids: 30000000 + - guid: d5a1f9350d8fc2c46a372955ef0e73b5 + ids: 73000000 + - guid: 6b3d386ba5cd94485973aee1479b272e + ids: 73000000 + - guid: fb9c9eda58078b14688aa3ca7e93eb3b + ids: 30000000 - guid: c42b71ff0e23e2d4a8a32a2bc85acac0 type: 2 m_fileInfoHash: 3089.cs @@ -70960,15 +71004,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: 25a8f6a819bb78746af9abdca952589c type: 5 - m_fileInfoHash: 1130168.prefab + m_fileInfoHash: 1085423.prefab m_assetbundle: departure_to_multiverse m_addressable: m_atlas: - m_fileSize: 1130168 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510511 - m_fileWriteTS: 1748079479 - m_cachefileWriteTS: 1748079479 + m_fileSize: 1085423 + m_assetChangeTS: 1750941423 + m_fileInfoReadTS: 1750941425 + m_fileWriteTS: 1750941423 + m_cachefileWriteTS: 1750941423 refreshStamp: 2 UseGUIDsList: - guid: ee3079696b551df4383392d17c46b755 @@ -80776,15 +80820,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: d58e7a7433f91a24db26a8712f3592da type: 9 - m_fileInfoHash: 284.manifest + m_fileInfoHash: 269.manifest m_assetbundle: m_addressable: m_atlas: - m_fileSize: 284 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510510 - m_fileWriteTS: 1748079479 - m_cachefileWriteTS: 1748079479 + m_fileSize: 269 + m_assetChangeTS: 1751005870 + m_fileInfoReadTS: 1751005880 + m_fileWriteTS: 1750971594 + m_cachefileWriteTS: 1750971594 refreshStamp: 2 UseGUIDsList: [] - guid: d5deddb7ed7802d41947ef9ac98ccd56 @@ -83927,10 +83971,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 6891 - m_assetChangeTS: 1750572268 - m_fileInfoReadTS: 1750572287 - m_fileWriteTS: 1750572264 - m_cachefileWriteTS: 1750572264 + m_assetChangeTS: 1750597263 + m_fileInfoReadTS: 1750597272 + m_fileWriteTS: 1750597147 + m_cachefileWriteTS: 1750597147 refreshStamp: 2 UseGUIDsList: [] - guid: 164c9b1458eaab743a4b45c37a4d720d @@ -90749,15 +90793,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: a6560a915ef98420e9faacc1c7438823 type: 5 - m_fileInfoHash: 3713.asset + m_fileInfoHash: 3563.asset m_assetbundle: m_addressable: m_atlas: - m_fileSize: 3713 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510509 - m_fileWriteTS: 1742680962 - m_cachefileWriteTS: 1742680962 + m_fileSize: 3563 + m_assetChangeTS: 1751015090 + m_fileInfoReadTS: 1751015093 + m_fileWriteTS: 1751015090 + m_cachefileWriteTS: 1751015090 refreshStamp: 2 UseGUIDsList: - guid: 0b2db86121404754db890f4c8dfe81b2 @@ -97324,10 +97368,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 192 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510508 - m_fileWriteTS: 1748280881 - m_cachefileWriteTS: 1748280881 + m_assetChangeTS: 1750675671 + m_fileInfoReadTS: 1750675681 + m_fileWriteTS: 1750602947 + m_cachefileWriteTS: 1750602947 refreshStamp: 2 UseGUIDsList: [] - guid: 17eaa6370b3e28741af24fa5d835972a @@ -97693,15 +97737,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: 27404ae91ccdf474299d5ade4afff522 type: 5 - m_fileInfoHash: 13013.mat + m_fileInfoHash: 13016.mat m_assetbundle: m_addressable: m_atlas: - m_fileSize: 13013 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510508 - m_fileWriteTS: 1747760749 - m_cachefileWriteTS: 1747760749 + m_fileSize: 13016 + m_assetChangeTS: 1750957956 + m_fileInfoReadTS: 1750957999 + m_fileWriteTS: 1750957850 + m_cachefileWriteTS: 1750957850 refreshStamp: 2 UseGUIDsList: - guid: 4af258f019782954c9c32cd616f51c3b @@ -97712,7 +97756,7 @@ MonoBehaviour: ids: 1c000000 - guid: ffb18e7c2ba53c84d850a83811f543ea ids: 1c000000 - - guid: 0ddf03354b506e5458476d57ac5992d2 + - guid: a343a8560a860bf4188c8f63103f455a ids: 1c000000 - guid: d0353a89b1f911e48b9e16bdc9f2e058 ids: 73000000 @@ -101476,15 +101520,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: 67578ca8780234f6d9108a4ea88a5c82 type: 2 - m_fileInfoHash: 13028.cs + m_fileInfoHash: 13337.cs m_assetbundle: m_addressable: m_atlas: - m_fileSize: 13028 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510508 - m_fileWriteTS: 1748793589 - m_cachefileWriteTS: 1748793589 + m_fileSize: 13337 + m_assetChangeTS: 1750957083 + m_fileInfoReadTS: 1750957091 + m_fileWriteTS: 1750957079 + m_cachefileWriteTS: 1750957079 refreshStamp: 2 UseGUIDsList: [] - guid: 67a774c4384aa6c488128e2851b18ced @@ -111197,15 +111241,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: 28c134965d47644a98d3ba8a1343674a type: 3 - m_fileInfoHash: 475042.unity + m_fileInfoHash: 480091.unity m_assetbundle: m_addressable: m_atlas: - m_fileSize: 475042 - m_assetChangeTS: 1750510674 - m_fileInfoReadTS: 1750510691 - m_fileWriteTS: 1750510674 - m_cachefileWriteTS: 1750510674 + m_fileSize: 480091 + m_assetChangeTS: 1750943771 + m_fileInfoReadTS: 1750943791 + m_fileWriteTS: 1750943771 + m_cachefileWriteTS: 1750943771 refreshStamp: 2 UseGUIDsList: - guid: 0000000000000000f000000000000000 @@ -111294,6 +111338,8 @@ MonoBehaviour: ids: 73000000 - guid: 3312d7739989d2b4e91e6319e9a96d76 ids: 73000000 + - guid: 3f216541647c185428ca5581509954d8 + ids: e9030000 - guid: 344445a89b4f74a0e9a0a766903df87e ids: 73000000 - guid: d3aa727ae213742148372dfe4f74aa62 @@ -111340,6 +111386,8 @@ MonoBehaviour: ids: 73000000 - guid: 7f4b9216445764528a39790ae30bcde1 ids: 73000000 + - guid: 85c3e9578b45a414bb6507f90e48720a + ids: e9030000 - guid: 28f1ec0b82fdf434b8efa0ef0f9a9d37 type: 9 m_fileInfoHash: 819.txt @@ -130689,15 +130737,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: 99c9720ab356a0642a771bea13969a05 type: 3 - m_fileInfoHash: 969172.unity + m_fileInfoHash: 961697.unity m_assetbundle: m_addressable: m_atlas: - m_fileSize: 969172 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510505 - m_fileWriteTS: 1750508978 - m_cachefileWriteTS: 1750508978 + m_fileSize: 961697 + m_assetChangeTS: 1751015087 + m_fileInfoReadTS: 1751015090 + m_fileWriteTS: 1751015087 + m_cachefileWriteTS: 1751015087 refreshStamp: 2 UseGUIDsList: - guid: 20c30ea7b5a4fa046b4cc5a27824d90b @@ -130712,6 +130760,8 @@ MonoBehaviour: ids: 73000000 - guid: 8f586378b4e144a9851e7b34d9b748ee ids: 7200000015000000 + - guid: f0cf39229422d1b428bf04e0bc828dc6 + ids: 15000000 - guid: 306cc8c2b49d7114eaa3623786fc2126 ids: 73000000 - guid: dc42784cf147c0c48a680349fa168899 @@ -130736,6 +130786,8 @@ MonoBehaviour: ids: 73000000 - guid: ca9f5fa95ffab41fb9a615ab714db018 ids: + - guid: 4a53388d09164bb43971571879adc754 + ids: 15000000 - guid: aa9644af7cd7f4a939983928c8fa106a ids: e9030000 - guid: 3312d7739989d2b4e91e6319e9a96d76 @@ -130782,6 +130834,8 @@ MonoBehaviour: ids: 73000000 - guid: 485e02e02c638cf4b9ca8344fd6213a9 ids: 73000000 + - guid: fe30e455c04f33342bb3d1c227855682 + ids: 73000000 - guid: 7170ea6c91de2f2408b4e840f466bfea ids: d50000001c000000 - guid: 2da0c512f12947e489f739169773d7ca @@ -130798,6 +130852,8 @@ MonoBehaviour: ids: 73000000 - guid: 1d40f46869fc84408ab4870b70e789ef ids: 73000000 + - guid: 031554f259eac2848a3f78425c67e910 + ids: 72000000 - guid: 266f4a39c512c46eea7e44336e4fc600 ids: 72000000 - guid: 32b615cfb2614a946a8ff57e380b4759 @@ -131234,16 +131290,6 @@ MonoBehaviour: ids: 1c000000d5000000 - guid: 2ef3369460b480c41a1ca769aa259384 ids: 1c000000d5000000 - - guid: bad6c0f0bf6c3aa4690d400a757fa284 - ids: d50000001c000000 - - guid: 9ce434ac86a021e418c3060399e7abdd - ids: 1c000000 - - guid: 81e4191bebbffee49a87679d87cdc04e - ids: 1c000000 - - guid: 511631c7a28707b48a1b5b9daa425951 - ids: 1c000000d5000000 - - guid: a43358f5c0cff0849bd9243110ff33a6 - ids: d50000001c000000 - guid: 9bd9265533309304db171aa9f916554a ids: d50000001c000000 - guid: 28865e3766dc95c45b0a5720af378d53 @@ -131382,18 +131428,6 @@ MonoBehaviour: ids: 1c000000d5000000 - guid: ba19c3c8a5cc12841a5296ee7c2a1c0b ids: d50000001c000000 - - guid: 4ca9e709a65faf543a1b376009b64e12 - ids: d50000001c000000 - - guid: 0d638d1d0bd5acb4094aec795e12958f - ids: 1c000000d5000000 - - guid: 465da28a3b32776439f838508cc69022 - ids: d50000001c000000 - - guid: 5600988dca3baa14ab4b4b89f00f879e - ids: d50000001c000000 - - guid: c35fe602e21b38542ba33e1db2731a5f - ids: 1c000000d5000000 - - guid: b8c0f4c828e8022498c8a5c6c0fa8ec4 - ids: d50000001c000000 - guid: 873b489a73575b14fa7f49597735beaa ids: d50000001c000000 - guid: 8548d034b532fc64f9e26ecfe5f35ff7 @@ -131408,8 +131442,6 @@ MonoBehaviour: ids: 1c000000d5000000 - guid: 1e41e49e206bc2947b8943351eed53d3 ids: 1c000000d5000000 - - guid: f7043b7291f49844b9671b3d3dedcbb5 - ids: 1c000000 - guid: 0db74eaedc5768049b3b62b9e6149b09 ids: d50000001c000000 - guid: b325a13e94f3bac4199e75b91fa98449 @@ -131438,18 +131470,12 @@ MonoBehaviour: ids: 30000000 - guid: 933532a4fcc9baf4fa0491de14d08ed7 ids: 30000000 - - guid: e7170b34430d5ef44bb8add062be7881 - ids: - - guid: a9f670f4eae962b4683c35ae3d1db878 - ids: - guid: 952471cc7e81a214fbe1eade4ae7c649 ids: 30000000 - guid: 72c44f820e292664ead684b85643fada ids: 15000000 - guid: 00cafe0a18485bf4986d87092f3b2c63 ids: - - guid: 2b0c4bbc795c1cd458a0e991993226f3 - ids: - guid: 9b87c0dd981e72b4abff6b56929b3e68 ids: - guid: c74839fccf2b6454386ad1ed9c9c8d68 @@ -131464,18 +131490,8 @@ MonoBehaviour: ids: 15000000 - guid: b39306d2c39754d0aafabe8570b8e640 ids: 15000000 - - guid: 85100f2846b96ab4db6a40b985d86c31 - ids: 15000000 - - guid: 434d7023f5e92d542b23666ffb61e63d - ids: 15000000 - - guid: 8efb9c5cb7c29a7409a78be182c20b05 - ids: 1c000000 - - guid: 2551f16b11627614f854189f0bd1f45b - ids: 15000000 - guid: 21b28f3ee4b3c13408ed85c229008f40 ids: 30000000 - - guid: 46576ebd24ca95b418aa0c64e9a60f53 - ids: 15000000 - guid: 69c3c648559bfd34eaae3ff327107596 ids: 15000000 - guid: b8fb5f4647ab89042bf7105dcd3fd660 @@ -131494,8 +131510,6 @@ MonoBehaviour: ids: 15000000 - guid: 0406db5a14f94604a8c57ccfbc9f3b46 ids: 30000000 - - guid: 0dcefafee79e7de43ad13fab5cdb7135 - ids: 1c000000 - guid: 5392668a037c8bf49b4479948ee1f3fd ids: 1c000000 - guid: 98ad67e4ae4dbb54eb05b761fb2a2c02 @@ -131504,8 +131518,6 @@ MonoBehaviour: ids: 30000000 - guid: a2bfccdea313bee4cbe611dfd2194b6c ids: 15000000 - - guid: ec25b894bde46e04496a23def0906022 - ids: 15000000 - guid: 99dec03033cf89c4b936367ceee96b05 ids: 150000001c000000 - guid: da9a51ce28f0d7443a5bcbdbe04c4f4b @@ -131520,8 +131532,6 @@ MonoBehaviour: ids: - guid: 465ba4a268f5c4589a58ed35a13a75c4 ids: 15000000 - - guid: 0b9510d2790829140953392aae2b6679 - ids: d50000001c000000 - guid: 80694812942b91b42bc4aad99071ba7e ids: 1c000000d5000000 - guid: f4b4e87edddc74e4e8d6b9d4cc0e31fc @@ -131650,12 +131660,8 @@ MonoBehaviour: ids: d50000001c000000 - guid: 87529e0fd28c3774fa086315a42b1860 ids: 1c000000d5000000 - - guid: ea579184be3210e458d3beef7ebe7fe0 - ids: 1c000000d5000000 - guid: 94f43f82d46dcdb4db47e75f6c65be01 ids: d50000001c000000 - - guid: 3b9e073ee03f6614898a81df8af9c7ef - ids: 1c000000d5000000 - guid: 852af70e3243e31408aa8260c1ef13fb ids: d50000001c000000 - guid: 1e64f8ba631ae514e9a68eaf3620f9a9 @@ -131664,18 +131670,20 @@ MonoBehaviour: ids: d50000001c000000 - guid: a9fd44c7daf773c489b86519d261b198 ids: d50000001c000000 - - guid: eb5037930d3bbe143a8a570722950901 - ids: d50000001c000000 - - guid: 7fae6cb1e0ec9ab4dabf73686e5f0aa1 - ids: 1c000000d5000000 - - guid: b71d66e1b0c0c474fb9f1cf92d3e9e9e - ids: d50000001c000000 - - guid: 544caa0353497f24faed28c569d18fe4 - ids: 1c000000d5000000 - - guid: 4feff79cdc04e1145884512f088bdfde - ids: d50000001c000000 - - guid: 6582f34ddd5f686408c019550cd94c9d - ids: 883600001c000000 + - guid: 4dbc31cf60d8a0549a2be9b95e816376 + ids: 73000000 + - guid: f5775a9d8f75ec744939ba3702a7fe05 + ids: 1c000000 + - guid: 40caca121c246564eaba4b6de7329e20 + ids: 15000000 + - guid: 85c3e9578b45a414bb6507f90e48720a + ids: + - guid: 3f216541647c185428ca5581509954d8 + ids: + - guid: 720c743be19718447a881adf4e2707ca + ids: 15000000 + - guid: d54759aa63d2527499f0c933fdf37b78 + ids: 30000000 - guid: 2e7855b3fe5072d4e89ef64d4e988b0a ids: 1c000000d5000000 - guid: 4b307c9f1eae5644a865e61b227b969e @@ -131724,24 +131732,50 @@ MonoBehaviour: ids: - guid: d6ba0e915cddec743a29f85a93f12594 ids: 73000000 - - guid: 188dfe7e559f13248ba2c41eb5a59328 + - guid: fb9c9eda58078b14688aa3ca7e93eb3b + ids: 30000000 + - guid: da07703fcc09f8d4799221050659bd55 + ids: 30000000 + - guid: 3b7ed371b1045a7468c77d301d66f1b9 ids: 1c000000 - - guid: f20112bdeec2e8d4d9f80e8390e37263 + - guid: 505bbb3b422a41f44b0bbea401e13fdc ids: 1c000000 - - guid: 3ee40aa79cd242a5b53b0b0ca4f13f0f + - guid: ccad1289735ff2846acdd1497362d45b + ids: 15000000 + - guid: 2f2e97c8a35330f49a9cb31ec0f075bf + ids: + - guid: ffb18e7c2ba53c84d850a83811f543ea ids: 1c000000 - - guid: 02f78a9ec76d40f49bfac78c64a754d1 + - guid: 578d8aa95b57c2448b22029e590b51c9 + ids: 15000000 + - guid: 1b4d77614bc32d64393fd80c3d80f7db + ids: + - guid: 24202603b497fb941af8d6bed0a66c12 + ids: 15000000 + - guid: b37c44f04f3075045aef6be2c0506551 + ids: 73000000 + - guid: ea0771a0c87f746769a9ffd7286a0665 + ids: 73000000 + - guid: 5bb276fc3eccc674eab768c866424df0 + ids: 15000000 + - guid: a343a8560a860bf4188c8f63103f455a ids: 1c000000 - - guid: f66c4aa44c09b6a42a2b5b9f9334d824 + - guid: a400b0137c2b44b4f9379311124fe1a1 + ids: 15000000 + - guid: 248ba9b81ec62574eb5c6e70be1e1bdb ids: 1c000000 - - guid: a7ec9e7ad8b847b7ae4510af83c5d868 + - guid: d7b8dd640e42194458cd8292833fb86d ids: 1c000000 - - guid: b0f85f7da5042c0448a526d5ecacbfa9 - ids: 1c000000 - - guid: f87b5805002ec9649bcb1b96d8a16ba9 - ids: 1c000000 - - guid: 3028dc075ba8c584d9bc7d1e0255e038 + - guid: a9dcdb241a7784643b7fe4ea67ffa523 + ids: 15000000 + - guid: 1828b8a7039d30b4497ec4b19fd57158 + ids: 30000000 + - guid: 909ea7d136ae0c349a24f02cac1f5f71 + ids: 73000000 + - guid: 7f808d0c8608b954d8f20cb4132c3049 ids: 1c000000 + - guid: 5fd213d22763447c4aa106605e06184e + ids: 30000000 - guid: 991ae4d843392bc4e9ec4e7d8649d94e type: 2 m_fileInfoHash: 4192.cs @@ -132497,15 +132531,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: a9dcdb241a7784643b7fe4ea67ffa523 type: 5 - m_fileInfoHash: 13014.mat + m_fileInfoHash: 13013.mat m_assetbundle: m_addressable: m_atlas: - m_fileSize: 13014 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510505 - m_fileWriteTS: 1747672940 - m_cachefileWriteTS: 1747672940 + m_fileSize: 13013 + m_assetChangeTS: 1750957956 + m_fileInfoReadTS: 1750957999 + m_fileWriteTS: 1750957850 + m_cachefileWriteTS: 1750957850 refreshStamp: 2 UseGUIDsList: - guid: 4af258f019782954c9c32cd616f51c3b @@ -132516,7 +132550,7 @@ MonoBehaviour: ids: 1c000000 - guid: ffb18e7c2ba53c84d850a83811f543ea ids: 1c000000 - - guid: 0ddf03354b506e5458476d57ac5992d2 + - guid: a343a8560a860bf4188c8f63103f455a ids: 1c000000 - guid: d0353a89b1f911e48b9e16bdc9f2e058 ids: 73000000 @@ -132899,19 +132933,21 @@ MonoBehaviour: UseGUIDsList: [] - guid: b9b2ac6545519d949a97a5ac20df2a2c type: 5 - m_fileInfoHash: 6199.mat + m_fileInfoHash: 6273.mat m_assetbundle: m_addressable: m_atlas: - m_fileSize: 6199 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510505 - m_fileWriteTS: 1747672991 - m_cachefileWriteTS: 1747672991 + m_fileSize: 6273 + m_assetChangeTS: 1750957956 + m_fileInfoReadTS: 1750957999 + m_fileWriteTS: 1750957850 + m_cachefileWriteTS: 1750957850 refreshStamp: 2 UseGUIDsList: - guid: 4af258f019782954c9c32cd616f51c3b ids: 30000000 + - guid: a343a8560a860bf4188c8f63103f455a + ids: 1c000000 - guid: d0353a89b1f911e48b9e16bdc9f2e058 ids: 73000000 - guid: b9c2a6302985d3846b7b9f6fd9e2da9a @@ -136727,15 +136763,15 @@ MonoBehaviour: ids: 00000000 - guid: f9ccff815b775ec48abb8e62577257f8 type: 2 - m_fileInfoHash: 8948.cs + m_fileInfoHash: 8844.cs m_assetbundle: m_addressable: m_atlas: - m_fileSize: 8948 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510504 - m_fileWriteTS: 1749367808 - m_cachefileWriteTS: 1749367808 + m_fileSize: 8844 + m_assetChangeTS: 1750597263 + m_fileInfoReadTS: 1750597270 + m_fileWriteTS: 1750597147 + m_cachefileWriteTS: 1750597147 refreshStamp: 2 UseGUIDsList: [] - guid: f90d5904d51044550a745b44164b01a6 @@ -143495,15 +143531,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: 7ab6cd8f9a2e77c49a158e16014f9cec type: 9 - m_fileInfoHash: 1981059.json + m_fileInfoHash: 1947546.json m_assetbundle: m_addressable: m_atlas: - m_fileSize: 1981059 - m_assetChangeTS: 1750572268 - m_fileInfoReadTS: 1750572286 - m_fileWriteTS: 1750572185 - m_cachefileWriteTS: 1750572185 + m_fileSize: 1947546 + m_assetChangeTS: 1750969426 + m_fileInfoReadTS: 1750969447 + m_fileWriteTS: 1750969133 + m_cachefileWriteTS: 1750969133 refreshStamp: 2 UseGUIDsList: [] - guid: 7af6ac3e6b51b8d4aab04adc85b8de2f @@ -153043,19 +153079,21 @@ MonoBehaviour: UseGUIDsList: [] - guid: 2bb7915e218d4874f98e5f5201e984de type: 5 - m_fileInfoHash: 7065.mat + m_fileInfoHash: 7105.mat m_assetbundle: m_addressable: m_atlas: - m_fileSize: 7065 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510503 - m_fileWriteTS: 1746198131 - m_cachefileWriteTS: 1746198131 + m_fileSize: 7105 + m_assetChangeTS: 1750963922 + m_fileInfoReadTS: 1750964416 + m_fileWriteTS: 1750963922 + m_cachefileWriteTS: 1750963922 refreshStamp: 2 UseGUIDsList: - guid: 44e8d6dab1446644688189717537509a ids: 30000000 + - guid: 307f43f0816d99a49acef69a5b12617d + ids: 1c000000 - guid: d0353a89b1f911e48b9e16bdc9f2e058 ids: 73000000 - guid: 2bc7ed6d197f00c40a61689493c13bc3 @@ -156574,10 +156612,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 12628 - m_assetChangeTS: 1750518294 - m_fileInfoReadTS: 1750518321 - m_fileWriteTS: 1750518293 - m_cachefileWriteTS: 1750518293 + m_assetChangeTS: 1750597263 + m_fileInfoReadTS: 1750597270 + m_fileWriteTS: 1750597147 + m_cachefileWriteTS: 1750597147 refreshStamp: 2 UseGUIDsList: [] - guid: 6b072012b6a4e46799f0eb93c989ce51 @@ -157642,10 +157680,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 3649 - m_assetChangeTS: 1750516443 - m_fileInfoReadTS: 1750516724 - m_fileWriteTS: 1750516443 - m_cachefileWriteTS: 1750516443 + m_assetChangeTS: 1751011843 + m_fileInfoReadTS: 1751011844 + m_fileWriteTS: 1751011843 + m_cachefileWriteTS: 1751011843 refreshStamp: 2 UseGUIDsList: - guid: bf2edee5c58d82540a51f03df9d42094 @@ -158688,10 +158726,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 240 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510502 - m_fileWriteTS: 1748280881 - m_cachefileWriteTS: 1748280881 + m_assetChangeTS: 1750675671 + m_fileInfoReadTS: 1750675681 + m_fileWriteTS: 1750602947 + m_cachefileWriteTS: 1750602947 refreshStamp: 2 UseGUIDsList: [] - guid: 9b821aa41cbf734458af19d8c6507e92 @@ -159354,15 +159392,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: 9bfe18cabd8814ad0b27f5969180c1d2 type: 2 - m_fileInfoHash: 2767.cs + m_fileInfoHash: 2988.cs m_assetbundle: m_addressable: m_atlas: - m_fileSize: 2767 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510502 - m_fileWriteTS: 1748665780 - m_cachefileWriteTS: 1748665780 + m_fileSize: 2988 + m_assetChangeTS: 1750943674 + m_fileInfoReadTS: 1750943682 + m_fileWriteTS: 1750943597 + m_cachefileWriteTS: 1750943597 refreshStamp: 2 UseGUIDsList: [] - guid: 9b3f77b5965944b8ba5c1beefa1eb533 @@ -164555,15 +164593,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: 0c8472dfe9f25a74783ba02fe34a33f0 type: 9 - m_fileInfoHash: 40832.bytes + m_fileInfoHash: 87136.bytes m_assetbundle: m_addressable: m_atlas: - m_fileSize: 40832 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510502 - m_fileWriteTS: 1748280881 - m_cachefileWriteTS: 1748280881 + m_fileSize: 87136 + m_assetChangeTS: 1750675671 + m_fileInfoReadTS: 1750675681 + m_fileWriteTS: 1750602947 + m_cachefileWriteTS: 1750602947 refreshStamp: 2 UseGUIDsList: [] - guid: 0c840ddd1fdb040759e04bfab84c6cab @@ -169543,10 +169581,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 1933 - m_assetChangeTS: 1750517418 - m_fileInfoReadTS: 1750517447 - m_fileWriteTS: 1750517370 - m_cachefileWriteTS: 1750517370 + m_assetChangeTS: 1750597263 + m_fileInfoReadTS: 1750597270 + m_fileWriteTS: 1750597147 + m_cachefileWriteTS: 1750597147 refreshStamp: 2 UseGUIDsList: [] - guid: 6c52483422841154a88cf13e132c0252 @@ -172334,15 +172372,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: 9c6906848c3ff094bb7de22ec40de351 type: 9 - m_fileInfoHash: 43250952 + m_fileInfoHash: 42648812 m_assetbundle: m_addressable: m_atlas: - m_fileSize: 43250952 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510494 - m_fileWriteTS: 1748079479 - m_cachefileWriteTS: 1748079479 + m_fileSize: 42648812 + m_assetChangeTS: 1751005870 + m_fileInfoReadTS: 1751005880 + m_fileWriteTS: 1750971581 + m_cachefileWriteTS: 1750971581 refreshStamp: 2 UseGUIDsList: [] - guid: 9c99ec9330979f94aa6e33f0bec7752f @@ -179113,15 +179151,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: 1d40f46869fc84408ab4870b70e789ef type: 2 - m_fileInfoHash: 5767.cs + m_fileInfoHash: 5855.cs m_assetbundle: m_addressable: m_atlas: - m_fileSize: 5767 - m_assetChangeTS: 1750510942 - m_fileInfoReadTS: 1750510953 - m_fileWriteTS: 1750510939 - m_cachefileWriteTS: 1750510939 + m_fileSize: 5855 + m_assetChangeTS: 1751014316 + m_fileInfoReadTS: 1751014325 + m_fileWriteTS: 1751014313 + m_cachefileWriteTS: 1751014313 refreshStamp: 2 UseGUIDsList: [] - guid: 1d50f0545bfd1304eace331e06cb2cc2 @@ -180632,15 +180670,15 @@ MonoBehaviour: ids: c7e6ffff - guid: 3d8156b4159c175408f8af5a365ea332 type: 5 - m_fileInfoHash: 13009.mat + m_fileInfoHash: 13015.mat m_assetbundle: m_addressable: m_atlas: - m_fileSize: 13009 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510493 - m_fileWriteTS: 1747761315 - m_cachefileWriteTS: 1747761315 + m_fileSize: 13015 + m_assetChangeTS: 1750957956 + m_fileInfoReadTS: 1750957999 + m_fileWriteTS: 1750957850 + m_cachefileWriteTS: 1750957850 refreshStamp: 2 UseGUIDsList: - guid: 4af258f019782954c9c32cd616f51c3b @@ -180651,7 +180689,7 @@ MonoBehaviour: ids: 1c000000 - guid: ffb18e7c2ba53c84d850a83811f543ea ids: 1c000000 - - guid: 0ddf03354b506e5458476d57ac5992d2 + - guid: a343a8560a860bf4188c8f63103f455a ids: 1c000000 - guid: d0353a89b1f911e48b9e16bdc9f2e058 ids: 73000000 @@ -189295,10 +189333,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 3828 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510492 - m_fileWriteTS: 1747728592 - m_cachefileWriteTS: 1747728592 + m_assetChangeTS: 1751005870 + m_fileInfoReadTS: 1751005880 + m_fileWriteTS: 1750971594 + m_cachefileWriteTS: 1750971594 refreshStamp: 2 UseGUIDsList: [] - guid: ddf5311ad5957f342855bf0dd4fa6a6b @@ -190490,10 +190528,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 320 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510492 - m_fileWriteTS: 1748280881 - m_cachefileWriteTS: 1748280881 + m_assetChangeTS: 1750675671 + m_fileInfoReadTS: 1750675681 + m_fileWriteTS: 1750602947 + m_cachefileWriteTS: 1750602947 refreshStamp: 2 UseGUIDsList: [] - guid: ed7cb8f9a27664e48896c904189f0e2c @@ -192883,15 +192921,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: 1eef181acaca89841a32060c68923043 type: 5 - m_fileInfoHash: 19314.prefab + m_fileInfoHash: 19284.prefab m_assetbundle: m_addressable: m_atlas: - m_fileSize: 19314 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510486 - m_fileWriteTS: 1749367807 - m_cachefileWriteTS: 1749367807 + m_fileSize: 19284 + m_assetChangeTS: 1750597263 + m_fileInfoReadTS: 1750597270 + m_fileWriteTS: 1750597147 + m_cachefileWriteTS: 1750597147 refreshStamp: 2 UseGUIDsList: - guid: fe87c0e1cc204ed48ad3b37840f39efc @@ -206469,10 +206507,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 599838 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510485 - m_fileWriteTS: 1747760117 - m_cachefileWriteTS: 1747760117 + m_assetChangeTS: 1750941400 + m_fileInfoReadTS: 1750941414 + m_fileWriteTS: 1750941399 + m_cachefileWriteTS: 1750941399 refreshStamp: 2 UseGUIDsList: - guid: ccad1289735ff2846acdd1497362d45b @@ -211736,15 +211774,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: 9f6535d6fb941094c982a0ec14e4b3cd type: 9 - m_fileInfoHash: 1106 + m_fileInfoHash: 1105 m_assetbundle: m_addressable: m_atlas: - m_fileSize: 1106 - m_assetChangeTS: 0 - m_fileInfoReadTS: 1750510484 - m_fileWriteTS: 1748079479 - m_cachefileWriteTS: 1748079479 + m_fileSize: 1105 + m_assetChangeTS: 1751005870 + m_fileInfoReadTS: 1751005880 + m_fileWriteTS: 1750971594 + m_cachefileWriteTS: 1750971594 refreshStamp: 2 UseGUIDsList: [] - guid: 9f959286f2d624a08b56b6d290871b33 @@ -217316,17 +217354,1377 @@ MonoBehaviour: UseGUIDsList: [] - guid: 0fcb60107ebf5574aa5fe168f6e3978e type: 9 - m_fileInfoHash: 1981059.json + m_fileInfoHash: 1947538.json m_assetbundle: m_addressable: m_atlas: - m_fileSize: 1981059 - m_assetChangeTS: 1750571029 - m_fileInfoReadTS: 1750571500 - m_fileWriteTS: 1750571019 - m_cachefileWriteTS: 1750571019 + m_fileSize: 1947538 + m_assetChangeTS: 1750952236 + m_fileInfoReadTS: 1750952245 + m_fileWriteTS: 1750952131 + m_cachefileWriteTS: 1750952131 refreshStamp: 2 UseGUIDsList: [] + - guid: a343a8560a860bf4188c8f63103f455a + type: 9 + m_fileInfoHash: 262913.png + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 262913 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1750941287 + m_fileWriteTS: 1750911579 + m_cachefileWriteTS: 1750911579 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 4f92c943bdc04094bb6f3ab3d6edda2e + type: 1 + m_fileInfoHash: + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 0 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1750941673 + m_fileWriteTS: 0 + m_cachefileWriteTS: 0 + refreshStamp: 2 + UseGUIDsList: [] + - guid: d54759aa63d2527499f0c933fdf37b78 + type: 9 + m_fileInfoHash: 33400.shader + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 33400 + m_assetChangeTS: 1750951265 + m_fileInfoReadTS: 1750951277 + m_fileWriteTS: 1750951265 + m_cachefileWriteTS: 1750951265 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 40caca121c246564eaba4b6de7329e20 + type: 5 + m_fileInfoHash: 3749.mat + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 3749 + m_assetChangeTS: 1750942777 + m_fileInfoReadTS: 1750942778 + m_fileWriteTS: 1750942777 + m_cachefileWriteTS: 1750942777 + refreshStamp: 2 + UseGUIDsList: + - guid: d54759aa63d2527499f0c933fdf37b78 + ids: 30000000 + - guid: d0353a89b1f911e48b9e16bdc9f2e058 + ids: 73000000 + - guid: f5775a9d8f75ec744939ba3702a7fe05 + type: 9 + m_fileInfoHash: 2097.png + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 2097 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1750942735 + m_fileWriteTS: 1750942734 + m_cachefileWriteTS: 1750942734 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 720c743be19718447a881adf4e2707ca + type: 5 + m_fileInfoHash: 3901.mat + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 3901 + m_assetChangeTS: 1750949461 + m_fileInfoReadTS: 1750949484 + m_fileWriteTS: 1750949461 + m_cachefileWriteTS: 1750949461 + refreshStamp: 2 + UseGUIDsList: + - guid: d54759aa63d2527499f0c933fdf37b78 + ids: 30000000 + - guid: d0353a89b1f911e48b9e16bdc9f2e058 + ids: 73000000 + - guid: c727da5a60404cd439460f09572a8085 + type: 2 + m_fileInfoHash: 5976.cs + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 5976 + m_assetChangeTS: 1750956489 + m_fileInfoReadTS: 1750956498 + m_fileWriteTS: 1750956487 + m_cachefileWriteTS: 1750956487 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 4dbc31cf60d8a0549a2be9b95e816376 + type: 2 + m_fileInfoHash: 910.cs + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 910 + m_assetChangeTS: 1750943782 + m_fileInfoReadTS: 1750943791 + m_fileWriteTS: 1750943780 + m_cachefileWriteTS: 1750943780 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 031554f259eac2848a3f78425c67e910 + type: 5 + m_fileInfoHash: 1461.asset + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 1461 + m_assetChangeTS: 1750948466 + m_fileInfoReadTS: 1750948482 + m_fileWriteTS: 1750948466 + m_cachefileWriteTS: 1750948466 + refreshStamp: 2 + UseGUIDsList: + - guid: 4dbc31cf60d8a0549a2be9b95e816376 + ids: 73000000 + - guid: 85c3e9578b45a414bb6507f90e48720a + ids: + - guid: 23f85613f70c46b41ba92e09bc14945c + type: 1 + m_fileInfoHash: + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 0 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1750943733 + m_fileWriteTS: 0 + m_cachefileWriteTS: 0 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 3f216541647c185428ca5581509954d8 + type: 5 + m_fileInfoHash: 2370.prefab + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 2370 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1750943737 + m_fileWriteTS: 1750943736 + m_cachefileWriteTS: 1750943736 + refreshStamp: 2 + UseGUIDsList: + - guid: 40caca121c246564eaba4b6de7329e20 + ids: 15000000 + - guid: f5775a9d8f75ec744939ba3702a7fe05 + ids: + - guid: 85c3e9578b45a414bb6507f90e48720a + type: 5 + m_fileInfoHash: 3283.prefab + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 3283 + m_assetChangeTS: 1750950034 + m_fileInfoReadTS: 1750950035 + m_fileWriteTS: 1750950034 + m_cachefileWriteTS: 1750950034 + refreshStamp: 2 + UseGUIDsList: + - guid: 720c743be19718447a881adf4e2707ca + ids: 15000000 + - guid: f5775a9d8f75ec744939ba3702a7fe05 + ids: + - guid: dbf777092e460894fb90cb1cb15af7ab + type: 5 + m_fileInfoHash: 5349.mat + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 5349 + m_assetChangeTS: 1750957205 + m_fileInfoReadTS: 1750957722 + m_fileWriteTS: 1750957205 + m_cachefileWriteTS: 1750957205 + refreshStamp: 2 + UseGUIDsList: + - guid: 44e8d6dab1446644688189717537509a + ids: 30000000 + - guid: fe0f51232d3c144e98a40dcef497dca2 + ids: 1c000000 + - guid: d0353a89b1f911e48b9e16bdc9f2e058 + ids: 73000000 + - guid: 59b0e215a2f6c6e4e8e05deb25f73f9a + type: 9 + m_fileInfoHash: 4090.png + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 4090 + m_assetChangeTS: 1750957751 + m_fileInfoReadTS: 1750957752 + m_fileWriteTS: 1750957751 + m_cachefileWriteTS: 1750957751 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 28a32e0ab87cfc54990d400eab7b5a31 + type: 9 + m_fileInfoHash: 4090.png + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 4090 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1750957999 + m_fileWriteTS: 1750957999 + m_cachefileWriteTS: 1750957999 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 8fc19f88577f644479f21ad83860d448 + type: 9 + m_fileInfoHash: 12332.tga + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 12332 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1750958071 + m_fileWriteTS: 1750958071 + m_cachefileWriteTS: 1750958071 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 1b188f566ed9d72469ee7616c62de84b + type: 9 + m_fileInfoHash: 2184.jpg + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 2184 + m_assetChangeTS: 1750958185 + m_fileInfoReadTS: 1750958292 + m_fileWriteTS: 1750958178 + m_cachefileWriteTS: 1750958178 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 307f43f0816d99a49acef69a5b12617d + type: 9 + m_fileInfoHash: 2458.png + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 2458 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1750958635 + m_fileWriteTS: 1750958635 + m_cachefileWriteTS: 1750958635 + refreshStamp: 2 + UseGUIDsList: [] + - guid: fb9c9eda58078b14688aa3ca7e93eb3b + type: 9 + m_fileInfoHash: 59309.shader + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 59309 + m_assetChangeTS: 1751013104 + m_fileInfoReadTS: 1751013120 + m_fileWriteTS: 1751013103 + m_cachefileWriteTS: 1751013103 + refreshStamp: 2 + UseGUIDsList: [] + - guid: f0cf39229422d1b428bf04e0bc828dc6 + type: 5 + m_fileInfoHash: 5617.mat + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 5617 + m_assetChangeTS: 1751014599 + m_fileInfoReadTS: 1751014600 + m_fileWriteTS: 1751014599 + m_cachefileWriteTS: 1751014599 + refreshStamp: 2 + UseGUIDsList: + - guid: d0353a89b1f911e48b9e16bdc9f2e058 + ids: 73000000 + - guid: 5fd213d22763447c4aa106605e06184e + ids: 30000000 + - guid: 7f808d0c8608b954d8f20cb4132c3049 + ids: 1c000000 + - guid: 5c436546a5352c649a6b820b7c47fc46 + type: 2 + m_fileInfoHash: 1055.cs + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 1055 + m_assetChangeTS: 1751006369 + m_fileInfoReadTS: 1751006378 + m_fileWriteTS: 1751006364 + m_cachefileWriteTS: 1751006364 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 1828b8a7039d30b4497ec4b19fd57158 + type: 9 + m_fileInfoHash: 137882.shader + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 137882 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751009413 + m_fileWriteTS: 1751009412 + m_cachefileWriteTS: 1751009412 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 4a53388d09164bb43971571879adc754 + type: 5 + m_fileInfoHash: 5004.mat + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 5004 + m_assetChangeTS: 1751009618 + m_fileInfoReadTS: 1751009625 + m_fileWriteTS: 1751009617 + m_cachefileWriteTS: 1751009617 + refreshStamp: 2 + UseGUIDsList: + - guid: d0353a89b1f911e48b9e16bdc9f2e058 + ids: 73000000 + - guid: 1828b8a7039d30b4497ec4b19fd57158 + ids: 30000000 + - guid: e5acafa73a8d7b942a843c7cf290a992 + ids: 1c000000 + - guid: f41bcf9b1f0eb6446907e2c52c9f2d39 + type: 2 + m_fileInfoHash: 1605.cs + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 1605 + m_assetChangeTS: 1751012138 + m_fileInfoReadTS: 1751012147 + m_fileWriteTS: 1751012132 + m_cachefileWriteTS: 1751012132 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 6d1fa92947bbef246a8a112b2a6b96c4 + type: 2 + m_fileInfoHash: 1662.cs + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 1662 + m_assetChangeTS: 1751012138 + m_fileInfoReadTS: 1751012147 + m_fileWriteTS: 1751012127 + m_cachefileWriteTS: 1751012127 + refreshStamp: 2 + UseGUIDsList: [] + - guid: b96c6f78e9ea0924b92677f2c4812124 + type: 1 + m_fileInfoHash: + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 0 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 0 + m_cachefileWriteTS: 0 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 4517deaf5f31a5848b6a58304d1f516f + type: 2 + m_fileInfoHash: 2860.cs + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 2860 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 59bee8aac470985756937703c2b5b942 + type: 1 + m_fileInfoHash: + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 0 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 0 + m_cachefileWriteTS: 0 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 317bb692129be184ebd7249bba265210 + type: 2 + m_fileInfoHash: 6965.cs + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 6965 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: af9e4a2cbc9cee94485138c3bc876c62 + type: 1 + m_fileInfoHash: + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 0 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 0 + m_cachefileWriteTS: 0 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 5fdc89efbf4a9bf4c9449cc01f16d08a + type: 1 + m_fileInfoHash: + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 0 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 0 + m_cachefileWriteTS: 0 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 39ccfaa9af9f4dc84a876b1b1c3ae8bb + type: 9 + m_fileInfoHash: 368.json + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 368 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 9177edf81a5b2354490ec4d66c4c069d + type: 2 + m_fileInfoHash: 1405.cs + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 1405 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: e95a8f1b5d23f4141b5121f98f90f10a + type: 1 + m_fileInfoHash: + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 0 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 0 + m_cachefileWriteTS: 0 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 944a1679494774748b2936893c18c9ce + type: 1 + m_fileInfoHash: + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 0 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 0 + m_cachefileWriteTS: 0 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 2688615dc3cd4ed4cbca4cd0135d8e8a + type: 9 + m_fileInfoHash: 3165.hlsl + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 3165 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 781e80efab11a1d438f7c4d37603bdff + type: 2 + m_fileInfoHash: 16236.cs + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 16236 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 8495541fcd41b0c40b5b6e6e7a7639d1 + type: 9 + m_fileInfoHash: 491.asmdef + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 491 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: b92baefe22663afa5ad0ab303b3dcc20 + type: 9 + m_fileInfoHash: 1290.md + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 1290 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 45aa6b78bfd3f814b8fbc72aeba1affd + type: 9 + m_fileInfoHash: 170.json + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 170 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: c3a1931bdb3088e4ebf4755df90c90e9 + type: 5 + m_fileInfoHash: 1861.asset + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 1861 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: + - guid: b7f59e54f2bfd184b9dd451a678d089b + ids: 73000000 + - guid: 77b21af505211947eb730e678820eb8b + type: 1 + m_fileInfoHash: + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 0 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 0 + m_cachefileWriteTS: 0 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 443fb5ca2e0ec42bc8a96eb43c8470fe + type: 9 + m_fileInfoHash: 1059.hlsl + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 1059 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: fa89a0fdb680e154f89c18f1a7fea2c6 + type: 1 + m_fileInfoHash: + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 0 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 0 + m_cachefileWriteTS: 0 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 1acab38a69d4e0ae80e8b91c5a7df6a2 + type: 1 + m_fileInfoHash: + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 0 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 0 + m_cachefileWriteTS: 0 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 8ec48974b9689234f9a4a7c1927e2a7b + type: 9 + m_fileInfoHash: 2041.hlsl + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 2041 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 3150dab783854cd6b791d5db3be4a966 + type: 9 + m_fileInfoHash: 3364.shader + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 3364 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 126dad763ce350945945655d5c062248 + type: 9 + m_fileInfoHash: 2571.shader + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 2571 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 12fb0c569d0951c40a3f4013cd8758b5 + type: 9 + m_fileInfoHash: 735.asmdef + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 735 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 4918b275ae4dce948a5cedc6f3612066 + type: 9 + m_fileInfoHash: 9283.hlsl + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 9283 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: d7093501998f1b24483fa6c8eddcf8fb + type: 5 + m_fileInfoHash: 1532.asset + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 1532 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: + - guid: 9177edf81a5b2354490ec4d66c4c069d + ids: 73000000 + - guid: 8f9e4d586616f13449cfeb86c5f704c2 + type: 9 + m_fileInfoHash: 412.asmdef + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 412 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: aec459410f5254c4bb4d42e7ec8b4b5e + type: 2 + m_fileInfoHash: 3091.cs + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 3091 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 7bf2aa095c38c4972ba5c008ae40a3f3 + type: 2 + m_fileInfoHash: 2408.cs + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 2408 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: fe30e455c04f33342bb3d1c227855682 + type: 2 + m_fileInfoHash: 21001.cs + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 21001 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: b9544bec10c84ecca289bece4a630d65 + type: 2 + m_fileInfoHash: 9915.cs + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 9915 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: fd758a702a9040fcb8614b232817cff9 + type: 1 + m_fileInfoHash: + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 0 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 0 + m_cachefileWriteTS: 0 + refreshStamp: 2 + UseGUIDsList: [] + - guid: be6a95b97f4bc3846bdada66138f6da1 + type: 2 + m_fileInfoHash: 1266.cs + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 1266 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 9187c1d488f62d9458d6ce67858a43b3 + type: 9 + m_fileInfoHash: 28839.hlsl + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 28839 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 0b3052f0c1288a045a0be3d63f109623 + type: 1 + m_fileInfoHash: + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 0 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 0 + m_cachefileWriteTS: 0 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 2b1bb9b67aabb824998a7d2e026d2606 + type: 9 + m_fileInfoHash: 2438.hlsl + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 2438 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 03da5256bb8bf0b4496b10ee6b449be4 + type: 9 + m_fileInfoHash: 35786.hlsl + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 35786 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 5e03fab8dc9c256468083d9bc82a73c3 + type: 9 + m_fileInfoHash: 536.asmdef + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 536 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 48379e0a1548d0744956d75379b0c724 + type: 9 + m_fileInfoHash: 159.json + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 159 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: e73bff430617bbc44ae5b87fb0fa9abf + type: 1 + m_fileInfoHash: + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 0 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 0 + m_cachefileWriteTS: 0 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 4684518ac782305428f8c0434c85d1c0 + type: 1 + m_fileInfoHash: + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 0 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 0 + m_cachefileWriteTS: 0 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 01d5272ee28d1384d9f555c579592a6b + type: 2 + m_fileInfoHash: 123537.cs + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 123537 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 254f9d1eac8c3f3885df59c8d4aef811 + type: 1 + m_fileInfoHash: + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 0 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 0 + m_cachefileWriteTS: 0 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 72e9a7523c1a5994c8fb317e7a9514e0 + type: 1 + m_fileInfoHash: + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 0 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 0 + m_cachefileWriteTS: 0 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 9279ba81938dc1548b9e9d8297bdcd57 + type: 2 + m_fileInfoHash: 28804.cs + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 28804 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 7f808d0c8608b954d8f20cb4132c3049 + type: 9 + m_fileInfoHash: 19230.png + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 19230 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 9f34986983f558c40a7e30a353dc3c34 + type: 9 + m_fileInfoHash: 9882.hlsl + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 9882 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 7184a95c20fc1a441a8815af4c795ccd + type: 9 + m_fileInfoHash: 28169.shader + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 28169 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 1b8d5ffb7acb5d647b3ad813acc372da + type: 9 + m_fileInfoHash: 1067 + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 1067 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: b13c8a972207b57458dd444106acbf3a + type: 2 + m_fileInfoHash: 24648.cs + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 24648 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 0e3b0e6ce60c7a34094f8f9822c0b7f2 + type: 9 + m_fileInfoHash: 409.asmdef + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 409 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: add0a5ef687222e46a7319724739db61 + type: 9 + m_fileInfoHash: 63.md + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 63 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 11345d4fc578e4c15a13b9e5a61107df + type: 9 + m_fileInfoHash: 36.md + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 36 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 3e92fe624a4f13d4eadc7753e236006a + type: 9 + m_fileInfoHash: 7921.shader + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 7921 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 1b530af6d4d97eb4c8f3725d4cd3e9b8 + type: 9 + m_fileInfoHash: 3936.shader + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 3936 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 909ea7d136ae0c349a24f02cac1f5f71 + type: 2 + m_fileInfoHash: 21695.cs + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 21695 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: a1f23b61b189bd949adfd0f7a353734f + type: 9 + m_fileInfoHash: 876.asmdef + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 876 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 5fd213d22763447c4aa106605e06184e + type: 9 + m_fileInfoHash: 17701.shader + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 17701 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: ed187d8c0d9f5b14aa156ff45e7405c7 + type: 2 + m_fileInfoHash: 22168.cs + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 22168 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 45f557806bb54c4dbeaec7a2ded5be83 + type: 2 + m_fileInfoHash: 1629.cs + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 1629 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 66b8605d5d2f14d408b0f4aee5f9d25a + type: 9 + m_fileInfoHash: 1949.hlsl + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 1949 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 8d59b331ef0707e49a98c91244bd0c1a + type: 9 + m_fileInfoHash: 813.hlsl + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 813 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: d5a1f9350d8fc2c46a372955ef0e73b5 + type: 2 + m_fileInfoHash: 20653.cs + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 20653 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 58ec7ff2f9b58f5459946ac86028eacf + type: 2 + m_fileInfoHash: 2439.cs + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 2439 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 3bcf591e67bd470e9375d72c63838643 + type: 2 + m_fileInfoHash: 3274.cs + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 3274 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 4f0e3118134388949838b53cc48e9c89 + type: 1 + m_fileInfoHash: + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 0 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 0 + m_cachefileWriteTS: 0 + refreshStamp: 2 + UseGUIDsList: [] + - guid: e9e4b9cfaabda4f4296d2f1a28bc3501 + type: 9 + m_fileInfoHash: 167.json + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 167 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 97647516635f92f43a6cd4807c3899d8 + type: 1 + m_fileInfoHash: + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 0 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 0 + m_cachefileWriteTS: 0 + refreshStamp: 2 + UseGUIDsList: [] + - guid: ff8358dc3f3531d4c92a43a49d07f36c + type: 2 + m_fileInfoHash: 7413.cs + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 7413 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: a7d6268a1ca7d824d8da2adf4cb8f74a + type: 2 + m_fileInfoHash: 5557.cs + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 5557 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751014234 + m_fileWriteTS: 1751014181 + m_cachefileWriteTS: 1751014181 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 3d9a0252a1938b84f9ad7726e1244143 + type: 9 + m_fileInfoHash: 10239.mesh + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 10239 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751044720 + m_fileWriteTS: 1751044378 + m_cachefileWriteTS: 1751044378 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 8f82e4a8d3d9d084f80e387419b28530 + type: 9 + m_fileInfoHash: 196652.tga + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 196652 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751044720 + m_fileWriteTS: 1751042739 + m_cachefileWriteTS: 1751042739 + refreshStamp: 2 + UseGUIDsList: [] + - guid: 235f9435448da714a924218ed6ead5ea + type: 5 + m_fileInfoHash: 12979.mat + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 12979 + m_assetChangeTS: 1751046798 + m_fileInfoReadTS: 1751092989 + m_fileWriteTS: 1751046798 + m_cachefileWriteTS: 1751046798 + refreshStamp: 2 + UseGUIDsList: + - guid: 4af258f019782954c9c32cd616f51c3b + ids: 30000000 + - guid: 8f82e4a8d3d9d084f80e387419b28530 + ids: 1c000000 + - guid: d7b8dd640e42194458cd8292833fb86d + ids: 1c000000 + - guid: d0353a89b1f911e48b9e16bdc9f2e058 + ids: 73000000 + - guid: 7e40c55f82e37de44a0c3dcb80eb1da5 + type: 5 + m_fileInfoHash: 356699.prefab + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 356699 + m_assetChangeTS: 1751046779 + m_fileInfoReadTS: 1751046798 + m_fileWriteTS: 1751046779 + m_cachefileWriteTS: 1751046779 + refreshStamp: 2 + UseGUIDsList: + - guid: 235f9435448da714a924218ed6ead5ea + ids: 15000000 + - guid: 3b047a3960820144e936b937b1a76722 + ids: + - guid: f85ee2ceb2730e646adac4ef10d0dd62 + ids: + - guid: 3b047a3960820144e936b937b1a76722 + type: 7 + m_fileInfoHash: 13228.fbx + m_assetbundle: + m_addressable: + m_atlas: + m_fileSize: 13228 + m_assetChangeTS: 0 + m_fileInfoReadTS: 1751046754 + m_fileWriteTS: 1751046754 + m_cachefileWriteTS: 1751046754 + refreshStamp: 2 + UseGUIDsList: + - guid: 3b047a3960820144e936b937b1a76722 + ids: + - guid: 31321ba15b8f8eb4c954353edc038b1d + ids: setting: alternateColor: 1 excludeTypes: 0 diff --git a/Assets/Plugins/Easy Save 3/Resources/ES3/ES3GlobalReferences.asset b/Assets/Plugins/Easy Save 3/Resources/ES3/ES3GlobalReferences.asset index 5e9aaae9..87a6015c 100644 --- a/Assets/Plugins/Easy Save 3/Resources/ES3/ES3GlobalReferences.asset +++ b/Assets/Plugins/Easy Save 3/Resources/ES3/ES3GlobalReferences.asset @@ -35,8 +35,6 @@ MonoBehaviour: - {fileID: 6147830641589726352, guid: c6a552686f72142bb8708e162c31d3ff, type: 3} - {fileID: 21300000, guid: 80694812942b91b42bc4aad99071ba7e, type: 3} - {fileID: 2800000, guid: 80694812942b91b42bc4aad99071ba7e, type: 3} - - {fileID: 2800000, guid: 0b9510d2790829140953392aae2b6679, type: 3} - - {fileID: 21300000, guid: 0b9510d2790829140953392aae2b6679, type: 3} - {fileID: 7671065637303904002, guid: f4b4e87edddc74e4e8d6b9d4cc0e31fc, type: 3} - {fileID: 7768496905287876572, guid: f4b4e87edddc74e4e8d6b9d4cc0e31fc, type: 3} - {fileID: 2890788359140629188, guid: f4b4e87edddc74e4e8d6b9d4cc0e31fc, type: 3} @@ -484,13 +482,8 @@ MonoBehaviour: - {fileID: 21300000, guid: a29898adbcfeacb438ad390d9e925afe, type: 3} - {fileID: 2800000, guid: 87529e0fd28c3774fa086315a42b1860, type: 3} - {fileID: 21300000, guid: 87529e0fd28c3774fa086315a42b1860, type: 3} - - {fileID: 2800000, guid: ea579184be3210e458d3beef7ebe7fe0, type: 3} - - {fileID: 21300000, guid: ea579184be3210e458d3beef7ebe7fe0, type: 3} - {fileID: 21300000, guid: 94f43f82d46dcdb4db47e75f6c65be01, type: 3} - {fileID: 2800000, guid: 94f43f82d46dcdb4db47e75f6c65be01, type: 3} - - {fileID: 2800000, guid: 3b9e073ee03f6614898a81df8af9c7ef, type: 3} - - {fileID: 21300000, guid: 3b9e073ee03f6614898a81df8af9c7ef, type: 3} - - {fileID: 21300036, guid: bad6c0f0bf6c3aa4690d400a757fa284, type: 3} - {fileID: 21300000, guid: 852af70e3243e31408aa8260c1ef13fb, type: 3} - {fileID: 2800000, guid: 852af70e3243e31408aa8260c1ef13fb, type: 3} - {fileID: 21300000, guid: 1e64f8ba631ae514e9a68eaf3620f9a9, type: 3} @@ -499,19 +492,6 @@ MonoBehaviour: - {fileID: 2800000, guid: 98c2954aeef16da43a5acdda694615b0, type: 3} - {fileID: 21300000, guid: a9fd44c7daf773c489b86519d261b198, type: 3} - {fileID: 2800000, guid: a9fd44c7daf773c489b86519d261b198, type: 3} - - {fileID: 21300000, guid: eb5037930d3bbe143a8a570722950901, type: 3} - - {fileID: 2800000, guid: eb5037930d3bbe143a8a570722950901, type: 3} - - {fileID: -1592531358028221409, guid: 81e4191bebbffee49a87679d87cdc04e, type: 3} - - {fileID: 2800000, guid: 7fae6cb1e0ec9ab4dabf73686e5f0aa1, type: 3} - - {fileID: 21300000, guid: 7fae6cb1e0ec9ab4dabf73686e5f0aa1, type: 3} - - {fileID: 21300000, guid: b71d66e1b0c0c474fb9f1cf92d3e9e9e, type: 3} - - {fileID: 2800000, guid: b71d66e1b0c0c474fb9f1cf92d3e9e9e, type: 3} - - {fileID: 2800000, guid: 544caa0353497f24faed28c569d18fe4, type: 3} - - {fileID: 21300000, guid: 544caa0353497f24faed28c569d18fe4, type: 3} - - {fileID: 21300000, guid: 4feff79cdc04e1145884512f088bdfde, type: 3} - - {fileID: 2800000, guid: 4feff79cdc04e1145884512f088bdfde, type: 3} - - {fileID: 1396070358, guid: 6582f34ddd5f686408c019550cd94c9d, type: 3} - - {fileID: 2800000, guid: 6582f34ddd5f686408c019550cd94c9d, type: 3} - {fileID: 2800000, guid: 2e7855b3fe5072d4e89ef64d4e988b0a, type: 3} - {fileID: 21300000, guid: 2e7855b3fe5072d4e89ef64d4e988b0a, type: 3} - {fileID: 21300010, guid: 358b5d9f23bc9413e87c9948acc67ee1, type: 3} @@ -2481,21 +2461,10 @@ MonoBehaviour: - {fileID: 2800000, guid: c37b1ff43a24d4346b2d62775179944b, type: 3} - {fileID: 21300000, guid: 44a054df1702e39458b7072b08d0f212, type: 3} - {fileID: 2800000, guid: 44a054df1702e39458b7072b08d0f212, type: 3} - - {fileID: 21300014, guid: bad6c0f0bf6c3aa4690d400a757fa284, type: 3} - {fileID: 21300000, guid: e07717fc47a510742ac0b11da205b050, type: 3} - {fileID: 2800000, guid: e07717fc47a510742ac0b11da205b050, type: 3} - {fileID: 21300000, guid: e3eb7e0ce65fdb54daef8ada37f7e761, type: 3} - {fileID: 2800000, guid: e3eb7e0ce65fdb54daef8ada37f7e761, type: 3} - - {fileID: 2800000, guid: 6ff9ef53522706d41aea024924a1c692, type: 3} - - {fileID: 21300000, guid: 6ff9ef53522706d41aea024924a1c692, type: 3} - - {fileID: -8176256291387964677, guid: 8a1f96c93a153e34a98b5f6dd6bbfebd, type: 3} - - {fileID: 2800000, guid: 8a1f96c93a153e34a98b5f6dd6bbfebd, type: 3} - - {fileID: 4401256072393347978, guid: 81e4191bebbffee49a87679d87cdc04e, type: 3} - - {fileID: 1633796411, guid: 6582f34ddd5f686408c019550cd94c9d, type: 3} - - {fileID: 2800000, guid: cbf580e20161a1648a8eaf3a407611f6, type: 3} - - {fileID: 21300000, guid: cbf580e20161a1648a8eaf3a407611f6, type: 3} - - {fileID: 21300000, guid: ae95cb7fcab73574c9bc98f66c7aeca5, type: 3} - - {fileID: 2800000, guid: ae95cb7fcab73574c9bc98f66c7aeca5, type: 3} - {fileID: 21300000, guid: 370b6c06925dc4b4cb99bc543ad8be1f, type: 3} - {fileID: 2800000, guid: 370b6c06925dc4b4cb99bc543ad8be1f, type: 3} - {fileID: 2800000, guid: 94b968db3033ee14288967574b0846a3, type: 3} @@ -2545,7 +2514,6 @@ MonoBehaviour: - {fileID: 2505559936379693214, guid: 1f82daa2ab22a0943a51de0203fee565, type: 3} - {fileID: 5030288017655597913, guid: c96f0574cd82c1848a8fc3b965d8d59b, type: 3} - {fileID: 6794014747502131782, guid: 1f82daa2ab22a0943a51de0203fee565, type: 3} - - {fileID: 2800000, guid: f20112bdeec2e8d4d9f80e8390e37263, type: 3} - {fileID: 6794014747502131782, guid: 34f35091439de454483d8f703662fe18, type: 3} - {fileID: 2505559936379693214, guid: 34f35091439de454483d8f703662fe18, type: 3} - {fileID: 5030288017655597913, guid: 34f35091439de454483d8f703662fe18, type: 3} @@ -2723,16 +2691,88 @@ MonoBehaviour: - {fileID: 95561077087833320, guid: aa9644af7cd7f4a939983928c8fa106a, type: 3} - {fileID: 2561374372163501939, guid: aa9644af7cd7f4a939983928c8fa106a, type: 3} - {fileID: 1701167924756487343, guid: aa9644af7cd7f4a939983928c8fa106a, type: 3} + - {fileID: 11400000, guid: 031554f259eac2848a3f78425c67e910, type: 2} + - {fileID: 5988426910569796711, guid: 85c3e9578b45a414bb6507f90e48720a, type: 3} + - {fileID: 3702079360535131164, guid: 3f216541647c185428ca5581509954d8, type: 3} + - {fileID: 4800000, guid: d54759aa63d2527499f0c933fdf37b78, type: 3} + - {fileID: 2100000, guid: 720c743be19718447a881adf4e2707ca, type: 2} + - {fileID: 7482667652216324306, guid: f5775a9d8f75ec744939ba3702a7fe05, type: 3} + - {fileID: 8064170251032554610, guid: 3f216541647c185428ca5581509954d8, type: 3} + - {fileID: 4428011038987230051, guid: 3f216541647c185428ca5581509954d8, type: 3} + - {fileID: 2899945975172320258, guid: 85c3e9578b45a414bb6507f90e48720a, type: 3} + - {fileID: 2100000, guid: 40caca121c246564eaba4b6de7329e20, type: 2} + - {fileID: 2800000, guid: f5775a9d8f75ec744939ba3702a7fe05, type: 3} + - {fileID: 11500000, guid: 4dbc31cf60d8a0549a2be9b95e816376, type: 3} + - {fileID: 5720444309352870257, guid: 85c3e9578b45a414bb6507f90e48720a, type: 3} + - {fileID: 8575963574254877811, guid: 85c3e9578b45a414bb6507f90e48720a, type: 3} + - {fileID: 7626679668481135829, guid: 85c3e9578b45a414bb6507f90e48720a, type: 3} + - {fileID: 2100000, guid: f0cf39229422d1b428bf04e0bc828dc6, type: 2} + - {fileID: 4800000, guid: fb9c9eda58078b14688aa3ca7e93eb3b, type: 3} + - {fileID: 2800000, guid: 3b7ed371b1045a7468c77d301d66f1b9, type: 3} + - {fileID: 2800000, guid: 505bbb3b422a41f44b0bbea401e13fdc, type: 3} + - {fileID: 2100000, guid: ccad1289735ff2846acdd1497362d45b, type: 2} + - {fileID: 3918812215425595527, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 3079336707146369278, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 2800000, guid: ffb18e7c2ba53c84d850a83811f543ea, type: 3} + - {fileID: 4832900275935109613, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 6461584531587415413, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 5922952087749752714, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 2784291562309175680, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 8253441719605867906, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 8432502363001158554, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 1702456025656505772, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 2100000, guid: 578d8aa95b57c2448b22029e590b51c9, type: 2} + - {fileID: 1948359583767802474, guid: 1b4d77614bc32d64393fd80c3d80f7db, type: 3} + - {fileID: 2100000, guid: 24202603b497fb941af8d6bed0a66c12, type: 2} + - {fileID: 7182650156232976990, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 5431012294727193458, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 11500000, guid: b37c44f04f3075045aef6be2c0506551, type: 3} + - {fileID: 6760736669114547885, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 8859053657663366676, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 11500000, guid: ea0771a0c87f746769a9ffd7286a0665, type: 3} + - {fileID: 5131198242182004625, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 2018239485658491446, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 8164676518475223736, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 6428257694934577630, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 6696432753679549629, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 2349867852438551661, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 2228000400836702485, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 3411072126441206061, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 413584224594807826, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 6279482037342195367, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 1532952502113335888, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 1149845662485922453, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 1858639822223451112, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 2909987453499239890, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 74257530987263401, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 2100000, guid: 5bb276fc3eccc674eab768c866424df0, type: 2} + - {fileID: 2800000, guid: a343a8560a860bf4188c8f63103f455a, type: 3} + - {fileID: 2100000, guid: a400b0137c2b44b4f9379311124fe1a1, type: 2} + - {fileID: 2800000, guid: 248ba9b81ec62574eb5c6e70be1e1bdb, type: 3} + - {fileID: 3203352819390645997, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 2800000, guid: d7b8dd640e42194458cd8292833fb86d, type: 3} + - {fileID: 2828557749403774688, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 2100000, guid: a9dcdb241a7784643b7fe4ea67ffa523, type: 2} + - {fileID: 2655143723270843780, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 7452429476223591256, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 1230482840604333981, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 4800000, guid: 1828b8a7039d30b4497ec4b19fd57158, type: 3} + - {fileID: 2100000, guid: 4a53388d09164bb43971571879adc754, type: 2} + - {fileID: 11500000, guid: fe30e455c04f33342bb3d1c227855682, type: 3} + - {fileID: 11500000, guid: 909ea7d136ae0c349a24f02cac1f5f71, type: 3} + - {fileID: 2800000, guid: 7f808d0c8608b954d8f20cb4132c3049, type: 3} + - {fileID: 4800000, guid: 5fd213d22763447c4aa106605e06184e, type: 3} + - {fileID: 2800000, guid: f20112bdeec2e8d4d9f80e8390e37263, type: 3} - {fileID: 2800000, guid: 188dfe7e559f13248ba2c41eb5a59328, type: 3} - - {fileID: 2800000, guid: 02f78a9ec76d40f49bfac78c64a754d1, type: 3} - - {fileID: 2800000, guid: a7ec9e7ad8b847b7ae4510af83c5d868, type: 3} + - {fileID: 2800000, guid: f66c4aa44c09b6a42a2b5b9f9334d824, type: 3} - {fileID: 2800000, guid: 3ee40aa79cd242a5b53b0b0ca4f13f0f, type: 3} - {fileID: 2800000, guid: b0f85f7da5042c0448a526d5ecacbfa9, type: 3} - - {fileID: 2800000, guid: f87b5805002ec9649bcb1b96d8a16ba9, type: 3} - - {fileID: 2800000, guid: f66c4aa44c09b6a42a2b5b9f9334d824, type: 3} - - {fileID: 2800000, guid: 3028dc075ba8c584d9bc7d1e0255e038, type: 3} - - {fileID: 2800000, guid: dcc0ed9263c0d524aabeb5f4bd75ecee, type: 3} - - {fileID: 2800000, guid: 2fd6421f253b4ef1a19526541f9ffc0c, type: 3} - {fileID: 2800000, guid: ee148e281f3c41c5b4ff5f8a5afe5a6c, type: 3} + - {fileID: 2800000, guid: f87b5805002ec9649bcb1b96d8a16ba9, type: 3} + - {fileID: 2800000, guid: a7ec9e7ad8b847b7ae4510af83c5d868, type: 3} + - {fileID: 2800000, guid: 2fd6421f253b4ef1a19526541f9ffc0c, type: 3} + - {fileID: 2800000, guid: 02f78a9ec76d40f49bfac78c64a754d1, type: 3} + - {fileID: 2800000, guid: 3028dc075ba8c584d9bc7d1e0255e038, type: 3} - {fileID: 2800000, guid: 93f09189124b21e479fc891dbc1b93bf, type: 3} - _Values: febc7fe765b0407b8c8e90345544ac394753b1a281922a4e114589015196ee4776dac15926adab1e4620c9a232d1ed566ec628c1efb3c0693a954d39e3d36066f7d0f7b20b638d2be0a95163e7ea141dcc1f6b7591d3a73e949134651819880de72e3b2ecf0dbc66f70629b01243766dcd4f9bcf7dee1e4185b3b64b611e3b6ddb9f15d3e773b400f9c3036d9fa280501bc798c97db9902b9e9549f346d5832eb56db8a23f89a7640733ce3e6d52283bf75ba0ec3738db268ac131e2db057329631d4d0b8c6d0e3ae43753f6ee4b353bd2e2253bebcd1860a0d4110fb94b096d897f3d09494eb63919371d8cc711425cd33b203e27204208f885cc092656e150e128c851cd967a1faedeb3ac8643a066696941ce49905954dfd41e62741c9c0aa24726e7840a0343e00326e5bdac65587954269665689864e713ed6a2aafad56a7eda6d48a710f5ea039098a96961a33923a2536bdcc8f3956cf3dcf0690ce165927cb38a6b5d322f7c42dc76a0f38733adf6e4e962d5c724536aed9f37e2a0bdb44464957c307518d1d6d10b64b0a6e7bc20b8ff906d175ab6ca57cd054ac25fd0313370dae837788d136e691bc77608932df9423e3b3338526c6cbf834351a137c1a389017a534ffce0da47d9d35274df6eeb94b093a0b8594cefd75351f440851d414a23ed05fd81393f2f058b123a51281feba84311bb826be24e5a3a934ef519d2cc8208573c74de13776471b2de3aaa287b71dfe7cdf46a2847f54867bbdc7e042f5ddeb7b72f23af89a976e0042eb07904531eb0bafe6f4f03cf60c72c6667aae67d83705be2614c5e205e248a312fd7aec8b041ed350852f5e12e7049d558c480b488043b79862cbcac2a022982aef40f444f346a79a2ea1059b0743e0f8591ae3c7fa2d3130b993d419467c3a1a11a336459a24f05e953a20def4426fb65fc8a58b1358f90d04e060c5c571d2b1d2df9baa98256d81d67ace3ff30fdb03fd7487f0de3b24b60f810b51bf247fb2b1b92bc13b5741d788d13165e2476a8c158cb8c388005461687b65a3ff1b24340358a005f80142ff99728e376301c37373b1d6f9dd45d64ff173d548421cd7a3aefd628aa7636cec3148a304701d0398480ecfb2ba1d13492eeff76bd706bc7d4932e661634ee528ba16386a5d2e222b8a926faf1324ea91eb185bb86b273cc874da44c2c8630469d658085c1a5814ff32331eba696b6f91e488b384552cbd92da6ff683e95e632696d9866c2d4553bcd3a41560b90932df6bb3de40b07741fcea64c975b168176f69bbafbd0e02659edc6f57fa421c4de43d1617368022761e988981c87c3693c4457b358b4774d2694e3f634120464531e71ac865af2011b8ba6fdb7a7f63dd5a236d4b39183f9dc945aee841be3402ad314c4f68000774658ced46b6504c174de2429b726e0c19a8b791aa5d085276ef6d2e49321474591be0b0c606851a79f9c5352400cf703e2433a7b16f5c2e6edf6435237e961b396ee87f91be4612239c0aa4233e7677e7a55dcb88d4107f070a9e49d5b59b7e9c41c82751f6647d3f927f2a9e42277d89e9df153fdca55f4b6bcfff42469d23fcd8dc3077c189625a00baf3af2a9114c7d35516e91e8c796f198b64faa45a7d76e4cc1385ae6d5597fece2223c2790767e24fa936e0676b0de32eca03e1ca4ab765c42d4645930bf57524eacefd8d1cb65bedc01984f90d2e25547c193f025f28bed33a98ca8b20b0bb6153fbaec60fabeeeb580bf6ce3aa12e00df0fe90e34887cee722e374a7fe70e0f5e22a61123ec64d22b53a95330f098dcc6cb6a2f3853d2248762c7c172a46c3f1a052d5d041cddcb73bb398821d6427d6aa47b4c51c2b84e0a356679245da0771895c7d53dc4281c57ca5c0c735c465ea5452b171e5977a3a788b62300769e73c717ea69523e1b1b6350b4123f2055d2455efa01667d0c20667fd04e4026c79132d15cd5220a5d361bd5a8be626b68deac856f7d7aba654bc01482cc6abd9562f4c608cd307a0b62c6c47d5753ecf0758b0a83ed7892cc0db4277b417c3d600f10f3774c4f67e5b9f6dff95a6fc92d2f12633149407d249c0605e7f6013519fcda7298b975a4262324caf69875d8821306b3d1e76f8474ed588871c418a6f4bc4de93852016a5c947150da992f0af17fc19603432768e6fe4375176058af2698f75295c034652546000a1f4747974a8bb1e79e1c627676cb950ee7484a337fe927519074615183074115cf5849624826405ceebf10f6c992369faabc7e24043374cae00a27bfed026ba65e77591e81f6560d89a621c206ce7802c23e58cb6ff915a9200f3607a97e250268104af8cb12e08f8380331778b4c0616e04788e4ef72839780d3480bc0fc008227d6a65b0a365dbc8b97fbddd5f4c93403c39f51e66c109c4892bcf8152ebb588515211c625b9c6e3456d1a197deffccd1c6aef77703b386d535e2778955975cec93474f3a3a69a0aff279d2c24dcbe87d7629dbcd92df98c8a5d8c391ec187611c171c4d84f6d6892f1b78499e0b49769f5050f8bcb8f59c3b0081ffcd2cd63e5102b6c306f3f331c7138dbda4432b96a60327908e715a9bdd7fb3d55a4a23ebc6694c1035d377e76274982a9943f3b4ea029432abf72c06a56ff67adc3add40ff1fd9bffc15f34ce503fb429a233be4797cb7f8e7ec20f59c7b038682fb81b64821a93bb1f1b121fc00fc74dfabe9e87372b8371d764605691d4f67d2a4838200775412b3a95892615a31dd92360e99d12705167caa00d52c1c785e963ca485fc797467fffb9c1ccb4a6887ba978dcdf14a6b5556660054877ee69621b7289dfe541fe63d59662974211d38bc87e56a7045b01f5905239d8536ef7de1333d8373368a6678a68f98e440e2358438110e634ff899f8f7bb07cf7e610748e30ba75e653b7aefb41de92a173c1924ed194c2501e1313aa48b7c7b6f36f745884f003439d81efe961fae321d3defcd2ad44368141db93ac31efc0e49f65f7e25a4a1c83ae5ea16fa4e8ee2706357e17b49a6430d70ce59f6c407a72cd3b85f40cff28765289346e92c6dc5539cab5fc61b92ff645c736a8c044100146dbd31f911dcbf7130845c2313d2c62294ad5a19a7e0104048041ba377059e69945a57e99fbf6540ebeef69fef22772ec67307a819189372540ebee9079c172a1a0c704785237d53ee65d146158eae6a7d4ade03fdf64f7ac7e49590007b3878052084e2b230a9170ea4444cb9b2a23a9fab924341ecd310a414f29647f2ac72d3a6b4c9ed6ee253f5f512a23b9c34787830d053f18345194c7386c622405e0151b77812fdd94d3038c0c7c80189b4071f86f0883dff9c509f64838617e3cf345414f4f2144676601e60754eb4f1e529278da79b4fd5c451e5d74e9da32cb7530f6c8a126a3e0d65fd51a59e75ea04528059aea48b6b832927baf2c20826420eaa225d217cf894167f419dfd2f26dc30235ee2b682ed387a104b144fb4b4a2280e9747974826cf783a68db33f77ea601dec29eaa438c8c69a528edcf1cbb9e341c39116721bb17028e6a7b1912058372f3162e76534c6c7d0addf11f38005b7e3659b0cf70f1dd66275ee426ef8da85fa57bc233e9148730ce9371feac373a71f203b09449ad1d0139c750f468458e687bae8543c2d76a4a1e1efe237f214611db8cca1323ecea5299c36cb1657c9877060884feb1f7af199965b368ab4080590f61d0f410a18b669ad8dd85441cb05d7b79d7775abb3d2cc51b547760ad0125bd394038b37277637e1e65d81a29d57bb555ed316909ff52db5cd00bb2ebfa14d7b7c90adc78aa07fd8b05c3a99bed65b9273df44030434d3bed1310428315681979016260ca9f3c5419d00bf03c03409195ae7551fa2c07fc16d0ee6499c57f5f9123dc62af3a7b39865fd9a0c7a377f2547fadd4a0171e4efa6749fab1d811df4f6a8260e0a21f5b323cca9a5267338ca603efe5e8554186fa7098b70f7f7851b14710ceda282e0960ad5e9cb37c059434d6a1b4c8f70907d7049a90f5986ab3b41c4c9a77014e822b197ac4085a2c7e6b2bece5212d1958afe95a213c410107e8efae3037601ccd77e0765183bb028328e704de7baf2ce236f4eb8da62c44ea1874dc19abfc4acb481e6e41b6c825951321b5dbb9207d68e33206bd8a7174a4246069f7981b2f253139965c41eb6700e57f5e371ddf5cc70eba0321fdf8402a5536e3a9a0d202f8f190aa808921260834fa28f4ecc3794503a1e9dd180e27c8073f4e8830ee5eb88266458d34db3e146bf4aa07dfca3c92bc29ad42bce020e3687188c96faf28b9631e88acf6f9112763fd490db82f18c2fc4334f9bfe37562866224c353757de4e29c9402ad16774ac42a5a46d6d22ac7a63a33d484d0058156dada6c2bb12bee7f642b1c9a1515548555a09289d5567f6670acb1a07c0fb7af86a800352f05682ef0036235b014a51364d4b9c83f4b516d637538dfcc3559d2d58258cc364e2a2d7091671815010c5b5532adffce39eee7619aafa26240bdd376fc7703a047559607a2aeceac1575cb45c59e348916d9ae918c3876c7446b8937f7af3d3e40e0e2eebf7ac52373abe886d1704f7c156d76ced7937e3a5457086b1b6486be30a89d1935a9800a5ee2bc117d197963514862d417cd8c623ec8e0f5398c46a127b8059e1a0c98e207b2ff12b8530d6e6fe1b0ba06916321547a085fc7ee48312f02121473a7a58404a63777da04e23b54e4498eadeffc30568e9a325b6c365e677f8b08a37795fb311c51bf5f7f4b7b68cd0ae3a5b9843f00426ae50c7229972496df5b78da97dd4db1a336bf4370294371709ef9dee984323cef5a02fb125775516b19eb69960970e1d8726b24bdb72a40c6b190f96c0c6eb8b1c1a1e8a05b2168c518bf6c6504014be468876e084a6ece7fd4a1f3d8cf7da5906e217182b41d7afa669fa5197a253f50bbebfb7b005067536f6875fc15406b699b022bda8c32998501696eea134c06af63a21ce48129911e88c4f11d927610a6353b7e78f9633b767b7e8396417d3f226d2460b75d79e971710d52c74049187779151f4ecb72b700de935f00ad269ffafbec75482838fb51acf3f913ee02493b99f4e3d4a20e886b48bb3fc43a1b8297bcdb128f507f7f5ab089c4027f0b0821e9cbc1389d7961f1aaf2dfcb8a2a59d158018ae0610cb914f8c7782bcf7bec3cb41dda6e5a4435353c033a435f4c30791c6aa47e69177d097a2ace9a0d73c22507a2166d4f372b9dcb54a45dd2764b536800f19a296aa7cc9be4e9841265d8373b9fb5fe9c62c9543e07b314731fcafb8bddfdf19b26fd9cfc4ad16b4d4f50ced323678dd34c48fa36ba26cfe245c045e41107ca981963eb5ce6fead6f345f71a97e1769793bd8c0d908d8aab2347f410a17505f561a68ec8752e9ba4a648b02189878605c2942dfc6b90f70be4638276440b78684011b8e172ae126516c0b3e7dd6911abb2161cb2a8f6762f409d1bf74eee074e30483e84cf98878f41a71a63ab2126a281e95bc2114a40b667d8420fca19b3f4d69a587a786994b5626c0451dc12742f66669a97d636908577783ce75687b537f4e0d5ba865ed51484999052b16d6d85a3ae99cc70d3d150063cfcffc352a1255133c93327c15a4ab176134fd6f346e4d5b29b052171b8d8b215d0c34bd4d7e737850e8ad95f429b07148df6e72126f973d1d575edb646d2f51f8efdff79011361d3f7be0b43f479900ff1f9f050401cb340349dbd81c64e457023866f854a08c6fa474380b0e9577237d0da8d4487f826b887bdb2d00b5b12949946eea57a98439f0361a8befe9923f0f1b505044404d31d568fd420472947f36af28367a57da3eed0ddf789176861572e880cb2e4b97240a854042255abd325d1b7241021c8e0990b83029c808363e27c389a26af07f40c9362f353f24d86ebca7d4189651d540975eaaa76665025d96bc3db6ae910e707a2c317f4b3639045c8758b5ded75301a73466fc02432f1d9cd0fd089e2b4624e48b844cbb9c893198af02edbeb73c6d103e0f7a2a116e425d4fe37b3930652fbecb2eacacf8b94343679cacbebda052f294e622c43fb00afbc6f06cb80ef83615322ff2888fc11785ccbc92ae1b0061516f9231e8770b7efa1e7c2019f7164702685f353d906a67992f2790a7f76e204a998c6b3e5b584a559e3dfd2eaf6e349c372b7b90f9c97f69ecc984b1460b0e8d9c69b28381855dc1aa8adcce679517c2f2f56fcbf39050d10d025191d4990d942f8bca1921b81d4276c3c57c5ab12f83e0c2be519b427ed4467c6f7b28106a43986ffdf360305f3bd8b242b755cc2bc59a17788a937461012fbd34a1c6684775575b1390fc6016aba0d8ca54cf5d5c194c899a5b2eed66047a5b4d0f266c4ca0a898b0b15eeb3efb2dcde9baaa0d308e1a1b543cceec456af40f15a013072e0d256afd670e0e459fb46a760328de5278743f0bf5e8f02e43adb943b12a620e34fcdc953f10c864d79e0b0fc79cb66d2c9d71eaadeddc2463d9d79c9821b674241b9113f6fa3c34137b9e0510436706378a108e40b3543671d1650d1027342971c73200635ded0c04786c8896005f15cae8d31d80dd9a785a3577fa8054df067516063b9610f12913e4b0b60d4a5d59a32567c6208da217adf8fd4e23970c5758721480f9247f252702d09a72ae7a5b6d2ea8a413e71901ba1e8f9e12a2057ad9585f9b36dd5f37a48ded225d3d8a027fa1e2f5ee67446fa7ed38246a1fec7c03aa3de5b020da70e69351fed9263758939cbbd336aa4f12a9204c823e1e3132106c4cc49bd1b81a642a48b475eae10cab25af00da3d397ddc99d6e8307e2404c4830e4673fbf36554d53661f2038842d184ea0955ef0b54d2c10299a1ea222350f3cc34352aa7361321a6060b6c31244ad9508b50884a1a2227275dd6c6306d71420e46e12ad25e233028659d4936425bbf39e7f768e958338ba09d12682103680c717c94c3404bd402521a9cb64a318b3be551a17685136271f4869dcdac74aed4036e2845521d018513f416cfbb7b426f284e4d73a40d79a222f94838160557dd6cc7b2db092e8e0252278a7a296db678452da55d2739d0090979dca72a38700e9e3862f4c965990623af3933680c336fbb300d179f07b73297bce4820b18d81a96981962d03eb0dfc7ab81d67363a1fd456debfa2a79525a7dd0a3f37f1cefc328e0622f0c2e9f7ce0edde4a8820c0345ee2c8790422ef1d45bfe4009b5c5fe3bdbdae93012e0974ce6e1a3d9a072fa27028ad9e1a74c006cf7f75cb13601f7cb33df7ba312b332feb3d47733c4e833ded8770c30a3fc948fda7c481b92a79d072690e2800737245f57eb2dd2d4c357efd4c47642e1e780c8b504376984e77c1c57600d33f543d61f9b6b888f214e54e22bc81f98e22016e1ee54caf481721bcf80ee748b40842aef11a9488990fe789940bac23327050e7776ff124a171e81e6b036f1cd26366e601d015574876082dcbd54354c4451297a13040dc051cf280cd89e3695f3549ce5a39dd9da508a000771ff076b43b1d4e0d27855ddc76e1e5c39525d25a61cd958c74f98b6751c3556ec09a19d369ccf6936ba3c85013f2e319c3613a2d33a715ed850229356de7bc6430ef1cdc06ba2dca2e3feebe6a1b607dea8e5b1077283a66b006596c5ec225525f2c80022907137c8e045b7348a87d945d53b520423424f84b4ad4001266d692e564a1c2655e53f2a1d89e7c3339e1f8763bf0f47646952b0887b7df23138f272dc88de307ba2fbaa6a7c21b6a573aec9623762857cb092bf9cccbed5a8b314a983956033ac6ff306aab9b1e08b19660c2a37547639a2f9e409d15c51042601b767782300136b25b23a79302672833aa632baffd0178ad3169f444d7503b20ac0bb6948033c862f855d16b0a2c330568d1c0283c6c9ee60236af38f20e26f4a238bff1e1434d22d57258ac2d1c48a163065256ef111cc0912f6db67c7170ea30dcc8d26c41dbda7a62ac36eb0f461911f22a1343300690547f8211b1029f46026d7c5053743521e12cd151be19d582e854a589477c2f60d7387eecbe137582ff0cc7a773686c85264cf570014cd33a5405fa05a7288e7e3e1b791af6479d3148b1ad4ead7cf651e71f63fb86616323664397b9196fdcd67e486858ef788491503bd7af6120182e04b412397477fa6046aa4b4c50564ab78d84ccf6e54e4060a2f44bc2384dc3465bc6becd8114b40abd3760663b2f1e587970c31a132149b673b1967f2b3727f96c91a8161518c85e303dc75212252472d6f349c88922a682f08bbfcc5434df851066faaa8707bd9ec7deb5ae1764c8988d24a937ee5e6f49eb262689586c4d9be2b39d86e07aebceb0e79068d85467ab3dd9c0d07458694e094f419f1f4608cbd4af6e35fe42b81339da8706ce0771968dd2c7322d1df1c5e41470d04475eef6dfc49429e663ab8092d3094edf6e1e10c0d82cf10e2a624960cce6ed4d7657aeec90260a7248b0297c48c500265ee675f65f106b4820050925dd89b24942331c2bb73b709528840888566e56ef6270bfe670f6ed663c09f374e31a6a410120c5851ed32166741f3123f81d0d4d5b0778b2b76645c645b6eeaf47fbb10d18c88736a8d1d08e4e59729027105e5a15be2f235d47756425004069e5721e792ec2c4405bbc09d335eb645ef4b59e34569599062bd46b5f3dec5ca99167a8dc3afa61664c1efe5937fea7b7542ba624600c1251d8174d595565036f606041ce4277db04acc717c76a40cf2e2db30b1145c8b779aba9fcdd54f7ef18e471062944da75cc07abd12822dbbb99471e2ba1580ed5d7e84486147b024f4a27001c0746f973543e3f0a9966df9c8565962473226f8e2963d0beff5f75b8f9a479fedd414bacb054299ce61891c2f758fe501a25c36db871f2a3753974f4b3f8033edf1f41bce6168ce1060b7642d30dc7a760392de0981849b0cb11de1538e1af21e3521c27e8bd96fb661e9853034f2f988d346b8634dc5a382a70f2d53976a8245b545f812aef8f1ecf2847b6b09cb41a4075a36c4d3555c0ac1b03875194cb22394352a7514e3d823c75555c2311e9c624296b3c2bc429da0061d50eed07cc3b5c237e6d4a0cc9f2381fcf27744e1b42fa37ad7b00074efd6c2ba9b37a2e9534a86eb8478e571131f35d8bb40afe994db9160a245b513b55d47ffee19bea88f57504d0e295d4b3a226226f5d7d9af36e925a069cdb8e26a8cc0ee4f1a7d06af72a7fd5f131831c713553b5821c2228c5736c73f6e3eb1ae7dd27ea78475ab509737734fd70e49f15766b6787d9a48ba9e55666144360da159911edf6926b476ff6400a6baad9c9a8f4766d4f84930e399b6c5f9df5a1c6129c1d645ff8a8820b23287d19aef754bf1f4221ccce2a9a2d1f256d00f25685aa8508317389954fb40c788d53ea0b755be71dbe3881f94472833640d21683fe7aae2d94a5c6e1358af22bd9469d474214b03618efeb42d380b25c0a3f2bdd35708812a5bd9f1a22c853482cac20fdd53cf42add2093f17194a615a9dd158b492f9f68bf8aa2857496144e635ce8d89f4b78324b00ba55037a84389b4a8ebb4c370104f247c0b56690497334e28e15abcd750b5747404974496443f996de40db30652b5ae4e6578bc3cc244b2e8ae50899e431d5821193784b793bac03bbcfb1099804849d453819e27f1a1464fe46be7e3b6d7a106a581ed1b30f96545478f7038d54c78f626b54ab1848022ba7dc49c0fa2bc2d7aa5e61c01a555154a3c48d07220f29557fd0e330e626d74daa0cd5283a554f80b620582ef2058bf2e500f7ab450a4eb6b3f44029470ebfd18814160d7f27e5b28af2affd4958478544f04ae62e7d93b45a8cdb2e9678c9c56187a6deef66720d1b4520535b506d5aacbbe457c45bfffa7e9e4c0cb4144803ba745fd0fe2674ab7e3ccae95d1911abf936db515d1f7642785fa3714c65a7f903e266190e625c864639d8879016649a5007f914106661d9fe1c579f83035f18e3c4ec3f80099d9793619796f711b262c23dc2545f6eea9c4340182aba430242d9bfa3cc295c1c596b6281aecf08d10f69f5dd45400a478a52767c3fde71dd4f64da70b7b419c79aa7e3403e0f3ace3b112894af204202cf062e1e9fd9247cf985314af497773c7c448813dcb4087b18a8402db6dd2d3021dc3fbee338668c3497b847220f26a49aec176b982f21830ea9374719523b1c5802281758b857bb21ebb88c92b062d730636c363a3d690d443c32729051721fa32b60dbc8c14be295d38d84e7ad0ea2b9a0e9491afa556a94caa36a14352b308629d041eec15f0e51b134f235120b0fb42bd3cfc44404562a34906d9b490a3500a2024222324df840dbf768c663605a2a4ee0bff7046bbddad894dcad32579cbb69f3d8154d311886247116b3641d8d95e997e92aca2c050d4567499e715a74325cac5c6f884322e206b9e4897e0976bb0646c49a6d3979690619a54b8479ec361bb7efef86031d2d74062410477b71c40e7168d5690ea19626c576a2e9285d8ca41ba535f9654209299625671569df757595a6091d15ce0d1659c9c08c40169da8976b2cd659bf74b472feff3407547018fed3ac7d67aabae8b24c532e036a9680774082020bb43028ceab54e83226f052c62674eb6ae1be124ebbdbf211a4b708687fbcc62972234aa384afbc56d1b58b5c0168dd2182ea97826fb34f6fddc68e9da3ae4d1cb77b54022a48e6707b682071674e120b6bd6196bdbbb46258d4580b5c2a6067f03a8a48514daf6352ff7f8f86d21f772b4820879c7b9f703342e8f70c99b332b63a07410f398206fdfe43ce3c24db8513ef3013f9e8cb7436057ae19b479946c3c32a4f16af79a1b639859abf5dac619753dadbc9c72ca2916cf4f6416f944598857e10a0d554445a71922faccf4b17b6e6a700ed8aff751fece083947fe315cdeb2249df8bb0b3481f3158350cf5d22e22c095476c97f374f330d3f4d0afe5a4b7ed87e184f742976a48ce59a7401332c2b571af4dce51433ec4ec5adcce7740f90c82e0821f5305fcc35e4a99b2e3dcabfebde4d1c992864ecb1049d39d74274fe0cd5c3cfc409cad9853fee3542321b8c8f6db7c5c12ad60f6c0b2c0531250b0da75758fbfe6583f41474965a3a2fa97e1f2ac844f9513de1abd33ccf363b589fb6042266751f72d60f5326c93f7b2bc29e5119f9a24ff807e589b0d4d6532a4fcc36103e52100cc1480dca5ad5062127a97a31e4215efe66fd2a4bfecf610144d72902f79568eb51b9a74f6a7b52dcebaad77d51840f8fd4cc88c383a40df3e60c8683ac0329934065829ec9ae67e3500637a8a6df51361965d1d5f35a6f0b3966c988fe2a77efd369beb707ad3a2665a6737d6c644bf8454263ee2a017a642a889b9d1a211bd970d883ef62f62f6c2af73a99ceec62d51ac2ce408d663a2e10a67380ed624087c14dee45e73b69b2ec093bcd391e693e256fb8ddef5c66d713b000086ab05a8c38c05a1bdaa71220a6e3ac7cd5920bf33cb1a65d1a1d761fb4c558973b721c629c37fa06867a637e5d97360cb0ea01805b0dbae3a84859563679cfa000aa5be800b6206267fa7848eadb444dab7d31603826c3d148c70be490a3cf0daac37d4dc3e2f398f49b17619403cd848ca65548b890982619752fc8c204f30bc98661265d91118e71ca55d43e24654b958f71c907e93ac4a35c33b24cd4291057f369f25e0b1ee2471c4783e66c643ddb7a5c53752b04e04b9d35b9c45f419da0457cb6448c13758e710f2431b8dd36f7f571c7317b8682f7493d04bf9be117255523d3165107b098193c051be0af93bffe4eb9d17a6c25bff9527135f0490c700802246a4eb2b703dd2ee8c1756227072e443eb36416603eb714e4016a855730cf7524e3d3fe0db10649f34b54e6345b7a799ccbf5a7f40e5d19b33996b96e638548f2ff3e433330360f4651dceb162f1f3f7ce4ea8b3b28801486bab14747bfb8703bf428cb6541526b96e561a33271031d59d534524d11833780d5418681103779996cb1210753d939927ff555c6dde213b894a01df40bbe4b87a0b3c47c2613591ddb0ac5c0e11653af6ee4cd07d9fd5eb8553e15b0546d7251995657f86149486db0c7142ce3ac2a7f4dcc62ef8b52525eabf3d817015771b783e8a6c792b44edc649fa9ed16cd2b58ec6c01de2f9e22eca8b5a35422606ef9c7a25705f99d10021b878aeba96446dec7812b95559318220bb91edc10fa02c50eb1267376265d505b00c3a814376a0dfb811ca38c045d358a7910b3bbed111689c6dcf73ed3675edc23c6ab309036bedbef1e7121a150ecf10e1603ea556c911152e0b1a58c4c3217413897c14d64e54fad2733315f0c188a3717b31595737a48cb6622507b62693ced5adf69b9523e7231b33c2d385f4fb937d8918a6647534a40b00918bd3636ef6f90e046147e4389d840e4e136597ed4e897e75d2f222a5951d55695a4264c0416d36237bf085a46e3e49d58d47213e7323430264f6d2092ba3998ead4521b4d731607f644496c0fc35f85b57a2e7b203d919c900972ab7b4b2f837a8f441b35ffebccea7a09d5845fc016510c69e873418853bc4a75bbfe3d7cbd8b3219a0077abbb566fa659c47bd1830495b0288b5470f3907f05e1576d0325302b45f4986dff129ae4b4e6ea6239a7a62a6055a40f4084422e059072759c06a38ed66935d61b7284d2c2697075e6d1caa1c76e32a726c09435b26a585e902558be4364743d2283ca1d25793e461b37eb28a4e43cfdd40c5815d29b9875dae372f7c21ed9426d8d7f33a7afccafeeea40ea5581038bf86ada47038a1fc6fb44424206397c03915744e89360a5843fa826f8538d24a419011fd316efaa1c7247b7ac920159da91c2a6f1b3d527783ab9e894a1082a7868e65b175657135e52d799a45708e220e1f19a262429a811e777e23f27b152759dcfea77963d7bb540b75113b49331339c1986a29240bc9f5e492fee64cbc95e6aebe978e369c72485d4d57cc554297bb9516cf1d56ff35d135b295d02aa2a14edf2a8d8a36a3705d0ab2877161974a272ab97b63127890acf469c4e932be8d4453f713d54af47bc879d3d7f7773c906097915a8f1efc9e98661e693267a670b3dbbde1957c8b23c8c14c16c05078dc47269cae5f18e29da7a78591d376b79ee0bc742ccb5a061cf3926e322e11a01710bddef33555313407dfc61208064f5109ad3504db5b575dde7f443355143546f8917fea673c698beda933ab210d14ede2c03bdb4763c54a9a7fea4aef6375e3557fe689793a47babc55e8ced753c42e6cceeaeaaf59ff95cd3450e8514b7a50344f55a1266299e3867ee00d850a8cb9444421df865f6e518184a951755e6970cf390227a96455cf67ce702d390c1bd7c1092c956d65362b4358dd55f315a71b19af2240f34b9e57670eb8ab2f3fe88b962e7093ce2dfd95fc291baf780024add8abeb7516261b89942ad1a15375fc034068eb22853aeb46acb83c1c664d2f98cc997c24d472747012e6fea35b5c4186241eefe1ec473213953222cf6338111e05c62b450620284c22a3ca94c6725ef6053cbe7bc24e557a9897705daf5af42609e257dd787873ba095c41b783614c22d32bc9267a74e15372b0ac6fb07afc7d97f09da9c93b6e7eae78851f8f63f737e39331db241aa17d02036ac7cb020b8f59bf4e74fe5da76743b487fd1000e3d5ba758c1c4828a2b1911aabcda63549b18214784eb17dc7791336678f6d5c93fede6af3a98912473061ff061909740f78fe388025783179c7c3f9cf807012bdca785211c3bd5fd98fa456504f7b1f7d78ba1f715922477710f12be5904238a173423ba0b6624abc9e60f18122e137bd1c89b7c4707c63a931c921b5e845682d234a23f3c08139167063d2f930c5660fd617fde605033008206c9013be6a2c5af71fa46c042b7d9fc2a2540ca96a77949cec212fb77d33277a1ad253f0262bdc9079011121fa0aac9a5f2363af234e761b03892eb602118aad3419e0012f71eacd797c2f68654a69093335e95e68296396b7910b4fa62472977341aaec1553cbd03a9636a61e0cb6b9212482cc2816165d7b77b9c07d662854eec7dba6f555e17994e7dc2d0c44885524add17e5d3ebf8a2a4d709d99754ea06ee2b857300ec4cb06fb610ff2175037ef649bcf955a4dd279992ebd3a4421e0ca83631103207acc8e627aa6603083bd03c651ca261dc936d0742e35c37ff9b5247fbb904c61c6f02197a2082a0bce55e3133fff6a554552b3651e87b150900d5c2fcadfeb130b650061a88f7a2d9f24bd7be7284106e186c6962218bc4d5e8df86b5404be126ad009dafe08ad2a331ffcbdbad3c76733a9b1bbe6ab0f0d574c40ca77197d5d1d2feee9e099f82726649bfce4006d31aba0c855acfcd315e116324a4977a24c9d59dae9c2b04765b18994820f132957df0e7517e2d3091afdfc360934bc8f6106e8993dda56f405a79cf8ca6ea9db0c41892a57ecba2f6f9c0b133985c1cf6ee80984d9851483771a6f7046da3fab59d943c8aa9237753fe8f65f30bc45801a33754e87d24a6d2bf94d8ea4d58ab55d5fba11c98a7a014f6bbb0d704aad455fef8a784f8d332b72d79da4e0c519147153436f89a8b65b5388610c72a721894c072eb44a1165cf2c726060d8e11eea7bd07f1d073dbcb6382f25c72b26b8ca0827f1e7f4ce5f83128dbd05f7e9cccb584b87a22804810e4b8984e514615cf92ad5974e0fc90a532ffdcf6b043e51dd03f11fe09e16a1045701336c4a796fb1303b24337fe524de41cc8dda2c12ec7636591efa7fc368bf3393f610fc769da9721f3a4062845ce933bf61965c83cf9513bd36a3986a30f42d9b001410eb1e3568374d0ed7ac13b149082e3d25ff1bb7638b23b9ad4142dc12b9ec387cb727b860d4d2dac93e4298577ba55f6792e6d349b9779c0fd7e2aa782a2091994c2d011f76dd502d41ed2449769dce641d8a7f2ce711cbd03b38c84884ad0ca02cce5c57a77ef1b495a60859631966c6ebbaa460a164b23a6230e351a599b0eefac57658be88f46484cb3d721b2534559e8e343e526d00c81b22f5279fbdf0030ae5a0615ef2f89d39bf236c5edbdfc303724d333310c0973ac08b1f83e3fdbe44bf82347b2d07546a68fb6e4b9327f601b82b10f4dc2e06daf6d8639826e5a93d9bd71d5d1447d66af9c865f3d1b259666be236b9edb320ed890f7a54a3bb438351301a6c455415ff017b0413c91308437ffd2cbc509dd4b107f418dd3d7e38c17b1e5ea198c4abc0f8354972ae34b79c18be2a5b71002b10fa3464513c39c283424271e87167aaba526c4b79189cfc2cc2833b7f53de507af34e6333d60403ce08332f943d60f180961a53de4ca42997319113c074432f63f2f6244035226ea98fe57eb43398109d6d45156e32722e4f25cb0146f04359c404cb78cd7bcf494777034d6725756498807552302dc1317fc7d51995dfd747b374465098e0bcdd61043109d0db37d65098973b7bf12a97429af904594a20d9b1b5fe246dc6fc793d53b43360cb025affab6902489cc2a49fdd9232dac18316e357571b24edbde96aef8727c208c8886861fa054cdc6eea0ca67a49a7d0ac012834e848dde2c8ed1180683723e9e296140aca793a819d3f39bdd87c7374913b9b895071207fab85980cf33445a50ef688105e62facdc5552dd87d6546ba9f7aee5c2d52c6ab896aa1bb1e4576d2fa94afe1f462162e42cec3fb4407fd11cb52ab6e231779bb30dc87f3c13eaf80df5bdde9b66439c29b3fe6a07035987e984d788e0f1bf6111cf3b017db226e041f431be9291939d0e7172d1cce182d6675058b0eb63c70049a33323d4c51624253153f4bae7da7b18548752648264303c749a2d6965e4ee3b420845d4b75e3c74a153746261e470853c36c004d4abb7476350496f374540b37a369710605fdfa65aedc33ef762be591aa295acb4dcf0024072c7e864d2c293fd4f07d4b2afeb2398e656191787c00a016d8616251d785d4684dfed97e7417da0673c3675365995289dfc21730929c832c1e9d26353811548aae4c87048cb8027d3b98eb3f980c848e4b14cf14935c2a4e84539f29f1a4cd616fdca419114e1498c5946c2b87c293111897ea24bebfe3f5892a76371ad96ee0654dae449895830300c9b02737aa2ab8184fbe59baa91f2fc099a23b3bb34d61fcb36f2a70d8a9ae1bed240c0fbb2c34542f506898c89a0f6cdd043139bec84c7b4f2b14e6aab8bf59f0c1327becc1843928700a9d1a35cce69f414edcdae6d9b57087406fe7b156886ef158086794801b7ff70fb14216697b08047a13f964cb296417148bfd0cde25386c2e29dcd34e33c16a5cd1f628735a1ec4661dc8bc70f5dad06b8057f4e6742aca78d5e73f9e35b646518e08f9333ca3ba6c39a5fbeef5dd240454c03223327b17582bb09d72df26312c0f0dfefed403a82264785230d1237d07c33af1f5e969830a2051088c06488d128d3102fc23dd264fe7f04046d718794ed35b515bcbc3bd786ef6e1d9f4cbd6540765a4a02080e35f61410ef9293d3207d8b95f6199e9de368c7594e540ffbc1be714b3c342e69052880e42f32e495d31c4da003a6c75ba10bc24d369ea375f627c0d1fc20f0ab5404ab1d98ba6ea0842e99cdf99017e505c303c80984505c250521f91c496dfbf3170be0f4463d0952e1c90518716f96303433c0cb475b27a441277223a843226082252d6bd90f307012f51844b4cc4c64b839407d2ec73a621c7accc1352a4554eb75a64c423a5724fccf41d39c93a6f4cb1d7b7ef2b531b69f8f7f6e427f4af2da7d302a6298b6e28f8a8f807a993a8011b18c42a5c457a0b75cdcc2baf8e273fa44a92f637c923259670182cb3dced654ff4c80f3084d113b2f1e308a86628697f46540bd960c61bc5166c14d3b2a866209824453ae7f028e45956d653d33230b8515505ce06c14fbbe4d346f0e5e765994a28418a6da368a9d30fcd48629167499c5d825da29818d8d4011ebb3719018f0ec3f7540f59250b42505de9716758526c8f8d4269c23c1dbfe7a1903edb1f14eea4a8d976443943378d9ff3f50149c3a68fd83859bb082f00246ad8476b49e3908f27e9f0cd3750362f85089ed027be9d6537cdb3586c555328266451ee75a4d7bc6366da5f4b8d39d89076beee3230b3d78a535de82fc8dc83c2e60c645fdb5a1dce1d923f1cc1e6546b24380a13bea5aae7d68737461172d4bca2ddcd6762c8942e2342b03ef4f44b39b2545470d26f808bb64b36636f9b4354427d861ce712f6a35b240f00aa170b1dc3026b65c644ea335d41b0166ece634079fb7f756f2e529f5db01409817e1e60bfe7607008a91b8768b97927c40d358dc0cf875a96808cf2550bc37759f3b4db6010d67a910dc72f2007f24b4ad424b08578b74ef8c4f6407453c513936d1fa491aa782be4b01ece96b67a7073bf587f18ec0e1fc49a2cdbf8e8111b2d25634d18b1465fa4076bca687a1a404b86ceb5fb46fa7f7c3f672bd753230461fc5e8eacd3a73f79f8dc118144b74980136f8ee5a3df19d41c36a7e78dc9092c702b64d8a9ed1d2f0d3c026ae8fe3f0a4e543c1c6ae041e4bb466f6300a7063e1919efe7ad8f290073430c201d7c421a76b135e206263f90ea811d637dba2e9acabf7cfd11d8492281c256d92bde3ac0fc75264e221638f3da7fd22fac8d7e47ea59152307c0099e67136143d06544374421a00c1f8278b386882292061a750cbcf1112e37e8463b6c88e60eb4f423743a9aea8aec7228991e9e63816189684d9e6d00c277726ed3979b60686496019265ad576b2fea072f1a790f9885c5620b0f668fb80b9e0239d342dd782c6e3477620919f01f2c1e4d99d0230f7df84dd2385659fd064861fc4f70c08e378002ac4487fb8edf5329c37abce1c4840c45250bf4c029eac87e5594eabf6f135315e63187350a02410d1ad3e2883cd6d97fa34a1a66d4bfd46a0e05a7faf493ba28cdd2fa93fdd73b2237185aa9f8bfbe2a91959d46d2461627a4e2bdf056c4fe5173f4459524ba7d34f1076312e6829d4e487c8c893000fb78452dc9206bd48771e5f7c9fb86d7f94bed2ec82556d6f120466ea8d938742072f9cd51f6f05dc81c80f1f8dd4b98d51f76d79d0237d5216ec4572503d352c65a173cf45428ef3c7199535a9a22ec2b539a896460d71e3b22541c44b77c340f2eb852f5888d294865150e9b8a30bc90272cd19c5db62631367816000cab84f465bdd3ad8a1e4c1f6fbe00b4367d4e0d10ac6c8baa97b277217bd4ff5bd6abef66fdfe31a3f1faf678f10c9eb572fab829f710a0c106b6316eb430f90db384b913f0b1c680e396e04d8aed4674eb3e507fe529ad19b34e934c30a0eec001e8c56cae755adb3ec6f360315238196fbd830c8179f2dd32d2c75f1f79b18384a04f71b3b3c776e375401d364de8611579dc1223fb3e87f5e83a7fc345433aea90247004c767bcf50c2809ba10137fbb28755a6361587f2029986511b8c5d64784f7398da6a2b1eddfe330dcb7331a2b453c6430172877c85ab02d9f3332512e00ae36e8260dea7a3c927b7e285bd85cb390560bd6f9a05391fd1756cf11baac9102239996cdfbc8ae150c85acf5f0b68889135e24a3fb05b0765629f641494d4d281226373fc6e5958d46ec061ca79b0d6020592417d135fd2949f4dcdb4010a0a5377c1de91138b0060db3ea0fff94cfba1b6adf5c8d9b05b728f20a463d8e31a84b61e423b8f6725856e3f57ce0f2d72124de3f541003cc2d7665c00242f6449c7e42c49eafab012423c94c906f7d67e519e9221bce86b94e2d13991eb7759b4d2692fb9e2e3972781f9c8827b0a3630b33a61c2b19606a047776709d11e36dad2cff69dd82c8b6e0765603cd026e6175517214a26d399879030017b8c8d4663c2e25044ec67a76955cfda1c35c9d02082819117b07f0e49a68e3e082b2fd18a143c1042396ec50280482ba90682ae39a02e01e1e1a1dbce1406ae6a95bf9485a1642061ca2269f156a3a8088aa740292004780931b36bb607c199bfe2d057b0236ea5954cfffc3d74108b4e09c3337cb68ad575e862389b301996677755f179b4182ad40e4523cff0a58d524ea9bfdb01dcf96d95cd98859730c5667663a4ca020b1dee11e884f4570a8acd0b29b379a64b75945f5f1f81b0af94c0e575b99bb5b8abbc542e46e6b1f25b54bd24858272abb021d94929511483d28e72ba263330e108bd8208ea77f253a9b2fc452b63d528dc764a683d9360ba97d04bb863f7c7716a53d437ff863637ebda6099ab20a78166a489538256e3556ccc90bac3bac051fb8aeac79fad27ad438d63accd28f5c877dd1f18812af3bed8d67b33d90f04212a1285261b7f2103ec36a70fca80227a4d96cd5f362720d087398066286b86528194c6efbe1bd3e911ed1b483dfc8438b3f5717fdc63674ebcaa52baf078d3c7ccf9915f470233de4d29aeeccd86f18c5236f5d212f9d104fc082303c918f68ac0d39b445b24e191d1a342b2c47a73bc7420f2c8914a14b328865b5f3537a74620242be9fbbd311d5554107fb72e46868bdf67ea1bbf26894127d43b367d937a1bfca2905e89c0a9001a8cc2c66af40a5fd1eb04af8161cf5ab53b13816c43cd08798c457449d515a01ee9f13253c2d623ce7b0858a8158aaad345995ead158c6e4fba5ceebe9179b6f0a4be7b5301a187feb8a018a3e46053f6d0479f6e744d346d92f2a965f7753d04bf595cd3f0c83e68eeb2aa3a53ba5b59f8f7de49d6e584f1f2d8f5f457e1f7336313e49b038ff61819268fc1a2fa09e8974f7d0f96fce22b31b1392641d2b0ccbb66d74fc5cfc9970e39df4fa5396b031d21646894e8638019e0233b46ec59f675c3063c22ca12d6f9040dd0c27295fb2c4c336341a827d3ca6759a5e381bfe56c3a3a97b3312fbcf162907f262462876a381f0aa03d382d9b3261cb606ce3775428649832edce5b2c8671df1766f9fec9e1001b90b57a510de2f38f32d4e291a9e83cb1670ada4c79b3de29c0e8db0bb78cfe70a337e6a992b59615d5cf28516913890f95b7884b54b36aab674f6feae818384a236cdb2dfe6ce15e90dfedb554734f429036458b6eeff0157022c55c71c7912970d4af7f824b5bb3e2101cc6f81b9afb45b2e604f758a14291f4acd79f75c09fc15b6b7d1a80ab217561994ec3392d54824f6ddb5259ef36836ced86e8335367d0b377bc88e7ea3991f8859a30ad709721fe96112c641de4c56210776e3209a8c1cea1f96f261285c668a2b5308688df227b572662cdc48351438e09188d34900133278de478c7f4112bd79506c3155bf6ceab1d152cb9fbf5f167ed5be451ac62d2c663be16c3ab433b578e95699a1461ddfda61de8751b86d4780cef2567c335db322979890a0d8249bfbf9bb76ea0747c5f29d207ca4b526afce9aeb6bc2dc37468c09bb39dfad7fb486438c58fcf65c867948b6e6ac260f6d71475f3bc390271fc176e9e04b0e5ba01cd303e7417e4d28c28e1af56ce10db31829ab260dba77186b6e97860d7c2d87a315c9d922272bf2f9377835763174a38336c722623552d74a1a53b015d4353ebc92525717342abfab61dfbbcc52729ee3f402d6b40b1528980d71f82b842225013a79e3df1d45489e78323cebf20b09570f6cf529f30c39578610da5adc14d07b45456e26707d023a4a752d3d511275e6975ee3e7d24e0cb94dc599d1df5d7b8c01b73037791e196e954421812005fa8b793e0ec408494f943ab4d9abe32fa5120f45c0f6bd3e6d784575528e2c73db52c0254b1d6b497c47fa3b8dd1083b51c49e0f72da4404ce3bd1957e93f722c2adda86eabee33d7e58c107f0f8cb3e8081238def1d004a98c4f387ee01c70ec1e3851f087daf0f58246fe6e6c2ec296f9215fd6f693321af25ee26ca5c4e7f20d0450d72ac3603d213e5138de6312b2735087fe93b8158af64ce2e6cd5da04d6ef06b708f99c3c5b122b5c841f936a57194eff64cd681bb112a2f221f7690339e1e97dede834212fbadc28efdb2b6f309c7b7adb2596077815f909a856e55385d0dd5dcae9823fb2902e560ec0d42a19cc3c7a8310d75f77f104d8ef2a787ba12fa41efecea4451b3b2c6b54ed164740cef0dc196ad06aa93cd4bbee5a2f78e94d09c19b0cd717718295be3d43b365f9b368dfc5639d0a00f1893e0616a840f34c7cf91cab544da6086a96d5112d1310c53cc50db04d7a4f013e7369eae15ada54caf0c6b9485c08b586cdcd33e011c3762d40dae2324302fd56e4931e1c43260fbc80473c4c568320323cc9e4b77c1faf500c435e7f082286f2c40f2df0179942f4ddf0605878d7283c05ea90f21c47d9c6e3cd0f007b8fc55ec04a88464fefb65c780f25744158d8361a217a1e4d790f0ae9f4d3e57643796cb5be18c25f708cf4a0ec6b2c6bb1f7730a261aa609e3ab463b7e5c5b1b2f1a45776dd5ff3e16d7ab95857d601ac589c803a025b05de08a6695a0022233e81072d226b5fe78f7b220fec63b8e60f59e00f8daa143096be757f73c95df18fadeae740b8ef40f8c4ffa5245ae235b05fa76c0fde5f146cd68673e5d063b736fc7075b16fc9465550e9375590e3c44c5fcf3421e1e1b141298585dd94a4d7b1586e47ea6c845079aefe9f487996024a5ac796013f8554f530c9151ab0ec00bc01889e0f3baea03481423f1f7f06379c8ccfe7a3c51711b3294d2b35a96b274d221cc90f080ce5f688257d8e3b9b963a91819770c3b4712775aed777361a2213a673ce7420b964702611c4057b600144f355c72af2a810c6adf1a959256eb35db87eeb4095f5a4b529f8a54e1f9442c5c02293e042f710f19cf829c0efe4b584c521bdea4b41e11dc1121109f2d2a706512c670d352cf5517dfcdd9e2f65a50ebe3a0341423d10fdec49c0cf19e9047060dc903c7247a0583c6f58482f8f41bb7d125bb8cf65b76e4d5910eb5c2634a90eb2c2ad3a9763a6a9bb7da19569219307e3c3d3bb42c0eb253e89cb689bb3f9e550c683436b760b8a0ae0ec07ea23a68ab3e34ffa18644173bdb269113f01f2088c23cb6d61a06c7dcf5dc623acf2ff6220562c7ef3e3edc51806f12def15b517111c743997b6e9037fadb9662a7520a0b1cb41853e70fc7011707568a1917eb998bf12908ec5ca896f3ffea1ad53e072d85e1055a8b5ca7df71bb4e7d3a061ee3c530ee987b130887a450b919061e2aa900d7fbc7ee4426e8980879a7ab242e06e2321ffad26e4e8d16730124e93f1b701b0782eefd1a2ff5aa28ce7c7360dc807fbffb383e237d6f896db07b430101a611f6735c5d1c03fc6015a4fb3d2ee549687f5bd5bc1ecd0874ed9b70964db3a82a748d6ad337de9bc3f89953c8775348ac061c3da32b170cd795188f7e6c6513c84c26b2bc4f1c9f5df699b4b821d0ec9a53c390300f4d565e81923e1f4e1d575dac1c159d5f8b5ce97ce0ac9135c5f8660429d1302ae2b8997c103de25b4154ec0fed9bc21a89f9c767a7b42f06e893bc9ad81a244ad9cd712b51e68f4e877242cb665edd29c9b371dd66682d2d776d9b5b0683cc2630a1e8ba0ced6b5c6978ed19f7fb6d76496d9c7473fe4e7061bc5d407d14ab02a61c9bc576221c49e1318c1184ecc972dc12a4732040992e10a7a6b070d4217e23f0bf139632ed6b7619ab5a75a00a74f4eb656a7037e2657c922ae23732454a540a3574abdc080d0110fd06943eb84fb11aa35c3a8cee5bd2259604080b345760f6076b6a95c816e4576a603adcd0444a79301c8fe91020f99147d1730d160cbbab5861c9b31a471d45c06e09b169510b24467124e83748a117c62b5681d64728f6c74ec6a4e75b1d5e970ed90b69255d15d3556a7be327e9222ff2ddf30e7aadd44ea7cfabf063893f362a6600716a525f7793abd44d5cdbee37e8d3da38106e12bbae5a11f54edc9034d4bb463e17503b5f828485302786f181bee3d9376377469778bc1fc46455c56f3b0821176c4fdf6667844974181e6bcab46c4bce4ac8974c02ddb7d36fff3c28b60b93cf64d9156f0473cfde2ed27f5a505410f809f72403a06d194a064e2a98b7df41f3759b65da56dcc9d768777ad45d1124c310bce041186fd0093fcb68519d68950d1473cfb5ee36a12d2db465e8171158e72999780401ff24fa6c88e9d0e1d9b2465df1909af5170ed124507b04ef910b154ed5497f1c17bab51399236fd877f9af4cbf620f6e8a045460486622fc3511626c00e149ddcd9c8b37db875bf39ff9ad573547d0d103593c2f0ce02c4f67472177c103d795b0d27f22d7d79302a860c04eb9ca317ce13370591e78e9adc9da9f22572ccd63dde85807c7f2a8dbec3fd86ca27a0832789e58716e8288c8162ea603c88ea62ad1dbd35e233843d4dc4c465d50554e43e3d29a472ba409a4a06f0f67b35aeca2665264395855a94f1dd3b146361ae693821519652aed5675e478fe4cd723df7ea05b0901f014ea8d284b2a580e3c927976841b62c07934ab5725e12fac0ad9be4dcf196ddd185d91d573c27418ae67a7e584d552f78240d9d8a256160be5c6cdda175a3e24249d5e26898d4bb7bf93a8bd3949273587b6d010f3467e6f7387efacf59a00552984c0e6762b7e108c909836ffd42f9d9f9853608a2d3021e00f4cfe62613eda6cab6b4b77bf415c37e09c83dfb46db849acf2a2b96035fd54e2c786787c52d5ae4136ac971c13a02507d7566f5300957d94b5b56e9b200c76679f5987c81d4471372a62823f4f9b3fad824e77206ba8e25d030c320743b59dbcdd004493195dea92e437289e13c2bbaf0be3e1917c96d3463ce4cb2a76797a75c4c5614f202c3820c7f6fb5d308270415182fc5f68d2c6b9d202a8cb6d41e495434c25b1230bd0371c015872647516bd550c7bf97526226a73e4dedc2afc71f8246f5f835bbf1d46b1c4426778abaab7e699de8544de0a1d2abb3e3f2cf40c208f604ef42a99191429c1aa391d450de0716a3c3b2508c3b99abea75f7fde1abdb722d717069ee24c80ca5b8277453b6fc81eb1962f49459824078fe90dba9507dc68f13f1cdc192d781045a552c0be2006e8d8622c7c719023c00c002e35a539caab59f0357b8ced05831e1f03a14564486ee3256df7335ff6601b5b171b5b446b0bdaa666ceeb8b5beb5da8656f6b3bf98eb663507f343d204618696917fb15d7254b08396101857ca8367d54243a9a33a8aa5963070c14c0e7385219aa0a8c198d7f74458b8aa46fc31f07494a17bb7e4c62ed3e5478d01837485128ae6bd29da963c75cb0dfbf334fc9271705cb09fff4d1660df8cac514af5b0e43397cc0574d6a9f5321e730925c46111d6118ec94c0adcb22fb3b5b20614d520aee026ccb8a7e6564d54921f35f2c4f4d47588a38b75dfb1947e35288c5c0b46e3a3b805eb3dca71e4d77408874273c3114f225f63de5ac70f9acec922f12d66bff902d9aacae002200567ad0627b7220a72074d29bbe30548f106506ef15ef3a5f2b78fbaa28213df348f6e66bdb0d7e3accea0e9d03cf42c28229bd1307121599c0d0720c91352fbf4d20ac37b5164cfe1933dcd51f6262fcba3a27fe642a05a6f480d4537f7434ffe53214db83860b6dddbff9d3363f795e6e7751570d3159241b07423541f97ea5ffddf0ec4e8677352fba21a430316e4af8881af8dd220eb5d8f1c07b43d52be44154d4594f8c0e1800e2d8adf04a0d156672d136ec897dde14c3eca339030e5a8f3d63dc5c1565859702f7fa4a605bdc002a1d49589e2fccd2b26d1379b221fdd3313c2eadea728427b361156e7d6cb36810a20fe5c44e2e6d970aaaa752014923fa2618232d2eea485e8ef400ba5caab9de8476aace170ee36a9b45f41c23d6b1aa3969a38470c51e73a7bcacbd2db43bb46386d6786155e31734b991e8219b7e46bdaa7f0c4ec2b0b66ae1892b44a0974f81a980aa013a498f4cbbb929560795433af37ad7324803a1d6200d7f210f5c94214267781b2dbb080cf1a6f508799f9bb3b90eae1b917e3752dd7fdd2cca6d5b184d4b986ef2a1f1c88d34be5ef166b04056cc2500ae78b2c09ecbf953dedc42834bdcba3b380ac0171de68d3ac269bbbbcfe27c696ca4393902a6f227e013f8b3f3f21d37ea77fd340f3d83405aabf0ef15f43d6de9679080bfdc3c7fbfed9be3da305c5fc1704e8aa8be186b1a65c3213299e414d78acb8c619c7838b37d7422a19f6576f8b04f79bd38e959800364db60a24d260886ba64fbe9c15ee987d62b49f6c97b01b2d67db594a80e8cdbf29afeac67112f4e191be5017a0e110f6fca9e42f075c71624ec873523622fc8d81ff6265f3ce03b0404235169012ee46ca625dd6f31cc686115d05499648e8413e3d7a4e73770acea623deb527453dd405d3782c30cc8f5ac713bb594332a978861c279d676fe353779f20df348462a3d0cecc3d210b8dfe31d088a044618b78dd574b3372607ca5a6cb93cff4502642c10778747116998a9e395b86e78c6829ec480e12c6e0ce8eb49e2c1367cdf9e1f6cb614be708f84c0f2a3e5444f5be1a5379d3bc41d929a1d607390f4579ed3fc0866fe3d4ec42e34fc2039cb275d6312fee400215cd901fe50321ee32078188f76e14db5591ef3736f06c8fc349abbfbf082098c63b29fe268fc8e805a4b148308a9544556e693e2288c6e9c1105c9b67722f29d6e75d3d87ed0e2a95374cd24f244f48b458b5af611d99b2820c30c923abb0883588aeb8382d33cd9373d36b4be4aaacc113e70017de9af48275548be238b1bf16bb63384d087f2e74d7e40b0f0af189418c17f03b5f8f99038cc5427e405033c224448747e2e9c9830584efea8ff57773db3a5e30b1ea764435cb46224e633ac7afc7153985ce9165de8ccf1b807c7c8752415cea0dfcefc63e33021793a744a245f7b5b8f55ef656345bfdcad4953c36a1413b804fdb2a62d8a108472f57068737e32e97cdca834334f94a3e00eb1e637f48b8c4d2d4e21542ad1e6998c27a74b29502f1769468d6adf84539255863c262a4d7d69e31b4634abc2595170313f27ed57085ee1fda03be708d44e5d4b564ff3f390c055c197439763c22ba0dedb103b8480527065f82d54bdb013106b6d08e857bc9c3dff825111b30abb403324072ec48ae1cca8c057ecbd6d981183332b0a46bcb7ddc12d3afa2d9cdc904c92209aa8e64ce18c3c3f689a4f806d15bf7380203a7810241a110e3b1761f31c38612c4cfe699de74a697e04b1bd8e52330f12f0a34f78f4cf423c08a5e35c62cd4c62eeacba142811676aa4f615d6d89f6092d8b1fc87161720e4bf5a5973d23920d2fe1f7cfeee2416df3ce5d3feb96c646944753413c9d378fb3329aa31480c676ad6e7d4f71b5f5c4b65243c0315e02a52f5f02e5d050c642e677e343b851a27484d6828d2986c4d1be717515b688a0fecab02d8c6c53b65377d5a6f62d5de39b6020b495348a745775cb7bbe3a23f680e71b8707dbe9f7deffca0b00d235044f72263a7a2be443553474f237cf6496bc20e9d0fe2914309648e5b57a7f73752f38d4cf9fa19f4344a123c3af13d061bbaf38de33ea0d866df5a0b31199bdc4a815dcf1155b08e561a69c4d05508175e6b89ee657be56f524b19e55ff23de55035f1bb4f0d17716b7f1b372b24f7ef28be533a705388306633dd39c334d19b584e159a634cc75154e87c1c68e36589522bbca29e0374fd42dedee3d02252c950487085c56dad8a7aa58e88d76bc882679a73110e8bc5a43c12dc402aab21766b4d334eac15b03f28481dfa74eb25d615a484c951bf453b0e15c1b3906c5fcf3906f4249f162f7d4a4cc5389134d0af38b35686275825ab08f83f9753fdaebb58ed346ff70036fe2c011304f90caada44ef8522e926581e2aa12d9756c6d14862f7208197bf58c71654b2264421b2fb4d65524182d1a57f6b164457d39fa8662d5b67ef2c2b71046abe0c3ed97e624b52d71a44e6ec35cc6407fa554613b3e5269a8bcc18f37f6b356ac40e2eb4faea08f8509815f4ee800729317d03b742e965933de1c8fef6ff316b0a721f4abb970d98b564537e5a7c013a815795dadc3e7ef7f108255c4f8672f0d068f9e2f54908d3d303be0033266ea3ecb0d0587b151d6f959b9db110dc1b1a0839dc866ed56bdda843176db1861af0e12fe9fa15b63a5b2a1efd3c9c1861364ff60a3db0137a8166f61d89cc6b6d4037e887cefc0867aa316531802651590f5b3bb2a571a054e549c8e06a50587dd4782b2fbd856f522508a4a63d82494779bf1dea0d94b705ca8d0b6082dfc27502fcbc61acb13f51d01c4801987bbb3b7e6c17ee27a9a63a225528343814fc4fd1cf638ea813d44020e9be8dbf8b3c7be7a0832c64cc1453b30373b46951de34ca4062a2f1a7fe6b692832c114e6846918ac4d9891cfeb04bb1041ac8689a972c8f2c27f289a8940a117948cffd567337f0acd169e76c505545ee7e16552e40e2d5b75f956fb6d7eddf30986c5a1fa1aa80d2b9156c0103fb7c82acab3a7da4fcd79a05c9f91227a794b3aab6d3f4009580138582653b86d4a36418ed1a3cb7c32a646b4fe628539d159f65e05445308f8cc8d4e907ed620320da7d6d2b14b1b17b6dd1486f407098401d77fb6e98d7077b57962cfe6f34f839919f3f6a4f31e0eda474f663f8203c583ca8fa657694881365f1c37e94c303c726e1225ebec210eb872dba23d0a3634769d4b1b63a82b30d172bf44d7e72471e87427526ad74f71eb82eee58da6432d28e9c04b00145fe666bd09a1539a362fb2b2754dce7662b11225cf1e45ba5ed5d06ce311d82772032bf346d81e0e1daeb3e268bfe46f04a04b725d26e47e2adfe4218d4082b75676bf88863d42c52fe0bdde959dae610f9f987ca2b57a671e5236d943c064a22c04742180930abd5c86427d6805e98d7145302cd8fe5a0c05596ad8741c09ef439ff56ed7721e836c25e0e38c0300e73c3db40170c735d25e812727293149407cadc5f804a79b1b2653404de18880fd5952153868077f7b2bc7cd589946ac9e6e205fdf3d08e29528d0281d87e8f1d500d63128e3ef288b2c41233dd94381e000dfbb01e85f3a6234ab6098de61f443475ea73ceb7b4580072c4c041a5a441b50f7e156d310135f11945c8e4fc06a8d35668437eabdcb7c673c041c828d7a425ef90a51f2e2ae6507d7d7ccd13495c955d6651607815f7878fe92413d75f85522d69c9ec6f52372492171f21c6bc3f0464273eced69e4e806ac58ab1de790a75d1790ab7b6bbbdb72b1eca8bd17ab512f85acfb9691fc700364797f07f7e62d7ddcfeadd99f5244616fe00e92339562005ac34d839258875deb5aa0f6b89e017f290a619e4d7e2a3f2c7511d73c6d8529c398d4f96348fa04c847a728eb4b756fc07bf513b472fb6cb2d60c3efb1a3d5c83d9cba07113141a9f699d3899ffb67deed877773524b941439a190146dfbf33490ef2842f00f635372b5dcca94c9a113ad52a328c4e402e9d39eb28745153202c5efb37b025dc333f019a10ba360d57f5625fd05cde0a69b0de1809ea313f1b27c25eb4ae9c9f604fa18f7117ae17662c931ed6b1247c096964e88e3de61e70bf4ac7836a3efa58c3ff1efe6d7c815ff57e357d5015cd4cc197e2ed7ad26267841f3062759ad1697288664ebd84891ae64784bc1c9cc0568385bcfddf182c6a9e797e73521c2a6fb060f43851817045de02f8ccb15ab4185fdadff0ded48a74b4d1ec3603fd6c371e140cbba7870501eb89241def06e307d168eb88c2c66e24d67fed226da7481e95c1eac56670c029d6dddc67f8a86351ede4659b11e4741c8330e5279ae3936cd242872e1c1da161583da2605d29e32d1d9b0f520ce3304e4ccd489755e7c30d4a703a3a30916e30bdfc0db0782a86584eb70bffd3415f498d291eb02af6f43ffe4fe91310570275d3206aef297f2a76ad5e1af20c3d1e08ef0f51f98c41fa3af8325137eb66965bbb81d2f4ab4f720cac6bfb3324fdcd3b6b6319dc46693a46c97a54051ab5a1797b94257fcc4e010f0070ebe80a99b704a99791e06372345ead9abb706351997e4fc55795cab9bf190abc6baeb049626f34afc5854f88826770f64009835c6855990ada7bb3f3d33ee48d54e16ac33f7ec00d3cbc9a84f44eb9d79b35fb260642ee0a30cb382d9a38d0e300d1bf76b56a5644516633d9a321c9175e0a8bc5ea712d560890cb805173c38b3d0db20e78409365ff3e6429a81ac97d3f1817c7d12ce4a2f58323c3de1afa418b58382c293b60dbeda6add69b0e5e730d1f9c74430d1b457c0147f4c64d984c383573d9236cb33c904f9bd77c1ca721bc6f3493c269adbfd0205703e45b6dc3b89a51f9830b69e84d0b6477b27701ff67f8e89dd72a0fa2e333a944c34fa9cb44a16fe9915fa4c8054b45b605350c5920566bdd4430ed8e8caf1650615154624bd044ab191792f7624e5cdd903b58e7c0fc9ae5447a1175b5e15de2480a1fc707fd105eec3859393f3009c74574c093dbfbc017c77d93f8759dde2f00051c92d845719f6b49d6d1c92a1e62ab6042a62d0bb40b2671e6da27ae8e39505fda47333de0daa4612229056596e8401cd4c46e613f97a11c4a0b84967b0de97fa11a01818e138204d06acc70c1f2c14288384ccff8b4cf19b98c6e2a34cfa53c33397d845c53ad7bea8b0977c3247107d0ae7d6051fabe571a66fda7c89f7b5effddb5add54c2a1b4a6105b094a560409731ca83a2b0b132f200224952a40075fa43e362807d2b56928eaac3d17223505c2115305b7404642372c61f8a9d9a291e4322927c4a7402ecfd501f4c90323fe00506b9c66c7e05e8a166c2a466cd4e74172c391fc0971253ecbba2db1be86dc078c17a681f9c4d3be356251c4ea27a3001aa3564f81f206df40cb22821e103772c7ee2d7b7486b4d858bfce942d104b6be2c223ae22e4799e1e75c2b4f765bc55aaeefd0bfa217b6e97e167be3f64f3bee03960b403658a53ab50a3014c003f0d0c7716c1ecb756144d8246145c34adca96bf58a53b836aa82074bab67bb58458608afe6a5465f8a940a38c902af2f204b94c2b3d6eb0d8ca1cee34c0ff57b24357c2c17009537630b7f1f5ef0ff582d2894090381f46f9bfb2344d76313677579a3018023b8204aa2a158a83350630101c073929c4366154f1cae384ece4767722fa7f1bffa3aae03fe84ed8b6f291f07e306239c09593d457d79c683c0120d4fc4e8f41b3f6293dc8638f4cb9c4ff36e6d38f8bf2b2a4fa409f7ab0177621bd9538af58e753544057035954ab8726cb7810c1d04d73b92ed775d997768662961db46d9ed121666cc1e9537b0db4eb2fa358a60aaca35525d5205d8c3f46b1526058b193c1a620a8e4416ed39eb6fec7353e0681658206ebe09eeeb7809577088ddbbfcdca4145b84445075da687348c1f04b17d5d42b7e25f8d846094e6edfff35a882bfa67306674da4a0697a7ff54e8ca67297bf64 + - {fileID: 2800000, guid: dcc0ed9263c0d524aabeb5f4bd75ecee, type: 3} + _Values: febc7fe765b0407b8c8e90345544ac394753b1a281922a4e114589015196ee4776dac15926adab1e4620c9a232d1ed566ec628c1efb3c0693a954d39e3d36066f7d0f7b20b638d2be0a95163e7ea141dcc1f6b7591d3a73e949134651819880de72e3b2ecf0dbc66f70629b01243766dcd4f9bcf7dee1e4185b3b64b611e3b6ddb9f15d3e773b400f9c3036d9fa280501bc798c97db9902b9e9549f346d5832eb56db8a23f89a7648ac131e2db057329631d4d0b8c6d0e3ae43753f6ee4b353bd2e2253bebcd1860a0d4110fb94b096d897f3d09494eb63919371d8cc711425cd33b203e27204208f885cc092656e150e128c851cd967a1faedeb3ac8643a066696941ce49905954dfd41e62741c9c0aa24726e7840a0343e00326e5bdac65587954269665689864e713ed6a2aafad56a7eda6d48a710f5ea039098a96961a33923a2536bdcc8f3956cf3dcf0690ce165927cb38a6b5d322f7c42dc76a0f38733adf6e4e962d5c724536aed9f37e2a0bdb44464957c307518d1d6d10b64b0a6e7bc20b8ff906d175ab6ca57cd054ac25fd0313370dae837788d136e691bc77608932df9423e3b3338526c6cbf834351a137c1a389017a534ffce0da47d9d35274df6eeb94b093a0b8594cefd75351f440851d414a23ed05fd81393f2f058b123a51281feba84311bb826be24e5a3a934ef519d2cc8208573c74de13776471b2de3aaa287b71dfe7cdf46a2847f54867bbdc7e042f5ddeb7b72f23af89a976e0042eb07904531eb0bafe6f4f03cf60c72c6667aae67d83705be2614c5e205e248a312fd7aec8b041ed350852f5e12e7049d558c480b488043b79862cbcac2a022982aef40f444f346a79a2ea1059b0743e0f8591ae3c7fa2d3130b993d419467c3a1a11a336459a24f05e953a20def4426fb65fc8a58b1358f90d04e060c5c571d2b1d2df9baa98256d81d67ace3ff30fdb03fd7487f0de3b24b60f810b51bf247fb2b1b92bc13b5741d788d13165e2476a8c158cb8c388005461687b65a3ff1b24340358a005f80142ff99728e376301c37373b1d6f9dd45d64ff173d548421cd7a3aefd628aa7636cec3148a304701d0398480ecfb2ba1d13492eeff76bd706bc7d4932e661634ee528ba16386a5d2e222b8a926faf1324ea91eb185bb86b273cc874da44c2c8630469d658085c1a5814ff32331eba696b6f91e488b384552cbd92da6ff683e95e632696d9866c2d4553bcd3a41560b90932df6bb3de40b07741fcea64c975b168176f69bbafbd0e02659edc6f57fa421c4de43d1617368022761e988981c87c3693c4457b358b4774d2694e3f634120464531e71ac865af2011b8ba6fdb7a7f63dd5a236d4b39183f9dc945aee841be3402ad314c4f68000774658ced46b6504c174de2429b726e0c19a8b791aa5d085276ef6d2e49321474591be0b0c606851a79f9c5352400cf703e2433a7b16f5c2e6edf6435237e961b396ee87f91be4612239c0aa4233e7677e7a55dcb88d4107f070a9e49d5b59b7e9c41c82751f6647d3f927f2a9e42277d89e9df153fdca55f4b6bcfff42469d23fcd8dc3077c189625a00baf3af2a9114c7d35516e91e8c796f198b64faa45a7d76e4cc1385ae6d5597fece2223c2790767e24fa936e0676b0de32eca03e1ca4ab765c42d4645930bf57524eacefd8d1cb65bedc01984f90d2e25547c193f025f28bed33a98ca8b20b0bb6153fbaec60fabeeeb580bf6ce3aa12e00df0fe90e34887cee722e374a7fe70e0f5e22a61123ec64d22b53a95330f098dcc6cb6a2f3853d2248762c7c172a46c3f1a052d5d041cddcb73bb398821d6427d6aa47b4c51c2b84e0a356679245da0771895c7d53dc4281c57ca5c0c735c465ea5452b171e5977a3a788b62300769e73c717ea69523e1b1b6350b4123f2055d2455efa01667d0c20667fd04e4026c79132d15cd5220a5d361bd5a8be626b68deac856f7d7aba654bc01482cc6abd9562f4c608cd307a0b62c6c47d5753ecf0758b0a83ed7892cc0db4277b417c3d600f10f3774c4f67e5b9f6dff95a6fc92d2f12633149407d249c0605e7f6013519fcda7298b975a4262324caf69875d8821306b3d1e76f8474ed588871c418a6f4bc4de93852016a5c947150da992f0af17fc19603432768e6fe4375176058af2698f75295c034652546000a1f4747974a8bb1e79e1c627676cb950ee7484a337fe927519074615183074115cf5849624826405ceebf10f6c992369faabc7e24043374cae00a27bfed026ba65e77591e81f6560d89a621c206ce7802c23e58cb6ff915a9200f3607a97e250268104af8cb12e08f8380331778b4c0616e04788e4ef72839780d3480bc0fc008227d6a65b0a365dbc8b97fbddd5f4c93403c39f51e66c109c4892bcf8152ebb588515211c625b9c6e3456d1a197deffccd1c6aef77703b386d535e2778955975cec93474f3a3a69a0aff279d2c24dcbe87d7629dbcd92df98c8a5d8c391ec187611c171c4d84f6d6892f1b78499e0b49769f5050f8bcb8f59c3b0081ffcd2cd63e5102b6c306f3f331c7138dbda4432b96a60327908e715a9bdd7fb3d55a4a23ebc6694c1035d377e76274982a9943f3b4ea029432abf72c06a56ff67adc3add40ff1fd9bffc15f34ce503fb429a233be4797cb7f8e7ec20f59c7b038682fb81b64821a93bb1f1b121fc00fc74dfabe9e87372b8371d764605691d4f67d2a4838200775412b3a95892615a31dd92360e99d12705167caa00d52c1c785e963ca485fc797467fffb9c1ccb4a6887ba978dcdf14a6b5556660054877ee69621b7289dfe541fe63d59662974211d38bc87e56a7045b01f5905239d8536ef7de1333d8373368a6678a68f98e440e2358438110e634ff899f8f7bb07cf7e610748e30ba75e653b7aefb41de92a173c1924ed194c2501e1313aa48b7c7b6f36f745884f003439d81efe961fae321d3defcd2ad44368141db93ac31efc0e49f65f7e25a4a1c83ae5ea16fa4e8ee2706357e17b49a6430d70ce59f6c407a72cd3b85f40cff28765289346e92c6dc5539cab5fc61b92ff645c736a8c044100146dbd31f911dcbf7130845c2313d2c62294ad5a19a7e0104048041ba377059e69945a57e99fbf6540ebeef69fef22772ec67307a819189372540ebee9079c172a1a0c704785237d53ee65d146158eae6a7d4ade03fdf64f7ac7e49590007b3878052084e2b230a9170ea4444cb9b2a23a9fab924341ecd310a414f29647f2ac72d3a6b4c9ed6ee253f5f512a23b9c34787830d053f18345194c7386c622405e0151b77812fdd94d3038c0c7c80189b4071f86f0883dff9c509f64838617e3cf345414f4f2144676601e60754eb4f1e529278da79b4fd5c451e5d74e9da32cb7530f6c8a126a3e0d65fd51a59e75ea04528059aea48b6b832927baf2c20826420eaa225d217cf894167f419dfd2f26dc30235ee2b682ed387a104b144fb4b4a2280e9747974826cf783a68db33f77ea601dec29eaa438c8c69a528edcf1cbb9e341c39116721bb17028e6a7b1912058372f3162e76534c6c7d0addf11f38005b7e3659b0cf70f1dd66275ee426ef8da85fa57bc233e9148730ce9371feac373a71f203b09449ad1d0139c750f468458e687bae8543c2d76a4a1e1efe237f214611db8cca1323ecea5299c36cb1657c9877060884feb1f7af199965b368ab4080590f61d0f410a18b669ad8dd85441cb05d7b79d7775abb3d2cc51b547760ad0125bd394038b37277637e1e65d81a29d57bb555ed316909ff52db5cd00bb2ebfa14d7b7c90adc78aa07fd8b05c3a99bed65b9273df44030434d3bed1310428315681979016260ca9f3c5419d00bf03c03409195ae7551fa2c07fc16d0ee6499c57f5f9123dc62af3a7b39865fd9a0c7a377f2547fadd4a0171e4efa6749fab1d811df4f6a8260e0a21f5b323cca9a5267338ca603efe5e8554186fa7098b70f7f7851b14710ceda282e0960ad5e9cb37c059434d6a1b4c8f70907d7049a90f5986ab3b41c4c9a77014e822b197ac4085a2c7e6b2bece5212d1958afe95a213c410107e8efae3037601ccd77e0765183bb028328e704de7baf2ce236f4eb8da62c44ea1874dc19abfc4acb481e6e41b6c825951321b5dbb9207d68e33206bd8a7174a4246069f7981b2f253139965c41eb6700e57f5e371ddf5cc70eba0321fdf8402a5536e3a9a0d202f8f190aa808921260834fa28f4ecc3794503a1e9dd180e27c8073f4e8830ee5eb88266458d34db3e146bf4aa07dfca3c92bc29ad42bce020e3687188c96faf28b9631e88acf6f9112763fd490db82f18c2fc4334f9bfe37562866224c353757de4e29c9402ad16774ac42a5a46d6d22ac7a63a33d484d0058156dada6c2bb12bee7f642b1c9a1515548555a09289d5567f6670acb1a07c0fb7af86a800352f05682ef0036235b014a51364d4b9c83f4b516d637538dfcc3559d2d58258cc364e2a2d7091671815010c5b5532adffce39eee7619aafa26240bdd376fc7703a047559607a2aeceac1575cb45c59e348916d9ae918c3876c7446b8937f7af3d3e40e0e2eebf7ac52373abe886d1704f7c156d76ced7937e3a5457086b1b6486be30a89d1935a9800a5ee2bc117d197963514862d417cd8c623ec8e0f5398c46a127b8059e1a0c98e207b2ff12b8530d6e6fe1b0ba06916321547a085fc7ee48312f02121473a7a58404a63777da04e23b54e4498eadeffc30568e9a325b6c365e677f8b08a37795fb311c51bf5f7f4b7b68cd0ae3a5b9843f00426ae50c7229972496df5b78da97dd4db1a336bf4370294371709ef9dee984323cef5a02fb125775516b19eb69960970e1d8726b24bdb72a40c6b190f96c0c6eb8b1c1a1e8a05b2168c518bf6c6504014be468876e084a6ece7fd4a1f3d8cf7da5906e217182b41d7afa669fa5197a253f50bbebfb7b005067536f6875fc15406b699b022bda8c32998501696eea134c06af63a21ce48129911e88c4f11d927610a6353b7e78f9633b767b7e8396417d3f226d2460b75d79e971710d52c74049187779151f4ecb72b700de935f00ad269ffafbec75482838fb51acf3f913ee02493b99f4e3d4a20e886b48bb3fc43a1b8297bcdb128f507f7f5ab089c4027f0b0821e9cbc1389d7961f1aaf2dfcb8a2a59d158018ae0610cb914f8c7782bcf7bec3cb41dda6e5a4435353c033a435f4c30791c6aa47e69177d097a2ace9a0d73c22507a2166d4f372b9dcb54a45dd276d8373b9fb5fe9c62c9543e07b314731f48fa36ba26cfe245c045e41107ca981963eb5ce6fead6f345f71a97e1769793bd8c0d908d8aab2347f410a17505f561a68ec8752e9ba4a648b02189878605c2983ce75687b537f4e0d5ba865ed51484999052b16d6d85a3ae99cc70d3d150063cfcffc352a1255133c93327c15a4ab176134fd6f346e4d5b29b052171b8d8b215d0c34bd4d7e737850e8ad95f429b07148df6e72126f973d1d575edb646d2f51f8efdff79011361d3f7be0b43f479900ff1f9f050401cb340349dbd81c64e457023866f854a08c6fa474380b0e9577237d0da8d4487f826b887bdb2d00b5b12949946eea57a98439f0361a8befe9923f0f1b505044404d31d568fd420472947f36af28367a57da3eed0ddf789176861572e880cb2e4b97240a854042255abd325d1b7241021c8e0990b83029c808363e27c389a26af07f40c9362f353f24d86ebca7d4189651d540975eaaa76665025d96bc3db6ae910e707a2c317f4b3639045c8758b5ded75301a73466fc02432f1d9cd0fd089e2b4624e48b844cbb9c893198af02edbeb73c6d103e0f7a2a116e425d4fe37b3930652fbecb2eacacf8b94343679cacbebda052f294e622c43fb00afbc6f06cb80ef83615322ff2888fc11785ccbc92ae1b0061516f9231e8770b7efa1e7c2019f7164702685f353d906a67992f2790a7f76e204a998c6b3e5b584a559e3dfd2eaf6e349c372b7b90f9c97f69ecc984b1460b0e8d9c69b28381855dc1aa8adcce679517c2f2f56fcbf39050d10d025191d4990d942f8bca1921b81d4276c3c57c5ab12f83e0c2be519b427ed4467c6f7b28106a43986ffdf360305f3bd8b242b755cc2bc59a17788a937461012fbd34a1c6684775575b1390fc6016aba0d8ca54cf5d5c194c899a5b2eed66047a5b4d0f266c4ca0a898b0b15eeb3efb2dcde9baaa0d308e1a1b543cceec456af40f15a013072e0d256afd670e0e459fb46a760328de5278743f0bf5e8f02e43adb943b12a620e34fcdc953f10c864d79e0b0fc79cb66d2c9d71eaadeddc2463d9d79c9821b674241b9113f6fa3c34137b9e0510436706378a108e40b3543671d1650d1027342971c73200635ded0c04786c8896005f15cae8d31d80dd9a785a3577fa8054df067516063b9610f12913e4b0b60d4a5d59a32567c6208da217adf8fd4e23970c5758721480f9247f252702d09a72ae7a5b6d2ea8a413e71901ba1e8f9e12a2057ad9585f9b36dd5f37a48ded225d3d8a027fa1e2f5ee67446fa7ed38246a1fec7c03aa3de5b020da70e69351fed9263758939cbbd336aa4f12a9204c823e1e3132106c4cc49bd1b81a642a48b475eae10cab25af00da3d397ddc99d6e8307e2404c4830e4673fbf36554d53661f2038842d184ea0955ef0b54d2c10299a1ea222350f3cc34352aa7361321a6060b6c31244ad9508b50884a1a2227275dd6c6306d71420e46e12ad25e233028659d4936425bbf39e7f768e958338ba09d12682103680c717c94c3404bd402521a9cb64a318b3be551a17685136271f4869dcdac74aed4036e2845521d018513f416cfbb7b426f284e4d73a40d79a222f94838160557dd6cc7b2db092e8e0252278a7a296db678452da55d2739d0090979dca72a38700e9e3862f4c965990623af3933680c336fbb300d179f07b73297bce4820b18d81a96981962d03eb0dfc7ab81d67363a1fd456debfa2a79525a7dd0a3f37f1cefc328e0622f0c2e9f7ce0edde4a8820c0345ee2c8790422ef1d45bfe4009b5c5fe3bdbdae93012e0974ce6e1a3d9a072fa27028ad9e1a74c006cf7f75cb13601f7cb33df7ba312b332feb3d47733c4e833ded8770c30a3fc948fda7c481b92a79d072690e2800737245f57eb2dd2d4c357efd4c47642e1e780c8b504376984e77c1c57600d33f543d61f9b6b888f214e54e22bc81f98e22016e1ee54caf481721bcf80ee748b40842aef11a9488990fe789940bac23327050e7776ff124a171e81e6b036f1cd26366e601d015574876082dcbd54354c4451297a13040dc051cf280cd89e3695f3549ce5a39dd9da508a000771ff076b43b1d4e0d27855ddc76e1e5c39525d25a61cd958c74f98b6751c3556ec09a19d369ccf6936ba3c85013f2e319c3613a2d33a715ed850229356de7bc6430ef1cdc06ba2dca2e3feebe6a1b607dea8e5b1077283a66b006596c5ec225525f2c80022907137c8e045b7348a87d945d53b520423424f84b4ad4001266d692e564a1c2655e53f2a1d89e7c3339e1f8763bf0f47646952b0887b7df23138f272dc88de307ba2fbaa6a7c21b6a573aec9623762857cb092bf9cccbed5a8b314a983956033ac6ff306aab9b1e08b19660c2a37547639a2f9e409d15c51042601b767782300136b25b23a79302672833aa632baffd0178ad3169f444d7503b20ac0bb6948033c862f855d16b0a2c330568d1c0283c6c9ee60236af38f20e26f4a238bff1e1434d22d57258ac2d1c48a163065256ef111cc0912f6db67c7170ea30dcc8d26c41dbda7a62ac36eb0f461911f22a1343300690547f8211b1029f46026d7c5053743521e12cd151be19d582e854a589477c2f60d7387eecbe137582ff0cc7a773686c85264cf570014cd33a5405fa05a7288e7e3e1b791af6479d3148b1ad4ead7cf651e71f63fb86616323664397b9196fdcd67e486858ef788491503bd7af6120182e04b412397477fa6046aa4b4c50564ab78d84ccf6e54e4060a2f44bc2384dc3465bc6becd8114b40abd3760663b2f1e587970c31a132149b673b1967f2b3727f96c91a8161518c85e303dc75212252472d6f349c88922a682f08bbfcc5434df851066faaa8707bd9ec7deb5ae1764c8988d24a937ee5e6f49eb262689586c4d9be2b39d86e07aebceb0e79068d85467ab3dd9c0d07458694e094f419f1f4608cbd4af6e35fe42b81339da8706ce0771968dd2c7322d1df1c5e41470d04475eef6dfc49429e663ab8092d3094edf6e1e10c0d82cf10e2a624960cce6ed4d7657aeec90260a7248b0297c48c500265ee675f65f106b4820050925dd89b24942331c2bb73b709528840888566e56ef6270bfe670f6ed663c09f374e31a6a410120c5851ed32166741f3123f81d0d4d5b0778b2b76645c645b6eeaf47fbb10d18c88736a8d1d08e4e59729027105e5a15be2f235d47756425004069e5721e792ec2c4405bbc09d335eb645ef4b59e34569599062bd46b5f3dec5ca99167a8dc3afa61664c1efe5937fea7b7542ba624600c1251d8174d595565036f606041ce4277db04acc717c76a40cf2e2db30b1145c8b779aba9fcdd54f7ef18e471062944da75cc07abd12822dbbb99471e2ba1580ed5d7e84486147b024f4a27001c0746f973543e3f0a9966df9c8565962473226f8e2963d0beff5f75b8f9a479fedd414bacb054299ce61891c2f758fe501a25c36db871f2a3753974f4b3f8033edf1f41bce6168ce1060b7642d30dc7a760392de0981849b0cb11de1538e1af21e3521c27e8bd96fb661e9853034f2f988d346b8634dc5a382a70f2d53976a8245b545f812aef8f1ecf2847b6b09cb41a4075a36c4d3555c0ac1b03875194cb22394352a7514e3d823c75555c2311e9c624296b3c2bc429da0061d50eed07cc3b5c237e6d4a0cc9f2381fcf27744e1b42fa37ad7b00074efd6c2ba9b37a2e9534a86eb8478e571131f35d8bb40afe994db9160a245b513b55d47ffee19bea88f57504d0e295d4b3a226226f5d7d9af36e925a069cdb8e26a8cc0ee4f1a7d06af72a7fd5f131831c713553b5821c2228c5736c73f6e3eb1ae7dd27ea78475ab509737734fd70e49f15766b6787d9a48ba9e55666144360da159911edf6926b476ff6400a6baad9c9a8f4766d4f84930e399b6c5f9df5a1c6129c1d645ff8a8820b23287d19aef754bf1f4221ccce2a9a2d1f256d00f25685aa8508317389954fb40c788d53ea0b755be71dbe3881f94472833640d21683fe7aae2d94a5c6e1358af22bd9469d474214b03618efeb42d380b25c0a3f2bdd35708812a5bd9f1a22c853482cac20fdd53cf42add2093f17194a615a9dd158b492f9f68bf8aa2857496144e635ce8d89f4b78324b00ba55037a84389b4a8ebb4c370104f247c0b56690497334e28e15abcd750b5747404974496443f996de40db30652b5ae4e6578bc3cc244b2e8ae50899e431d5821193784b793bac03bbcfb1099804849d453819e27f1a1464fe46be7e3b6d7a106a581ed1b30f96545478f7038d54c78f626b54ab1848022ba7dc49c0fa2bc2d7aa5e61c01a555154a3c48d07220f29557fd0e330e626d74daa0cd5283a554f80b620582ef2058bf2e500f7ab450a4eb6b3f44029470ebfd18814160d7f27e5b28af2affd4958478544f04ae62e7d93b45a8cdb2e9678c9c56187a6deef66720d1b4520535b506d5aacbbe457c45bfffa7e9e4c0cb4144803ba745fd0fe2674ab7e3ccae95d1911abf936db515d1f7642785fa3714c65a7f903e266190e625c864639d8879016649a5007f914106661d9fe1c579f83035f18e3c4ec3f80099d9793619796f711b262c23dc2545f6eea9c4340182aba430242d9bfa3cc295c1c596b6281aecf08d10f69f5dd45400a478a52767c3fde71dd4f64da70b7b419c79aa7e3403e0f3ace3b112894af204202cf062e1e9fd9247cf985314af497773c7c448813dcb4087b18a8402db6dd2d3021dc3fbee338668c3497b847220f26a49aec176b982f21830ea9374719523b1c5802281758b857bb21ebb88c92b062d730636c363a3d690d443c32729051721fa32b60dbc8c14be295d38d84e7ad0ea2b9a0e9491afa556a94caa36a14352b308629d041eec15f0e51b134f235120b0fb42bd3cfc44404562a34906d9b490a3500a2024222324df840dbf768c663605a2a4ee0bff7046bbddad894dcad32579cbb69f3d8154d311886247116b3641d8d95e997e92aca2c050d4567499e715a74325cac5c6f884322e206b9e4897e0976bb0646c49a6d3979690619a54b8479ec361bb7efef86031d2d74062410477b71c40e7168d5690ea19626c576a2e9285d8ca41ba535f9654209299625671569df757595a6091d15ce0d1659c9c08c40169da8976b2cd659bf74b472feff3407547018fed3ac7d67aabae8b24c532e036a9680774082020bb43028ceab54e83226f052c62674eb6ae1be124ebbdbf211a4b708687fbcc62972234aa384afbc56d1b58b5c0168dd2182ea97826fb34f6fddc68e9da3ae4d1cb77b54022a48e6707b682071674e120b6bd6196bdbbb46258d4580b5c2a6067f03a8a48514daf6352ff7f8f86d21f772b4820879c7b9f703342e8f70c99b332b63a07410f398206fdfe43ce3c24db8513ef3013f9e8cb7436057ae19b479946c3c32a4f16af79a1b639859abf5dac619753dadbc9c72ca2916cf4f6416f944598857e10a0d554445a71922faccf4b17b6e6a700ed8aff751fece083947fe315cdeb2249df8bb0b3481f3158350cf5d22e22c095476c97f374f330d3f4d0afe5a4b7ed87e184f742976a48ce59a7401332c2b571af4dce51433ec4ec5adcce7740f90c82e0821f5305fcc35e4a99b2e3dcabfebde4d1c992864ecb1049d39d74274fe0cd5c3cfc409cad9853fee3542321b8c8f6db7c5c12ad60f6c0b2c0531250b0da75758fbfe6583f41474965a3a2fa97e1f2ac844f9513de1abd33ccf363b589fb6042266751f72d60f5326c93f7b2bc29e5119f9a24ff807e589b0d4d6532a4fcc36103e52100cc1480dca5ad5062127a97a31e4215efe66fd2a4bfecf610144d72902f79568eb51b9a74f6a7b52dcebaad77d51840f8fd4cc88c383a40df3e60c8683ac0329934065829ec9ae67e3500637a8a6df51361965d1d5f35a6f0b3966c988fe2a77efd369beb707ad3a2665a6737d6c644bf8454263ee2a017a642a889b9d1a211bd970d883ef62f62f6c2af73a99ceec62d51ac2ce408d663a2e10a67380ed624087c14dee45e73b69b2ec093bcd391e693e256fb8ddef5c66d713b000086ab05a8c38c05a1bdaa71220a6e3ac7cd5920bf33cb1a65d1a1d761fb4c558973b721c629c37fa06867a637e5d97360cb0ea01805b0dbae3a84859563679cfa000aa5be800b6206267fa7848eadb444dab7d31603826c3d148c70be490a3cf0daac37d4dc3e2f398f49b17619403cd848ca65548b890982619752fc8c204f30bc98661265d91118e71ca55d43e24654b958f71c907e93ac4a35c33b24cd4291057f369f25e0b1ee2471c4783e66c643ddb7a5c53752b04e04b9d35b9c45f419da0457cb6448c13758e710f2431b8dd36f7f571c7317b8682f7493d04bf9be117255523d3165107b098193c051be0af93bffe4eb9d17a6c25bff9527135f0490c700802246a4eb2b703dd2ee8c1756227072e443eb36416603eb714e4016a855730cf7524e3d3fe0db10649f34b54e6345b7a799ccbf5a7f40e5d19b33996b96e638548f2ff3e433330360f4651dceb162f1f3f7ce4ea8b3b28801486bab14747bfb8703bf428cb6541526b96e561a33271031d59d534524d11833780d5418681103779996cb1210753d939927ff555c6dde213b894a01df40bbe4b87a0b3c47c2613591ddb0ac5c0e11653af6ee4cd07d9fd5eb8553e15b0546d7251995657f86149486db0c7142ce3ac2a7f4dcc62ef8b52525eabf3d817015771b783e8a6c792b44edc649fa9ed16cd2b58ec6c01de2f9e22eca8b5a35422606ef9c7a25705f99d10021b878aeba96446dec7812b95559318220bb91edc10fa02c50eb1267376265d505b00c3a814376a0dfb811ca38c045d358a7910b3bbed111689c6dcf73ed3675edc23c6ab309036bedbef1e7121a150ecf10e1603ea556c911152e0b1a58c4c3217413897c14d64e54fad2733315f0c188a3717b31595737a48cb6622507b62693ced5adf69b9523e7231b33c2d385f4fb937d8918a6647534a40b00918bd3636ef6f90e046147e4389d840e4e136597ed4e897e75d2f222a5951d55695a4264c0416d36237bf085a46e3e49d58d47213e7323430264f6d2092ba3998ead4521b4d731607f644496c0fc35f85b57a2e7b203d919c900972ab7b4b2f837a8f441b35ffebccea7a09d5845fc016510c69e873418853bc4a75bbfe3d7cbd8b3219a0077abbb566fa659c47bd1830495b0288b5470f3907f05e1576d0325302b45f4986dff129ae4b4e6ea6239a7a62a6055a40f4084422e059072759c06a38ed66935d61b7284d2c2697075e6d1caa1c76e32a726c09435b26a585e902558be4364743d2283ca1d25793e461b37eb28a4e43cfdd40c5815d29b9875dae372f7c21ed9426d8d7f33a7afccafeeea40ea5581038bf86ada47038a1fc6fb44424206397c03915744e89360a5843fa826f8538d24a419011fd316efaa1c7247b7ac920159da91c2a6f1b3d527783ab9e894a1082a7868e65b175657135e52d799a45708e220e1f19a262429a811e777e23f27b152759dcfea77963d7bb540b75113b49331339c1986a29240bc9f5e492fee64cbc95e6aebe978e369c72485d4d57cc554297bb9516cf1d56ff35d135b295d02aa2a14edf2a8d8a36a3705d0ab2877161974a272ab97b63127890acf469c4e932be8d4453f713d54af47bc879d3d7f7773c906097915a8f1efc9e98661e693267a670b3dbbde1957c8b23c8c14c16c05078dc47269cae5f18e29da7a78591d376b79ee0bc742ccb5a061cf3926e322e11a01710bddef33555313407dfc61208064f5109ad3504db5b575dde7f443355143546f8917fea673c698beda933ab210d14ede2c03bdb4763c54a9a7fea4aef6375e3557fe689793a47babc55e8ced753c42e6cceeaeaaf59ff95cd3450e8514b7a50344f55a1266299e3867ee00d850a8cb9444421df865f6e518184a951755e6970cf390227a96455cf67ce702d390c1bd7c1092c956d65362b4358dd55f315a71b19af2240f34b9e57670eb8ab2f3fe88b962e7093ce2dfd95fc291baf780024add8abeb7516261b89942ad1a15375fc034068eb22853aeb46acb83c1c664d2f98cc997c24d472747012e6fea35b5c4186241eefe1ec473213953222cf6338111e05c62b450620284c22a3ca94c6725ef6053cbe7bc24e557a9897705daf5af42609e257dd787873ba095c41b783614c22d32bc9267a74e15372b0ac6fb07afc7d97f09da9c93b6e7eae78851f8f63f737e39331db241aa17d02036ac7cb020b8f59bf4e74fe5da76743b487fd1000e3d5ba758c1c4828a2b1911aabcda63549b18214784eb17dc7791336678f6d5c93fede6af3a98912473061ff061909740f78fe388025783179c7c3f9cf807012bdca785211c3bd5fd98fa456504f7b1f7d78ba1f715922477710f12be5904238a173423ba0b6624abc9e60f18122e137bd1c89b7c4707c63a931c921b5e845682d234a23f3c08139167063d2f930c5660fd617fde605033008206c9013be6a2c5af71fa46c042b7d9fc2a2540ca96a77949cec212fb77d33277a1ad253f0262bdc9079011121fa0aac9a5f2363af234e761b03892eb602118aad3419e0012f71eacd797c2f68654a69093335e95e68296396b7910b4fa62472977341aaec1553cbd03a9636a61e0cb6b9212482cc2816165d7b77b9c07d662854eec7dba6f555e17994e7dc2d0c44885524add17e5d3ebf8a2a4d709d99754ea06ee2b857300ec4cb06fb610ff2175037ef649bcf955a4dd279992ebd3a4421e0ca83631103207acc8e627aa6603083bd03c651ca261dc936d0742e35c37ff9b5247fbb904c61c6f02197a2082a0bce55e3133fff6a554552b3651e87b150900d5c2fcadfeb130b650061a88f7a2d9f24bd7be7284106e186c6962218bc4d5e8df86b5404be126ad009dafe08ad2a331ffcbdbad3c76733a9b1bbe6ab0f0d574c40ca77197d5d1d2feee9e099f82726649bfce4006d31aba0c855acfcd315e116324a4977a24c9d59dae9c2b04765b18994820f132957df0e7517e2d3091afdfc360934bc8f6106e8993dda56f405a79cf8ca6ea9db0c41892a57ecba2f6f9c0b133985c1cf6ee80984d9851483771a6f7046da3fab59d943c8aa9237753fe8f65f30bc45801a33754e87d24a6d2bf94d8ea4d58ab55d5fba11c98a7a014f6bbb0d704aad455fef8a784f8d332b72d79da4e0c519147153436f89a8b65b5388610c72a721894c072eb44a1165cf2c726060d8e11eea7bd07f1d073dbcb6382f25c72b26b8ca0827f1e7f4ce5f83128dbd05f7e9cccb584b87a22804810e4b8984e514615cf92ad5974e0fc90a532ffdcf6b043e51dd03f11fe09e16a1045701336c4a796fb1303b24337fe524de41cc8dda2c12ec7636591efa7fc368bf3393f610fc769da9721f3a4062845ce933bf61965c83cf9513bd36a3986a30f42d9b001410eb1e3568374d0ed7ac13b149082e3d25ff1bb7638b23b9ad4142dc12b9ec387cb727b860d4d2dac93e4298577ba55f6792e6d349b9779c0fd7e2aa782a2091994c2d011f76dd502d41ed2449769dce641d8a7f2ce711cbd03b38c84884ad0ca02cce5c57a77ef1b495a60859631966c6ebbaa460a164b23a6230e351a599b0eefac57658be88f46484cb3d721b2534559e8e343e526d00c81b22f5279fbdf0030ae5a0615ef2f89d39bf236c5edbdfc303724d333310c0973ac08b1f83e3fdbe44bf82347b2d07546a68fb6e4b9327f601b82b10f4dc2e06daf6d8639826e5a93d9bd71d5d1447d66af9c865f3d1b259666be236b9edb320ed890f7a54a3bb438351301a6c455415ff017b0413c91308437ffd2cbc509dd4b107f418dd3d7e38c17b1e5ea198c4abc0f8354972ae34b79c18be2a5b71002b10fa3464513c39c283424271e87167aaba526c4b79189cfc2cc2833b7f53de507af34e6333d60403ce08332f943d60f180961a53de4ca42997319113c074432f63f2f6244035226ea98fe57eb43398109d6d45156e32722e4f25cb0146f04359c404cb78cd7bcf494777034d6725756498807552302dc1317fc7d51995dfd747b374465098e0bcdd61043109d0db37d65098973b7bf12a97429af904594a20d9b1b5fe246dc6fc793d53b43360cb025affab6902489cc2a49fdd9232dac18316e357571b24edbde96aef8727c208c8886861fa054cdc6eea0ca67a49a7d0ac012834e848dde2c8ed1180683723e9e296140aca793a819d3f39bdd87c7374913b9b895071207fab85980cf33445a50ef688105e62facdc5552dd87d6546ba9f7aee5c2d52c6ab896aa1bb1e4576d2fa94afe1f462162e42cec3fb4407fd11cb52ab6e231779bb30dc87f3c13eaf80df5bdde9b66439c29b3fe6a07035987e984d788e0f1bf6111cf3b017db226e041f431be9291939d0e7172d1cce182d6675058b0eb63c70049a33323d4c51624253153f4bae7da7b18548752648264303c749a2d6965e4ee3b420845d4b75e3c74a153746261e470853c36c004d4abb7476350496f374540b37a369710605fdfa65aedc33ef762be591aa295acb4dcf0024072c7e864d2c293fd4f07d4b2afeb2398e656191787c00a016d8616251d785d4684dfed97e7417da0673c3675365995289dfc21730929c832c1e9d26353811548aae4c87048cb8027d3b98eb3f980c848e4b14cf14935c2a4e84539f29f1a4cd616fdca419114e1498c5946c2b87c293111897ea24bebfe3f5892a76371ad96ee0654dae449895830300c9b02737aa2ab8184fbe59baa91f2fc099a23b3bb34d61fcb36f2a70d8a9ae1bed240c0fbb2c34542f506898c89a0f6cdd043139bec84c7b4f2b14e6aab8bf59f0c1327becc1843928700a9d1a35cce69f414edcdae6d9b57087406fe7b156886ef158086794801b7ff70fb14216697b08047a13f964cb296417148bfd0cde25386c2e29dcd34e33c16a5cd1f628735a1ec4661dc8bc70f5dad06b8057f4e6742aca78d5e73f9e35b646518e08f9333ca3ba6c39a5fbeef5dd240454c03223327b17582bb09d72df26312c0f0dfefed403a82264785230d1237d07c33af1f5e969830a2051088c06488d128d3102fc23dd264fe7f04046d718794ed35b515bcbc3bd786ef6e1d9f4cbd6540765a4a02080e35f61410ef9293d3207d8b95f6199e9de368c7594e540ffbc1be714b3c342e69052880e42f32e495d31c4da003a6c75ba10bc24d369ea375f627c0d1fc20f0ab5404ab1d98ba6ea0842e99cdf99017e505c303c80984505c250521f91c496dfbf3170be0f4463d0952e1c90518716f96303433c0cb475b27a441277223a843226082252d6bd90f307012f51844b4cc4c64b839407d2ec73a621c7accc1352a4554eb75a64c423a5724fccf41d39c93a6f4cb1d7b7ef2b531b69f8f7f6e427f4af2da7d302a6298b6e28f8a8f807a993a8011b18c42a5c457a0b75cdcc2baf8e273fa44a92f637c923259670182cb3dced654ff4c80f3084d113b2f1e308a86628697f46540bd960c61bc5166c14d3b2a866209824453ae7f028e45956d653d33230b8515505ce06c14fbbe4d346f0e5e765994a28418a6da368a9d30fcd48629167499c5d825da29818d8d4011ebb3719018f0ec3f7540f59250b42505de9716758526c8f8d4269c23c1dbfe7a1903edb1f14eea4a8d976443943378d9ff3f50149c3a68fd83859bb082f00246ad8476b49e3908f27e9f0cd3750362f85089ed027be9d6537cdb3586c555328266451ee75a4d7bc6366da5f4b8d39d89076beee3230b3d78a535de82fc8dc83c2e60c645fdb5a1dce1d923f1cc1e6546b24380a13bea5aae7d68737461172d4bca2ddcd6762c8942e2342b03ef4f44b39b2545470d26f808bb64b36636f9b4354427d861ce712f6a35b240f00aa170b1dc3026b65c644ea335d41b0166ece634079fb7f756f2e529f5db01409817e1e60bfe7607008a91b8768b97927c40d358dc0cf875a96808cf2550bc37759f3b4db6010d67a910dc72f2007f24b4ad424b08578b74ef8c4f6407453c513936d1fa491aa782be4b01ece96b67a7073bf587f18ec0e1fc49a2cdbf8e8111b2d25634d18b1465fa4076bca687a1a404b86ceb5fb46fa7f7c3f672bd753230461fc5e8eacd3a73f79f8dc118144b74980136f8ee5a3df19d41c36a7e78dc9092c702b64d8a9ed1d2f0d3c026ae8fe3f0a4e543c1c6ae041e4bb466f6300a7063e1919efe7ad8f290073430c201d7c421a76b135e206263f90ea811d637dba2e9acabf7cfd11d8492281c256d92bde3ac0fc75264e221638f3da7fd22fac8d7e47ea59152307c0099e67136143d06544374421a00c1f8278b386882292061a750cbcf1112e37e8463b6c88e60eb4f423743a9aea8aec7228991e9e63816189684d9e6d00c277726ed3979b60686496019265ad576b2fea072f1a790f9885c5620b0f668fb80b9e0239d342dd782c6e3477620919f01f2c1e4d99d0230f7df84dd2385659fd064861fc4f70c08e378002ac4487fb8edf5329c37abce1c4840c45250bf4c029eac87e5594eabf6f135315e63187350a02410d1ad3e2883cd6d97fa34a1a66d4bfd46a0e05a7faf493ba28cdd2fa93fdd73b2237185aa9f8bfbe2a91959d46d2461627a4e2bdf056c4fe5173f4459524ba7d34f1076312e6829d4e487c8c893000fb78452dc9206bd48771e5f7c9fb86d7f94bed2ec82556d6f120466ea8d938742072f9cd51f6f05dc81c80f1f8dd4b98d51f76d79d0237d5216ec4572503d352c65a173cf45428ef3c7199535a9a22ec2b539a896460d71e3b22541c44b77c340f2eb852f5888d294865150e9b8a30bc90272cd19c5db62631367816000cab84f465bdd3ad8a1e4c1f6fbe00b4367d4e0d10ac6c8baa97b277217bd4ff5bd6abef66fdfe31a3f1faf678f10c9eb572fab829f710a0c106b6316eb430f90db384b913f0b1c680e396e04d8aed4674eb3e507fe529ad19b34e934c30a0eec001e8c56cae755adb3ec6f360315238196fbd830c8179f2dd32d2c75f1f79b18384a04f71b3b3c776e375401d364de8611579dc1223fb3e87f5e83a7fc345433aea90247004c767bcf50c2809ba10137fbb28755a6361587f2029986511b8c5d64784f7398da6a2b1eddfe330dcb7331a2b453c6430172877c85ab02d9f3332512e00ae36e8260dea7a3c927b7e285bd85cb390560bd6f9a05391fd1756cf11baac9102239996cdfbc8ae150c85acf5f0b68889135e24a3fb05b0765629f641494d4d281226373fc6e5958d46ec061ca79b0d6020592417d135fd2949f4dcdb4010a0a5377c1de91138b0060db3ea0fff94cfba1b6adf5c8d9b05b728f20a463d8e31a84b61e423b8f6725856e3f57ce0f2d72124de3f541003cc2d7665c00242f6449c7e42c49eafab012423c94c906f7d67e519e9221bce86b94e2d13991eb7759b4d2692fb9e2e3972781f9c8827b0a3630b33a61c2b19606a047776709d11e36dad2cff69dd82c8b6e0765603cd026e6175517214a26d399879030017b8c8d4663c2e25044ec67a76955cfda1c35c9d02082819117b07f0e49a68e3e082b2fd18a143c1042396ec50280482ba90682ae39a02e01e1e1a1dbce1406ae6a95bf9485a1642061ca2269f156a3a8088aa740292004780931b36bb607c199bfe2d057b0236ea5954cfffc3d74108b4e09c3337cb68ad575e862389b301996677755f179b4182ad40e4523cff0a58d524ea9bfdb01dcf96d95cd98859730c5667663a4ca020b1dee11e884f4570a8acd0b29b379a64b75945f5f1f81b0af94c0e575b99bb5b8abbc542e46e6b1f25b54bd24858272abb021d94929511483d28e72ba263330e108bd8208ea77f253a9b2fc452b63d528dc764a683d9360ba97d04bb863f7c7716a53d437ff863637ebda6099ab20a78166a489538256e3556ccc90bac3bac051fb8aeac79fad27ad438d63accd28f5c877dd1f18812af3bed8d67b33d90f04212a1285261b7f2103ec36a70fca80227a4d96cd5f362720d087398066286b86528194c6efbe1bd3e911ed1b483dfc8438b3f5717fdc63674ebcaa52baf078d3c7ccf9915f470233de4d29aeeccd86f18c5236f5d212f9d104fc082303c918f68ac0d39b445b24e191d1a342b2c47a73bc7420f2c8914a14b328865b5f3537a74620242be9fbbd311d5554107fb72e46868bdf67ea1bbf26894127d43b367d937a1bfca2905e89c0a9001a8cc2c66af40a5fd1eb04af8161cf5ab53b13816c43cd08798c457449d515a01ee9f13253c2d623ce7b0858a8158aaad345995ead158c6e4fba5ceebe9179b6f0a4be7b5301a187feb8a018a3e46053f6d0479f6e744d346d92f2a965f7753d04bf595cd3f0c83e68eeb2aa3a53ba5b59f8f7de49d6e584f1f2d8f5f457e1f7336313e49b038ff61819268fc1a2fa09e8974f7d0f96fce22b31b1392641d2b0ccbb66d74fc5cfc9970e39df4fa5396b031d21646894e8638019e0233b46ec59f675c3063c22ca12d6f9040dd0c27295fb2c4c336341a827d3ca6759a5e381bfe56c3a3a97b3312fbcf162907f262462876a381f0aa03d382d9b3261cb606ce3775428649832edce5b2c8671df1766f9fec9e1001b90b57a510de2f38f32d4e291a9e83cb1670ada4c79b3de29c0e8db0bb78cfe70a337e6a992b59615d5cf28516913890f95b7884b54b36aab674f6feae818384a236cdb2dfe6ce15e90dfedb554734f429036458b6eeff0157022c55c71c7912970d4af7f824b5bb3e2101cc6f81b9afb45b2e604f758a14291f4acd79f75c09fc15b6b7d1a80ab217561994ec3392d54824f6ddb5259ef36836ced86e8335367d0b377bc88e7ea3991f8859a30ad709721fe96112c641de4c56210776e3209a8c1cea1f96f261285c668a2b5308688df227b572662cdc48351438e09188d34900133278de478c7f4112bd79506c3155bf6ceab1d152cb9fbf5f167ed5be451ac62d2c663be16c3ab433b578e95699a1461ddfda61de8751b86d4780cef2567c335db322979890a0d8249bfbf9bb76ea0747c5f29d207ca4b526afce9aeb6bc2dc37468c09bb39dfad7fb486438c58fcf65c867948b6e6ac260f6d71475f3bc390271fc176e9e04b0e5ba01cd303e7417e4d28c28e1af56ce10db31829ab260dba77186b6e97860d7c2d87a315c9d922272bf2f9377835763174a38336c722623552d74a1a53b015d4353ebc92525717342abfab61dfbbcc52729ee3f402d6b40b1528980d71f82b842225013a79e3df1d45489e78323cebf20b09570f6cf529f30c39578610da5adc14d07b45456e26707d023a4a752d3d511275e6975ee3e7d24e0cb94dc599d1df5d7b8c01b73037791e196e954421812005fa8b793e0ec408494f943ab4d9abe32fa5120f45c0f6bd3e6d784575528e2c73db52c0254b1d6b497c47fa3b8dd1083b51c49e0f72da4404ce3bd1957e93f722c2adda86eabee33d7e58c107f0f8cb3e8081238def1d004a98c4f387ee01c70ec1e3851f087daf0f58246fe6e6c2ec296f9215fd6f693321af25ee26ca5c4e7f20d0450d72ac3603d213e5138de6312b2735087fe93b8158af64ce2e6cd5da04d6ef06b708f99c3c5b122b5c841f936a57194eff64cd681bb112a2f221f7690339e1e97dede834212fbadc28efdb2b6f309c7b7adb2596077815f909a856e55385d0dd5dcae9823fb2902e560ec0d42a19cc3c7a8310d75f77f104d8ef2a787ba12fa41efecea4451b3b2c6b54ed164740cef0dc196ad06aa93cd4bbee5a2f78e94d09c19b0cd717718295be3d43b365f9b368dfc5639d0a00f1893e0616a840f34c7cf91cab544da6086a96d5112d1310c53cc50db04d7a4f013e7369eae15ada54caf0c6b9485c08b586cdcd33e011c3762d40dae2324302fd56e4931e1c43260fbc80473c4c568320323cc9e4b77c1faf500c435e7f082286f2c40f2df0179942f4ddf0605878d7283c05ea90f21c47d9c6e3cd0f007b8fc55ec04a88464fefb65c780f25744158d8361a217a1e4d790f0ae9f4d3e57643796cb5be18c25f708cf4a0ec6b2c6bb1f7730a261aa609e3ab463b7e5c5b1b2f1a45776dd5ff3e16d7ab95857d601ac589c803a025b05de08a6695a0022233e81072d226b5fe78f7b220fec63b8e60f59e00f8daa143096be757f73c95df18fadeae740b8ef40f8c4ffa5245ae235b05fa76c0fde5f146cd68673e5d063b736fc7075b16fc9465550e9375590e3c44c5fcf3421e1e1b141298585dd94a4d7b1586e47ea6c845079aefe9f487996024a5ac796013f8554f530c9151ab0ec00bc01889e0f3baea03481423f1f7f06379c8ccfe7a3c51711b3294d2b35a96b274d221cc90f080ce5f688257d8e3b9b963a91819770c3b4712775aed777361a2213a673ce7420b964702611c4057b600144f355c72af2a810c6adf1a959256eb35db87eeb4095f5a4b529f8a54e1f9442c5c02293e042f710f19cf829c0efe4b584c521bdea4b41e11dc1121109f2d2a706512c670d352cf5517dfcdd9e2f65a50ebe3a0341423d10fdec49c0cf19e9047060dc903c7247a0583c6f58482f8f41bb7d125bb8cf65b76e4d5910eb5c2634a90eb2c2ad3a9763a6a9bb7da19569219307e3c3d3bb42c0eb253e89cb689bb3f9e550c683436b760b8a0ae0ec07ea23a68ab3e34ffa18644173bdb269113f01f2088c23cb6d61a06c7dcf5dc623acf2ff6220562c7ef3e3edc51806f12def15b517111c743997b6e9037fadb9662a7520a0b1cb41853e70fc7011707568a1917eb998bf12908ec5ca896f3ffea1ad53e072d85e1055a8b5ca7df71bb4e7d3a061ee3c530ee987b130887a450b919061e2aa900d7fbc7ee4426e8980879a7ab242e06e2321ffad26e4e8d16730124e93f1b701b0782eefd1a2ff5aa28ce7c7360dc807fbffb383e237d6f896db07b430101a611f6735c5d1c03fc6015a4fb3d2ee549687f5bd5bc1ecd0874ed9b70964db3a82a748d6ad337de9bc3f89953c8775348ac061c3da32b170cd795188f7e6c6513c84c26b2bc4f1c9f5df699b4b821d0ec9a53c390300f4d565e81923e1f4e1d575dac1c159d5f8b5ce97ce0ac9135c5f8660429d1302ae2b8997c103de25b4154ec0fed9bc21a89f9c767a7b42f06e893bc9ad81a244ad9cd712b51e68f4e877242cb665edd29c9b371dd66682d2d776d9b5b0683cc2630a1e8ba0ced6b5c6978ed19f7fb6d76496d9c7473fe4e7061bc5d407d14ab02a61c9bc576221c49e1318c1184ecc972dc12a4732040992e10a7a6b070d4217e23f0bf139632ed6b7619ab5a75a00a74f4eb656a7037e2657c922ae23732454a540a3574abdc080d0110fd06943eb84fb11aa35c3a8cee5bd2259604080b345760f6076b6a95c816e4576a603adcd0444a79301c8fe91020f99147d1730d160cbbab5861c9b31a471d45c06e09b169510b24467124e83748a117c62b5681d64728f6c74ec6a4e75b1d5e970ed90b69255d15d3556a7be327e9222ff2ddf30e7aadd44ea7cfabf063893f362a6600716a525f7793abd44d5cdbee37e8d3da38106e12bbae5a11f54edc9034d4bb463e17503b5f828485302786f181bee3d9376377469778bc1fc46455c56f3b0821176c4fdf6667844974181e6bcab46c4bce4ac8974c02ddb7d36fff3c28b60b93cf64d9156f0473cfde2ed27f5a505410f809f72403a06d194a064e2a98b7df41f3759b65da56dcc9d768777ad45d1124c310bce041186fd0093fcb68519d68950d1473cfb5ee36a12d2db465e8171158e72999780401ff24fa6c88e9d0e1d9b2465df1909af5170ed124507b04ef910b154ed5497f1c17bab51399236fd877f9af4cbf620f6e8a045460486622fc3511626c00e149ddcd9c8b37db875bf39ff9ad573547d0d103593c2f0ce02c4f67472177c103d795b0d27f22d7d79302a860c04eb9ca317ce13370591e78e9adc9da9f22572ccd63dde85807c7f2a8dbec3fd86ca27a0832789e58716e8288c8162ea603c88ea62ad1dbd35e233843d4dc4c465d50554e43e3d29a472ba409a4a06f0f67b35aeca2665264395855a94f1dd3b146361ae693821519652aed5675e478fe4cd723df7ea05b0901f014ea8d284b2a580e3c927976841b62c07934ab5725e12fac0ad9be4dcf196ddd185d91d573c27418ae67a7e584d552f78240d9d8a256160be5c6cdda175a3e24249d5e26898d4bb7bf93a8bd3949273587b6d010f3467e6f7387efacf59a00552984c0e6762b7e108c909836ffd42f9d9f9853608a2d3021e00f4cfe62613eda6cab6b4b77bf415c37e09c83dfb46db849acf2a2b96035fd54e2c786787c52d5ae4136ac971c13a02507d7566f5300957d94b5b56e9b200c76679f5987c81d4471372a62823f4f9b3fad824e77206ba8e25d030c320743b59dbcdd004493195dea92e437289e13c2bbaf0be3e1917c96d3463ce4cb2a76797a75c4c5614f202c3820c7f6fb5d308270415182fc5f68d2c6b9d202a8cb6d41e495434c25b1230bd0371c015872647516bd550c7bf97526226a73e4dedc2afc71f8246f5f835bbf1d46b1c4426778abaab7e699de8544de0a1d2abb3e3f2cf40c208f604ef42a99191429c1aa391d450de0716a3c3b2508c3b99abea75f7fde1abdb722d717069ee24c80ca5b8277453b6fc81eb1962f49459824078fe90dba9507dc68f13f1cdc192d781045a552c0be2006e8d8622c7c719023c00c002e35a539caab59f0357b8ced05831e1f03a14564486ee3256df7335ff6601b5b171b5b446b0bdaa666ceeb8b5beb5da8656f6b3bf98eb663507f343d204618696917fb15d7254b08396101857ca8367d54243a9a33a8aa5963070c14c0e7385219aa0a8c198d7f74458b8aa46fc31f07494a17bb7e4c62ed3e5478d01837485128ae6bd29da963c75cb0dfbf334fc9271705cb09fff4d1660df8cac514af5b0e43397cc0574d6a9f5321e730925c46111d6118ec94c0adcb22fb3b5b20614d520aee026ccb8a7e6564d54921f35f2c4f4d47588a38b75dfb1947e35288c5c0b46e3a3b805eb3dca71e4d77408874273c3114f225f63de5ac70f9acec922f12d66bff902d9aacae002200567ad0627b7220a72074d29bbe30548f106506ef15ef3a5f2b78fbaa28213df348f6e66bdb0d7e3accea0e9d03cf42c28229bd1307121599c0d0720c91352fbf4d20ac37b5164cfe1933dcd51f6262fcba3a27fe642a05a6f480d4537f7434ffe53214db83860b6dddbff9d3363f795e6e7751570d3159241b07423541f97ea5ffddf0ec4e8677352fba21a430316e4af8881af8dd220eb5d8f1c07b43d52be44154d4594f8c0e1800e2d8adf04a0d156672d136ec897dde14c3eca339030e5a8f3d63dc5c1565859702f7fa4a605bdc002a1d49589e2fccd2b26d1379b221fdd3313c2eadea728427b361156e7d6cb36810a20fe5c44e2e6d970aaaa752014923fa2618232d2eea485e8ef400ba5caab9de8476aace170ee36a9b45f41c23d6b1aa3969a38470c51e73a7bcacbd2db43bb46386d6786155e31734b991e8219b7e46bdaa7f0c4ec2b0b66ae1892b44a0974f81a980aa013a498f4cbbb929560795433af37ad7324803a1d6200d7f210f5c94214267781b2dbb080cf1a6f508799f9bb3b90eae1b917e3752dd7fdd2cca6d5b184d4b986ef2a1f1c88d34be5ef166b04056cc2500ae78b2c09ecbf953dedc42834bdcba3b380ac0171de68d3ac269bbbbcfe27c696ca4393902a6f227e013f8b3f3f21d37ea77fd340f3d83405aabf0ef15f43d6de9679080bfdc3c7fbfed9be3da305c5fc1704e8aa8be186b1a65c3213299e414d78acb8c619c7838b37d7422a19f6576f8b04f79bd38e959800364db60a24d260886ba64fbe9c15ee987d62b49f6c97b01b2d67db594a80e8cdbf29afeac67112f4e191be5017a0e110f6fca9e42f075c71624ec873523622fc8d81ff6265f3ce03b0404235169012ee46ca625dd6f31cc686115d05499648e8413e3d7a4e73770acea623deb527453dd405d3782c30cc8f5ac713bb594332a978861c279d676fe353779f20df348462a3d0cecc3d210b8dfe31d088a044618b78dd574b3372607ca5a6cb93cff4502642c10778747116998a9e395b86e78c6829ec480e12c6e0ce8eb49e2c1367cdf9e1f6cb614be708f84c0f2a3e5444f5be1a5379d3bc41d929a1d607390f4579ed3fc0866fe3d4ec42e34fc2039cb275d6312fee400215cd901fe50321ee32078188f76e14db5591ef3736f06c8fc349abbfbf082098c63b29fe268fc8e805a4b148308a9544556e693e2288c6e9c1105c9b67722f29d6e75d3d87ed0e2a95374cd24f244f48b458b5af611d99b2820c30c923abb0883588aeb8382d33cd9373d36b4be4aaacc113e70017de9af48275548be238b1bf16bb63384d087f2e74d7e40b0f0af189418c17f03b5f8f99038cc5427e405033c224448747e2e9c9830584efea8ff57773db3a5e30b1ea764435cb46224e633ac7afc7153985ce9165de8ccf1b807c7c8752415cea0dfcefc63e33021793a744a245f7b5b8f55ef656345bfdcad4953c36a1413b804fdb2a62d8a108472f57068737e32e97cdca834334f94a3e00eb1e637f48b8c4d2d4e21542ad1e6998c27a74b29502f1769468d6adf84539255863c262a4d7d69e31b4634abc2595170313f27ed57085ee1fda03be708d44e5d4b564ff3f390c055c197439763c22ba0dedb103b8480527065f82d54bdb013106b6d08e857bc9c3dff825111b30abb403324072ec48ae1cca8c057ecbd6d981183332b0a46bcb7ddc12d3afa2d9cdc904c92209aa8e64ce18c3c3f689a4f806d15bf7380203a7810241a110e3b1761f31c38612c4cfe699de74a697e04b1bd8e52330f12f0a34f78f4cf423c08a5e35c62cd4c62eeacba142811676aa4f615d6d89f6092d8b1fc87161720e4bf5a5973d23920d2fe1f7cfeee2416df3ce5d3feb96c646944753413c9d378fb3329aa31480c676ad6e7d4f71b5f5c4b65243c0315e02a52f5f02e5d050c642e677e343b851a27484d6828d2986c4d1be717515b688a0fecab02d8c6c53b65377d5a6f62d5de39b6020b495348a745775cb7bbe3a23f680e71b8707dbe9f7deffca0b00d235044f72263a7a2be443553474f237cf6496bc20e9d0fe2914309648e5b57a7f73752f38d4cf9fa19f4344a123c3af13d061bbaf38de33ea0d866df5a0b31199bdc4a815dcf1155b08e561a69c4d05508175e6b89ee657be56f524b19e55ff23de55035f1bb4f0d17716b7f1b372b24f7ef28be533a705388306633dd39c334d19b584e159a634cc75154e87c1c68e36589522bbca29e0374fd42dedee3d02252c950487085c56dad8a7aa58e88d76bc882679a73110e8bc5a43c12dc402aab21766b4d334eac15b03f28481dfa74eb25d615a484c951bf453b0e15c1b3906c5fcf3906f4249f162f7d4a4cc5389134d0af38b35686275825ab08f83f9753fdaebb58ed346ff70036fe2c011304f90caada44ef8522e926581e2aa12d9756c6d14862f7208197bf58c71654b2264421b2fb4d65524182d1a57f6b164457d39fa8662d5b67ef2c2b71046abe0c3ed97e624b52d71a44e6ec35cc6407fa554613b3e5269a8bcc18f37f6b356ac40e2eb4faea08f8509815f4ee800729317d03b742e965933de1c8fef6ff316b0a721f4abb970d98b564537e5a7c013a815795dadc3e7ef7f108255c4f8672f0d068f9e2f54908d3d303be0033266ea3ecb0d0587b151d6f959b9db110dc1b1a0839dc866ed56bdda843176db1861af0e12fe9fa15b63a5b2a1efd3c9c1861364ff60a3db0137a8166f61d89cc6b6d4037e887cefc0867aa316531802651590f5b3bb2a571a054e549c8e06a50587dd4782b2fbd856f522508a4a63d82494779bf1dea0d94b705ca8d0b6082dfc27502fcbc61acb13f51d01c4801987bbb3b7e6c17ee27a9a63a225528343814fc4fd1cf638ea813d44020e9be8dbf8b3c7be7a0832c64cc1453b30373b46951de34ca4062a2f1a7fe6b692832c114e6846918ac4d9891cfeb04bb1041ac8689a972c8f2c27f289a8940a117948cffd567337f0acd169e76c505545ee7e16552e40e2d5b75f956fb6d7eddf30986c5a1fa1aa80d2b9156c0103fb7c82acab3a7da4fcd79a05c9f91227a794b3aab6d3f4009580138582653b86d4a36418ed1a3cb7c32a646b4fe628539d159f65e05445308f8cc8d4e907ed620320da7d6d2b14b1b17b6dd1486f407098401d77fb6e98d70839919f3f6a4f31e0eda474f663f8203c583ca8fa657694881365f1c37e94c30d5d06ce311d82772032bf346d81e0e1daeb3e268bfe46f04a04b725d26e47e2adfe4218d4082b75676bf88863d42c52fe0bdde959dae610f9f987ca2b57a671e5236d943c064a22c04742180930abd5c86427d6805e98d7145302cd8fe5a0c05596ad8741c09ef439ff56ed7721e836c25e0e38c0300e73c3db40170c735d25e812727293149407cadc5f804a79b1b2653404de18880fd5952153868077f7b2bc7cd589946ac9e6e205fdf3d08e29528d0281d87e8f1d500d63128e3ef288b2c41233dd94381e000dfbb01e85f3a6234ab6098de61f443475ea73ceb7b4580072c4c041a5a441b50f7e156d310135f11945c8e4fc06a8d35668437eabdcb7c673c041c828d7a425ef90a51f2e2ae6507d7d7ccd13495c955d6651607815f7878fe92413d75f85522d69c9ec6f52372492171f21c6bc3f0464273eced69e4e806ac58ab1de790a75d1790ab7b6bbbdb72b1eca8bd17ab512f85acfb9691fc700364797f07f7e62d7ddcfeadd99f5244616fe00e92339562005ac34d839258875deb5aa0f6b89e017f2c7511d73c6d8529c398d4f96348fa04c847a728eb4b756fc07bf513b472fb6cb2d60c3efb1a3d5c83d9cba07113141a9f699d3899ffb67deed877773524b941439a190146dfbf33490ef2842f00f635372b5dcca94c9a113ad52a328c4e402e9d39eb28745153202c5efb37b025dc333f019a10ba360d57f5625fd05cde0a69b0de1809ea313f1b27c25eb4ae9c9f604fa18f7117ae17662c931ed6b1247c096964e88e3de61e70bf4ac7836a3efa58c3ff1efe6d7c815ff57e357d5015cd4cc197e2ed7ad26267841f3062759ad1697288664ebd84891ae64784bc1c9cc0568385bcfddf182c6a9e797e73521c2a6fb060f43851817045de02f8ccb15ab4185fdadff0ded48a74b4d1ec3603fd6c371e140cbba7870501eb89241def06e307d168eb88c2c66e24d67fed226da7481e95c1eac56670c029d6dddc67f8a86351ede4659b11e4741c8330e5279ae3936cd242872e1c1da161583da2605d29e32d1d9b0f520ce3304e4ccd489755e7c30d4a703a3a30916e30bdfc0db0782a86584eb70bffd3415f498d291eb02af6f43ffe4fe91310570275d3206aef297f2a76ad5e1af20c3d1e08ef0f51f98c41fa3af8325137eb66965bbb81d2f4ab4f720cac6bfb3324fdcd3b6b6319dc46693a46c97a54051ab5a1797b94257fcc4e010f0070ebe80a99b704a99791e06372345ead9abb706351997e4fc55795cab9bf190abc6baeb049626f34afc5854f88826770f64009835c6855990ada7bb3f3d33ee48d54e16ac33f7ec00d3cbc9a84f44eb9d79b35fb260642ee0a30cb382d9a38d0e300d1bf76b56a5644516633d9a321c9175e0a8bc5ea712d560890cb805173c38b3d0db20e78409365ff3e6429a81ac97d3f1817c7d12ce4a2f58323c3de1afa418b58382c293b60dbeda6add69b0e5e730d1f9c74430d1b457c0147f4c64d984c383573d9236cb33c904f9bd77c1ca721bc6f3493c269adbfd0205703e45b6dc3b89a51f9830b69e84d0b6477b27701ff67f8e89dd72a0fa2e333a944c34fa9cb44a16fe9915fa4c8054b45b605350c5920566bdd4430ed8e8caf1650615154624bd044ab191792f7624e5cdd903b58e7c0fc9ae5447a1175b5e15de2480a1fc707fd105eec3859393f3009c74574c093dbfbc017c77d93f8759dde2f00051c92d845719f6b49d6d1c92a1e62ab6042a62d0bb40b2671e6da27ae8e39505fda47333de0daa4612229056596e8401cd4c46e613f97a11c4a0b84967b0de97fa11a01818e138204d06acc70c1f2c14288384ccff8b4cf19b98c6e2a34cfa53c33397d845c53ad7bea8b0977c3247107d0ae7d6051fabe571a66fda7c89f7b5effddb5add54c2a1b4a6105b094a560409731ca83a2b0b132f200224952a40075fa43e362807d2b56928eaac3d17223505c2115305b7404642372c61f8a9d9a291e4322927c4a7402ecfd501f4c90323fe00506b9c66c7e05e8a166c2a466cd4e74172c391fc0971253ecbba2db1be86dc078c17a681f9c4d3be356251c4ea27a3001aa3564f81f206df40cb22821e103772c7ee2d7b7486b4d858bfce942d104b6be2c223ae22e4799e1e75c2b4f765bc55aaeefd0bfa217b6e97e167be3f64f3bee03960b403658a53ab50a3014c003f0d0c7716c1ecb756144d8246145c34adca96bf58a53b836aa82074bab67bb58458608afe6a5465f8a940a38c902af2f204b94c2b3d6eb0d8ca1cee34c0ff57b24357c2c17009537630b7f1f5ef0ff582d2894090381f46f9bfb2344d76313677579a3018023b8204aa2a158a83350630101c073929c4366154f1cae384ece4767722fa7f1bffa3aae03fe84ed8b6f291f07e306239c09593d457d79c683c0120d4fc4e8f41b3f6293dc8638f4cb9c4ff36e6d38f8bf2b2a4fa409f7ab0177621bd9538af58e753544057035954ab8726cb7810c1d04d73b92ed775d997768662961db46d9ed121666cc1e9537b0db4eb2fa358a60aaca359f8e59eb24aafb71f4347f55c62f4a423c6b6d60e0ff5d7129332ebbfa039e2f8e6e4d0d541acd70c546fb49352b2e3f8e7627db7d0192621434eba7274994092c511bca82a768219dfc2526faa6a755241406e0d0dab60edc04768646f8c2194ad77893c238bd5d56c53bed58fd815f784a8c8e5e3ac767c8be39948c5b187cbd4ef974388ae97ac67667b6c15f022fb018c41dc0c3f30872aaab56ed336a034e0272732d592744cc64ec9dd30a375f1e6d0bb195962e2d2358c976f0f715071e94fb3b2d89a257f080505bd65535678db48ca4c1e4661bcf60af2a6f4eab2a4fe57f3e0efb31581162a116e68a0432226103a483bac802fb17098e39ccc73f2c7b0cf1d6f65877e6e4945e425034435d7c4cd15250ae6a1d7c43f7f2a31f22d61ebd9e690af72c098c8a684e27454b4c4deab51998917c2976d359b260847605b735610dd3ad677579dadfda17b90937f8aba4b969083d73bf8b0dc861865707136d055ca6581ffb512a9373715740d122de464a1f426ec073ee4d47a09e12f483e7ed84be666ea08ca9673f75ca1be833c3597cbff327ab243a306a59996411c37908a7ba3a11bc6fe6d6c9aaad35c2f5c9859c08704d770e435f84360405dbf287fd102c3c5c922bea1359360f007704f260231e0018cc386d668824737b6ce0fcd622b02510cfdae8370d7c584000bc1780bc5c1d440e9136b6655c1a49609a5886c5c7223a9e0c5f513037a55c3e466b8efb371d139db1687219d79501469f83e5c984ad248ddde3cb5793ad2734988da37020a151fc653b4af37ddf5199d592c2fd825c6674bd728a1131f863113770724699b33d840eb841908d3673285742d647662864d46428e59524672da260c543f393f500ddabc11136e52a02f4e6b26974ceab560f0c9fe170cda85f59741b0eac869945b3bc4b0cd7c66547 diff --git a/Assets/Scenes/EditorScene.unity b/Assets/Scenes/EditorScene.unity index 5cf476e5..fb42002e 100644 --- a/Assets/Scenes/EditorScene.unity +++ b/Assets/Scenes/EditorScene.unity @@ -320,6 +320,112 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 37219226} m_CullTransparentMesh: 1 +--- !u!1 &58502027 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 58502031} + - component: {fileID: 58502030} + - component: {fileID: 58502029} + - component: {fileID: 58502028} + m_Layer: 10 + m_Name: Quad + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!64 &58502028 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 58502027} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &58502029 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 58502027} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + 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: f0cf39229422d1b428bf04e0bc828dc6, 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} +--- !u!33 &58502030 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 58502027} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &58502031 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 58502027} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1464630159} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &74258998 GameObject: m_ObjectHideFlags: 0 @@ -1539,6 +1645,112 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 201694900} m_CullTransparentMesh: 1 +--- !u!1 &207574358 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 207574359} + - component: {fileID: 207574361} + - component: {fileID: 207574362} + - component: {fileID: 207574360} + m_Layer: 10 + m_Name: Quad (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &207574359 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 207574358} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1464630159} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &207574360 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 207574358} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &207574361 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 207574358} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &207574362 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 207574358} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + 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: 4a53388d09164bb43971571879adc754, 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} --- !u!1 &224615550 stripped GameObject: m_CorrespondingSourceObject: {fileID: 3629515902686950372, guid: aa9644af7cd7f4a939983928c8fa106a, @@ -2334,7 +2546,7 @@ MonoBehaviour: m_TargetGraphic: {fileID: 728685386} m_HandleRect: {fileID: 728685385} m_Direction: 2 - m_Value: 1 + m_Value: 0 m_Size: 1 m_NumberOfSteps: 0 m_OnValueChanged: @@ -4618,6 +4830,7 @@ GameObject: - component: {fileID: 832575522} - component: {fileID: 832575521} - component: {fileID: 832575520} + - component: {fileID: 832575524} m_Layer: 0 m_Name: Global Volume m_TagString: Untagged @@ -4921,6 +5134,18 @@ MonoBehaviour: m_RotationOrder: 4 RemapThresholdZero: 0 RemapThresholdOne: 0 +--- !u!114 &832575524 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 832575517} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe30e455c04f33342bb3d1c227855682, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1001 &838095286 PrefabInstance: m_ObjectHideFlags: 0 @@ -6729,7 +6954,8 @@ MonoBehaviour: serializationData: SerializedFormat: 2 SerializedBytes: - ReferencedUnityObjects: [] + ReferencedUnityObjects: + - {fileID: 11400000, guid: 031554f259eac2848a3f78425c67e910, type: 2} SerializedBytesString: Prefab: {fileID: 0} PrefabModificationsReferencedUnityObjects: [] @@ -6772,6 +6998,38 @@ MonoBehaviour: - Name: commandScripts Entry: 6 Data: + - Name: customPrefabs + Entry: 7 + Data: 1|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[Ichni.RhythmGame.CustomPrefabsCollection, + Assembly-CSharp]], mscorlib + - Name: comparer + Entry: 7 + Data: 2|System.Collections.Generic.GenericEqualityComparer`1[[System.String, + mscorlib]], mscorlib + - Name: + Entry: 8 + Data: + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: departure_to_multiverse + - Name: $v + Entry: 10 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: elementName: tags: [] parentElement: {fileID: 0} @@ -9280,7 +9538,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 1685, y: -80.00033} + m_AnchoredPosition: {x: 1685, y: -80.000244} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1455066091 @@ -9401,7 +9659,9 @@ Transform: m_LocalPosition: {x: 0, y: 10, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: [] + m_Children: + - {fileID: 58502031} + - {fileID: 207574359} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 30, y: 0, z: 0} --- !u!20 &1464630160 @@ -9443,7 +9703,7 @@ Camera: m_Depth: -1 m_CullingMask: serializedVersion: 2 - m_Bits: 833 + m_Bits: 1857 m_RenderingPath: -1 m_TargetTexture: {fileID: 0} m_TargetDisplay: 0 @@ -9476,7 +9736,7 @@ MonoBehaviour: m_RendererIndex: -1 m_VolumeLayerMask: serializedVersion: 2 - m_Bits: 1 + m_Bits: 513 m_VolumeTrigger: {fileID: 0} m_VolumeFrameworkUpdateModeOption: 2 m_RenderPostProcessing: 1 @@ -12997,7 +13257,7 @@ MonoBehaviour: openPrefabs: 0 prefabs: [] idRef: - _Keys: 19fa7c8b7a3a004fc497f181b6e026078db49f8d499d21408923e4a607ce3a595981be3ba9ff4c769b8f130ebe47887ebdfb98ebe5da7049210e18f42f147d60c6bf413c35ce7d12db1f64f3ada3bb2d821326d7a7c363136666d31a094491222bbde8f495825a4e2f05ece33b3881253ca117543370bf2531ac8ebf10b7f565a03ac9712b88ca58c516c5a7b6d8f161d9edf2f0d7536a18cb29cd07833a5a3b4c7ae726cc17482e559c16f3c9b08b330df8ea680ec3b112fb2cdae8148f027d6cbda2a2ea985b33ceaaec1a66c03614f318fcbd24a42f1ad60e54113f577a421594d13a0cca1e4dea74ef6b3011a507d84e972e95f1f208c29e6ca1845b5768a29ea858678d9a45dd71c72675172669d2216f05e07a6318526a8851fe85233ecdfeb27a2a54c77acf2f0622887385307cc810cd2b8a733f308aa04e356c1a4343b0f897872b4935cad6208970be4d2cf27d077b2c4e3454a429a74d0d848d0856374bba5b830d5a1c80b06ff717be50822ffba2e9a7ff4587ac62212c429608d6f7162a2a64072a2505286ef155af18b8b137cc9492aa430bb82f7606ef4e587d4feeec0bdb7915a98a7574396c8e2e0a55a2690825a356de044dd24122aa16573d9dc4051c54111fafcd938f2c107505edfb00aa3545750cacd20fd3d118628f24eada7da532296de43a2f1ab3ec2f40174152c0174e5ed6d08c86c931ea726390e0507706ff52bcaf0ecfc98bbb39566936366fb9b255a7ae89207f8b652d88310d54f616106692fde55d0708af69fa88a9abd063e55043de1680da2a9e6d579975acc6cca75b961aacfcfe5ee932d224e50c4b614d14bba7a043638e92631518771690e1bb19dced44e075745b028dafe7e182ac1c0b232d20cceb1df107aed62a36f989553501753abb270b44324d7d8ea6c2b2ca297f8214402bb6de62c8eb8e3d9b0f7256185d35a921a8142098b19bdc42367948b6e493aae93bbb6f41153dc39aaa1c28d34255148ed5933b025933dea2cd7425bcb047a020454d5b0b9ab1a5634bdd403229c26b55bebe32908e9848d620fa19a0ac538a933d5645ebcc055ad1400e0de2b71574be99675bf8a3102955feb74a2c3eb04c15e369386f97b630278db0358deaeb8cd4eec2235a9ee69cec23c44b4e60051edd993b7bc5600352a5affe328d95cb10d3df8656e07cba3b9865c35815ed87a215153e001a10e4ef5c6f3042f4c3e5cd2819166d6112b9f17f5bdc220857778404d76103b3cc3b0938e3500b561e72b38fd7ae010c88f1098dba07392870ac4269fb7604ae4a6e96bb747f19d5bc4403fc346500d5432183fe0a3d37333e0b5c95650540fe330a555345654c454a0a5cd01af12c5bbfe973432468198e568f78da72731205a296ce63ceff4027fefc7d6914ba336fc2c1a196537425df9e0c581f69b2087fb5d4317015c46f3f1e5c5bdeba5d2da2335d6bcfa490744d574d55512d623419a9a46cb8d49f27bf55d4d839d10618a0f1cca64d60c95de66211e085c9c552c53a96f52a47e2097c7d27a25cc7c274f36e41d3df3e7d29069a951142fc403ece277d3175e7cb6713cfd85bb1677d2f550510a9164da141cca3d4dc2d14ea6ea5bc7c61339be514a16a1771cff40969d4dc573e3c894702705927a4eb212c639e52653be5bb871dc8f266b125e31d2ee5aa499d965dc71b8416d70ae562427d168be888de916169e4e6e6a61d506675d74849db0d1bb064843bb211345bc43b4b385f641da77957fcf2e794bffc0d74579148e75640d90c451ccf2c5994d52ec0e48b27b6757d3674c4468ee18fc36730de2672b5b1567f8427fa5248fdda7745bd1bf9af30a24f6f760e1d8a8d2e169cf46b8ba7516b16ed2e96b5bbb6e20eeb540f7f4be5844b79e7ee151671a373a4e26d58e142691f576b98633aaa8921a5ddbe04814bd97a61c4cec06828ec5598b5a5688fe724522d9a4a7d9611d651d36249674d03845f0c6272c125d7806fe2bb353081161d28c122f29acc03601a51f08a4016e1082f30fcd93d5728ea47b79ca0e2b6cfb242a9d65f214d9d8402fab5b34eae36c45bd0330fbeb978ee2fcf2a0fcb24f222621fa9ab7d0dce725d9ded17f76d9f671ad6c06605d0efbf3940a506dad2e62f21bcf924dbc733497d038a08ad7f6666006a66281ce82d2f6619f66f6d35134e18a31cc8ad1ac7b966cf550a7f3749f10c0e64801184e106752a681216ffa3837967cd366983232521642549cf9088373ba9d2726c53c7843229cf12c86a8436660b9a28c0e4238a4c7ac4f0e2446c5178d6b4a90102e51465b132d9ec6c3ec954f282992fe09c9f2a6d7eea356c2d4766a7c4e03aa5e334559752fc7c47b5d52b06e06eab61a6d10e4f7483a3a0ebff69f6c0358c0bda930f4d7cc274d62caa67c537732b4a1ce41e4e79870e9eaba95cdaf4fd482fda400b1dd3bc5c8f8419633140f88e2c72327c9afae1cbeb46af06ac297cdb123537326592c57c95cb2c5c853ad052230733029b09f8776f245772a3ca0276dcc8b833ca146a1411560f76a926a9289a1bf169092fa58ddf9c3a7517c82635364a7f4df403890f9d1ef144fb812196cd7f0c77286780f491baec2ca6f61b9da400071600beb18fe2b7e76e86d5d0c1605cee62a2681f2dbdd87b071d79c190e8d373290a985bebf6d6a810a8113e79c5a1a532eec366e53a852b5d6e466fed752cfb7897a7bf6f1b653f6d0c571f4e8127805ec3515736dfa68f07ba29f321139f0d5a44ca68c07e191e316809447bd2cc041c05186bfcf1e65731b726cef277b7a02e29b17188403b8622365139bf2fc071347e1dfbee809a1671c43e2f82acbcd800b78df10f42a4017c8a9dcae15d1d2c62fff026423332e57357fd8ac87b1d9952a64ba6e19ca69e24acf1a805a8b07076b2f15811115bf70962f3f016365a2b20b01b6f5693eb1d01ec4babb2d341af68b923a2b5bf5a3f575f423bce6076d56121e00caac4b88c2cc83b11cc7422a66cf74d106b78d3cd635aa4d5c6ce0a81623dbb7e5b896e826999417fddbe2caa248eba28bda822986bc1a561f21387762d2def8c67a4f06e2bc76e0cb0d75f9409074dc689b94fcb3f83cf281fd236e5297dcb083a94c883282de7fcf721e5e73b505595e4f7120861c01328054c9b302af4022af362109e2f2bef44313d81ec1a39de7736f3892f04d9f6479188c48f2cd00d4fa9d9c99a72d4516d76698e182e2abdda6dc8354025c623782b35791639d9b3d6a7a4a251738016b3a41242a73e716a0b132fe4277ef01d45592e93a97c88b5ccc634dda046cd046c4031e66938e3bac7e8e2834609651b747a894e2067a554335438e44327f1cde6ed0971e14a83c7852308adbe3ed656ef8a3a32d12f111d50acd2e01727d13d91114c1fc636e65f0ee602b9d47fb09db1bce5ee0a0037e7d0ee86e42c0594d428359a07b5400093c0f470edd76c5c69ab821abdbe49752385bf4695c3063fc69ddc8e9305462bcd6bccd4d0d55ba8110ae281cdba388e7dda89469779443d5decb893f8ef4b57c39fcb0af7421ed256e985ffc3c54695167ccd2c878e567135e0f7dda3ff6a97dca81f440971457a5478000a8b6376e1d8360c581b142d9608e7a1456bfa07564a0d94d4a7b01976a0d20c469d880ac65d0dea36916d6c9048b555461adb44f08c58c4a390ef5f95c81e74014cd75e59579ae6381f0b32a134bf8204e4ed2a3587910b5c8b361874e22ba04c32db059abd3cfef63523231af4bf491b069c3f6fa51cfe8a26f82ac953246344f2490055701c155611592b394b9a3c1ee2f55a1bf1f247ccd2d26907fbff1c2bdc80674ad889b2a6521d6e8770a5d5a1229266b75b7f2034190274c65840a4d302386b6bef9ff2fdcf4149731a6c98de17942073ba9d5fee78c30e36204474695ee17c4bff0675b00ed30ed406d360c39fe63b929d3615656a0a7bbc9bffa1e8fa965dea7e69180454e330dca220b7df4ecc352b1196c41eb28f0fb8cfbd62bc27462b9e145567c25c1264b234edf3be1e113122b8fe0f916a78044273957140d5010ea7ddc4fa9baa221fb56a55f91470e032c3ed7b7ac540e3304aa888e7b67a23199892ea67d8a8886e3c1377a78f0b3b603c0fdb93fa5c2e4a7d24561caa96003a473b91a75a470a6a98d8a779cf888976dfb7c7ef7a257b79309bde95c7ed4c3e31f237a3cd6f326f0a0bcfdefe65af544078f6f57d7bd96bb14684e8d850aa19c651a98b6a058644e66f933b98d3f00b2986bcc9080f6c13622ba77a1bc4cc0bcdd33418335b655093c331b81c194e667a0d386610db497d85bc8c077879970f0f788481ef1da14bf438ddcf86935441de988d54da39ba18e886f1c49546fc655bb9abaac6878c5c94128d280185080d674ae51107ece948329c69750e65e03b339ae27b70de8910f4c85e45f9d5f44230b5c90e524e0b3bb3cbf2f392c067444ffa037bccaf833cc7382a1dcc2e985810164f89baa0c11e6db27652245a744ccf5d09012d86897f338cd68b7928087ba8909556fccaca71c2da8aeb7d87841910cf4ee764334c58a6fa99d2b4b6af48ef5d3562f701db50a0ec4a79453ac06f8ef5d3174c1eba739bab7b57cc374f33e8b0b4bff010953f3aa8bd48d085bc6c8f107a773d9bd8085ae78680199d8806d542fb322c3bd701c5f052438afb772099171a234e388e4c2754e52869eaa729cf3be1ed7e1066351884c3d112e46d5e6f651930b7ab540e30b7f427a95067244828744e1a89a15782afc42d049fa043e686b803d1777123e6d31c36058ddf69c4c1ae08e7270a3159380d2f096af52e49ae98b99394ae0b30a5bee3e9482c38bf2dc0f03696c440ddb7321eb7fe79589046c8721a11e50ff42a8e2455fb084deb57827e23eba63fe7ea3e5f84b41043a71961f0ce5126253061b78e7fb1fe1dafe4090f80f77b5b5f77a5faafbb6b40194bcb6f5cf81c67325c4fc13417bf66e95cafa0ab01c2616a42b0ba08de2b15cef7a8ca7d6d7a48c7a140dd473d9076360c11520bcb94177895fbe6b89da010779b0bc3910b1657d6f8d809c1e51a2db23983fccdd809677340ac188e6c6f65425065ac31cde52b0b4684ec0d74a95cb12999f1219ddd6091a34f505efdc96a778c388f7f92041aada8f9eca2098a1717f73748fa9f7920d239e571826b330710ef76803c19dc1d267e4578a3f1bd652d666756341165281418be46ac9298418b0e234c6df62403e5e6dd84a5ff83207c7f9fe8d2893c21ab6192dca5698e6d19fcfb4debf52d37bf9b8fb2cb1f7d12632035d30c5091144a44a00b64485e7c9af1e14ba87bef3415472d17ecda1c792f3ee5210169112a5ced08811d51173c1498e218ad38044208bf98efeaffb24e78d513294d197913de9bc755f4a5f472c8f3b22122d48522ee53a4587019624112c65ca895c75274e17d8ff9a085bb5a84f72e7aec45f709d4439108b966e8286445e5c71c857105ab9d738398585c3b235fc67b358fcb4e3e5b38030c80505f8c1b790f545aaf2aded7ea8238e50f2c6133d4e7d39ca10cefcc763eb292062b112c088221b218375064a6f285b279584b0b643f553733108693df771b8e887022ea8ff32272f4137463f8873648d502070803712d5ee33e24caeb90be938541ff778b61706a531b2580bce919456724969712e6917d191213cd0aa46f1fe61b4948bd6ed2e296715c1f97ad1bcd5769330f2656a56bd27e5e798a6a7fcbc427626e326103d6f7794f8f66ffde477605ce555d9b4c48970269e3194a2ddb4b47bb613d1980af006e089f8329ad8393699374d2626a4f9303736893d3d7b9a515c1c36dc4f81cd00dac6395520e1a3741c3fe060f90aeac4987b19c151667416f40f7684def3ef65fc13512f827c6c3729fd495d6c0b4a5702326930582843000ef2ab5ebfc172f7451f7dc38f44ca559a53229fecc411024d172884e43310665b3bb8c884c83232cebd3bac9267ae62c0ca800cede208b30eb46b749d8a58c07352bcb74a20bd94ba96abb70518f6b7974f4ce53ff24fd05a7b33453fabfba69778d3425444cbb785fad79abfb90fb7a27903a0b07b9a46e639b074285f15957b56455eba24a932df6e6af1de16fed2d08907c2b0ffebc3d91e4d3616cc5e57e068a30d4ca1f8f4dd6899052f7f44a01adb6a64188ce3e684fecc49a919d5d1f913a3f667a40ea6299d2f8f8b46bb74c636f7e7e392f295b7b0e972a710d11084a917cb3e0d4635c64a0c24c961d3d7dfe38077daee2e43420cc9b0651a2dc31d1ebc4188b4cb1268a12b2f554ce9500eaa57737e24bd950156c11dd818e75022a8e9ab75fa21a596646a776e2dd613a4f2e8a3b57e3697465666ad918140b761d05cd1280c357590e579e14898dcd4fd0ba74453c4ad26948e6a6d7e4914a3b87acd350e64fa645f0361788a129f93f4d80847622460d718e44af390f09c167649684afb7e531381087a00e5ac9367d20fc133249add740a062c3a29f6c351c41bbf0aade71675dae7b56c1aa440b2ea16b6129923d941fe9be9f084b3a9479024144bbc135ba3fb4c3492055d86e52e98bad405a84f6148c3b7122ad2a231fc58fce6fca7e1953531255ff144f6a536ebdcff41324d423d6c8e863663b3136bf1d32b2090ac57fa5e63df301fdbb7aa86547c714c35042a23df12748362346a2af44b8156a72765608158d8cfd312387e09cb019d65c68cb6f1efaefb50e0dbbd7c659ed7b8a0360e41da91826af4f35de0077eeab2966d89a0daa850e790c2f4ff0466d5a45210623d8f69ddf0754ae6031888835886e5e29b6c7b7f308009da3c217da7df956b7a2a21ac263493b123a1ea71ade021dd042c7772fb63c7ab09d30cddad64d6ef2a5255e2b0e32065beb55aa1d3f5b6bd1232b799bc9610614502f07a1d6253d6cd3e4e2ec92b870132d7d0feea64635eebab31fb028e06cd71f0753e63e8923ce681e206d4ef36047017b60621737084865176dc4cf85799acd84581be2876b43e48d5ec21afa3560e40856f944352515c42d58377d100bcc33c15c77f25205e4babd3577630b3ed440168219f64f424619fc1c6ed4f63cbfde62934955223ac9a61eba5969004fb9ee2c789492242a403da17752cd257e7443f8358ee800094d68634b3d25ad43c2cdf560a7e12421646f6dc5641d077c9ef2d76cedfef1586b5456923870ea2450ae18c8858c6c08b028f297d8dcc13793a408bfc606a2618009ba1fd68ee62a599175b6053ff61d5a21f74885d21f3480cc869fc554f57bc95f7102847b6138bd380e95ad88c353677fc89f1496a07b5aada0e318c3c473129cb7d3ffca2160467a8250f525b5387d1d3868c382d80ae90b1981dd745c46ab7d976a28063c76f2c0767ddb6dba55fd649e9ba661cb2c3aa6c78588bcf956d6d27a6970de5f3467952322c5df5b0169cbf2625097344a5dcab9b453163936788019aad29804233d2d5cdc06bd407019532672818bc63d8d7ac4e8e618477a44620013b013f65902491f2f632edf78910e074f42b08742d02fc6fc085fa95fb495675b43d2402af8c75519d8cf4c116620addb941af0402240939facb6b80d5bb9b078eba1e25d9fd8eca9bc4571413d2b93a137c6c24d0388c73f926d054a6c9e8c6e7f3b03478abd53ea3f23a95b209c5d9296adc737f70d848c97dd1009046820267c915b6bbb8c6a7831398126798f07fdeed08e3325545ba7282e594331a21057bc30274e91be04fbd763fe1f8c5e5a747ee13f6c86ddfcd1f6e82b4b6bd2468e282969014c345e794d13ed33767c9f03f14739566925554f5f218e6271da857b3c542541e747b7479dacc820cceff4fd96cccc1d5543f00a5e6f4c0d57638c02646c1535a3e0eb38ff80f3425c351b4e158bf83da6a3cf7f452f9f566d3b10c6df394437fbd5a54a1f6ce22c51ae66938a9b22336b4e5bc19c95f02e8142ccc4702c636a7a525340e6ae1e3ac0a2d0f39533e02ee723ced16bf92b661b89349ec75962234bfc0edcee621943302100f9c5fc984b23faab93fa35d57f26ed5a6fe3bc011a05f43e9241bd1c4ac4ee5eb606ce5e1622807bccadcf2815d871fc234276d97320e6f4d1be06091ff7bcf901e4550d0d10669c6161acd20a2d9cc6dba4801f0b5941de172b9aa27fcab738c0cd60f93646942401c87bf669f9f9983d7592ac258f1fcf312c96a754f7e3d5e71b6c287295fd2138a421d4224b751f3101650a36f5edcd526e38f5501230f51b5af0b2732ed92c8d4c1a35500b0e1948898aad6ef92fda8bd446373b266123f6c6851e5d28935fdb929783254982b99fe15338777d780b0732445257bbcf867cf4c12452bbab8fe31576ff41e5483f493ebd3e5a089df1a4c4cff71c420897611eff1a09a80ce436c45561057ac9ec7b839b9602902b7357cf808e75a3aca10ddf9e231b6248f14ba2751e5efef61d8dbc72a05a7394f1497371d92865a56ce84cabda24592e2133731e5a1bf4eba7279dff46154dfc9b4bacdaa82b2119e5fd083612531cf9338d516ce76f11f3aa78354d7464ec8134484625d1342ab2eda6c7a2ed2a0205bc69cd2b9946e40a5c9f8420612c5c7eef79fe36f309d80049fca572c94c202b8acf6ef4683f1811d3ae7d8e4709ae3eb4b74c8bd338073abe328b6a1371411080599591bd6717af61ec62458c4946bf551bd87e6754013c36cbcac94b53019e9293f1128c40fc1ccefbedbf9b3e518a86b440d0b540872aa52d3776ce1f044a11fe28e0c53433141fbcb06b6741a0f77a3f4296123117aef33893a0f7794daef7a2ad9d1671c552812bb0f88f1bc3648c3ffc8fdc6dc81fea292c02382b0b996f0274c493031ff7850fea187e0e3e0ffbf72d3676412f76953278c061377652e0e877725801d0895df314ec58505f2414e3f9bf0142f14ecf14a63a845d6ab26567c7696835b7fac8b69469561ad0e5919cd5453034abdd07d65cbba50bf344769d790f760abbdf99f387b8d779f8b445c0a8e788501d6543169d6d2772602c3baf0c465e3f708657b4df24bc0cfa7132efff9a4c0a44da7fec349f9329faf36ca583d8933ded7baede6f2b8e07aa361c2c3b37730588b994cd388df50e1b80bbebb8178921210b2385b7d585184b77966bbbbf643e7f99e236bc3afa7b70bdf8f0e77abf6daefa4d475bf8bc5cc052e74fdb9e3526e6f96b51f9c0de18ef57eb06236bce2fb72918b60dac9978aac18a96ac54602e88d2d6e0e5116613e3cba7fcf249c62c211697b2867e186d6d1c58c8c9b89365f7bc8ff542af1559c205d242059c850c7849473c13ec4b0ab96973c9b89e492bc9be0c502644912ed50e107f5429972f974c4f807057511cf7665054dc21ed244458f43c562acd432589eedd0335a11c005dcd93b1364420f0d7b8726a19f40afd343bfb345bd93e1993a5f9462f1f2cf892acc6107f290c14d42c2de240ae3e82071f310659175b848eac45dc3e663f497495023a45e57df4d1189fd154a359be1c88c0f011da5156f8bc7e2d1bcf2a6fede56eaaab0338ec9c3c3541788a27330587bfb5a54e379b4458320263aa26fe12f241c6eefc121a50ad8c4d0f92226d95b032a38ee03761522c99ad2eca4fb99ccdac95341244f68b599a073d16754dc95f68eb223673f329a2181a95bf471bfcd4b042e58c5ea7f53c18344530233cb64ce4ce616325d440b96c91f92a734aa1b50412c6b733ab413e091ae1c0385ac654d1e2a4167c61f9dd012b20cc5eff188f10a06d3f0e818112cba5599111b832640ca4b85f758a1fd63650ac377929362f05ccd8e232c6137f55f2ff4679c117e49d5295f70f5077bcedff290856c2e37ebf75647c4b96c9561a7a382d38452fc26322cda135e3f4e2b62f53c863acfcb8b6e7ecad14e5e82e22c29dc81bb0b6c2f721325847f9db55aeeee26c086eec31b868ee675b6e4757e694c7c152e186536baa968f32d382b460429fa07e0543eb228330265bbdf3ad1469f3371e0f1dbfc11cc35741431f119b6cf56b15204db2858e0366356f3c0fc4b5a5003297a56340ef9d84616afaadd27bf27a5073046568f4ebb93ad371af23df4eb6260eb6510ee4edb411155e3b634258445f38a28cec19044f65bddf6176ea026528334ece2fd158e65c6d7318bbbd08ca18f057d0b093c01f70a937fb6be579310e264c6b2637471e1877f08a6b178d62202974f08e3869fb1390e33a17907999123cf2613eae6c234825bf03f51b4e595ae7c151169f13961df0492739a9e97f187dd63cc2ce7f8e2b0ec80a1e7f666a312f316a493608187c03f7a67eff14fc1372141f799eaf8246edf96bb7b4e6fb0e5b886623319bbb319cf99c55adf82c533d8d3df9b793ec552746091acaddf30b8636ab12d2f78d71f23afe0cffb9b87bdc2edcc2b63f0c0e3d3d8fd69bab6d5d45fbf1186961ad2e1218a59dac7019492f654a26474f70304c87dae4a43e25347af8fc291c147538c74447e729198c5c10ceeaf3ca95b0663f1dd9790f38fc187c62c9a85d480214c6b6a1a429f25a114938221b7aca0b34563e972654231127f80ee2c40cfba37f33aecbcf7998f26af7a07f4c7d7d384f341e9d1cc67f976c005efb09cd113d09452deb55f7e9850ad311d8352b84dc6f1f6cbfa3c0c6877126212624c5156a3fc4853aefae55483cb362ff0ec1fbb121dedf487ce068ad5684420f84e45bcc481186b6301b3c5f2a8e49b798c0b6926e4679ab9fe349dc3ddea3d0c8e7c1da3e5b0261941b5d5c58c1c68d2323ca557af7d495e313830e116e8f45db3d4e121b1073c1485b9a1a2ecf650080b20cc9755bf0d094e3e98c2d9a916a800f14dd1ecd9fa9644cea3f1ce65115662cd5c616c8f6f5720334617096486ab615f31d398d77d0f95009993c97279a5bbbb81805d812b445ff9d5c599bcdcb2d2a7bea13e9c5d5db45dc254c4072cd6445b20d0a768789ace911544ac61890b5ff35cf1b05af1f06f5ba47014f1e5f5ce867b630af51150ec45b5b1e68adacf7bcddf22a977761acb63bbf140a6e744a03854040bbeb62c6af9e6b4f1670c92adeae11583de62c8af9f533204ff8e5f7edfa053851d79ea536c8b279fe1c6c23a73b53522609044166d60f31b4c3c1a6f67af26f9005e6f6a1f91161ee57323c62ed9c1e0cf90cb59ea3515c9e14c14ecc7a9748985b7577f84cc064e8ff940f8935b92b8e21cb0a19cfb231acbf1d200a43f97d3d3446174d53316ffe6047bb4caac55d463bee4d2486564230247f7b811a5432954cb9617714d773586e53e110b0f500fabf512ec275ff577687a277bd806b7b4876af669bd82a1bb4f42c1092c9bc0930ee46e4d885040b4b10eaf0725fb5282631d578a0a3642d15928432b7103b3fbd54b930c5785c3c8f5be57411c55613ab5436c39e35a9738a18ce4500d2533a2c545338e719126173eef8047626c024e997dd0c47ffde79ac45bbde46a13d6150dfb6428de1d46e43d451b03ca4fc4e270ca4970ab80c2acd33735ea1cce52f4f68aba922fc4d073d91b1e4ae714a06b69348c5025aa908141e8aa5918a330eba81ffa550a57123a553a587f8d8833e838658f17ce0d30bbfa2bc4187f2994ea15dd5d28e5b495c046c1fafb5210f145d36ddf4cdbe6d26aef464f362b2ab4cba56e59b02b1b022d0b4f6e80082c0626d571cafea5b7f1d11517f7d40c24048e9930aa1c38bee537a443b7e4aa9d82acbfe79f46a039d152bfc54abcfd29d0c8c52ff9387e1611f69c835a52000d26686abb7c1c3ca4c13cedf8839c8bc7b59a82e0a9ca96bb21664a5a3ccc6bcc9292bed327a895fd03dfb143b57a6d7a925458efef2f635bd0da232db9692e62574574e9c4911091d481e9f34aa8fd1d53577be88a6b1422b073d2355e106911112d2dec8dd4c140d0bbe61cb3afbad3b76dd02f54838765f676404d5c0ecf3b37c739ec9b34d705b102b485e2cfd2d820e65df9e5cadb6a153dffb280927857516b18629665253e646e489d0e6b214c83582c725cb910f2a28bfe26db7669bc750418b227ba8179e1107a8c0c87977fa0c3da1751055be573e50ad598f19d11f7eaedfd7c2c8bc216799c93a16b09e5037dd79f30710d8a50074d48185dd90f83329dc7e86e4da353164a083f5b51dd95089f1d76834d62a2cceec77a9f81d2c726e5967846d7a344dc3ed732ab8aee146b6cffcf302cdfc4aa8e66dacee1a5f45ee0c822a7c22373f3481aafcad1e1452c9ca6a657cde1c24d8bc70f43b968f159a93fa1375fb6711ca21fec66dd38535a7db70716b3c2007baca88c27ffec56f5fb4a55764835f562f1ae7acd6f5d80b2ad79a54fc6a68494306262178dc9972a0b54a05f0e4e04ee11f3cb8fb541723ee35b2553eb0c30868111123e4057c688f870fae8eeeb15068771fc36134e16a9ae5d13baeee250c8530e31b0b5fb66db406b78784e26b0a844ae35b96036a71a08d06728ec83649f99bed4f15d2e36d0cd79f564312044f9b452711e9de982f2e51f31ee3a7102c989eeb5bf9f55775210f8d15880b9435e1f584940523330b35fa815b464f58307da3849d156350245896c00ccada4b63de32d6335b71e0746cdf90f477b2bb7069be932b90324a44b957c2919cd9be0fba1bc787d973741183f909f4f4459b5b24b05bf4b8e02d54e992edb233721145625fc5a315cb680bb57e5076c3c1c774bb676cec7eca5665491c9f4686c1de090a4f919480f74559474f3e3a90b691555b616e9adefdc367085fec316aaf9277a4a6948bcfcd0b3b2112a42e8c1cd400520b13dbacbcd408ee0673dff4ec1167bdc6de364b1c25735632bbf1a2f2f313751420a06449355f85636236a5d4b80d240b71c53e9db536e59f31de78c5aa04eda09420348ffd0605c24e174611322aecc915ad63b95212cb5686047a14d84048a2b6fac067276bf29536ff133283082ea435be24a79859f2a7ea8b1601810f16f12f5ca4c7967b5d5643327dad00682c82292a21e6e35ff5a31397ae4d7e0ce9b9eafa9d1f520ac44ee38514352844a7825e93d857ee2f0dcf6601b4ffcd10d73649c4c305ca0cd1e09a2cfda1b53f86310fd31115cb6d3545123147afa93a802c5221149b7e5e49ae9c470ee5d2507c59781af15ede13fe4806f7e703ab20c89f522fb06cd415b3b18b6379845f4f73c2b6ed368e49204f3f24cb94867644fd84ef51c8fefe172e8e683fd37a997916487bdab2411557178c81106e5f552b3b4660fd74b117713f314058d9f6b32ca25e1535c2f4506655869a6d1fd8cb732e66ee797362295f8b83f2d1fddbcb13d01675ecca6b9a42ab6d7be4762793582f405ca575ba8609650e06e64b38e11b5bdb8f44da9abd41427235e4eec5d93f029fec56d5f46659ab077fb4ed3a474837014b3b8ce9ac0c795ddc6f1b380e6d6a87fd2847469c3060215c4379eea942a9ccdfa9212de251e1ff3b780237c9286653afeb192fa6334ff044e3d6f43265c22518404e3ff84cba6d789c79ff8b1a174e80d06599ee46695499695892cb1f50febe7037ba2a7ce07b2eeec74492796197a88194e7a8508b4be6289dba8f549340609fb36b7849253d0084e2ab686318f00a23b53fbb68cf479dae4e68a5226f651bf74f394050be05b9bf719e0b5e83b6044a90c496223c771d30fa319c37a5439fbd80d6130854b327876db0f42a7a1eaf26d99467601084c4884c4f833f4a56a50c7399257878ff767e6840eb705d9f0fd34b404516a81b55be0ff2e33313de4e9ba8bf8e27efc81fe4d600a45cf93f74f753c262186a5c947150da992fa6f4bc4de93852018474ed588871c41823b108f30de5df20b970fe023b5c0a39c39e3a4dd72bf128d49b79b948fbc25deb5a995efe64fd7580d4965860ed4b6f452740a5448c816869b62b861518aa57419941c5d10c8a457b0578741c13bb72c6f6f0fc0bf79b5e0b7c58aa41c08d68a2d292e5c2043a0d33baa9d28850b32e34634c8ad25b4d15876ac9dac0ad3a36bc3f090c34230e0ed3f45c964713583fbde330c6a16ee75b308676dd740396467a83d57c05d22756bd8f6bcceb7a8545fff6d32e0ef2143265c44a80257a583e3255a4874220037da5fe123d822d284dededbc779dcd170bfc8f31a467ae29031ab623948b61d64db2a5867f1d54046a4596141dac03be1b9980a331a55b1d570d0b4482494dcb7093f8bc5b2b6bfa7a3a2d4f01a7455e053ba076e18e8e055d8ba31bc33edb3a710b868e596d7b4e4c92d1df17c958e40108dd2b4c502afc06ba26ad32bd84a7052b01c0b0c7e9180eafc16398cfc6525dc1c6f52624358c65b970aefb72016805f0305519a4f9de04d331f694d66968042b23d92af82c4d63dc5026e09ae621631527de36e78b234ac2e1b9640ea5a6135490be2b822986454be253c5424b626f1ab4da484855f1356575e98014203e3ef52afefc8351b63686aa7039c8537748ce09224e316da55566a47b3c19c87847e96d5112b3681f5f9e25520342f46a2fb651858937153a68b01b92c5bd221b03f565081080c4f917958e062baf62603674ffd0e3d6ab48213956c790313e0a38039f580decd2e120d36690bb1af263056cfe9b761e374d5279afd94034ba682bf00e6b57100340425227085000237967b22d34593aa82d7b66d4b4a635eb2d590d51b201f435834539c01b5b07e42023a06fbf81ef4d0d32284564acf772d041be1aca1c0786c2207578536a7c60b26f5778de093c89fa1301b1133f15810905e62a6d19a7a29f4dfefbe58e91b6a63fbd5029776f04f635e148e4aa8c7cf50b92b1af593134e905182b0b40a36c824a0ad381c557929615df5cc7a1420a3f7b100ee0bd9aff8f0dcc2fb560feba6323b83ac7710374b80dec9050b24c40e50a628f8b2833521d2935eb928e3f5f8654abbd75d5c700113a89aea8979a21990bea403c72b973a9651d9da6ef07464d4b16a45d09b5bbd16360394e1e044b3b135387797f9cf80e1e99240c9a58febd30040b52c1815d3e2f6ed8d1f3c2c86a69d9b9428ebfcde80e4e848f6e51c9f45d0880dcef62036a4fc6a8ee74c901e12fb9a3c19fbb2f70379730674a2c76017723430e05ecad813733d115be1484f929e911c7c76ae00c14d5d9bd0713dce43e6415af3725f784396b5aa84dd576c261b8eecdb950181d1670396d1e602f5e7fbb996e8a1b1efe072905b39abc15b85fe9a340fe5561714bf899c8ec8a66d864b928923b0737452a122b1daa34482c7a0e33ca43109fd51cf6457d4b19156e7022e71f6b7c83a81fea6a10807e1b7f3f3abd0542cfe48a1a5275304db4904327677233e49868086ddbea2c7baf569b26c63d85d61ab040067239bdf1b4f6d47aaf38190ce79ba75d3b8d991a48f19503332d725eaa17b92d4258d6178f57f22a69d76372e9da427f5b463441f5396e367b64dab92948b2232c932610e5828b3104c177c148309e0c70f2baf14cfa237ac80c9d2b7c38014d7679b9aa4cce652646fcbb484ecf80493a31b6c8723e2827b8dbae93ee5fc722b7a1d7f120b7ad353fd6b431880b3f5e736b54b0c024d3070b279155bdd3ad6d74ac995110353f4b5d1e9d1259a8b902550e78db7c4d2d2e0ea8aaf91587996d6db8ffaccc4a55441100bbe767782751d39f505d3e46807acdcf7d731e5c25096a972c9691d2fb35b2515ab2acf88b268ad267be45e0da798295a1471fc79e1b48f5bb76d4ba1b061790bbeb863c3f3aad75ab67e14b192a4457f4b4fd6c285d748a6ab334f3c66506efb163e87a9f6c939e37c34c885344a9996556e4c9c503236f45d35030fb7dba18f275eea223271618d5421455de32aa390a6406d2783c29ae3f7835cb1c3d664bf6cc6921aa4cbc8c6bfd9e0817794e782917259676736ed061621d63a31e94676779f8d5da313512a85f4cab9c778ebea77a677b9e20693ad5435dfbe730d5825e98c0472e5917b3cd4e4e883906ec5f77981003f30ccebf34a8c6188339d588ca30f6cbc7478f4e901a48ed6f1f5ade01287e0be64f896976eb354cd453b9d4c8b9fdf7d2465e15238dfce40c6aa371127c5bdaaa4713a8a6b681a4d32ac75e5c6e094fa25e3d6e0934833ec218ab98e2e4d0e388478e09b6c50e887e1709ae3d730b78d8047c2785ed64615806e08b1e6b46aa6d77d33232a00d0a9e1f40dbc45b01f48e3896831e163005de15e0fb03221f68b5285849dde06880275b1fe340dba9ac4b77d44955c8fff1aa3e92c6e23b112078152f655630447ceb4524f930ad89858d6401cf58fe844e2026766a65807bd61f01cf6bdc29ac950349d941d7a16bf1ab45d0ab58093f7a4b24580e45749ab833472e8f4adc10467369d4a2d7c526c1917bbf20afcf7e16c255e0477f4525881b6e8be18d235831cb7538eedce152104a698336cc4597fc3a18340a43a73a47714a87693a44336d220feb24978f3ae0020f6d1637a4ab9ffa78e3590fb112dbc57fa1d99744b470620ea824a68d9a5422140d5314517f15f5259c4cd772822cde0fa1e8d0ec87b83b2179464ccf468712387b24be65f016ff751c8d1ffeb72b6e2c03b6ecb184358d54e80c343a9d3a94143a9ff65e6d781f4818b9f6eb28c5264e29e02d038b3b434e4fed821c1e3b281e07f53be7cbef417b2aca36c2d3878323e6e6627e6897a075e344ac5bfb3b66531feb0ee2fff1e639604dd2aa8dfadd2a8e5afdfb6159796296b1ca109b9c77109d1c1f416a99dd283463e2e53a0a1817997d325ec2940e7765704c4e26d59d02c5e347aa191f942837262ec53b5e9c749ab3771d6a184e080fa8ddf94d8f015d392055e2ae3dce47eda469173c2c4c3d0ec1b4735e7f9822cfb0463e03728a39278c8b1b08bac62983bf0b0e8265453af51aec8cda8eff46b878b05f830c4b5f2fa2efb0a031343888def09f7489a0686c0c49e985fe5e498bd162900966a5700b6b3d2455f5db26b1dbfb04619f2d411819ca8f5635e52d013824cecea32f11856094084b7b137631229b60f963ab135cdf871063eae540af95d972e5550a0e5416773dccc9726b2d41c078d0462664e3382aad2b3f756584ab471faa7aa479d256f21d1492b86d93e3c25a55a1ef686e758ead2b5de26c8dddc2781191164d9d47a6795309505105f7a5393b49e0298043e5b883e5ef1cbcdfb035ecf64e757386a9f154307f25f910bd0dfa751565253c2c6e439bef59eea534f0424b3959f93106cd5f5efc503df44e6c5c02e84737b4ef503520ce279650dffa656f6845b7e8eb3691b7fa3940dc314e4d83fc0f71844572a417db1901d1c9f080fd14320d18aa16cc20d00db6299bf50a7c2e1b17483d96f7866e13316ea6cd13baf91b74f7dcba11e1277e45496feeaee38a1354d088e02af5a1323cfaca4011f6473df163c14460b72053acc42d5aa7ed6b1b5ddc445186f55c6967f008f354976f4ea4620b5890a64543fece03b4deb94c62af353466c8478a4e71516211c4673b19bf2add6fae2dfe1454de5776f020fa5d701eff44d53dce2065ba64a6fa81126993ea740896bc117d362012e9ef145d6e4cbf81e26680ee7ea443f60c37a7e52dcced09db9402f32c2f7c0db52be53051a40a0d45fc0a3012fcf66553c6044621fbc0e2fef47d264e4c51ee1d725c56777447692c999f31291d1bd68b6747f2343dd1501438d1ba25e5bf924df84d84574ddcdf7f9b19875a7046e3efab4e49055eba5943ac6aaf5d72bcb725f21ccf6b60d128bbd88d30224bf6847fb5a9d032f768534c5837fb4974c20da82e53b3548987b08388fa2113ea7c8da3ef2f121c8dea2e8ac9821268338dd0646427ae62aad9f62ef94daa0d8a6762dca9585a45510ee4bbdad7740b9a19b616ca86773d32d4b337dabfea25338ab4720c693d2d9b146b1f686cbc10dfa00d7e0b911f6edb40b0e92829d430276eb5aac515b565ed1e2c10d5f5722881107d7fd7bf305e6b4597ccb9540572c0c5070649edb43616576f139bf1661a337895c659abf71862ecc1808216546619bad09bfd78716ca3b8957fafe23c5d544d00ce1534341331105ba2d4cb4c00fcf6d2aa3efde755ea026a124177c844d6e1d3cae97aaf4e111c9612e2316827946b7c47ef6de1513555e413ca22d1562860330d077ee97d4784bb5a93f9374765bd8129057fab44c224ff3f5fc318114b3fea81fd5a201583fe8e74283be42e72d386785c04a4590d78cf2c7e28dd7c94555b2d1b46bb3f236954fcf2df9301f7d13274c35f4b4ee44475858bf396592212e0d2dfb71346713a6539a65fb32de5cd35acf668b8330b0c49d6d136b32ed3fbdae0fec0223f4114fc7605ee577c6fb85f4241159c475aacc8d36d3c753a873667ab84d32e24540a11f59ad0c6079b39b9766a098f1767dd79ae08b02d7e8937fd3c550201431a7b12c8fb58532a8c30915809135a70c77f12624cdd2c5c246c949c2c754e67c8897019e4a7ec3f30a321d71fd574762473fd2aea9c6f3cb04a5a713b4902018107df6c7c8bab1f51a2cc5a4770bf50868e281f0a22d15d389ae80411d52c260319527729f17345644ebb85649a4527e20e1f163f87006e20244398ddc9c17a76a65e60c2367a76fe927ba622a93d2d20ef19df0abd997c18e3974e350c222e1035fb0af8a5ea19899618ad0b5a4c376f4d96ecad32347afc00a98b5a138f41699f4f593a10ee4eba2e4ad31e91e75242263dbec35f896aa733d1e2f7fad82c4c373e2e7953d47ffa89e1a930ea346a06427d21d2f57d0771ba0403d3a92502cd89fb405f32bf483c7c77714204a403c7627c0fd0e3f434c3548706eea5e25dafe477b9e674ca38fe3aa2b09211b66ceafe35cadacb2c4e82d083f45447a6699d1bf0eddaac381d47d6c8e90e2a1c461ff4e9870e700f47181ccd6942df38230935926f37934411e202dea595ff9e3d9fac136d43c0c00e2b38d4bedeceda689ea4f244bc8b7d75502896eeb04a2219277507f10c5a8114eb45c0b1fabb622bc4bb3b5c26eddd521882c73b43300c240fb5672dacc40d37fe7b8523423ef21dd8322d511e24ed404035fd58f5dd621a52e4c0af2290d800ae035aa2730094578c1b9deffc44fa1539d9931e3d9ad31fe6952ea281bd0568ca55cdd940731e0d155488b603463d482a8544212d0d2948def905d518ea217c4dc373d2cbb09a3bf05a444f8fefed44d47b47c5860cda2bcef4a2a865d9ea2fa79ed5699a577c714298bd4840a42c599f9e05d70df1d6354574f62ec457de2cf8b83045281c8460e20c67cc1ca2ef0217197732dbbea4671758cf8fed22222331f08f3c83f6da28f8a2c24abd1c654a64179e9ee3493741038e0e80c2531b4fc617944545dc8a28bc8df859a5d378098fd6b6792a85c6284fa2800c2e4e35492c7ba3faa29c26651d38c726cb45293daeb338f177266240af94095da381050ac34185207673ab0db0505cf2bea05c0979425e7a1643d105e89d56c95a7bf6603dd1e90dcb49b321a1babed935907d4ef113d7e6df7f2006ec74c626e31d4d2c47bcb5ecb64f3e3071c3e52ffd54c4562007d846a4108042f2ef2157828d3e4208eb21f24569053faef88ae3650ff740391d46ebf693d0573df8f9c62ee6ad01fed8d7eecc2dee4a0398f59c9a64a81cf8e01e6547524c64bd782f3d63cc6d384a88e58d3709740bd204127176920d5e60e931b237b74554758d55baa3d351362bbde7234936541095edc9b49a422429942f21856544fe02cd3a02c55e2eaf02b3dc46b9abea142896211e49ed90b9316a2b4fd2f4d79b6e43150e7cc7e6903d6333fd410494817e444a1a866248f05ef3342e8a7d82f72441d7fcc0f890ef7b4da453de7104c902aecd173ff222d0048bb032cc67e35145726af656944d9b2dfd2fb1fd619a666fe1064b897bb3c122c22fa170150e6d775d7eac62b5a3d81a3d6e3673fd5c442518a2ae6d2fdac040a8d418c3ef0c420b63d7a51fb837da7a21993a1616cae065da6fa4ff8f0d7b02fa0db7521e11db4397e834cfe1e4986ab0d5e09a65eb3741644df6b9afc30d125233a38c57e447475db51badae651a009f34314180511c270bb9dfea77da3d6b16c182ef0bd8bd5372fd8ffa1232d7160629ca1442e178421273064447add10d552932f44f43090b1006738eb3edb53fa0bd0ec51524dd7c7f7ea9df6cc890529809741891107057fbfd77783b1f300db68a1bf958d3c83561db4205f1fd7e71b2493fed64aa4760aaf4c9088a794d56d0b8860169d86a7770ea39b495c6a41cfd32e37b8b2c900c1fcfc4e9c4d50d0f7fae615c039a9a0573b5d491cbd8067815f2e2d392a4af37f6de2d22eb89d16522d6cbbcd7ffdf68331711befede270829c32b2e0cc68224a26699da9387e6151d90910af2b55f132db5f9564a91c918b625f8275ea3585cad58a2c16745044503d9257090cd0421dec1ffa832d32633cf4d6f477ff18c401611a165ec62537346c1a7dc48c5577c2a19051fa2018f27cd916e4b4ab33b0c666587a16e6a0e40167262712c4aea6ba5eb1d65ec6c9d158179985bf4082806dc63faa0c7673c1260a9e2ce6c80d94f6b11023bd75b415de85572d6b584193acad82180975eff2474f2263864b41927f136b580178d817f239cb972f4665d1ac31d03945e58b736eed94f367e863d6391653713c665ad3da95e5ccbe88de725b1bf8bb84e7a37667e7e913e3d4a005625e3fca5618f1e5d6fc63cbdb4831e7cc175e73d11f6b20c9d9e9547d36f000c175c0d1e67484430354d66031afd9b255847d460ecf60722644a0e23161b2769473cc42943f03365f61b65d7c717411329c3b702baf10f34e68f8c9cc4975f535049d3c71e796513737f08adb748134cf80405ad9bda5138b406f02c8230d55e45edd9ef14f6cd5dd83571c4169d826284bf6b3662f21175086483da956e6a4357550e5bdefc9e01c957299a9773de5277ac4fbd64f43f51dd63f8797aa8f3455f4b913f70d87b78226affb91cab0c6b7bceaebd42d75862e9438185fbda7971b590c5b41e601e4f29c89cf9f4853431a873015306c9fc37a3f3552d57f67d04e470048be5584d1950a16b86c4a1926f884d227826da947e8efd5811b54ca71eb95fe97c7e56b400c01b02645e7673029f1a4a5ae70ad509dd85fee7003b64624889cc64b716f12102233841ddf9dd04715a739b024c373bcc0ca7fbaa63ff037f651cd5aa0e4b4af494a63c2e6cd41db1eca8bd17ab512ff349eb69e9d4ce4cbafabdde8feb783d64679d5706544363b0ce3646744b632394c881d9efffd926f3a7eec2d607ae7bc25b400a0f2f1c7463f16167b7f33e0d1867fb20d7aded1669da0eb5a53854090d347e3764a81903a819b64aefa1527b912d8ef9594ec4278ec25884fa88e4778010f1ea106cfd6d9b67c1400d671936984dee91a697ab162fc3487b2e42755263fcc87bc93bf405ebce4e9e4fcbbc19f7185da583d75d2583b736fc14ed5d1d67a0e2fcce97b66d7196b172f483d603455a10b31991b72f4fe7aaadf5124002937ba2f719b7fc5f7fb54aff88f4753b7d898b3eaeae3a46b7158d0db5f73f3b6f0f67c11c61e23ae9eae331f6ad7a12334586746ec7d9031c55f87be1bcc9339fc307831967ba1f9ddf51809f2598503964ff64d9d8be255221f4717f6c646086434a10bf088b10542cbb725115876a42c538d8e097a8447b4261eb64efb66a8638fb60c6c3f06d14b637fa1fb14871dfc39cebf2e90b51ae731cd0bd3cb2429a915a236efbd94d6c78b2e8b761ec186e86f0d2fe1e5072a336424590dc5c1f53a5ebe0f3eeeb40665bfbd9d41ada79d6f6a52890a5c54c677a388d5a899e748abd9e019f2f1125f033dc3ee6df8803b900a10272416b33ba76bf36cd29420a2262e52480bd9463ef4eebcce699810431b17d28dba0ae2b07f2bd347bfe3f47b3827bcf45f2c5098c92aad7f52a6600779d051f7e84ca12d979b0f8147dc433259902b011029a4db98691e93205a2572a7fbd50f188ad6bc8f5310355aba30ebbc7e96766fc21383067927ed7e4fe2b02ba85d09b678e12ebdd61b249a24766a5a9cc0d2e405b52deed414f87a82c668279da8208c9fa293e2f10ef04108b4be0474325b5f2f471c9f8f00ede72eb4edceb1917617b390107eb9480e46d0e5f915272efa3ff0b17c665d707f9ec2307d452637725e5217ea84b7fcc4fa1d866ec1f0bcd838d8638815ff99707c8bc7b0103273a83cc2302af81fe7731a678160ac142d45ebd8f7d92000bc77eca59244612cf4c00b13c05b3e8d25e61e6ea0e0472c2deacacd465012731667a22f45787c1f3414200c740f829fda6d906dc69a33616e59394ac5a032642717067a67348b4393f7297767cd5b2bab0906ec97eb3346103f5815a6c1299e185121f236a9d75ccdefe6b7931fc568d3017f799561f807af00e10871b17c6ca030af33a61d88fee615f88df3af56cf52c42daad1e5be4110cd781df33feb4ba95dce46a21a94daef4985d940365b628278007f0318ea8ec4420dd962f325aeebb5a6ae92992add561e5b28c30c54e5ad785818a067d39a0f85e4c1a2a8370368d04d3674eac001d2b9cf7706bb511040ed056a200ebe0997cd669595f2b1ca44d0cfb8045b7f344fb3af81e7546749801711a87416a78abf113beb564d33d944cf19a1d236ccd7f38157c347dbd014d30f2f16c2a2d4ba6a1ce12703e151f5eb73d2abe681bc90db4bc978e61cea22eedc107ce6c00986bc8c1407202337f7cd39a9cc92763ac8c2ea5e9361702f68a35592e867e72e51461f0790c2bcc16c23b8d614f404cce67a8700225382bc57e6db72efb672c9606ddabee13546592c33f921d944257d84c9e32f35f341ecbfc389755a664b60951444d4f073cac7120bbed1b350f844193ad2e765530b8db9391e66c1b3ce78964d7f42c0416e15560d8e13c1051303f462aa718507c62a7d52c20e48e4abb59be08089c6903832e8862951f750a3954a5a0f65ba161678f81eb6b02736b063ed669f005d8689d41322299ee41750ee90130662edd2dde811704c7a84e792f424638c76c4c20077deed4de2bab2c33a204e3192b7227fa56e5e0a7d1a278dd3853c528e6b72771531bf79b93826a3d285521549eb57e3630c9452a074940b38af0300532f359e42aae3afc357448bdcf955cf8b51d10344795a13103494edf0cab7b36924d4a81292979923511565d12ffc9cc67ca0425dc276b3b275948ce3f3e0bb3e982484b4855b2b4aebb717b8d0fa457f31d77341c16db764f0d5b33c7fdf2dc81223c93e2ac503bd8e67e115ba7c284bda534fe80950fb5c3040c80c772ab30716747f0c2124f22c971443fd4e075e155e973b2e55fb2ec368d5f0c55f7b78550f8504dde5cc1b17a6b51adf77a526d5b447fb295960da2a79c3c22b66391c807a10c7667e223423c9665395706fadaf2b855232e270cd6e30735f9e04d6c09479f01501ad394c39f627861e1f976d5f6fa4054d669d0460c153ec2f01f554060f23fea0775d485000f1eec1c0be77b264b2a2e45674622ebd23e35c75a9fb2b7e9092e67e696bbe6de7fdc2efada9797f82e34138c7333c7884af511b1ff31821a007e713edfbd842d48cfaa5b91bfe4c66067042f5e0e4a7e32dd2299131bf0451397dcaba67a0a3940051cd6c77a495f454e24631526a40336069a20a13d6237480bde39a18e5b514d2cb4d256f65cce0cb9661686e119a6016ef1dba326da9405153fc7e4724e2a6368155b8ac1515671204d2417ff94b65be2d6b9061ea32c5acde329d8c775de6693c29605ccaeb235c98fb84ed383834f846ac45981cc77162c1f4427a80eea555b37e2467a60cf39726dfb00bf837f35b3ef6c52d9e2883d62b9e2d4b5dfc0547468ba7c3c97d9736633e6f6c4cad60cd12d7dda337d7679de59900d2499ba30c435f04418142e4743abe1a78e7356076ca0345bd131a13933ab19ab23c50c1f30f6ad4dd7af4a043a473774cdba966e2619a56eefbcc43e43a7127386056c3e84643e3fec325c2423f678adec43d074016790f79e522435e056211bce77e70a1f0312a92cb1475776c94cf84416517988798b11699b222889741f435477f254106d8fe93026474edfc77d2bf9d40e36fa576caa142a5f7d1f15cc5e2e755312bda0e9d687684960323df031194e224a9b17b703f4b7bf3932f3f7b90c5a8269736ae89abde5be63a1ccdc511b90976dc8e807b9d3a8f8041e50f684a0fc9373c15aa48436bd087fd71aa4c19411555e5c8981f5613c3c1c9d12839211c63d5bc797ed89cae45c09a55528177b9d120398c0e82339756e0f22b60502dc346c401b752916e00ae065a3b33766ee54d664aaf1f109fc38cf6ae62c2445c28c5371e8e831f0c729e4721f7c7f7ac2f8df77490bc0ecfec5422ff22d14a66321391e0276a578dda5f22934e5bd728fa1e3517f0295a4b094803ee588ffe33f0be05fb30792cef1d9fd110116df1c7d4b416cef99d99a4921316df6669355a60eea28fca14077f0eba05afb7c5d654a9b3e66ba6d0b5acdb9ea6e33d2858306896b718fcad574b04465535b5dce9ea444e45f784eac2fe1443b42d3b1e376f724df3c7dfc43c3a54dfa3b351c57bdc17a4674e55bba81726627157c1ff0c5c9eb4c5a818eb6a6f181063090415efe4b754218af143ab61d8fbd24bed9e26757075f150441273bada40b13e3d60606d2fc316401d848775b54cd7e34517c0bf90ed905304e0dd3cfea7b34dbd50f3addd51762d7380d15b8d31358391ba4f7eca0d13cadd07ee2dce1360f9ad063e14f979579ad02bdbd10abe913fa652aa0fcaef86053c5e9a90a41b66616ded75f13fb1602b00f7d61a2e9bf317d97cdd1a7c58b40d62461b2fd88c87e2639430dae934a4622ce1858c8357f5f7062f4ec7a56714668943eb126d0ed68eadfaa61d045be78b18f2f5d6fb3d9118be95437b9c3c61153ff4a2dec58f41a835abd66c899d80ff084b897fcdae04873b0c1d68c1c45623d912b41e044514ccaac3b33d290f86458c940c089201c1987ae5a57253ebd3bac0ae79274b60e24fd648c4984e6736afb365728b33829393356419ac29f940473d26fbca40329683cf2aa558d7d677148206a2887557205d4387fd02ce02340b44d6f214415b26139220d8bccac652b98230eab5f3b4152af32faa094f8ba2436f946d3288e5b66488dfbd20479aa12f0872d2e61cebf704df6c45ae475172421f892c5fed1d961507f0102cd72955cc8786c535530622ac0abb74b52067b789742e065b6f47b6a67649d2de6b97a788fa135944012f2215f42f0121cc47b1d9b6cc135022f8d6de524af8022c5e25e961605d3ddf9110cea7c9519b9ef931541416787282298582bc00bb180afd17ada9cb30cea4f45595b05ae6c8e0f2b29cc2b3753d0200960b39481ef166a001623e7671ebc408823fed1a369919b4c5a89028fb27f70904ee2f7ae0569398649bd8862013235073aa417c8cfa6c55f58d1f9e2d2281d6e607e231d0ff0f2f737a812d9e601b17241f536a968c79f0a1d68aa2a9de3a78e250a3c81aaace8d5680fff2794ec78567d6d24c75fc6d7281cd2c457ba37a6ac4f600110c1cce211210c1159c77776312002a730bfdf2e5e31eb9b838ebf70606853d7f3ed88184a76ec599428cf0f6c5b6dc844212893d030a3dead68669fe0644f0f8b607dbc671af3a7ac38c3860023d1d805774b7e6e1958db6f99394d237339f876de9accd84f62292e81e7976d1b227668716596e72f5e8df65eb3311f5b7bc68d44022041624eaae9deb013ce406f53bcafb694d95c11477f0dd57a9c6cb6760251da4ee201350523bbac087e4bbfb6cd07eece11106016cd455fcb722b0e7d273a107c6542c9421b43476bf60838cbb2e0536a8117b4cb1c11ab01da19de39c4530108a47b60a5b28ec2f6fb777fb2ea4ba79f9015f4e0d73d71679655eb6788488aa13117ca2f2e96a56c42488a2e9fc0e8b7740dc344cc210bf422219695caaf4842815ad085f95d211bc052589cee689d4e4a58c3a32d94ded7eb77c212679dd22417250754c52cabaa9624fb8a214a04ba051b1fdc135beb138307667d63f04cdd7f7d4deb900deb88fb170d089069f8367b7c1883bdaf3772101a27326cd6f1788e1ef65c680fb4edf85728d5980b5c13ff62f9e007d09a2fb5252589cbe10a2df67b98ae739bcd6bc729749a779d26fa413ace3022ee8f417c24138e353eb9d9625433ec8b52609c6a65a7315bffb718ff2ab86e51c4af1af555cdb176c1c9768f4e033396c6901026699c8896c09d7bdc2a719f79b577625b4ee2e084af25a99c31a10d02ebafc5bb58b718d6d87bca4849735fb0d6032529658fe5a87195d58f4425c861ab7ec7d954e421fe5f8c83d21768c4de7ba68dca38ca98856b91d21273a71afc432cf4c755865bba252488f1124740f52f08ec6169fe29e2e5416dc248cd8e488e7971155b8d33f54ad2a51440a773b3d2c8417b44476dbea9295269179a71589540629847aaae43c31e53c458eb5dc03245107f751303470cb26b323acbddb0604c7e00432593d7e50247d90d56996a78ec64a256f2ce833d1b8c943d84f606bf5c9cf46aa2fbf34dc7658c5add54634cd6ab262f81076f7efbc2284ed9eb9ef4bee54f45a5001ae858f01d74bdd79f39d6b7992f1c363f640c7265212d5a8a2439676408051df1d7c50f8770db1cc32d9d9edb707b31ee0bda4cae329af9bafd66f93b5672963df3a970f52c434f771051c77c7181e557f887a6d150cc2472bfca84d61de16dba0660e7c60b3bc24d29c3be8462752c7d4b5033dd19688ebfcde2b5f6417959f1be8182d168539dccb50b05eb76a9d435f602226e51715f612ed706d67934f35ee250bd1c07fde5f8b367270e625db789491513bc551460b1dede5d6f5a7445e8ff63cdc61448d10c18e4de46686fc4d2207c8d641f3808f6b06efae65f8a61c0dec1f0002a82616e19df2bc63619494ca32f8fd701aa08366cc476834249945eb961dad67ec4a8a2defb7dff63d02cc9b747898e18c63d7636d893110b23d49e8b757f680c20ca67d732b5fd28079a3bf1403b8a410645809f510d5657baaebc27df73ed4f3b4328ed0f99b511c0b1d1c1a8e0345da02079d00036442d21be90e07124077b878ab6fd129c3261046d2060c36a512785a137001242b005fefacb5008d4a01b46b3b6cd69ce900312e7346cea1b96486d695bd0ed076845dab0fe17d1e1583033fae5ef4c7b4249103312fa771cef1a9114e39f79cf2e3e4a71f2b8d078320d40653aef35a6fc16555b40460a9131423f1b7943024749012a243abe6efa1967010539dc57de5038f0050b2bf08ab623a335f7ebf1760f081c38c6116c3ea85943d9470fca0e9a1d944eab02c4e2ee616f1661a4f2055875f531f890a561a44f5eb2e91643a7584ecf1557a3ca0c43022728a255dc04673c7f2dfb03f9d53d32a95c6076cb04a538bf1373075dfc3f1713094932fb05d4594bac9570a25c480629da06925333c92b322468366fa0207ba7e9bd2823e8ff64e20bfd2449322e0c9ef703692bc2ad363f80271d5055067c1e56bef2e8900076d4292e17eeccd93cb60334bd9394e6735e2d106a1fbf57136319d85f5cf92558e17965f55fe27e0c100aa674c8e13f2ba0a50036b973343fcd355ec0117a2043212322e5d10eeb4154e3a6ebe71db4435a04bfb7f8ef9e6c4625c295403f1d6aea6352a4be5a5a519241e2d6cd495815e9a11a1539d73b113e71d5092e7e7e143ac42ab490a7fe4ca0eeda49f23761043253801da6cc5b13d8be1ed0d09c7f123c31ee6e8cf359425d328bb4020de1752d26c47d0063456e68178c4fc5ce1c3d6dec0cc148f3773ef93e7ad857101636dea8fdf660fc1227147ffa8a99f5822ab137dd10e55d423aae8583c1e96d165701562c6ecb129e6a02cb2a3812fd27103f5bd9dfcdfaae3a15c85a197f2bef7e96518bef21f1f661678cee4f7785b353536bffbbb90ada04fb99a6fc477b152cbba9a2c07138ee4d657778400c5fc2647bae6ceb2baa387588780a77b505e61478c194cee3f2e11a834ea8be6e660765d74278f5e7005765e31749ea4266036aa27236b5340b7e6e8f8667dc017a06228f5ab108822303766a2eebcba9f6d71651131bfb2f52301dc1e6856e6834675c1f6c5be8b4fbe7398b52e09c08b6e7795e7d8bee5e0af31e8ccf479b9e940e35387053c264109e4d05aa797dcd32d90aff0ccde6c055bb29a085a21b4cb3640abc542a86f655214d21c10cf77b8f1358f73d9c92c72875712c7d21df6d8301470f8439215d5f0054d1e53a01b63c512f6704ee76af092d1bc99c5a793342df5c3dac1709aa0e04683d4864ac62762810d50eb98d8e880805571eebfab9798870fb213bf5dab77a74f6a8c6985b7f47403b95b2be0392153ab41c5fc9f9ff223cc1f3b1413b33351c6cbb7cc8b15f9f2a662cbf24c6ca6c680d00a9f717436e087a76a7b0ce7784079f69d540f12113557d352e25be46030a8849353a893d044f298442280750f911a8b8c3309fad592deb008ab28d6b383f7bb1298542497e226e24176cdfeb4e2d3c1dcd760a34a926f107258ac8b6dc41b5fd5d468681ac5d3aa09ec4c4c60d00b25d756f9ec23551a4b06bc4db0ba524ffa7df23b76a4c4137d44f552d92152afb253d262c4ce07633aeeb36ed703945b93c3ae21916b61daab7a673118a7e36c595bf0049cc514e39970ff780e9ab3a9c090e69ccf8431024a42e1b0dac77422e22fc822f3a8e121514567ef840623ef493f1e46617fd422730235b62cabe7335fb82621fcded5c83bbf91793aa3465e133db5d1ad195618403aa485e3ae764f992f05f62a4561525ba5cff1632af4a56e39ec465052422fe90686ac245a061188863d0da5f113cdec5386075964a48b3f49d42d8acca0c92319e2ec413ac20e60517713021900ad361e79fccc4ac67badfe2481d1cc53cad8f9cf301c0fe0e7359477baebb786e6492143a9369d85722f98c1ace9cfc3640dbc3a0849c096c9f09d38d82ce46755d4876ea0471c4019e5abf58082c97032fa9050c49353a015850e48a088aa843b74515fa4c19dd295e10bb897f19f33888a89b89964bd40f4001721f80873e4ace7f16c079f0e07a2ca9eb9389cff571431c0260ef1fad6c7106394e8cfca9292d8f4300fccd417978eaa213a0bf7a0f081b9c637661c513d27dce80d5d1f92f00c166fa8cf57476db88d7d9c1c00c3080b7ba8f9fb94d3437d0d280003f5c481b2dec9eda8b6413a62687ee89eb51128f620073747730460e9a305cc7f5761a1cdf426b2b92aa0a1ccd35c6403bbd2222e4f19e3ee9d46ca2cd70bfa5f7b34eaf6d09682dbd3d034809a859be95fa4aa8ad825318eaa6320cd5ca5e21ea6424e6188a51bad9b02023f5e648912d2b36c8bb18f775603565166db917a5d1fe725203557adddc5247a5c526d32d697d33661f0b97109cda3e8591b05b6cb9d95cadbe560ac6716d0af6a1c74f47aefd3538f12163b2261336848d8f83fd4a7d6aa9f7328743d69d2c41710f290f63d84c4cd4a80302bd4d4c19f20b54d5326e292f110236cbcabf1e1428c5040740041bbdc71acf70d964319931d1c393bc153c13202001c622745135660af7f4c8927ed6c26a71758291282ab688f9d7321176a73429c7ce2e6922427bba58377ca2636a6d30c40ebf5d7a270c666b66802f0155949e28f25a4d585848b2f03ce95f531524634463d68518d6aeeeda95d5883e4cb904a3de79713b46769439f292c1106dba57411cea9d7d0f86ffa14928ed7cbf733cf6ee0331654cd70013bdb4da699000b8b0d235a4601d8694577ad0f11d8a17f966cfb7fe6f1343710c144fc43c616811486f3caa0b189d12749889df1cc91d9cd4ad4038280249c416a7b0756b4bd1f711bea9ad4c6dee7e6cca730776645542f7b2ef8e5ea23a472678936336137dbe6981f0db72cbe9419cbfa5f271424e7afcf36d1e3a9faa907b9e782b2775b880b7cd8e0873862fd337510d61472eb8e42a1967437f9cf9c9d65f5fd453be1a2607253aa33058ed76c399e7e952f52757a9a3a9bf23fb001bd4c432131a0427f56c34696c675d15d32bf07fe67ce21ccb87b67df668d94a0c251ecf6b76fe6e408e0d82e1744410b272296ccc7be698f1a8668c647e1e5d457e7591862b7fb6d5a1408b755f11b7e0e757d772720a142bf26427e34a37e87a5fd9cc2344b765b47145dace1f439a8b505a33bd0dd312b4402744200a76ccff6cae86db446d646142731c471ae34bafc99b92f003dc9c309cc1a43367176436234c0567530f0e575d58b2dd19699e7cffa9f6341bec82f6969ca08075cdc3ac7d56f1e3773d673be1ede02560dbc4efc19fad620ba2d52c22db67d5508fcd90940660c37746fac3eecee9f60ba26944274e40297a25b71f2b1d06522b92eb70bb70b9663a7898835b168cc24721df3bbb5402604e5dea91b1bf68a64bb210a21d86c4645b6a6b732bdb86a576d4fc580ba815dc25eca66ce4776c7f62c3ebda3091977024a94bf19b2e1fe4590df55edab8ae42056fdae27f33f8cd28162a12399f29f73c8c34b4f30677540b8cc6f26dcb591a712edfc2b6b5f0f15e1819b059321df836ed9b65ec63360b0979290b92f9a0a344ef5ef44098bf7865bda9f4dfd752c257c0295a67bf06d4631434cf21037ca777766c69d329b79e2e22002fb9422c31269a4baedd04f5fc0933582c64ef566141ff8397951610d276c8898abf358ea51802a9bb4f2a857c6c988d602f74c5c1339feeb8c5c3c63d77b1ec13898922800846db87948ec85551b54ceca84f451a315ce171a6cff8487737c2915d995fc957424187d95c801f41144f5bc270d514713e718c00f0f4c83795ad0910b9e7797c22fdcd818bcffc4eeaf4a9f9b894791513385236602ff32ccd93f2ec54bea6017fc2abab26d9d54838028ad15c30291a46c1236de9bba81f105e0d55324b2a70b7168090e59e000e35b79feee31ef3107dc8dafe8c0dab39a43ed5682b4d962ef8ba1a956bd8283ed347b29ae55843393288ee24bec6840a7db3ec304279cd21c4a04e710197353eb8c472d537d17518a87b822195f90e59f305bca421b6413920eb9c1d7c99463a24179e7175114604a0d8d0e2bdf1c241143f4d9f9d495951864c5912ceeb712383ca623c5b7707571f458ee4bb0b7b5033d79fbb9ec307234af6f7081818132ffc99a778133a311d56dc6e3db2f2477cf64a65e9fc94407994db1ef9c0ba36184e21a4c755593f3b8152a5c555fe5f3929f730347edcb17cf0832d8d4cd90f66ff834954fb97826c32edae17535c13559cff60bd6403060c75e13de69e6d2d3bf004aa164e056468f21aa8bda70f984b26fc1e689a8a7b3d1f8539a47f2f3860ce81f98c9449d459784a623da85f044e9f47ac6e40fd036530a3cd530ff9475e5d751f91a0a92d2b37b6a2d8eb97d702f41bccc734b7c71722cd305e97ea4354efc8bd9654d33b1adaf83775b20ccd7ce2adb9fb030c132be6203df54f84ac5bf1502e6b9b6d3d1b1cf412e5a6f7c277778610f4dfe0eb54c42b6556a8692a560c90c900955fb87fd90fd383ba34911dd51cc02bb2d33958dd7ed89d8547876211a50a73a9eacb33c44c44afaeaa0a30d46ab1e46cc0b129aeee3754d32b5c21180428468aa3a56815b6e2a6a9908d231f75b30631550e1c8c0c22e79ff75144b1417db60a155165dc726b6afed4e638f75f3887fa8d7c5c539780ec02d3f316fda289f3e3eddf0600434dab6b1b33788241e5e230fe1960d196f94e8b475530749ba28c642a4b0981c5c30ae5247b5cb644670b7d9281164cf5159666a9c70cf322f97716b87125154b2656d2220a2cfe358d6eeafbf457e85fcc4a6172ff090c7e746bca4dfb3bf9007e8499247b62c20cd64c2b95b3779d0e3ece3a3d7140d6790d5857a2be5ca7a41891287dd571833adffe30d83e69bcfc127837330a1c3150e697f1b0b43615cba48da5a5b3234a14f962144392578bf91bb62b0ed021786dedfe7bce20378981588159ff9a6f43287f5dc4733e5147709f2192ad4d103613bc43657688700bb18f59b0d63b512eff171731dbe029275bf43b20dc943158644ed9db7130189088215ae9e8ba706e416c8903602f4b000520150e7a612de2a2feb3779e8a43d0fea8b9fd3b130eea9a31218ff5d209cbfc2528afe5f50b17b088b815f9070b344f45fa478ab23bf11200a8ac82bd12cff5e87b7862944bf5b3a34cb35bf81ba13ded3fafd8c1404aea19c1e69eb76cf475870be182842dbbfaeefa2efeee6a1ae449ea6ffdc10933a7318e49d2646d94f0a6c22b12c523c11b83b4e9c6124bfbaedbcae8a2db09b57e3f88b31277166b7f99c1a8d4c02c559253757f890d6d6c1a6d6409667a0dec628855aeb1282b6e65e1979f2b0b3091f88aaab199753e8cac1d99a4120d03fb7329bab494820646801c1b945bf2400f3dd411dbd05b52ee4aca01938f865b59dd921354c6e4257b9164317c59a930badc8a673efc2834cf7ba7ff5e839a4afac0c3b7c9dfeb48a75169b694d52a6ca19947b7051f1d5b4ba21d2f921b7b02d350c843690d98253a6ea526f4d27c40ef63d98756f47938d1fc316f6a8e3d33b9584a4a462ba42aa84a36486ee684292134006394f3c4298f4533a149d1e7553272e04c1cc6863cbeaf2fa12ac2a71579084e358ed99e53e48b44ff07fc1f79328b16fb06380d59aec322442265543262e1e6addfe31b58d48c69908187354431572d49275de440fcf487cbb65a307e12191c87d725a431526a0225f40db26c6f3aff8e6780b77272bffdc27d3e8f4b012c0d1630b9e976995a81a2f108073cac878cff5e94036e62a9151728e1b46ffa4d25211ac89c4a5289f60dfe158168473e91fa3570556bcf844b795c2eb249a7129c3e2e28561c15beaf1775ef934c28ac5f6773aea4760845ae6983dd117fc4c0991487bdc5706b52f00cdf921f401797a1098d19bc076f2637e87aec993752cf23ca76582c1bf7d0f7b20b638d2b114589015196ee47e0a95163e7ea141dcc1f6b7591d3a73e8c8e90345544ac394620c9a232d1ed56febc7fe765b0407b76dac15926adab1e4753b1a281922a4e6ec628c1efb3c0693a954d39e3d36066949134651819880de72e3b2ecf0dbc66f70629b01243766dcd4f9bcf7dee1e4185b3b64b611e3b6ddb9f15d3e773b400f9c3036d9fa280501bc798c97db9902b49df38cdf9e1ac2f6d0dfbeb3497f71313827453b406c04befdb0b67bd3b2063f75ba0ec3738db260733ce3e6d52283bb56db8a23f89a7649e9549f346d5832ed96c1d7c8782452d572444f12f6ed56683fff5f0387c84285bb748767b7cb023e357b071a9110a2ee6a7e69ea2348e3e8ac131e2db057329631d4d0b8c6d0e3ae43753f6ee4b353bd2e2253bebcd186037861e7f82e17e6353252998e94c6978c2e96e9fb901021238ffd552691e88725425ad1cf34adc78696941ce49905954d29663bcb5857a2b897f3d09494eb63919371d8cc711425cd33b203e27204208f885cc092656e150e128c851cd967a1faedeb3ac8643a066dfd41e62741c9c0aa24726e7840a0343e00326e5bdac65587954269665689864e713ed6a2aafad56a7eda6d48a710f5ea039098a96961a33923a2536bdcc8f39503e30670892923156cf3dcf0690ce169b7bc9608edc0451f9bafb64d4e313747ddf834c40a7560e5927cb38a6b5d322f7c42dc76a0f38733adf6e4e962d5c724536aed9f37e2a0bdb44464957c307518d1d6d10b64b0a6ea70f1261390777797bc20b8ff906d17512c65d50aa7d3402e7bfc078c04cbb70bee37ffc6e74ba1dbdbfc51ace974a784cf7217ca95b182444157a7a47feb92e069bd11586d406797f856b1547e5cb7e09392bc82b3fc663ca5ab859fa3fd544870cdf95979f0078f0a7fd23ef03dd5eb7048ff22d0efc38d46d4a2b1bad7f3faf278e3b0636e769c84c287cbe5c8b3883a5ef0030378e6a0817c12955d55d4328be73c874a257131306d51f19808630077d513f62808f18b5f832ee74bd1463ab6ca57cd054ac25fd0313370dae83776f6fcf2dd96359564e8b137c70689e55f272c9852502014d2fd3bda093a7f5638456a21b72bdc346134eca5c67299565a269297f77099c71711c5dad20fae9596a50ff39f446375036109873cd5db45897dcbe032e8a2479ba31aa56601625186571f217295b705bce2649775defc1322e4ae9bbc419d421d47a7f3c641e104cca4f27c1b0337d3a939c2eab2b642857f3dc84aaffe1dc7e4714eba3dbadbf4f15fd40ad1782e262c8242727eb29f67051282f41a2bb4b188c568563b725a041a4826ad2dc85c074c0e672230903696ff5a40afc22ff0d5a4fd7df3e0281555d7d1934926b37b328185bff76d190dd6fbff56d131ba31e5c90c48304a581713e6eea58103129fb2d5733147efe832b41fa6ffef7ef68781fc76efc594c517d69ebc1e4bce8eda06907bf44187060a112f1c50a3682794e28627848c22ca2e1064a5597409717d50c88d136e691bc77608932df9423e3b3338526c6cbf834351a137c1a389017a534ffce0da47d9d35274df6eeb94b093a0b8594cefd75351f440851d414a23ed05fd81393f2f058b123a51281feba84311bb826be24e5a3a934ef519d2cc8208573c74de13776471b2de3aaa287b71dfe7cdf46a2847f54867bbdc7e042f5ddeb7b72f23af89a976e0042eb07904531eb0bafe6f4f03cf60c72c6667aae67d83705be2614c5e205e248a312fd7aec8b041ed350852f5e12e7049d558c480b488043b79862cbcac2a022982aef40f444f346a79a2ea1059b0743e0f8591ae3c7fa2d3130b993d419467c3a1a11a336459a24f05e953a20def4426fb65fc8a58b1358f90d04e060c5c571d2b1d2df9baa98256d81d67ace3ff30fdb03fd7487f0de3b68db9890f3eb593b1e393426618d263900edfba338ae161ed3970d0547dc700dfd0213f2a7621b395d38564ebcb7d9446f2abba1801d63473a869b7507a17d4124b60f810b51bf24ea91eb185bb86b2793c4457b358b477441fcea64c975b1685461687b65a3ff1b761e988981c87c3632df6bb3de40b07724340358a005f8017fb2b1b92bc13b5741d788d13165e2476a8c158cb8c38800bc7d4932e661634e42ff99728e376301e528ba16386a5d2e222b8a926faf1324176f69bbafbd0e02659edc6f57fa421c4de43d1617368022174de2429b726e0c19a8b791aa5d085276ef6d2e49321474591be0b0c606851a79f9c5352400cf703cc874da44c2c8630469d658085c1a5814ff32331eba696b6f91e488b384552cbd92da6ff683e95e632696d9866c2d4553bcd3a41560b909d2694e3f634120464531e71ac865af2011b8ba6fdb7a7f63dd5a236d4b39183f9dc945aee841be3402ad314c4f68000774658ced46b6504cc37373b1d6f9dd45d64ff173d548421cd7a3aefd628aa7636cec3148a304701d0398480ecfb2ba1d3e2433a7b16f5c2e13492eeff76bd7066edf6435237e961b396ee87f91be4612239c0aa4233e76775f3428ca0ab32572e7a55dcb88d4107f070a9e49d5b59b7e9c41c82751f6647d3f927f2a9e42277d89e9df153fdca55f4b6bcfff42469d23fcd8dc3077c189625a00baf3af2a9114c7d35516e91e8c796f198b64faa45a7df57e1108e312fb41ad67c1622bdb70412d9bca46995be31228c0b885b44e9631e71f1476c466235561555eaa7e8ffb4f76e4cc1385ae6d55be40afebc06285040af21cf20709f5388ed09457d3e0b875d4af8431441d40153d4f5aa78cffae5c748cbab615bce225a03b588a84ee48122ab40f12e32353134ff9d0a99c633b72810e34a06591756e6f556ff73b496e2b97fece2223c2790711c625b9c6e3456d67e24fa936e0676b0de32eca03e1ca4ab765c42d4645930bf57524eacefd8d1cb65bedc01984f90d2e25547c193f025f28bed33a98ca8b20b0bb6153fbaec60fabeeeb580bf6ce3aa12e00df0fe90e34887cee722e374a7fe70e0f5e22a61123ec64d22b53a95330f098dcc6cb6a2f3853d2248762c7c172a46c3f1a052d5d041cddcb73bb398821d6427d6aa47b4c51c2b84e0a356679245da0771895c7d53dc4281c57ca5c0c735c465ea5452b171e5977a3a788b62300769e73c717ea69523e1b1b6350b4123f2055d2455efa01667d0c20667fd04e40bddd5f4c93403c39cf8152ebb5885152f51e66c109c4892b80bc0fc008227d6a8e4ef72839780d341778b4c0616e047826c79132d15cd522f8cb12e08f8380330a5d361bd5a8be626b68deac856f7d7aba654bc01482cc6abd9562f4c608cd307a0b62c6c47d5753ecf0758b0a83ed7892cc0db4277b417c3d600f10f3774c4f67e5b9f6dff95a6fc92d2f12633149407d249c0605e7f6013519fcda7298b975a4262324caf69875d8821306b3d1e76f07a97e250268104a65b0a365dbc8b97fcb6ff915a9200f360af17fc1960343271a197deffccd1c6aef77703b386d535e2778955975cec93474f3a3a69a0aff279d2c24dcbe87d7629dbcd92df98c8a5d8c391ec187611c171c4d84f6d6892f1b78499e0b49769f5050f8bcb8f59c3b0081ffcd2cd63e5102b6c306f3f331c7138dbda4432b96a60327908e715a9bdd7fb3d55a4a23ebc669a93bb1f1b121fc00038682fb81b64821f67adc3add40ff1f4c1035d377e76274982a9943f3b4ea029432abf72c06a56f4e0ba165050ac85cb7f8e7ec20f59c7bd9bffc15f34ce503fb429a233be4797cbb42d2d66666d7263cc27f51074035377d0da8d4487f826bfc74dfabe9e87372b8371d764605691d5412b3a95892615a4f67d2a48382007731dd92360e99d12705167caa00d52c1c785e963ca485fc796b5556660054877ee69621b7289dfe54e2358438110e634f7467fffb9c1ccb4a6887ba978dcdf14a1fe63d59662974211d38bc87e56a7045b01f5905239d8536ef7de1333d8373368a6678a68f98e440f899f8f7bb07cf7e610748e30ba75e653b7aefb41de92a173c1924ed194c2501e1313aa48b7c7b6f36f745884f003439d81efe961fae321d3defcd2ad44368141db93ac31efc0e49f65f7e25a4a1c83ae5ea16fa4e8ee2706357e17b49a6430d70ce59f6c407a72cd3b85f40cff28765289346e92c6dc5539cab5fc61b92ff645c736a8c044100146dbd31f911dcbf7130845c2313d2c62294ad5a19a7e0104048041ba377059e69945a57e99fbf6540ebeef69fef22772ec67307a819189372540ebee9079c172a1a0c704785237d53ee65d146158eae6a7d4ade03fdf64f7ac7e49590007b3878052084e2b230a9170ea4444cb9b2a23a9fab924341ecd310a414f29647f2ac72d3a6b4c9ed6ee253f5f512a23b9c34787830d053f18345194c7386c622405e0151b77812fdd94d3038c0c7c80189b4071f86f0883dff9c509f64838617e3cf345414f4f2144676601e60754eb4f1e529278da79b4fd5c451e5d74e9da32cb7530f6c8a126a3e0d65fd51a59e75ea04528059aea48b6b832927baf2c20826420eaa225d217cf894167f419dfd2f26dc30235ee2b682ed387a104b144fb4b4a2280e9747974826cf783a68db33f77ea601dec29eaa438c8c69a528edcf1cbb9e341c39116721bb17028e6a7b1912058372f3162e76534c6c7d0addf11f38005b7e3659b0cf70f1dd66275ee426ef8da85fa57bc233e9148730ce9371feac373a71f203b09449ad1d0139c750f468458e687bae8543c2d76a4a1e1efe237f214611db8cca1323ecea5299c36cb1657c9877060884feb1f7af199965b368ab4080590f61d0f410a18b669ad8dd85441cb05d7b79d7775abb3d2cc51b547760ad0125bd394038b37277637e1e65d81a29d57bb555ed316909ff52db5cd00bb2ebfa14d7b7c90adc78aa07fd8b05c3a99bed65b9273df44030434d3bed1310428315681979016260ca9f3c5419d00bf03c03409195ae7551fa2c07fc16d0ee6499c57f5f9123dc62af3a7b39865fd9a0c7a377f2547fadd4a0171e4efa6749fab1d811df4f6a8260e0a21f5b323cca9a5267338ca603efe5e8554186fa7098b70f7f7851b14710ceda282e0960ad5e9cb37c059434d6a1b4c8f70907d7049a90f5986ab3b41c4c9a77014e822b197ac4085a2c7e6b2bece5212d1958afe95a213c410107e8efae3037601ccd77e0765183bb028328e704de7baf2ce236f4eb8da62c44ea1874dc19abfc4acb481e6e41b6c825951321b5dbb9207d68e33206bd8a7174a4246069f7981b2f253139965c41eb6700e57f5e371ddf5cc70eba0321fdf8402a5536e3a9a0d202f8f190aa808921260834fa28f4ecc3794503a1e9dd180e27c8073f4e8830ee5eb88266458d34db3e146bf4aa07dfca3c92bc29ad42bce020e3687188c96faf28b9631e88acf6f9112763fd490db82f18c2fc4334f9bfe37562866224c353757de4e29c9402ad16774ac42a5a46d6d22ac7a63a33d484d0058156dada6c2bb12bee7f642b1c9a1515a474380b0e9577237d097a2ace9a0d7330791c6aa47e691735353c033a435f4ccd0ae3a5b9843f001c51bf5f7f4b7b687f8b08a37795fb318e9a325b6c365e67ec3cb41dda6e5a4449946eea57a98439887bdb2d00b5b129d568fd420472947f0f1b505044404d31b914f8c7782bcf7b548555a09289d556e4498eadeffc30567f6670acb1a07c0fb7af86a800352f05682ef0036235b014a63777da04e23b5459d158018ae0610ca51364d4b9c83f4b516d637538dfcc3559d2d58258cc364e61f1aaf2dfcb8a2a2a2d7091671815010c5b5532adffce39eee7619aafa26240bdd376fc7703a047559607a2aeceac1575cb45c59e34891602121473a7a58404d9ae918c3876c7446b8937f7af3d3e40e0e2eebf7ac52373abe886d1704f7c156d76ced7937e3a5457086b1b6486be307a085fc7ee48312fa89d1935a9800a5ee2bc117d197963510821e9cbc1389d794862d417cd8c623ec8e0f5398c46a127b8059e1a0c98e207b2ff12b8530d6e6fe1b0ba0691632154f0361a8befe9923f426ae50c7229972496df5b78da97dd4db1a336bf437029437f5ab089c4027f0b8297bcdb128f507f886b48bb3fc43a1b71709ef9dee984323cef5a02fb125775516b19eb69960970e1d8726b24bdb72a40c6b190f96c0c6eb8b1c1a1e8a05b2168c518bf6c6504014be468876e084a6ece7fd4a1f3d8cf7da5906e217182b41d7afa669fa5197a253f50bbebfb7b005067536f6875fc15406b699b022bda8c32998501696eea134c06af63a21ce48129911e88c4f11d927610a6353b7e78f9633b767b7e8396417d3f226d2460b75d79e971710d52c74049187779151f4ecb72b700de935f00ad269ffafbec75482838fb51acf3f913ee02493b99f4e3d4a20ec22507a2166d4f372b9dcb54a45dd2764b536800f19a296aa7cc9be4e9841265d8373b9fb5fe9c62c9543e07b314731fcafb8bddfdf19b26fd9cfc4ad16b4d4f50ced323678dd34c48fa36ba26cfe245c045e41107ca981963eb5ce6fead6f345f71a97e1769793bd8c0d908d8aab2347f410a17505f561a68ec8752e9ba4a648b02189878605c2942dfc6b90f70be4638276440b78684011b8e172ae126516c0b3e7dd6911abb2161cb2a8f6762f409d1bf74eee074e30483e84cf98878f41a71a63ab2126a281e95bc2114a40b667d8420fca19b3f4d69a587a786994b5626c0451dc12742f66669a97d636908577783ce75687b537f4e0d5ba865ed51484999052b16d6d85a3ae99cc70d3d150063cfcffc352a1255133c93327c15a4ab176134fd6f346e4d5b29b052171b8d8b215d0c34bd4d7e737850e8ad95f429b07148df6e72126f973d1d575edb646d2f51f8efdff79011361d3f7be0b43f479900ff1f9f050401cb340349dbd81c64e457023866f854a08c6f36af28367a57da3eed0ddf789176861572e880cb2e4b97240a854042255abd325d1b7241021c8e0990b83029c808363e27c389a26af07f40c9362f353f24d86ebca7d4189651d540975eaaa76665025d96bc3db6ae910e707a2c317f4b3639045c8758b5ded75301a73466fc02432f1d9cd0fd089e2b4624e48b844cbb9c893198af02edbeb73c6d103e0f7a2a116e425d4fe37b3930652fbecb2eacacf8b94343679cacbebda052f294e622c43fb00afbc6f06cb80ef83615322ff2888fc11785ccbc92ae1b0061516f9231e8770b7efa1e7c2019f7164702685f353d906a67992f2790a7f76e204a998c6b3e5b584a559e3dfd2eaf6e349c372b7b90f9c97f69ecc984b1460b0e8d9c69b28381855dc1aa8adcce679517c2f2f56fcbf39050d10d025191d4990d942f8bca1921b81d4276c3c57c5ab12f83e0c2be519b427ed4467c6f7b28106a43986ffdf360305f3bd8b242b755cc2bc59a17788a937461012fbd34a1c6684775575b1390fc6016aba0d8ca54cf5d5c194c899a5b2eed66047a5b4d0f266c4ca0a898b0b15eeb3efb2dcde9baaa0d308e1a1b543cceec456af40f15a013072e0d256afd670e0e459fb46a760328de5278743f0bf5e8f02e43adb943b12a620e34fcdc953f10c864d79e0b0fc79cb66d2c9d71eaadeddc24f90a51f2e2ae6507f52b90c14a91724204a2710ca708034303aa3de5b020da70dc99d6e8307e240471c73200635ded0c1321a6060b6c312463d9d79c9821b674939cbbd336aa4f12c4830e4673fbf365106c4cc49bd1b81a378a108e40b35436241b9113f6fa3c34a9204c823e1e3132d2c10299a1ea2223d184ea0955ef0b54e69351fed9263758a7ed38246a1fec7c71d1650d1027342950f3cc34352aa736137b9e051043670654d53661f2038842642a48b475eae10cab25af00da3d397d4ad9508b50884a1a2227275dd6c6306d71420e46e12ad25e233028659d4936425bbf39e7f768e958338ba09d12682103680c717c94c3404bd402521a9cb64a318b3be551a17685136271f4869dcdac74aed4036e2845521d018513f416cfbb7b426f284e4d73a40d79a222f94838160557dd6cc7b2db092e8e0252278a7a296db678452da55d2739d0090979dca72a38700e9e3862f4c965990623af3933680c336fbb300d179f07b73297bce4820b18d81a96981962d03eb0dfc7ab81d67363a1fd456debfa2a79525a7dd0a3f37f1cefc328e0622f0c2e9f7ce0edde4a8820c0345ee2c8790422ef1d45bfe4009b5c5fe3bdbdae93012e0974ce6e1a3d9a072fa27028ad9e1a74c006cf7f75cb13601f7cb33df7ba312b332feb3d47733c4e833ded8770c30a3fc948fda7c481b92a79d072690e2800737245f57eb2dd2d4c357efd4c47642e1e780c8b504376984e77c1c57600d33f543d61f9b6b888f214e54e22bc81f98e22016e1ee54caf481721bcf80ee748b40842aef11a9488990fe789940bac23327050e7776ff124a171e81e6b036f1cd26366e601d015574876082dcbd54354c4451297a13040dc051cf280cd89e3695f3549ce5a39dd9da508a000771ff076b43b1d4e0d27855ddc76e1e5c39525d25a61cd958c74f98b6751c3556ec09a19d369ccf6936ba3c85013f2e319c3613a2d33a715ed850229356de7bc6430ef1cdc06ba2dca2e3feebe6a1b607dea8e5b1077283a66b006596c5ec225525f2c80022907137c8e045b7348a87d945d53b520423424f84b4ad4001266d692e564a1c2655e53f2a1d89e7c3339e1f8763bf0f47646952b0887b7df23138f272dc88de307ba2fbaa6a7c21b6a573aec9623762857cb092bf9cccbed5a8b314a983956033ac6ff306aab9b1e08b19660c2a37547639a2f9e409d15c51042601b767782300136b25b23a79302672833aa632baffd0178ad3169f444d7503b20ac0bb6948033c862f855d16b0a2c330568d1c0283c6c9ee60236af38f20e26f4a238bff1e1434d22d57258ac2d1c48a163065256ef111cc0912f6db67c7170ea30dcc8d26c41dbda7a62ac36eb0f461911f22a1343300690547f8211b1029f46026d7c5053743521e12cd151be19d582e854a589477c2f60d7387eecbe137582ff0cc7a773686c85264cf570014cd33a5405fa05a7288e7e3e1b791af6479d3148b1ad4ead7cf651e71f63fb86616323664397b9196fdcd67e486858ef788491503bd7af6120182e04b412397477fa6046aa4b4c50564ab78d84ccf6e54e4060a2f44bc2384dc3465bc6becd8114b40abd3760663b2f1e587970c31a132149b673b1967f2b3727f96c91a8161518c85e303dc75212252472d6f349c88922a682f08bbfcc5434df851066faaa8707bd9ec7deb5ae1764c8988d24a937ee5e6f49eb262689586c4d9be2b39d86e07aebceb0e79068d85467ab3dd9c0d07458694e094f419f1f4608cbd4af6e35fe42b81339da8706ce0771968dd2c7322d1df1c5e41470d04475eef6dfc49429e663ab8092d3094edf6e1e10c0d82cf10e2a624960cce6ed4d7657aeec90260a7248b0297c48c500265ee675f65f106b4820050925dd89b24942331c2bb73b709528840888566e56ef6270bfe670f6ed663c09f374e31a6a410120c5851ed32166741f3123f81d0d4d5b0778b2b76645c645b6eeaf47fbb10d18c88736a8d1d08e4e59729027105e5a15be2f235d47756425004069e5721e792ec2c4405bbc09d335eb645ef4b59e34569599062bd46b5f3dec5ca99167a8dc3afa61664c1efe5937fea7b7542ba624600c1251d8174d595565036f606041ce4277db04acc717c76a40cf2e2db30b1145c8b779aba9fcdd54f7ef18e471062944da75cc07abd12822dbbb99471e2ba1580ed5d7e84486147b024f4a27001c0746f973543e3f0a9966df9c8565962473226f8e2963d0beff5f75b8f9a479fedd414bacb054299ce61891c2f758fe501a25c36db871f2a3753974f4b3f8033edf1f41bce6168ce1060b7642d30dc7a760392de0981849b0cb11de1538e1af21e3521c27e8bd96fb661e9853034f2f988d346b8634dc5a382a70f2d53976a8245b545f812aef8f1ecf2847b6b09cb41a4075a36c4d3555c0ac1b03875194cb22394352a7514e3d823c75555c2311e9c624296b3c2bc429da0061d50eed07cc3b5c237e6d4a0cc9f2381fcf27744e1b42fa37ad7b00074efd6c2ba9b37a2e9534a86eb8478e571131f35d8bb40afe994db9160a245b513b55d47ffee19bea88f57504d0e295d4b3a226226f5d7d9af36e925a069cdb8e26a8cc0ee4f1a7d06af72a7fd5f131831c713553b5821c2228c5736c73f6e3eb1ae7dd27ea78475ab509737734fd70e49f15766b6787d9a48ba9e55666144360da159911edf6926b476ff6400a6baad9c9a8f4766d4f84930e399b6c5f9df5a1c6129c1d645ff8a8820b23287d19aef754bf1f4221ccce2a9a2d1f256d00f25685aa8508317389954fb40c788d53ea0b755be71dbe3881f94472833640d21683fe7aae2d94a5c6e1358af22bd9469d474214b03618efeb42d380b25c0a3f2bdd35708812a5bd9f1a22c853482cac20fdd53cf42add2093f17194a615a9dd158b492f9f68bf8aa2857496144e635ce8d89f4b78324b00ba55037a84389b4a8ebb4c370104f247c0b56690497334e28e15abcd750b5747404974496443f996de40db30652b5ae4e6578bc3cc244b2e8ae50899e431d5821193784b793bac03bbcfb1099804849d453819e27f1a1464fe46be7e3b6d7a106a581ed1b30f96545478f7038d54c78f626b54ab1848022ba7dc49c0fa2bc2d7aa5e61c01a555154a3c48d07220f29557fd0e330e626d74daa0cd5283a554f80b620582ef2058bf2e500f7ab450a4eb6b3f44029470ebfd18814160d7f27e5b28af2affd4958478544f04ae62e7d93b45a8cdb2e9678c9c56187a6deef66720d1b4520535b506d5aacbbe457c45bfffa7e9e4c0cb4144803ba745fd0fe2674ab7e3ccae95d1911abf936db515d1f7642785fa3714c65a7f903e266190e625c864639d8879016649a5007f914106661d9fe1c579f83035f18e3c4ec3f80099d9793619796f711b262c23dc2545f6eea9c4340182aba430242d9bfa3cc295c1c596b6281aecf08d10f69f5dd45400a478a52767c3fde71dd4f64da70b7b419c79aa7e3403e0f3ace3b112894af204202cf062e1e9fd9247cf985314af497773c7c448813dcb4087b18a8402db6dd2d3021dc3fbee338668c3497b847220f26a49aec176b982f21830ea9374719523b1c5802281758b857bb21ebb88c92b062d730636c363a3d690d443c32729051721fa32b60dbc8c14be295d38d84e7ad0ea2b9a0e9491afa556a94caa36a14352b308629d041eec15f0e51b134f235120b0fb42bd3cfc44404562a34906d9b490a3500a2024222324df840dbf768c663605a2a4ee0bff7046bbddad894dcad32579cbb69f3d8154d311886247116b3641d8d95e997e92aca2c050d4567499e715a74325cac5c6f884322e206b9e4897e0976bb0646c49a6d3979690619a54b8479ec361bb7efef86031d2d74062410477b71c40e7168d5690ea19626c576a2e9285d8ca41ba535f9654209299625671569df757595a6091d15ce0d1659c9c08c40169da8976b2cd659bf74b472feff3407547018fed3ac7d67aabae8b24c532e036a9680774082020bb43028ceab54e83226f052c62674eb6ae1be124ebbdbf211a4b708687fbcc62972234aa384afbc56d1b58b5c0168dd2182ea97826fb34f6fddc68e9da3ae4d1cb77b54022a48e6707b682071674e120b6bd6196bdbbb46258d4580b5c2a6067f03a8a48514daf6352ff7f8f86d21f772b4820879c7b9f703342e8f70c99b332b63a07410f398206fdfe43ce3c24db8513ef3013f9e8cb7436057ae19b479946c3c32a4f16af79a1b639859abf5dac619753dadbc9c72ca2916cf4f6416f944598857e10a0d554445a71922faccf4b17b6e6a700ed8aff751fece083947fe315cdeb2249df8bb0b3481f3158350cf5d22e22c095476c97f374f330d3f4d0afe5a4b7ed87e184f742976a48ce59a7401332c2b571af4dce51433ec4ec5adcce7740f90c82e0821f5305fcc35e4a99b2e3dcabfebde4d1c992864ecb1049d39d74274fe0cd5c3cfc409cad9853fee3542321b8c8f6db7c5c12ad60f6c0b2c0531250b0da75758fbfe6583f41474965a3a2fa97e1f2ac844f9513de1abd33ccf363b589fb6042266751f72d60f5326c93f7b2bc29e5119f9a24ff807e589b0d4d6532a4fcc36103e52100cc1480dca5ad5062127a97a31e4215efe66fd2a4bfecf610144d72902f79568eb51b9a74f6a7b52dcebaad77d51840f8fd4cc88c383a40df3e60c8683ac0329934065829ec9ae67e3500637a8a6df51361965d1d5f35a6f0b3966c988fe2a77efd369beb707ad3a2665a6737d6c644bf8454263ee2a017a642a889b9d1a211bd970d883ef62f62f6c2af73a99ceec62d51ac2ce408d663a2e10a67380ed624087c14dee45e73b69b2ec093bcd391e693e256fb8ddef5c66d713b000086ab05a8c38c05a1bdaa71220a6e3ac7cd5920bf33cb1a65d1a1d761fb4c558973b721c629c37fa06867a637e5d97360cb0ea01805b0dbae3a84859563679cfa000aa5be800b6206267fa7848eadb444dab7d31603826c3d148c70be490a3cf0daac37d4dc3e2f398f49b17619403cd848ca65548b890982619752fc8c204f30bc98661265d91118e71ca55d43e24654b958f71c907e93ac4a35c33b24cd4291057f369f25e0b1ee2471c4783e66c643ddb7a5c53752b04e04b9d35b9c45f419da0457cb6448c13758e710f2431b8dd36f7f571c7317b8682f7493d04bf9be117255523d3165107b098193c051be0af93bffe4eb9d17a6c25bff9527135f0490c700802246a4eb2b703dd2ee8c1756227072e443eb36416603eb714e4016a855730cf7524e3d3fe0db10649f34b54e6345b7a799ccbf5a7f40e5d19b33996b96e638548f2ff3e433330360f4651dceb162f1f3f7ce4ea8b3b28801486bab14747bfb8703bf428cb6541526b96e561a33271031d59d534524d11833780d5418681103779996cb1210753d939927ff555c6dde213b894a01df40bbe4b87a0b3c47c2613591ddb0ac5c0e11653af6ee4cd07d9fd5eb8553e15b0546d7251995657f86149486db0c7142ce3ac2a7f4dcc62ef8b52525eabf3d817015771b783e8a6c792b44edc649fa9ed16cd2b58ec6c01de2f9e22eca8b5a35422606ef9c7a25705f99d10021b878aeba96446dec7812b95559318220bb91edc10fa02c50eb1267376265d505b00c3a814376a0dfb811ca38c045d358a7910b3bbed111689c6dcf73ed3675edc23c6ab309036bedbef1e7121a150ecf10e1603ea556c911152e0b1a58c4c3217413897c14d64e54fad2733315f0c188a3717b31595737a48cb6622507b62693ced5adf69b9523e7231b33c2d385f4fb937d8918a6647534a40b00918bd3636ef6f90e046147e4389d840e4e136597ed4e897e75d2f222a5951d55695a4264c0416d36237bf085a46e3e49d58d47213e7323430264f6d2092ba3998ead4521b4d731607f644496c0fc35f85b57a2e7b203d919c900972ab7b4b2f837a8f441b35ffebccea7a09d5845fc016510c69e873418853bc4a75bbfe3d7cbd8b3219a0077abbb566fa659c47bd1830495b0288b5470f3907f05e1576d0325302b45f4986dff129ae4b4e6ea6239a7a62a6055a40f4084422e059072759c06a38ed66935d61b7284d2c2697075e6d1caa1c76e32a726c09435b26a585e902558be4364743d2283ca1d25793e461b37eb28a4e43cfdd40c5815d29b9875dae372f7c21ed9426d8d7f33a7afccafeeea40ea5581038bf86ada47038a1fc6fb44424206397c03915744e89360a5843fa826f8538d24a419011fd316efaa1c7247b7ac920159da91c2a6f1b3d527783ab9e894a1082a7868e65b175657135e52d799a45708e220e1f19a262429a811e777e23f27b152759dcfea77963d7bb540b75113b49331339c1986a29240bc9f5e492fee64cbc95e6aebe978e369c72485d4d57cc554297bb9516cf1d56ff35d135b295d02aa2a14edf2a8d8a36a3705d0ab2877161974a272ab97b63127890acf469c4e932be8d4453f713d54af47bc879d3d7f7773c906097915a8f1efc9e98661e693267a670b3dbbde1957c8b23c8c14c16c05078dc47269cae5f18e29da7a78591d376b79ee0bc742ccb5a061cf3926e322e11a01710bddef33555313407dfc61208064f5109ad3504db5b575dde7f443355143546f8917fea673c698beda933ab210d14ede2c03bdb4763c54a9a7fea4aef6375e3557fe689793a47babc55e8ced753c42e6cceeaeaaf59ff95cd3450e8514b7a50344f55a1266299e3867ee00d850a8cb9444421df865f6e518184a951755e6970cf390227a96455cf67ce702d390c1bd7c1092c956d65362b4358dd55f315a71b19af2240f34b9e57670eb8ab2f3fe88b962e7093ce2dfd95fc291baf780024add8abeb7516261b89942ad1a15375fc034068eb22853aeb46acb83c1c664d2f98cc997c24d472747012e6fea35b5c4186241eefe1ec473213953222cf6338111e05c62b450620284c22a3ca94c6725ef6053cbe7bc24e557a9897705daf5af42609e257dd787873ba095c41b783614c22d32bc9267a74e15372b0ac6fb07afc7d97f09da9c93b6e7eae78851f8f63f737e39331db241aa17d02036ac7cb020b8f59bf4e74fe5da76743b487fd1000e3d5ba758c1c4828a2b1911aabcda63549b18214784eb17dc7791336678f6d5c93fede6af3a98912473061ff061909740f78fe388025783179c7c3f9cf807012bdca785211c3bd5fd98fa456504f7b1f7d78ba1f715922477710f12be5904238a173423ba0b6624abc9e60f18122e137bd1c89b7c4707c63a931c921b5e845682d234a23f3c08139167063d2f930c5660fd617fde605033008206c9013be6a2c5af71fa46c042b7d9fc2a2540ca96a77949cec212fb77d33277a1ad253f0262bdc9079011121fa0aac9a5f2363af234e761b03892eb602118aad3419e0012f71eacd797c2f68654a69093335e95e68296396b7910b4fa62472977341aaec1553cbd03a9636a61e0cb6b9212482cc2816165d7b77b9c07d662854eec7dba6f555e17994e7dc2d0c44885524add17e5d3ebf8a2a4d709d99754ea06ee2b857300ec4cb06fb610ff2175037ef649bcf955a4dd279992ebd3a4421e0ca83631103207acc8e627aa6603083bd03c651ca261dc936d0742e35c37ff9b5247fbb904c61c6f02197a2082a0bce55e3133fff6a554552b3651e87b150900d5c2fcadfeb130b650061a88f7a2d9f24bd7be7284106e186c6962218bc4d5e8df86b5404be126ad009dafe08ad2a331ffcbdbad3c76733a9b1bbe6ab0f0d574c40ca77197d5d1d2feee9e099f82726649bfce4006d31aba0c855acfcd315e116324a4977a24c9d59dae9c2b04765b18994820f132957df0e7517e2d3091afdfc360934bc8f6106e8993dda56f405a79cf8ca6ea9db0c41892a57ecba2f6f9c0b133985c1cf6ee80984d9851483771a6f7046da3fab59d943c8aa9237753fe8f65f30bc45801a33754e87d24a6d2bf94d8ea4d58ab55d5fba11c98a7a014f6bbb0d704aad455fef8a784f8d332b72d79da4e0c519147153436f89a8b65b5388610c72a721894c072eb44a1165cf2c726060d8e11eea7bd07f1d073dbcb6382f25c72b26b8ca0827f1e7f4ce5f83128dbd05f7e9cccb584b87a22804810e4b8984e514615cf92ad5974e0fc90a532ffdcf6b043e51dd03f11fe09e16a1045701336c4a796fb1303b24337fe524de41cc8dda2c12ec7636591efa7fc368bf3393f610fc769da9721f3a4062845ce933bf61965c83cf9513bd36a3986a30f42d9b001410eb1e3568374d0ed7ac13b149082e3d25ff1bb7638b23b9ad4142dc12b9ec387cb727b860d4d2dac93e4298577ba55f6792e6d349b9779c0fd7e2aa782a2091994c2d011f76dd502d41ed2449769dce641d8a7f2ce711cbd03b38c84884ad0ca02cce5c57a77ef1b495a60859631966c6ebbaa460a164b23a6230e351a599b0eefac57658be88f46484cb3d721b2534559e8e343e526d00c81b22f5279fbdf0030ae5a0615ef2f89d39bf236c5edbdfc303724d333310c0973ac08b1f83e3fdbe44bf82347b2d07546a68fb6e4b9327f601b82b10f4dc2e06daf6d8639826e5a93d9bd71d5d1447d66af9c865f3d1b259666be236b9edb320ed890f7a54a3bb438351301a6c455415ff017b0413c91308437ffd2cbc509dd4b107f418dd3d7e38c17b1e5ea198c4abc0f8354972ae34b79c18be2a5b71002b10fa3464513c39c283424271e87167aaba526c4b79189cfc2cc2833b7f53de507af34e6333d60403ce08332f943d60f180961a53de4ca42997319113c074432f63f2f6244035226ea98fe57eb43398109d6d45156e32722e4f25cb0146f04359c404cb78cd7bcf494777034d6725756498807552302dc1317fc7d51995dfd747b374465098e0bcdd61043109d0db37d65098973b7bf12a97429af904594a20d9b1b5fe246dc6fc793d53b43360cb025affab6902489cc2a49fdd9232dac18316e357571b24edbde96aef8727c208c8886861fa054cdc6eea0ca67a49a7d0ac012834e848dde2c8ed1180683723e9e296140aca793a819d3f39bdd87c7374913b9b895071207fab85980cf33445a50ef688105e62facdc5552dd87d6546ba9f7aee5c2d52c6ab896aa1bb1e4576d2fa94afe1f462162e42cec3fb4407fd11cb52ab6e231779bb30dc87f3c13eaf80df5bdde9b66439c29b3fe6a07035987e984d788e0f1bf6111cf3b017db226e041f431be9291939d0e7172d1cce182d6675058b0eb63c70049a33323d4c51624253153f4bae7da7b18548752648264303c749a2d6965e4ee3b420845d4b75e3c74a153746261e470853c36c004d4abb7476350496f374540b37a369710605fdfa65aedc33ef762be591aa295acb4dcf0024072c7e864d2c293fd4f07d4b2afeb2398e656191787c00a016d8616251d785d4684dfed97e7417da0673c3675365995289dfc21730929c832c1e9d26353811548aae4c87048cb8027d3b98eb3f980c848e4b14cf14935c2a4e84539f29f1a4cd616fdca419114e1498c5946c2b87c293111897ea24bebfe3f5892a76371ad96ee0654dae449895830300c9b02737aa2ab8184fbe59baa91f2fc099a23b3bb34d61fcb36f2a70d8a9ae1bed240c0fbb2c34542f506898c89a0f6cdd043139bec84c7b4f2b14e6aab8bf59f0c1327becc1843928700a9d1a35cce69f414edcdae6d9b57087406fe7b156886ef158086794801b7ff70fb14216697b08047a13f964cb296417148bfd0cde25386c2e29dcd34e33c16a5cd1f628735a1ec4661dc8bc70f5dad06b8057f4e6742aca78d5e73f9e35b646518e08f9333ca3ba6c39a5fbeef5dd240454c03223327b17582bb09d72df26312c0f0dfefed403a82264785230d1237d07c33af1f5e969830a2051088c06488d128d3102fc23dd264fe7f04046d718794ed35b515bcbc3bd786ef6e1d9f4cbd6540765a4a02080e35f61410ef9293d3207d8b95f6199e9de368c7594e540ffbc1be714b3c342e69052880e42f32e495d31c4da003a6c75ba10bc24d369ea375f627c0d1fc20f0ab5404ab1d98ba6ea0842e99cdf99017e505c303c80984505c250521f91c496dfbf3170be0f4463d0952e1c90518716f96303433c0cb475b27a441277223a843226082252d6bd90f307012f51844b4cc4c64b839407d2ec73a621c7accc1352a4554eb75a64c423a5724fccf41d39c93a6f4cb1d7b7ef2b531b69f8f7f6e427f4af2da7d302a6298b6e28f8a8f807a993a8011b18c42a5c457a0b75cdcc2baf8e273fa44a92f637c923259670182cb3dced654ff4c80f3084d113b2f1e308a86628697f46540bd960c61bc5166c14d3b2a866209824453ae7f028e45956d653d33230b8515505ce06c14fbbe4d346f0e5e765994a28418a6da368a9d30fcd48629167499c5d825da29818d8d4011ebb3719018f0ec3f7540f59250b42505de9716758526c8f8d4269c23c1dbfe7a1903edb1f14eea4a8d976443943378d9ff3f50149c3a68fd83859bb082f00246ad8476b49e3908f27e9f0cd3750362f85089ed027be9d6537cdb3586c555328266451ee75a4d7bc6366da5f4b8d39d89076beee3230b3d78a535de82fc8dc83c2e60c645fdb5a1dce1d923f1cc1e6546b24380a13bea5aae7d68737461172d4bca2ddcd6762c8942e2342b03ef4f44b39b2545470d26f808bb64b36636f9b4354427d861ce712f6a35b240f00aa170b1dc3026b65c644ea335d41b0166ece634079fb7f756f2e529f5db01409817e1e60bfe7607008a91b8768b97927c40d358dc0cf875a96808cf2550bc37759f3b4db6010d67a910dc72f2007f24b4ad424b08578b74ef8c4f6407453c513936d1fa491aa782be4b01ece96b67a7073bf587f18ec0e1fc49a2cdbf8e8111b2d25634d18b1465fa4076bca687a1a404b86ceb5fb46fa7f7c3f672bd753230461fc5e8eacd3a73f79f8dc118144b74980136f8ee5a3df19d41c36a7e78dc9092c702b64d8a9ed1d2f0d3c026ae8fe3f0a4e543c1c6ae041e4bb466f6300a7063e1919efe7ad8f290073430c201d7c421a76b135e206263f90ea811d637dba2e9acabf7cfd11d8492281c256d92bde3ac0fc75264e221638f3da7fd22fac8d7e47ea59152307c0099e67136143d06544374421a00c1f8278b386882292061a750cbcf1112e37e8463b6c88e60eb4f423743a9aea8aec7228991e9e63816189684d9e6d00c277726ed3979b60686496019265ad576b2fea072f1a790f9885c5620b0f668fb80b9e0239d342dd782c6e3477620919f01f2c1e4d99d0230f7df84dd2385659fd064861fc4f70c08e378002ac4487fb8edf5329c37abce1c4840c45250bf4c029eac87e5594eabf6f135315e63187350a02410d1ad3e2883cd6d97fa34a1a66d4bfd46a0e05a7faf493ba28cdd2fa93fdd73b2237185aa9f8bfbe2a91959d46d2461627a4e2bdf056c4fe5173f4459524ba7d34f1076312e6829d4e487c8c893000fb78452dc9206bd48771e5f7c9fb86d7f94bed2ec82556d6f120466ea8d938742072f9cd51f6f05dc81c80f1f8dd4b98d51f76d79d0237d5216ec4572503d352c65a173cf45428ef3c7199535a9a22ec2b539a896460d71e3b22541c44b77c340f2eb852f5888d294865150e9b8a30bc90272cd19c5db62631367816000cab84f465bdd3ad8a1e4c1f6fbe00b4367d4e0d10ac6c8baa97b277217bd4ff5bd6abef66fdfe31a3f1faf678f10c9eb572fab829f710a0c106b6316eb430f90db384b913f0b1c680e396e04d8aed4674eb3e507fe529ad19b34e934c30a0eec001e8c56cae755adb3ec6f360315238196fbd830c8179f2dd32d2c75f1f79b18384a04f71b3b3c776e375401d364de8611579dc1223fb3e87f5e83a7fc345433aea90247004c767bcf50c2809ba10137fbb28755a6361587f2029986511b8c5d64784f7398da6a2b1eddfe330dcb7331a2b453c6430172877c85ab02d9f3332512e00ae36e8260dea7a3c927b7e285bd85cb390560bd6f9a05391fd1756cf11baac9102239996cdfbc8ae150c85acf5f0b68889135e24a3fb05b0765629f641494d4d281226373fc6e5958d46ec061ca79b0d6020592417d135fd2949f4dcdb4010a0a5377c1de91138b0060db3ea0fff94cfba1b6adf5c8d9b05b728f20a463d8e31a84b61e423b8f6725856e3f57ce0f2d72124de3f541003cc2d7665c00242f6449c7e42c49eafab012423c94c906f7d67e519e9221bce86b94e2d13991eb7759b4d2692fb9e2e3972781f9c8827b0a3630b33a61c2b19606a047776709d11e36dad2cff69dd82c8b6e0765603cd026e6175517214a26d399879030017b8c8d4663c2e25044ec67a76955cfda1c35c9d02082819117b07f0e49a68e3e082b2fd18a143c1042396ec50280482ba90682ae39a02e01e1e1a1dbce1406ae6a95bf9485a1642061ca2269f156a3a8088aa740292004780931b36bb607c199bfe2d057b0236ea5954cfffc3d74108b4e09c3337cb68ad575e862389b301996677755f179b4182ad40e4523cff0a58d524ea9bfdb01dcf96d95cd98859730c5667663a4ca020b1dee11e884f4570a8acd0b29b379a64b75945f5f1f81b0af94c0e575b99bb5b8abbc542e46e6b1f25b54bd24858272abb021d94929511483d28e72ba263330e108bd8208ea77f253a9b2fc452b63d528dc764a683d9360ba97d04bb863f7c7716a53d437ff863637ebda6099ab20a78166a489538256e3556ccc90bac3bac051fb8aeac79fad27ad438d63accd28f5c877dd1f18812af3bed8d67b33d90f04212a1285261b7f2103ec36a70fca80227a4d96cd5f362720d087398066286b86528194c6efbe1bd3e911ed1b483dfc8438b3f5717fdc63674ebcaa52baf078d3c7ccf9915f470233de4d29aeeccd86f18c5236f5d212f9d104fc082303c918f68ac0d39b445b24e191d1a342b2c47a73bc7420f2c8914a14b328865b5f3537a74620242be9fbbd311d5554107fb72e46868bdf67ea1bbf26894127d43b367d937a1bfca2905e89c0a9001a8cc2c66af40a5fd1eb04af8161cf5ab53b13816c43cd08798c457449d515a01ee9f13253c2d623ce7b0858a8158aaad345995ead158c6e4fba5ceebe9179b6f0a4be7b5301a187feb8a018a3e46053f6d0479f6e744d346d92f2a965f7753d04bf595cd3f0c83e68eeb2aa3a53ba5b59f8f7de49d6e584f1f2d8f5f457e1f7336313e49b038ff61819268fc1a2fa09e8974f7d0f96fce22b31b1392641d2b0ccbb66d74fc5cfc9970e39df4fa5396b031d21646894e8638019e0233b46ec59f675c3063c22ca12d6f9040dd0c27295fb2c4c336341a827d3ca6759a5e381bfe56c3a3a97b3312fbcf162907f262462876a381f0aa03d382d9b3261cb606ce3775428649832edce5b2c8671df1766f9fec9e1001b90b57a510de2f38f32d4e291a9e83cb1670ada4c79b3de29c0e8db0bb78cfe70a337e6a992b59615d5cf28516913890f95b7884b54b36aab674f6feae818384a236cdb2dfe6ce15e90dfedb554734f4290348a0feb4cd400328dff2cba44c232676284dc486b0128d626458b6eeff0157022c55c71c7912970d4af7f824b5bb3e2101cc6f81b9afb45b2e604f758a14291f4acd79f75c09fc15b6b7d1a80ab217561994ec3392d54824f6ddb5259ef36836ced86e8335367d0b377bc88e7ea3991f8859a30ad709721fe96112c641de4c56210776e3209a8c1cea1f96f261285c668a2b5308688df227b572662cdc48351438e09188d34900133278de478c7f4112bd79506c3155bf6ceab1d152cb9fbf5f167ed5be451ac62d2c663be16c3ab433b578e95699a1461ddfda61de8751b86d4780cef2567c335db322979890a0d8249bfbf9bb76ea0747c5f29d207ca4b526afce9aeb6bc2dc37468c09bb39dfad7fb486438c58fcf65c867948b6e6ac260f6d71475f3bc390271fc176e9e04b0e5ba01cd303e7417e4d28c28e1af56ce10db31829ab260dba77186b6e97860d7c2d87a315c9d922272bf2f9377835763174a38336c722623552d74a1a53b015d4353ebc92525717342abfab61dfbbcc52729ee3f402d6b40b1528980d71f82b842225013a79e3df1d45489e78323cebf20b09570f6cf529f30c39578610da5adc14d07b45456e26707d023a4a752d3d511275e6975ee3e7d24e0cb94dc599d1df5d7b8c01b73037791e196e954421812005fa8b793e0ec408494f943ab4d9abe32fa5120f45c0f6bd3e6d784575528e2c73db52c0254b1d6b497c47fa3b8dd1083b51c49e0f72da4404ce3bd1957e93f722c2adda86eabee33d7e58c107f0f8cb3e8081238def1d004a98c4f387ee01c70ec1e3851f087daf0f58246fe6e6c2ec296f9215fd6f693321af25ee26ca5c4e7f20d0450d72ac3603d213e5138de6312b2735087fe93b8158af64ce2e6cd5da04d6ef06b708f99c3c5b122b5c841f936a57194eff64cd681bb112a2f221f7690339e1e97dede834212fbadc28efdb2b6f309c7b7adb2596077815f909a856e55385d0dd5dcae9823fb2902e560ec0d42a19cc3c7a8310d75f77f104d8ef2a787ba12fa41efecea4451b3b2c6b54ed164740cef0dc196ad06aa93cd4bbee5a2f78e94d09c19b0cd717718295be3d43b365f9b368dfc5639d0a00f1893e0616a840f34c7cf91cab544da6086a96d5112d1310c53cc50db04d7a4f013e7369eae15ada54caf0c6b9485c08b586cdcd33e011c3762d40dae2324302fd56e4931e1c43260fbc80473c4c568320323cc9e4b77c1faf500c435e7f082286f2c40f2df0179942f4ddf0605878d7283c05ea90f21c47d9c6e3cd0f007b8fc55ec04a88464fefb65c780f25744158d8361a217a1e4d790f0ae9f4d3e57643796cb5be18c25f708cf4a0ec6b2c6bb1f7730a261aa609e3ab463b7e5c5b1b2f1a45776dd5ff3e16d7ab95857d601ac589c803a025b05de08a6695a0022233e81072d226b5fe78f7b220fec63b8e60f59e00f8daa143096be757f73c95df18fadeae740b8ef40f8c4ffa5245ae235b05fa76c0fde5f146cd68673e5d063b736fc7075b16fc9465550e9375590e3c44c5fcf3421e1e1b141298585dd94a4d7b1586e47ea6c845079aefe9f487996024a5ac796013f8554f530c9151ab0ec00bc01889e0f3baea03481423f1f7f06379c8ccfe7a3c51711b3294d2b35a96b274d221cc90f080ce5f688257d8e3b9b963a91819770c3b4712775aed777361a2213a673ce7420b964702611c4057b600144f355c72af2a810c6adf1a959256eb35db87eeb4095f5a4b529f8a54e1f9442c5c02293e042f710f19cf829c0efe4b584c521bdea4b41e11dc1121109f2d2a706512c670d352cf5517dfcdd9e2f65a50ebe3a0341423d10fdec49c0cf19e9047060dc903c7247a0583c6f58482f8f41bb7d125bb8cf65b76e4d5910eb5c2634a90eb2c2ad3a9763a6a9bb7da19569219307e3c3d3bb42c0eb253e89cb689bb3f9e550c683436b760b8a0ae0ec07ea23a68ab3e34ffa18644173bdb269113f01f2088c23cb6d61a06c7dcf5dc623acf2ff6220562c7ef3e3edc51806f12def15b517111c743997b6e9037fadb9662a7520a0b1cb41853e70fc7011707568a1917eb998bf12908ec5ca896f3ffea1ad53e072d85e1055a8b5ca7df71bb4e7d3a061ee3c530ee987b130887a450b919061e2aa900d7fbc7ee4426e8980879a7ab242e06e2321ffad26e4e8d16730124e93f1b701b0782eefd1a2ff5aa28ce7c7360dc807fbffb383e237d6f896db07b430101a611f6735c5d1c03fc6015a4fb3d2ee549687f5bd5bc1ecd0874ed9b70964db3a82a748d6ad337de9bc3f89953c8775348ac061c3da32b170cd795188f7e6c6513c84c26b2bc4f1c9f5df699b4b821d0ec9a53c390300f4d565e81923e1f4e1d575dac1c159d5f8b5ce97ce0ac9135c5f8660429d1302ae2b8997c103de25b4154ec0fed9bc21a89f9c767a7b42f06e893bc9ad81a244ad9cd712b51e68f4e877242cb665edd29c9b371dd66682d2d776d9b5b0683cc2630a1e8ba0ced6b5c6978ed19f7fb6d76496d9c7473fe4e7061bc5d407d14ab02a61c9bc576221c49e1318c1184ecc972dc12a4732040992e10a7a6b070d4217e23f0bf139632ed6b7619ab5a75a00a74f4eb656a7037e2657c922ae23732454a540a3574abdc080d0110fd06943eb84fb11aa35c3a8cee5bd2259604080b345760f6076b6a95c816e4576a603adcd0444a79301c8fe91020f99147d1730d160cbbab5861c9b31a471d45c06e09b169510b24467124e83748f9d78d26b1085c2a425e1ce534310d68a117c62b5681d64728f6c74ec6a4e75b1d5e970ed90b69255d15d3556a7be327e9222ff2ddf30e7aadd44ea7cfabf063893f362a6600716a525f7793abd44d5cdbee37e8d3da38106e12bbae5a11f54edc9034d4bb463e17503b5f828485302786f181bee3d9376377469778bc1fc46455c56f3b0821176c4fdf6667844974181e6bcab46c4bce4ac8974c02ddb7d36fff3c28b60b93cf64d9156f0473cfde2ed27f5a505410f809f72403a06d194a064e2a98b7df41f3759b65da56dcc9d768777ad45d1124c310bce041186fd0093fcb68519d68950d1473cfb5ee36a12d2db465e8171158e72999780401ff24fa6c458e0e4a87b2031588e9d0e1d9b2465df1909af5170ed124507b04ef910b154ed5497f1c17bab51399236fd877f9af4cbf620f6e8a045460486622fc3511626c00e149ddcd9c8b37db875bf39ff9ad573547d0d103593c2f0ce02c4f67472177c103d795b0d27f22d7d79302a860c04eb9ca317ce13370591e78e9adc9da9f22572ccd63dde85807c7f2a8dbec3fd86ca27a0832789e58716e8288c8162ea603c88ea62ad1dbd35e233843d4dc4c465d50554e43e3d29a472ba409a4a06f0f67b35aeca2665264395855a94f1dd3b146361ae693821519652aed5675e478fe4cd723df7ea05b0901f014ea8d284b2a580e3c927976841b62c07934ab5725e12fac0ad9be4dcf196ddd185d91d573c27418ae67a7e584d552f78240d9d8a256160be5c6cdda175a3e24249d5e26898d4bb7bf93a8bd3949273587b6d010f3467e6f7387efacf59a00552984c0e6762b7e108c909836ffd42f9d9f9853608a2d3021e00f4cfe62613eda6cab6b4b77bf415c37e09c83dfb46db849acf2a2b96035fd54e2c786787c52d5ae4136ac971c13a02507d7566f5300957d94b5b56e9b200c76679f5987c81d4471372a62823f4f9b3fad824e77206ba8e25d030c320743b59dbcdd004493195dea92e437289e13c2bbaf0be3e1917c96d3463ce4cb2a76797a75c4c5614f202c3820c7f6fb5d308270415182fc5f68d2c6b9d202a8cb6d41e495434c25b1230bd0371c015872647516bd550c7bf97526226a73e4dedc2afc71f8246f5f835bbf1d46b1c4426778abaab7e699de8544de0a1d2abb3e3f2cf40c208f604ef42a99191429c1aa391d450de0716a3c3b2508c3b99abea75f7fde1abdb722d717069ee24c80ca5b8277453b6fc81eb1962f49459824078fe90dba9507dc68f13f1cdc192d781045a552c0be2006e8d8622c7c719023c00c002e35a539caab59f0357b8ced05831e1f03a14564486ee3256df7335ff6601b5b171b5b446b0bdaa666ceeb8b5beb5da8656f6b3bf98eb663507f343d204618696917fb15d7254b08396101857ca8367d54243a9a33a8aa5963070c14c0e7385219aa0a8c198d7f74458b8aa46fc31f07494a17bb7e4c62ed3e5478d01837485128ae6bd29da963c75cb0dfbf334fc9271705cb09fff4d1660df8cac514af5b0e43397cc0574d6a9f5321e730925c46111d6118ec94c0adcb22fb3b5b20614d520aee026ccb8a7e6564d54921f35f2c4f4d47588a38b75dfb1947e35288c5c0b46e3a3b805eb3dca71e4d77408874273c3114f225f63de5ac70f9acec922f12d66bff902d9aacae002200567ad0627b7220a72074d29bbe30548f106506ef15ef3a5f2b78fbaa28213df348f6e66bdb0d7e3accea0e9d03cf42c28229bd1307121599c0d0720c91352fbf4d20ac37b5164cfe1933dcd51f6262fcba3a27fe642a05a6f480d4537f7434ffe53214db83860b6dddbff9d3363f795e6e7751570d3159241b07423541f97ea5ffddf0ec4e8677352fba21a430316e4af8881af8dd220eb5d8f1c07b43d52be44154d4594f8c0e1800e2d8adf04a0d156672d136ec897dde14c3eca339030e5a8f3d63dc5c1565859702f7fa4a605bdc002a1d49589e2fccd2b26d1379b221fdd3313c2eadea728427b361156e7d6cb36810a20fe5c44e2e6d970aaaa752014923fa2618232d2eea485e8ef400ba5caab9de8476aace170ee36a9b45f41c23d6b1aa3969a38470c51e73a7bcacbd2db43bb46386d6786155e31734b991e8219b7e46bdaa7f0c4ec2b0b66ae1892b44a0974f81a980aa013a498f4cbbb929560795433af37ad7324803a1d6200d7f210f5c94214267781b2dbb080cf1a6f508799f9bb3b90eae1b917e3752dd7fdd2cca6d5b184d4b986ef2a1f1c88d34be5ef166b04056cc2500ae78b2c09ecbf953dedc42834bdcba3b380ac0171de68d3ac269bbbbcfe27c696ca4393902a6f22758615a9589bd5531e013f8b3f3f21d37ea77fd340f3d83405aabf0ef15f43d6de9679080bfdc3c7fbfed9be3da305c5fc1704e8aa8be186b1a65c3213299e414d78acb8c619c7838b37d7422a19f6576f8b04f79bd38e959800364db60a24d260886ba64fbe9c15ee987d62b49f6c97b01b2d67db594a80e8cdbf29afeac67112f4e191be5017a0e110f6fca9e42f075c71624ec873523622fc8d81ff6265f3ce03b0404235169012ee46ca625dd6f31cc686115d05499648e8413e3d7a4e73770acea623deb527453dd405d3782c30cc8f5ac713bb594332a978861c279d676fe353779f20df348462a3d0cecc3d210b8dfe31d088a044618b78dd574b3372607ca5a6cb93cff4502642c10778747116998a9e395b86e78c6829ec480e12c6e0ce8eb49e2c1367cdf9e1f6cb614be708f84c0f2a3e5444f5be1a5379d3bc41d929a1d607390f4579ed3fc0866fe3d4ec42e34fc2039cb275d6312fee400215cd901fe50321ee32078188f76e14db5591ef3736f06c8fc349abbfbf082098c63b29fe268fc8e805a4b148308a9544556e693e2288c6e9c1105c9b67722f29d6e75d3d87ed0e2a95374cd24f244f48b458b5af611d99b2820c30c923abb0883588aeb8382d33cd9373d36b4be4aaacc113e70017de9af48275548be238b1bf16bb63384d087f2e74d7e40b0f0af189418c17f03b5f8f99038cc5427e405033c224448747e2e9c9830584efea8ff57773db3a5e30b1ea764435cb46224e633ac7afc7153985ce9165de8ccf1b807c7c8752415cea0dfcefc63e33021793a744a245f7b5b8f55ef656345bfdcad4953c36a1413b804fdb2a62d8a108472f57068737e32e97cdca834334f94a3e00eb1e637f48b8c4d2d4e21542ad1e6998c27a74b29502f1769468d6adf84539255863c262a4d7d69e31b4634abc2595170313f27ed57085ee1fda03be708d44e5d4b564ff3f390c055c197439763c22ba0dedb103b8480527065f82d54bdb013106b6d08e857bc9c3dff825111b30abb403324072ec48ae1cca8c057ecbd6d981183332b0a46bcb7ddc12d3afa2d9cdc904c92209aa8e64ce18c3c3f689a4f806d15bf7380203a7810241a110e3b1761f31c38612c4cfe699de74a697e04b1bd8e52330f12f0a34f78f4cf423c08a5e35c62cd4c62eeacba142811676aa4f615d6d89f6092d8b1fc87161720e4bf5a5973d23920d2fe1f7cfeee2416df3ce5d3feb96c646944753413c9d378fb3329aa31480c676ad6e7d4f71b5f5c4b65243c0315e02a52f5f02e5d050c642e677e343b851a27484d6828d2986c4d1be717515b688a0fecab02d8c6c53b65377d5a6f62d5de39b6020b495348a745775cb7bbe3a23f680e71b8707dbe9f7deffca0b00d235044f72263a7a2be443553474f237cf6496bc20e9d0fe2914309648e5b57a7f73752f38d4cf9fa19f4344a123c3af13d061bbaf38de33ea0d866df5a0b31199bdc4a815dcf1155b08e561a69c4d05508175e6b89ee657be56f524b19e55ff23de55035f1bb4f0d17716b7f1b372b24f7ef28be533a705388306633dd39c334d19b584e159a634cc75154e87c1c68e36589522bbca29e0374fd42dedee3d02252c950487085c56dad8a7aa58e88d76bc882679a73110e8bc5a43c12dc402aab21766b4d334eac15b03f28481dfa74eb25d615a484c951bf453b0e15c1b3906c5fcf3906f4249f162f7d4a4cc5389134d0af38b35686275825ab08f83f9753fdaebb58ed346ff70036fe2c011304f90caada44ef8522e926581e2aa12d9756c6d14862f7208197bf58c71654b2264421b2fb4d65524182d1a57f6b164457d39fa8662d5b67ef2c2b71046abe0c3ed97e624b52d71a44e6ec35cc641790ab7b6bbbdb72e8ac17463d31dd0c4ed740dde358e94c07fa554613b3e5269a8bcc18f37f6b356ac40e2eb4faea08f8509815f4ee800729317d03b742e965933de1c8fef6ff316b0a721f4abb970df7f108255c4f867298b564537e5a7c013a815795dadc3e7ef0d068f9e2f54908d3d303be0033266ea3ecb0d0587b151d6f959b9db110dc1b1a0839dc866ed56bdda843176db1861af0e12fe9fa15b63a02fcbc61acb13f51aa31653180265159ca8d0b6082dfc275e549c8e06a50587d0f5b3bb2a571a0543c041c828d7a425e364ff60a3db0137a8166f61d89cc6b6d2508a4a63d824947d01c4801987bbb3b5b2a1efd3c9c1861d4782b2fbd856f5279bf1dea0d94b7054037e887cefc0867d7d7ccd13495c955d6651607815f7878fe92413d75f85522d69c9ec6f52372492171f21c6bc3f0464273eced69e4e806ac58ab1de790a75d52a98e2b91c5991b4d003df1f525cf6193afc269bef9456f69fc8263428d19657e4e4e1fce90cc1d8da6fb1d8fda717821c84530cc20025a91a2ff078456532fa8f5bcefeffe637d5ac34d839258875d64797f07f7e62d7ddcfeadd99f52446185acfb9691fc7003eb5aa0f6b89e017f6fe00e92339562002c7511d73c6d8529c847a728eb4b756fc398d4f96348fa04de16434bc1227403486eb3d1872aff5ef5a2fb7b68a24646d8a4a9f668347851d08d15bcb737dc7b7f46577fb56d0a2f5f2fe9faf377247f5d8a741d787d9a12f762a11540bb16413b7f03deb5386e44512667c7b481a1484e6ae6be54050c03e16a75170f20705d1aa7bf737446ca241c2f6f9fe562c77704e9c8d6d557ed35c07bf513b472fb6cca0eac09947ccc5fb105d12c1979c122b2d60c3efb1a3d5c93dcbfff42c135330ee3090656e09c7383d9cba07113141a9f699d3899ffb67d647a68fd65228713cbff29489cb94b1d782158450964df1d3468c32677c6b76ab2acf4b19620fa6936d50e67c25b43407dcd1af9b126ae365986c9fd5f609b6fb79496efc49987572f7058ee58597b77c137f65947dcc517058dba0ac141165ed359730b3f638359f79962da86751e49a4f37366777e5b51ac40eaca9e70b657b27f45a27a4efd2349099cf3e008500c337e9866c49c621d0b1242649cf60a114015acdd6c9287295b23b306f3f8192da893e459659dfb73b83abe5835a54b2440341fc33267930ea6a1dc0492c8c62420e919774de9e87a372419181ecec0006fd8c5bed955fb4100d6b3c4c1f6e07fff1d87e0413c8d57b45b73f2b2850f271f246a46fdf7b434eed877773524b941439a190146dfbf33b6918dca36120b791a241d199ed98309d1bcf268c4152127ea4acab361ee91021c626f9496160200e4f1915a41d2e01c1d222f8aec566e35b3b5b581dcbeda08b71f350148179f45baf184d383c6e61896526ac141f9ea3a0dc5b9b3337c225ccc9a106108e164343e8a2f042e654e7864321375abe63843cb040b7da214ee36ed1ef8174a7bf07648617b49361af359784018658f97081a9e3269fc29186d517a66180f6c372e20de75d3b59511f34fef4e0a1dd3ab3a54e92286e7ee0bb36132323c62cdfc3a40ed0877e63bad7a73c1e5f224f1af8132d33b067042e9f116d7cb7b9d2b6f7e0deb35f524dcdf6f3ba7122609198e6f1f4c90c9f6fd557d0317600f7032dd4852991ac74345a2a90ccbcac82fc3e8fd48490ef2842f00f635372b5dcca94c9a113ad52a328c4e402e9d39eb28745153202c5efb37b025dc333f019a10ba360d57f5625fd05cde0a69b0de1809ea313f1b27c25eb4ae9c9f604fa18f7117ae17662c931ed6b1247c096964e88e3de61e70bf4ac7836a3efa58c3ff1efe6d7c815ff57e357d5015cd4cc197e2ed7ad26267841f3062759ad1697288664ebd84891ae64784bc1c9cc0568385bcfddf182c6a9e797e73521c2a6fb060f43851817045de02f8ccb15ab4185fdadff0ded48a74b4d1ec3603fd6c371e140cbba7870501eb89241def06e307d168eb88c2c66e24d67fed226da7481e95c1eac56670c029d6dddc67f8a86351ede4659b11e4741c8330e5279ae3936cd242872e1c1da161583da2605d29e32d1d9b0f520ce3304e4ccd489755e7c30d4a703a3a30916e30bdfc0db0782a86584eb70bffd3415f498d291eb02af6f43ffe4fe91310570275d3206aef297f2a76ad5e1af20c3d1e08ef0f51f98c41fa3af8325137eb66965bbb81d2f4ab4f720cac6bfb3324fdcd3b920edcfefaf6166edbcf0808d10d74120a8ac87494d5a33e7ea1b3deb939ea056515c8fa4395553c6b6319dc46693a4621f1d766caa758664ee47ea7bcc84a5e1afd91192a91a975cc74200710807a13999341379e7cc50c92d054a1e9517f33518709bc04ab8f4e9c4c9a5686515531a26df2d778ed3f61c97a54051ab5a179f5ed589889361712fc0d2c15e8e46c4085dd0084a057453ec66b847e00946919ac216199f8bda76aa92024943fd6861c0e148af8b5251a4ccc68a10a4569ec7089b996387d2cb8427b94257fcc4e010fe4678c151e61ce7af9ea999ea04d4f40cd4bf47ac0b16039323282dfff64801b69b126ddddd75127ea1b3e929219a237e565b2815a864f6a383a1d142110856b6a7e35ef2772625b62e49a230f0c331970b43b9ae9fe8a0f0070ebe80a99b7045f56d7eb1c4df057c90de33e2173794392c85a932a147e68f8ba1068a2b5990365607d9a1ce0ca213b1b2d24e5b31273f6a77ad3f44a2e72d53ff4613c87b5128b1f263f0a20d872937c570fe6598354cd8473fa3bc50e19320ac5dceb68e53d30bf663a722d961581ed6671a23e592e3cb66b48ec452851d2c08eea1a4aa10361943ea6c0bdc76011a285b2a162880cb29719a2d42d2974e8b869b29eabfb35b49c2cc883ff117e12f4c9b640895033499a398231ff2f70434c7187d88501429ebbfe0435c0884ea99791e06372345e683569037279034ccc9d0acf71985774f38755fb87546909dc77266591b0f230e7ece05ce3012f1842b5c7684a472241f005eddc1d38d612339f20166096211baadae885b8fa910b4992452d72fe41239a6755979ecf4d20c2f32844e119b828291deddbd05706156806da5082fc7a35a2038407be7682248cc8c2c4d14d2a2fda1c0455116553429fc0d0680a026239880c1a1b62401860a0114e089441431b24558a9a07dadc0757c668fda51a1a702afc4cde6746911a3564b5ff174bad1ffb13bb4a8737ce533012c59bd71aba45d54022670a9a4b6a195b2f937023e05e7588f9b8d564f80c2ef90d790b2df150e2052ca892ead56aa2daced3f8c51d52f423264e2101706f48159604a7c4761369df75754f89f076b48f17fa9625140b16606d2f534072206b439f83ab2e3d2365ba3cd73a92a27c159c9b92ea75d922ff75e5f7cd5a98286c540a0ce96dca1ecd3a96dbe83dd157fe16bc0f23fbf51f1cc2843549465541ad9abb706351997e98463a502102c63c473cf4e416a74c68b6d610d8166b2b1391d78983f942ba4e4fc55795cab9bf19fb47ee0d51712a054e532639627295048fb21e0674b6ca760abc6baeb049626f962ad45e5a396402038fd14c68f3b022d1acdb832839714eee9ae9f1222649684b6a3173b90ba1544e1c03e5e47d0e150c49de046dde465b47798f40af8c2023ba97fd023dc2963b0b87360b358c69708dd3e6d94745fb6bdc2a44cc641dfb25c3d8608484efad31e01af9e6a83a252b1d00337c8c0595006e96d9ed81362828835ccf0eededf47b7fe805d3b4eb3c16b08f169aae884d376e60f11ac89ab356f2d1644c6b173e2e0db8fb740b69b4582d0fc20ee07186060f987d4ddf0f431b34afc5854f88826752e78ef68dd82b28ebb51346275a8963a895c22c650fb00275e0a9bb2e3aa85a74a5a03700836c366d54632afcfcf371c7d722453aaafd61676f7e53d18f054ff3472c7d45ad9d2bff0666458d25017712c80ba9e79ddf3658c16190fe40f8035bb31d432970b774754d473443b8d47370f64009835c6855990ada7bb3f3d33eff6aebd907bd4e7c7f7f1e35e5137a1095d42008ffef7f49e48d54e16ac33f7e85f6ca263305942d44bc89043d3370537b14ef78ec24c112ea35be94112fe644c05f5011b6ac2370c00d3cbc9a84f44e1c006655d4c6916134b81069c4293f74a3cdc39d83820a27c9a0c8059e815365be8f4eed69c4e7790f4eb9914273cb174eb15f684791d2650ac1e28a7069ff49f58955cb25adf5211ab671ca37871b3b93204812de15e15062b4f72ba672ea784e0386ccc9973c6044c1b06fdff7d17da7a61e90b11228099459d1265adf3874a2ea183a0de70503e3e8cd1d6472706ae27ad14d917a2a602b90386fc5160564893c10ca100b8a415ee48c661fba91211798bc1ff1151c1c1578659d1f74c8331e966bd79e59a529ef90efaceec4407102e979a12ddba961a8d221778ed79f2dadbf83b62669c0420c6cf17dfb36f526b9d79b35fb260642ee0a30cb382d9a38d0e300d1bf76b56a5644516633d9a321c947beb73c69312bc6c5a330998b7b3af9d6b221c8391a42decf74c087938939af5103f06ee3fc66b2d497851ae60435c9175e0a8bc5ea71d2836af4210d4c32c496201471945715db4c6ff4a194283b2d560890cb805173c38b3d0db20e7840de353e7c3a0f3c5d6e73e4d834de13675559de87e9220143bb5227032e9b3817c5afd2d7d3a4763c9365ff3e6429a81a78d6620bedff2901c97d3f1817c7d12c3bcd9ce4b0ea3a4fe4a2f58323c3de1afa418b58382c293b262cf1a99ba1db3495d27a32c68ccb7265ed11700a52db0560dbeda6add69b0ea361be84f891b47b7e29ef5048ac54780dfdbd253d9a4678f808b6404bcb786a92772ad8b5b094095e730d1f9c74430d2f6599af1875d0091b457c0147f4c64d4e7b1d3f28d3d25c984c383573d9236cb33c904f9bd77c1ca721bc6f3493c269adbfd0205703e45b6dc3b89a51f9830b69e84d0b6477b27701ff67f8e89dd72a0fa2e333a944c34fa9cb44a16fe9915fa4c8054b45b605350c5920566bdd4430ed8e8caf1650615154624bd044ab191792f7624e5cdd903b58e7c0fc9ae5447a1175b5e15de2480ad6a86158fd2a86477238c3737af5d3361fc707fd105eec3859393f3009c74574c093dbfbc017c77d93f8759dde2f00054aebc295da4bfa77bd28b1376ab651550eb0ccf22f300907018a6a17e84e5a77c7ba860a7524b074679bc0689a70ed23a820902d620ed618e3bb9550e0e28e6d32c58e4fcfb82016005859cbf171a27088718f3841d2eb471c92d845719f6b49d6d1c92a1e62ab6042a62d0bb40b2671e6da27ae8e39505fda47333de0daa461c4a3f520a77751141cef79e800f6fc2748b5a1698742440f2229056596e8401cb471b7eee9fa365ed4c46e613f97a11c4a0b84967b0de97fa11a01818e138204d06acc70c1f2c14213006a3c2c1c307589e9b0a26cd6975988384ccff8b4cf19b98c6e2a34cfa53c33397d845c53ad7bea8b0977c32471072d8d0705c16ec55fd0ae7d6051fabe578fed70335912fc241a371b9255a7aa6a1a66fda7c89f7b5effddb5add54c2a1b4a6105b094a5604076d4e00775a74b2704127bb8f765202d9731ca83a2b0b132f200224952a40075fa43e362807d2b56928eaac3d17223507ecce69c252362267aed068a356b8558ec0f414b7d4252145c2115305b7404642372c61f8a9d9a291e4322927c4a7402ecfd501f4c90323fe00506b9c66c7e05e8a166c2a466cd4e74172c391fc0971253ecbba2db1be86dc078c17a681f9c4d3be356251c4ea27a3001aa3564f81f206df40cb22821e103772c7ee2d7b7486b4d858bfce942d104b6be2c223ae22e4799e1e75c2b4f765bc55aaeefd0bfa217b6e97e167be3f64f3bee03960b403658a53ab50a3014c003f0d0c7716c1ecb756144d8246145c34a1468ddc2b320af7cdca96bf58a53b836aa82074bab67bb58458608afe6a5465f8a940a38c902af2f204b94c2b3d6eb0d8ca1cee34c0ff57b24357c2c17009537630b7f1f5ef0ff582d2894090381f46f9bfb2344d76313677579a3018023b8204aa2a158a83350635e8a4adb8413875d410d911cdc505f00f717a9e44cfed80a918bad5addb3e731b5785d9e511014770101c073929c436603a14fc0dd34b05c64554bf8652d800bf4c2d054adfe5208d5de1db5c19a872cd013573c6326537f37fec5033ae4ee2f7f34812f341147000ca71301e805653732e1d6ad2abb571b154f1cae384ece4732b3c872e7a7074133a8b7f5c6ab983267722fa7f1bffa3a8c9d45842df63941283331cbc30daf75da947a810462556a4916ea548189c70eae03fe84ed8b6f291f07e306239c09593d457d79c683c0120d4fc4e8f41b3f6293dc8638f4cb9c4f25509f0c455b8e53f36e6d38f8bf2b2abe1388613978ca3ab9ba66ffddbdb27258d1ab8a1c4b324e3f8e0b7a51f8962b4fa409f7ab0177621bd9538af58e753544057035954ab872e13a22ab6d50e84eb06eb17d3855e255a5b659096142bc320440364c886095041368e98e20340a6cc2a13a643ff36e12231adb4ca4c2d423f755a72c199cc64e27526e5ec08f8971aced47c00757f209af49296d8549602a3d0c8576db37855e67883ced8410514da54cf89109942a4eb74f822f8da63771b29821b40913957567e8587f1b0584409b77c83951ce202ec92c41734ba92f3e51cb3aecee9c4448e36df9f1ecaa694d36be35fb908f3d7eb94f7d365409c011e969d2b03467ae37bc1057e3d52f421ec3f33e8d7333ad1e09b9329f1f0df314d1f5f67c2847e63211fe3f80385aa917919cf948474d854b444b451165b2a936056bb4ca26be470a258f838a0bd21a649db6f27ceb54337c70ab38dc01d4cc3c588a843259200e50e30322b8cafa3f7231e1ae1ba5252150c7c8c42e09dbf350c24631814ee70a423bbc9f118914b8756bc5ab2026b1973268336b915be047070fd1f684c8be23492a931f1779ef384c0f4fc34330d32a11aeff181a7c79e65a8b67fe48e1cb5353a26149b9d0afac586cb7810c1d04d73ba6e4d5c9a508cd5d7b7a8c12f1f06a245ee95f31768fbf0052c0aec4f7d93d714039eec6a11cf86693ec344a3cbe4a5c22a66a066308b2355d29881ba5f69a53b9fed2b701a48241f1f8c563c3093c6c8aae5eae91c8f148ed246a7893ddc0757a78fcc56efda138d75408a431ea075213e36e0867143d100d8acbdd3a0aad12c8b016b5f38902740d25d73dbf4d1601e2e77488b33622724af2461ccd3b0133a7f56ce100bc4575e1f9148dec7ad04174cac0217e35c66e735c95ffbd195947280b96cae1340060d3155845dd6b7a30defb706704dc4e712ffd6fa42645b804aea34b08ee65dc3fca5f4f69dd819007e26421c1a9f1434a42da641b3aa3c6735d53983a20724178e1cf615a721b6b5293973d3ddb09a44461004bc9c9f8796d26c20c89e856e66fdc575c87ac61432792ed775d99776866f9ddda1f2677ae26b8307fcbd80ac5167ead6184ac1d973dbb8cc7247fe32b52a6596ff48438b75405823edde10e00792961db46d9ed12168be7244cc02d5a65a32d8ecd854665460bf381d62045a35274b1b31f408dd46c947a9663ec946b27d827c64c80cc0c6ec7223ce56b3cf52f8b77bf72e079a531fe049fff2337cd7578a5010680a82d59a644581e51ee00578567ee6354de07513208b184d2f3b47055c65e113dfbb01db799e7db2d3b7d0efbb78543b795df56ad52d378f7a98667073736756f11e676492e534409d4dc6e85bf881a6e70b815a7b4bf90cf28145f214ee26472f27d152ff10576bd65b3268a9b0dc8df9307697e201b24d077467242b26558b640e078c361b7a089d02c40fe67f8cce4b47f72b8861c6cf15d195ac888468f35f42235837af98223991f4fb3a3d99681857272ce0d5fcfdb8b791f84ee97eee8438a0a45c24869bbfd4f1e66cc1e9537b0db4efab85c4253f1110ff318fe350131670ad11c24bb3124d2355d7d36a8aa0e572c1249f32fe747b653b13876a2ff1a1c359beb3ce473dfe329e6269fd128b9ba0290d4dd47c2c8dd769b2ff60652d0c9769b6b0ebfd272b90dd4e2b63f571ad5087e7332d4f864f72e0fc54a44e9dcd74810ea936b38862a1c1cd074e0119d1e7fa6127a3afd6291019cc34ef3d78adc09f592cf927996300562b010372728bf71a7caeafb57114671846bf8042ae10b5953812a5c934e07101f8a64528d37d73b83bf9aa175d8610728bef1f161d3254343967556ade3fb0ad2faddccadf3e4434233806a476ae37be0dd7caebf068d4a65219523ad2ee9603c708c8f4ad14b33dbae349554908b26b2fa358a60aaca35926c9774a13f6970e41f5947098c3a0d6db72cee2d070a2b699029589c8b3f193bc122b669bfd519e85b4ecac9bce23fcbbce2578224f8749e93f5eeeaef2b6fa18cf3b8957b5c2c73b9fa2d46c09d525315dca791686316caad18d6c9e72f277a42d6c336d55646e6f01a37d635d2220a5d632bed7b2109f00a82439432f6748bd2b404ead91c7c4069717e7c64120180c41fd9b5a4ea0a65e0b4405799db4b07593e561629f21c8720147bf65c7273097f3c2fece2402ebebfa00a25db2425bc427b295d96e856e563ecc13211e557a6cf14f0ce180069fca5e07384a8a34b80479d59261758118f2793cabf4db81450712d40165edb3f56f5455210a64e151f7cfcdc6a1a6b7bdfac94b8c52cbe58bf5f0bd45266c76e407213c8fc2ac24612de460f2bce9740d339753ea1c057051714b9685eed1768f882290d7e79ac0870dacaa473ce830ec8cba68bdb06100137e620ef1bd45b000b50f852085a41598d6ccfc7f6b392476f54cfd66b5cbb016dd52868a7421265803566dc2acef9230c001748d6d7f77d54d85f70a4326c67f4053f227c56fe308034482b196f725ea5533594ba8dd4692354437f5d7cf64d5e3217db7129594a01e6c70b1f23961b6701cc50fcd7ac7e2656bb2f658171033ffacee75896ec7b400acca471760e544aad479a8cc3fb7ca95da1e24bf8624aca608afc7491b14454d74d22dd744b261526058b193c1a625b84445075da68736ebe09eeeb78095782390f090525362028f6f1b6c852b9467bfae57e4bd0720c3f033e0e27c07f2ff5941acaac0cb64c + _Keys: 19fa7c8b7a3a004fc497f181b6e026078db49f8d499d21408923e4a607ce3a595981be3ba9ff4c769b8f130ebe47887ebdfb98ebe5da7049210e18f42f147d60c6bf413c35ce7d12db1f64f3ada3bb2d821326d7a7c363136666d31a094491222bbde8f495825a4e2f05ece33b3881253ca117543370bf2531ac8ebf10b7f565a03ac9712b88ca58c516c5a7b6d8f161d9edf2f0d7536a18cb29cd07833a5a3b4c7ae726cc17482e559c16f3c9b08b330df8ea680ec3b112fb2cdae8148f027d6cbda2a2ea985b33ceaaec1a66c03614f318fcbd24a42f1ad60e54113f577a421594d13a0cca1e4dea74ef6b3011a507d84e972e95f1f208c29e6ca1845b5768a29ea858678d9a45dd71c72675172669d2216f05e07a6318526a8851fe85233ecdfeb27a2a54c77acf2f0622887385307cc810cd2b8a733f308aa04e356c1a4343b0f897872b4935cad6208970be4d2cf27d077b2c4e3454a429a74d0d848d0856374bba5b830d5a1c80b06ff717be50822ffba2e9a7ff4587ac62212c429608d6f7162a2a64072a2505286ef155af18b8b137cc9492aa430bb82f7606ef4e587d4feeec0bdb7915a98a7574396c8e2e0a55a2690825a356de044dd24122aa16573d9dc4051c54111fafcd938f2c107505edfb00aa3545750cacd20fd3d118628f24eada7da532296de43a2f1ab3ec2f40174152c0174e5ed6d08c86c931ea726390e0507706ff52bcaf0ecfc98bbb39566936366fb9b255a7ae89207f8b652d88310d54f616106692fde55d0708af69fa88a9abd063e55043de1680da2a9e6d579975acc6cca75b961aacfcfe5ee932d224e50c4b614d14bba7a043638e92631518771690e1bb19dced44e075745b028dafe7e182ac1c0b232d20cceb1df107aed62a36f989553501753abb270b44324d7d8ea6c2b2ca297f8214402bb6de62c8eb8e3d9b0f7256185d35a921a8142098b19bdc42367948b6e493aae93bbb6f41153dc39aaa1c28d34255148ed5933b025933dea2cd7425bcb047a020454d5b0b9ab1a5634bdd403229c26b55bebe32908e9848d620fa19a0ac538a933d5645ebcc055ad1400e0de2b71574be99675bf8a3102955feb74a2c3eb04c15e369386f97b630278db0358deaeb8cd4eec2235a9ee69cec23c44b4e60051edd993b7bc5600352a5affe328d95cb10d3df8656e07cba3b9865c35815ed87a215153e001a10e4ef5c6f3042f4c3e5cd2819166d6112b9f17f5bdc220857778404d76103b3cc3b0938e3500b561e72b38fd7ae010c88f1098dba07392870ac4269fb7604ae4a6e96bb747f19d5bc4403fc346500d5432183fe0a3d37333e0b5c95650540fe330a555345654c454a0a5cd01af12c5bbfe973432468198e568f78da72731205a296ce63ceff4027fefc7d6914ba336fc2c1a196537425df9e0c581f69b2087fb5d4317015c46f3f1e5c5bdeba5d2da2335d6bcfa490744d574d55512d623419a9a46cb8d49f27bf55d4d839d10618a0f1cca64d60c95de66211e085c9c552c53a96f52a47e2097c7d27a25cc7c274f36e41d3df3e7d29069a951142fc403ece277d3175e7cb6713cfd85bb1677d2f550510a9164da141cca3d4dc2d14ea6ea5bc7c61339be514a16a1771cff40969d4dc573e3c894702705927a4eb212c639e52653be5bb871dc8f266b125e31d2ee5aa499d965dc71b8416d70ae562427d168be888de916169e4e6e6a61d506675d74849db0d1bb064843bb211345bc43b4b385f641da77957fcf2e794bffc0d74579148e75640d90c451ccf2c5994d52ec0e48b27b6757d3674c4468ee18fc36730de2672b5b1567f8427fa5248fdda7745bd1bf9af30a24f6f760e1d8a8d2e169cf46b8ba7516b16ed2e96b5bbb6e20eeb540f7f4be5844b79e7ee151671a373a4e26d58e142691f576b98633aaa8921a5ddbe04814bd97a61c4cec06828ec5598b5a5688fe724522d9a4a7d9611d651d36249674d03845f0c6272c125d7806fe2bb353081161d28c122f29acc03601a51f08a4016e1082f30fcd93d5728ea47b79ca0e2b6cfb242a9d65f214d9d8402fab5b34eae36c45bd0330fbeb978ee2fcf2a0fcb24f222621fa9ab7d0dce725d9ded17f76d9f671ad6c06605d0efbf3940a506dad2e62f21bcf924dbc733497d038a08ad7f6666006a66281ce82d2f6619f66f6d35134e18a31cc8ad1ac7b966cf550a7f3749f10c0e64801184e106752a681216ffa3837967cd366983232521642549cf9088373ba9d2726c53c7843229cf12c86a8436660b9a28c0e4238a4c7ac4f0e2446c5178d6b4a90102e51465b132d9ec6c3ec954f282992fe09c9f2a6d7eea356c2d4766a7c4e03aa5e334559752fc7c47b5d52b06e06eab61a6d10e4f7483a3a0ebff69f6c0358c0bda930f4d7cc274d62caa67c537732b4a1ce41e4e79870e9eaba95cdaf4fd482fda400b1dd3bc5c8f8419633140f88e2c72327c9afae1cbeb46af06ac297cdb123537326592c57c95cb2c5c853ad052230733029b09f8776f245772a3ca0276dcc8b833ca146a1411560f76a926a9289a1bf169092fa58ddf9c3a7517c82635364a7f4df403890f9d1ef144fb812196cd7f0c77286780f491baec2ca6f61b9da400071600beb18fe2b7e76e86d5d0c1605cee62a2681f2dbdd87b071d79c190e8d373290a985bebf6d6a810a8113e79c5a1a532eec366e53a852b5d6e466fed752cfb7897a7bf6f1b653f6d0c571f4e8127805ec3515736dfa68f07ba29f321139f0d5a44ca68c07e191e316809447bd2cc041c05186bfcf1e65731b726cef277b7a02e29b17188403b8622365139bf2fc071347e1dfbee809a1671c43e2f82acbcd800b78df10f42a4017c8a9dcae15d1d2c62fff026423332e57357fd8ac87b1d9952a64ba6e19ca69e24acf1a805a8b07076b2f15811115bf70962f3f016365a2b20b01b6f5693eb1d01ec4babb2d341af68b923a2b5bf5a3f575f423bce6076d56121e00caac4b88c2cc83b11cc7422a66cf74d106b78d3cd635aa4d5c6ce0a81623dbb7e5b896e826999417fddbe2caa248eba28bda822986bc1a561f21387762d2def8c67a4f06e2bc76e0cb0d75f9409074dc689b94fcb3f83cf281fd236e5297dcb083a94c883282de7fcf721e5e73b505595e4f7120861c01328054c9b302af4022af362109e2f2bef44313d81ec1a39de7736f3892f04d9f6479188c48f2cd00d4fa9d9c99a72d4516d76698e182e2abdda6dc8354025c623782b35791639d9b3d6a7a4a251738016b3a41242a73e716a0b132fe4277ef01d45592e93a97c88b5ccc634dda046cd046c4031e66938e3bac7e8e2834609651b747a894e2067a554335438e44327f1cde6ed0971e14a83c7852308adbe3ed656ef8a3a32d12f111d50acd2e01727d13d91114c1fc636e65f0ee602b9d47fb09db1bce5ee0a0037e7d0ee86e42c0594d428359a07b5400093c0f470edd76c5c69ab821abdbe49752385bf4695c3063fc69ddc8e9305462bcd6bccd4d0d55ba8110ae281cdba388e7dda89469779443d5decb893f8ef4b57c39fcb0af7421ed256e985ffc3c54695167ccd2c878e567135e0f7dda3ff6a97dca81f440971457a5478000a8b6376e1d8360c581b142d9608e7a1456bfa07564a0d94d4a7b01976a0d20c469d880ac65d0dea36916d6c9048b555461adb44f08c58c4a390ef5f95c81e74014cd75e59579ae6381f0b32a134bf8204e4ed2a3587910b5c8b361874e22ba04c32db059abd3cfef63523231af4bf491b069c3f6fa51cfe8a26f82ac953246344f2490055701c155611592b394b9a3c1ee2f55a1bf1f247ccd2d26907fbff1c2bdc80674ad889b2a6521d6e8770a5d5a1229266b75b7f2034190274c65840a4d302386b6bef9ff2fdcf4149731a6c98de17942073ba9d5fee78c30e36204474695ee17c4bff0675b00ed30ed406d360c39fe63b929d3615656a0a7bbc9bffa1e8fa965dea7e69180454e330dca220b7df4ecc352b1196c41eb28f0fb8cfbd62bc27462b9e145567c25c1264b234edf3be1e113122b8fe0f916a78044273957140d5010ea7ddc4fa9baa221fb56a55f91470e032c3ed7b7ac540e3304aa888e7b67a23199892ea67d8a8886e3c1377a78f0b3b603c0fdb93fa5c2e4a7d24561caa96003a473b91a75a470a6a98d8a779cf888976dfb7c7ef7a257b79309bde95c7ed4c3e31f237a3cd6f326f0a0bcfdefe65af544078f6f57d7bd96bb14684e8d850aa19c651a98b6a058644e66f933b98d3f00b2986bcc9080f6c13622ba77a1bc4cc0bcdd33418335b655093c331b81c194e667a0d386610db497d85bc8c077879970f0f788481ef1da14bf438ddcf86935441de988d54da39ba18e886f1c49546fc655bb9abaac6878c5c94128d280185080d674ae51107ece948329c69750e65e03b339ae27b70de8910f4c85e45f9d5f44230b5c90e524e0b3bb3cbf2f392c067444ffa037bccaf833cc7382a1dcc2e985810164f89baa0c11e6db27652245a744ccf5d09012d86897f338cd68b7928087ba8909556fccaca71c2da8aeb7d87841910cf4ee764334c58a6fa99d2b4b6af48ef5d3562f701db50a0ec4a79453ac06f8ef5d3174c1eba739bab7b57cc374f33e8b0b4bff010953f3aa8bd48d085bc6c8f107a773d9bd8085ae78680199d8806d542fb322c3bd701c5f052438afb772099171a234e388e4c2754e52869eaa729cf3be1ed7e1066351884c3d112e46d5e6f651930b7ab540e30b7f427a95067244828744e1a89a15782afc42d049fa043e686b803d1777123e6d31c36058ddf69c4c1ae08e7270a3159380d2f096af52e49ae98b99394ae0b30a5bee3e9482c38bf2dc0f03696c440ddb7321eb7fe79589046c8721a11e50ff42a8e2455fb084deb57827e23eba63fe7ea3e5f84b41043a71961f0ce5126253061b78e7fb1fe1dafe4090f80f77b5b5f77a5faafbb6b40194bcb6f5cf81c67325c4fc13417bf66e95cafa0ab01c2616a42b0ba08de2b15cef7a8ca7d6d7a48c7a140dd473d9076360c11520bcb94177895fbe6b89da010779b0bc3910b1657d6f8d809c1e51a2db23983fccdd809677340ac188e6c6f65425065ac31cde52b0b4684ec0d74a95cb12999f1219ddd6091a34f505efdc96a778c388f7f92041aada8f9eca2098a1717f73748fa9f7920d239e571826b330710ef76803c19dc1d267e4578a3f1bd652d666756341165281418be46ac9298418b0e234c6df62403e5e6dd84a5ff83207c7f9fe8d2893c21ab6192dca5698e6d19fcfb4debf52d37bf9b8fb2cb1f7d12632035d30c5091144a44a00b64485e7c9af1e14ba87bef3415472d17ecda1c792f3ee5210169112a5ced08811d51173c1498e218ad38044208bf98efeaffb24e78d513294d197913de9bc755f4a5f472c8f3b22122d48522ee53a4587019624112c65ca895c75274e17d8ff9a085bb5a84f72e7aec45f709d4439108b966e8286445e5c71c857105ab9d738398585c3b235fc67b358fcb4e3e5b38030c80505f8c1b790f545aaf2aded7ea8238e50f2c6133d4e7d39ca10cefcc763eb292062b112c088221b218375064a6f285b279584b0b643f553733108693df771b8e887022ea8ff32272f4137463f8873648d502070803712d5ee33e24caeb90be938541ff778b61706a531b2580bce919456724969712e6917d191213cd0aa46f1fe61b4948bd6ed2e296715c1f97ad1bcd5769330f2656a56bd27e5e798a6a7fcbc427626e326103d6f7794f8f66ffde477605ce555d9b4c48970269e3194a2ddb4b47bb613d1980af006e089f8329ad8393699374d2626a4f9303736893d3d7b9a515c1c36dc4f81cd00dac6395520e1a3741c3fe060f90aeac4987b19c151667416f40f7684def3ef65fc13512f827c6c3729fd495d6c0b4a5702326930582843000ef2ab5ebfc172f7451f7dc38f44ca559a53229fecc411024d172884e43310665b3bb8c884c83232cebd3bac9267ae62c0ca800cede208b30eb46b749d8a58c07352bcb74a20bd94ba96abb70518f6b7974f4ce53ff24fd05a7b33453fabfba69778d3425444cbb785fad79abfb90fb7a27903a0b07b9a46e639b074285f15957b56455eba24a932df6e6af1de16fed2d08907c2b0ffebc3d91e4d3616cc5e57e068a30d4ca1f8f4dd6899052f7f44a01adb6a64188ce3e684fecc49a919d5d1f913a3f667a40ea6299d2f8f8b46bb74c636f7e7e392f295b7b0e972a710d11084a917cb3e0d4635c64a0c24c961d3d7dfe38077daee2e43420cc9b0651a2dc31d1ebc4188b4cb1268a12b2f554ce9500eaa57737e24bd950156c11dd818e75022a8e9ab75fa21a596646a776e2dd613a4f2e8a3b57e3697465666ad918140b761d05cd1280c357590e579e14898dcd4fd0ba74453c4ad26948e6a6d7e4914a3b87acd350e64fa645f0361788a129f93f4d80847622460d718e44af390f09c167649684afb7e531381087a00e5ac9367d20fc133249add740a062c3a29f6c351c41bbf0aade71675dae7b56c1aa440b2ea16b6129923d941fe9be9f084b3a9479024144bbc135ba3fb4c3492055d86e52e98bad405a84f6148c3b7122ad2a231fc58fce6fca7e1953531255ff144f6a536ebdcff41324d423d6c8e863663b3136bf1d32b2090ac57fa5e63df301fdbb7aa86547c714c35042a23df12748362346a2af44b8156a72765608158d8cfd312387e09cb019d65c68cb6f1efaefb50e0dbbd7c659ed7b8a0360e41da91826af4f35de0077eeab2966d89a0daa850e790c2f4ff0466d5a45210623d8f69ddf0754ae6031888835886e5e29b6c7b7f308009da3c217da7df956b7a2a21ac263493b123a1ea71ade021dd042c7772fb63c7ab09d30cddad64d6ef2a5255e2b0e32065beb55aa1d3f5b6bd1232b799bc9610614502f07a1d6253d6cd3e4e2ec92b870132d7d0feea64635eebab31fb028e06cd71f0753e63e8923ce681e206d4ef36047017b60621737084865176dc4cf85799acd84581be2876b43e48d5ec21afa3560e40856f944352515c42d58377d100bcc33c15c77f25205e4babd3577630b3ed440168219f64f424619fc1c6ed4f63cbfde62934955223ac9a61eba5969004fb9ee2c789492242a403da17752cd257e7443f8358ee800094d68634b3d25ad43c2cdf560a7e12421646f6dc5641d077c9ef2d76cedfef1586b5456923870ea2450ae18c8858c6c08b028f297d8dcc13793a408bfc606a2618009ba1fd68ee62a599175b6053ff61d5a21f74885d21f3480cc869fc554f57bc95f7102847b6138bd380e95ad88c353677fc89f1496a07b5aada0e318c3c473129cb7d3ffca2160467a8250f525b5387d1d3868c382d80ae90b1981dd745c46ab7d976a28063c76f2c0767ddb6dba55fd649e9ba661cb2c3aa6c78588bcf956d6d27a6970de5f3467952322c5df5b0169cbf2625097344a5dcab9b453163936788019aad29804233d2d5cdc06bd407019532672818bc63d8d7ac4e8e618477a44620013b013f65902491f2f632edf78910e074f42b08742d02fc6fc085fa95fb495675b43d2402af8c75519d8cf4c116620addb941af0402240939facb6b80d5bb9b078eba1e25d9fd8eca9bc4571413d2b93a137c6c24d0388c73f926d054a6c9e8c6e7f3b03478abd53ea3f23a95b209c5d9296adc737f70d848c97dd1009046820267c915b6bbb8c6a7831398126798f07fdeed08e3325545ba7282e594331a21057bc30274e91be04fbd763fe1f8c5e5a747ee13f6c86ddfcd1f6e82b4b6bd2468e282969014c345e794d13ed33767c9f03f14739566925554f5f218e6271da857b3c542541e747b7479dacc820cceff4fd96cccc1d5543f00a5e6f4c0d57638c02646c1535a3e0eb38ff80f3425c351b4e158bf83da6a3cf7f452f9f566d3b10c6df394437fbd5a54a1f6ce22c51ae66938a9b22336b4e5bc19c95f02e8142ccc4702c636a7a525340e6ae1e3ac0a2d0f39533e02ee723ced16bf92b661b89349ec75962234bfc0edcee621943302100f9c5fc984b23faab93fa35d57f26ed5a6fe3bc011a05f43e9241bd1c4ac4ee5eb606ce5e1622807bccadcf2815d871fc234276d97320e6f4d1be06091ff7bcf901e4550d0d10669c6161acd20a2d9cc6dba4801f0b5941de172b9aa27fcab738c0cd60f93646942401c87bf669f9f9983d7592ac258f1fcf312c96a754f7e3d5e71b6c287295fd2138a421d4224b751f3101650a36f5edcd526e38f5501230f51b5af0b2732ed92c8d4c1a35500b0e1948898aad6ef92fda8bd446373b266123f6c6851e5d28935fdb929783254982b99fe15338777d780b0732445257bbcf867cf4c12452bbab8fe31576ff41e5483f493ebd3e5a089df1a4c4cff71c420897611eff1a09a80ce436c45561057ac9ec7b839b9602902b7357cf808e75a3aca10ddf9e231b6248f14ba2751e5efef61d8dbc72a05a7394f1497371d92865a56ce84cabda24592e2133731e5a1bf4eba7279dff46154dfc9b4bacdaa82b2119e5fd083612531cf9338d516ce76f11f3aa78354d7464ec8134484625d1342ab2eda6c7a2ed2a0205bc69cd2b9946e40a5c9f8420612c5c7eef79fe36f309d80049fca572c94c202b8acf6ef4683f1811d3ae7d8e4709ae3eb4b74c8bd338073abe328b6a1371411080599591bd6717af61ec62458c4946bf551bd87e6754013c36cbcac94b53019e9293f1128c40fc1ccefbedbf9b3e518a86b440d0b540872aa52d3776ce1f044a11fe28e0c53433141fbcb06b6741a0f77a3f4296123117aef33893a0f7794daef7a2ad9d1671c552812bb0f88f1bc3648c3ffc8fdc6dc81fea292c02382b0b996f0274c493031ff7850fea187e0e3e0ffbf72d3676412f76953278c061377652e0e877725801d0895df314ec58505f2414e3f9bf0142f14ecf14a63a845d6ab26567c7696835b7fac8b69469561ad0e5919cd5453034abdd07d65cbba50bf344769d790f760abbdf99f387b8d779f8b445c0a8e788501d6543169d6d2772602c3baf0c465e3f708657b4df24bc0cfa7132efff9a4c0a44da7fec349f9329faf36ca583d8933ded7baede6f2b8e07aa361c2c3b37730588b994cd388df50e1b80bbebb8178921210b2385b7d585184b77966bbbbf643e7f99e236bc3afa7b70bdf8f0e77abf6daefa4d475bf8bc5cc052e74fdb9e3526e6f96b51f9c0de18ef57eb06236bce2fb72918b60dac9978aac18a96ac54602e88d2d6e0e5116613e3cba7fcf249c62c211697b2867e186d6d1c58c8c9b89365f7bc8ff542af1559c205d242059c850c7849473c13ec4b0ab96973c9b89e492bc9be0c502644912ed50e107f5429972f974c4f807057511cf7665054dc21ed244458f43c562acd432589eedd0335a11c005dcd93b1364420f0d7b8726a19f40afd343bfb345bd93e1993a5f9462f1f2cf892acc6107f290c14d42c2de240ae3e82071f310659175b848eac45dc3e663f497495023a45e57df4d1189fd154a359be1c88c0f011da5156f8bc7e2d1bcf2a6fede56eaaab0338ec9c3c3541788a27330587bfb5a54e379b4458320263aa26fe12f241c6eefc121a50ad8c4d0f92226d95b032a38ee03761522c99ad2eca4fb99ccdac95341244f68b599a073d16754dc95f68eb223673f329a2181a95bf471bfcd4b042e58c5ea7f53c18344530233cb64ce4ce616325d440b96c91f92a734aa1b50412c6b733ab413e091ae1c0385ac654d1e2a4167c61f9dd012b20cc5eff188f10a06d3f0e818112cba5599111b832640ca4b85f758a1fd63650ac377929362f05ccd8e232c6137f55f2ff4679c117e49d5295f70f5077bcedff290856c2e37ebf75647c4b96c9561a7a382d38452fc26322cda135e3f4e2b62f53c863acfcb8b6e7ecad14e5e82e22c29dc81bb0b6c2f721325847f9db55aeeee26c086eec31b868ee675b6e4757e694c7c152e186536baa968f32d382b460429fa07e0543eb228330265bbdf3ad1469f3371e0f1dbfc11cc35741431f119b6cf56b15204db2858e0366356f3c0fc4b5a5003297a56340ef9d84616afaadd27bf27a5073046568f4ebb93ad371af23df4eb6260eb6510ee4edb411155e3b634258445f38a28cec19044f65bddf6176ea026528334ece2fd158e65c6d7318bbbd08ca18f057d0b093c01f70a937fb6be579310e264c6b2637471e1877f08a6b178d62202974f08e3869fb1390e33a17907999123cf2613eae6c234825bf03f51b4e595ae7c151169f13961df0492739a9e97f187dd63cc2ce7f8e2b0ec80a1e7f666a312f316a493608187c03f7a67eff14fc1372141f799eaf8246edf96bb7b4e6fb0e5b886623319bbb319cf99c55adf82c533d8d3df9b793ec552746091acaddf30b8636ab12d2f78d71f23afe0cffb9b87bdc2edcc2b63f0c0e3d3d8fd69bab6d5d45fbf1186961ad2e1218a59dac7019492f654a26474f70304c87dae4a43e25347af8fc291c147538c74447e729198c5c10ceeaf3ca95b0663f1dd9790f38fc187c62c9a85d480214c6b6a1a429f25a114938221b7aca0b34563e972654231127f80ee2c40cfba37f33aecbcf7998f26af7a07f4c7d7d384f341e9d1cc67f976c005efb09cd113d09452deb55f7e9850ad311d8352b84dc6f1f6cbfa3c0c6877126212624c5156a3fc4853aefae55483cb362ff0ec1fbb121dedf487ce068ad5684420f84e45bcc481186b6301b3c5f2a8e49b798c0b6926e4679ab9fe349dc3ddea3d0c8e7c1da3e5b0261941b5d5c58c1c68d2323ca557af7d495e313830e116e8f45db3d4e121b1073c1485b9a1a2ecf650080b20cc9755bf0d094e3e98c2d9a916a800f14dd1ecd9fa9644cea3f1ce65115662cd5c616c8f6f5720334617096486ab615f31d398d77d0f95009993c97279a5bbbb81805d812b445ff9d5c599bcdcb2d2a7bea13e9c5d5db45dc254c4072cd6445b20d0a768789ace911544ac61890b5ff35cf1b05af1f06f5ba47014f1e5f5ce867b630af51150ec45b5b1e68adacf7bcddf22a977761acb63bbf140a6e744a03854040bbeb62c6af9e6b4f1670c92adeae11583de62c8af9f533204ff8e5f7edfa053851d79ea536c8b279fe1c6c23a73b53522609044166d60f31b4c3c1a6f67af26f9005e6f6a1f91161ee57323c62ed9c1e0cf90cb59ea3515c9e14c14ecc7a9748985b7577f84cc064e8ff940f8935b92b8e21cb0a19cfb231acbf1d200a43f97d3d3446174d53316ffe6047bb4caac55d463bee4d2486564230247f7b811a5432954cb9617714d773586e53e110b0f500fabf512ec275ff577687a277bd806b7b4876af669bd82a1bb4f42c1092c9bc0930ee46e4d885040b4b10eaf0725fb5282631d578a0a3642d15928432b7103b3fbd54b930c5785c3c8f5be57411c55613ab5436c39e35a9738a18ce4500d2533a2c545338e719126173eef8047626c024e997dd0c47ffde79ac45bbde46a13d6150dfb6428de1d46e43d451b03ca4fc4e270ca4970ab80c2acd33735ea1cce52f4f68aba922fc4d073d91b1e4ae714a06b69348c5025aa908141e8aa5918a330eba81ffa550a57123a553a587f8d8833e838658f17ce0d30bbfa2bc4187f2994ea15dd5d28e5b495c046c1fafb5210f145d36ddf4cdbe6d26aef464f362b2ab4cba56e59b02b1b022d0b4f6e80082c0626d571cafea5b7f1d11517f7d40c24048e9930aa1c38bee537a443b7e4aa9d82acbfe79f46a039d152bfc54abcfd29d0c8c52ff9387e1611f69c835a52000d26686abb7c1c3ca4c13cedf8839c8bc7b59a82e0a9ca96bb21664a5a3ccc6bcc9292bed327a895fd03dfb143b57a6d7a925458efef2f635bd0da232db9692e62574574e9c4911091d481e9f34aa8fd1d53577be88a6b1422b073d2355e106911112d2dec8dd4c140d0bbe61cb3afbad3b76dd02f54838765f676404d5c0ecf3b37c739ec9b34d705b102b485e2cfd2d820e65df9e5cadb6a153dffb280927857516b18629665253e646e489d0e6b214c83582c725cb910f2a28bfe26db7669bc750418b227ba8179e1107a8c0c87977fa0c3da1751055be573e50ad598f19d11f7eaedfd7c2c8bc216799c93a16b09e5037dd79f30710d8a50074d48185dd90f83329dc7e86e4da353164a083f5b51dd95089f1d76834d62a2cceec77a9f81d2c726e5967846d7a344dc3ed732ab8aee146b6cffcf302cdfc4aa8e66dacee1a5f45ee0c822a7c22373f3481aafcad1e1452c9ca6a657cde1c24d8bc70f43b968f159a93fa1375fb6711ca21fec66dd38535a7db70716b3c2007baca88c27ffec56f5fb4a55764835f562f1ae7acd6f5d80b2ad79a54fc6a68494306262178dc9972a0b54a05f0e4e04ee11f3cb8fb541723ee35b2553eb0c30868111123e4057c688f870fae8eeeb15068771fc36134e16a9ae5d13baeee250c8530e31b0b5fb66db406b78784e26b0a844ae35b96036a71a08d06728ec83649f99bed4f15d2e36d0cd79f564312044f9b452711e9de982f2e51f31ee3a7102c989eeb5bf9f55775210f8d15880b9435e1f584940523330b35fa815b464f58307da3849d156350245896c00ccada4b63de32d6335b71e0746cdf90f477b2bb7069be932b90324a44b957c2919cd9be0fba1bc787d973741183f909f4f4459b5b24b05bf4b8e02d54e992edb233721145625fc5a315cb680bb57e5076c3c1c774bb676cec7eca5665491c9f4686c1de090a4f919480f74559474f3e3a90b691555b616e9adefdc367085fec316aaf9277a4a6948bcfcd0b3b2112a42e8c1cd400520b13dbacbcd408ee0673dff4ec1167bdc6de364b1c25735632bbf1a2f2f313751420a06449355f85636236a5d4b80d240b71c53e9db536e59f31de78c5aa04eda09420348ffd0605c24e174611322aecc915ad63b95212cb5686047a14d84048a2b6fac067276bf29536ff133283082ea435be24a79859f2a7ea8b1601810f16f12f5ca4c7967b5d5643327dad00682c82292a21e6e35ff5a31397ae4d7e0ce9b9eafa9d1f520ac44ee38514352844a7825e93d857ee2f0dcf6601b4ffcd10d73649c4c305ca0cd1e09a2cfda1b53f86310fd31115cb6d3545123147afa93a802c5221149b7e5e49ae9c470ee5d2507c59781af15ede13fe4806f7e703ab20c89f522fb06cd415b3b18b6379845f4f73c2b6ed368e49204f3f24cb94867644fd84ef51c8fefe172e8e683fd37a997916487bdab2411557178c81106e5f552b3b4660fd74b117713f314058d9f6b32ca25e1535c2f4506655869a6d1fd8cb732e66ee797362295f8b83f2d1fddbcb13d01675ecca6b9a42ab6d7be4762793582f405ca575ba8609650e06e64b38e11b5bdb8f44da9abd41427235e4eec5d93f029fec56d5f46659ab077fb4ed3a474837014b3b8ce9ac0c795ddc6f1b380e6d6a87fd2847469c3060215c4379eea942a9ccdfa9212de251e1ff3b780237c9286653afeb192fa6334ff044e3d6f43265c22518404e3ff84cba6d789c79ff8b1a174e80d06599ee46695499695892cb1f50febe7037ba2a7ce07b2eeec74492796197a88194e7a8508b4be6289dba8f549340609fb36b7849253d0084e2ab686318f00a23b53fbb68cf479dae4e68a5226f651bf74f394050be05b9bf719e0b5e83b6044a90c496223c771d30fa319c37a5439fbd80d6130854b327876db0f42a7a1eaf26d99467601084c4884c4f833f4a56a50c7399257878ff767e6840eb705d9f0fd34b404516a81b55be0ff2e33313de4e9ba8bf8e27efc81fe4d600a45cf93f74f753c262186a5c947150da992fa6f4bc4de93852018474ed588871c41823b108f30de5df20b970fe023b5c0a39c39e3a4dd72bf128d49b79b948fbc25deb5a995efe64fd7580d4965860ed4b6f452740a5448c816869b62b861518aa57419941c5d10c8a457b0578741c13bb72c6f6f0fc0bf79b5e0b7c58aa41c08d68a2d292e5c2043a0d33baa9d28850b32e34634c8ad25b4d15876ac9dac0ad3a36bc3f090c34230e0ed3f45c964713583fbde330c6a16ee75b308676dd740396467a83d57c05d22756bd8f6bcceb7a8545fff6d32e0ef2143265c44a80257a583e3255a4874220037da5fe123d822d284dededbc779dcd170bfc8f31a467ae29031ab623948b61d64db2a5867f1d54046a4596141dac03be1b9980a331a55b1d570d0b4482494dcb7093f8bc5b2b6bfa7a3a2d4f01a7455e053ba076e18e8e055d8ba31bc33edb3a710b868e596d7b4e4c92d1df17c958e40108dd2b4c502afc06ba26ad32bd84a7052b01c0b0c7e9180eafc16398cfc6525dc1c6f52624358c65b970aefb72016805f0305519a4f9de04d331f694d66968042b23d92af82c4d63dc5026e09ae621631527de36e78b234ac2e1b9640ea5a6135490be2b822986454be253c5424b626f1ab4da484855f1356575e98014203e3ef52afefc8351b63686aa7039c8537748ce09224e316da55566a47b3c19c87847e96d5112b3681f5f9e25520342f46a2fb651858937153a68b01b92c5bd221b03f565081080c4f917958e062baf62603674ffd0e3d6ab48213956c790313e0a38039f580decd2e120d36690bb1af263056cfe9b761e374d5279afd94034ba682bf00e6b57100340425227085000237967b22d34593aa82d7b66d4b4a635eb2d590d51b201f435834539c01b5b07e42023a06fbf81ef4d0d32284564acf772d041be1aca1c0786c2207578536a7c60b26f5778de093c89fa1301b1133f15810905e62a6d19a7a29f4dfefbe58e91b6a63fbd5029776f04f635e148e4aa8c7cf50b92b1af593134e905182b0b40a36c824a0ad381c557929615df5cc7a1420a3f7b100ee0bd9aff8f0dcc2fb560feba6323b83ac7710374b80dec9050b24c40e50a628f8b2833521d2935eb928e3f5f8654abbd75d5c700113a89aea8979a21990bea403c72b973a9651d9da6ef07464d4b16a45d09b5bbd16360394e1e044b3b135387797f9cf80e1e99240c9a58febd30040b52c1815d3e2f6ed8d1f3c2c86a69d9b9428ebfcde80e4e848f6e51c9f45d0880dcef62036a4fc6a8ee74c901e12fb9a3c19fbb2f70379730674a2c76017723430e05ecad813733d115be1484f929e911c7c76ae00c14d5d9bd0713dce43e6415af3725f784396b5aa84dd576c261b8eecdb950181d1670396d1e602f5e7fbb996e8a1b1efe072905b39abc15b85fe9a340fe5561714bf899c8ec8a66d864b928923b0737452a122b1daa34482c7a0e33ca43109fd51cf6457d4b19156e7022e71f6b7c83a81fea6a10807e1b7f3f3abd0542cfe48a1a5275304db4904327677233e49868086ddbea2c7baf569b26c63d85d61ab040067239bdf1b4f6d47aaf38190ce79ba75d3b8d991a48f19503332d725eaa17b92d4258d6178f57f22a69d76372e9da427f5b463441f5396e367b64dab92948b2232c932610e5828b3104c177c148309e0c70f2baf14cfa237ac80c9d2b7c38014d7679b9aa4cce652646fcbb484ecf80493a31b6c8723e2827b8dbae93ee5fc722b7a1d7f120b7ad353fd6b431880b3f5e736b54b0c024d3070b279155bdd3ad6d74ac995110353f4b5d1e9d1259a8b902550e78db7c4d2d2e0ea8aaf91587996d6db8ffaccc4a55441100bbe767782751d39f505d3e46807acdcf7d731e5c25096a972c9691d2fb35b2515ab2acf88b268ad267be45e0da798295a1471fc79e1b48f5bb76d4ba1b061790bbeb863c3f3aad75ab67e14b192a4457f4b4fd6c285d748a6ab334f3c66506efb163e87a9f6c939e37c34c885344a9996556e4c9c503236f45d35030fb7dba18f275eea223271618d5421455de32aa390a6406d2783c29ae3f7835cb1c3d664bf6cc6921aa4cbc8c6bfd9e0817794e782917259676736ed061621d63a31e94676779f8d5da313512a85f4cab9c778ebea77a677b9e20693ad5435dfbe730d5825e98c0472e5917b3cd4e4e883906ec5f77981003f30ccebf34a8c6188339d588ca30f6cbc7478f4e901a48ed6f1f5ade01287e0be64f896976eb354cd453b9d4c8b9fdf7d2465e15238dfce40c6aa371127c5bdaaa4713a8a6b681a4d32ac75e5c6e094fa25e3d6e0934833ec218ab98e2e4d0e388478e09b6c50e887e1709ae3d730b78d8047c2785ed64615806e08b1e6b46aa6d77d33232a00d0a9e1f40dbc45b01f48e3896831e163005de15e0fb03221f68b5285849dde06880275b1fe340dba9ac4b77d44955c8fff1aa3e92c6e23b112078152f655630447ceb4524f930ad89858d6401cf58fe844e2026766a65807bd61f01cf6bdc29ac950349d941d7a16bf1ab45d0ab58093f7a4b24580e45749ab833472e8f4adc10467369d4a2d7c526c1917bbf20afcf7e16c255e0477f4525881b6e8be18d235831cb7538eedce152104a698336cc4597fc3a18340a43a73a47714a87693a44336d220feb24978f3ae0020f6d1637a4ab9ffa78e3590fb112dbc57fa1d99744b470620ea824a68d9a5422140d5314517f15f5259c4cd772822cde0fa1e8d0ec87b83b2179464ccf468712387b24be65f016ff751c8d1ffeb72b6e2c03b6ecb184358d54e80c343a9d3a94143a9ff65e6d781f4818b9f6eb28c5264e29e02d038b3b434e4fed821c1e3b281e07f53be7cbef417b2aca36c2d3878323e6e6627e6897a075e344ac5bfb3b66531feb0ee2fff1e639604dd2aa8dfadd2a8e5afdfb6159796296b1ca109b9c77109d1c1f416a99dd283463e2e53a0a1817997d325ec2940e7765704c4e26d59d02c5e347aa191f942837262ec53b5e9c749ab3771d6a184e080fa8ddf94d8f015d392055e2ae3dce47eda469173c2c4c3d0ec1b4735e7f9822cfb0463e03728a39278c8b1b08bac62983bf0b0e8265453af51aec8cda8eff46b878b05f830c4b5f2fa2efb0a031343888def09f7489a0686c0c49e985fe5e498bd162900966a5700b6b3d2455f5db26b1dbfb04619f2d411819ca8f5635e52d013824cecea32f11856094084b7b137631229b60f963ab135cdf871063eae540af95d972e5550a0e5416773dccc9726b2d41c078d0462664e3382aad2b3f756584ab471faa7aa479d256f21d1492b86d93e3c25a55a1ef686e758ead2b5de26c8dddc2781191164d9d47a6795309505105f7a5393b49e0298043e5b883e5ef1cbcdfb035ecf64e757386a9f154307f25f910bd0dfa751565253c2c6e439bef59eea534f0424b3959f93106cd5f5efc503df44e6c5c02e84737b4ef503520ce279650dffa656f6845b7e8eb3691b7fa3940dc314e4d83fc0f71844572a417db1901d1c9f080fd14320d18aa16cc20d00db6299bf50a7c2e1b17483d96f7866e13316ea6cd13baf91b74f7dcba11e1277e45496feeaee38a1354d088e02af5a1323cfaca4011f6473df163c14460b72053acc42d5aa7ed6b1b5ddc445186f55c6967f008f354976f4ea4620b5890a64543fece03b4deb94c62af353466c8478a4e71516211c4673b19bf2add6fae2dfe1454de5776f020fa5d701eff44d53dce2065ba64a6fa81126993ea740896bc117d362012e9ef145d6e4cbf81e26680ee7ea443f60c37a7e52dcced09db9402f32c2f7c0db52be53051a40a0d45fc0a3012fcf66553c6044621fbc0e2fef47d264e4c51ee1d725c56777447692c999f31291d1bd68b6747f2343dd1501438d1ba25e5bf924df84d84574ddcdf7f9b19875a7046e3efab4e49055eba5943ac6aaf5d72bcb725f21ccf6b60d128bbd88d30224bf6847fb5a9d032f768534c5837fb4974c20da82e53b3548987b08388fa2113ea7c8da3ef2f121c8dea2e8ac9821268338dd0646427ae62aad9f62ef94daa0d8a6762dca9585a45510ee4bbdad7740b9a19b616ca86773d32d4b337dabfea25338ab4720c693d2d9b146b1f686cbc10dfa00d7e0b911f6edb40b0e92829d430276eb5aac515b565ed1e2c10d5f5722881107d7fd7bf305e6b4597ccb9540572c0c5070649edb43616576f139bf1661a337895c659abf71862ecc1808216546619bad09bfd78716ca3b8957fafe23c5d544d00ce1534341331105ba2d4cb4c00fcf6d2aa3efde755ea026a124177c844d6e1d3cae97aaf4e111c9612e2316827946b7c47ef6de1513555e413ca22d1562860330d077ee97d4784bb5a93f9374765bd8129057fab44c224ff3f5fc318114b3fea81fd5a201583fe8e74283be42e72d386785c04a4590d78cf2c7e28dd7c94555b2d1b46bb3f236954fcf2df9301f7d13274c35f4b4ee44475858bf396592212e0d2dfb71346713a6539a65fb32de5cd35acf668b8330b0c49d6d136b32ed3fbdae0fec0223f4114fc7605ee577c6fb85f4241159c475aacc8d36d3c753a873667ab84d32e24540a11f59ad0c6079b39b9766a098f1767dd79ae08b02d7e8937fd3c550201431a7b12c8fb58532a8c30915809135a70c77f12624cdd2c5c246c949c2c754e67c8897019e4a7ec3f30a321d71fd574762473fd2aea9c6f3cb04a5a713b4902018107df6c7c8bab1f51a2cc5a4770bf50868e281f0a22d15d389ae80411d52c260319527729f17345644ebb85649a4527e20e1f163f87006e20244398ddc9c17a76a65e60c2367a76fe927ba622a93d2d20ef19df0abd997c18e3974e350c222e1035fb0af8a5ea19899618ad0b5a4c376f4d96ecad32347afc00a98b5a138f41699f4f593a10ee4eba2e4ad31e91e75242263dbec35f896aa733d1e2f7fad82c4c373e2e7953d47ffa89e1a930ea346a06427d21d2f57d0771ba0403d3a92502cd89fb405f32bf483c7c77714204a403c7627c0fd0e3f434c3548706eea5e25dafe477b9e674ca38fe3aa2b09211b66ceafe35cadacb2c4e82d083f45447a6699d1bf0eddaac381d47d6c8e90e2a1c461ff4e9870e700f47181ccd6942df38230935926f37934411e202dea595ff9e3d9fac136d43c0c00e2b38d4bedeceda689ea4f244bc8b7d75502896eeb04a2219277507f10c5a8114eb45c0b1fabb622bc4bb3b5c26eddd521882c73b43300c240fb5672dacc40d37fe7b8523423ef21dd8322d511e24ed404035fd58f5dd621a52e4c0af2290d800ae035aa2730094578c1b9deffc44fa1539d9931e3d9ad31fe6952ea281bd0568ca55cdd940731e0d155488b603463d482a8544212d0d2948def905d518ea217c4dc373d2cbb09a3bf05a444f8fefed44d47b47c5860cda2bcef4a2a865d9ea2fa79ed5699a577c714298bd4840a42c599f9e05d70df1d6354574f62ec457de2cf8b83045281c8460e20c67cc1ca2ef0217197732dbbea4671758cf8fed22222331f08f3c83f6da28f8a2c24abd1c654a64179e9ee3493741038e0e80c2531b4fc617944545dc8a28bc8df859a5d378098fd6b6792a85c6284fa2800c2e4e35492c7ba3faa29c26651d38c726cb45293daeb338f177266240af94095da381050ac34185207673ab0db0505cf2bea05c0979425e7a1643d105e89d56c95a7bf6603dd1e90dcb49b321a1babed935907d4ef113d7e6df7f2006ec74c626e31d4d2c47bcb5ecb64f3e3071c3e52ffd54c4562007d846a4108042f2ef2157828d3e4208eb21f24569053faef88ae3650ff740391d46ebf693d0573df8f9c62ee6ad01fed8d7eecc2dee4a0398f59c9a64a81cf8e01e6547524c64bd782f3d63cc6d384a88e58d3709740bd204127176920d5e60e931b237b74554758d55baa3d351362bbde7234936541095edc9b49a422429942f21856544fe02cd3a02c55e2eaf02b3dc46b9abea142896211e49ed90b9316a2b4fd2f4d79b6e43150e7cc7e6903d6333fd410494817e444a1a866248f05ef3342e8a7d82f72441d7fcc0f890ef7b4da453de7104c902aecd173ff222d0048bb032cc67e35145726af656944d9b2dfd2fb1fd619a666fe1064b897bb3c122c22fa170150e6d775d7eac62b5a3d81a3d6e3673fd5c442518a2ae6d2fdac040a8d418c3ef0c420b63d7a51fb837da7a21993a1616cae065da6fa4ff8f0d7b02fa0db7521e11db4397e834cfe1e4986ab0d5e09a65eb3741644df6b9afc30d125233a38c57e447475db51badae651a009f34314180511c270bb9dfea77da3d6b16c182ef0bd8bd5372fd8ffa1232d7160629ca1442e178421273064447add10d552932f44f43090b1006738eb3edb53fa0bd0ec51524dd7c7f7ea9df6cc890529809741891107057fbfd77783b1f300db68a1bf958d3c83561db4205f1fd7e71b2493fed64aa4760aaf4c9088a794d56d0b8860169d86a7770ea39b495c6a41cfd32e37b8b2c900c1fcfc4e9c4d50d0f7fae615c039a9a0573b5d491cbd8067815f2e2d392a4af37f6de2d22eb89d16522d6cbbcd7ffdf68331711befede270829c32b2e0cc68224a26699da9387e6151d90910af2b55f132db5f9564a91c918b625f8275ea3585cad58a2c16745044503d9257090cd0421dec1ffa832d32633cf4d6f477ff18c401611a165ec62537346c1a7dc48c5577c2a19051fa2018f27cd916e4b4ab33b0c666587a16e6a0e40167262712c4aea6ba5eb1d65ec6c9d158179985bf4082806dc63faa0c7673c1260a9e2ce6c80d94f6b11023bd75b415de85572d6b584193acad82180975eff2474f2263864b41927f136b580178d817f239cb972f4665d1ac31d03945e58b736eed94f367e863d6391653713c665ad3da95e5ccbe88de725b1bf8bb84e7a37667e7e913e3d4a005625e3fca5618f1e5d6fc63cbdb4831e7cc175e73d11f6b20c9d9e9547d36f000c175c0d1e67484430354d66031afd9b255847d460ecf60722644a0e23161b2769473cc42943f03365f61b65d7c717411329c3b702baf10f34e68f8c9cc4975f535049d3c71e796513737f08adb748134cf80405ad9bda5138b406f02c8230d55e45edd9ef14f6cd5dd83571c4169d826284bf6b3662f21175086483da956e6a4357550e5bdefc9e01c957299a9773de5277ac4fbd64f43f51dd63f8797aa8f3455f4b913f70d87b78226affb91cab0c6b7bceaebd42d75862e9438185fbda7971b590c5b41e601e4f29c89cf9f4853431a873015306c9fc37a3f3552d57f67d04e470048be5584d1950a16b86c4a1926f884d227826da947e8efd5811b54ca71eb95fe97c7e56b400c01b02645e7673029f1a4a5ae70ad509dd85fee7003b64624889cc64b716f12102233841ddf9dd04715a739b024c373bcc0ca7fbaa63ff037f651cd5aa0e4b4af494a63c2e6cd41db1eca8bd17ab512ff349eb69e9d4ce4cbafabdde8feb783d64679d5706544363b0ce3646744b632394c881d9efffd926f3a7eec2d607ae7bc25b400a0f2f1c7463f16167b7f33e0d1867fb20d7aded1669da0eb5a53854090d347e3764a81903a819b64aefa1527b912d8ef9594ec4278ec25884fa88e4778010f1ea106cfd6d9b67c1400d671936984dee91a697ab162fc3487b2e42755263fcc87bc93bf405ebce4e9e4fcbbc19f7185da583d75d2583b736fc14ed5d1d67a0e2fcce97b66d7196b172f483d603455a10b31991b72f4fe7aaadf5124002937ba2f719b7fc5f7fb54aff88f4753b7d898b3eaeae3a46b7158d0db5f73f3b6f0f67c11c61e23ae9eae331f6ad7a12334586746ec7d9031c55f87be1bcc9339fc307831967ba1f9ddf51809f2598503964ff64d9d8be255221f4717f6c646086434a10bf088b10542cbb725115876a42c538d8e097a8447b4261eb64efb66a8638fb60c6c3f06d14b637fa1fb14871dfc39cebf2e90b51ae731cd0bd3cb2429a915a236efbd94d6c78b2e8b761ec186e86f0d2fe1e5072a336424590dc5c1f53a5ebe0f3eeeb40665bfbd9d41ada79d6f6a52890a5c54c677a388d5a899e748abd9e019f2f1125f033dc3ee6df8803b900a10272416b33ba76bf36cd29420a2262e52480bd9463ef4eebcce699810431b17d28dba0ae2b07f2bd347bfe3f47b3827bcf45f2c5098c92aad7f52a6600779d051f7e84ca12d979b0f8147dc433259902b011029a4db98691e93205a2572a7fbd50f188ad6bc8f5310355aba30ebbc7e96766fc21383067927ed7e4fe2b02ba85d09b678e12ebdd61b249a24766a5a9cc0d2e405b52deed414f87a82c668279da8208c9fa293e2f10ef04108b4be0474325b5f2f471c9f8f00ede72eb4edceb1917617b390107eb9480e46d0e5f915272efa3ff0b17c665d707f9ec2307d452637725e5217ea84b7fcc4fa1d866ec1f0bcd838d8638815ff99707c8bc7b0103273a83cc2302af81fe7731a678160ac142d45ebd8f7d92000bc77eca59244612cf4c00b13c05b3e8d25e61e6ea0e0472c2deacacd465012731667a22f45787c1f3414200c740f829fda6d906dc69a33616e59394ac5a032642717067a67348b4393f7297767cd5b2bab0906ec97eb3346103f5815a6c1299e185121f236a9d75ccdefe6b7931fc568d3017f799561f807af00e10871b17c6ca030af33a61d88fee615f88df3af56cf52c42daad1e5be4110cd781df33feb4ba95dce46a21a94daef4985d940365b628278007f0318ea8ec4420dd962f325aeebb5a6ae92992add561e5b28c30c54e5ad785818a067d39a0f85e4c1a2a8370368d04d3674eac001d2b9cf7706bb511040ed056a200ebe0997cd669595f2b1ca44d0cfb8045b7f344fb3af81e7546749801711a87416a78abf113beb564d33d944cf19a1d236ccd7f38157c347dbd014d30f2f16c2a2d4ba6a1ce12703e151f5eb73d2abe681bc90db4bc978e61cea22eedc107ce6c00986bc8c1407202337f7cd39a9cc92763ac8c2ea5e9361702f68a35592e867e72e51461f0790c2bcc16c23b8d614f404cce67a8700225382bc57e6db72efb672c9606ddabee13546592c33f921d944257d84c9e32f35f341ecbfc389755a664b60951444d4f073cac7120bbed1b350f844193ad2e765530b8db9391e66c1b3ce78964d7f42c0416e15560d8e13c1051303f462aa718507c62a7d52c20e48e4abb59be08089c6903832e8862951f750a3954a5a0f65ba161678f81eb6b02736b063ed669f005d8689d41322299ee41750ee90130662edd2dde811704c7a84e792f424638c76c4c20077deed4de2bab2c33a204e3192b7227fa56e5e0a7d1a278dd3853c528e6b72771531bf79b93826a3d285521549eb57e3630c9452a074940b38af0300532f359e42aae3afc357448bdcf955cf8b51d10344795a13103494edf0cab7b36924d4a81292979923511565d12ffc9cc67ca0425dc276b3b275948ce3f3e0bb3e982484b4855b2b4aebb717b8d0fa457f31d77341c16db764f0d5b33c7fdf2dc81223c93e2ac503bd8e67e115ba7c284bda534fe80950fb5c3040c80c772ab30716747f0c2124f22c971443fd4e075e155e973b2e55fb2ec368d5f0c55f7b78550f8504dde5cc1b17a6b51adf77a526d5b447fb295960da2a79c3c22b66391c807a10c7667e223423c9665395706fadaf2b855232e270cd6e30735f9e04d6c09479f01501ad394c39f627861e1f976d5f6fa4054d669d0460c153ec2f01f554060f23fea0775d485000f1eec1c0be77b264b2a2e45674622ebd23e35c75a9fb2b7e9092e67e696bbe6de7fdc2efada9797f82e34138c7333c7884af511b1ff31821a007e713edfbd842d48cfaa5b91bfe4c66067042f5e0e4a7e32dd2299131bf0451397dcaba67a0a3940051cd6c77a495f454e24631526a40336069a20a13d6237480bde39a18e5b514d2cb4d256f65cce0cb9661686e119a6016ef1dba326da9405153fc7e4724e2a6368155b8ac1515671204d2417ff94b65be2d6b9061ea32c5acde329d8c775de6693c29605ccaeb235c98fb84ed383834f846ac45981cc77162c1f4427a80eea555b37e2467a60cf39726dfb00bf837f35b3ef6c52d9e2883d62b9e2d4b5dfc0547468ba7c3c97d9736633e6f6c4cad60cd12d7dda337d7679de59900d2499ba30c435f04418142e4743abe1a78e7356076ca0345bd131a13933ab19ab23c50c1f30f6ad4dd7af4a043a473774cdba966e2619a56eefbcc43e43a7127386056c3e84643e3fec325c2423f678adec43d074016790f79e522435e056211bce77e70a1f0312a92cb1475776c94cf84416517988798b11699b222889741f435477f254106d8fe93026474edfc77d2bf9d40e36fa576caa142a5f7d1f15cc5e2e755312bda0e9d687684960323df031194e224a9b17b703f4b7bf3932f3f7b90c5a8269736ae89abde5be63a1ccdc511b90976dc8e807b9d3a8f8041e50f684a0fc9373c15aa48436bd087fd71aa4c19411555e5c8981f5613c3c1c9d12839211c63d5bc797ed89cae45c09a55528177b9d120398c0e82339756e0f22b60502dc346c401b752916e00ae065a3b33766ee54d664aaf1f109fc38cf6ae62c2445c28c5371e8e831f0c729e4721f7c7f7ac2f8df77490bc0ecfec5422ff22d14a66321391e0276a578dda5f22934e5bd728fa1e3517f0295a4b094803ee588ffe33f0be05fb30792cef1d9fd110116df1c7d4b416cef99d99a4921316df6669355a60eea28fca14077f0eba05afb7c5d654a9b3e66ba6d0b5acdb9ea6e33d2858306896b718fcad574b04465535b5dce9ea444e45f784eac2fe1443b42d3b1e376f724df3c7dfc43c3a54dfa3b351c57bdc17a4674e55bba81726627157c1ff0c5c9eb4c5a818eb6a6f181063090415efe4b754218af143ab61d8fbd24bed9e26757075f150441273bada40b13e3d60606d2fc3164d62461b2fd88c87e2639430dae934a4622ce1858c8357f5feadfaa61d045be78b18f2f5d6fb3d9118be95437b9c3c61153ff4a2dec58f41a835abd66c899d80ff084b897fcdae04873b0c1d68c1c45623d912b41e044514ccaac3b33d290f86458c940c089201c1987ae5a57253ebd3bac0ae79274b60e24fd648c4984e6736afb365728b33829393356419ac29f940473d26fbca40329683cf2aa558d7d677148206a2887557205d4387fd02ce02340b44d6f214415b26139220d8bccac652b98230eab5f3b4152af32faa094f8ba2436f946d3288e5b66488dfbd20479aa12f0872d2e61cebf704df6c45ae475172421f892c5fed1d961507f0102cd72955cc8786c535530622ac0abb74b52067b789742e065b6f47b6a67649d2de6b97a788fa135944012f2215f42f0121cc47b1d9b6cc135022f8d6de524af8022c5e25e961605d3ddf9110cea7c9519b9ef931541416787282298582bc00bb180afd17ada9cb30cea4f45595b05ae6c8e0f2b29cc2b3753d0200960b39481ef166a001623e7671ebc408823fed1a369919b4c5a89028fb27f70904ee2f7ae0569398649bd8862013235073aa417c8cfa6c55f58d1f9e2d2281d6e60a812d9e601b17241f536a968c79f0a1d68aa2a9de3a78e250a3c81aaace8d5680fff2794ec78567d6d24c75fc6d7281cd2c457ba37a6ac4f600110c1cce211210c1159c77776312002a730bfdf2e5e31eb9b838ebf70606853d7f3ed88184a76ec599428cf0f6c5b6dc844212893d030a3dead68669fe0644f0f8b607dbc671af3a7ac38c3860023d1d805774b7e6e1958db6f99394d237339f876de9accd84f62292e81e7976d1b227668716596e72f5e8df65eb3311f5b7bc68d44022041624eaae9deb013ce406f53bcafb694d95c11477f0dd57a9c6cb6760251da4ee201350523bbac087e4bbfb6cd07eece11106016cd455fcb722b0e7d273a107c6542c9421b43476bf60838cbb2e0536a8117b4cb1c11ab01da19de39c4530108a47b60a5b28ec2f6fb777fb2ea4ba79f9015f4e0d73d71679655eb6788488aa13117ca2f2e96a56c42488a2e9fc0e8b7740dc344cc210bf422219695caaf4842815ad085f95d211bc052589cee689d4e4a58c3a32d94ded7eb77c212679dd22417250754c52cabaa9624fb8a214a04ba051b1fdc135beb138307667d63f04cdd7f7d4deb900deb88fb170d089069f8367b7c1883bdaf3772101a27326cd6f1788e1ef65c680fb4edf85728d5980b5c13ff62f9e007d09a2fb5252589cbe10a2df67b98ae739bcd6bc729749a779d26fa413ace3022ee8f417c24138e353eb9d9625433ec8b52609c6a65a7315bffb718ff2ab86e51c4af1af555cdb176c1c9768f4e033396c6901026699c8896c09d7bdc2a719f79b577625b4ee2e084af25a99c31a10d02ebafc5bb58b718d6d87bca4849735fb0d6032529658fe5a87195d58f4425c861ab7ec7d954e421fe5f8c83d21768c4de7ba68dca38ca98856b91d21273a71afc432cf4c755865bba252488f1124740f52f08ec6169fe29e2e5416dc248cd8e488e7971155b8d33f54ad2a51440a773b3d2c8417b44476dbea9295269179a71589540629847aaae43c31e53c458eb5dc03245107f751303470cb26b323acbddb0604c7e00432593d7e50247d90d56996a78ec64a256f2ce833d1b8c943d84f606bf5c9cf46aa2fbf34dc7658c5add54634cd6ab262f81076f7efbc2284ed9eb9ef4bee54f45a5001ae858f01d74bdd79f39d6b7992f1c363f640c7265212d5a8a2439676408051df1d7c50f8770db1cc32d9d9edb707b31ee0bda4cae329af9bafd66f93b5672963df3a970f52c434f771051c77c7181e557f887a6d150cc2472bfca84d61de16dba0660e7c60b3bc24d29c3be8462752c7d4b5033dd19688ebfcde2b5f6417959f1be8182d168539dccb50b05eb76a9d435f602226e51715f612ed706d67934f35ee250bd1c07fde5f8b367270e625db789491513bc551460b1dede5d6f5a7445e8ff63cdc61448d10c18e4de46686fc4d2207c8d641f3808f6b06efae65f8a61c0dec1f0002a82616e19df2bc63619494ca32f8fd701aa08366cc476834249945eb961dad67ec4a8a2defb7dff63d02cc9b747898e18c63d7636d893110b23d49e8b757f680c20ca67d732b5fd28079a3bf1403b8a410645809f510d5657baaebc27df73ed4f3b4328ed0f99b511c0b1d1c1a8e0345da02079d00036442d21be90e07124077b878ab6fd129c3261046d2060c36a512785a137001242b005fefacb5008d4a01b46b3b6cd69ce900312e7346cea1b96486d695bd0ed076845dab0fe17d1e1583033fae5ef4c7b4249103312fa771cef1a9114e39f79cf2e3e4a71f2b8d078320d40653aef35a6fc16555b40460a9131423f1b7943024749012a243abe6efa1967010539dc57de5038f0050b2bf08ab623a335f7ebf1760f081c38c6116c3ea85943d9470fca0e9a1d944eab02c4e2ee616f1661a4f2055875f531f890a561a44f5eb2e91643a7584ecf1557a3ca0c43022728a255dc04673c7f2dfb03f9d53d32a95c6076cb04a538bf1373075dfc3f1713094932fb05d4594bac9570a25c480629da06925333c92b322468366fa0207ba7e9bd2823e8ff64e20bfd2449322e0c9ef703692bc2ad363f80271d5055067c1e56bef2e8900076d4292e17eeccd93cb60334bd9394e6735e2d106a1fbf57136319d85f5cf92558e17965f55fe27e0c100aa674c8e13f2ba0a50036b973343fcd355ec0117a2043212322e5d10eeb4154e3a6ebe71db4435a04bfb7f8ef9e6c4625c295403f1d6aea6352a4be5a5a519241e2d6cd495815e9a11a1539d73b113e71d5092e7e7e143ac42ab490a7fe4ca0eeda49f23761043253801da6cc5b13d8be1ed0d09c7f123c31ee6e8cf359425d328bb4020de1752d26c47d0063456e68178c4fc5ce1c3d6dec0cc148f3773ef93e7ad857101636dea8fdf660fc1227147ffa8a99f5822ab137dd10e55d423aae8583c1e96d165701562c6ecb129e6a02cb2a3812fd27103f5bd9dfcdfaae3a15c85a197f2bef7e96518bef21f1f661678cee4f7785b353536bffbbb90ada04fb99a6fc477b152cbba9a2c07138ee4d657778400c5fc2647bae6ceb2baa387588780a77b505e61478c194cee3f2e11a834ea8be6e660765d74278f5e7005765e31749ea4266036aa27236b5340b7e6e8f8667dc017a06228f5ab108822303766a2eebcba9f6d71651131bfb2f52301dc1e6856e6834675c1f6c5be8b4fbe7398b52e09c08b6e7795e7d8bee5e0af31e8ccf479b9e940e35387053c264109e4d05aa797dcd32d90aff0ccde6c055bb29a085a21b4cb3640abc542a86f655214d21c10cf77b8f1358f73d9c92c72875712c7d21df6d8301470f8439215d5f0054d1e53a01b63c512f6704ee76af092d1bc99c5a793342df5c3dac1709aa0e04683d4864ac62762810d50eb98d8e880805571eebfab9798870fb213bf5dab77a74f6a8c6985b7f47403b95b2be0392153ab41c5fc9f9ff223cc1f3b1413b33351cb5fd5d468681ac5d3aa09ec4c4c60d00b25d756f9ec23551a4b06bc4db0ba524ffa7df23b76a4c4137d44f552d92152afb253d262c4ce07633aeeb36ed703945b93c3ae21916b61daab7a673118a7e36c595bf0049cc514e39970ff780e9ab3a9c090e69ccf8431024a42e1b0dac7742f493f1e46617fd422730235b62cabe7335fb82621fcded5c83bbf91793aa3465e133db5d1ad195618403aa485e3ae764f992f05f62a4561525ba5cff1632af4a56e39ec465052422fe90686ac245a061188863d0da5f113cdec5386075964a48b3f49d42d8acca0c92319e2ec413ac20e60517713021900ad361e79fccc4ac67badfe2481d1cc53cad8f9cf301c0fe0e7359477baebb786e6492143a9369d85722f98c1ace9cfc3640dbc3a0849c096c9f09d38d82ce46755d4876ea0471c4019e5abf58082c97032fa9050c49353a015e10bb897f19f33888a89b89964bd40f4001721f80873e4a2ca9eb9389cff571431c0260ef1fad6c7106394e8cfca9292d8f4300fccd417978eaa213a0bf7a0f081b9c637661c513d27dce80d5d1f92f00c166fa8cf57476db88d7d9c1c00c3080b7ba8f9fb94d34a62687ee89eb51121cdf426b2b92aa0aa2cd70bfa5f7b34eaf6d09682dbd3d034809a859be95fa4aa8ad825318eaa6320cd5ca5e21ea6424e6188a51bad9b02023f5e648912d2b36c8bb18f775603565166db917a5d1fe725203557adddc5247a5c526d32d697d33661f0b97109cda3e8591b05b6cb9d95cadbe560ac6716d0af6a1c74f47aefd3538f12163b2261336848d8f83fd4a7d6aa9f7328743d69d2c41710f290f63d84c4cd4a80302bd4d4c19f20b54d5326e292f110236cbcabf1ebdc71acf70d964319931d1c393bc153c13202001c622745135660af7f4c8927ed6c26a71758291282ab688f9d7321176a73429c7ce2e6922427bba58377ca2636a6d30c40ebf5d7a270c666b66802f0155949e28f25a4d585848b2f03ce95f531524634463d68518d6aeeeda95d5883e4cb904a3de79713b46769439f292c1106dba57411cea9d7d0f86ffa14928ed7cbf733cf6ee0331654cd70013bdb4da699000b8b0d235a4601d8694577ad0f11d8a17f966cfb7fe6f1343710c144fc43c616811486f3caa0b189d12749889df1cc91d9cd4ad4038280249c416a7b0756b4bd1f711bea9ad4c6dee7e6cca730776645542f7b2ef8e5ea23a472678936336137dbe6981f0db72cbe9419cbfa5f271424e7afcf36d1e3a9faa907b9e782b2775b880b7cd8e0873862fd337510d61472eb8e42a1967437f9cf9c9d65f5fd453be1a2607253aa33058ed76c399e7e952f52757a9a3a9bf23fb001bd4c432131a0427f56c34696c675d15d32bf07fe67ce21ccb87b67df668d94a0c251ecf6b76fe6e408e0d82e1744410b272296ccc7be698f1a8668c647e1e5d457e7591862b7fb6d5a1408b755f11b7e0e757d772720a142bf26427e34a37e87a5fd9cc2344b765b47145dace1fd312b4402744200a76ccff6cae86db446d646142731c471ae34bafc99b92f003dc9c309cc1a43367176436234c0567530f0e575d58b2dd19699e7cffa9f6341bec82f6969ca08075cdc3ac7d56f1e3773d673be1ede02560dbc4efc19fad620ba2d52c22db67d5508fcd90940660c37746fac3eecee9f60ba26944274e40297a25b71f2b1d06522b92eb70bb70b9663a7898835b168cc24721df3bbb5402604e5dea91b1bf68a64bb210a21d86c4645b6a6b732bdb86a576d4fc580ba815dc25eca66ce4776c7f62c3ebda3091977024a94bf19b2e1fe4590df55edab8ae42056fdae27f33f8cd28162a12399f29f73c8c34b4f30677540b8cc6f26dcb591a712edfc2b6b5f0f15e1819b059321df836ed9b65ec63360b0979290b92f9a0a344ef5ef44098bf7865bda9f4dfd752c257c0295a67bf06d4631434cf21037ca777766c69d329b79e2e22002fb9422c31269a4baedd04f5fc0933582c64ef566141ff8397951610d276c8898abf358ea51802a9bb4f2a857c6c988d602f74c5c1339feeb8c5c3c63d77b1ec13898922800846db87948ec85551b54ceca84f451a315ce171a6cff8487737c2915d995fc957424187d95c801f41144f5bc270d514713e718c00f0f4c83795ad0910b9e7797c22fdcd818bcffc4eeaf4a9f9b894791513385236602ff32ccd93f2ec54bea6017fc2abab26d9d54838028ad15c30291a46c1236de9bba81f105e0d55324b2a70b7168090e59e000e35b79feee31ef3107dc8dafe8c0dab39a43ed5682b4d962ef8ba1a956bd8283ed347b29ae55843393288ee24bec6840a7db3ec304279cd21c4a04e710197353eb8c472d537d17518a87b822195f90e59f305bca421b6413920eb9c1d7c99463a24179e7175114604a0d8d0e2bdf1c241143f4d9f9d495951864c5912ceeb712383ca623c5b7707571f458ee4bb0b7b5033d79fbb9ec307234af6f7081818132ffc99a778133a311d56dc6e3db2f2477cf64a65e9fc94407994db1ef9c0ba36184e21a4c755593f3b8152a5c555fe5f3929f730347edcb17cf0832d8d4cd90f66ff834954fb97826c32edae17535c13559cff60bd6403060c75e13de69e6d2d3bf004aa164e056468f21aa8bda70f984b26fc1e689a8a7b3d1f8539a47f2f3860ce81f98c9449d459784a623da85f044e9f47ac6e40fd036530a3cd530ff9475e5d751f91a0a92d2b37b6a2d8eb97d702f41bccc734b7c71722cd305e97ea4354efc8bd9654d33b1adaf83775b20ccd7ce2adb9fb030c132be6203df54f84ac5bf1502e6b9b6d3d1b1cf412e5a6f7c277778610f4dfe0eb54c42b6556a8692a560c90c900955fb87fd90fd383ba34911dd51cc02bb2d33958dd7ed89d8547876211a50a73a9eacb33c44c44afaeaa0a30d46ab1e46cc0b129aeee3754d32b5c21180428468aa3a56815b6e2a6a9908d231f75b30631550e1c8c0c22e79ff75144b1417db60a155165dc726b6afed4e638f75f3887fa8d7c5c539780ec02d3f316fda289f3e3eddf0600434dab6b1b33788241e5e230fe1960d196f94e8b475530749ba28c642a4b0981c5c30ae5247b5cb644670b7d9281164cf5159666a9c70cf322f97716b87125154b2656d2220a2cfe358d6eeafbf457e85fcc4a6172ff090c7e746bca4dfb3bf9007e8499247b62c20cd64c2b95b3779d0e3ece3a3d7140d6790d5857a2be5ca7a41891287dd571833adffe30d83e69bcfc127837330a1c3150e697f1b0b43615cba48da5a5b3234a14f962144392578bf91bb62b0ed021786dedfe7bce20378981588159ff9a6f43287f5dc4733e5147709f2192ad4d103613bc43657688700bb18f59b0d63b512eff171731dbe029275bf43b20dc943158644ed9db7130189088215ae9e8ba706e416c8903602f4b000520150e7a612de2a2feb3779e8a43d0fea8b9fd3b130eea9a31218ff5d209cbfc2528afe5f50b17b088b815f9070b344f45fa478ab23bf11200a8ac82bd12cff5e87b7862944bf5b3a34cb35bf81ba13ded3fafd8c1404aea19c1e69eb76cf475870be182842dbbfaeefa2efeee6a1ae449ea6ffdc10933a7318e49d2646d94f0a6c22b12c523c11b83b4e9c6124bfbaedbcae8a2db09b57e3f88b31277166b7f99c1a8d4c02c559253757f890d6d6c1a6d6409667a0dec628855aeb1282b6e65e1979f2b0b3091f88aaab199753e8cac1d99a4120d03fb7329bab494820646801c1b945bf2400f3dd411dbd05b52ee4aca01938f865b59dd921354c6e4257b9164317c59a930badc8a673efc2834cf7ba7ff5e839a4afac0c3b7c9dfeb48a75169b694d52a6ca19947b7051f1d5b4ba21d2f921b7b02d350c843690d98253a6ea526f4d27c40ef63d98756f47938d1fc316f6a8e3d33b9584a4a462ba42aa84a36486ee684292134006394f3c4298f4533a149d1e7553272e04c1cc6863cbeaf2fa12ac2a71579084e358ed99e53e48b44ff07fc1f79328b16fb06380d59aec322442265543262e1e6addfe31b58d48c69908187354431572d49275de440fcf487cbb65a307e12191c87d725a431526a0225f40db26c6f3aff8e6780b77272bffdc27d3e8f4b012c0d1630b9e976995a81a2f108073cac878cff5e94036e62a9151728e1b46ffa4d25211ac89c4a5289f60dfe158168473e91fa3570556bcf844b795c2eb249a7129c3e2e28561c15beaf1775ef934c28ac5f6773aea4760845ae6983dd117fc4c0991487bdc5706b52f00cdf921f401797a1098d19bc076f2637e87aec993752cf23ca76582c1bf7d0f7b20b638d2b114589015196ee47e0a95163e7ea141dcc1f6b7591d3a73e8c8e90345544ac394620c9a232d1ed56febc7fe765b0407b76dac15926adab1e4753b1a281922a4e6ec628c1efb3c0693a954d39e3d36066949134651819880de72e3b2ecf0dbc66f70629b01243766dcd4f9bcf7dee1e4185b3b64b611e3b6ddb9f15d3e773b400f9c3036d9fa280501bc798c97db9902b49df38cdf9e1ac2f6d0dfbeb3497f71313827453b406c04befdb0b67bd3b2063b56db8a23f89a7649e9549f346d5832ed96c1d7c8782452d572444f12f6ed56683fff5f0387c84285bb748767b7cb023e357b071a9110a2ee6a7e69ea2348e3e8ac131e2db057329631d4d0b8c6d0e3ae43753f6ee4b353bd2e2253bebcd186037861e7f82e17e6353252998e94c6978c2e96e9fb901021238ffd552691e88725425ad1cf34adc78696941ce49905954d29663bcb5857a2b897f3d09494eb63919371d8cc711425cd33b203e27204208f885cc092656e150e128c851cd967a1faedeb3ac8643a066dfd41e62741c9c0aa24726e7840a0343e00326e5bdac65587954269665689864e713ed6a2aafad56a7eda6d48a710f5ea039098a96961a33923a2536bdcc8f39503e30670892923156cf3dcf0690ce169b7bc9608edc0451f9bafb64d4e313747ddf834c40a7560e5927cb38a6b5d322f7c42dc76a0f38733adf6e4e962d5c724536aed9f37e2a0bdb44464957c307518d1d6d10b64b0a6ea70f1261390777797bc20b8ff906d17512c65d50aa7d3402e7bfc078c04cbb70bee37ffc6e74ba1dbdbfc51ace974a784cf7217ca95b182444157a7a47feb92e069bd11586d406797f856b1547e5cb7e09392bc82b3fc663ca5ab859fa3fd544870cdf95979f0078f0a7fd23ef03dd5eb7048ff22d0efc38d46d4a2b1bad7f3faf278e3b0636e769c84c287cbe5c8b3883a5ef0030378e6a0817c12955d55d4328be73c874a257131306d51f19808630077d513f62808f18b5f832ee74bd1463ab6ca57cd054ac25fd0313370dae83776f6fcf2dd96359564e8b137c70689e55f272c9852502014d2fd3bda093a7f5638456a21b72bdc346134eca5c67299565a269297f77099c71711c5dad20fae9596a50ff39f446375036109873cd5db45897dcbe032e8a2479ba31aa56601625186571f217295b705bce2649775defc1322e4ae9bbc419d421d47a7f3c641e104cca4f27c1b0337d3a939c2eab2b642857f3dc84aaffe1dc7e4714eba3dbadbf4f15fd40ad1782e262c8242727eb29f67051282f41a2bb4b188c568563b725a041a4826ad2dc85c074c0e672230903696ff5a40afc22ff0d5a4fd7df3e0281555d7d1934926b37b328185bff76d190dd6fbff56d131ba31e5c90c48304a581713e6eea58103129fb2d5733147efe832b41fa6ffef7ef68781fc76efc594c517d69ebc1e4bce8eda06907bf44187060a112f1c50a3682794e28627848c22ca2e1064a5597409717d50c88d136e691bc77608932df9423e3b3338526c6cbf834351a137c1a389017a534ffce0da47d9d35274df6eeb94b093a0b8594cefd75351f440851d414a23ed05fd81393f2f058b123a51281feba84311bb826be24e5a3a934ef519d2cc8208573c74de13776471b2de3aaa287b71dfe7cdf46a2847f54867bbdc7e042f5ddeb7b72f23af89a976e0042eb07904531eb0bafe6f4f03cf60c72c6667aae67d83705be2614c5e205e248a312fd7aec8b041ed350852f5e12e7049d558c480b488043b79862cbcac2a022982aef40f444f346a79a2ea1059b0743e0f8591ae3c7fa2d3130b993d419467c3a1a11a336459a24f05e953a20def4426fb65fc8a58b1358f90d04e060c5c571d2b1d2df9baa98256d81d67ace3ff30fdb03fd7487f0de3b68db9890f3eb593b1e393426618d263900edfba338ae161ed3970d0547dc700dfd0213f2a7621b395d38564ebcb7d9446f2abba1801d63473a869b7507a17d4124b60f810b51bf24ea91eb185bb86b2793c4457b358b477441fcea64c975b1685461687b65a3ff1b761e988981c87c3632df6bb3de40b07724340358a005f8017fb2b1b92bc13b5741d788d13165e2476a8c158cb8c38800bc7d4932e661634e42ff99728e376301e528ba16386a5d2e222b8a926faf1324176f69bbafbd0e02659edc6f57fa421c4de43d1617368022174de2429b726e0c19a8b791aa5d085276ef6d2e49321474591be0b0c606851a79f9c5352400cf703cc874da44c2c8630469d658085c1a5814ff32331eba696b6f91e488b384552cbd92da6ff683e95e632696d9866c2d4553bcd3a41560b909d2694e3f634120464531e71ac865af2011b8ba6fdb7a7f63dd5a236d4b39183f9dc945aee841be3402ad314c4f68000774658ced46b6504cc37373b1d6f9dd45d64ff173d548421cd7a3aefd628aa7636cec3148a304701d0398480ecfb2ba1d3e2433a7b16f5c2e13492eeff76bd7066edf6435237e961b396ee87f91be4612239c0aa4233e76775f3428ca0ab32572e7a55dcb88d4107f070a9e49d5b59b7e9c41c82751f6647d3f927f2a9e42277d89e9df153fdca55f4b6bcfff42469d23fcd8dc3077c189625a00baf3af2a9114c7d35516e91e8c796f198b64faa45a7df57e1108e312fb41ad67c1622bdb70412d9bca46995be31228c0b885b44e9631e71f1476c466235561555eaa7e8ffb4f76e4cc1385ae6d55be40afebc06285040af21cf20709f5388ed09457d3e0b875d4af8431441d40153d4f5aa78cffae5c748cbab615bce225a03b588a84ee48122ab40f12e32353134ff9d0a99c633b72810e34a06591756e6f556ff73b496e2b97fece2223c2790711c625b9c6e3456d67e24fa936e0676b0de32eca03e1ca4ab765c42d4645930bf57524eacefd8d1cb65bedc01984f90d2e25547c193f025f28bed33a98ca8b20b0bb6153fbaec60fabeeeb580bf6ce3aa12e00df0fe90e34887cee722e374a7fe70e0f5e22a61123ec64d22b53a95330f098dcc6cb6a2f3853d2248762c7c172a46c3f1a052d5d041cddcb73bb398821d6427d6aa47b4c51c2b84e0a356679245da0771895c7d53dc4281c57ca5c0c735c465ea5452b171e5977a3a788b62300769e73c717ea69523e1b1b6350b4123f2055d2455efa01667d0c20667fd04e40bddd5f4c93403c39cf8152ebb5885152f51e66c109c4892b80bc0fc008227d6a8e4ef72839780d341778b4c0616e047826c79132d15cd522f8cb12e08f8380330a5d361bd5a8be626b68deac856f7d7aba654bc01482cc6abd9562f4c608cd307a0b62c6c47d5753ecf0758b0a83ed7892cc0db4277b417c3d600f10f3774c4f67e5b9f6dff95a6fc92d2f12633149407d249c0605e7f6013519fcda7298b975a4262324caf69875d8821306b3d1e76f07a97e250268104a65b0a365dbc8b97fcb6ff915a9200f360af17fc1960343271a197deffccd1c6aef77703b386d535e2778955975cec93474f3a3a69a0aff279d2c24dcbe87d7629dbcd92df98c8a5d8c391ec187611c171c4d84f6d6892f1b78499e0b49769f5050f8bcb8f59c3b0081ffcd2cd63e5102b6c306f3f331c7138dbda4432b96a60327908e715a9bdd7fb3d55a4a23ebc669a93bb1f1b121fc00038682fb81b64821f67adc3add40ff1f4c1035d377e76274982a9943f3b4ea029432abf72c06a56f4e0ba165050ac85cb7f8e7ec20f59c7bd9bffc15f34ce503fb429a233be4797cbb42d2d66666d7263cc27f51074035377d0da8d4487f826bfc74dfabe9e87372b8371d764605691d5412b3a95892615a4f67d2a48382007731dd92360e99d12705167caa00d52c1c785e963ca485fc796b5556660054877ee69621b7289dfe54e2358438110e634f7467fffb9c1ccb4a6887ba978dcdf14a1fe63d59662974211d38bc87e56a7045b01f5905239d8536ef7de1333d8373368a6678a68f98e440f899f8f7bb07cf7e610748e30ba75e653b7aefb41de92a173c1924ed194c2501e1313aa48b7c7b6f36f745884f003439d81efe961fae321d3defcd2ad44368141db93ac31efc0e49f65f7e25a4a1c83ae5ea16fa4e8ee2706357e17b49a6430d70ce59f6c407a72cd3b85f40cff28765289346e92c6dc5539cab5fc61b92ff645c736a8c044100146dbd31f911dcbf7130845c2313d2c62294ad5a19a7e0104048041ba377059e69945a57e99fbf6540ebeef69fef22772ec67307a819189372540ebee9079c172a1a0c704785237d53ee65d146158eae6a7d4ade03fdf64f7ac7e49590007b3878052084e2b230a9170ea4444cb9b2a23a9fab924341ecd310a414f29647f2ac72d3a6b4c9ed6ee253f5f512a23b9c34787830d053f18345194c7386c622405e0151b77812fdd94d3038c0c7c80189b4071f86f0883dff9c509f64838617e3cf345414f4f2144676601e60754eb4f1e529278da79b4fd5c451e5d74e9da32cb7530f6c8a126a3e0d65fd51a59e75ea04528059aea48b6b832927baf2c20826420eaa225d217cf894167f419dfd2f26dc30235ee2b682ed387a104b144fb4b4a2280e9747974826cf783a68db33f77ea601dec29eaa438c8c69a528edcf1cbb9e341c39116721bb17028e6a7b1912058372f3162e76534c6c7d0addf11f38005b7e3659b0cf70f1dd66275ee426ef8da85fa57bc233e9148730ce9371feac373a71f203b09449ad1d0139c750f468458e687bae8543c2d76a4a1e1efe237f214611db8cca1323ecea5299c36cb1657c9877060884feb1f7af199965b368ab4080590f61d0f410a18b669ad8dd85441cb05d7b79d7775abb3d2cc51b547760ad0125bd394038b37277637e1e65d81a29d57bb555ed316909ff52db5cd00bb2ebfa14d7b7c90adc78aa07fd8b05c3a99bed65b9273df44030434d3bed1310428315681979016260ca9f3c5419d00bf03c03409195ae7551fa2c07fc16d0ee6499c57f5f9123dc62af3a7b39865fd9a0c7a377f2547fadd4a0171e4efa6749fab1d811df4f6a8260e0a21f5b323cca9a5267338ca603efe5e8554186fa7098b70f7f7851b14710ceda282e0960ad5e9cb37c059434d6a1b4c8f70907d7049a90f5986ab3b41c4c9a77014e822b197ac4085a2c7e6b2bece5212d1958afe95a213c410107e8efae3037601ccd77e0765183bb028328e704de7baf2ce236f4eb8da62c44ea1874dc19abfc4acb481e6e41b6c825951321b5dbb9207d68e33206bd8a7174a4246069f7981b2f253139965c41eb6700e57f5e371ddf5cc70eba0321fdf8402a5536e3a9a0d202f8f190aa808921260834fa28f4ecc3794503a1e9dd180e27c8073f4e8830ee5eb88266458d34db3e146bf4aa07dfca3c92bc29ad42bce020e3687188c96faf28b9631e88acf6f9112763fd490db82f18c2fc4334f9bfe37562866224c353757de4e29c9402ad16774ac42a5a46d6d22ac7a63a33d484d0058156dada6c2bb12bee7f642b1c9a1515a474380b0e9577237d097a2ace9a0d7330791c6aa47e691735353c033a435f4ccd0ae3a5b9843f001c51bf5f7f4b7b687f8b08a37795fb318e9a325b6c365e67ec3cb41dda6e5a4449946eea57a98439887bdb2d00b5b129d568fd420472947f0f1b505044404d31b914f8c7782bcf7b548555a09289d556e4498eadeffc30567f6670acb1a07c0fb7af86a800352f05682ef0036235b014a63777da04e23b5459d158018ae0610ca51364d4b9c83f4b516d637538dfcc3559d2d58258cc364e61f1aaf2dfcb8a2a2a2d7091671815010c5b5532adffce39eee7619aafa26240bdd376fc7703a047559607a2aeceac1575cb45c59e34891602121473a7a58404d9ae918c3876c7446b8937f7af3d3e40e0e2eebf7ac52373abe886d1704f7c156d76ced7937e3a5457086b1b6486be307a085fc7ee48312fa89d1935a9800a5ee2bc117d197963510821e9cbc1389d794862d417cd8c623ec8e0f5398c46a127b8059e1a0c98e207b2ff12b8530d6e6fe1b0ba0691632154f0361a8befe9923f426ae50c7229972496df5b78da97dd4db1a336bf437029437f5ab089c4027f0b8297bcdb128f507f886b48bb3fc43a1b71709ef9dee984323cef5a02fb125775516b19eb69960970e1d8726b24bdb72a40c6b190f96c0c6eb8b1c1a1e8a05b2168c518bf6c6504014be468876e084a6ece7fd4a1f3d8cf7da5906e217182b41d7afa669fa5197a253f50bbebfb7b005067536f6875fc15406b699b022bda8c32998501696eea134c06af63a21ce48129911e88c4f11d927610a6353b7e78f9633b767b7e8396417d3f226d2460b75d79e971710d52c74049187779151f4ecb72b700de935f00ad269ffafbec75482838fb51acf3f913ee02493b99f4e3d4a20ec22507a2166d4f372b9dcb54a45dd276d8373b9fb5fe9c62c9543e07b314731f48fa36ba26cfe245c045e41107ca981963eb5ce6fead6f345f71a97e1769793bd8c0d908d8aab2347f410a17505f561a68ec8752e9ba4a648b02189878605c29dc04768646f8c219241406e0d0dab60e9dfc2526faa6a7552c511bca82a768211434eba7274994098e7627db7d019262c546fb49352b2e3f8e6e4d0d541acd7029332ebbfa039e2f3c6b6d60e0ff5d71f4347f55c62f4a429f8e59eb24aafb7183ce75687b537f4e0d5ba865ed51484999052b16d6d85a3ae99cc70d3d150063cfcffc352a1255133c93327c15a4ab176134fd6f346e4d5b29b052171b8d8b215d0c34bd4d7e737850e8ad95f429b07148df6e72126f973d1d575edb646d2f51f8efdff79011361d3f7be0b43f479900ff1f9f050401cb340349dbd81c64e457023866f854a08c6f36af28367a57da3eed0ddf789176861572e880cb2e4b97240a854042255abd325d1b7241021c8e0990b83029c808363e27c389a26af07f40c9362f353f24d86ebca7d4189651d540975eaaa76665025d96bc3db6ae910e707a2c317f4b3639045c8758b5ded75301a73466fc02432f1d9cd0fd089e2b4624e48b844cbb9c893198af02edbeb73c6d103e0f7a2a116e425d4fe37b3930652fbecb2eacacf8b94343679cacbebda052f294e622c43fb00afbc6f06cb80ef83615322ff2888fc11785ccbc92ae1b0061516f9231e8770b7efa1e7c2019f7164702685f353d906a67992f2790a7f76e204a998c6b3e5b584a559e3dfd2eaf6e349c372b7b90f9c97f69ecc984b1460b0e8d9c69b28381855dc1aa8adcce679517c2f2f56fcbf39050d10d025191d4990d942f8bca1921b81d4276c3c57c5ab12f83e0c2be519b427ed4467c6f7b28106a43986ffdf360305f3bd8b242b755cc2bc59a17788a937461012fbd34a1c6684775575b1390fc6016aba0d8ca54cf5d5c194c899a5b2eed66047a5b4d0f266c4ca0a898b0b15eeb3efb2dcde9baaa0d308e1a1b543cceec456af40f15a013072e0d256afd670e0e459fb46a760328de5278743f0bf5e8f02e43adb943b12a620e34fcdc953f10c864d79e0b0fc79cb66d2c9d71eaadeddc24f90a51f2e2ae6507f52b90c14a91724204a2710ca708034303aa3de5b020da70dc99d6e8307e240471c73200635ded0c1321a6060b6c312463d9d79c9821b674939cbbd336aa4f12c4830e4673fbf365106c4cc49bd1b81a378a108e40b35436241b9113f6fa3c34a9204c823e1e3132d2c10299a1ea2223d184ea0955ef0b54e69351fed9263758a7ed38246a1fec7c71d1650d1027342950f3cc34352aa736137b9e051043670654d53661f2038842642a48b475eae10cab25af00da3d397d4ad9508b50884a1a2227275dd6c6306d71420e46e12ad25e233028659d4936425bbf39e7f768e958338ba09d12682103680c717c94c3404bd402521a9cb64a318b3be551a17685136271f4869dcdac74aed4036e2845521d018513f416cfbb7b426f284e4d73a40d79a222f94838160557dd6cc7b2db092e8e0252278a7a296db678452da55d2739d0090979dca72a38700e9e3862f4c965990623af3933680c336fbb300d179f07b73297bce4820b18d81a96981962d03eb0dfc7ab81d67363a1fd456debfa2a79525a7dd0a3f37f1cefc328e0622f0c2e9f7ce0edde4a8820c0345ee2c8790422ef1d45bfe4009b5c5fe3bdbdae93012e0974ce6e1a3d9a072fa27028ad9e1a74c006cf7f75cb13601f7cb33df7ba312b332feb3d47733c4e833ded8770c30a3fc948fda7c481b92a79d072690e2800737245f57eb2dd2d4c357efd4c47642e1e780c8b504376984e77c1c57600d33f543d61f9b6b888f214e54e22bc81f98e22016e1ee54caf481721bcf80ee748b40842aef11a9488990fe789940bac23327050e7776ff124a171e81e6b036f1cd26366e601d015574876082dcbd54354c4451297a13040dc051cf280cd89e3695f3549ce5a39dd9da508a000771ff076b43b1d4e0d27855ddc76e1e5c39525d25a61cd958c74f98b6751c3556ec09a19d369ccf6936ba3c85013f2e319c3613a2d33a715ed850229356de7bc6430ef1cdc06ba2dca2e3feebe6a1b607dea8e5b1077283a66b006596c5ec225525f2c80022907137c8e045b7348a87d945d53b520423424f84b4ad4001266d692e564a1c2655e53f2a1d89e7c3339e1f8763bf0f47646952b0887b7df23138f272dc88de307ba2fbaa6a7c21b6a573aec9623762857cb092bf9cccbed5a8b314a983956033ac6ff306aab9b1e08b19660c2a37547639a2f9e409d15c51042601b767782300136b25b23a79302672833aa632baffd0178ad3169f444d7503b20ac0bb6948033c862f855d16b0a2c330568d1c0283c6c9ee60236af38f20e26f4a238bff1e1434d22d57258ac2d1c48a163065256ef111cc0912f6db67c7170ea30dcc8d26c41dbda7a62ac36eb0f461911f22a1343300690547f8211b1029f46026d7c5053743521e12cd151be19d582e854a589477c2f60d7387eecbe137582ff0cc7a773686c85264cf570014cd33a5405fa05a7288e7e3e1b791af6479d3148b1ad4ead7cf651e71f63fb86616323664397b9196fdcd67e486858ef788491503bd7af6120182e04b412397477fa6046aa4b4c50564ab78d84ccf6e54e4060a2f44bc2384dc3465bc6becd8114b40abd3760663b2f1e587970c31a132149b673b1967f2b3727f96c91a8161518c85e303dc75212252472d6f349c88922a682f08bbfcc5434df851066faaa8707bd9ec7deb5ae1764c8988d24a937ee5e6f49eb262689586c4d9be2b39d86e07aebceb0e79068d85467ab3dd9c0d07458694e094f419f1f4608cbd4af6e35fe42b81339da8706ce0771968dd2c7322d1df1c5e41470d04475eef6dfc49429e663ab8092d3094edf6e1e10c0d82cf10e2a624960cce6ed4d7657aeec90260a7248b0297c48c500265ee675f65f106b4820050925dd89b24942331c2bb73b709528840888566e56ef6270bfe670f6ed663c09f374e31a6a410120c5851ed32166741f3123f81d0d4d5b0778b2b76645c645b6eeaf47fbb10d18c88736a8d1d08e4e59729027105e5a15be2f235d47756425004069e5721e792ec2c4405bbc09d335eb645ef4b59e34569599062bd46b5f3dec5ca99167a8dc3afa61664c1efe5937fea7b7542ba624600c1251d8174d595565036f606041ce4277db04acc717c76a40cf2e2db30b1145c8b779aba9fcdd54f7ef18e471062944da75cc07abd12822dbbb99471e2ba1580ed5d7e84486147b024f4a27001c0746f973543e3f0a9966df9c8565962473226f8e2963d0beff5f75b8f9a479fedd414bacb054299ce61891c2f758fe501a25c36db871f2a3753974f4b3f8033edf1f41bce6168ce1060b7642d30dc7a760392de0981849b0cb11de1538e1af21e3521c27e8bd96fb661e9853034f2f988d346b8634dc5a382a70f2d53976a8245b545f812aef8f1ecf2847b6b09cb41a4075a36c4d3555c0ac1b03875194cb22394352a7514e3d823c75555c2311e9c624296b3c2bc429da0061d50eed07cc3b5c237e6d4a0cc9f2381fcf27744e1b42fa37ad7b00074efd6c2ba9b37a2e9534a86eb8478e571131f35d8bb40afe994db9160a245b513b55d47ffee19bea88f57504d0e295d4b3a226226f5d7d9af36e925a069cdb8e26a8cc0ee4f1a7d06af72a7fd5f131831c713553b5821c2228c5736c73f6e3eb1ae7dd27ea78475ab509737734fd70e49f15766b6787d9a48ba9e55666144360da159911edf6926b476ff6400a6baad9c9a8f4766d4f84930e399b6c5f9df5a1c6129c1d645ff8a8820b23287d19aef754bf1f4221ccce2a9a2d1f256d00f25685aa8508317389954fb40c788d53ea0b755be71dbe3881f94472833640d21683fe7aae2d94a5c6e1358af22bd9469d474214b03618efeb42d380b25c0a3f2bdd35708812a5bd9f1a22c853482cac20fdd53cf42add2093f17194a615a9dd158b492f9f68bf8aa2857496144e635ce8d89f4b78324b00ba55037a84389b4a8ebb4c370104f247c0b56690497334e28e15abcd750b5747404974496443f996de40db30652b5ae4e6578bc3cc244b2e8ae50899e431d5821193784b793bac03bbcfb1099804849d453819e27f1a1464fe46be7e3b6d7a106a581ed1b30f96545478f7038d54c78f626b54ab1848022ba7dc49c0fa2bc2d7aa5e61c01a555154a3c48d07220f29557fd0e330e626d74daa0cd5283a554f80b620582ef2058bf2e500f7ab450a4eb6b3f44029470ebfd18814160d7f27e5b28af2affd4958478544f04ae62e7d93b45a8cdb2e9678c9c56187a6deef66720d1b4520535b506d5aacbbe457c45bfffa7e9e4c0cb4144803ba745fd0fe2674ab7e3ccae95d1911abf936db515d1f7642785fa3714c65a7f903e266190e625c864639d8879016649a5007f914106661d9fe1c579f83035f18e3c4ec3f80099d9793619796f711b262c23dc2545f6eea9c4340182aba430242d9bfa3cc295c1c596b6281aecf08d10f69f5dd45400a478a52767c3fde71dd4f64da70b7b419c79aa7e3403e0f3ace3b112894af204202cf062e1e9fd9247cf985314af497773c7c448813dcb4087b18a8402db6dd2d3021dc3fbee338668c3497b847220f26a49aec176b982f21830ea9374719523b1c5802281758b857bb21ebb88c92b062d730636c363a3d690d443c32729051721fa32b60dbc8c14be295d38d84e7ad0ea2b9a0e9491afa556a94caa36a14352b308629d041eec15f0e51b134f235120b0fb42bd3cfc44404562a34906d9b490a3500a2024222324df840dbf768c663605a2a4ee0bff7046bbddad894dcad32579cbb69f3d8154d311886247116b3641d8d95e997e92aca2c050d4567499e715a74325cac5c6f884322e206b9e4897e0976bb0646c49a6d3979690619a54b8479ec361bb7efef86031d2d74062410477b71c40e7168d5690ea19626c576a2e9285d8ca41ba535f9654209299625671569df757595a6091d15ce0d1659c9c08c40169da8976b2cd659bf74b472feff3407547018fed3ac7d67aabae8b24c532e036a9680774082020bb43028ceab54e83226f052c62674eb6ae1be124ebbdbf211a4b708687fbcc62972234aa384afbc56d1b58b5c0168dd2182ea97826fb34f6fddc68e9da3ae4d1cb77b54022a48e6707b682071674e120b6bd6196bdbbb46258d4580b5c2a6067f03a8a48514daf6352ff7f8f86d21f772b4820879c7b9f703342e8f70c99b332b63a07410f398206fdfe43ce3c24db8513ef3013f9e8cb7436057ae19b479946c3c32a4f16af79a1b639859abf5dac619753dadbc9c72ca2916cf4f6416f944598857e10a0d554445a71922faccf4b17b6e6a700ed8aff751fece083947fe315cdeb2249df8bb0b3481f3158350cf5d22e22c095476c97f374f330d3f4d0afe5a4b7ed87e184f742976a48ce59a7401332c2b571af4dce51433ec4ec5adcce7740f90c82e0821f5305fcc35e4a99b2e3dcabfebde4d1c992864ecb1049d39d74274fe0cd5c3cfc409cad9853fee3542321b8c8f6db7c5c12ad60f6c0b2c0531250b0da75758fbfe6583f41474965a3a2fa97e1f2ac844f9513de1abd33ccf363b589fb6042266751f72d60f5326c93f7b2bc29e5119f9a24ff807e589b0d4d6532a4fcc36103e52100cc1480dca5ad5062127a97a31e4215efe66fd2a4bfecf610144d72902f79568eb51b9a74f6a7b52dcebaad77d51840f8fd4cc88c383a40df3e60c8683ac0329934065829ec9ae67e3500637a8a6df51361965d1d5f35a6f0b3966c988fe2a77efd369beb707ad3a2665a6737d6c644bf8454263ee2a017a642a889b9d1a211bd970d883ef62f62f6c2af73a99ceec62d51ac2ce408d663a2e10a67380ed624087c14dee45e73b69b2ec093bcd391e693e256fb8ddef5c66d713b000086ab05a8c38c05a1bdaa71220a6e3ac7cd5920bf33cb1a65d1a1d761fb4c558973b721c629c37fa06867a637e5d97360cb0ea01805b0dbae3a84859563679cfa000aa5be800b6206267fa7848eadb444dab7d31603826c3d148c70be490a3cf0daac37d4dc3e2f398f49b17619403cd848ca65548b890982619752fc8c204f30bc98661265d91118e71ca55d43e24654b958f71c907e93ac4a35c33b24cd4291057f369f25e0b1ee2471c4783e66c643ddb7a5c53752b04e04b9d35b9c45f419da0457cb6448c13758e710f2431b8dd36f7f571c7317b8682f7493d04bf9be117255523d3165107b098193c051be0af93bffe4eb9d17a6c25bff9527135f0490c700802246a4eb2b703dd2ee8c1756227072e443eb36416603eb714e4016a855730cf7524e3d3fe0db10649f34b54e6345b7a799ccbf5a7f40e5d19b33996b96e638548f2ff3e433330360f4651dceb162f1f3f7ce4ea8b3b28801486bab14747bfb8703bf428cb6541526b96e561a33271031d59d534524d11833780d5418681103779996cb1210753d939927ff555c6dde213b894a01df40bbe4b87a0b3c47c2613591ddb0ac5c0e11653af6ee4cd07d9fd5eb8553e15b0546d7251995657f86149486db0c7142ce3ac2a7f4dcc62ef8b52525eabf3d817015771b783e8a6c792b44edc649fa9ed16cd2b58ec6c01de2f9e22eca8b5a35422606ef9c7a25705f99d10021b878aeba96446dec7812b95559318220bb91edc10fa02c50eb1267376265d505b00c3a814376a0dfb811ca38c045d358a7910b3bbed111689c6dcf73ed3675edc23c6ab309036bedbef1e7121a150ecf10e1603ea556c911152e0b1a58c4c3217413897c14d64e54fad2733315f0c188a3717b31595737a48cb6622507b62693ced5adf69b9523e7231b33c2d385f4fb937d8918a6647534a40b00918bd3636ef6f90e046147e4389d840e4e136597ed4e897e75d2f222a5951d55695a4264c0416d36237bf085a46e3e49d58d47213e7323430264f6d2092ba3998ead4521b4d731607f644496c0fc35f85b57a2e7b203d919c900972ab7b4b2f837a8f441b35ffebccea7a09d5845fc016510c69e873418853bc4a75bbfe3d7cbd8b3219a0077abbb566fa659c47bd1830495b0288b5470f3907f05e1576d0325302b45f4986dff129ae4b4e6ea6239a7a62a6055a40f4084422e059072759c06a38ed66935d61b7284d2c2697075e6d1caa1c76e32a726c09435b26a585e902558be4364743d2283ca1d25793e461b37eb28a4e43cfdd40c5815d29b9875dae372f7c21ed9426d8d7f33a7afccafeeea40ea5581038bf86ada47038a1fc6fb44424206397c03915744e89360a5843fa826f8538d24a419011fd316efaa1c7247b7ac920159da91c2a6f1b3d527783ab9e894a1082a7868e65b175657135e52d799a45708e220e1f19a262429a811e777e23f27b152759dcfea77963d7bb540b75113b49331339c1986a29240bc9f5e492fee64cbc95e6aebe978e369c72485d4d57cc554297bb9516cf1d56ff35d135b295d02aa2a14edf2a8d8a36a3705d0ab2877161974a272ab97b63127890acf469c4e932be8d4453f713d54af47bc879d3d7f7773c906097915a8f1efc9e98661e693267a670b3dbbde1957c8b23c8c14c16c05078dc47269cae5f18e29da7a78591d376b79ee0bc742ccb5a061cf3926e322e11a01710bddef33555313407dfc61208064f5109ad3504db5b575dde7f443355143546f8917fea673c698beda933ab210d14ede2c03bdb4763c54a9a7fea4aef6375e3557fe689793a47babc55e8ced753c42e6cceeaeaaf59ff95cd3450e8514b7a50344f55a1266299e3867ee00d850a8cb9444421df865f6e518184a951755e6970cf390227a96455cf67ce702d390c1bd7c1092c956d65362b4358dd55f315a71b19af2240f34b9e57670eb8ab2f3fe88b962e7093ce2dfd95fc291baf780024add8abeb7516261b89942ad1a15375fc034068eb22853aeb46acb83c1c664d2f98cc997c24d472747012e6fea35b5c4186241eefe1ec473213953222cf6338111e05c62b450620284c22a3ca94c6725ef6053cbe7bc24e557a9897705daf5af42609e257dd787873ba095c41b783614c22d32bc9267a74e15372b0ac6fb07afc7d97f09da9c93b6e7eae78851f8f63f737e39331db241aa17d02036ac7cb020b8f59bf4e74fe5da76743b487fd1000e3d5ba758c1c4828a2b1911aabcda63549b18214784eb17dc7791336678f6d5c93fede6af3a98912473061ff061909740f78fe388025783179c7c3f9cf807012bdca785211c3bd5fd98fa456504f7b1f7d78ba1f715922477710f12be5904238a173423ba0b6624abc9e60f18122e137bd1c89b7c4707c63a931c921b5e845682d234a23f3c08139167063d2f930c5660fd617fde605033008206c9013be6a2c5af71fa46c042b7d9fc2a2540ca96a77949cec212fb77d33277a1ad253f0262bdc9079011121fa0aac9a5f2363af234e761b03892eb602118aad3419e0012f71eacd797c2f68654a69093335e95e68296396b7910b4fa62472977341aaec1553cbd03a9636a61e0cb6b9212482cc2816165d7b77b9c07d662854eec7dba6f555e17994e7dc2d0c44885524add17e5d3ebf8a2a4d709d99754ea06ee2b857300ec4cb06fb610ff2175037ef649bcf955a4dd279992ebd3a4421e0ca83631103207acc8e627aa6603083bd03c651ca261dc936d0742e35c37ff9b5247fbb904c61c6f02197a2082a0bce55e3133fff6a554552b3651e87b150900d5c2fcadfeb130b650061a88f7a2d9f24bd7be7284106e186c6962218bc4d5e8df86b5404be126ad009dafe08ad2a331ffcbdbad3c76733a9b1bbe6ab0f0d574c40ca77197d5d1d2feee9e099f82726649bfce4006d31aba0c855acfcd315e116324a4977a24c9d59dae9c2b04765b18994820f132957df0e7517e2d3091afdfc360934bc8f6106e8993dda56f405a79cf8ca6ea9db0c41892a57ecba2f6f9c0b133985c1cf6ee80984d9851483771a6f7046da3fab59d943c8aa9237753fe8f65f30bc45801a33754e87d24a6d2bf94d8ea4d58ab55d5fba11c98a7a014f6bbb0d704aad455fef8a784f8d332b72d79da4e0c519147153436f89a8b65b5388610c72a721894c072eb44a1165cf2c726060d8e11eea7bd07f1d073dbcb6382f25c72b26b8ca0827f1e7f4ce5f83128dbd05f7e9cccb584b87a22804810e4b8984e514615cf92ad5974e0fc90a532ffdcf6b043e51dd03f11fe09e16a1045701336c4a796fb1303b24337fe524de41cc8dda2c12ec7636591efa7fc368bf3393f610fc769da9721f3a4062845ce933bf61965c83cf9513bd36a3986a30f42d9b001410eb1e3568374d0ed7ac13b149082e3d25ff1bb7638b23b9ad4142dc12b9ec387cb727b860d4d2dac93e4298577ba55f6792e6d349b9779c0fd7e2aa782a2091994c2d011f76dd502d41ed2449769dce641d8a7f2ce711cbd03b38c84884ad0ca02cce5c57a77ef1b495a60859631966c6ebbaa460a164b23a6230e351a599b0eefac57658be88f46484cb3d721b2534559e8e343e526d00c81b22f5279fbdf0030ae5a0615ef2f89d39bf236c5edbdfc303724d333310c0973ac08b1f83e3fdbe44bf82347b2d07546a68fb6e4b9327f601b82b10f4dc2e06daf6d8639826e5a93d9bd71d5d1447d66af9c865f3d1b259666be236b9edb320ed890f7a54a3bb438351301a6c455415ff017b0413c91308437ffd2cbc509dd4b107f418dd3d7e38c17b1e5ea198c4abc0f8354972ae34b79c18be2a5b71002b10fa3464513c39c283424271e87167aaba526c4b79189cfc2cc2833b7f53de507af34e6333d60403ce08332f943d60f180961a53de4ca42997319113c074432f63f2f6244035226ea98fe57eb43398109d6d45156e32722e4f25cb0146f04359c404cb78cd7bcf494777034d6725756498807552302dc1317fc7d51995dfd747b374465098e0bcdd61043109d0db37d65098973b7bf12a97429af904594a20d9b1b5fe246dc6fc793d53b43360cb025affab6902489cc2a49fdd9232dac18316e357571b24edbde96aef8727c208c8886861fa054cdc6eea0ca67a49a7d0ac012834e848dde2c8ed1180683723e9e296140aca793a819d3f39bdd87c7374913b9b895071207fab85980cf33445a50ef688105e62facdc5552dd87d6546ba9f7aee5c2d52c6ab896aa1bb1e4576d2fa94afe1f462162e42cec3fb4407fd11cb52ab6e231779bb30dc87f3c13eaf80df5bdde9b66439c29b3fe6a07035987e984d788e0f1bf6111cf3b017db226e041f431be9291939d0e7172d1cce182d6675058b0eb63c70049a33323d4c51624253153f4bae7da7b18548752648264303c749a2d6965e4ee3b420845d4b75e3c74a153746261e470853c36c004d4abb7476350496f374540b37a369710605fdfa65aedc33ef762be591aa295acb4dcf0024072c7e864d2c293fd4f07d4b2afeb2398e656191787c00a016d8616251d785d4684dfed97e7417da0673c3675365995289dfc21730929c832c1e9d26353811548aae4c87048cb8027d3b98eb3f980c848e4b14cf14935c2a4e84539f29f1a4cd616fdca419114e1498c5946c2b87c293111897ea24bebfe3f5892a76371ad96ee0654dae449895830300c9b02737aa2ab8184fbe59baa91f2fc099a23b3bb34d61fcb36f2a70d8a9ae1bed240c0fbb2c34542f506898c89a0f6cdd043139bec84c7b4f2b14e6aab8bf59f0c1327becc1843928700a9d1a35cce69f414edcdae6d9b57087406fe7b156886ef158086794801b7ff70fb14216697b08047a13f964cb296417148bfd0cde25386c2e29dcd34e33c16a5cd1f628735a1ec4661dc8bc70f5dad06b8057f4e6742aca78d5e73f9e35b646518e08f9333ca3ba6c39a5fbeef5dd240454c03223327b17582bb09d72df26312c0f0dfefed403a82264785230d1237d07c33af1f5e969830a2051088c06488d128d3102fc23dd264fe7f04046d718794ed35b515bcbc3bd786ef6e1d9f4cbd6540765a4a02080e35f61410ef9293d3207d8b95f6199e9de368c7594e540ffbc1be714b3c342e69052880e42f32e495d31c4da003a6c75ba10bc24d369ea375f627c0d1fc20f0ab5404ab1d98ba6ea0842e99cdf99017e505c303c80984505c250521f91c496dfbf3170be0f4463d0952e1c90518716f96303433c0cb475b27a441277223a843226082252d6bd90f307012f51844b4cc4c64b839407d2ec73a621c7accc1352a4554eb75a64c423a5724fccf41d39c93a6f4cb1d7b7ef2b531b69f8f7f6e427f4af2da7d302a6298b6e28f8a8f807a993a8011b18c42a5c457a0b75cdcc2baf8e273fa44a92f637c923259670182cb3dced654ff4c80f3084d113b2f1e308a86628697f46540bd960c61bc5166c14d3b2a866209824453ae7f028e45956d653d33230b8515505ce06c14fbbe4d346f0e5e765994a28418a6da368a9d30fcd48629167499c5d825da29818d8d4011ebb3719018f0ec3f7540f59250b42505de9716758526c8f8d4269c23c1dbfe7a1903edb1f14eea4a8d976443943378d9ff3f50149c3a68fd83859bb082f00246ad8476b49e3908f27e9f0cd3750362f85089ed027be9d6537cdb3586c555328266451ee75a4d7bc6366da5f4b8d39d89076beee3230b3d78a535de82fc8dc83c2e60c645fdb5a1dce1d923f1cc1e6546b24380a13bea5aae7d68737461172d4bca2ddcd6762c8942e2342b03ef4f44b39b2545470d26f808bb64b36636f9b4354427d861ce712f6a35b240f00aa170b1dc3026b65c644ea335d41b0166ece634079fb7f756f2e529f5db01409817e1e60bfe7607008a91b8768b97927c40d358dc0cf875a96808cf2550bc37759f3b4db6010d67a910dc72f2007f24b4ad424b08578b74ef8c4f6407453c513936d1fa491aa782be4b01ece96b67a7073bf587f18ec0e1fc49a2cdbf8e8111b2d25634d18b1465fa4076bca687a1a404b86ceb5fb46fa7f7c3f672bd753230461fc5e8eacd3a73f79f8dc118144b74980136f8ee5a3df19d41c36a7e78dc9092c702b64d8a9ed1d2f0d3c026ae8fe3f0a4e543c1c6ae041e4bb466f6300a7063e1919efe7ad8f290073430c201d7c421a76b135e206263f90ea811d637dba2e9acabf7cfd11d8492281c256d92bde3ac0fc75264e221638f3da7fd22fac8d7e47ea59152307c0099e67136143d06544374421a00c1f8278b386882292061a750cbcf1112e37e8463b6c88e60eb4f423743a9aea8aec7228991e9e63816189684d9e6d00c277726ed3979b60686496019265ad576b2fea072f1a790f9885c5620b0f668fb80b9e0239d342dd782c6e3477620919f01f2c1e4d99d0230f7df84dd2385659fd064861fc4f70c08e378002ac4487fb8edf5329c37abce1c4840c45250bf4c029eac87e5594eabf6f135315e63187350a02410d1ad3e2883cd6d97fa34a1a66d4bfd46a0e05a7faf493ba28cdd2fa93fdd73b2237185aa9f8bfbe2a91959d46d2461627a4e2bdf056c4fe5173f4459524ba7d34f1076312e6829d4e487c8c893000fb78452dc9206bd48771e5f7c9fb86d7f94bed2ec82556d6f120466ea8d938742072f9cd51f6f05dc81c80f1f8dd4b98d51f76d79d0237d5216ec4572503d352c65a173cf45428ef3c7199535a9a22ec2b539a896460d71e3b22541c44b77c340f2eb852f5888d294865150e9b8a30bc90272cd19c5db62631367816000cab84f465bdd3ad8a1e4c1f6fbe00b4367d4e0d10ac6c8baa97b277217bd4ff5bd6abef66fdfe31a3f1faf678f10c9eb572fab829f710a0c106b6316eb430f90db384b913f0b1c680e396e04d8aed4674eb3e507fe529ad19b34e934c30a0eec001e8c56cae755adb3ec6f360315238196fbd830c8179f2dd32d2c75f1f79b18384a04f71b3b3c776e375401d364de8611579dc1223fb3e87f5e83a7fc345433aea90247004c767bcf50c2809ba10137fbb28755a6361587f2029986511b8c5d64784f7398da6a2b1eddfe330dcb7331a2b453c6430172877c85ab02d9f3332512e00ae36e8260dea7a3c927b7e285bd85cb390560bd6f9a05391fd1756cf11baac9102239996cdfbc8ae150c85acf5f0b68889135e24a3fb05b0765629f641494d4d281226373fc6e5958d46ec061ca79b0d6020592417d135fd2949f4dcdb4010a0a5377c1de91138b0060db3ea0fff94cfba1b6adf5c8d9b05b728f20a463d8e31a84b61e423b8f6725856e3f57ce0f2d72124de3f541003cc2d7665c00242f6449c7e42c49eafab012423c94c906f7d67e519e9221bce86b94e2d13991eb7759b4d2692fb9e2e3972781f9c8827b0a3630b33a61c2b19606a047776709d11e36dad2cff69dd82c8b6e0765603cd026e6175517214a26d399879030017b8c8d4663c2e25044ec67a76955cfda1c35c9d02082819117b07f0e49a68e3e082b2fd18a143c1042396ec50280482ba90682ae39a02e01e1e1a1dbce1406ae6a95bf9485a1642061ca2269f156a3a8088aa740292004780931b36bb607c199bfe2d057b0236ea5954cfffc3d74108b4e09c3337cb68ad575e862389b301996677755f179b4182ad40e4523cff0a58d524ea9bfdb01dcf96d95cd98859730c5667663a4ca020b1dee11e884f4570a8acd0b29b379a64b75945f5f1f81b0af94c0e575b99bb5b8abbc542e46e6b1f25b54bd24858272abb021d94929511483d28e72ba263330e108bd8208ea77f253a9b2fc452b63d528dc764a683d9360ba97d04bb863f7c7716a53d437ff863637ebda6099ab20a78166a489538256e3556ccc90bac3bac051fb8aeac79fad27ad438d63accd28f5c877dd1f18812af3bed8d67b33d90f04212a1285261b7f2103ec36a70fca80227a4d96cd5f362720d087398066286b86528194c6efbe1bd3e911ed1b483dfc8438b3f5717fdc63674ebcaa52baf078d3c7ccf9915f470233de4d29aeeccd86f18c5236f5d212f9d104fc082303c918f68ac0d39b445b24e191d1a342b2c47a73bc7420f2c8914a14b328865b5f3537a74620242be9fbbd311d5554107fb72e46868bdf67ea1bbf26894127d43b367d937a1bfca2905e89c0a9001a8cc2c66af40a5fd1eb04af8161cf5ab53b13816c43cd08798c457449d515a01ee9f13253c2d623ce7b0858a8158aaad345995ead158c6e4fba5ceebe9179b6f0a4be7b5301a187feb8a018a3e46053f6d0479f6e744d346d92f2a965f7753d04bf595cd3f0c83e68eeb2aa3a53ba5b59f8f7de49d6e584f1f2d8f5f457e1f7336313e49b038ff61819268fc1a2fa09e8974f7d0f96fce22b31b1392641d2b0ccbb66d74fc5cfc9970e39df4fa5396b031d21646894e8638019e0233b46ec59f675c3063c22ca12d6f9040dd0c27295fb2c4c336341a827d3ca6759a5e381bfe56c3a3a97b3312fbcf162907f262462876a381f0aa03d382d9b3261cb606ce3775428649832edce5b2c8671df1766f9fec9e1001b90b57a510de2f38f32d4e291a9e83cb1670ada4c79b3de29c0e8db0bb78cfe70a337e6a992b59615d5cf28516913890f95b7884b54b36aab674f6feae818384a236cdb2dfe6ce15e90dfedb554734f4290348a0feb4cd400328dff2cba44c232676284dc486b0128d626458b6eeff0157022c55c71c7912970d4af7f824b5bb3e2101cc6f81b9afb45b2e604f758a14291f4acd79f75c09fc15b6b7d1a80ab217561994ec3392d54824f6ddb5259ef36836ced86e8335367d0b377bc88e7ea3991f8859a30ad709721fe96112c641de4c56210776e3209a8c1cea1f96f261285c668a2b5308688df227b572662cdc48351438e09188d34900133278de478c7f4112bd79506c3155bf6ceab1d152cb9fbf5f167ed5be451ac62d2c663be16c3ab433b578e95699a1461ddfda61de8751b86d4780cef2567c335db322979890a0d8249bfbf9bb76ea0747c5f29d207ca4b526afce9aeb6bc2dc37468c09bb39dfad7fb486438c58fcf65c867948b6e6ac260f6d71475f3bc390271fc176e9e04b0e5ba01cd303e7417e4d28c28e1af56ce10db31829ab260dba77186b6e97860d7c2d87a315c9d922272bf2f9377835763174a38336c722623552d74a1a53b015d4353ebc92525717342abfab61dfbbcc52729ee3f402d6b40b1528980d71f82b842225013a79e3df1d45489e78323cebf20b09570f6cf529f30c39578610da5adc14d07b45456e26707d023a4a752d3d511275e6975ee3e7d24e0cb94dc599d1df5d7b8c01b73037791e196e954421812005fa8b793e0ec408494f943ab4d9abe32fa5120f45c0f6bd3e6d784575528e2c73db52c0254b1d6b497c47fa3b8dd1083b51c49e0f72da4404ce3bd1957e93f722c2adda86eabee33d7e58c107f0f8cb3e8081238def1d004a98c4f387ee01c70ec1e3851f087daf0f58246fe6e6c2ec296f9215fd6f693321af25ee26ca5c4e7f20d0450d72ac3603d213e5138de6312b2735087fe93b8158af64ce2e6cd5da04d6ef06b708f99c3c5b122b5c841f936a57194eff64cd681bb112a2f221f7690339e1e97dede834212fbadc28efdb2b6f309c7b7adb2596077815f909a856e55385d0dd5dcae9823fb2902e560ec0d42a19cc3c7a8310d75f77f104d8ef2a787ba12fa41efecea4451b3b2c6b54ed164740cef0dc196ad06aa93cd4bbee5a2f78e94d09c19b0cd717718295be3d43b365f9b368dfc5639d0a00f1893e0616a840f34c7cf91cab544da6086a96d5112d1310c53cc50db04d7a4f013e7369eae15ada54caf0c6b9485c08b586cdcd33e011c3762d40dae2324302fd56e4931e1c43260fbc80473c4c568320323cc9e4b77c1faf500c435e7f082286f2c40f2df0179942f4ddf0605878d7283c05ea90f21c47d9c6e3cd0f007b8fc55ec04a88464fefb65c780f25744158d8361a217a1e4d790f0ae9f4d3e57643796cb5be18c25f708cf4a0ec6b2c6bb1f7730a261aa609e3ab463b7e5c5b1b2f1a45776dd5ff3e16d7ab95857d601ac589c803a025b05de08a6695a0022233e81072d226b5fe78f7b220fec63b8e60f59e00f8daa143096be757f73c95df18fadeae740b8ef40f8c4ffa5245ae235b05fa76c0fde5f146cd68673e5d063b736fc7075b16fc9465550e9375590e3c44c5fcf3421e1e1b141298585dd94a4d7b1586e47ea6c845079aefe9f487996024a5ac796013f8554f530c9151ab0ec00bc01889e0f3baea03481423f1f7f06379c8ccfe7a3c51711b3294d2b35a96b274d221cc90f080ce5f688257d8e3b9b963a91819770c3b4712775aed777361a2213a673ce7420b964702611c4057b600144f355c72af2a810c6adf1a959256eb35db87eeb4095f5a4b529f8a54e1f9442c5c02293e042f710f19cf829c0efe4b584c521bdea4b41e11dc1121109f2d2a706512c670d352cf5517dfcdd9e2f65a50ebe3a0341423d10fdec49c0cf19e9047060dc903c7247a0583c6f58482f8f41bb7d125bb8cf65b76e4d5910eb5c2634a90eb2c2ad3a9763a6a9bb7da19569219307e3c3d3bb42c0eb253e89cb689bb3f9e550c683436b760b8a0ae0ec07ea23a68ab3e34ffa18644173bdb269113f01f2088c23cb6d61a06c7dcf5dc623acf2ff6220562c7ef3e3edc51806f12def15b517111c743997b6e9037fadb9662a7520a0b1cb41853e70fc7011707568a1917eb998bf12908ec5ca896f3ffea1ad53e072d85e1055a8b5ca7df71bb4e7d3a061ee3c530ee987b130887a450b919061e2aa900d7fbc7ee4426e8980879a7ab242e06e2321ffad26e4e8d16730124e93f1b701b0782eefd1a2ff5aa28ce7c7360dc807fbffb383e237d6f896db07b430101a611f6735c5d1c03fc6015a4fb3d2ee549687f5bd5bc1ecd0874ed9b70964db3a82a748d6ad337de9bc3f89953c8775348ac061c3da32b170cd795188f7e6c6513c84c26b2bc4f1c9f5df699b4b821d0ec9a53c390300f4d565e81923e1f4e1d575dac1c159d5f8b5ce97ce0ac9135c5f8660429d1302ae2b8997c103de25b4154ec0fed9bc21a89f9c767a7b42f06e893bc9ad81a244ad9cd712b51e68f4e877242cb665edd29c9b371dd66682d2d776d9b5b0683cc2630a1e8ba0ced6b5c6978ed19f7fb6d76496d9c7473fe4e7061bc5d407d14ab02a61c9bc576221c49e1318c1184ecc972dc12a4732040992e10a7a6b070d4217e23f0bf139632ed6b7619ab5a75a00a74f4eb656a7037e2657c922ae23732454a540a3574abdc080d0110fd06943eb84fb11aa35c3a8cee5bd2259604080b345760f6076b6a95c816e4576a603adcd0444a79301c8fe91020f99147d1730d160cbbab5861c9b31a471d45c06e09b169510b24467124e83748f9d78d26b1085c2a425e1ce534310d68a117c62b5681d64728f6c74ec6a4e75b1d5e970ed90b69255d15d3556a7be327e9222ff2ddf30e7aadd44ea7cfabf063893f362a6600716a525f7793abd44d5cdbee37e8d3da38106e12bbae5a11f54edc9034d4bb463e17503b5f828485302786f181bee3d9376377469778bc1fc46455c56f3b0821176c4fdf6667844974181e6bcab46c4bce4ac8974c02ddb7d36fff3c28b60b93cf64d9156f0473cfde2ed27f5a505410f809f72403a06d194a064e2a98b7df41f3759b65da56dcc9d768777ad45d1124c310bce041186fd0093fcb68519d68950d1473cfb5ee36a12d2db465e8171158e72999780401ff24fa6c458e0e4a87b2031588e9d0e1d9b2465df1909af5170ed124507b04ef910b154ed5497f1c17bab51399236fd877f9af4cbf620f6e8a045460486622fc3511626c00e149ddcd9c8b37db875bf39ff9ad573547d0d103593c2f0ce02c4f67472177c103d795b0d27f22d7d79302a860c04eb9ca317ce13370591e78e9adc9da9f22572ccd63dde85807c7f2a8dbec3fd86ca27a0832789e58716e8288c8162ea603c88ea62ad1dbd35e233843d4dc4c465d50554e43e3d29a472ba409a4a06f0f67b35aeca2665264395855a94f1dd3b146361ae693821519652aed5675e478fe4cd723df7ea05b0901f014ea8d284b2a580e3c927976841b62c07934ab5725e12fac0ad9be4dcf196ddd185d91d573c27418ae67a7e584d552f78240d9d8a256160be5c6cdda175a3e24249d5e26898d4bb7bf93a8bd3949273587b6d010f3467e6f7387efacf59a00552984c0e6762b7e108c909836ffd42f9d9f9853608a2d3021e00f4cfe62613eda6cab6b4b77bf415c37e09c83dfb46db849acf2a2b96035fd54e2c786787c52d5ae4136ac971c13a02507d7566f5300957d94b5b56e9b200c76679f5987c81d4471372a62823f4f9b3fad824e77206ba8e25d030c320743b59dbcdd004493195dea92e437289e13c2bbaf0be3e1917c96d3463ce4cb2a76797a75c4c5614f202c3820c7f6fb5d308270415182fc5f68d2c6b9d202a8cb6d41e495434c25b1230bd0371c015872647516bd550c7bf97526226a73e4dedc2afc71f8246f5f835bbf1d46b1c4426778abaab7e699de8544de0a1d2abb3e3f2cf40c208f604ef42a99191429c1aa391d450de0716a3c3b2508c3b99abea75f7fde1abdb722d717069ee24c80ca5b8277453b6fc81eb1962f49459824078fe90dba9507dc68f13f1cdc192d781045a552c0be2006e8d8622c7c719023c00c002e35a539caab59f0357b8ced05831e1f03a14564486ee3256df7335ff6601b5b171b5b446b0bdaa666ceeb8b5beb5da8656f6b3bf98eb663507f343d204618696917fb15d7254b08396101857ca8367d54243a9a33a8aa5963070c14c0e7385219aa0a8c198d7f74458b8aa46fc31f07494a17bb7e4c62ed3e5478d01837485128ae6bd29da963c75cb0dfbf334fc9271705cb09fff4d1660df8cac514af5b0e43397cc0574d6a9f5321e730925c46111d6118ec94c0adcb22fb3b5b20614d520aee026ccb8a7e6564d54921f35f2c4f4d47588a38b75dfb1947e35288c5c0b46e3a3b805eb3dca71e4d77408874273c3114f225f63de5ac70f9acec922f12d66bff902d9aacae002200567ad0627b7220a72074d29bbe30548f106506ef15ef3a5f2b78fbaa28213df348f6e66bdb0d7e3accea0e9d03cf42c28229bd1307121599c0d0720c91352fbf4d20ac37b5164cfe1933dcd51f6262fcba3a27fe642a05a6f480d4537f7434ffe53214db83860b6dddbff9d3363f795e6e7751570d3159241b07423541f97ea5ffddf0ec4e8677352fba21a430316e4af8881af8dd220eb5d8f1c07b43d52be44154d4594f8c0e1800e2d8adf04a0d156672d136ec897dde14c3eca339030e5a8f3d63dc5c1565859702f7fa4a605bdc002a1d49589e2fccd2b26d1379b221fdd3313c2eadea728427b361156e7d6cb36810a20fe5c44e2e6d970aaaa752014923fa2618232d2eea485e8ef400ba5caab9de8476aace170ee36a9b45f41c23d6b1aa3969a38470c51e73a7bcacbd2db43bb46386d6786155e31734b991e8219b7e46bdaa7f0c4ec2b0b66ae1892b44a0974f81a980aa013a498f4cbbb929560795433af37ad7324803a1d6200d7f210f5c94214267781b2dbb080cf1a6f508799f9bb3b90eae1b917e3752dd7fdd2cca6d5b184d4b986ef2a1f1c88d34be5ef166b04056cc2500ae78b2c09ecbf953dedc42834bdcba3b380ac0171de68d3ac269bbbbcfe27c696ca4393902a6f22758615a9589bd5531e013f8b3f3f21d37ea77fd340f3d83405aabf0ef15f43d6de9679080bfdc3c7fbfed9be3da305c5fc1704e8aa8be186b1a65c3213299e414d78acb8c619c7838b37d7422a19f6576f8b04f79bd38e959800364db60a24d260886ba64fbe9c15ee987d62b49f6c97b01b2d67db594a80e8cdbf29afeac67112f4e191be5017a0e110f6fca9e42f075c71624ec873523622fc8d81ff6265f3ce03b0404235169012ee46ca625dd6f31cc686115d05499648e8413e3d7a4e73770acea623deb527453dd405d3782c30cc8f5ac713bb594332a978861c279d676fe353779f20df348462a3d0cecc3d210b8dfe31d088a044618b78dd574b3372607ca5a6cb93cff4502642c10778747116998a9e395b86e78c6829ec480e12c6e0ce8eb49e2c1367cdf9e1f6cb614be708f84c0f2a3e5444f5be1a5379d3bc41d929a1d607390f4579ed3fc0866fe3d4ec42e34fc2039cb275d6312fee400215cd901fe50321ee32078188f76e14db5591ef3736f06c8fc349abbfbf082098c63b29fe268fc8e805a4b148308a9544556e693e2288c6e9c1105c9b67722f29d6e75d3d87ed0e2a95374cd24f244f48b458b5af611d99b2820c30c923abb0883588aeb8382d33cd9373d36b4be4aaacc113e70017de9af48275548be238b1bf16bb63384d087f2e74d7e40b0f0af189418c17f03b5f8f99038cc5427e405033c224448747e2e9c9830584efea8ff57773db3a5e30b1ea764435cb46224e633ac7afc7153985ce9165de8ccf1b807c7c8752415cea0dfcefc63e33021793a744a245f7b5b8f55ef656345bfdcad4953c36a1413b804fdb2a62d8a108472f57068737e32e97cdca834334f94a3e00eb1e637f48b8c4d2d4e21542ad1e6998c27a74b29502f1769468d6adf84539255863c262a4d7d69e31b4634abc2595170313f27ed57085ee1fda03be708d44e5d4b564ff3f390c055c197439763c22ba0dedb103b8480527065f82d54bdb013106b6d08e857bc9c3dff825111b30abb403324072ec48ae1cca8c057ecbd6d981183332b0a46bcb7ddc12d3afa2d9cdc904c92209aa8e64ce18c3c3f689a4f806d15bf7380203a7810241a110e3b1761f31c38612c4cfe699de74a697e04b1bd8e52330f12f0a34f78f4cf423c08a5e35c62cd4c62eeacba142811676aa4f615d6d89f6092d8b1fc87161720e4bf5a5973d23920d2fe1f7cfeee2416df3ce5d3feb96c646944753413c9d378fb3329aa31480c676ad6e7d4f71b5f5c4b65243c0315e02a52f5f02e5d050c642e677e343b851a27484d6828d2986c4d1be717515b688a0fecab02d8c6c53b65377d5a6f62d5de39b6020b495348a745775cb7bbe3a23f680e71b8707dbe9f7deffca0b00d235044f72263a7a2be443553474f237cf6496bc20e9d0fe2914309648e5b57a7f73752f38d4cf9fa19f4344a123c3af13d061bbaf38de33ea0d866df5a0b31199bdc4a815dcf1155b08e561a69c4d05508175e6b89ee657be56f524b19e55ff23de55035f1bb4f0d17716b7f1b372b24f7ef28be533a705388306633dd39c334d19b584e159a634cc75154e87c1c68e36589522bbca29e0374fd42dedee3d02252c950487085c56dad8a7aa58e88d76bc882679a73110e8bc5a43c12dc402aab21766b4d334eac15b03f28481dfa74eb25d615a484c951bf453b0e15c1b3906c5fcf3906f4249f162f7d4a4cc5389134d0af38b35686275825ab08f83f9753fdaebb58ed346ff70036fe2c011304f90caada44ef8522e926581e2aa12d9756c6d14862f7208197bf58c71654b2264421b2fb4d65524182d1a57f6b164457d39fa8662d5b67ef2c2b71046abe0c3ed97e624b52d71a44e6ec35cc641790ab7b6bbbdb72e8ac17463d31dd0c4ed740dde358e94c07fa554613b3e5269a8bcc18f37f6b356ac40e2eb4faea08f8509815f4ee800729317d03b742e965933de1c8fef6ff316b0a721f4abb970df7f108255c4f867298b564537e5a7c013a815795dadc3e7ef0d068f9e2f54908d3d303be0033266ea3ecb0d0587b151d6f959b9db110dc1b1a0839dc866ed56bdda843176db1861af0e12fe9fa15b63a02fcbc61acb13f51aa31653180265159ca8d0b6082dfc275e549c8e06a50587d0f5b3bb2a571a0543c041c828d7a425e364ff60a3db0137a8166f61d89cc6b6d2508a4a63d824947d01c4801987bbb3b5b2a1efd3c9c1861d4782b2fbd856f5279bf1dea0d94b7054037e887cefc0867d7d7ccd13495c955d6651607815f7878fe92413d75f85522d69c9ec6f52372492171f21c6bc3f0464273eced69e4e806ac58ab1de790a75d52a98e2b91c5991b4d003df1f525cf6193afc269bef9456f69fc8263428d19657e4e4e1fce90cc1d8da6fb1d8fda717821c84530cc20025a91a2ff078456532fa8f5bcefeffe637d5ac34d839258875d64797f07f7e62d7ddcfeadd99f52446185acfb9691fc7003eb5aa0f6b89e017f6fe00e92339562002c7511d73c6d8529c847a728eb4b756fc398d4f96348fa04de16434bc1227403486eb3d1872aff5ef5a2fb7b68a24646d8a4a9f668347851d08d15bcb737dc7b7f46577fb56d0a2f5f2fe9faf377247f5d8a741d787d9a12f762a11540bb16413b7f03deb5386e44512667c7b481a1484e6ae6be54050c03e16a75170f20705d1aa7bf737446ca241c2f6f9fe562c77704e9c8d6d557ed35c07bf513b472fb6cca0eac09947ccc5fb105d12c1979c122b2d60c3efb1a3d5c93dcbfff42c135330ee3090656e09c7383d9cba07113141a9f699d3899ffb67d647a68fd65228713cbff29489cb94b1d782158450964df1d3468c32677c6b76ab2acf4b19620fa6936d50e67c25b43407dcd1af9b126ae365986c9fd5f609b6fb79496efc49987572f7058ee58597b77c137f65947dcc517058dba0ac141165ed359730b3f638359f79962da86751e49a4f37366777e5b51ac40eaca9e70b657b27f45a27a4efd2349099cf3e008500c337e9866c49c621d0b1242649cf60a114015acdd6c9287295b23b306f3f8192da893e459659dfb73b83abe5835a54b2440341fc33267930ea6a1dc0492c8c62420e919774de9e87a372419181ecec0006fd8c5bed955fb4100d6b3c4c1f6e07fff1d87e0413c8d57b45b73f2b2850f271f246a46fdf7b434eed877773524b941439a190146dfbf33b6918dca36120b791a241d199ed98309d1bcf268c4152127ea4acab361ee91021c626f9496160200e4f1915a41d2e01c1d222f8aec566e35b3b5b581dcbeda08b71f350148179f45baf184d383c6e61896526ac141f9ea3a0dc5b9b3337c225ccc9a106108e164343e8a2f042e654e7864321375abe63843cb040b7da214ee36ed1ef8174a7bf07648617b49361af359784018658f97081a9e3269fc29186d517a66180f6c372e20de75d3b59511f34fef4e0a1dd3ab3a54e92286e7ee0bb36132323c62cdfc3a40ed0877e63bad7a73c1e5f224f1af8132d33b067042e9f116d7cb7b9d2b6f7e0deb35f524dcdf6f3ba7122609198e6f1f4c90c9f6fd557d0317600f7032dd4852991ac74345a2a90ccbcac82fc3e8fd48490ef2842f00f635372b5dcca94c9a113ad52a328c4e402e9d39eb28745153202c5efb37b025dc333f019a10ba360d57f5625fd05cde0a69b0de1809ea313f1b27c25eb4ae9c9f604fa18f7117ae17662c931ed6b1247c096964e88e3de61e70bf4ac7836a3efa58c3ff1efe6d7c815ff57e357d5015cd4cc197e2ed7ad26267841f3062759ad1697288664ebd84891ae64784bc1c9cc0568385bcfddf182c6a9e797e73521c2a6fb060f43851817045de02f8ccb15ab4185fdadff0ded48a74b4d1ec3603fd6c371e140cbba7870501eb89241def06e307d168eb88c2c66e24d67fed226da7481e95c1eac56670c029d6dddc67f8a86351ede4659b11e4741c8330e5279ae3936cd242872e1c1da161583da2605d29e32d1d9b0f520ce3304e4ccd489755e7c30d4a703a3a30916e30bdfc0db0782a86584eb70bffd3415f498d291eb02af6f43ffe4fe91310570275d3206aef297f2a76ad5e1af20c3d1e08ef0f51f98c41fa3af8325137eb66965bbb81d2f4ab4f720cac6bfb3324fdcd3b920edcfefaf6166edbcf0808d10d74120a8ac87494d5a33e7ea1b3deb939ea056515c8fa4395553c6b6319dc46693a4621f1d766caa758664ee47ea7bcc84a5e1afd91192a91a975cc74200710807a13999341379e7cc50c92d054a1e9517f33518709bc04ab8f4e9c4c9a5686515531a26df2d778ed3f61c97a54051ab5a179f5ed589889361712fc0d2c15e8e46c4085dd0084a057453ec66b847e00946919ac216199f8bda76aa92024943fd6861c0e148af8b5251a4ccc68a10a4569ec7089b996387d2cb8427b94257fcc4e010fe4678c151e61ce7af9ea999ea04d4f40cd4bf47ac0b16039323282dfff64801b69b126ddddd75127ea1b3e929219a237e565b2815a864f6a383a1d142110856b6a7e35ef2772625b62e49a230f0c331970b43b9ae9fe8a0f0070ebe80a99b7045f56d7eb1c4df057c90de33e2173794392c85a932a147e68f8ba1068a2b5990365607d9a1ce0ca213b1b2d24e5b31273f6a77ad3f44a2e72d53ff4613c87b5128b1f263f0a20d872937c570fe6598354cd8473fa3bc50e19320ac5dceb68e53d30bf663a722d961581ed6671a23e592e3cb66b48ec452851d2c08eea1a4aa10361943ea6c0bdc76011a285b2a162880cb29719a2d42d2974e8b869b29eabfb35b49c2cc883ff117e12f4c9b640895033499a398231ff2f70434c7187d88501429ebbfe0435c0884ea99791e06372345e683569037279034ccc9d0acf71985774f38755fb87546909dc77266591b0f230e7ece05ce3012f1842b5c7684a472241f005eddc1d38d612339f20166096211baadae885b8fa910b4992452d72fe41239a6755979ecf4d20c2f32844e119b828291deddbd05706156806da5082fc7a35a2038407be7682248cc8c2c4d14d2a2fda1c0455116553429fc0d0680a026239880c1a1b62401860a0114e089441431b24558a9a07dadc0757c668fda51a1a702afc4cde6746911a3564b5ff174bad1ffb13bb4a8737ce533012c59bd71aba45d54022670a9a4b6a195b2f937023e05e7588f9b8d564f80c2ef90d790b2df150e2052ca892ead56aa2daced3f8c51d52f423264e2101706f48159604a7c4761369df75754f89f076b48f17fa9625140b16606d2f534072206b439f83ab2e3d2365ba3cd73a92a27c159c9b92ea75d922ff75e5f7cd5a98286c540a0ce96dca1ecd3a96dbe83dd157fe16bc0f23fbf51f1cc2843549465541ad9abb706351997e98463a502102c63c473cf4e416a74c68b6d610d8166b2b1391d78983f942ba4e4fc55795cab9bf19fb47ee0d51712a054e532639627295048fb21e0674b6ca760abc6baeb049626f962ad45e5a396402038fd14c68f3b022d1acdb832839714eee9ae9f1222649684b6a3173b90ba1544e1c03e5e47d0e150c49de046dde465b47798f40af8c2023ba97fd023dc2963b0b87360b358c69708dd3e6d94745fb6bdc2a44cc641dfb25c3d8608484efad31e01af9e6a83a252b1d00337c8c0595006e96d9ed81362828835ccf0eededf47b7fe805d3b4eb3c16b08f169aae884d376e60f11ac89ab356f2d1644c6b173e2e0db8fb740b69b4582d0fc20ee07186060f987d4ddf0f431b34afc5854f88826752e78ef68dd82b28ebb51346275a8963a895c22c650fb00275e0a9bb2e3aa85a74a5a03700836c366d54632afcfcf371c7d722453aaafd61676f7e53d18f054ff3472c7d45ad9d2bff0666458d25017712c80ba9e79ddf3658c16190fe40f8035bb31d432970b774754d473443b8d47370f64009835c6855990ada7bb3f3d33eff6aebd907bd4e7c7f7f1e35e5137a1095d42008ffef7f49e48d54e16ac33f7e85f6ca263305942d44bc89043d3370537b14ef78ec24c112ea35be94112fe644c05f5011b6ac2370c00d3cbc9a84f44e1c006655d4c6916134b81069c4293f74a3cdc39d83820a27c9a0c8059e815365be8f4eed69c4e7790f4eb9914273cb174eb15f684791d2650ac1e28a7069ff49f58955cb25adf5211ab671ca37871b3b93204812de15e15062b4f72ba672ea784e0386ccc9973c6044c1b06fdff7d17da7a61e90b11228099459d1265adf3874a2ea183a0de70503e3e8cd1d6472706ae27ad14d917a2a602b90386fc5160564893c10ca100b8a415ee48c661fba91211798bc1ff1151c1c1578659d1f74c8331e966bd79e59a529ef90efaceec4407102e979a12ddba961a8d221778ed79f2dadbf83b62669c0420c6cf17dfb36f526b9d79b35fb260642ee0a30cb382d9a38d0e300d1bf76b56a5644516633d9a321c947beb73c69312bc6c5a330998b7b3af9d6b221c8391a42decf74c087938939af5103f06ee3fc66b2d497851ae60435c9175e0a8bc5ea71d2836af4210d4c32c496201471945715db4c6ff4a194283b2d560890cb805173c38b3d0db20e7840de353e7c3a0f3c5d6e73e4d834de13675559de87e9220143bb5227032e9b3817c5afd2d7d3a4763c9365ff3e6429a81a78d6620bedff2901c97d3f1817c7d12c3bcd9ce4b0ea3a4fe4a2f58323c3de1afa418b58382c293b262cf1a99ba1db3495d27a32c68ccb7265ed11700a52db0560dbeda6add69b0ea361be84f891b47b7e29ef5048ac54780dfdbd253d9a4678f808b6404bcb786a92772ad8b5b094095e730d1f9c74430d2f6599af1875d0091b457c0147f4c64d4e7b1d3f28d3d25c984c383573d9236cb33c904f9bd77c1ca721bc6f3493c269adbfd0205703e45b6dc3b89a51f9830b69e84d0b6477b27701ff67f8e89dd72a0fa2e333a944c34fa9cb44a16fe9915fa4c8054b45b605350c5920566bdd4430ed8e8caf1650615154624bd044ab191792f7624e5cdd903b58e7c0fc9ae5447a1175b5e15de2480ad6a86158fd2a86477238c3737af5d3361fc707fd105eec3859393f3009c74574c093dbfbc017c77d93f8759dde2f00054aebc295da4bfa77bd28b1376ab651550eb0ccf22f300907018a6a17e84e5a77c7ba860a7524b074679bc0689a70ed23a820902d620ed618e3bb9550e0e28e6d32c58e4fcfb82016005859cbf171a27088718f3841d2eb471c92d845719f6b49d6d1c92a1e62ab6042a62d0bb40b2671e6da27ae8e39505fda47333de0daa461c4a3f520a77751141cef79e800f6fc2748b5a1698742440f2229056596e8401cb471b7eee9fa365ed4c46e613f97a11c4a0b84967b0de97fa11a01818e138204d06acc70c1f2c14213006a3c2c1c307589e9b0a26cd6975988384ccff8b4cf19b98c6e2a34cfa53c33397d845c53ad7bea8b0977c32471072d8d0705c16ec55fd0ae7d6051fabe578fed70335912fc241a371b9255a7aa6a1a66fda7c89f7b5effddb5add54c2a1b4a6105b094a5604076d4e00775a74b2704127bb8f765202d9731ca83a2b0b132f200224952a40075fa43e362807d2b56928eaac3d17223507ecce69c252362267aed068a356b8558ec0f414b7d4252145c2115305b7404642372c61f8a9d9a291e4322927c4a7402ecfd501f4c90323fe00506b9c66c7e05e8a166c2a466cd4e74172c391fc0971253ecbba2db1be86dc078c17a681f9c4d3be356251c4ea27a3001aa3564f81f206df40cb22821e103772c7ee2d7b7486b4d858bfce942d104b6be2c223ae22e4799e1e75c2b4f765bc55aaeefd0bfa217b6e97e167be3f64f3bee03960b403658a53ab50a3014c003f0d0c7716c1ecb756144d8246145c34a1468ddc2b320af7cdca96bf58a53b836aa82074bab67bb58458608afe6a5465f8a940a38c902af2f204b94c2b3d6eb0d8ca1cee34c0ff57b24357c2c17009537630b7f1f5ef0ff582d2894090381f46f9bfb2344d76313677579a3018023b8204aa2a158a83350635e8a4adb8413875d410d911cdc505f00f717a9e44cfed80a918bad5addb3e731b5785d9e511014770101c073929c436603a14fc0dd34b05c64554bf8652d800bf4c2d054adfe5208d5de1db5c19a872cd013573c6326537f37fec5033ae4ee2f7f34812f341147000ca71301e805653732e1d6ad2abb571b154f1cae384ece4732b3c872e7a7074133a8b7f5c6ab983267722fa7f1bffa3a8c9d45842df63941283331cbc30daf75da947a810462556a4916ea548189c70eae03fe84ed8b6f291f07e306239c09593d457d79c683c0120d4fc4e8f41b3f6293dc8638f4cb9c4f25509f0c455b8e53f36e6d38f8bf2b2abe1388613978ca3ab9ba66ffddbdb27258d1ab8a1c4b324e3f8e0b7a51f8962b4fa409f7ab0177621bd9538af58e753544057035954ab872e13a22ab6d50e84eb06eb17d3855e255a5b659096142bc320440364c886095041368e98e20340a6cc2a13a643ff36e12231adb4ca4c2d423f755a72c199cc64e27526e5ec08f8971aced47c00757f209af49296d8549602a3d0c8576db37855e67883ced8410514da54cf89109942a4eb74f822f8da63771b29821b40913957567e8587f1b0584409b77c83951ce202ec92c41734ba92f3e51cb3aecee9c4448e36df9f1ecaa694d36be35fb908f3d7eb94f7d365409c011e969d2b03467ae37bc1057e3d52f421ec3f33e8d7333ad1e09b9329f1f0df314d1f5f67c2847e63211fe3f80385aa917919cf948474d854b444b451165b2a936056bb4ca26be470a258f838a0bd21a649db6f27ceb54337c70ab38dc01d4cc3c588a843259200e50e30322b8cafa3f7231e1ae1ba5252150c7c8c42e09dbf350c24631814ee70a423bbc9f118914b8756bc5ab2026b1973268336b915be047070fd1f684c8be23492a931f1779ef384c0f4fc34330d32a11aeff181a7c79e65a8b67fe48e1cb5353a26149b9d0afac586cb7810c1d04d73ba6e4d5c9a508cd5d7b7a8c12f1f06a245ee95f31768fbf0052c0aec4f7d93d714039eec6a11cf86693ec344a3cbe4a5c22a66a066308b2355d29881ba5f69a53b9fed2b701a48241f1f8c563c3093c6c8aae5eae91c8f148ed246a7893ddc0757a78fcc56efda138d75408a431ea075213e36e0867143d100d8acbdd3a0aad12c8b016b5f38902740d25d73dbf4d1601e2e77488b33622724af2461ccd3b0133a7f56ce100bc4575e1f9148dec7ad04174cac0217e35c66e735c95ffbd195947280b96cae1340060d3155845dd6b7a30defb706704dc4e712ffd6fa42645b804aea34b08ee65dc3fca5f4f69dd819007e26421c1a9f1434a42da641b3aa3c6735d53983a20724178e1cf615a721b6b5293973d3ddb09a44461004bc9c9f8796d26c20c89e856e66fdc575c87ac61432792ed775d99776866f9ddda1f2677ae26b8307fcbd80ac5167ead6184ac1d973dbb8cc7247fe32b52a6596ff48438b75405823edde10e00792961db46d9ed12168be7244cc02d5a65a32d8ecd854665460bf381d62045a35274b1b31f408dd46c947a9663ec946b27d827c64c80cc0c6ec7223ce56b3cf52f8b77bf72e079a531fe049fff2337cd7578a5010680a82d59a644581e51ee00578567ee6354de07513208b184d2f3b47055c65e113dfbb01db799e7db2d3b7d0efbb78543b795df56ad52d378f7a98667073736756f11e676492e534409d4dc6e85bf881a6e70b815a7b4bf90cf28145f214ee26472f27d152ff10576bd65b3268a9b0dc8df9307697e201b24d077467242b26558b640e078c361b7a089d02c40fe67f8cce4b47f72b8861c6cf15d195ac888468f35f42235837af98223991f4fb3a3d99681857272ce0d5fcfdb8b791f84ee97eee8438a0a45c24869bbfd4f1e66cc1e9537b0db4efab85c4253f1110ff318fe350131670ad11c24bb3124d2355d7d36a8aa0e572c1249f32fe747b653b13876a2ff1a1c359beb3ce473dfe329e6269fd128b9ba0290d4dd47c2c8dd769b2ff60652d0c9769b6b0ebfd272b90dd4e2b63f571ad5087e7332d4f864f72e0fc54a44e9dcd74810ea936b38862a1c1cd074e0119d1e7fa6127a3afd6291019cc34ef3d78adc09f592cf927996300562b010372728bf71a7caeafb57114671846bf8042ae10b5953812a5c934e07101f8a64528d37d73b83bf9aa175d8610728bef1f161d3254343967556ade3fb0ad2faddccadf3e4434233806a476ae37be0dd7caebf068d4a65219523ad2ee9603c708c8f4ad14b33dbae349554908b26b2fa358a60aaca35926c9774a13f6970e41f5947098c3a0d6db72cee2d070a2b699029589c8b3f193bc122b669bfd519e85b4ecac9bce23fcbbce2578224f8749e93f5eeeaef2b6fa18cf3b8957b5c2c73b9fa2d46c09d525315dca791686316caad18d6c9e72f277a42d6c336d55646e6f01a37d635d2220a5d632bed7b2109f00a82439432f6748bd2b404ead91c7c4069717e7c64120180c41fd9b5a4ea0a65e0b4405799db4b07593e561629f21c8720147bf65c7273097f3c2fece2402ebebfa00a25db2425bc427b295d96e856e563ecc13211e557a6cf14f0ce180069fca5e07384a8a34b80479d59261758118f2793cabf4db81450712d40165edb3f56f5455210a64e151f7cfcdc6a1a6b7bdfac94b8c52cbe58bf5f0bd45266c76e407213c8fc2ac24612de460f2bce9740d339753ea1c057051714b9685eed1768f882290d7e79ac0870dacaa473ce830ec8cba68bdb06100137e620ef1bd45b000b50f852085a41598d6ccfc7f6b392476f54cfd66b5cbb016dd52868a7421265803566dc2acef9230c001748d6d7f77d54d85f70a4326c67f4053f227c56fe308034482b196f725ea5533594ba8dd4692354437f5d7cf64d5e3217db7129594a01e6c70b1f23961b6701cc50fcd7ac7e2656bb2f658171033ffacee75896ec7b400acca471760e544aad479a8cc3fb7ca95da1e24bf8624aca608afc7491b14454d74d22dd744b2682390f090525362028f6f1b6c852b9467bfae57e4bd0720c3f033e0e27c07f2ff5941acaac0cb64c4ad77893c238bd5d56c53bed58fd815f784a8c8e5e3ac767ad26090caaa3231a39048d0116231b74898dd606be19bd1cbdff43cfab42ad726e7deb0ed107e62a0560fde2f137bb2ded8c39e4c70ce7303a560d6e00b2f30aa2905b1d6ec44d7cc8be39948c5b187cbd4ef974388ae97aa0d4110fb94b096dc67667b6c15f022fb018c41dc0c3f30872aaab56ed336a034e0272732d592744cc64ec9dd30a375f1e6d0bb195962e2d2358c976f0f715071e94fb3b2d89a257f080505bd65535678db48ca4c1e4661bcf60af2a6f4eab2a4fe57f3e0efb31581162a116e68a0432226103a483bac802fb17098e39ccc73f2c7b0cf1d6f65877e6e4945e425034435d7c4cd15250ae6a1d7c43f7f2a31f22d61ebd9e690af72c098c8a684e27454b4c4deab51998917c2976d359b260847605b735610dd3ad677579dadfda17b90937f8aba4b969083d73bf8b0dc861865707136d055ca6581ffb512a9373715740d122de464a1f426ec073ee4d47a09e12f483e7ed84be666ea08ca9673f75ca1be833c3597cbff327ab243a306a59996411c37908a7ba3a11bc6fe6d6c9aaad35c2f5c9859c08704d770e435f84360405dbf287fd102c3c5c922bea1359360f007704f260231e0018cc386d668824737b6ce0fcd622b02510cfdae8370d7c584000bc1780bc5c1d440e9136b6655c1a49609a5886c5c7223aeb38974d07ae835fec5ddd1569292d59c177eca91ec94776f43824f541ae0e57e18f9c84c94730499191ca30ae3fcb6b767f1f1eb50c0c159219b5d1ccb7ee5993d23fd178866c259e0c5f513037a55c3e466b8efb371d13dfd5665acbae7879aff31d5a53615c3ffce8cc3e81ad810e037bb330bbec9e64292d1ce595f00c5c4a4905b65a2f1b73a98aa8b004b7413d56b831264576a912f529f19f0268d70918e37a05f154bf5823a096d46f2af73493c1b9787907f24b2b470aaaa2cbe22717bf02c765cba977f088ec46478009070823ce90f382433fa866ca1153b88b15e42096ba8b9ba96528e3048c72e3fd02e3c8a9c112bcc854b383d0e036ef5b380429d598e93c6d6b7b6869107db6cc739d320be39eb3d82658416d0f6b899c16c1c377b7f19ae759a4c2b956ac47296ab0bb839604c12950ae51be5731a1000fcd52d2412e846536e69a779f93d12c616bd75fb00605117cecc708a0db8f28033e56dc00e595672b564c7c9f39c8e422245dc20801b01638beaad20a73f9ed567274dceaad2d462a70345aba8972434aab2a7c7ecd1f01126d15bf8f67729e4f3ad311ada4ced009169778360ad0c131ed1c5e487c6f895273ca57c3ecd6920269f47f499f6a5a7a057a98ca5934f83d280f827b2f183456a39cdf90d96c0940fb8933e9af886d7d3e1cb209f7ab5458c2949add5416d25140d759fd74365f7184d9d0cf000f8e4f7dffb84cca3d4e4f10c832ba2dd313115c85a9d72e700806be40851edb84572dde169faba279797dda561253fb5bbc50c6bf747b65b6201208bf090bc36d2b748ffb22e8cb98911e0c2cb185835c0118fed5591c10dbc8260a724b9e7c7bbf6dd5623b00c72c7b5daf6d8fc7fb647064c1220898c648856ac449de584cf3a17913e14fdfdefeae2e5bfbcc7e6b90215afe1823a68dd9591ce8a5c5100ad3a94335e94ce5ea6e7a3d74daf3c21403d65496c7a99be9b7f9123a6cc684c3be3879ad76b57dbcc49070611ae59833e4ce157c197b422a0e597cf139205734ff004a5f86eb62b2a76759a7e602fb626eb955624eff22c6845c44d0326ef5e4e7a4611a2ff7bad030c72cb321ea101055df5e0d890a1900227c252aa732e4165d3d3f41a1e13377ff856de9d4905b66b3cc25ef3317a523749e074e2e1c889d53bd551b55ae4dc9ec2a0e049d302b9220bf227458f6e245981c4940e880a51b0e0a3d92e53f10047e5c245e25a9c0a5ca996eee3e14445ddb104b8e07f21f937b0d0992f399ace1ae1d0d4ae57ae010a35b0a82ee925a234f9a6df58a9e0c717cb81ee760ad679cb9b0635d228f4355f05c319d025e7df198d343a8d449a9efee6331d3a3074f090c9137c2d148ba21223c19e6cf6f6e1e3b2c4f7395f18ffca6ac6ec05d70b1e80c275693953ec2e18d647a982f90bf5ed24f0dd056dd731a023a1b9db1687219d7950129317622e5522c3f469f83e5c984ad248ddde3cb5793ad2734988da37020a151 _Values: - {fileID: 1381594469} - {fileID: 1381594468} @@ -15199,25 +15459,9 @@ MonoBehaviour: - {fileID: 21300000, guid: d5da7e971c583dd4493fab864dcb84ef, type: 3} - {fileID: 2800000, guid: 2ef3369460b480c41a1ca769aa259384, type: 3} - {fileID: 21300000, guid: 2ef3369460b480c41a1ca769aa259384, type: 3} - - {fileID: 21300000, guid: bad6c0f0bf6c3aa4690d400a757fa284, type: 3} - - {fileID: 21300006, guid: bad6c0f0bf6c3aa4690d400a757fa284, type: 3} - - {fileID: 21300008, guid: bad6c0f0bf6c3aa4690d400a757fa284, type: 3} - - {fileID: 21300042, guid: bad6c0f0bf6c3aa4690d400a757fa284, type: 3} - - {fileID: 2800000, guid: 9ce434ac86a021e418c3060399e7abdd, type: 3} - - {fileID: 3666431415229514628, guid: 9ce434ac86a021e418c3060399e7abdd, type: 3} - - {fileID: 6653508582940395624, guid: 81e4191bebbffee49a87679d87cdc04e, type: 3} - - {fileID: 6499297482333762980, guid: 81e4191bebbffee49a87679d87cdc04e, type: 3} - - {fileID: 571800556104604513, guid: 81e4191bebbffee49a87679d87cdc04e, type: 3} - - {fileID: 2800000, guid: 81e4191bebbffee49a87679d87cdc04e, type: 3} - - {fileID: 2800000, guid: 511631c7a28707b48a1b5b9daa425951, type: 3} - - {fileID: 21300000, guid: 511631c7a28707b48a1b5b9daa425951, type: 3} - - {fileID: 21300000, guid: a43358f5c0cff0849bd9243110ff33a6, type: 3} - - {fileID: 2800000, guid: a43358f5c0cff0849bd9243110ff33a6, type: 3} - {fileID: 21300124, guid: 9bd9265533309304db171aa9f916554a, type: 3} - {fileID: 2800000, guid: 9bd9265533309304db171aa9f916554a, type: 3} - {fileID: 21300122, guid: 9bd9265533309304db171aa9f916554a, type: 3} - - {fileID: 21300026, guid: bad6c0f0bf6c3aa4690d400a757fa284, type: 3} - - {fileID: 2800000, guid: bad6c0f0bf6c3aa4690d400a757fa284, type: 3} - {fileID: 21300000, guid: 28865e3766dc95c45b0a5720af378d53, type: 3} - {fileID: 2800000, guid: 28865e3766dc95c45b0a5720af378d53, type: 3} - {fileID: 2800000, guid: 358b5d9f23bc9413e87c9948acc67ee1, type: 3} @@ -15270,7 +15514,6 @@ MonoBehaviour: - {fileID: 21300000, guid: ae081045687b08948a1b166f44643dee, type: 3} - {fileID: 2800000, guid: 4a4cdd1b816f2c14e8f99597ac619de1, type: 3} - {fileID: 21300000, guid: 4a4cdd1b816f2c14e8f99597ac619de1, type: 3} - - {fileID: 21300030, guid: bad6c0f0bf6c3aa4690d400a757fa284, type: 3} - {fileID: 2800000, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} - {fileID: 21300018, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} - {fileID: 2800000, guid: 800d082fc01ca114f86956479395844d, type: 3} @@ -15533,20 +15776,6 @@ MonoBehaviour: - {fileID: 21300010, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} - {fileID: 21300000, guid: ba19c3c8a5cc12841a5296ee7c2a1c0b, type: 3} - {fileID: 2800000, guid: ba19c3c8a5cc12841a5296ee7c2a1c0b, type: 3} - - {fileID: 21300000, guid: 4ca9e709a65faf543a1b376009b64e12, type: 3} - - {fileID: 2800000, guid: 4ca9e709a65faf543a1b376009b64e12, type: 3} - - {fileID: 2800000, guid: 0d638d1d0bd5acb4094aec795e12958f, type: 3} - - {fileID: 21300000, guid: 0d638d1d0bd5acb4094aec795e12958f, type: 3} - - {fileID: 21300000, guid: 465da28a3b32776439f838508cc69022, type: 3} - - {fileID: 2800000, guid: 465da28a3b32776439f838508cc69022, type: 3} - - {fileID: 21300000, guid: 5600988dca3baa14ab4b4b89f00f879e, type: 3} - - {fileID: 2800000, guid: 5600988dca3baa14ab4b4b89f00f879e, type: 3} - - {fileID: 2800000, guid: c35fe602e21b38542ba33e1db2731a5f, type: 3} - - {fileID: 21300000, guid: c35fe602e21b38542ba33e1db2731a5f, type: 3} - - {fileID: 21300000, guid: b8c0f4c828e8022498c8a5c6c0fa8ec4, type: 3} - - {fileID: 2800000, guid: b8c0f4c828e8022498c8a5c6c0fa8ec4, type: 3} - - {fileID: 3971991809147571245, guid: 81e4191bebbffee49a87679d87cdc04e, type: 3} - - {fileID: -5499634796404681808, guid: 81e4191bebbffee49a87679d87cdc04e, type: 3} - {fileID: 21300000, guid: 873b489a73575b14fa7f49597735beaa, type: 3} - {fileID: 2800000, guid: 873b489a73575b14fa7f49597735beaa, type: 3} - {fileID: 2800000, guid: 8548d034b532fc64f9e26ecfe5f35ff7, type: 3} @@ -15561,8 +15790,6 @@ MonoBehaviour: - {fileID: 21300000, guid: eec19781926cd2248b7c9abfde8db555, type: 3} - {fileID: 2800000, guid: 1e41e49e206bc2947b8943351eed53d3, type: 3} - {fileID: 21300000, guid: 1e41e49e206bc2947b8943351eed53d3, type: 3} - - {fileID: -3168733581550749585, guid: f7043b7291f49844b9671b3d3dedcbb5, type: 3} - - {fileID: 2800000, guid: f7043b7291f49844b9671b3d3dedcbb5, type: 3} - {fileID: 21300000, guid: 0db74eaedc5768049b3b62b9e6149b09, type: 3} - {fileID: 2800000, guid: 0db74eaedc5768049b3b62b9e6149b09, type: 3} - {fileID: 2800000, guid: b325a13e94f3bac4199e75b91fa98449, type: 3} @@ -15589,12 +15816,9 @@ MonoBehaviour: - {fileID: 4800000, guid: e6e9a19c3678ded42a3bc431ebef7dbd, type: 3} - {fileID: 4800000, guid: 36e335017ad71d54fbb10842863188ae, type: 3} - {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} - - {fileID: 2895064947943234598, guid: e7170b34430d5ef44bb8add062be7881, type: 3} - - {fileID: -196146090775662410, guid: a9f670f4eae962b4683c35ae3d1db878, type: 3} - {fileID: 4800000, guid: 952471cc7e81a214fbe1eade4ae7c649, type: 3} - {fileID: 2100000, guid: 72c44f820e292664ead684b85643fada, type: 2} - {fileID: -6259472251413350831, guid: 00cafe0a18485bf4986d87092f3b2c63, type: 3} - - {fileID: -1580535799172915004, guid: 2b0c4bbc795c1cd458a0e991993226f3, type: 3} - {fileID: -1048756183676823253, guid: 9b87c0dd981e72b4abff6b56929b3e68, type: 3} - {fileID: 8900000, guid: c74839fccf2b6454386ad1ed9c9c8d68, type: 3} - {fileID: 2100000, guid: 38f0eb65c271ec44d8c337790f7022cb, type: 2} @@ -15605,14 +15829,8 @@ MonoBehaviour: - {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} - {fileID: 2100000, guid: b39306d2c39754d0aafabe8570b8e640, type: 2} - {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 2100000, guid: 85100f2846b96ab4db6a40b985d86c31, type: 2} - - {fileID: 2100000, guid: 434d7023f5e92d542b23666ffb61e63d, type: 2} - {fileID: 10750, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 2800000, guid: 8efb9c5cb7c29a7409a78be182c20b05, type: 3} - - {fileID: 2100000, guid: 2551f16b11627614f854189f0bd1f45b, type: 2} - {fileID: 4800000, guid: 21b28f3ee4b3c13408ed85c229008f40, type: 3} - - {fileID: 2100000, guid: 46576ebd24ca95b418aa0c64e9a60f53, type: 2} - - {fileID: 7933299137048178034, guid: a9f670f4eae962b4683c35ae3d1db878, type: 3} - {fileID: 2100000, guid: 69c3c648559bfd34eaae3ff327107596, type: 2} - {fileID: 8900000, guid: b8fb5f4647ab89042bf7105dcd3fd660, type: 3} - {fileID: 2100000, guid: 68b89d8b3cdda9a47b7dbcacade1f2b5, type: 2} @@ -15635,7 +15853,6 @@ MonoBehaviour: - {fileID: 4833579217543758956, guid: 53e14ab421bb98b48b1d276bf32cddd2, type: 3} - {fileID: 2100000, guid: e823cd5b5d27c0f4b8256e7c12ee3e6d, type: 2} - {fileID: 4800000, guid: 0406db5a14f94604a8c57ccfbc9f3b46, type: 3} - - {fileID: 2800000, guid: 0dcefafee79e7de43ad13fab5cdb7135, type: 3} - {fileID: 2800000, guid: 5392668a037c8bf49b4479948ee1f3fd, type: 3} - {fileID: 662544174} - {fileID: 662544175} @@ -15693,7 +15910,6 @@ MonoBehaviour: - {fileID: -6860537945389345203, guid: 98ad67e4ae4dbb54eb05b761fb2a2c02, type: 3} - {fileID: 4800000, guid: 82c42a0b06f4f684db1ee2c535fb985c, type: 3} - {fileID: 2100000, guid: a2bfccdea313bee4cbe611dfd2194b6c, type: 2} - - {fileID: 2100000, guid: ec25b894bde46e04496a23def0906022, type: 2} - {fileID: 2100000, guid: 99dec03033cf89c4b936367ceee96b05, type: 3} - {fileID: 2800000, guid: 99dec03033cf89c4b936367ceee96b05, type: 3} - {fileID: 2100000, guid: da9a51ce28f0d7443a5bcbdbe04c4f4b, type: 3} @@ -15965,8 +16181,6 @@ MonoBehaviour: - {fileID: 1441990266} - {fileID: 1441990268} - {fileID: 1441990265} - - {fileID: 21300000, guid: 0b9510d2790829140953392aae2b6679, type: 3} - - {fileID: 2800000, guid: 0b9510d2790829140953392aae2b6679, type: 3} - {fileID: 2800000, guid: 80694812942b91b42bc4aad99071ba7e, type: 3} - {fileID: 21300000, guid: 80694812942b91b42bc4aad99071ba7e, type: 3} - {fileID: 576946070} @@ -16515,13 +16729,8 @@ MonoBehaviour: - {fileID: -6205461316961850552, guid: fe42c8b526e77e54ab91d0590272d9e8, type: 3} - {fileID: 2800000, guid: 87529e0fd28c3774fa086315a42b1860, type: 3} - {fileID: 21300000, guid: 87529e0fd28c3774fa086315a42b1860, type: 3} - - {fileID: 2800000, guid: ea579184be3210e458d3beef7ebe7fe0, type: 3} - - {fileID: 21300000, guid: ea579184be3210e458d3beef7ebe7fe0, type: 3} - {fileID: 21300000, guid: 94f43f82d46dcdb4db47e75f6c65be01, type: 3} - {fileID: 2800000, guid: 94f43f82d46dcdb4db47e75f6c65be01, type: 3} - - {fileID: 2800000, guid: 3b9e073ee03f6614898a81df8af9c7ef, type: 3} - - {fileID: 21300000, guid: 3b9e073ee03f6614898a81df8af9c7ef, type: 3} - - {fileID: 21300036, guid: bad6c0f0bf6c3aa4690d400a757fa284, type: 3} - {fileID: 21300000, guid: 852af70e3243e31408aa8260c1ef13fb, type: 3} - {fileID: 2800000, guid: 852af70e3243e31408aa8260c1ef13fb, type: 3} - {fileID: 21300000, guid: 1e64f8ba631ae514e9a68eaf3620f9a9, type: 3} @@ -16530,19 +16739,18 @@ MonoBehaviour: - {fileID: 2800000, guid: 98c2954aeef16da43a5acdda694615b0, type: 3} - {fileID: 21300000, guid: a9fd44c7daf773c489b86519d261b198, type: 3} - {fileID: 2800000, guid: a9fd44c7daf773c489b86519d261b198, type: 3} - - {fileID: 21300000, guid: eb5037930d3bbe143a8a570722950901, type: 3} - - {fileID: 2800000, guid: eb5037930d3bbe143a8a570722950901, type: 3} - - {fileID: -1592531358028221409, guid: 81e4191bebbffee49a87679d87cdc04e, type: 3} - - {fileID: 2800000, guid: 7fae6cb1e0ec9ab4dabf73686e5f0aa1, type: 3} - - {fileID: 21300000, guid: 7fae6cb1e0ec9ab4dabf73686e5f0aa1, type: 3} - - {fileID: 21300000, guid: b71d66e1b0c0c474fb9f1cf92d3e9e9e, type: 3} - - {fileID: 2800000, guid: b71d66e1b0c0c474fb9f1cf92d3e9e9e, type: 3} - - {fileID: 2800000, guid: 544caa0353497f24faed28c569d18fe4, type: 3} - - {fileID: 21300000, guid: 544caa0353497f24faed28c569d18fe4, type: 3} - - {fileID: 21300000, guid: 4feff79cdc04e1145884512f088bdfde, type: 3} - - {fileID: 2800000, guid: 4feff79cdc04e1145884512f088bdfde, type: 3} - - {fileID: 1396070358, guid: 6582f34ddd5f686408c019550cd94c9d, type: 3} - - {fileID: 2800000, guid: 6582f34ddd5f686408c019550cd94c9d, type: 3} + - {fileID: 11500000, guid: 4dbc31cf60d8a0549a2be9b95e816376, type: 3} + - {fileID: 2800000, guid: f5775a9d8f75ec744939ba3702a7fe05, type: 3} + - {fileID: 2100000, guid: 40caca121c246564eaba4b6de7329e20, type: 2} + - {fileID: 2899945975172320258, guid: 85c3e9578b45a414bb6507f90e48720a, type: 3} + - {fileID: 4428011038987230051, guid: 3f216541647c185428ca5581509954d8, type: 3} + - {fileID: 8064170251032554610, guid: 3f216541647c185428ca5581509954d8, type: 3} + - {fileID: 7482667652216324306, guid: f5775a9d8f75ec744939ba3702a7fe05, type: 3} + - {fileID: 2100000, guid: 720c743be19718447a881adf4e2707ca, type: 2} + - {fileID: 4800000, guid: d54759aa63d2527499f0c933fdf37b78, type: 3} + - {fileID: 3702079360535131164, guid: 3f216541647c185428ca5581509954d8, type: 3} + - {fileID: 5988426910569796711, guid: 85c3e9578b45a414bb6507f90e48720a, type: 3} + - {fileID: 11400000, guid: 031554f259eac2848a3f78425c67e910, type: 2} - {fileID: 2800000, guid: 2e7855b3fe5072d4e89ef64d4e988b0a, type: 3} - {fileID: 21300000, guid: 2e7855b3fe5072d4e89ef64d4e988b0a, type: 3} - {fileID: 21300010, guid: 358b5d9f23bc9413e87c9948acc67ee1, type: 3} @@ -19255,14 +19463,208 @@ MonoBehaviour: - {fileID: 2020657900} - {fileID: 2020657898} - {fileID: 2020657899} - - {fileID: 2800000, guid: 02f78a9ec76d40f49bfac78c64a754d1, type: 3} - - {fileID: 2800000, guid: f66c4aa44c09b6a42a2b5b9f9334d824, type: 3} - - {fileID: 2800000, guid: b0f85f7da5042c0448a526d5ecacbfa9, type: 3} - {fileID: 638176263} - {fileID: 638176264} - {fileID: 638176267} - {fileID: 638176266} - {fileID: 638176265} + - {fileID: 5720444309352870257, guid: 85c3e9578b45a414bb6507f90e48720a, type: 3} + - {fileID: 8575963574254877811, guid: 85c3e9578b45a414bb6507f90e48720a, type: 3} + - {fileID: 7626679668481135829, guid: 85c3e9578b45a414bb6507f90e48720a, type: 3} + - {fileID: 1456264023} + - {fileID: 1456264022} + - {fileID: 1456264025} + - {fileID: 1456264024} + - {fileID: 58502031} + - {fileID: 58502027} + - {fileID: 58502030} + - {fileID: 58502029} + - {fileID: 58502028} + - {fileID: 2100000, guid: f0cf39229422d1b428bf04e0bc828dc6, type: 2} + - {fileID: 4800000, guid: fb9c9eda58078b14688aa3ca7e93eb3b, type: 3} + - {fileID: 4800000, guid: da07703fcc09f8d4799221050659bd55, type: 3} + - {fileID: 2800000, guid: 3b7ed371b1045a7468c77d301d66f1b9, type: 3} + - {fileID: 2800000, guid: 505bbb3b422a41f44b0bbea401e13fdc, type: 3} + - {fileID: 2100000, guid: ccad1289735ff2846acdd1497362d45b, type: 2} + - {fileID: 3918812215425595527, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 3079336707146369278, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 2800000, guid: ffb18e7c2ba53c84d850a83811f543ea, type: 3} + - {fileID: 4832900275935109613, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 6461584531587415413, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 5922952087749752714, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 2784291562309175680, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 8253441719605867906, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 8432502363001158554, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 1702456025656505772, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 2100000, guid: 578d8aa95b57c2448b22029e590b51c9, type: 2} + - {fileID: 1948359583767802474, guid: 1b4d77614bc32d64393fd80c3d80f7db, type: 3} + - {fileID: 2100000, guid: 24202603b497fb941af8d6bed0a66c12, type: 2} + - {fileID: 7182650156232976990, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 5431012294727193458, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 11500000, guid: b37c44f04f3075045aef6be2c0506551, type: 3} + - {fileID: 6760736669114547885, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 8859053657663366676, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 11500000, guid: ea0771a0c87f746769a9ffd7286a0665, type: 3} + - {fileID: 5131198242182004625, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 2018239485658491446, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 8164676518475223736, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 6428257694934577630, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 6696432753679549629, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 2349867852438551661, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 2228000400836702485, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 3411072126441206061, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 413584224594807826, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 6279482037342195367, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 1532952502113335888, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 1149845662485922453, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 1858639822223451112, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 2909987453499239890, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 74257530987263401, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 2100000, guid: 5bb276fc3eccc674eab768c866424df0, type: 2} + - {fileID: 2800000, guid: a343a8560a860bf4188c8f63103f455a, type: 3} + - {fileID: 2100000, guid: a400b0137c2b44b4f9379311124fe1a1, type: 2} + - {fileID: 2800000, guid: 248ba9b81ec62574eb5c6e70be1e1bdb, type: 3} + - {fileID: 3203352819390645997, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 2800000, guid: d7b8dd640e42194458cd8292833fb86d, type: 3} + - {fileID: 2828557749403774688, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 2100000, guid: a9dcdb241a7784643b7fe4ea67ffa523, type: 2} + - {fileID: 2655143723270843780, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 7452429476223591256, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 1230482840604333981, guid: 2f2e97c8a35330f49a9cb31ec0f075bf, type: 3} + - {fileID: 1456264023} + - {fileID: 1456264025} + - {fileID: 1456264024} + - {fileID: 1456264022} + - {fileID: 207574358} + - {fileID: 207574362} + - {fileID: 207574361} + - {fileID: 207574360} + - {fileID: 207574359} + - {fileID: 4800000, guid: 1828b8a7039d30b4497ec4b19fd57158, type: 3} + - {fileID: 2100000, guid: 4a53388d09164bb43971571879adc754, type: 2} + - {fileID: 207574359} + - {fileID: 207574361} + - {fileID: 207574362} + - {fileID: 207574360} + - {fileID: 207574358} + - {fileID: 58502027} + - {fileID: 58502029} + - {fileID: 58502028} + - {fileID: 58502031} + - {fileID: 58502030} + - {fileID: 1456264024} + - {fileID: 1456264022} + - {fileID: 1456264025} + - {fileID: 1456264023} + - {fileID: 201694902} + - {fileID: 201694901} + - {fileID: 932077335} + - {fileID: 932077333} + - {fileID: 932077331} + - {fileID: 201694900} + - {fileID: 201694903} + - {fileID: 932077334} + - {fileID: 932077332} + - {fileID: 2045128794} + - {fileID: 2045128793} + - {fileID: 1018314874} + - {fileID: 1018314872} + - {fileID: 1018314873} + - {fileID: 2045128791} + - {fileID: 2045128792} + - {fileID: 2045128790} + - {fileID: 1018314875} + - {fileID: 1700873339} + - {fileID: 1700873341} + - {fileID: 1700873340} + - {fileID: 1700873338} + - {fileID: 1186443394} + - {fileID: 1186443398} + - {fileID: 1186443395} + - {fileID: 348373018} + - {fileID: 1186443396} + - {fileID: 1186443397} + - {fileID: 348373020} + - {fileID: 348373019} + - {fileID: 348373021} + - {fileID: 1721727718} + - {fileID: 1721727721} + - {fileID: 1721727717} + - {fileID: 1721727719} + - {fileID: 1721727720} + - {fileID: 1866213717} + - {fileID: 107817246} + - {fileID: 1866213716} + - {fileID: 107817242} + - {fileID: 107817245} + - {fileID: 107817243} + - {fileID: 1866213714} + - {fileID: 1866213715} + - {fileID: 107817244} + - {fileID: 1555019814} + - {fileID: 1555019813} + - {fileID: 1555019812} + - {fileID: 1555019810} + - {fileID: 1555019811} + - {fileID: 1295924911} + - {fileID: 1295924910} + - {fileID: 1295924909} + - {fileID: 1494838087} + - {fileID: 1494838090} + - {fileID: 1494838089} + - {fileID: 1295924913} + - {fileID: 1295924912} + - {fileID: 1494838088} + - {fileID: 1323721975} + - {fileID: 1323721978} + - {fileID: 1323721977} + - {fileID: 695359563} + - {fileID: 695359560} + - {fileID: 695359562} + - {fileID: 695359561} + - {fileID: 1323721976} + - {fileID: 695359559} + - {fileID: 1887091803} + - {fileID: 1887091804} + - {fileID: 1907989929} + - {fileID: 1907989928} + - {fileID: 1907989932} + - {fileID: 1907989931} + - {fileID: 1907989930} + - {fileID: 1887091805} + - {fileID: 1887091802} + - {fileID: 1466664098} + - {fileID: 1541614832} + - {fileID: 1541614835} + - {fileID: 1541614834} + - {fileID: 1466664100} + - {fileID: 1541614833} + - {fileID: 1466664099} + - {fileID: 1466664097} + - {fileID: 1466664101} + - {fileID: 1595059335} + - {fileID: 1395455368} + - {fileID: 1595059334} + - {fileID: 1395455366} + - {fileID: 1595059338} + - {fileID: 1595059337} + - {fileID: 1595059336} + - {fileID: 1395455367} + - {fileID: 1395455369} + - {fileID: 452146013} + - {fileID: 1491057507} + - {fileID: 1491057508} + - {fileID: 1491057509} + - {fileID: 1491057506} + - {fileID: 1491057510} + - {fileID: 452146015} + - {fileID: 452146014} + - {fileID: 452146016} + - {fileID: 11500000, guid: fe30e455c04f33342bb3d1c227855682, type: 3} + - {fileID: 832575524} + - {fileID: 11500000, guid: 909ea7d136ae0c349a24f02cac1f5f71, type: 3} + - {fileID: 2800000, guid: 7f808d0c8608b954d8f20cb4132c3049, type: 3} + - {fileID: 4800000, guid: 5fd213d22763447c4aa106605e06184e, type: 3} --- !u!4 &1926461710 Transform: m_ObjectHideFlags: 0 diff --git a/Assets/Scenes/StartMenu.unity b/Assets/Scenes/StartMenu.unity index b45f9410..9c41168f 100644 --- a/Assets/Scenes/StartMenu.unity +++ b/Assets/Scenes/StartMenu.unity @@ -8879,6 +8879,74 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2137073449} m_CullTransparentMesh: 0 +--- !u!1001 &524415195869365186 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4428011038987230051, guid: 3f216541647c185428ca5581509954d8, + type: 3} + propertyPath: m_Name + value: DiamondRipple + objectReference: {fileID: 0} + - target: {fileID: 8064170251032554610, guid: 3f216541647c185428ca5581509954d8, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8064170251032554610, guid: 3f216541647c185428ca5581509954d8, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8064170251032554610, guid: 3f216541647c185428ca5581509954d8, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8064170251032554610, guid: 3f216541647c185428ca5581509954d8, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8064170251032554610, guid: 3f216541647c185428ca5581509954d8, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8064170251032554610, guid: 3f216541647c185428ca5581509954d8, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8064170251032554610, guid: 3f216541647c185428ca5581509954d8, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8064170251032554610, guid: 3f216541647c185428ca5581509954d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8064170251032554610, guid: 3f216541647c185428ca5581509954d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8064170251032554610, guid: 3f216541647c185428ca5581509954d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3f216541647c185428ca5581509954d8, type: 3} --- !u!222 &4337614253254700757 CanvasRenderer: m_ObjectHideFlags: 0 @@ -16426,6 +16494,74 @@ MonoBehaviour: m_EditorClassIdentifier: m_HorizontalFit: 0 m_VerticalFit: 2 +--- !u!1001 &9028405135598409605 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2899945975172320258, guid: 85c3e9578b45a414bb6507f90e48720a, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2899945975172320258, guid: 85c3e9578b45a414bb6507f90e48720a, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2899945975172320258, guid: 85c3e9578b45a414bb6507f90e48720a, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2899945975172320258, guid: 85c3e9578b45a414bb6507f90e48720a, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2899945975172320258, guid: 85c3e9578b45a414bb6507f90e48720a, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2899945975172320258, guid: 85c3e9578b45a414bb6507f90e48720a, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2899945975172320258, guid: 85c3e9578b45a414bb6507f90e48720a, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2899945975172320258, guid: 85c3e9578b45a414bb6507f90e48720a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2899945975172320258, guid: 85c3e9578b45a414bb6507f90e48720a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2899945975172320258, guid: 85c3e9578b45a414bb6507f90e48720a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988426910569796711, guid: 85c3e9578b45a414bb6507f90e48720a, + type: 3} + propertyPath: m_Name + value: CircleRipple + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 85c3e9578b45a414bb6507f90e48720a, type: 3} --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 @@ -16436,3 +16572,5 @@ SceneRoots: - {fileID: 250681945} - {fileID: 398605647} - {fileID: 1050672441} + - {fileID: 524415195869365186} + - {fileID: 9028405135598409605} diff --git a/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUIEmissionColorPicker.cs b/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUIEmissionColorPicker.cs index 785bbb00..b91159ef 100644 --- a/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUIEmissionColorPicker.cs +++ b/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUIEmissionColorPicker.cs @@ -12,6 +12,8 @@ namespace Ichni.Editor public class DynamicUIEmissionColorPicker : DynamicUIElement { private string emissionEnabledName, colorParameterName, emissionIntensityName; + private bool canDisableEmission; + public Toggle toggleEnableEmission; public TMP_InputField inputFieldEmissionR; public TMP_InputField inputFieldEmissionG; @@ -27,15 +29,27 @@ namespace Ichni.Editor string emissionEnabledName, string colorParameterName, string emissionIntensityName) { base.Initialize(baseElement, title, colorParameterName); + + canDisableEmission = emissionEnabledName != "NULL"; //如果对应的EmissionColor强制开启,那么其enabledName为"NULL",不需要显示Toggle + this.emissionEnabledName = emissionEnabledName; this.colorParameterName = colorParameterName; this.emissionIntensityName = emissionIntensityName; - bool enableEmission = (bool)connectedBaseElement.GetType().GetField(emissionEnabledName).GetValue(connectedBaseElement); + if(canDisableEmission) + { + bool enableEmission = (bool)connectedBaseElement.GetType().GetField(emissionEnabledName).GetValue(connectedBaseElement); + toggleEnableEmission.isOn = enableEmission; + toggleEnableEmission.onValueChanged.AddListener(_ => ApplyParameters()); + } + else + { + toggleEnableEmission.gameObject.SetActive(false); + } + Color emissionColor = (Color)connectedBaseElement.GetType().GetField(colorParameterName).GetValue(connectedBaseElement); float emissionIntensity = (float)connectedBaseElement.GetType().GetField(emissionIntensityName).GetValue(connectedBaseElement); - toggleEnableEmission.isOn = enableEmission; inputFieldEmissionR.text = emissionColor.r.ToString(); inputFieldEmissionG.text = emissionColor.g.ToString(); inputFieldEmissionB.text = emissionColor.b.ToString(); @@ -48,8 +62,6 @@ namespace Ichni.Editor sliderG.onValueChanged.AddListener(SliderChange); sliderB.onValueChanged.AddListener(SliderChange); - - toggleEnableEmission.onValueChanged.AddListener(_ => ApplyParameters()); inputFieldEmissionR.onEndEdit.AddListener(_ => ApplyParameters()); inputFieldEmissionG.onEndEdit.AddListener(_ => ApplyParameters()); inputFieldEmissionB.onEndEdit.AddListener(_ => ApplyParameters()); @@ -64,8 +76,12 @@ namespace Ichni.Editor Color emissionColor = new Color(float.Parse(inputFieldEmissionR.text), float.Parse(inputFieldEmissionG.text), float.Parse(inputFieldEmissionB.text)); float emissionIntensity = float.Parse(inputFieldEmissionI.text); - - connectedBaseElement.GetType().GetField(emissionEnabledName).SetValue(connectedBaseElement, enableEmission); + + if (canDisableEmission) + { + connectedBaseElement.GetType().GetField(emissionEnabledName).SetValue(connectedBaseElement, enableEmission); + } + connectedBaseElement.GetType().GetField(colorParameterName).SetValue(connectedBaseElement, emissionColor); connectedBaseElement.GetType().GetField(emissionIntensityName).SetValue(connectedBaseElement, emissionIntensity); colorPreview.color = emissionColor; @@ -82,8 +98,11 @@ namespace Ichni.Editor public override DynamicUIElement AddListenerFunction(UnityAction action) { - toggleEnableEmission.onValueChanged.AddListener(_ => action()); - + if (canDisableEmission) + { + toggleEnableEmission.onValueChanged.AddListener(_ => action()); + } + inputFieldEmissionR.onEndEdit.AddListener(_ => action()); inputFieldEmissionG.onEndEdit.AddListener(_ => action()); inputFieldEmissionB.onEndEdit.AddListener(_ => action()); diff --git a/Assets/Scripts/EditorGame/Base/GeneralSubmodules/EffectSubmodule.cs b/Assets/Scripts/EditorGame/Base/GeneralSubmodules/EffectSubmodule.cs index 096adf06..1e0f3715 100644 --- a/Assets/Scripts/EditorGame/Base/GeneralSubmodules/EffectSubmodule.cs +++ b/Assets/Scripts/EditorGame/Base/GeneralSubmodules/EffectSubmodule.cs @@ -2,6 +2,7 @@ using System.Collections; using System.Collections.Generic; using Ichni.Editor; using Ichni.RhythmGame.Beatmap; +using Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse; using Sirenix.Utilities; using UnityEngine; using UnityEngine.Events; @@ -96,8 +97,9 @@ namespace Ichni.RhythmGame var effectNameInputField = inspector.GenerateInputField(subcontainer, "Effect Name"); var addEffectButton = inspector.GenerateButton(this, subcontainer, "Add Effect", () => { - if (EffectCollection.TryGetValue(effectNameInputField.GetValue(), out var newEffect)) + if (EffectCollection.TryGetValue(effectNameInputField.GetValue(), out EffectBase newEffect)) { + newEffect.attachedGameElement = attachedGameElement; effectCollection[effect.Key].Add(newEffect); inspectorMain.SetInspector(attachedGameElement); } @@ -128,14 +130,15 @@ namespace Ichni.RhythmGame { { "Bloom", new BloomEffect(1, 2, CustomCurvePresets.Parabolic(1, 0, 1)) }, { "CameraShake", new CameraShakeEffect(1, 50, 1, 1, 1) }, - {"CameraOffset", new CameraOffsetEffect(0.2f, Vector3.forward, CustomCurvePresets.CustomPeakTimeParabolic(1,0,1,0.3f))}, - {"CameraTilt", new CameraTiltEffect(0.2f, new Vector3(0,0,5), CustomCurvePresets.CustomPeakTimeParabolic(1,0,1, 0.3f))}, + { "CameraOffset", new CameraOffsetEffect(0.2f, Vector3.forward, CustomCurvePresets.CustomPeakTimeParabolic(1, 0, 1, 0.3f)) }, + { "CameraTilt", new CameraTiltEffect(0.2f, new Vector3(0, 0, 5), CustomCurvePresets.CustomPeakTimeParabolic(1, 0, 1, 0.3f)) }, { "ChromaticAberration", new ChromaticAberrationEffect(1, 1, CustomCurvePresets.Parabolic(1, 0, 1)) }, { "Vignette", new VignetteEffect(1, 1, 0.4f, Color.black, CustomCurvePresets.Parabolic(1, 0, 1)) }, { "SetInteger", new SetIntegerEffect("New Variable", 0, false, 0, 1) }, { "EnableControl", new EnableControlEffect(null, "New Variable", 0, false, "") }, { "LowPassFilter", new LowPassFilterEffect(1, 10, CustomCurvePresets.Parabolic(1, 0, 1)) }, - { "HighPassFilter", new HighPassFilterEffect(1, 22000, CustomCurvePresets.Parabolic(1, 0, 1)) } + { "HighPassFilter", new HighPassFilterEffect(1, 22000, CustomCurvePresets.Parabolic(1, 0, 1)) }, + { "DTM_RippleEffect", new DTMRippleEffect(false, 0.5f, Color.white, 0) } }; } @@ -195,6 +198,7 @@ namespace Ichni.RhythmGame } public BaseElement_BM matchedBM { get; set; } + public GameElement attachedGameElement { get; set; } /// /// 效果的持续时间,如果为0则表示瞬间效果 diff --git a/Assets/Scripts/Manager/BasePrefabsCollection.cs b/Assets/Scripts/Manager/BasePrefabsCollection.cs index b53e5402..620a4eb4 100644 --- a/Assets/Scripts/Manager/BasePrefabsCollection.cs +++ b/Assets/Scripts/Manager/BasePrefabsCollection.cs @@ -5,74 +5,70 @@ using UnityEngine; using UnityEngine.Profiling; using UnityEngine.Serialization; -[CreateAssetMenu(fileName = "BasePrefabsCollection", menuName = "Ichni/BasePrefabsCollection", order = 0)] -public class BasePrefabsCollection : SerializedScriptableObject +namespace Ichni.RhythmGame { - [Title("基础预制体")] public GameObject emptyObject; - public GameObject elementFolder; - public GameObject gameCamera; + [CreateAssetMenu(fileName = "BasePrefabsCollection", menuName = "Ichni/BasePrefabsCollection", order = 0)] + public class BasePrefabsCollection : SerializedScriptableObject + { + [Title("基础预制体")] public GameObject emptyObject; + public GameObject elementFolder; + public GameObject gameCamera; - [Title("Track相关")] public GameObject track; - public GameObject trackDisplay; - public GameObject pathNode; - public Material defaultTrackMaterial; - public GameObject sampler; + [Title("Track相关")] public GameObject track; + public GameObject trackDisplay; + public GameObject pathNode; + public Material defaultTrackMaterial; + public GameObject sampler; - [Title("Trail相关")] public GameObject trail; - public Material defaultTrailMaterial; + [Title("Trail相关")] public GameObject trail; + public Material defaultTrailMaterial; - [Title("Note 相关")] public GameObject tapNote; - public GameObject stayNote; - public GameObject holdNote; - public GameObject flickNote; - [Title("Note 判定UI")] - public GameObject fullscreenNearTimeHint; - public GameObject areaHint; - public GameObject triggerHint; + [Title("Note 相关")] public GameObject tapNote; + public GameObject stayNote; + public GameObject holdNote; + public GameObject flickNote; + [Title("Note 判定UI")] public GameObject fullscreenNearTimeHint; + public GameObject areaHint; + public GameObject triggerHint; - [Title("Effect相关")] - public GameObject bloomEffect; - public GameObject cameraShakeEffect; - public GameObject cameraTiltEffect; - public GameObject chromaticAberrationEffect; - public GameObject vignetteEffect; - public GameObject lowPassFilterEffect; - public GameObject highPassFilterEffect; + [Title("Effect相关")] public GameObject bloomEffect; + public GameObject cameraShakeEffect; + public GameObject cameraTiltEffect; + public GameObject chromaticAberrationEffect; + public GameObject vignetteEffect; + public GameObject lowPassFilterEffect; + public GameObject highPassFilterEffect; - [Title("Inspector相关")] - public GameObject inspectorSecondaryWindow; + [Title("Inspector相关")] public GameObject inspectorSecondaryWindow; - [Title("DynamicUI相关-Simple")] - public GameObject dynamicUIContainer; - public GameObject dynamicUISubcontainer; - public GameObject inputField; - public GameObject vector3InputField; - public GameObject parameterText; - public GameObject hintText; - public GameObject button; - public GameObject toggle; - public GameObject enumDropdown; - public GameObject stringListDropdown; - public GameObject baseColorPicker; - public GameObject emissionColorPicker; - [Title("DynamicUI相关-Composite")] - public GameObject generalSecondaryWindow; - public GameObject compositeParameterWindow; - public GameObject inputFieldUnit; - public GameObject animatedFloatUnit; - public GameObject animatedIntUnit; - public GameObject animatedBoolUnit; - public GameObject customCurveKeyframeUnit; - public GameObject customCurveWrapModeUnit; - public GameObject gradientColorKeyUnit; - public GameObject gradientAlphaKeyUnit; - public GameObject stringIntPairUnit; - [Title("图形化动画编辑器")] - public GameObject graphicalFlexibleFloatWindow; + [Title("DynamicUI相关-Simple")] public GameObject dynamicUIContainer; + public GameObject dynamicUISubcontainer; + public GameObject inputField; + public GameObject vector3InputField; + public GameObject parameterText; + public GameObject hintText; + public GameObject button; + public GameObject toggle; + public GameObject enumDropdown; + public GameObject stringListDropdown; + public GameObject baseColorPicker; + public GameObject emissionColorPicker; + [Title("DynamicUI相关-Composite")] public GameObject generalSecondaryWindow; + public GameObject compositeParameterWindow; + public GameObject inputFieldUnit; + public GameObject animatedFloatUnit; + public GameObject animatedIntUnit; + public GameObject animatedBoolUnit; + public GameObject customCurveKeyframeUnit; + public GameObject customCurveWrapModeUnit; + public GameObject gradientColorKeyUnit; + public GameObject gradientAlphaKeyUnit; + public GameObject stringIntPairUnit; + [Title("图形化动画编辑器")] public GameObject graphicalFlexibleFloatWindow; - //采音器 + //采音器 - [Title("Background相关")] - public Sprite defaultBackground; - public Material defaultSkyboxMaterial; -} + [Title("Background相关")] public Sprite defaultBackground; + public Material defaultSkyboxMaterial; + } +} \ No newline at end of file diff --git a/Assets/Scripts/Manager/CustomPrefabsCollection.cs b/Assets/Scripts/Manager/CustomPrefabsCollection.cs new file mode 100644 index 00000000..e89efe2a --- /dev/null +++ b/Assets/Scripts/Manager/CustomPrefabsCollection.cs @@ -0,0 +1,27 @@ +using System.Collections; +using System.Collections.Generic; +using Sirenix.OdinInspector; +using UnityEngine; + +namespace Ichni.RhythmGame +{ + [CreateAssetMenu(fileName = "BasePrefabsCollection", menuName = "Ichni/CustomPrefabsCollection", order = 0)] + public class CustomPrefabsCollection : SerializedScriptableObject + { + public string themeBundleName = "theme_bundle_name_here"; + public Dictionary Prefabs = new Dictionary(); + + public GameObject GetPrefab(string prefabName) + { + if (Prefabs.TryGetValue(prefabName, out GameObject prefab)) + { + return prefab; + } + else + { + Debug.LogError($"Prefab '{prefabName}' not found in {themeBundleName} collection."); + return null; + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Manager/CustomPrefabsCollection.cs.meta b/Assets/Scripts/Manager/CustomPrefabsCollection.cs.meta new file mode 100644 index 00000000..4047a0f1 --- /dev/null +++ b/Assets/Scripts/Manager/CustomPrefabsCollection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4dbc31cf60d8a0549a2be9b95e816376 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Manager/EditorManager.cs b/Assets/Scripts/Manager/EditorManager.cs index e2fd17e9..3dabda2c 100644 --- a/Assets/Scripts/Manager/EditorManager.cs +++ b/Assets/Scripts/Manager/EditorManager.cs @@ -26,7 +26,7 @@ namespace Ichni public BackgroundController backgroundController; public GridController gridController; public CameraManager cameraManager; - public PostProcessingManager postProcessingManager; + public Ichni.Editor.PostProcessingManager postProcessingManager; public Canvas judgeHintCanvas; public Canvas inspectorCanvas; public Timeline timeline; @@ -39,6 +39,7 @@ namespace Ichni public NoteBase.NoteJudgeType currentJudgeType; public bool useNotePrefab; public BasePrefabsCollection basePrefabs; + public Dictionary customPrefabs; public NoteAudioCollection noteAudioCollection; [Title("Runtime Global Elements")] diff --git a/Assets/Settings/URP-Balanced.asset b/Assets/Settings/URP-Balanced.asset index aef05b84..ed5f36d2 100644 --- a/Assets/Settings/URP-Balanced.asset +++ b/Assets/Settings/URP-Balanced.asset @@ -19,8 +19,8 @@ MonoBehaviour: m_RendererDataList: - {fileID: 11400000, guid: e634585d5c4544dd297acaee93dc2beb, type: 2} m_DefaultRendererIndex: 0 - m_RequireDepthTexture: 0 - m_RequireOpaqueTexture: 0 + m_RequireDepthTexture: 1 + m_RequireOpaqueTexture: 1 m_OpaqueDownsampling: 1 m_SupportsTerrainHoles: 1 m_SupportsHDR: 1 diff --git a/Assets/Settings/URP-HighFidelity-Renderer.asset b/Assets/Settings/URP-HighFidelity-Renderer.asset index 006e3de9..7a3ab28f 100644 --- a/Assets/Settings/URP-HighFidelity-Renderer.asset +++ b/Assets/Settings/URP-HighFidelity-Renderer.asset @@ -1,5 +1,21 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!114 &-5115341559200278812 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f41bcf9b1f0eb6446907e2c52c9f2d39, type: 3} + m_Name: PixelateFeature + m_EditorClassIdentifier: + m_Active: 0 + settings: + renderPassEvent: 600 + pixelateMaterial: {fileID: 2100000, guid: f0cf39229422d1b428bf04e0bc828dc6, type: 2} --- !u!114 &-1878332245247344467 MonoBehaviour: m_ObjectHideFlags: 0 @@ -53,7 +69,10 @@ MonoBehaviour: hdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, type: 3} m_RendererFeatures: - {fileID: -1878332245247344467} - m_RendererFeatureMap: adc0de57c6d2eee5 + - {fileID: 9211144479881546400} + - {fileID: -5115341559200278812} + - {fileID: 2224949836353836081} + m_RendererFeatureMap: adc0de57c6d2eee5a0ca230a1a8fd47fe4161343f4a702b93114ef7e169ce01e m_UseNativeRenderPass: 0 postProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2} xrSystemData: {fileID: 11400000, guid: 60e1133243b97e347b653163a8c01b64, type: 2} @@ -92,7 +111,67 @@ MonoBehaviour: zFailOperation: 0 m_ShadowTransparentReceive: 1 m_RenderingMode: 2 - m_DepthPrimingMode: 0 + m_DepthPrimingMode: 1 m_CopyDepthMode: 0 m_AccurateGbufferNormals: 0 m_IntermediateTextureMode: 1 +--- !u!114 &2224949836353836081 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d5a1f9350d8fc2c46a372955ef0e73b5, type: 3} + m_Name: NBPostProcess + m_EditorClassIdentifier: + m_Active: 1 + downSampling: 0 + disturbanceLayerMask: + serializedVersion: 2 + m_Bits: 33554432 +--- !u!114 &9211144479881546400 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6b3d386ba5cd94485973aee1479b272e, type: 3} + m_Name: Grab + m_EditorClassIdentifier: + m_Active: 1 + settings: + passTag: Grab + Event: 600 + filterSettings: + RenderQueueType: 1 + LayerMask: + serializedVersion: 2 + m_Bits: 1024 + PassNames: + - Grab + overrideMaterial: {fileID: 0} + overrideMaterialPassIndex: 0 + overrideShader: {fileID: 4800000, guid: fb9c9eda58078b14688aa3ca7e93eb3b, type: 3} + overrideShaderPassIndex: 0 + overrideMode: 1 + overrideDepthState: 0 + depthCompareFunction: 4 + enableWrite: 1 + stencilSettings: + overrideStencilState: 0 + stencilReference: 0 + stencilCompareFunction: 8 + passOperation: 0 + failOperation: 0 + zFailOperation: 0 + cameraSettings: + overrideCamera: 0 + restoreCamera: 1 + offset: {x: 0, y: 0, z: 0, w: 0} + cameraFieldOfView: 60 diff --git a/Assets/Shaders/ClearRTAfterTransparent.cs b/Assets/Shaders/ClearRTAfterTransparent.cs new file mode 100644 index 00000000..f26f0614 --- /dev/null +++ b/Assets/Shaders/ClearRTAfterTransparent.cs @@ -0,0 +1,34 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +public class ClearRTAfterTransparent : ScriptableRendererFeature +{ + class ClearPass : ScriptableRenderPass + { + public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) + { + CommandBuffer cmd = CommandBufferPool.Get("Clear RT After Transparent"); + cmd.ClearRenderTarget(true, true, Color.clear); // 清颜色 & 深度 + context.ExecuteCommandBuffer(cmd); + CommandBufferPool.Release(cmd); + } + } + + ClearPass pass; + + public override void Create() + { + pass = new ClearPass + { + renderPassEvent = RenderPassEvent.AfterRenderingTransparents // 在透明物体之后 + }; + } + + public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) + { + renderer.EnqueuePass(pass); + } +} diff --git a/Assets/Shaders/ClearRTAfterTransparent.cs.meta b/Assets/Shaders/ClearRTAfterTransparent.cs.meta new file mode 100644 index 00000000..2e494723 --- /dev/null +++ b/Assets/Shaders/ClearRTAfterTransparent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5c436546a5352c649a6b820b7c47fc46 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/ExtraPostProcessing.mat b/Assets/Shaders/ExtraPostProcessing.mat new file mode 100644 index 00000000..9bf759cd --- /dev/null +++ b/Assets/Shaders/ExtraPostProcessing.mat @@ -0,0 +1,190 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-1234765509491534225 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 7 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ExtraPostProcessing + m_Shader: {fileID: 4800000, guid: 1828b8a7039d30b4497ec4b19fd57158, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _RECEIVE_SHADOWS_OFF + m_InvalidKeywords: + - _RECEIVESHADOWS_OFF + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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} + - _BaseMap: + 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: 0} + 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} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TextureSample0: + m_Texture: {fileID: 2800000, guid: e5acafa73a8d7b942a843c7cf290a992, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TextureSample1: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TextureSample2: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - PixelSnap: 0 + - _AlphaClip: 0 + - _AlphaCutoff: 0.5 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnableExternalAlpha: 0 + - _EnvironmentReflections: 1 + - _Float10: 0 + - _Float11: 0 + - _Float12: 0 + - _Float13: 0 + - _Float14: 0 + - _Float15: 0 + - _Float17: 0 + - _Float18: 0 + - _Float19: 1 + - _Float2: 0.05 + - _Float20: 0 + - _Float21: 0.1 + - _Float23: 0 + - _Float24: 0 + - _Float25: 1 + - _Float26: 0 + - _Float27: 0 + - _Float28: 0 + - _Float3: 0.01 + - _Float30: 0 + - _Float31: 0 + - _Float32: 0 + - _Float33: 0 + - _Float34: 0 + - _Float36: 0 + - _Float4: 0 + - _Float5: 0 + - _Float6: 0 + - _Float7: 0 + - _Float8: 0.5 + - _Float9: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _MaskPower1: 1 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _QueueControl: 0 + - _QueueOffset: 0 + - _ReceiveShadows: 0 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _Color0: {r: 1, g: 1, b: 1, a: 1} + - _Color1: {r: 0, g: 0, b: 0, a: 1} + - _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} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Shaders/ExtraPostProcessing.mat.meta b/Assets/Shaders/ExtraPostProcessing.mat.meta new file mode 100644 index 00000000..6a3afbcb --- /dev/null +++ b/Assets/Shaders/ExtraPostProcessing.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4a53388d09164bb43971571879adc754 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/LF_URP后期2.0.shader b/Assets/Shaders/LF_URP后期2.0.shader new file mode 100644 index 00000000..83a7decf --- /dev/null +++ b/Assets/Shaders/LF_URP后期2.0.shader @@ -0,0 +1,2639 @@ +// Made with Amplify Shader Editor v1.9.5.1 +// Available at the Unity Asset Store - http://u3d.as/y3X +Shader "LF/URP后期2.0" +{ + Properties + { + [HideInInspector] _EmissionColor("Emission Color", Color) = (1,1,1,1) + [HideInInspector] _AlphaCutoff("Alpha Cutoff ", Range(0, 1)) = 0.5 + _Float20("色阶黑", Float) = 0 + _Float19("色阶白", Float) = 1 + _Float28("暗角强度", Float) = 0 + _Float36("暗角阈值", Range( 0 , 1)) = 0 + _Float6("中心位置U", Range( -0.5 , 0.5)) = 0 + _Float7("中心位置V", Range( -0.5 , 0.5)) = 0 + [Header(________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________)][Space(10) ]_TextureSample1("Mask", 2D) = "white" {} + [Enum(R,0,A,1)]_Float30("Mask通道", Float) = 3 + [Toggle]_Float24("OneMinusMask", Float) = 0 + _MaskPower1("MaskPower", Float) = 1 + _Float9("Msak强度", Float) = 1 + [Header(________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________)][Space(10) ]_Float11("色散强度", Float) = 0 + [Enum(Material,0,Custom1y,1)]_Float17("色散控制方式", Float) = 0 + _Float5("模糊缩放", Float) = 0 + [Enum(Material,0,Custom1x,1)]_Float18("模糊控制方式", Float) = 0 + _Float8("色散模糊比重", Range( 0 , 1)) = 1 + _Float27("放射纹理强度", Float) = 0 + [Header(________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________)][Toggle][Space(10) ]_Float4("黑白闪开关", Float) = 0 + [Enum(Material,0,Custom1w,1)]_Float10("黑白闪开关控制方式", Float) = 0 + _Color0("黑白闪颜色1", Color) = (1,1,1,1) + _Color1("黑白闪颜色2", Color) = (0,0,0,1) + [Toggle]_Float33("黑白切换", Float) = 0 + [Enum(Material,0,ParticleAlphy,1)]_Float34("黑白切换控制方式", Float) = 0 + _TextureSample0("黑白闪纹理", 2D) = "white" {} + [Enum(U,0,V,1)]_Float31("极坐标方向", Float) = 0 + [Enum(Material,0,Custom1z,1)]_Float32("黑白闪流动控制方式", Float) = 0 + _Float21("黑白闪纹理强度", Range( 0 , 1)) = 0 + [HideInInspector]_TextureSample0_ST("_TextureSample0_ST", Vector) = (10,0.4,0,0) + _Float2("黑白范围", Range( 0 , 1)) = 1 + _Float3("黑白过度", Range( 0 , 0.1)) = 0 + [HideInInspector]_TextureSample1_ST("_TextureSample1_ST", Vector) = (1,1,0,0) + [Header(______________________________________________________________________________________________________________________________)][Enum(Partercal,0,Material,1)][Space(10) ]_Float25("震屏测试(Custom2xy_UV震频,zw_UV振幅)", Float) = 1 + _Float15("U震频测试(随数值变化往复震动)", Float) = 0 + _Float14("U振幅测试", Range( 0 , 1)) = 0 + _Float12("V振频测试(随数值变化往复震动)", Float) = 0 + _Float13("V振幅测试", Range( 0 , 1)) = 0 + [Header(________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________)][Space(10) ]_TextureSample2("肌理图", 2D) = "white" {} + _Float26("旋转肌理图", Range( 0 , 1)) = 0 + _Float23("肌理强度", Range( -1 , 1)) = 0 + [HideInInspector]_TextureSample2_ST("_TextureSample2_ST", Vector) = (1,1,0,0) + + + //_TessPhongStrength( "Tess Phong Strength", Range( 0, 1 ) ) = 0.5 + //_TessValue( "Tess Max Tessellation", Range( 1, 32 ) ) = 16 + //_TessMin( "Tess Min Distance", Float ) = 10 + //_TessMax( "Tess Max Distance", Float ) = 25 + //_TessEdgeLength ( "Tess Edge length", Range( 2, 50 ) ) = 16 + //_TessMaxDisp( "Tess Max Displacement", Float ) = 25 + + [HideInInspector] _QueueOffset("_QueueOffset", Float) = 0 + [HideInInspector] _QueueControl("_QueueControl", Float) = -1 + + [HideInInspector][NoScaleOffset] unity_Lightmaps("unity_Lightmaps", 2DArray) = "" {} + [HideInInspector][NoScaleOffset] unity_LightmapsInd("unity_LightmapsInd", 2DArray) = "" {} + [HideInInspector][NoScaleOffset] unity_ShadowMasks("unity_ShadowMasks", 2DArray) = "" {} + + [HideInInspector][ToggleOff] _ReceiveShadows("Receive Shadows", Float) = 1.0 + } + + SubShader + { + LOD 0 + + + + Tags { "RenderPipeline"="UniversalPipeline" "RenderType"="Transparent" "Queue"="Transparent+1000" "UniversalMaterialType"="Unlit" } + + Cull Off + AlphaToMask Off + + + + HLSLINCLUDE + #pragma target 4.5 + #pragma prefer_hlslcc gles + // ensure rendering platforms toggle list is visible + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Filtering.hlsl" + + #ifndef ASE_TESS_FUNCS + #define ASE_TESS_FUNCS + float4 FixedTess( float tessValue ) + { + return tessValue; + } + + float CalcDistanceTessFactor (float4 vertex, float minDist, float maxDist, float tess, float4x4 o2w, float3 cameraPos ) + { + float3 wpos = mul(o2w,vertex).xyz; + float dist = distance (wpos, cameraPos); + float f = clamp(1.0 - (dist - minDist) / (maxDist - minDist), 0.01, 1.0) * tess; + return f; + } + + float4 CalcTriEdgeTessFactors (float3 triVertexFactors) + { + float4 tess; + tess.x = 0.5 * (triVertexFactors.y + triVertexFactors.z); + tess.y = 0.5 * (triVertexFactors.x + triVertexFactors.z); + tess.z = 0.5 * (triVertexFactors.x + triVertexFactors.y); + tess.w = (triVertexFactors.x + triVertexFactors.y + triVertexFactors.z) / 3.0f; + return tess; + } + + float CalcEdgeTessFactor (float3 wpos0, float3 wpos1, float edgeLen, float3 cameraPos, float4 scParams ) + { + float dist = distance (0.5 * (wpos0+wpos1), cameraPos); + float len = distance(wpos0, wpos1); + float f = max(len * scParams.y / (edgeLen * dist), 1.0); + return f; + } + + float DistanceFromPlane (float3 pos, float4 plane) + { + float d = dot (float4(pos,1.0f), plane); + return d; + } + + bool WorldViewFrustumCull (float3 wpos0, float3 wpos1, float3 wpos2, float cullEps, float4 planes[6] ) + { + float4 planeTest; + planeTest.x = (( DistanceFromPlane(wpos0, planes[0]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos1, planes[0]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos2, planes[0]) > -cullEps) ? 1.0f : 0.0f ); + planeTest.y = (( DistanceFromPlane(wpos0, planes[1]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos1, planes[1]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos2, planes[1]) > -cullEps) ? 1.0f : 0.0f ); + planeTest.z = (( DistanceFromPlane(wpos0, planes[2]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos1, planes[2]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos2, planes[2]) > -cullEps) ? 1.0f : 0.0f ); + planeTest.w = (( DistanceFromPlane(wpos0, planes[3]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos1, planes[3]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos2, planes[3]) > -cullEps) ? 1.0f : 0.0f ); + return !all (planeTest); + } + + float4 DistanceBasedTess( float4 v0, float4 v1, float4 v2, float tess, float minDist, float maxDist, float4x4 o2w, float3 cameraPos ) + { + float3 f; + f.x = CalcDistanceTessFactor (v0,minDist,maxDist,tess,o2w,cameraPos); + f.y = CalcDistanceTessFactor (v1,minDist,maxDist,tess,o2w,cameraPos); + f.z = CalcDistanceTessFactor (v2,minDist,maxDist,tess,o2w,cameraPos); + + return CalcTriEdgeTessFactors (f); + } + + float4 EdgeLengthBasedTess( float4 v0, float4 v1, float4 v2, float edgeLength, float4x4 o2w, float3 cameraPos, float4 scParams ) + { + float3 pos0 = mul(o2w,v0).xyz; + float3 pos1 = mul(o2w,v1).xyz; + float3 pos2 = mul(o2w,v2).xyz; + float4 tess; + tess.x = CalcEdgeTessFactor (pos1, pos2, edgeLength, cameraPos, scParams); + tess.y = CalcEdgeTessFactor (pos2, pos0, edgeLength, cameraPos, scParams); + tess.z = CalcEdgeTessFactor (pos0, pos1, edgeLength, cameraPos, scParams); + tess.w = (tess.x + tess.y + tess.z) / 3.0f; + return tess; + } + + float4 EdgeLengthBasedTessCull( float4 v0, float4 v1, float4 v2, float edgeLength, float maxDisplacement, float4x4 o2w, float3 cameraPos, float4 scParams, float4 planes[6] ) + { + float3 pos0 = mul(o2w,v0).xyz; + float3 pos1 = mul(o2w,v1).xyz; + float3 pos2 = mul(o2w,v2).xyz; + float4 tess; + + if (WorldViewFrustumCull(pos0, pos1, pos2, maxDisplacement, planes)) + { + tess = 0.0f; + } + else + { + tess.x = CalcEdgeTessFactor (pos1, pos2, edgeLength, cameraPos, scParams); + tess.y = CalcEdgeTessFactor (pos2, pos0, edgeLength, cameraPos, scParams); + tess.z = CalcEdgeTessFactor (pos0, pos1, edgeLength, cameraPos, scParams); + tess.w = (tess.x + tess.y + tess.z) / 3.0f; + } + return tess; + } + #endif //ASE_TESS_FUNCS + ENDHLSL + + + Pass + { + + Name "Forward" + Tags { "LightMode"="Grab" } + + Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha + ZWrite Off + ZTest LEqual + Offset 0 , 0 + ColorMask RGBA + + + + HLSLPROGRAM + + + + #define _SURFACE_TYPE_TRANSPARENT 1 + #pragma shader_feature_local _RECEIVE_SHADOWS_OFF + #pragma multi_compile_instancing + #pragma instancing_options renderinglayer + #define ASE_SRP_VERSION 140009 + + + + + #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION + #pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 + + + + #pragma multi_compile _ DIRLIGHTMAP_COMBINED + #pragma multi_compile _ LIGHTMAP_ON + #pragma multi_compile _ DYNAMICLIGHTMAP_ON + #pragma multi_compile_fragment _ DEBUG_DISPLAY + + #pragma vertex vert + #pragma fragment frag + + #define SHADERPASS SHADERPASS_UNLIT + + + #if ASE_SRP_VERSION >=140007 + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + #endif + + + + #if ASE_SRP_VERSION >=140007 + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" + #endif + + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" + + + + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRendering.hlsl" + + + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DBuffer.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" + + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Debug/Debugging3D.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SurfaceData.hlsl" + + #if defined(LOD_FADE_CROSSFADE) + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/LODCrossFade.hlsl" + #endif + + #define ASE_NEEDS_FRAG_SCREEN_POSITION + + + struct VertexInput + { + float4 positionOS : POSITION; + float3 normalOS : NORMAL; + float4 ase_texcoord2 : TEXCOORD2; + float4 ase_texcoord : TEXCOORD0; + float4 ase_texcoord1 : TEXCOORD1; + float4 ase_color : COLOR; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 positionCS : SV_POSITION; + float4 clipPosV : TEXCOORD0; + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + float3 positionWS : TEXCOORD1; + #endif + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + float4 shadowCoord : TEXCOORD2; + #endif + #ifdef ASE_FOG + float fogFactor : TEXCOORD3; + #endif + float4 ase_texcoord4 : TEXCOORD4; + float4 ase_texcoord5 : TEXCOORD5; + float4 ase_texcoord6 : TEXCOORD6; + float4 ase_color : COLOR; + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + CBUFFER_START(UnityPerMaterial) + float4 _Color1; + float4 _TextureSample1_ST; + float4 _TextureSample2_ST; + float4 _TextureSample0_ST; + float4 _Color0; + float _Float18; + float _Float11; + float _Float17; + float _Float8; + float _Float36; + float _Float2; + float _Float3; + float _Float21; + float _Float33; + float _Float34; + float _Float4; + float _Float10; + float _Float5; + float _Float9; + float _Float24; + float _Float20; + float _Float28; + float _Float26; + float _Float23; + float _Float15; + float _Float12; + float _Float14; + float _MaskPower1; + float _Float13; + float _Float6; + float _Float7; + float _Float31; + float _Float32; + float _Float27; + float _Float30; + float _Float25; + float _Float19; + #ifdef ASE_TESSELLATION + float _TessPhongStrength; + float _TessValue; + float _TessMin; + float _TessMax; + float _TessEdgeLength; + float _TessMaxDisp; + #endif + CBUFFER_END + + sampler2D _TextureSample2; + sampler2D _AfterPostProcessTexture; + sampler2D _TextureSample0; + sampler2D _TextureSample1; + + + inline float4 ASE_ComputeGrabScreenPos( float4 pos ) + { + #if UNITY_UV_STARTS_AT_TOP + float scale = -1.0; + #else + float scale = 1.0; + #endif + float4 o = pos; + o.y = pos.w * 0.5f; + o.y = ( pos.y - o.y ) * _ProjectionParams.x * scale + o.y; + return o; + } + + + VertexOutput VertexFunction( VertexInput v ) + { + VertexOutput o = (VertexOutput)0; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + o.ase_texcoord4 = v.ase_texcoord2; + o.ase_texcoord5.xy = v.ase_texcoord.xy; + o.ase_texcoord6 = v.ase_texcoord1; + o.ase_color = v.ase_color; + + //setting value to unused interpolator channels and avoid initialization warnings + o.ase_texcoord5.zw = 0; + + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.positionOS.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + + float3 vertexValue = defaultVertexValue; + + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.positionOS.xyz = vertexValue; + #else + v.positionOS.xyz += vertexValue; + #endif + + v.normalOS = v.normalOS; + + VertexPositionInputs vertexInput = GetVertexPositionInputs( v.positionOS.xyz ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + o.positionWS = vertexInput.positionWS; + #endif + + #ifdef ASE_FOG + o.fogFactor = ComputeFogFactor( vertexInput.positionCS.z ); + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + o.shadowCoord = GetShadowCoord( vertexInput ); + #endif + + o.positionCS = vertexInput.positionCS; + o.clipPosV = vertexInput.positionCS; + return o; + } + + #if defined(ASE_TESSELLATION) + struct VertexControl + { + float4 vertex : INTERNALTESSPOS; + float3 normalOS : NORMAL; + float4 ase_texcoord2 : TEXCOORD2; + float4 ase_texcoord : TEXCOORD0; + float4 ase_texcoord1 : TEXCOORD1; + float4 ase_color : COLOR; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessellationFactors + { + float edge[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; + }; + + VertexControl vert ( VertexInput v ) + { + VertexControl o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + o.vertex = v.positionOS; + o.normalOS = v.normalOS; + o.ase_texcoord2 = v.ase_texcoord2; + o.ase_texcoord = v.ase_texcoord; + o.ase_texcoord1 = v.ase_texcoord1; + o.ase_color = v.ase_color; + return o; + } + + TessellationFactors TessellationFunction (InputPatch v) + { + TessellationFactors o; + float4 tf = 1; + float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax; + float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp; + #if defined(ASE_FIXED_TESSELLATION) + tf = FixedTess( tessValue ); + #elif defined(ASE_DISTANCE_TESSELLATION) + tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); + #elif defined(ASE_LENGTH_TESSELLATION) + tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); + #elif defined(ASE_LENGTH_CULL_TESSELLATION) + tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); + #endif + o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; + return o; + } + + [domain("tri")] + [partitioning("fractional_odd")] + [outputtopology("triangle_cw")] + [patchconstantfunc("TessellationFunction")] + [outputcontrolpoints(3)] + VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) + { + return patch[id]; + } + + [domain("tri")] + VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) + { + VertexInput o = (VertexInput) 0; + o.positionOS = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; + o.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z; + o.ase_texcoord2 = patch[0].ase_texcoord2 * bary.x + patch[1].ase_texcoord2 * bary.y + patch[2].ase_texcoord2 * bary.z; + o.ase_texcoord = patch[0].ase_texcoord * bary.x + patch[1].ase_texcoord * bary.y + patch[2].ase_texcoord * bary.z; + o.ase_texcoord1 = patch[0].ase_texcoord1 * bary.x + patch[1].ase_texcoord1 * bary.y + patch[2].ase_texcoord1 * bary.z; + o.ase_color = patch[0].ase_color * bary.x + patch[1].ase_color * bary.y + patch[2].ase_color * bary.z; + #if defined(ASE_PHONG_TESSELLATION) + float3 pp[3]; + for (int i = 0; i < 3; ++i) + pp[i] = o.positionOS.xyz - patch[i].normalOS * (dot(o.positionOS.xyz, patch[i].normalOS) - dot(patch[i].vertex.xyz, patch[i].normalOS)); + float phongStrength = _TessPhongStrength; + o.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.positionOS.xyz; + #endif + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + return VertexFunction(o); + } + #else + VertexOutput vert ( VertexInput v ) + { + return VertexFunction( v ); + } + #endif + + half4 frag ( VertexOutput IN + #ifdef _WRITE_RENDERING_LAYERS + , out float4 outRenderingLayers : SV_Target1 + #endif + ) : SV_Target + { + UNITY_SETUP_INSTANCE_ID( IN ); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + float3 WorldPosition = IN.positionWS; + #endif + + float4 ShadowCoords = float4( 0, 0, 0, 0 ); + + float4 ClipPos = IN.clipPosV; + float4 ScreenPos = ComputeScreenPos( IN.clipPosV ); + + #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + ShadowCoords = IN.shadowCoord; + #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) + ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); + #endif + #endif + + float4 ase_grabScreenPos = ASE_ComputeGrabScreenPos( ScreenPos ); + float4 ase_grabScreenPosNorm = ase_grabScreenPos / ase_grabScreenPos.w; + float2 appendResult439 = (float2(ase_grabScreenPosNorm.r , ase_grabScreenPosNorm.g)); + float4 ase_screenPosNorm = ScreenPos / ScreenPos.w; + ase_screenPosNorm.z = ( UNITY_NEAR_CLIP_VALUE >= 0 ) ? ase_screenPosNorm.z : ase_screenPosNorm.z * 0.5 + 0.5; + float2 appendResult393 = (float2(( ase_screenPosNorm.x * ( _ScreenParams.x / _ScreenParams.y ) ) , ase_screenPosNorm.y)); + float cos449 = cos( ( _Float26 * PI ) ); + float sin449 = sin( ( _Float26 * PI ) ); + float2 rotator449 = mul( appendResult393 - float2( 0,0 ) , float2x2( cos449 , -sin449 , sin449 , cos449 )) + float2( 0,0 ); + float2 appendResult287 = (float2(_TextureSample2_ST.x , _TextureSample2_ST.y)); + float2 appendResult288 = (float2(_TextureSample2_ST.z , _TextureSample2_ST.w)); + float4 tex2DNode278 = tex2D( _TextureSample2, (rotator449*appendResult287 + appendResult288) ); + float4 temp_cast_0 = (( tex2DNode278.r * _Float23 )).xxxx; + float4 texCoord147 = IN.ase_texcoord4; + texCoord147.xy = IN.ase_texcoord4.xy * float2( 1,1 ) + float2( 0,0 ); + float4 appendResult218 = (float4(_Float15 , _Float12 , _Float14 , _Float13)); + float4 lerpResult333 = lerp( texCoord147 , appendResult218 , _Float25); + float4 break224 = lerpResult333; + float2 appendResult421 = (float2(( sin( break224.x ) * break224.z * 0.5 ) , ( sin( break224.y ) * break224.w * 0.5 ))); + float2 clampResult422 = clamp( appendResult421 , float2( -1,-1 ) , float2( 1,1 ) ); + float2 zhenpingUV409 = ((ase_grabScreenPosNorm).xy*1.0 + clampResult422); + float2 appendResult65 = (float2(_Float6 , _Float7)); + float2 jizuobiaoUV274 = ( zhenpingUV409 - appendResult65 ); + float2 texCoord257 = IN.ase_texcoord5.xy * float2( 1,1 ) + float2( 0,0 ); + float2 break245 = float2( 1,0 ); + float cos248 = cos( ( length( (texCoord257*2.0 + -1.0) ) * break245.y ) ); + float sin248 = sin( ( length( (texCoord257*2.0 + -1.0) ) * break245.y ) ); + float2 rotator248 = mul( jizuobiaoUV274 - float2( 0.5,0.5 ) , float2x2( cos248 , -sin248 , sin248 , cos248 )) + float2( 0.5,0.5 ); + float2 temp_output_262_0 = (rotator248*2.0 + -1.0); + float2 break255 = temp_output_262_0; + float temp_output_261_0 = ( ( atan2( break255.y , break255.x ) / ( 2.0 * PI ) ) + 0.5 ); + float temp_output_258_0 = pow( length( temp_output_262_0 ) , break245.x ); + float2 appendResult253 = (float2(temp_output_261_0 , temp_output_258_0)); + float2 appendResult247 = (float2(temp_output_258_0 , temp_output_261_0)); + float2 lerpResult373 = lerp( appendResult253 , appendResult247 , _Float31); + float2 appendResult154 = (float2(_TextureSample0_ST.z , _TextureSample0_ST.w)); + float4 texCoord150 = IN.ase_texcoord6; + texCoord150.xy = IN.ase_texcoord6.xy * float2( 1,1 ) + float2( 0,0 ); + float2 appendResult153 = (float2(_TextureSample0_ST.z , texCoord150.z)); + float2 lerpResult376 = lerp( appendResult154 , appendResult153 , _Float32); + float4 appendResult155 = (float4(_TextureSample0_ST.xy , lerpResult376)); + float4 break242 = appendResult155; + float2 appendResult252 = (float2(break242.x , break242.y)); + float2 appendResult241 = (float2(break242.z , break242.w)); + float2 appendResult243 = (float2((lerpResult373*appendResult252 + appendResult241).x , 0.0)); + float jizuobiaowenli423 = tex2D( _TextureSample0, appendResult243 ).r; + float2 temp_cast_2 = (jizuobiaowenli423).xx; + float2 appendResult166 = (float2(_TextureSample1_ST.x , _TextureSample1_ST.y)); + float2 appendResult167 = (float2(_TextureSample1_ST.z , _TextureSample1_ST.w)); + float4 tex2DNode130 = tex2D( _TextureSample1, (zhenpingUV409*appendResult166 + appendResult167) ); + float lerpResult365 = lerp( tex2DNode130.r , tex2DNode130.a , _Float30); + float lerpResult400 = lerp( lerpResult365 , ( 1.0 - lerpResult365 ) , _Float24); + float mask173 = saturate( ( pow( lerpResult400 , _MaskPower1 ) * _Float9 ) ); + float2 lerpResult429 = lerp( zhenpingUV409 , temp_cast_2 , ( _Float27 * 0.01 * mask173 )); + float2 jizuobiaopianyi433 = lerpResult429; + half2 fangsheUV74 = ( jizuobiaopianyi433 - (float2( 0,0 ) + (appendResult65 - float2( -0.5,-0.5 )) * (float2( 1,1 ) - float2( 0,0 )) / (float2( 0.5,0.5 ) - float2( -0.5,-0.5 ))) ); + float4 texCoord144 = IN.ase_texcoord6; + texCoord144.xy = IN.ase_texcoord6.xy * float2( 1,1 ) + float2( 0,0 ); + float lerpResult387 = lerp( _Float5 , texCoord144.x , _Float18); + float2 temp_output_51_0 = ( fangsheUV74 * float2( 0.01,0.01 ) * lerpResult387 ); + float2 temp_output_72_0 = ( jizuobiaopianyi433 - temp_output_51_0 ); + float4 tex2DNode295 = tex2D( _AfterPostProcessTexture, temp_output_72_0 ); + float4 texCoord186 = IN.ase_texcoord6; + texCoord186.xy = IN.ase_texcoord6.xy * float2( 1,1 ) + float2( 0,0 ); + float lerpResult385 = lerp( _Float11 , texCoord186.y , _Float17); + float2 temp_output_189_0 = ( lerpResult385 * float2( 0.01,0.01 ) * fangsheUV74 ); + float2 temp_output_190_0 = ( jizuobiaopianyi433 - temp_output_189_0 ); + float2 temp_output_191_0 = ( temp_output_190_0 - temp_output_189_0 ); + float4 appendResult60 = (float4(tex2D( _AfterPostProcessTexture, temp_output_190_0 ).r , tex2D( _AfterPostProcessTexture, temp_output_191_0 ).g , tex2D( _AfterPostProcessTexture, ( temp_output_191_0 - temp_output_189_0 ) ).b , 1.0)); + float2 temp_output_80_0 = ( temp_output_72_0 - temp_output_51_0 ); + float2 temp_output_81_0 = ( temp_output_80_0 - temp_output_51_0 ); + float2 temp_output_96_0 = ( temp_output_81_0 - temp_output_51_0 ); + float2 temp_output_97_0 = ( temp_output_96_0 - temp_output_51_0 ); + float2 temp_output_98_0 = ( temp_output_97_0 - temp_output_51_0 ); + float2 temp_output_99_0 = ( temp_output_98_0 - temp_output_51_0 ); + float2 temp_output_100_0 = ( temp_output_99_0 - temp_output_51_0 ); + float2 temp_output_101_0 = ( temp_output_100_0 - temp_output_51_0 ); + float2 temp_output_103_0 = ( temp_output_101_0 - temp_output_51_0 ); + float2 temp_output_102_0 = ( temp_output_103_0 - temp_output_51_0 ); + float2 temp_output_105_0 = ( temp_output_102_0 - temp_output_51_0 ); + float2 temp_output_104_0 = ( temp_output_105_0 - temp_output_51_0 ); + float2 temp_output_107_0 = ( temp_output_104_0 - temp_output_51_0 ); + float2 temp_output_106_0 = ( temp_output_107_0 - temp_output_51_0 ); + float2 temp_output_109_0 = ( temp_output_106_0 - temp_output_51_0 ); + float2 temp_output_112_0 = ( temp_output_109_0 - temp_output_51_0 ); + float2 temp_output_113_0 = ( temp_output_112_0 - temp_output_51_0 ); + float2 temp_output_115_0 = ( temp_output_113_0 - temp_output_51_0 ); + float4 appendResult123 = (float4(( ( ( tex2DNode295 + tex2D( _AfterPostProcessTexture, temp_output_80_0 ) + tex2D( _AfterPostProcessTexture, temp_output_81_0 ) + tex2D( _AfterPostProcessTexture, temp_output_96_0 ) + tex2D( _AfterPostProcessTexture, temp_output_97_0 ) + tex2D( _AfterPostProcessTexture, temp_output_98_0 ) + tex2D( _AfterPostProcessTexture, temp_output_99_0 ) + tex2D( _AfterPostProcessTexture, temp_output_100_0 ) + tex2D( _AfterPostProcessTexture, temp_output_101_0 ) + tex2D( _AfterPostProcessTexture, temp_output_103_0 ) ) + ( tex2D( _AfterPostProcessTexture, temp_output_102_0 ) + tex2D( _AfterPostProcessTexture, temp_output_105_0 ) + tex2D( _AfterPostProcessTexture, temp_output_104_0 ) + tex2D( _AfterPostProcessTexture, temp_output_107_0 ) + tex2D( _AfterPostProcessTexture, temp_output_106_0 ) + tex2D( _AfterPostProcessTexture, temp_output_109_0 ) + tex2D( _AfterPostProcessTexture, temp_output_112_0 ) + tex2D( _AfterPostProcessTexture, temp_output_113_0 ) + tex2D( _AfterPostProcessTexture, temp_output_115_0 ) + tex2D( _AfterPostProcessTexture, ( temp_output_115_0 - temp_output_51_0 ) ) ) ) / 20.0 ).rgb , 1.0)); + float4 lerpResult128 = lerp( appendResult60 , appendResult123 , _Float8); + float4 lerpResult131 = lerp( tex2DNode295 , lerpResult128 , mask173); + float4 mohu194 = lerpResult131; + float3 desaturateInitialColor25 = mohu194.xyz; + float desaturateDot25 = dot( desaturateInitialColor25, float3( 0.299, 0.587, 0.114 )); + float3 desaturateVar25 = lerp( desaturateInitialColor25, desaturateDot25.xxx, 1.0 ); + float temp_output_27_0 = (desaturateVar25).x; + float lerpResult233 = lerp( 1.0 , jizuobiaowenli423 , _Float21); + float lerpResult181 = lerp( temp_output_27_0 , lerpResult233 , mask173); + float smoothstepResult11 = smoothstep( _Float2 , ( _Float2 + _Float3 ) , ( temp_output_27_0 + ( temp_output_27_0 * lerpResult181 ) )); + float lerpResult378 = lerp( _Float33 , IN.ase_color.a , _Float34); + float lerpResult32 = lerp( smoothstepResult11 , ( 1.0 - smoothstepResult11 ) , lerpResult378); + float4 lerpResult15 = lerp( _Color0 , _Color1 , lerpResult32); + float4 texCoord425 = IN.ase_texcoord6; + texCoord425.xy = IN.ase_texcoord6.xy * float2( 1,1 ) + float2( 0,0 ); + float lerpResult381 = lerp( _Float4 , texCoord425.w , _Float10); + float4 lerpResult225 = lerp( mohu194 , lerpResult15 , lerpResult381); + float4 temp_cast_7 = (_Float20).xxxx; + float4 temp_cast_8 = (_Float19).xxxx; + float4 lerpResult283 = lerp( temp_cast_0 , (temp_cast_7 + (lerpResult225 - float4( 0,0,0,0 )) * (temp_cast_8 - temp_cast_7) / (float4( 1,1,1,1 ) - float4( 0,0,0,0 ))) , saturate( ( tex2DNode278.r + _Float23 ) )); + + float3 BakedAlbedo = 0; + float3 BakedEmission = 0; + float3 Color = ( pow( (1.0 + (distance( appendResult439 , float2( 0.5,0.5 ) ) - 0.0) * (0.0 - 1.0) / (( 1.0 - _Float36 ) - 0.0)) , _Float28 ) * lerpResult283 ).rgb; + float Alpha = 1; + float AlphaClipThreshold = 0.5; + float AlphaClipThresholdShadow = 0.5; + + #ifdef _ALPHATEST_ON + clip( Alpha - AlphaClipThreshold ); + #endif + + #if defined(_DBUFFER) + ApplyDecalToBaseColor(IN.positionCS, Color); + #endif + + #ifdef LOD_FADE_CROSSFADE + LODFadeCrossFade( IN.positionCS ); + #endif + + #ifdef ASE_FOG + Color = MixFog( Color, IN.fogFactor ); + #endif + + #ifdef _WRITE_RENDERING_LAYERS + uint renderingLayers = GetMeshRenderingLayer(); + outRenderingLayers = float4( EncodeMeshRenderingLayer( renderingLayers ), 0, 0, 0 ); + #endif + + return half4( Color, Alpha ); + } + ENDHLSL + } + + + Pass + { + + Name "ShadowCaster" + Tags { "LightMode"="ShadowCaster" } + + ZWrite On + ZTest LEqual + AlphaToMask Off + ColorMask 0 + + HLSLPROGRAM + + + + #define _SURFACE_TYPE_TRANSPARENT 1 + #pragma multi_compile_instancing + #define ASE_SRP_VERSION 140009 + + + + + #pragma multi_compile_vertex _ _CASTING_PUNCTUAL_LIGHT_SHADOW + + #pragma vertex vert + #pragma fragment frag + + #define SHADERPASS SHADERPASS_SHADOWCASTER + + + #if ASE_SRP_VERSION >=140007 + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + #endif + + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + + #if defined(LOD_FADE_CROSSFADE) + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/LODCrossFade.hlsl" + #endif + + + + struct VertexInput + { + float4 positionOS : POSITION; + float3 normalOS : NORMAL; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 positionCS : SV_POSITION; + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + float3 positionWS : TEXCOORD0; + #endif + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + float4 shadowCoord : TEXCOORD1; + #endif + + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + CBUFFER_START(UnityPerMaterial) + float4 _Color1; + float4 _TextureSample1_ST; + float4 _TextureSample2_ST; + float4 _TextureSample0_ST; + float4 _Color0; + float _Float18; + float _Float11; + float _Float17; + float _Float8; + float _Float36; + float _Float2; + float _Float3; + float _Float21; + float _Float33; + float _Float34; + float _Float4; + float _Float10; + float _Float5; + float _Float9; + float _Float24; + float _Float20; + float _Float28; + float _Float26; + float _Float23; + float _Float15; + float _Float12; + float _Float14; + float _MaskPower1; + float _Float13; + float _Float6; + float _Float7; + float _Float31; + float _Float32; + float _Float27; + float _Float30; + float _Float25; + float _Float19; + #ifdef ASE_TESSELLATION + float _TessPhongStrength; + float _TessValue; + float _TessMin; + float _TessMax; + float _TessEdgeLength; + float _TessMaxDisp; + #endif + CBUFFER_END + + + + + float3 _LightDirection; + float3 _LightPosition; + + VertexOutput VertexFunction( VertexInput v ) + { + VertexOutput o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( o ); + + + + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.positionOS.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + + float3 vertexValue = defaultVertexValue; + + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.positionOS.xyz = vertexValue; + #else + v.positionOS.xyz += vertexValue; + #endif + + v.normalOS = v.normalOS; + + float3 positionWS = TransformObjectToWorld( v.positionOS.xyz ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + o.positionWS = positionWS; + #endif + + float3 normalWS = TransformObjectToWorldDir( v.normalOS ); + + #if _CASTING_PUNCTUAL_LIGHT_SHADOW + float3 lightDirectionWS = normalize(_LightPosition - positionWS); + #else + float3 lightDirectionWS = _LightDirection; + #endif + + float4 positionCS = TransformWorldToHClip(ApplyShadowBias(positionWS, normalWS, lightDirectionWS)); + + #if UNITY_REVERSED_Z + positionCS.z = min(positionCS.z, UNITY_NEAR_CLIP_VALUE); + #else + positionCS.z = max(positionCS.z, UNITY_NEAR_CLIP_VALUE); + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + VertexPositionInputs vertexInput = (VertexPositionInputs)0; + vertexInput.positionWS = positionWS; + vertexInput.positionCS = positionCS; + o.shadowCoord = GetShadowCoord( vertexInput ); + #endif + + o.positionCS = positionCS; + + return o; + } + + #if defined(ASE_TESSELLATION) + struct VertexControl + { + float4 vertex : INTERNALTESSPOS; + float3 normalOS : NORMAL; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessellationFactors + { + float edge[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; + }; + + VertexControl vert ( VertexInput v ) + { + VertexControl o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + o.vertex = v.positionOS; + o.normalOS = v.normalOS; + + return o; + } + + TessellationFactors TessellationFunction (InputPatch v) + { + TessellationFactors o; + float4 tf = 1; + float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax; + float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp; + #if defined(ASE_FIXED_TESSELLATION) + tf = FixedTess( tessValue ); + #elif defined(ASE_DISTANCE_TESSELLATION) + tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); + #elif defined(ASE_LENGTH_TESSELLATION) + tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); + #elif defined(ASE_LENGTH_CULL_TESSELLATION) + tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); + #endif + o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; + return o; + } + + [domain("tri")] + [partitioning("fractional_odd")] + [outputtopology("triangle_cw")] + [patchconstantfunc("TessellationFunction")] + [outputcontrolpoints(3)] + VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) + { + return patch[id]; + } + + [domain("tri")] + VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) + { + VertexInput o = (VertexInput) 0; + o.positionOS = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; + o.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z; + + #if defined(ASE_PHONG_TESSELLATION) + float3 pp[3]; + for (int i = 0; i < 3; ++i) + pp[i] = o.positionOS.xyz - patch[i].normalOS * (dot(o.positionOS.xyz, patch[i].normalOS) - dot(patch[i].vertex.xyz, patch[i].normalOS)); + float phongStrength = _TessPhongStrength; + o.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.positionOS.xyz; + #endif + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + return VertexFunction(o); + } + #else + VertexOutput vert ( VertexInput v ) + { + return VertexFunction( v ); + } + #endif + + half4 frag(VertexOutput IN ) : SV_TARGET + { + UNITY_SETUP_INSTANCE_ID( IN ); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + float3 WorldPosition = IN.positionWS; + #endif + + float4 ShadowCoords = float4( 0, 0, 0, 0 ); + + #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + ShadowCoords = IN.shadowCoord; + #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) + ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); + #endif + #endif + + + + float Alpha = 1; + float AlphaClipThreshold = 0.5; + float AlphaClipThresholdShadow = 0.5; + + #ifdef _ALPHATEST_ON + #ifdef _ALPHATEST_SHADOW_ON + clip(Alpha - AlphaClipThresholdShadow); + #else + clip(Alpha - AlphaClipThreshold); + #endif + #endif + + #ifdef LOD_FADE_CROSSFADE + LODFadeCrossFade( IN.positionCS ); + #endif + + return 0; + } + ENDHLSL + } + + + Pass + { + + Name "DepthOnly" + Tags { "LightMode"="DepthOnly" } + + ZWrite On + ColorMask 0 + AlphaToMask Off + + HLSLPROGRAM + + + + #define _SURFACE_TYPE_TRANSPARENT 1 + #pragma multi_compile_instancing + #define ASE_SRP_VERSION 140009 + + + + + #pragma vertex vert + #pragma fragment frag + + + #if ASE_SRP_VERSION >=140007 + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + #endif + + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + + #if defined(LOD_FADE_CROSSFADE) + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/LODCrossFade.hlsl" + #endif + + + + struct VertexInput + { + float4 positionOS : POSITION; + float3 normalOS : NORMAL; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 positionCS : SV_POSITION; + float4 clipPosV : TEXCOORD0; + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + float3 positionWS : TEXCOORD1; + #endif + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + float4 shadowCoord : TEXCOORD2; + #endif + + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + CBUFFER_START(UnityPerMaterial) + float4 _Color1; + float4 _TextureSample1_ST; + float4 _TextureSample2_ST; + float4 _TextureSample0_ST; + float4 _Color0; + float _Float18; + float _Float11; + float _Float17; + float _Float8; + float _Float36; + float _Float2; + float _Float3; + float _Float21; + float _Float33; + float _Float34; + float _Float4; + float _Float10; + float _Float5; + float _Float9; + float _Float24; + float _Float20; + float _Float28; + float _Float26; + float _Float23; + float _Float15; + float _Float12; + float _Float14; + float _MaskPower1; + float _Float13; + float _Float6; + float _Float7; + float _Float31; + float _Float32; + float _Float27; + float _Float30; + float _Float25; + float _Float19; + #ifdef ASE_TESSELLATION + float _TessPhongStrength; + float _TessValue; + float _TessMin; + float _TessMax; + float _TessEdgeLength; + float _TessMaxDisp; + #endif + CBUFFER_END + + + + + VertexOutput VertexFunction( VertexInput v ) + { + VertexOutput o = (VertexOutput)0; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + + + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.positionOS.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + + float3 vertexValue = defaultVertexValue; + + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.positionOS.xyz = vertexValue; + #else + v.positionOS.xyz += vertexValue; + #endif + + v.normalOS = v.normalOS; + + VertexPositionInputs vertexInput = GetVertexPositionInputs( v.positionOS.xyz ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + o.positionWS = vertexInput.positionWS; + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + o.shadowCoord = GetShadowCoord( vertexInput ); + #endif + + o.positionCS = vertexInput.positionCS; + o.clipPosV = vertexInput.positionCS; + return o; + } + + #if defined(ASE_TESSELLATION) + struct VertexControl + { + float4 vertex : INTERNALTESSPOS; + float3 normalOS : NORMAL; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessellationFactors + { + float edge[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; + }; + + VertexControl vert ( VertexInput v ) + { + VertexControl o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + o.vertex = v.positionOS; + o.normalOS = v.normalOS; + + return o; + } + + TessellationFactors TessellationFunction (InputPatch v) + { + TessellationFactors o; + float4 tf = 1; + float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax; + float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp; + #if defined(ASE_FIXED_TESSELLATION) + tf = FixedTess( tessValue ); + #elif defined(ASE_DISTANCE_TESSELLATION) + tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); + #elif defined(ASE_LENGTH_TESSELLATION) + tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); + #elif defined(ASE_LENGTH_CULL_TESSELLATION) + tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); + #endif + o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; + return o; + } + + [domain("tri")] + [partitioning("fractional_odd")] + [outputtopology("triangle_cw")] + [patchconstantfunc("TessellationFunction")] + [outputcontrolpoints(3)] + VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) + { + return patch[id]; + } + + [domain("tri")] + VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) + { + VertexInput o = (VertexInput) 0; + o.positionOS = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; + o.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z; + + #if defined(ASE_PHONG_TESSELLATION) + float3 pp[3]; + for (int i = 0; i < 3; ++i) + pp[i] = o.positionOS.xyz - patch[i].normalOS * (dot(o.positionOS.xyz, patch[i].normalOS) - dot(patch[i].vertex.xyz, patch[i].normalOS)); + float phongStrength = _TessPhongStrength; + o.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.positionOS.xyz; + #endif + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + return VertexFunction(o); + } + #else + VertexOutput vert ( VertexInput v ) + { + return VertexFunction( v ); + } + #endif + + half4 frag(VertexOutput IN ) : SV_TARGET + { + UNITY_SETUP_INSTANCE_ID(IN); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + float3 WorldPosition = IN.positionWS; + #endif + + float4 ShadowCoords = float4( 0, 0, 0, 0 ); + + float4 ClipPos = IN.clipPosV; + float4 ScreenPos = ComputeScreenPos( IN.clipPosV ); + + #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + ShadowCoords = IN.shadowCoord; + #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) + ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); + #endif + #endif + + + + float Alpha = 1; + float AlphaClipThreshold = 0.5; + + #ifdef _ALPHATEST_ON + clip(Alpha - AlphaClipThreshold); + #endif + + #ifdef LOD_FADE_CROSSFADE + LODFadeCrossFade( IN.positionCS ); + #endif + return 0; + } + ENDHLSL + } + + + Pass + { + + Name "SceneSelectionPass" + Tags { "LightMode"="SceneSelectionPass" } + + Cull Off + AlphaToMask Off + + HLSLPROGRAM + + + + #define _SURFACE_TYPE_TRANSPARENT 1 + #define ASE_SRP_VERSION 140009 + + + + + #pragma vertex vert + #pragma fragment frag + + #define ATTRIBUTES_NEED_NORMAL + #define ATTRIBUTES_NEED_TANGENT + #define SHADERPASS SHADERPASS_DEPTHONLY + + + #if ASE_SRP_VERSION >=140007 + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + #endif + + + + #if ASE_SRP_VERSION >=140007 + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" + #endif + + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" + + + + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRendering.hlsl" + + + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" + + + + struct VertexInput + { + float4 positionOS : POSITION; + float3 normalOS : NORMAL; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 positionCS : SV_POSITION; + + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + CBUFFER_START(UnityPerMaterial) + float4 _Color1; + float4 _TextureSample1_ST; + float4 _TextureSample2_ST; + float4 _TextureSample0_ST; + float4 _Color0; + float _Float18; + float _Float11; + float _Float17; + float _Float8; + float _Float36; + float _Float2; + float _Float3; + float _Float21; + float _Float33; + float _Float34; + float _Float4; + float _Float10; + float _Float5; + float _Float9; + float _Float24; + float _Float20; + float _Float28; + float _Float26; + float _Float23; + float _Float15; + float _Float12; + float _Float14; + float _MaskPower1; + float _Float13; + float _Float6; + float _Float7; + float _Float31; + float _Float32; + float _Float27; + float _Float30; + float _Float25; + float _Float19; + #ifdef ASE_TESSELLATION + float _TessPhongStrength; + float _TessValue; + float _TessMin; + float _TessMax; + float _TessEdgeLength; + float _TessMaxDisp; + #endif + CBUFFER_END + + + + + int _ObjectId; + int _PassValue; + + struct SurfaceDescription + { + float Alpha; + float AlphaClipThreshold; + }; + + VertexOutput VertexFunction(VertexInput v ) + { + VertexOutput o; + ZERO_INITIALIZE(VertexOutput, o); + + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + + + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.positionOS.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + + float3 vertexValue = defaultVertexValue; + + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.positionOS.xyz = vertexValue; + #else + v.positionOS.xyz += vertexValue; + #endif + + v.normalOS = v.normalOS; + + float3 positionWS = TransformObjectToWorld( v.positionOS.xyz ); + + o.positionCS = TransformWorldToHClip(positionWS); + + return o; + } + + #if defined(ASE_TESSELLATION) + struct VertexControl + { + float4 vertex : INTERNALTESSPOS; + float3 normalOS : NORMAL; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessellationFactors + { + float edge[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; + }; + + VertexControl vert ( VertexInput v ) + { + VertexControl o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + o.vertex = v.positionOS; + o.normalOS = v.normalOS; + + return o; + } + + TessellationFactors TessellationFunction (InputPatch v) + { + TessellationFactors o; + float4 tf = 1; + float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax; + float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp; + #if defined(ASE_FIXED_TESSELLATION) + tf = FixedTess( tessValue ); + #elif defined(ASE_DISTANCE_TESSELLATION) + tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); + #elif defined(ASE_LENGTH_TESSELLATION) + tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); + #elif defined(ASE_LENGTH_CULL_TESSELLATION) + tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); + #endif + o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; + return o; + } + + [domain("tri")] + [partitioning("fractional_odd")] + [outputtopology("triangle_cw")] + [patchconstantfunc("TessellationFunction")] + [outputcontrolpoints(3)] + VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) + { + return patch[id]; + } + + [domain("tri")] + VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) + { + VertexInput o = (VertexInput) 0; + o.positionOS = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; + o.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z; + + #if defined(ASE_PHONG_TESSELLATION) + float3 pp[3]; + for (int i = 0; i < 3; ++i) + pp[i] = o.positionOS.xyz - patch[i].normalOS * (dot(o.positionOS.xyz, patch[i].normalOS) - dot(patch[i].vertex.xyz, patch[i].normalOS)); + float phongStrength = _TessPhongStrength; + o.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.positionOS.xyz; + #endif + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + return VertexFunction(o); + } + #else + VertexOutput vert ( VertexInput v ) + { + return VertexFunction( v ); + } + #endif + + half4 frag(VertexOutput IN ) : SV_TARGET + { + SurfaceDescription surfaceDescription = (SurfaceDescription)0; + + + + surfaceDescription.Alpha = 1; + surfaceDescription.AlphaClipThreshold = 0.5; + + #if _ALPHATEST_ON + float alphaClipThreshold = 0.01f; + #if ALPHA_CLIP_THRESHOLD + alphaClipThreshold = surfaceDescription.AlphaClipThreshold; + #endif + clip(surfaceDescription.Alpha - alphaClipThreshold); + #endif + + half4 outColor = half4(_ObjectId, _PassValue, 1.0, 1.0); + return outColor; + } + ENDHLSL + } + + + Pass + { + + Name "ScenePickingPass" + Tags { "LightMode"="Picking" } + + AlphaToMask Off + + HLSLPROGRAM + + + + #define _SURFACE_TYPE_TRANSPARENT 1 + #define ASE_SRP_VERSION 140009 + + + + + #pragma vertex vert + #pragma fragment frag + + #define ATTRIBUTES_NEED_NORMAL + #define ATTRIBUTES_NEED_TANGENT + + #define SHADERPASS SHADERPASS_DEPTHONLY + + + #if ASE_SRP_VERSION >=140007 + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + #endif + + + + #if ASE_SRP_VERSION >=140007 + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" + #endif + + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" + + + + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRendering.hlsl" + + + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" + + #if defined(LOD_FADE_CROSSFADE) + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/LODCrossFade.hlsl" + #endif + + + + struct VertexInput + { + float4 positionOS : POSITION; + float3 normalOS : NORMAL; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 positionCS : SV_POSITION; + + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + CBUFFER_START(UnityPerMaterial) + float4 _Color1; + float4 _TextureSample1_ST; + float4 _TextureSample2_ST; + float4 _TextureSample0_ST; + float4 _Color0; + float _Float18; + float _Float11; + float _Float17; + float _Float8; + float _Float36; + float _Float2; + float _Float3; + float _Float21; + float _Float33; + float _Float34; + float _Float4; + float _Float10; + float _Float5; + float _Float9; + float _Float24; + float _Float20; + float _Float28; + float _Float26; + float _Float23; + float _Float15; + float _Float12; + float _Float14; + float _MaskPower1; + float _Float13; + float _Float6; + float _Float7; + float _Float31; + float _Float32; + float _Float27; + float _Float30; + float _Float25; + float _Float19; + #ifdef ASE_TESSELLATION + float _TessPhongStrength; + float _TessValue; + float _TessMin; + float _TessMax; + float _TessEdgeLength; + float _TessMaxDisp; + #endif + CBUFFER_END + + + + + float4 _SelectionID; + + struct SurfaceDescription + { + float Alpha; + float AlphaClipThreshold; + }; + + VertexOutput VertexFunction(VertexInput v ) + { + VertexOutput o; + ZERO_INITIALIZE(VertexOutput, o); + + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + + + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.positionOS.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + + float3 vertexValue = defaultVertexValue; + + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.positionOS.xyz = vertexValue; + #else + v.positionOS.xyz += vertexValue; + #endif + + v.normalOS = v.normalOS; + + float3 positionWS = TransformObjectToWorld( v.positionOS.xyz ); + o.positionCS = TransformWorldToHClip(positionWS); + return o; + } + + #if defined(ASE_TESSELLATION) + struct VertexControl + { + float4 vertex : INTERNALTESSPOS; + float3 normalOS : NORMAL; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessellationFactors + { + float edge[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; + }; + + VertexControl vert ( VertexInput v ) + { + VertexControl o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + o.vertex = v.positionOS; + o.normalOS = v.normalOS; + + return o; + } + + TessellationFactors TessellationFunction (InputPatch v) + { + TessellationFactors o; + float4 tf = 1; + float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax; + float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp; + #if defined(ASE_FIXED_TESSELLATION) + tf = FixedTess( tessValue ); + #elif defined(ASE_DISTANCE_TESSELLATION) + tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); + #elif defined(ASE_LENGTH_TESSELLATION) + tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); + #elif defined(ASE_LENGTH_CULL_TESSELLATION) + tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); + #endif + o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; + return o; + } + + [domain("tri")] + [partitioning("fractional_odd")] + [outputtopology("triangle_cw")] + [patchconstantfunc("TessellationFunction")] + [outputcontrolpoints(3)] + VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) + { + return patch[id]; + } + + [domain("tri")] + VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) + { + VertexInput o = (VertexInput) 0; + o.positionOS = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; + o.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z; + + #if defined(ASE_PHONG_TESSELLATION) + float3 pp[3]; + for (int i = 0; i < 3; ++i) + pp[i] = o.positionOS.xyz - patch[i].normalOS * (dot(o.positionOS.xyz, patch[i].normalOS) - dot(patch[i].vertex.xyz, patch[i].normalOS)); + float phongStrength = _TessPhongStrength; + o.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.positionOS.xyz; + #endif + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + return VertexFunction(o); + } + #else + VertexOutput vert ( VertexInput v ) + { + return VertexFunction( v ); + } + #endif + + half4 frag(VertexOutput IN ) : SV_TARGET + { + SurfaceDescription surfaceDescription = (SurfaceDescription)0; + + + + surfaceDescription.Alpha = 1; + surfaceDescription.AlphaClipThreshold = 0.5; + + #if _ALPHATEST_ON + float alphaClipThreshold = 0.01f; + #if ALPHA_CLIP_THRESHOLD + alphaClipThreshold = surfaceDescription.AlphaClipThreshold; + #endif + clip(surfaceDescription.Alpha - alphaClipThreshold); + #endif + + half4 outColor = 0; + outColor = _SelectionID; + + return outColor; + } + + ENDHLSL + } + + + Pass + { + + Name "DepthNormals" + Tags { "LightMode"="DepthNormalsOnly" } + + ZTest LEqual + ZWrite On + + HLSLPROGRAM + + + + #define _SURFACE_TYPE_TRANSPARENT 1 + #pragma multi_compile_instancing + #define ASE_SRP_VERSION 140009 + + + + + #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT + + + + #pragma vertex vert + #pragma fragment frag + + #define ATTRIBUTES_NEED_NORMAL + #define ATTRIBUTES_NEED_TANGENT + #define VARYINGS_NEED_NORMAL_WS + + #define SHADERPASS SHADERPASS_DEPTHNORMALSONLY + + + #if ASE_SRP_VERSION >=140007 + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + #endif + + + + #if ASE_SRP_VERSION >=140007 + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" + #endif + + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" + + + + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRendering.hlsl" + + + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" + + #if defined(LOD_FADE_CROSSFADE) + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/LODCrossFade.hlsl" + #endif + + + + struct VertexInput + { + float4 positionOS : POSITION; + float3 normalOS : NORMAL; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 positionCS : SV_POSITION; + float4 clipPosV : TEXCOORD0; + float3 normalWS : TEXCOORD1; + + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + CBUFFER_START(UnityPerMaterial) + float4 _Color1; + float4 _TextureSample1_ST; + float4 _TextureSample2_ST; + float4 _TextureSample0_ST; + float4 _Color0; + float _Float18; + float _Float11; + float _Float17; + float _Float8; + float _Float36; + float _Float2; + float _Float3; + float _Float21; + float _Float33; + float _Float34; + float _Float4; + float _Float10; + float _Float5; + float _Float9; + float _Float24; + float _Float20; + float _Float28; + float _Float26; + float _Float23; + float _Float15; + float _Float12; + float _Float14; + float _MaskPower1; + float _Float13; + float _Float6; + float _Float7; + float _Float31; + float _Float32; + float _Float27; + float _Float30; + float _Float25; + float _Float19; + #ifdef ASE_TESSELLATION + float _TessPhongStrength; + float _TessValue; + float _TessMin; + float _TessMax; + float _TessEdgeLength; + float _TessMaxDisp; + #endif + CBUFFER_END + + + + + struct SurfaceDescription + { + float Alpha; + float AlphaClipThreshold; + }; + + VertexOutput VertexFunction(VertexInput v ) + { + VertexOutput o; + ZERO_INITIALIZE(VertexOutput, o); + + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + + + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.positionOS.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + + float3 vertexValue = defaultVertexValue; + + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.positionOS.xyz = vertexValue; + #else + v.positionOS.xyz += vertexValue; + #endif + + v.normalOS = v.normalOS; + + VertexPositionInputs vertexInput = GetVertexPositionInputs( v.positionOS.xyz ); + + o.positionCS = vertexInput.positionCS; + o.clipPosV = vertexInput.positionCS; + o.normalWS = TransformObjectToWorldNormal( v.normalOS ); + return o; + } + + #if defined(ASE_TESSELLATION) + struct VertexControl + { + float4 vertex : INTERNALTESSPOS; + float3 normalOS : NORMAL; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessellationFactors + { + float edge[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; + }; + + VertexControl vert ( VertexInput v ) + { + VertexControl o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + o.vertex = v.positionOS; + o.normalOS = v.normalOS; + + return o; + } + + TessellationFactors TessellationFunction (InputPatch v) + { + TessellationFactors o; + float4 tf = 1; + float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax; + float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp; + #if defined(ASE_FIXED_TESSELLATION) + tf = FixedTess( tessValue ); + #elif defined(ASE_DISTANCE_TESSELLATION) + tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); + #elif defined(ASE_LENGTH_TESSELLATION) + tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); + #elif defined(ASE_LENGTH_CULL_TESSELLATION) + tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); + #endif + o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; + return o; + } + + [domain("tri")] + [partitioning("fractional_odd")] + [outputtopology("triangle_cw")] + [patchconstantfunc("TessellationFunction")] + [outputcontrolpoints(3)] + VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) + { + return patch[id]; + } + + [domain("tri")] + VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) + { + VertexInput o = (VertexInput) 0; + o.positionOS = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; + o.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z; + + #if defined(ASE_PHONG_TESSELLATION) + float3 pp[3]; + for (int i = 0; i < 3; ++i) + pp[i] = o.positionOS.xyz - patch[i].normalOS * (dot(o.positionOS.xyz, patch[i].normalOS) - dot(patch[i].vertex.xyz, patch[i].normalOS)); + float phongStrength = _TessPhongStrength; + o.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.positionOS.xyz; + #endif + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + return VertexFunction(o); + } + #else + VertexOutput vert ( VertexInput v ) + { + return VertexFunction( v ); + } + #endif + + void frag( VertexOutput IN + , out half4 outNormalWS : SV_Target0 + #ifdef _WRITE_RENDERING_LAYERS + , out float4 outRenderingLayers : SV_Target1 + #endif + ) + { + float4 ClipPos = IN.clipPosV; + float4 ScreenPos = ComputeScreenPos( IN.clipPosV ); + + + + float Alpha = 1; + float AlphaClipThreshold = 0.5; + + #if _ALPHATEST_ON + clip( Alpha - AlphaClipThreshold ); + #endif + + #ifdef LOD_FADE_CROSSFADE + LODFadeCrossFade( IN.positionCS ); + #endif + + #if defined(_GBUFFER_NORMALS_OCT) + float3 normalWS = normalize(IN.normalWS); + float2 octNormalWS = PackNormalOctQuadEncode(normalWS); // values between [-1, +1], must use fp32 on some platforms + float2 remappedOctNormalWS = saturate(octNormalWS * 0.5 + 0.5); // values between [ 0, 1] + half3 packedNormalWS = PackFloat2To888(remappedOctNormalWS); // values between [ 0, 1] + outNormalWS = half4(packedNormalWS, 0.0); + #else + float3 normalWS = IN.normalWS; + outNormalWS = half4(NormalizeNormalPerPixel(normalWS), 0.0); + #endif + + #ifdef _WRITE_RENDERING_LAYERS + uint renderingLayers = GetMeshRenderingLayer(); + outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); + #endif + } + + ENDHLSL + } + + + } + + CustomEditor "UnityEditor.ShaderGraphUnlitGUI" + FallBack "Hidden/Shader Graph/FallbackError" + + Fallback "Hidden/InternalErrorShader" +} +/*ASEBEGIN +Version=19501 +Node;AmplifyShaderEditor.CommentaryNode;448;1215.553,-826.0242;Inherit;False;890.0149;312.6121;暗角;8;445;444;443;442;441;440;439;438;;1,1,1,1;0;0 +Node;AmplifyShaderEditor.CommentaryNode;277;-3574.049,-644.6473;Inherit;False;2372.565;482.3597; 震屏;20;334;418;421;413;422;414;2;409;420;417;416;419;333;224;147;205;207;210;203;218;;1,1,1,1;0;0 +Node;AmplifyShaderEditor.CommentaryNode;160;-3150.844,500.2955;Inherit;False;3089.073;3926.05;色散模糊;58;52;144;51;72;80;81;96;97;110;120;122;129;124;121;123;128;131;114;98;99;100;101;103;102;105;104;107;106;109;112;113;115;111;73;174;295;296;297;298;299;300;301;302;303;304;305;306;307;308;312;313;314;315;316;317;388;387;412;;1,1,1,1;0;0 +Node;AmplifyShaderEditor.CommentaryNode;289;-595.1241,-130.7973;Inherit;False;1871.854;600.1165;肌理;17;288;287;286;281;278;285;395;394;282;391;393;389;392;390;449;450;451;;1,1,1,1;0;0 +Node;AmplifyShaderEditor.CommentaryNode;272;-2877.125,-1510.355;Inherit;False;3182.125;518.736;极坐标;35;377;153;154;8;150;376;155;267;245;259;275;246;236;257;260;263;258;243;423;6;253;373;252;261;262;237;247;242;256;374;244;241;239;248;255;;1,1,1,1;0;0 +Node;AmplifyShaderEditor.CommentaryNode;140;-1185.668,-908.265;Inherit;False;1744.32;761.6495;黑白闪;28;23;28;11;379;34;30;14;13;235;424;234;233;29;31;181;177;15;32;16;383;382;425;380;378;381;195;27;25;;1,1,1,1;0;0 +Node;AmplifyShaderEditor.CommentaryNode;276;-3501.865,-149.8065;Inherit;False;1264.625;584.4983;中心偏移;16;433;429;274;65;411;435;62;63;64;434;74;431;432;430;428;427;;1,1,1,1;0;0 +Node;AmplifyShaderEditor.CommentaryNode;193;-2168.929,-146.4858;Inherit;False;1559.412;630.3956;色散;14;60;188;186;192;191;190;189;310;309;385;386;311;436;437;;1,1,1,1;0;0 +Node;AmplifyShaderEditor.CommentaryNode;178;-3300.495,-975.2911;Inherit;False;2083.046;322.7746;Mask;17;167;166;366;398;400;401;133;165;410;365;130;164;399;142;132;173;402;;1,1,1,1;0;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;72;-2189.933,694.4026;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SamplerNode;313;-1750.236,4087.303;Inherit;True;Property;_TextureSample20;Texture Sample 20;40;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;295;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.RangedFloatNode;122;-1110.938,1139.126;Inherit;False;Constant;_Float0;Float 0;11;0;Create;True;0;0;0;False;0;False;20;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;99;-1954.2,1888.667;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;98;-1984.2,1677.142;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;107;-1958.218,3127.224;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.LerpOp;387;-2632.891,1025.366;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;129;-1050.529,1293.115;Inherit;False;Property;_Float8;色散模糊比重;15;0;Create;False;0;0;0;False;0;False;1;0;0;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;51;-2408.468,764.531;Inherit;False;3;3;0;FLOAT2;0,0;False;1;FLOAT2;0.01,0.01;False;2;FLOAT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleDivideOpNode;121;-941.3282,1013.086;Inherit;False;2;0;COLOR;0,0,0,0;False;1;FLOAT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SamplerNode;317;-1774.12,2573.504;Inherit;True;Property;_TextureSample24;Texture Sample 24;40;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;295;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.DynamicAppendNode;243;-356.0923,-1327.024;Inherit;False;FLOAT2;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SamplerNode;6;-206.8126,-1366.753;Inherit;True;Property;_TextureSample0;黑白闪纹理;23;0;Create;False;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.SamplerNode;304;-1745.315,2332.177;Inherit;True;Property;_TextureSample11;Texture Sample 11;40;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;295;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.LerpOp;131;-243.7721,728.1776;Inherit;False;3;0;FLOAT4;0,0,0,0;False;1;FLOAT4;0,0,0,0;False;2;FLOAT;0;False;1;FLOAT4;0 +Node;AmplifyShaderEditor.SamplerNode;295;-1858.179,656.0292;Inherit;True;Global;_AfterPostProcessTexture;_AfterPostProcessTexture;40;0;Create;True;0;0;0;False;0;False;-1;None;;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.SamplerNode;306;-1792.741,3134.336;Inherit;True;Property;_TextureSample13;Texture Sample 13;40;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;295;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.RangedFloatNode;124;-936.3095,1133.802;Inherit;False;Constant;_Float1;Float 1;11;0;Create;True;0;0;0;False;0;False;1;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.SamplerNode;299;-1791.849,1423.085;Inherit;True;Property;_TextureSample6;Texture Sample 6;40;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;295;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.TextureCoordinatesNode;257;-2846.852,-1420.657;Inherit;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.SimpleAddOpNode;120;-1129.497,1005.594;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.ScaleAndOffsetNode;236;-2619.465,-1418.14;Inherit;False;3;0;FLOAT2;0,0;False;1;FLOAT;2;False;2;FLOAT;-1;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.GetLocalVarNode;275;-2283.798,-1436.949;Inherit;False;274;jizuobiaoUV;1;0;OBJECT;;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.DynamicAppendNode;253;-1091.32,-1465.672;Inherit;False;FLOAT2;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;96;-1986.674,1226.774;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;109;-1965.299,3474.696;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleAddOpNode;111;-1333.418,2546.186;Inherit;False;10;10;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;COLOR;0,0,0,0;False;3;COLOR;0,0,0,0;False;4;COLOR;0,0,0,0;False;5;COLOR;0,0,0,0;False;6;COLOR;0,0,0,0;False;7;COLOR;0,0,0,0;False;8;COLOR;0,0,0,0;False;9;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;97;-1956.674,1438.3;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.GetLocalVarNode;174;-409.5116,979.1448;Inherit;False;173;mask;1;0;OBJECT;;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SamplerNode;315;-1762.789,3692.139;Inherit;True;Property;_TextureSample22;Texture Sample 22;40;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;295;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.RangedFloatNode;388;-2916.668,1246.983;Inherit;False;Property;_Float18;模糊控制方式;14;1;[Enum];Create;False;0;2;Material;0;Custom1x;1;0;False;0;False;0;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.SamplerNode;312;-1750.688,4199.092;Inherit;True;Property;_TextureSample19;Texture Sample 19;40;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;295;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.RegisterLocalVarNode;194;-24.45774,719.3594;Inherit;False;mohu;-1;True;1;0;FLOAT4;0,0,0,0;False;1;FLOAT4;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;80;-1954.141,838.848;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;115;-1983.715,4065.675;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SamplerNode;314;-1780.895,3885.381;Inherit;True;Property;_TextureSample21;Texture Sample 21;40;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;295;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;431;-3244.572,83.11942;Inherit;False;3;3;0;FLOAT;0;False;1;FLOAT;0.01;False;2;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;434;-2624.473,-66.38035;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleAddOpNode;110;-1293.191,1009.231;Inherit;False;10;10;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;COLOR;0,0,0,0;False;3;COLOR;0,0,0,0;False;4;COLOR;0,0,0,0;False;5;COLOR;0,0,0,0;False;6;COLOR;0,0,0,0;False;7;COLOR;0,0,0,0;False;8;COLOR;0,0,0,0;False;9;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;105;-1968.117,2780.788;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;114;-1993.348,4217.503;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.RangedFloatNode;52;-2965.327,959.1124;Inherit;False;Property;_Float5;模糊缩放;13;0;Create;False;0;0;0;False;0;False;0;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.PiNode;263;-1566.03,-1348.6;Inherit;False;1;0;FLOAT;2;False;1;FLOAT;0 +Node;AmplifyShaderEditor.DynamicAppendNode;123;-810.4099,1016.846;Inherit;False;FLOAT4;4;0;FLOAT3;0,0,0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;1;False;1;FLOAT4;0 +Node;AmplifyShaderEditor.GrabScreenPosition;2;-2238.715,-529.6484;Inherit;False;0;0;5;FLOAT4;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.SamplerNode;316;-1800.95,2989.175;Inherit;True;Property;_TextureSample23;Texture Sample 23;40;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;295;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;104;-1935.642,2982.417;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SamplerNode;305;-1777.475,2785.074;Inherit;True;Property;_TextureSample12;Texture Sample 12;40;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;295;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;113;-1986.267,3870.031;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SamplerNode;297;-1747.486,1031.258;Inherit;True;Property;_TextureSample4;Texture Sample 4;40;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;295;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;106;-1955.666,3322.868;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;423;117.0809,-1345.892;Inherit;False;jizuobiaowenli;-1;True;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.BreakToComponentsNode;245;-2393.959,-1285.453;Inherit;False;FLOAT2;1;0;FLOAT2;0,0;False;16;FLOAT;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT;5;FLOAT;6;FLOAT;7;FLOAT;8;FLOAT;9;FLOAT;10;FLOAT;11;FLOAT;12;FLOAT;13;FLOAT;14;FLOAT;15 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;132;-1670.399,-900.8158;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.DynamicAppendNode;155;-1329.033,-1203.623;Inherit;False;FLOAT4;4;0;FLOAT2;0,0;False;1;FLOAT;0;False;2;FLOAT2;0,0;False;3;FLOAT;0;False;1;FLOAT4;0 +Node;AmplifyShaderEditor.BreakToComponentsNode;255;-1664.204,-1448.082;Inherit;False;FLOAT2;1;0;FLOAT2;0,0;False;16;FLOAT;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT;5;FLOAT;6;FLOAT;7;FLOAT;8;FLOAT;9;FLOAT;10;FLOAT;11;FLOAT;12;FLOAT;13;FLOAT;14;FLOAT;15 +Node;AmplifyShaderEditor.PowerNode;258;-1333.69,-1307.186;Inherit;False;False;2;0;FLOAT;0;False;1;FLOAT;1;False;1;FLOAT;0 +Node;AmplifyShaderEditor.ATan2OpNode;244;-1519.204,-1451.082;Inherit;False;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.ScaleAndOffsetNode;164;-2843.692,-905.1436;Inherit;False;3;0;FLOAT2;0,0;False;1;FLOAT2;1,0;False;2;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;101;-1956.026,2209.568;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.BreakToComponentsNode;242;-1101.803,-1201.052;Inherit;False;FLOAT4;1;0;FLOAT4;0,0,0,0;False;16;FLOAT;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT;5;FLOAT;6;FLOAT;7;FLOAT;8;FLOAT;9;FLOAT;10;FLOAT;11;FLOAT;12;FLOAT;13;FLOAT;14;FLOAT;15 +Node;AmplifyShaderEditor.SamplerNode;301;-1783.758,1838.815;Inherit;True;Property;_TextureSample8;Texture Sample 8;40;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;295;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.DynamicAppendNode;241;-880.0314,-1154.114;Inherit;False;FLOAT2;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.ScaleAndOffsetNode;239;-697.8506,-1328.701;Inherit;False;3;0;FLOAT2;0,0;False;1;FLOAT2;1,0;False;2;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.DistanceOpNode;442;1601.568,-761.0242;Inherit;False;2;0;FLOAT2;0.5,0;False;1;FLOAT2;0.5,0.5;False;1;FLOAT;0 +Node;AmplifyShaderEditor.ComponentMaskNode;413;-1985.411,-478.3803;Inherit;False;True;True;False;False;1;0;FLOAT4;0,0,0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.RotatorNode;248;-2091.005,-1386.644;Inherit;False;3;0;FLOAT2;0,0;False;1;FLOAT2;0.5,0.5;False;2;FLOAT;1;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.RangedFloatNode;443;1784.568,-596.0241;Inherit;False;Property;_Float28;暗角强度;2;0;Create;False;0;0;0;False;0;False;0;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;432;-3448.669,157.2202;Inherit;False;173;mask;1;0;OBJECT;;False;1;FLOAT;0 +Node;AmplifyShaderEditor.GrabScreenPosition;438;1232.553,-776.0242;Inherit;False;0;0;5;FLOAT4;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;447;2129.913,-307.9202;Inherit;False;2;2;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.OneMinusNode;441;1570.827,-646.4122;Inherit;False;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.DynamicAppendNode;439;1469.568,-768.0242;Inherit;False;FLOAT2;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.RangedFloatNode;440;1259.827,-593.4122;Inherit;False;Property;_Float36;暗角阈值;3;0;Create;False;0;0;0;False;0;False;0;0;0;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.DynamicAppendNode;247;-1083.077,-1371.175;Inherit;False;FLOAT2;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.RangedFloatNode;334;-3233.366,-253.5867;Inherit;False;Property;_Float25;震屏测试(Custom2xy_UV震频,zw_UV振幅);31;2;[Header];[Enum];Create;False;1;______________________________________________________________________________________________________________________________;2;Partercal;0;Material;1;0;False;1;Space(10) ;False;1;1;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;451;-375.4916,200.9191;Inherit;False;Property;_Float26;旋转肌理图;37;0;Create;False;0;0;0;False;0;False;0;0;0;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.SamplerNode;278;547.4868,-40.61064;Inherit;True;Property;_TextureSample2;肌理图;36;1;[Header];Create;False;1;________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________;0;0;False;1;Space(10) ;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.ScaleAndOffsetNode;285;353.601,-11.72905;Inherit;False;3;0;FLOAT2;0,0;False;1;FLOAT2;1,0;False;2;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.Vector4Node;165;-3279.363,-849.9816;Inherit;False;Property;_TextureSample1_ST;_TextureSample1_ST;30;1;[HideInInspector];Create;False;0;0;0;False;0;False;1,1,0,0;1,1,0,0;0;5;FLOAT4;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.Vector2Node;267;-2588.192,-1285.985;Inherit;False;Constant;_Vector3;Vector 3;35;0;Create;True;0;0;0;False;0;False;1,0;0,0;0;3;FLOAT2;0;FLOAT;1;FLOAT;2 +Node;AmplifyShaderEditor.RangedFloatNode;374;-1109.39,-1274.936;Inherit;False;Property;_Float31;极坐标方向;24;1;[Enum];Create;False;0;2;U;0;V;1;0;False;0;False;0;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;410;-3076.753,-914.827;Inherit;False;409;zhenpingUV;1;0;OBJECT;;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.LerpOp;376;-1541.617,-1180.959;Inherit;False;3;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.TextureCoordinatesNode;150;-2835.901,-1180.734;Inherit;False;1;-1;4;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT4;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.SamplerNode;298;-1745.505,1213.454;Inherit;True;Property;_TextureSample5;Texture Sample 5;40;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;295;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.SaturateNode;142;-1541.096,-902.4807;Inherit;False;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.DynamicAppendNode;153;-2023.562,-1108.209;Inherit;False;FLOAT2;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.RangedFloatNode;377;-1780.747,-1081.958;Inherit;False;Property;_Float32;黑白闪流动控制方式;25;1;[Enum];Create;False;0;2;Material;0;Custom1z;1;0;False;0;False;0;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.LengthOpNode;246;-2425.016,-1418.635;Inherit;False;1;0;FLOAT2;0,0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;428;-3378.469,-14.37949;Inherit;False;423;jizuobiaowenli;1;0;OBJECT;;False;1;FLOAT;0 +Node;AmplifyShaderEditor.ScaleAndOffsetNode;262;-1898.411,-1387.625;Inherit;False;3;0;FLOAT2;0,0;False;1;FLOAT;2;False;2;FLOAT;-1;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SamplerNode;300;-1770.796,1630.695;Inherit;True;Property;_TextureSample7;Texture Sample 7;40;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;295;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.BreakToComponentsNode;237;-507.5171,-1330.032;Inherit;False;FLOAT2;1;0;FLOAT2;0,0;False;16;FLOAT;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT;5;FLOAT;6;FLOAT;7;FLOAT;8;FLOAT;9;FLOAT;10;FLOAT;11;FLOAT;12;FLOAT;13;FLOAT;14;FLOAT;15 +Node;AmplifyShaderEditor.DynamicAppendNode;167;-3042.959,-750.5533;Inherit;False;FLOAT2;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;112;-1991.415,3728.486;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;173;-1408.833,-901.5778;Inherit;False;mask;-1;True;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.Vector4Node;8;-2260.959,-1228.549;Inherit;False;Property;_TextureSample0_ST;_TextureSample0_ST;27;1;[HideInInspector];Create;False;0;0;0;False;0;False;10,0.4,0,0;30,0.4,0,0;0;5;FLOAT4;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.OneMinusNode;399;-2158.725,-837.5374;Inherit;False;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.LengthOpNode;260;-1691.272,-1304.552;Inherit;False;1;0;FLOAT2;0,0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;427;-3353.771,-110.5793;Inherit;False;409;zhenpingUV;1;0;OBJECT;;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;100;-1976.776,2038.424;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleAddOpNode;261;-1259.907,-1450.782;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0.5;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleDivideOpNode;256;-1390.207,-1450.082;Inherit;False;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.DynamicAppendNode;252;-876.5214,-1305.368;Inherit;False;FLOAT2;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SamplerNode;303;-1735.311,2162.847;Inherit;True;Property;_TextureSample10;Texture Sample 10;40;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;295;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.LerpOp;365;-2325.645,-898.7244;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.PowerNode;402;-1813.867,-897.9911;Inherit;False;False;2;0;FLOAT;0;False;1;FLOAT;1;False;1;FLOAT;0 +Node;AmplifyShaderEditor.LerpOp;128;-625.9973,968.3058;Inherit;False;3;0;FLOAT4;0,0,0,0;False;1;FLOAT4;0,0,0,0;False;2;FLOAT;0;False;1;FLOAT4;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;102;-1922.208,2586.878;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.RotatorNode;449;136.7076,-35.68084;Inherit;False;3;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;2;FLOAT;1;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;274;-2620.199,146.033;Inherit;False;jizuobiaoUV;-1;True;1;0;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.DynamicAppendNode;60;-761.5256,116.0983;Inherit;False;FLOAT4;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;1;False;1;FLOAT4;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;190;-1501.437,-56.81304;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SamplerNode;309;-1141.971,275.0348;Inherit;True;Property;_TextureSample16;Texture Sample 16;40;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;295;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.TFHCRemapNode;435;-2882.037,247.7906;Inherit;False;5;0;FLOAT2;0,0;False;1;FLOAT2;-0.5,-0.5;False;2;FLOAT2;0.5,0.5;False;3;FLOAT2;0,0;False;4;FLOAT2;1,1;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;259;-2266.26,-1349.385;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;2;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;191;-1345.44,97.43155;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SaturateNode;395;1092.317,178.6203;Inherit;False;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;188;-2099.045,-34.58498;Inherit;False;Property;_Float11;色散强度;11;1;[Header];Create;False;1;________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________;0;0;False;1;Space(10) ;False;0;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;386;-2082.021,250.2689;Inherit;False;Property;_Float17;色散控制方式;12;1;[Enum];Create;False;0;2;Material;0;Custom1y;1;0;False;0;False;0;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;195;-1163.93,-806.8636;Inherit;False;194;mohu;1;0;OBJECT;;False;1;FLOAT4;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;74;-2422.917,-73.33616;Half;False;fangsheUV;-1;True;1;0;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SamplerNode;310;-1148.78,92.81969;Inherit;True;Property;_TextureSample17;Texture Sample 17;40;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;295;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.LerpOp;381;359.7252,-360.8229;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.DynamicAppendNode;166;-3046.974,-840.1501;Inherit;False;FLOAT2;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.GetLocalVarNode;436;-1838.775,124.4086;Inherit;False;74;fangsheUV;1;0;OBJECT;;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SamplerNode;307;-1795.329,3300.728;Inherit;True;Property;_TextureSample14;Texture Sample 14;40;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;295;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.OneMinusNode;16;26.73634,-640.7651;Inherit;False;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SamplerNode;302;-1749.425,2031.677;Inherit;True;Property;_TextureSample9;Texture Sample 9;40;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;295;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;189;-1652.617,-23.77729;Inherit;False;3;3;0;FLOAT;0;False;1;FLOAT2;0.01,0.01;False;2;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.RangedFloatNode;29;-1086.699,-317.5574;Inherit;False;Property;_Float2;黑白范围;28;0;Create;False;0;0;0;False;0;False;1;0.655;0;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleAddOpNode;30;-714.2914,-296.4837;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;235;-1086.302,-656.4102;Inherit;False;Constant;_Float22;Float 22;34;0;Create;True;0;0;0;False;0;False;1;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.TextureCoordinatesNode;144;-3032.21,1041.225;Inherit;False;1;-1;4;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT4;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.RangedFloatNode;382;187.4887,-417.3859;Inherit;False;Property;_Float4;黑白闪开关;17;2;[Header];[Toggle];Create;False;1;________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________;0;0;False;1;Space(10) ;False;0;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;210;-3554.503,-512.605;Inherit;False;Property;_Float15;U震频测试(随数值变化往复震动);32;0;Create;False;0;0;0;False;0;False;0;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;412;-2421.654,654.626;Inherit;False;433;jizuobiaopianyi;1;0;OBJECT;;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.GetLocalVarNode;73;-2979.506,623.9093;Inherit;False;74;fangsheUV;1;0;OBJECT;;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;192;-1315.44,308.9566;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.LerpOp;283;1304.187,-255.5541;Inherit;False;3;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;FLOAT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.DynamicAppendNode;287;-129.1561,254.1237;Inherit;False;FLOAT2;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.RangedFloatNode;64;-3411.62,348.2349;Inherit;False;Property;_Float7;中心位置V;5;0;Create;False;0;0;0;False;0;False;0;0;-0.5;0.5;0;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleAddOpNode;394;927.2416,176.0205;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.Vector4Node;286;-524.1252,273.5826;Inherit;False;Property;_TextureSample2_ST;_TextureSample2_ST;39;1;[HideInInspector];Create;True;0;0;0;False;0;False;1,1,0,0;1,1,0,0;0;5;FLOAT4;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.RangedFloatNode;282;537.0048,241.6402;Inherit;False;Property;_Float23;肌理强度;38;0;Create;False;0;0;0;False;0;False;0;0;-1;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.DynamicAppendNode;393;-86.65604,-62.72879;Inherit;False;FLOAT2;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.LerpOp;225;839.3356,-491.6484;Inherit;False;3;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;FLOAT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.ComponentMaskNode;27;-811.1209,-809.379;Inherit;False;True;False;False;True;1;0;FLOAT3;0,0,0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleDivideOpNode;391;-358.3563,111.4712;Inherit;False;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;433;-2882.373,-50.14769;Inherit;False;jizuobiaopianyi;-1;True;1;0;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.TFHCRemapNode;229;1071.122,-479.108;Inherit;False;5;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;COLOR;1,1,1,1;False;3;COLOR;1,1,1,1;False;4;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;392;-233.5563,-93.92885;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.LerpOp;385;-1831.437,-19.79293;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;437;-1811.573,-104.6846;Inherit;False;433;jizuobiaopianyi;1;0;OBJECT;;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;281;910.9625,-19.84981;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.ScreenParams;390;-552.0563,90.67123;Inherit;False;0;5;FLOAT4;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.RangedFloatNode;232;830.1223,-374.107;Inherit;False;Property;_Float20;色阶黑;0;0;Create;False;0;0;0;False;0;False;0;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.TextureCoordinatesNode;186;-2121.656,62.98188;Inherit;False;1;-1;4;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT4;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.RangedFloatNode;231;818.1223,-262.1065;Inherit;False;Property;_Float19;色阶白;1;0;Create;False;0;0;0;False;0;False;1;1;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.ScreenPosInputsNode;389;-574.1561,-90.02885;Float;False;0;False;0;5;FLOAT4;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.LerpOp;32;233.6891,-671.4832;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.DynamicAppendNode;288;-115.156,343.1234;Inherit;False;FLOAT2;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.DesaturateOpNode;25;-992.2376,-804.3632;Inherit;False;2;0;FLOAT3;0,0,0;False;1;FLOAT;1;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.RangedFloatNode;205;-3544.768,-250.4598;Inherit;False;Property;_Float13;V振幅测试;35;0;Create;False;0;0;0;False;0;False;0;0;0;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;409;-1396.816,-450.3758;Inherit;False;zhenpingUV;-1;True;1;0;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.RangedFloatNode;133;-1799.046,-773.1957;Inherit;False;Property;_Float9;Msak强度;10;0;Create;False;0;0;0;False;0;False;1;1;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;63;-3405.62,255.2345;Inherit;False;Property;_Float6;中心位置U;4;0;Create;False;0;0;0;False;0;False;0;0;-0.5;0.5;0;1;FLOAT;0 +Node;AmplifyShaderEditor.ColorNode;28;-222.0997,-866.98;Inherit;False;Property;_Color1;黑白闪颜色2;20;0;Create;False;0;0;0;False;0;False;0,0,0,1;0,0,0,1;True;True;0;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.ColorNode;23;28.3742,-857.6399;Inherit;False;Property;_Color0;黑白闪颜色1;19;0;Create;False;0;0;0;False;0;False;1,1,1,1;1,1,1,1;True;True;0;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.GetLocalVarNode;197;618.597,-698.6054;Inherit;False;194;mohu;1;0;OBJECT;;False;1;FLOAT4;0 +Node;AmplifyShaderEditor.RangedFloatNode;234;-1176.653,-491.0856;Inherit;False;Property;_Float21;黑白闪纹理强度;26;0;Create;False;0;0;0;False;0;False;0;0.84;0;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;203;-3561.017,-418.3958;Inherit;False;Property;_Float12;V振频测试(随数值变化往复震动);34;0;Create;False;0;0;0;False;0;False;0;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;31;-1110.799,-232.4574;Inherit;False;Property;_Float3;黑白过度;29;0;Create;False;0;0;0;False;0;False;0;0.0628;0;0.1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.DynamicAppendNode;218;-3221.729,-417.3526;Inherit;False;FLOAT4;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT4;0 +Node;AmplifyShaderEditor.RangedFloatNode;430;-3449.971,85.72037;Inherit;False;Property;_Float27;放射纹理强度;16;0;Create;False;0;0;0;False;0;False;0;3.83;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.LerpOp;373;-876.3893,-1432.937;Inherit;False;3;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SamplerNode;296;-1761.444,848.3954;Inherit;True;Property;_TextureSample3;Texture Sample 3;40;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;295;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.VertexColorNode;34;-332.5226,-448.7091;Inherit;False;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.RangedFloatNode;379;-224.4298,-550.09;Inherit;False;Property;_Float33;黑白切换;21;1;[Toggle];Create;False;0;0;0;False;0;False;0;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;419;-2393.538,-285.1124;Inherit;False;3;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.TFHCRemapNode;444;1749.827,-759.4122;Inherit;False;5;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;1;False;3;FLOAT;1;False;4;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.DynamicAppendNode;154;-2031.626,-1199.451;Inherit;False;FLOAT2;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SamplerNode;308;-1783.987,3452.971;Inherit;True;Property;_TextureSample15;Texture Sample 15;40;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;295;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.TextureCoordinatesNode;425;-49.87839,-422.0964;Inherit;False;1;-1;4;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT4;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.LerpOp;233;-840.3687,-620.8506;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;383;115.5112,-245.5841;Inherit;False;Property;_Float10;黑白闪开关控制方式;18;1;[Enum];Create;False;0;2;Material;0;Custom1w;1;0;False;0;False;0;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.DynamicAppendNode;65;-3068.459,239.5778;Inherit;False;FLOAT2;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;81;-1924.141,1050.373;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SamplerNode;130;-2658.82,-928.6397;Inherit;True;Property;_TextureSample1;Mask;6;1;[Header];Create;False;1;________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________;0;0;False;1;Space(10) ;False;-1;None;8c4a7fca2884fab419769ccc0355c0c1;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;103;-1954.683,2385.25;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;62;-2866.91,149.3548;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.LerpOp;15;386.9319,-748.0498;Inherit;False;3;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;FLOAT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SmoothstepOpNode;11;-224.9848,-678.8261;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;1;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleAddOpNode;14;-362.5193,-781.4708;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;207;-3555.552,-331.609;Inherit;False;Property;_Float14;U振幅测试;33;0;Create;False;0;0;0;False;0;False;0;0;0;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.SinOpNode;417;-2588.538,-364.1124;Inherit;False;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;411;-3090.967,138.1547;Inherit;False;409;zhenpingUV;1;0;OBJECT;;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.RangedFloatNode;380;-353.459,-262.4684;Inherit;False;Property;_Float34;黑白切换控制方式;22;1;[Enum];Create;False;0;2;Material;0;ParticleAlphy;1;0;False;0;False;0;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.BreakToComponentsNode;224;-2742.674,-429.558;Inherit;False;FLOAT4;1;0;FLOAT4;0,0,0,0;False;16;FLOAT;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT;5;FLOAT;6;FLOAT;7;FLOAT;8;FLOAT;9;FLOAT;10;FLOAT;11;FLOAT;12;FLOAT;13;FLOAT;14;FLOAT;15 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;418;-2410.374,-459.4407;Inherit;False;3;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;420;-2640.473,-243.0348;Inherit;False;Constant;_Float16;Float 16;39;0;Create;True;0;0;0;False;0;False;0.5;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;366;-2516.949,-739.3978;Inherit;False;Property;_Float30;Mask通道;7;1;[Enum];Create;False;0;2;R;0;A;1;0;False;0;False;3;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;177;-956.2712,-402.1875;Inherit;False;173;mask;1;0;OBJECT;;False;1;FLOAT;0 +Node;AmplifyShaderEditor.LerpOp;429;-3073.476,-39.66197;Inherit;False;3;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SinOpNode;416;-2565.483,-497.8315;Inherit;False;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.TextureCoordinatesNode;147;-3252.214,-605.255;Inherit;False;2;-1;4;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT4;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.RangedFloatNode;398;-2204.741,-757.6666;Inherit;False;Property;_Float24;OneMinusMask;8;1;[Toggle];Create;False;0;0;0;False;0;False;0;1;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.DynamicAppendNode;421;-2238.194,-348.7364;Inherit;False;FLOAT2;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;13;-506.9701,-684.8469;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;424;-1115.113,-576.9324;Inherit;False;423;jizuobiaowenli;1;0;OBJECT;;False;1;FLOAT;0 +Node;AmplifyShaderEditor.LerpOp;333;-2934.498,-542.5941;Inherit;False;3;0;FLOAT4;0,0,0,0;False;1;FLOAT4;0,0,0,0;False;2;FLOAT;0;False;1;FLOAT4;0 +Node;AmplifyShaderEditor.LerpOp;378;35.14931,-567.7101;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SamplerNode;311;-1151.716,-114.2962;Inherit;True;Property;_TextureSample18;Texture Sample 18;40;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;295;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.PiNode;450;-68.69227,89.11913;Inherit;False;1;0;FLOAT;1;False;1;FLOAT;0 +Node;AmplifyShaderEditor.ScaleAndOffsetNode;414;-1782.754,-414.0182;Inherit;False;3;0;FLOAT2;0,0;False;1;FLOAT;1;False;2;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.ClampOpNode;422;-2083.538,-347.3923;Inherit;False;3;0;FLOAT2;0,0;False;1;FLOAT2;-1,-1;False;2;FLOAT2;1,1;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.LerpOp;400;-1981.721,-896.588;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.PowerNode;445;1972.568,-709.0242;Inherit;False;False;2;0;FLOAT;0;False;1;FLOAT;2.53;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;401;-1990.227,-772.9918;Inherit;False;Property;_MaskPower1;MaskPower;9;0;Create;True;0;0;0;False;0;False;1;1;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.LerpOp;181;-669.504,-650.7016;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;294;1155.623,-752.777;Float;False;False;-1;2;UnityEditor.ShaderGraphUnlitGUI;0;1;New Amplify Shader;2992e84f91cbeb14eab234972e07ea9d;True;Meta;0;4;Meta;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;False;False;False;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Unlit;True;5;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;2;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;LightMode=Meta;False;False;0;Hidden/InternalErrorShader;0;0;Standard;0;False;0 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;292;1155.623,-752.777;Float;False;False;-1;2;UnityEditor.ShaderGraphUnlitGUI;0;1;New Amplify Shader;2992e84f91cbeb14eab234972e07ea9d;True;ShadowCaster;0;2;ShadowCaster;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;False;False;False;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Unlit;True;5;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;False;False;True;False;False;False;False;0;False;;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;False;True;1;LightMode=ShadowCaster;False;False;0;Hidden/InternalErrorShader;0;0;Standard;0;False;0 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;290;1465.842,-213.586;Float;False;False;-1;2;UnityEditor.ShaderGraphUnlitGUI;0;1;New Amplify Shader;2992e84f91cbeb14eab234972e07ea9d;True;ExtraPrePass;0;0;ExtraPrePass;5;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;False;False;False;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Unlit;True;5;True;12;all;0;False;True;1;1;False;;0;False;;0;1;False;;0;False;;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;True;True;True;True;0;False;;False;False;False;False;False;False;False;True;False;255;False;;255;False;;255;False;;7;False;;1;False;;1;False;;1;False;;7;False;;1;False;;1;False;;1;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;0;False;False;0;Hidden/InternalErrorShader;0;0;Standard;0;False;0 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;291;2283.99,-311.5463;Float;False;True;-1;2;UnityEditor.ShaderGraphUnlitGUI;0;13;LF/URP后期2.0;2992e84f91cbeb14eab234972e07ea9d;True;Forward;0;1;Forward;8;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;2;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;False;False;False;True;4;RenderPipeline=UniversalPipeline;RenderType=Transparent=RenderType;Queue=Transparent=Queue=1000;UniversalMaterialType=Unlit;True;5;True;12;all;0;False;True;1;5;False;;10;False;;1;1;False;;10;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;True;True;True;True;0;False;;False;False;False;False;False;False;False;True;False;255;False;;255;False;;255;False;;7;False;;1;False;;1;False;;1;False;;7;False;;1;False;;1;False;;1;False;;False;True;2;False;;True;3;False;;True;True;0;False;;0;False;;True;1;LightMode=Grab;False;False;0;Hidden/InternalErrorShader;0;0;Standard;22;Surface;1;0; Blend;0;0;Two Sided;0;0;Forward Only;0;0;Cast Shadows;1;0; Use Shadow Threshold;0;0;Receive Shadows;1;0;GPU Instancing;1;0;LOD CrossFade;0;0;Built-in Fog;0;0;Meta Pass;0;0;Extra Pre Pass;0;0;Tessellation;0;0; Phong;0;0; Strength;0.5,False,;0; Type;0;0; Tess;16,False,;0; Min;10,False,;0; Max;25,False,;0; Edge Length;16,False,;0; Max Displacement;25,False,;0;Vertex Position,InvertActionOnDeselection;1;0;0;10;False;True;True;True;False;False;True;True;True;False;False;;False;0 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;293;1155.623,-752.777;Float;False;False;-1;2;UnityEditor.ShaderGraphUnlitGUI;0;1;New Amplify Shader;2992e84f91cbeb14eab234972e07ea9d;True;DepthOnly;0;3;DepthOnly;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;False;False;False;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Unlit;True;5;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;False;False;True;False;False;False;False;0;False;;False;False;False;False;False;False;False;False;False;True;1;False;;False;False;True;1;LightMode=DepthOnly;False;False;0;Hidden/InternalErrorShader;0;0;Standard;0;False;0 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;452;2283.99,-261.5463;Float;False;False;-1;2;UnityEditor.ShaderGraphUnlitGUI;0;1;New Amplify Shader;2992e84f91cbeb14eab234972e07ea9d;True;Universal2D;0;5;Universal2D;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;False;False;False;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Unlit;True;5;True;12;all;0;False;True;1;1;False;;0;False;;0;1;False;;0;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;True;True;True;True;0;False;;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;1;LightMode=Universal2D;False;False;0;;0;0;Standard;0;False;0 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;453;2283.99,-261.5463;Float;False;False;-1;2;UnityEditor.ShaderGraphUnlitGUI;0;1;New Amplify Shader;2992e84f91cbeb14eab234972e07ea9d;True;SceneSelectionPass;0;6;SceneSelectionPass;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;False;False;False;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Unlit;True;5;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;2;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;LightMode=SceneSelectionPass;False;False;0;;0;0;Standard;0;False;0 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;454;2283.99,-261.5463;Float;False;False;-1;2;UnityEditor.ShaderGraphUnlitGUI;0;1;New Amplify Shader;2992e84f91cbeb14eab234972e07ea9d;True;ScenePickingPass;0;7;ScenePickingPass;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;False;False;False;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Unlit;True;5;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;LightMode=Picking;False;False;0;;0;0;Standard;0;False;0 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;455;2283.99,-261.5463;Float;False;False;-1;2;UnityEditor.ShaderGraphUnlitGUI;0;1;New Amplify Shader;2992e84f91cbeb14eab234972e07ea9d;True;DepthNormals;0;8;DepthNormals;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;False;False;False;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Unlit;True;5;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;False;True;1;LightMode=DepthNormalsOnly;False;False;0;;0;0;Standard;0;False;0 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;456;2283.99,-261.5463;Float;False;False;-1;2;UnityEditor.ShaderGraphUnlitGUI;0;1;New Amplify Shader;2992e84f91cbeb14eab234972e07ea9d;True;DepthNormalsOnly;0;9;DepthNormalsOnly;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;False;False;False;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Unlit;True;5;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;False;True;1;LightMode=DepthNormalsOnly;False;True;9;d3d11;metal;vulkan;xboxone;xboxseries;playstation;ps4;ps5;switch;0;;0;0;Standard;0;False;0 +WireConnection;72;0;412;0 +WireConnection;72;1;51;0 +WireConnection;313;1;115;0 +WireConnection;99;0;98;0 +WireConnection;99;1;51;0 +WireConnection;98;0;97;0 +WireConnection;98;1;51;0 +WireConnection;107;0;104;0 +WireConnection;107;1;51;0 +WireConnection;387;0;52;0 +WireConnection;387;1;144;1 +WireConnection;387;2;388;0 +WireConnection;51;0;73;0 +WireConnection;51;2;387;0 +WireConnection;121;0;120;0 +WireConnection;121;1;122;0 +WireConnection;317;1;102;0 +WireConnection;243;0;237;0 +WireConnection;6;1;243;0 +WireConnection;304;1;103;0 +WireConnection;131;0;295;0 +WireConnection;131;1;128;0 +WireConnection;131;2;174;0 +WireConnection;295;1;72;0 +WireConnection;306;1;107;0 +WireConnection;299;1;97;0 +WireConnection;120;0;110;0 +WireConnection;120;1;111;0 +WireConnection;236;0;257;0 +WireConnection;253;0;261;0 +WireConnection;253;1;258;0 +WireConnection;96;0;81;0 +WireConnection;96;1;51;0 +WireConnection;109;0;106;0 +WireConnection;109;1;51;0 +WireConnection;111;0;317;0 +WireConnection;111;1;305;0 +WireConnection;111;2;316;0 +WireConnection;111;3;306;0 +WireConnection;111;4;307;0 +WireConnection;111;5;308;0 +WireConnection;111;6;315;0 +WireConnection;111;7;314;0 +WireConnection;111;8;313;0 +WireConnection;111;9;312;0 +WireConnection;97;0;96;0 +WireConnection;97;1;51;0 +WireConnection;315;1;112;0 +WireConnection;312;1;114;0 +WireConnection;194;0;131;0 +WireConnection;80;0;72;0 +WireConnection;80;1;51;0 +WireConnection;115;0;113;0 +WireConnection;115;1;51;0 +WireConnection;314;1;113;0 +WireConnection;431;0;430;0 +WireConnection;431;2;432;0 +WireConnection;434;0;433;0 +WireConnection;434;1;435;0 +WireConnection;110;0;295;0 +WireConnection;110;1;296;0 +WireConnection;110;2;297;0 +WireConnection;110;3;298;0 +WireConnection;110;4;299;0 +WireConnection;110;5;300;0 +WireConnection;110;6;301;0 +WireConnection;110;7;302;0 +WireConnection;110;8;303;0 +WireConnection;110;9;304;0 +WireConnection;105;0;102;0 +WireConnection;105;1;51;0 +WireConnection;114;0;115;0 +WireConnection;114;1;51;0 +WireConnection;123;0;121;0 +WireConnection;123;3;124;0 +WireConnection;316;1;104;0 +WireConnection;104;0;105;0 +WireConnection;104;1;51;0 +WireConnection;305;1;105;0 +WireConnection;113;0;112;0 +WireConnection;113;1;51;0 +WireConnection;297;1;81;0 +WireConnection;106;0;107;0 +WireConnection;106;1;51;0 +WireConnection;423;0;6;1 +WireConnection;245;0;267;0 +WireConnection;132;0;402;0 +WireConnection;132;1;133;0 +WireConnection;155;0;8;0 +WireConnection;155;2;376;0 +WireConnection;255;0;262;0 +WireConnection;258;0;260;0 +WireConnection;258;1;245;0 +WireConnection;244;0;255;1 +WireConnection;244;1;255;0 +WireConnection;164;0;410;0 +WireConnection;164;1;166;0 +WireConnection;164;2;167;0 +WireConnection;101;0;100;0 +WireConnection;101;1;51;0 +WireConnection;242;0;155;0 +WireConnection;301;1;99;0 +WireConnection;241;0;242;2 +WireConnection;241;1;242;3 +WireConnection;239;0;373;0 +WireConnection;239;1;252;0 +WireConnection;239;2;241;0 +WireConnection;442;0;439;0 +WireConnection;413;0;2;0 +WireConnection;248;0;275;0 +WireConnection;248;2;259;0 +WireConnection;447;0;445;0 +WireConnection;447;1;283;0 +WireConnection;441;0;440;0 +WireConnection;439;0;438;1 +WireConnection;439;1;438;2 +WireConnection;247;0;258;0 +WireConnection;247;1;261;0 +WireConnection;278;1;285;0 +WireConnection;285;0;449;0 +WireConnection;285;1;287;0 +WireConnection;285;2;288;0 +WireConnection;376;0;154;0 +WireConnection;376;1;153;0 +WireConnection;376;2;377;0 +WireConnection;298;1;96;0 +WireConnection;142;0;132;0 +WireConnection;153;0;8;3 +WireConnection;153;1;150;3 +WireConnection;246;0;236;0 +WireConnection;262;0;248;0 +WireConnection;300;1;98;0 +WireConnection;237;0;239;0 +WireConnection;167;0;165;3 +WireConnection;167;1;165;4 +WireConnection;112;0;109;0 +WireConnection;112;1;51;0 +WireConnection;173;0;142;0 +WireConnection;399;0;365;0 +WireConnection;260;0;262;0 +WireConnection;100;0;99;0 +WireConnection;100;1;51;0 +WireConnection;261;0;256;0 +WireConnection;256;0;244;0 +WireConnection;256;1;263;0 +WireConnection;252;0;242;0 +WireConnection;252;1;242;1 +WireConnection;303;1;101;0 +WireConnection;365;0;130;1 +WireConnection;365;1;130;4 +WireConnection;365;2;366;0 +WireConnection;402;0;400;0 +WireConnection;402;1;401;0 +WireConnection;128;0;60;0 +WireConnection;128;1;123;0 +WireConnection;128;2;129;0 +WireConnection;102;0;103;0 +WireConnection;102;1;51;0 +WireConnection;449;0;393;0 +WireConnection;449;2;450;0 +WireConnection;274;0;62;0 +WireConnection;60;0;311;1 +WireConnection;60;1;310;2 +WireConnection;60;2;309;3 +WireConnection;190;0;437;0 +WireConnection;190;1;189;0 +WireConnection;309;1;192;0 +WireConnection;435;0;65;0 +WireConnection;259;0;246;0 +WireConnection;259;1;245;1 +WireConnection;191;0;190;0 +WireConnection;191;1;189;0 +WireConnection;395;0;394;0 +WireConnection;74;0;434;0 +WireConnection;310;1;191;0 +WireConnection;381;0;382;0 +WireConnection;381;1;425;4 +WireConnection;381;2;383;0 +WireConnection;166;0;165;1 +WireConnection;166;1;165;2 +WireConnection;307;1;106;0 +WireConnection;16;0;11;0 +WireConnection;302;1;100;0 +WireConnection;189;0;385;0 +WireConnection;189;2;436;0 +WireConnection;30;0;29;0 +WireConnection;30;1;31;0 +WireConnection;192;0;191;0 +WireConnection;192;1;189;0 +WireConnection;283;0;281;0 +WireConnection;283;1;229;0 +WireConnection;283;2;395;0 +WireConnection;287;0;286;1 +WireConnection;287;1;286;2 +WireConnection;394;0;278;1 +WireConnection;394;1;282;0 +WireConnection;393;0;392;0 +WireConnection;393;1;389;2 +WireConnection;225;0;197;0 +WireConnection;225;1;15;0 +WireConnection;225;2;381;0 +WireConnection;27;0;25;0 +WireConnection;391;0;390;1 +WireConnection;391;1;390;2 +WireConnection;433;0;429;0 +WireConnection;229;0;225;0 +WireConnection;229;3;232;0 +WireConnection;229;4;231;0 +WireConnection;392;0;389;1 +WireConnection;392;1;391;0 +WireConnection;385;0;188;0 +WireConnection;385;1;186;2 +WireConnection;385;2;386;0 +WireConnection;281;0;278;1 +WireConnection;281;1;282;0 +WireConnection;32;0;11;0 +WireConnection;32;1;16;0 +WireConnection;32;2;378;0 +WireConnection;288;0;286;3 +WireConnection;288;1;286;4 +WireConnection;25;0;195;0 +WireConnection;409;0;414;0 +WireConnection;218;0;210;0 +WireConnection;218;1;203;0 +WireConnection;218;2;207;0 +WireConnection;218;3;205;0 +WireConnection;373;0;253;0 +WireConnection;373;1;247;0 +WireConnection;373;2;374;0 +WireConnection;296;1;80;0 +WireConnection;419;0;417;0 +WireConnection;419;1;224;3 +WireConnection;419;2;420;0 +WireConnection;444;0;442;0 +WireConnection;444;2;441;0 +WireConnection;154;0;8;3 +WireConnection;154;1;8;4 +WireConnection;308;1;109;0 +WireConnection;233;0;235;0 +WireConnection;233;1;424;0 +WireConnection;233;2;234;0 +WireConnection;65;0;63;0 +WireConnection;65;1;64;0 +WireConnection;81;0;80;0 +WireConnection;81;1;51;0 +WireConnection;130;1;164;0 +WireConnection;103;0;101;0 +WireConnection;103;1;51;0 +WireConnection;62;0;411;0 +WireConnection;62;1;65;0 +WireConnection;15;0;23;0 +WireConnection;15;1;28;0 +WireConnection;15;2;32;0 +WireConnection;11;0;14;0 +WireConnection;11;1;29;0 +WireConnection;11;2;30;0 +WireConnection;14;0;27;0 +WireConnection;14;1;13;0 +WireConnection;417;0;224;1 +WireConnection;224;0;333;0 +WireConnection;418;0;416;0 +WireConnection;418;1;224;2 +WireConnection;418;2;420;0 +WireConnection;429;0;427;0 +WireConnection;429;1;428;0 +WireConnection;429;2;431;0 +WireConnection;416;0;224;0 +WireConnection;421;0;418;0 +WireConnection;421;1;419;0 +WireConnection;13;0;27;0 +WireConnection;13;1;181;0 +WireConnection;333;0;147;0 +WireConnection;333;1;218;0 +WireConnection;333;2;334;0 +WireConnection;378;0;379;0 +WireConnection;378;1;34;4 +WireConnection;378;2;380;0 +WireConnection;311;1;190;0 +WireConnection;450;0;451;0 +WireConnection;414;0;413;0 +WireConnection;414;2;422;0 +WireConnection;422;0;421;0 +WireConnection;400;0;365;0 +WireConnection;400;1;399;0 +WireConnection;400;2;398;0 +WireConnection;445;0;444;0 +WireConnection;445;1;443;0 +WireConnection;181;0;27;0 +WireConnection;181;1;233;0 +WireConnection;181;2;177;0 +WireConnection;291;2;447;0 +ASEEND*/ +//CHKSM=D7B2835515CD1C028241B4E3E59C10B40B58B42C \ No newline at end of file diff --git a/Assets/Shaders/LF_URP后期2.0.shader.meta b/Assets/Shaders/LF_URP后期2.0.shader.meta new file mode 100644 index 00000000..98faa668 --- /dev/null +++ b/Assets/Shaders/LF_URP后期2.0.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1828b8a7039d30b4497ec4b19fd57158 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/TrackShader.shader b/Assets/Shaders/TrackShader.shader index be54d17b..81c64804 100755 --- a/Assets/Shaders/TrackShader.shader +++ b/Assets/Shaders/TrackShader.shader @@ -604,12 +604,12 @@ Shader "Soullies/TrackShader" } /*ASEBEGIN Version=19501 -Node;AmplifyShaderEditor.SamplerNode;6;-992,-272;Inherit;True;Property;_MainTexture;MainTexture;0;0;Create;True;0;0;0;False;0;False;-1;None;b48cbbfc5b4a8f243b7275d66a4961f7;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.SamplerNode;6;-992,-272;Inherit;True;Property;_MainTexture;MainTexture;0;0;Create;True;0;0;0;False;0;False;-1;None;1b188f566ed9d72469ee7616c62de84b;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 Node;AmplifyShaderEditor.BreakToComponentsNode;10;-672,-272;Inherit;False;COLOR;1;0;COLOR;0,0,0,0;False;16;FLOAT;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT;5;FLOAT;6;FLOAT;7;FLOAT;8;FLOAT;9;FLOAT;10;FLOAT;11;FLOAT;12;FLOAT;13;FLOAT;14;FLOAT;15 Node;AmplifyShaderEditor.StaticSwitch;28;-496,-160;Inherit;False;Property;_UseRedAsAlpha;UseRedAsAlpha;3;0;Create;True;0;0;0;False;0;False;0;1;1;True;;Toggle;2;Key0;Key1;Create;True;True;All;9;1;FLOAT;0;False;0;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;4;FLOAT;0;False;5;FLOAT;0;False;6;FLOAT;0;False;7;FLOAT;0;False;8;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.ColorNode;8;-368,-16;Inherit;False;Property;_BaseColor;BaseColor;1;0;Create;True;0;0;0;False;0;False;0,0,0,0;1,1,1,1;True;True;0;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 Node;AmplifyShaderEditor.DynamicAppendNode;13;-192,-272;Inherit;False;COLOR;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;COLOR;0 -Node;AmplifyShaderEditor.ColorNode;20;-80,208;Inherit;False;Property;_EmissionColor;EmissionColor;2;1;[HDR];Create;True;0;0;0;False;0;False;0,0,0,0;1,1,1,1;True;True;0;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.ColorNode;20;-80,208;Inherit;False;Property;_EmissionColor;EmissionColor;2;1;[HDR];Create;True;0;0;0;False;0;False;0,0,0,0;4,4,4,1;True;True;0;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 Node;AmplifyShaderEditor.ColorNode;52;-80,16;Inherit;False;Constant;_Color0;Color 0;6;0;Create;True;0;0;0;False;0;False;1,1,1,1;0,0,0,0;True;True;0;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 Node;AmplifyShaderEditor.SimpleMultiplyOpNode;14;-16,-192;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 Node;AmplifyShaderEditor.StaticSwitch;31;192,-16;Inherit;False;Property;_Emission;Emission;4;0;Create;True;0;0;0;False;0;False;0;0;1;True;;Toggle;2;Key0;Key1;Create;True;True;All;9;1;COLOR;0,0,0,0;False;0;COLOR;0,0,0,0;False;2;COLOR;0,0,0,0;False;3;COLOR;0,0,0,0;False;4;COLOR;0,0,0,0;False;5;COLOR;0,0,0,0;False;6;COLOR;0,0,0,0;False;7;COLOR;0,0,0,0;False;8;COLOR;0,0,0,0;False;1;COLOR;0 @@ -634,4 +634,4 @@ WireConnection;21;0;14;0 WireConnection;21;1;31;0 WireConnection;46;1;21;0 ASEEND*/ -//CHKSM=153CC78E2A8D4184FECF78C9032F5E0DC8E5F8A2 \ No newline at end of file +//CHKSM=1F07C1C12E74CE8975B3140440CF7DB49161DA07 \ No newline at end of file diff --git a/Assets/StreamingAssets/AutoSave/Chaos Zone/AutoSave_0.json b/Assets/StreamingAssets/AutoSave/Chaos Zone/AutoSave_0.json index 3f6e551b..d8ffbd5c 100644 --- a/Assets/StreamingAssets/AutoSave/Chaos Zone/AutoSave_0.json +++ b/Assets/StreamingAssets/AutoSave/Chaos Zone/AutoSave_0.json @@ -569,7 +569,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -629,7 +629,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -689,7 +689,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -749,7 +749,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -1081,7 +1081,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -1141,7 +1141,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -1201,7 +1201,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -1261,7 +1261,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -1593,7 +1593,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -1653,7 +1653,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -1713,7 +1713,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -1773,7 +1773,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -2115,7 +2115,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -2175,7 +2175,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -2235,7 +2235,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -2295,7 +2295,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -3008,7 +3008,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -3068,7 +3068,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -3186,7 +3186,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -3246,7 +3246,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -3374,7 +3374,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -3434,7 +3434,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -3552,7 +3552,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -3612,7 +3612,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -3730,7 +3730,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -3790,7 +3790,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -4290,7 +4290,34 @@ "effectTime" : 0.2 } ],"GeneralJudge":[ - + { + "__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMRippleEffect_BM,Assembly-CSharp", + "isCircle" : true, + "rippleTime" : 1, + "positionOffset" : { + "x" : 0, + "y" : 0, + "z" : 0 + }, + "eulerAngles" : { + "x" : 0, + "y" : 0, + "z" : 0 + }, + "scale" : { + "x" : 5, + "y" : 5, + "z" : 5 + }, + "emissionColor" : { + "r" : 1, + "g" : 1, + "b" : 1, + "a" : 1 + }, + "emissionIntensity" : 0, + "effectTime" : 0 + } ],"StartHold":[ ],"Holding":[ @@ -17355,7 +17382,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -17415,7 +17442,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -17543,7 +17570,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -17603,7 +17630,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -17731,7 +17758,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -17791,7 +17818,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -17919,7 +17946,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -17979,7 +18006,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -18137,7 +18164,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -18197,7 +18224,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -18315,7 +18342,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -18375,7 +18402,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -20385,7 +20412,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -20445,7 +20472,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -20563,7 +20590,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -20623,7 +20650,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -25338,7 +25365,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -25398,7 +25425,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "New Path Node", "tags" : [ @@ -38293,7 +38320,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "0", "tags" : [ @@ -38353,7 +38380,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "PathNode0", "tags" : [ @@ -38413,7 +38440,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "PathNode1", "tags" : [ @@ -38473,7 +38500,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "PathNode2", "tags" : [ @@ -38533,7 +38560,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "PathNode3", "tags" : [ @@ -38593,7 +38620,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "PathNode4", "tags" : [ @@ -38653,7 +38680,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "PathNode5", "tags" : [ @@ -38713,7 +38740,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "PathNode6", "tags" : [ @@ -38773,7 +38800,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "PathNode7", "tags" : [ @@ -38833,7 +38860,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "PathNode8", "tags" : [ @@ -38893,7 +38920,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "PathNode9", "tags" : [ @@ -38953,7 +38980,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "PathNode10", "tags" : [ @@ -39013,7 +39040,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "PathNode11", "tags" : [ @@ -39073,7 +39100,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "PathNode12", "tags" : [ @@ -39133,7 +39160,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "PathNode13", "tags" : [ @@ -39193,7 +39220,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "PathNode14", "tags" : [ @@ -39253,7 +39280,7 @@ } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "PathNode15", "tags" : [ @@ -68697,7 +68724,7 @@ ], "elementGuid" : { - "value" : "b346458d-7fb9-400b-b56c-a33580cf8695" + "value" : "191992a2-22e9-4440-8de7-a70fc2f29d2d" }, "attachedElementGuid" : { "value" : "9ecf918c-a3f3-4759-8232-978e949e4b63" @@ -68720,7 +68747,7 @@ "z" : 1 }, "attachedElementGuid" : { - "value" : "b346458d-7fb9-400b-b56c-a33580cf8695" + "value" : "191992a2-22e9-4440-8de7-a70fc2f29d2d" } },{ "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", @@ -68728,7 +68755,7 @@ "startTime" : -32767, "endTime" : 32767, "attachedElementGuid" : { - "value" : "b346458d-7fb9-400b-b56c-a33580cf8695" + "value" : "191992a2-22e9-4440-8de7-a70fc2f29d2d" } },{ "__type" : "Ichni.RhythmGame.Beatmap.TrackPathSubmodule_BM,Assembly-CSharp", @@ -68737,7 +68764,7 @@ "isClosed" : false, "isShowingDisplay" : false, "attachedElementGuid" : { - "value" : "b346458d-7fb9-400b-b56c-a33580cf8695" + "value" : "191992a2-22e9-4440-8de7-a70fc2f29d2d" } },{ "__type" : "Ichni.RhythmGame.Beatmap.TrackTimeSubmoduleMovable_BM,Assembly-CSharp", @@ -68746,20 +68773,30 @@ "visibleTrackTimeLength" : 1, "animationCurveType" : 0, "attachedElementGuid" : { - "value" : "b346458d-7fb9-400b-b56c-a33580cf8695" + "value" : "191992a2-22e9-4440-8de7-a70fc2f29d2d" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.TrackRendererSubmoduleAutoOrient_BM,Assembly-CSharp", + "materialThemeBundleName" : "", + "materialName" : "", + "enableEmission" : false, + "emissionIntensity" : 0, + "zWrite" : false, + "attachedElementGuid" : { + "value" : "191992a2-22e9-4440-8de7-a70fc2f29d2d" } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "0", "tags" : [ ], "elementGuid" : { - "value" : "4f7138f7-9ca9-4999-9432-52c4680bf06d" + "value" : "458ea2ec-9000-4296-a1e0-1e23f5bf5ed1" }, "attachedElementGuid" : { - "value" : "b346458d-7fb9-400b-b56c-a33580cf8695" + "value" : "191992a2-22e9-4440-8de7-a70fc2f29d2d" } },{ "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", @@ -68779,7 +68816,7 @@ "z" : 1 }, "attachedElementGuid" : { - "value" : "4f7138f7-9ca9-4999-9432-52c4680bf06d" + "value" : "458ea2ec-9000-4296-a1e0-1e23f5bf5ed1" } },{ "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", @@ -68787,7 +68824,7 @@ "startTime" : -32767, "endTime" : 32767, "attachedElementGuid" : { - "value" : "4f7138f7-9ca9-4999-9432-52c4680bf06d" + "value" : "458ea2ec-9000-4296-a1e0-1e23f5bf5ed1" } },{ "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", @@ -68806,800 +68843,20 @@ }, "originalEmissionIntensity" : 0, "attachedElementGuid" : { - "value" : "4f7138f7-9ca9-4999-9432-52c4680bf06d" + "value" : "458ea2ec-9000-4296-a1e0-1e23f5bf5ed1" } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, - "elementName" : "PathNode11", - "tags" : [ - - ], - "elementGuid" : { - "value" : "e7741a2c-5d0f-49a6-8ff2-a27f4cfbc617" - }, - "attachedElementGuid" : { - "value" : "b346458d-7fb9-400b-b56c-a33580cf8695" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", - "originalPosition" : { - "x" : 0, - "y" : 0, - "z" : 300 - }, - "originalEulerAngles" : { - "x" : 0, - "y" : 0, - "z" : 0 - }, - "originalScale" : { - "x" : 0.1, - "y" : 1, - "z" : 1 - }, - "attachedElementGuid" : { - "value" : "e7741a2c-5d0f-49a6-8ff2-a27f4cfbc617" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", - "isOverridingDuration" : false, - "startTime" : -32767, - "endTime" : 32767, - "attachedElementGuid" : { - "value" : "e7741a2c-5d0f-49a6-8ff2-a27f4cfbc617" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", - "originalBaseColor" : { - "r" : 1, - "g" : 1, - "b" : 1, - "a" : 1 - }, - "emissionEnabled" : false, - "originalEmissionColor" : { - "r" : 0, - "g" : 0, - "b" : 0, - "a" : 1 - }, - "originalEmissionIntensity" : 0, - "attachedElementGuid" : { - "value" : "e7741a2c-5d0f-49a6-8ff2-a27f4cfbc617" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, - "elementName" : "PathNode15", - "tags" : [ - - ], - "elementGuid" : { - "value" : "1438d014-3a98-4931-85ae-9d51671f16aa" - }, - "attachedElementGuid" : { - "value" : "b346458d-7fb9-400b-b56c-a33580cf8695" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", - "originalPosition" : { - "x" : 0, - "y" : 0, - "z" : 400 - }, - "originalEulerAngles" : { - "x" : 0, - "y" : 0, - "z" : 0 - }, - "originalScale" : { - "x" : 0.1, - "y" : 1, - "z" : 1 - }, - "attachedElementGuid" : { - "value" : "1438d014-3a98-4931-85ae-9d51671f16aa" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", - "isOverridingDuration" : false, - "startTime" : -32767, - "endTime" : 32767, - "attachedElementGuid" : { - "value" : "1438d014-3a98-4931-85ae-9d51671f16aa" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", - "originalBaseColor" : { - "r" : 1, - "g" : 1, - "b" : 1, - "a" : 1 - }, - "emissionEnabled" : false, - "originalEmissionColor" : { - "r" : 0, - "g" : 0, - "b" : 0, - "a" : 1 - }, - "originalEmissionIntensity" : 0, - "attachedElementGuid" : { - "value" : "1438d014-3a98-4931-85ae-9d51671f16aa" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, - "elementName" : "PathNode14", - "tags" : [ - - ], - "elementGuid" : { - "value" : "3843fd67-e077-41a5-8a0d-7cf8f446f3db" - }, - "attachedElementGuid" : { - "value" : "b346458d-7fb9-400b-b56c-a33580cf8695" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", - "originalPosition" : { - "x" : -15, - "y" : 0, - "z" : 375 - }, - "originalEulerAngles" : { - "x" : 0, - "y" : 0, - "z" : 0 - }, - "originalScale" : { - "x" : 0.1, - "y" : 1, - "z" : 1 - }, - "attachedElementGuid" : { - "value" : "3843fd67-e077-41a5-8a0d-7cf8f446f3db" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", - "isOverridingDuration" : false, - "startTime" : -32767, - "endTime" : 32767, - "attachedElementGuid" : { - "value" : "3843fd67-e077-41a5-8a0d-7cf8f446f3db" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", - "originalBaseColor" : { - "r" : 1, - "g" : 1, - "b" : 1, - "a" : 1 - }, - "emissionEnabled" : false, - "originalEmissionColor" : { - "r" : 0, - "g" : 0, - "b" : 0, - "a" : 1 - }, - "originalEmissionIntensity" : 0, - "attachedElementGuid" : { - "value" : "3843fd67-e077-41a5-8a0d-7cf8f446f3db" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, - "elementName" : "PathNode13", - "tags" : [ - - ], - "elementGuid" : { - "value" : "fa9c2144-1e07-4bd9-9b64-dfeadf1929eb" - }, - "attachedElementGuid" : { - "value" : "b346458d-7fb9-400b-b56c-a33580cf8695" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", - "originalPosition" : { - "x" : 0, - "y" : 0, - "z" : 350 - }, - "originalEulerAngles" : { - "x" : 0, - "y" : 0, - "z" : 0 - }, - "originalScale" : { - "x" : 0.1, - "y" : 1, - "z" : 1 - }, - "attachedElementGuid" : { - "value" : "fa9c2144-1e07-4bd9-9b64-dfeadf1929eb" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", - "isOverridingDuration" : false, - "startTime" : -32767, - "endTime" : 32767, - "attachedElementGuid" : { - "value" : "fa9c2144-1e07-4bd9-9b64-dfeadf1929eb" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", - "originalBaseColor" : { - "r" : 1, - "g" : 1, - "b" : 1, - "a" : 1 - }, - "emissionEnabled" : false, - "originalEmissionColor" : { - "r" : 0, - "g" : 0, - "b" : 0, - "a" : 1 - }, - "originalEmissionIntensity" : 0, - "attachedElementGuid" : { - "value" : "fa9c2144-1e07-4bd9-9b64-dfeadf1929eb" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, - "elementName" : "PathNode10", - "tags" : [ - - ], - "elementGuid" : { - "value" : "421767a5-a69c-4675-87cb-8681edb2123b" - }, - "attachedElementGuid" : { - "value" : "b346458d-7fb9-400b-b56c-a33580cf8695" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", - "originalPosition" : { - "x" : -15, - "y" : 0, - "z" : 275 - }, - "originalEulerAngles" : { - "x" : 0, - "y" : 0, - "z" : 0 - }, - "originalScale" : { - "x" : 0.1, - "y" : 1, - "z" : 1 - }, - "attachedElementGuid" : { - "value" : "421767a5-a69c-4675-87cb-8681edb2123b" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", - "isOverridingDuration" : false, - "startTime" : -32767, - "endTime" : 32767, - "attachedElementGuid" : { - "value" : "421767a5-a69c-4675-87cb-8681edb2123b" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", - "originalBaseColor" : { - "r" : 1, - "g" : 1, - "b" : 1, - "a" : 1 - }, - "emissionEnabled" : false, - "originalEmissionColor" : { - "r" : 0, - "g" : 0, - "b" : 0, - "a" : 1 - }, - "originalEmissionIntensity" : 0, - "attachedElementGuid" : { - "value" : "421767a5-a69c-4675-87cb-8681edb2123b" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, - "elementName" : "PathNode9", - "tags" : [ - - ], - "elementGuid" : { - "value" : "4beb1635-ff37-4298-a60b-3f77f70da1f5" - }, - "attachedElementGuid" : { - "value" : "b346458d-7fb9-400b-b56c-a33580cf8695" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", - "originalPosition" : { - "x" : 0, - "y" : 0, - "z" : 250 - }, - "originalEulerAngles" : { - "x" : 0, - "y" : 0, - "z" : 0 - }, - "originalScale" : { - "x" : 0.1, - "y" : 1, - "z" : 1 - }, - "attachedElementGuid" : { - "value" : "4beb1635-ff37-4298-a60b-3f77f70da1f5" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", - "isOverridingDuration" : false, - "startTime" : -32767, - "endTime" : 32767, - "attachedElementGuid" : { - "value" : "4beb1635-ff37-4298-a60b-3f77f70da1f5" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", - "originalBaseColor" : { - "r" : 1, - "g" : 1, - "b" : 1, - "a" : 1 - }, - "emissionEnabled" : false, - "originalEmissionColor" : { - "r" : 0, - "g" : 0, - "b" : 0, - "a" : 1 - }, - "originalEmissionIntensity" : 0, - "attachedElementGuid" : { - "value" : "4beb1635-ff37-4298-a60b-3f77f70da1f5" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, - "elementName" : "PathNode8", - "tags" : [ - - ], - "elementGuid" : { - "value" : "231ff4f8-7bfe-456e-ac4d-e72593bd4d66" - }, - "attachedElementGuid" : { - "value" : "b346458d-7fb9-400b-b56c-a33580cf8695" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", - "originalPosition" : { - "x" : 15, - "y" : 0, - "z" : 225 - }, - "originalEulerAngles" : { - "x" : 0, - "y" : 0, - "z" : 0 - }, - "originalScale" : { - "x" : 0.1, - "y" : 1, - "z" : 1 - }, - "attachedElementGuid" : { - "value" : "231ff4f8-7bfe-456e-ac4d-e72593bd4d66" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", - "isOverridingDuration" : false, - "startTime" : -32767, - "endTime" : 32767, - "attachedElementGuid" : { - "value" : "231ff4f8-7bfe-456e-ac4d-e72593bd4d66" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", - "originalBaseColor" : { - "r" : 1, - "g" : 1, - "b" : 1, - "a" : 1 - }, - "emissionEnabled" : false, - "originalEmissionColor" : { - "r" : 0, - "g" : 0, - "b" : 0, - "a" : 1 - }, - "originalEmissionIntensity" : 0, - "attachedElementGuid" : { - "value" : "231ff4f8-7bfe-456e-ac4d-e72593bd4d66" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, - "elementName" : "PathNode12", - "tags" : [ - - ], - "elementGuid" : { - "value" : "00b92e20-9c43-4247-9e6c-023b40541f45" - }, - "attachedElementGuid" : { - "value" : "b346458d-7fb9-400b-b56c-a33580cf8695" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", - "originalPosition" : { - "x" : 15, - "y" : 0, - "z" : 325 - }, - "originalEulerAngles" : { - "x" : 0, - "y" : 0, - "z" : 0 - }, - "originalScale" : { - "x" : 0.1, - "y" : 1, - "z" : 1 - }, - "attachedElementGuid" : { - "value" : "00b92e20-9c43-4247-9e6c-023b40541f45" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", - "isOverridingDuration" : false, - "startTime" : -32767, - "endTime" : 32767, - "attachedElementGuid" : { - "value" : "00b92e20-9c43-4247-9e6c-023b40541f45" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", - "originalBaseColor" : { - "r" : 1, - "g" : 1, - "b" : 1, - "a" : 1 - }, - "emissionEnabled" : false, - "originalEmissionColor" : { - "r" : 0, - "g" : 0, - "b" : 0, - "a" : 1 - }, - "originalEmissionIntensity" : 0, - "attachedElementGuid" : { - "value" : "00b92e20-9c43-4247-9e6c-023b40541f45" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, - "elementName" : "PathNode6", - "tags" : [ - - ], - "elementGuid" : { - "value" : "c4cc214d-f2be-4d42-8096-3f8928f7693e" - }, - "attachedElementGuid" : { - "value" : "b346458d-7fb9-400b-b56c-a33580cf8695" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", - "originalPosition" : { - "x" : -15, - "y" : 0, - "z" : 175 - }, - "originalEulerAngles" : { - "x" : 0, - "y" : 0, - "z" : 0 - }, - "originalScale" : { - "x" : 0.1, - "y" : 1, - "z" : 1 - }, - "attachedElementGuid" : { - "value" : "c4cc214d-f2be-4d42-8096-3f8928f7693e" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", - "isOverridingDuration" : false, - "startTime" : -32767, - "endTime" : 32767, - "attachedElementGuid" : { - "value" : "c4cc214d-f2be-4d42-8096-3f8928f7693e" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", - "originalBaseColor" : { - "r" : 1, - "g" : 1, - "b" : 1, - "a" : 1 - }, - "emissionEnabled" : false, - "originalEmissionColor" : { - "r" : 0, - "g" : 0, - "b" : 0, - "a" : 1 - }, - "originalEmissionIntensity" : 0, - "attachedElementGuid" : { - "value" : "c4cc214d-f2be-4d42-8096-3f8928f7693e" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, - "elementName" : "PathNode5", - "tags" : [ - - ], - "elementGuid" : { - "value" : "d4547617-6652-4fd4-a674-d77f320a96dd" - }, - "attachedElementGuid" : { - "value" : "b346458d-7fb9-400b-b56c-a33580cf8695" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", - "originalPosition" : { - "x" : 0, - "y" : 0, - "z" : 150 - }, - "originalEulerAngles" : { - "x" : 0, - "y" : 0, - "z" : 0 - }, - "originalScale" : { - "x" : 0.1, - "y" : 1, - "z" : 1 - }, - "attachedElementGuid" : { - "value" : "d4547617-6652-4fd4-a674-d77f320a96dd" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", - "isOverridingDuration" : false, - "startTime" : -32767, - "endTime" : 32767, - "attachedElementGuid" : { - "value" : "d4547617-6652-4fd4-a674-d77f320a96dd" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", - "originalBaseColor" : { - "r" : 1, - "g" : 1, - "b" : 1, - "a" : 1 - }, - "emissionEnabled" : false, - "originalEmissionColor" : { - "r" : 0, - "g" : 0, - "b" : 0, - "a" : 1 - }, - "originalEmissionIntensity" : 0, - "attachedElementGuid" : { - "value" : "d4547617-6652-4fd4-a674-d77f320a96dd" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, - "elementName" : "PathNode4", - "tags" : [ - - ], - "elementGuid" : { - "value" : "974ab471-65c5-47de-a3ef-8291219abd28" - }, - "attachedElementGuid" : { - "value" : "b346458d-7fb9-400b-b56c-a33580cf8695" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", - "originalPosition" : { - "x" : 15, - "y" : 0, - "z" : 125 - }, - "originalEulerAngles" : { - "x" : 0, - "y" : 0, - "z" : 0 - }, - "originalScale" : { - "x" : 0.1, - "y" : 1, - "z" : 1 - }, - "attachedElementGuid" : { - "value" : "974ab471-65c5-47de-a3ef-8291219abd28" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", - "isOverridingDuration" : false, - "startTime" : -32767, - "endTime" : 32767, - "attachedElementGuid" : { - "value" : "974ab471-65c5-47de-a3ef-8291219abd28" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", - "originalBaseColor" : { - "r" : 1, - "g" : 1, - "b" : 1, - "a" : 1 - }, - "emissionEnabled" : false, - "originalEmissionColor" : { - "r" : 0, - "g" : 0, - "b" : 0, - "a" : 1 - }, - "originalEmissionIntensity" : 0, - "attachedElementGuid" : { - "value" : "974ab471-65c5-47de-a3ef-8291219abd28" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, - "elementName" : "PathNode2", - "tags" : [ - - ], - "elementGuid" : { - "value" : "b47b7a04-120c-4f2e-8ede-045a37bbc74e" - }, - "attachedElementGuid" : { - "value" : "b346458d-7fb9-400b-b56c-a33580cf8695" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", - "originalPosition" : { - "x" : -15, - "y" : 0, - "z" : 75 - }, - "originalEulerAngles" : { - "x" : 0, - "y" : 0, - "z" : 0 - }, - "originalScale" : { - "x" : 0.1, - "y" : 1, - "z" : 1 - }, - "attachedElementGuid" : { - "value" : "b47b7a04-120c-4f2e-8ede-045a37bbc74e" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", - "isOverridingDuration" : false, - "startTime" : -32767, - "endTime" : 32767, - "attachedElementGuid" : { - "value" : "b47b7a04-120c-4f2e-8ede-045a37bbc74e" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", - "originalBaseColor" : { - "r" : 1, - "g" : 1, - "b" : 1, - "a" : 1 - }, - "emissionEnabled" : false, - "originalEmissionColor" : { - "r" : 0, - "g" : 0, - "b" : 0, - "a" : 1 - }, - "originalEmissionIntensity" : 0, - "attachedElementGuid" : { - "value" : "b47b7a04-120c-4f2e-8ede-045a37bbc74e" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, - "elementName" : "PathNode1", - "tags" : [ - - ], - "elementGuid" : { - "value" : "7a199735-903d-4aa0-9d77-822a36eb1e1b" - }, - "attachedElementGuid" : { - "value" : "b346458d-7fb9-400b-b56c-a33580cf8695" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", - "originalPosition" : { - "x" : 0, - "y" : 0, - "z" : 50 - }, - "originalEulerAngles" : { - "x" : 0, - "y" : 0, - "z" : 0 - }, - "originalScale" : { - "x" : 0.1, - "y" : 1, - "z" : 1 - }, - "attachedElementGuid" : { - "value" : "7a199735-903d-4aa0-9d77-822a36eb1e1b" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", - "isOverridingDuration" : false, - "startTime" : -32767, - "endTime" : 32767, - "attachedElementGuid" : { - "value" : "7a199735-903d-4aa0-9d77-822a36eb1e1b" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", - "originalBaseColor" : { - "r" : 1, - "g" : 1, - "b" : 1, - "a" : 1 - }, - "emissionEnabled" : false, - "originalEmissionColor" : { - "r" : 0, - "g" : 0, - "b" : 0, - "a" : 1 - }, - "originalEmissionIntensity" : 0, - "attachedElementGuid" : { - "value" : "7a199735-903d-4aa0-9d77-822a36eb1e1b" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, "elementName" : "PathNode0", "tags" : [ ], "elementGuid" : { - "value" : "a6ea85ea-289c-4659-a7e0-b7fee6c44397" + "value" : "c83598ca-db25-486b-a341-3c83d73efc57" }, "attachedElementGuid" : { - "value" : "b346458d-7fb9-400b-b56c-a33580cf8695" + "value" : "191992a2-22e9-4440-8de7-a70fc2f29d2d" } },{ "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", @@ -69619,7 +68876,7 @@ "z" : 1 }, "attachedElementGuid" : { - "value" : "a6ea85ea-289c-4659-a7e0-b7fee6c44397" + "value" : "c83598ca-db25-486b-a341-3c83d73efc57" } },{ "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", @@ -69627,7 +68884,7 @@ "startTime" : -32767, "endTime" : 32767, "attachedElementGuid" : { - "value" : "a6ea85ea-289c-4659-a7e0-b7fee6c44397" + "value" : "c83598ca-db25-486b-a341-3c83d73efc57" } },{ "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", @@ -69646,27 +68903,27 @@ }, "originalEmissionIntensity" : 0, "attachedElementGuid" : { - "value" : "a6ea85ea-289c-4659-a7e0-b7fee6c44397" + "value" : "c83598ca-db25-486b-a341-3c83d73efc57" } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, - "elementName" : "PathNode7", + "isShowingSphere" : true, + "elementName" : "PathNode1", "tags" : [ ], "elementGuid" : { - "value" : "93190174-1907-4dc4-b459-ad7b36ab2ecf" + "value" : "298e6d39-15b0-42c9-977a-a758dd60a059" }, "attachedElementGuid" : { - "value" : "b346458d-7fb9-400b-b56c-a33580cf8695" + "value" : "191992a2-22e9-4440-8de7-a70fc2f29d2d" } },{ "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", "originalPosition" : { "x" : 0, "y" : 0, - "z" : 200 + "z" : 50 }, "originalEulerAngles" : { "x" : 0, @@ -69679,7 +68936,7 @@ "z" : 1 }, "attachedElementGuid" : { - "value" : "93190174-1907-4dc4-b459-ad7b36ab2ecf" + "value" : "298e6d39-15b0-42c9-977a-a758dd60a059" } },{ "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", @@ -69687,7 +68944,7 @@ "startTime" : -32767, "endTime" : 32767, "attachedElementGuid" : { - "value" : "93190174-1907-4dc4-b459-ad7b36ab2ecf" + "value" : "298e6d39-15b0-42c9-977a-a758dd60a059" } },{ "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", @@ -69706,20 +68963,80 @@ }, "originalEmissionIntensity" : 0, "attachedElementGuid" : { - "value" : "93190174-1907-4dc4-b459-ad7b36ab2ecf" + "value" : "298e6d39-15b0-42c9-977a-a758dd60a059" } },{ "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", - "isShowingSphere" : false, + "isShowingSphere" : true, + "elementName" : "PathNode2", + "tags" : [ + + ], + "elementGuid" : { + "value" : "88c926e2-3ee4-4cd7-89ec-5c8fc6c3d6d9" + }, + "attachedElementGuid" : { + "value" : "191992a2-22e9-4440-8de7-a70fc2f29d2d" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", + "originalPosition" : { + "x" : -15, + "y" : 0, + "z" : 75 + }, + "originalEulerAngles" : { + "x" : 0, + "y" : 0, + "z" : 0 + }, + "originalScale" : { + "x" : 0.1, + "y" : 1, + "z" : 1 + }, + "attachedElementGuid" : { + "value" : "88c926e2-3ee4-4cd7-89ec-5c8fc6c3d6d9" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", + "isOverridingDuration" : false, + "startTime" : -32767, + "endTime" : 32767, + "attachedElementGuid" : { + "value" : "88c926e2-3ee4-4cd7-89ec-5c8fc6c3d6d9" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", + "originalBaseColor" : { + "r" : 1, + "g" : 1, + "b" : 1, + "a" : 1 + }, + "emissionEnabled" : false, + "originalEmissionColor" : { + "r" : 0, + "g" : 0, + "b" : 0, + "a" : 1 + }, + "originalEmissionIntensity" : 0, + "attachedElementGuid" : { + "value" : "88c926e2-3ee4-4cd7-89ec-5c8fc6c3d6d9" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", + "isShowingSphere" : true, "elementName" : "PathNode3", "tags" : [ ], "elementGuid" : { - "value" : "e4de6096-afd7-4baa-afba-9d0bc822fa78" + "value" : "809a5079-ea79-4540-bb18-7455cb3cc3c5" }, "attachedElementGuid" : { - "value" : "b346458d-7fb9-400b-b56c-a33580cf8695" + "value" : "191992a2-22e9-4440-8de7-a70fc2f29d2d" } },{ "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", @@ -69739,7 +69056,7 @@ "z" : 1 }, "attachedElementGuid" : { - "value" : "e4de6096-afd7-4baa-afba-9d0bc822fa78" + "value" : "809a5079-ea79-4540-bb18-7455cb3cc3c5" } },{ "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", @@ -69747,7 +69064,7 @@ "startTime" : -32767, "endTime" : 32767, "attachedElementGuid" : { - "value" : "e4de6096-afd7-4baa-afba-9d0bc822fa78" + "value" : "809a5079-ea79-4540-bb18-7455cb3cc3c5" } },{ "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", @@ -69766,81 +69083,27 @@ }, "originalEmissionIntensity" : 0, "attachedElementGuid" : { - "value" : "e4de6096-afd7-4baa-afba-9d0bc822fa78" + "value" : "809a5079-ea79-4540-bb18-7455cb3cc3c5" } },{ - "__type" : "Ichni.RhythmGame.Beatmap.TrackHeadPoint_BM,Assembly-CSharp", - "elementName" : "New Track Head Point", + "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", + "isShowingSphere" : true, + "elementName" : "PathNode4", "tags" : [ ], "elementGuid" : { - "value" : "68adca59-0aea-458e-8ab9-04115907516e" + "value" : "4e724aa5-341b-4d1c-b491-10c3bc94da0d" }, "attachedElementGuid" : { - "value" : "b346458d-7fb9-400b-b56c-a33580cf8695" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", - "isOverridingDuration" : false, - "startTime" : -32767, - "endTime" : 32767, - "attachedElementGuid" : { - "value" : "68adca59-0aea-458e-8ab9-04115907516e" - } - },{ - "__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMTrail_BM,Assembly-CSharp", - "visibleTimeLength" : { - "animatedFloatList" : [ - - ] - }, - "enableTimes" : { - "animatedBoolList" : [ - { - "value" : false, - "time" : 0 - },{ - "value" : true, - "time" : 28.8 - },{ - "value" : false, - "time" : 48 - } - ] - }, - "enableProcessTime" : 0.5, - "headSize" : 1, - "headRotateSpeed" : { - "animatedFloatList" : [ - { - "startValue" : 15, - "endValue" : 15, - "startTime" : 0, - "endTime" : 0, - "animationCurveType" : 0 - } - ] - }, - "isStatic" : false, - "themeBundleName" : "departure_to_multiverse", - "objectName" : "DTM_Trail", - "elementName" : "New Environment Object", - "tags" : [ - - ], - "elementGuid" : { - "value" : "beb26640-d246-46d1-91f8-ad37b6bfd2cc" - }, - "attachedElementGuid" : { - "value" : "68adca59-0aea-458e-8ab9-04115907516e" + "value" : "191992a2-22e9-4440-8de7-a70fc2f29d2d" } },{ "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", "originalPosition" : { - "x" : 0, + "x" : 15, "y" : 0, - "z" : 0 + "z" : 125 }, "originalEulerAngles" : { "x" : 0, @@ -69848,12 +69111,12 @@ "z" : 0 }, "originalScale" : { - "x" : 1, + "x" : 0.1, "y" : 1, "z" : 1 }, "attachedElementGuid" : { - "value" : "beb26640-d246-46d1-91f8-ad37b6bfd2cc" + "value" : "4e724aa5-341b-4d1c-b491-10c3bc94da0d" } },{ "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", @@ -69861,912 +69124,7 @@ "startTime" : -32767, "endTime" : 32767, "attachedElementGuid" : { - "value" : "beb26640-d246-46d1-91f8-ad37b6bfd2cc" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", - "originalBaseColor" : { - "r" : 1, - "g" : 0, - "b" : 0, - "a" : 1 - }, - "emissionEnabled" : true, - "originalEmissionColor" : { - "r" : 0.9400872, - "g" : 0, - "b" : 0, - "a" : 1 - }, - "originalEmissionIntensity" : 1, - "attachedElementGuid" : { - "value" : "beb26640-d246-46d1-91f8-ad37b6bfd2cc" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.EmissionColorChange_BM,Assembly-CSharp", - "colorR" : { - "animatedFloatList" : [ - { - "startValue" : 1, - "endValue" : 1, - "startTime" : 28.8, - "endTime" : 29.1, - "animationCurveType" : 0 - } - ] - }, - "colorG" : { - "animatedFloatList" : [ - { - "startValue" : 0, - "endValue" : 0, - "startTime" : 28.8, - "endTime" : 29.1, - "animationCurveType" : 0 - } - ] - }, - "colorB" : { - "animatedFloatList" : [ - { - "startValue" : 0, - "endValue" : 0, - "startTime" : 28.8, - "endTime" : 29.1, - "animationCurveType" : 0 - } - ] - }, - "colorI" : { - "animatedFloatList" : [ - { - "startValue" : 1, - "endValue" : 1, - "startTime" : 28.8, - "endTime" : 29.1, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 29.1, - "endTime" : 29.4, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 29.4000015, - "endTime" : 29.7, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 29.7, - "endTime" : 30, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 30.0000019, - "endTime" : 30.3000011, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 30.3000011, - "endTime" : 30.6, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 30.6, - "endTime" : 30.9, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 30.9000015, - "endTime" : 31.2, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 31.2, - "endTime" : 31.5, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 31.5000019, - "endTime" : 31.8000011, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 31.8000011, - "endTime" : 32.1, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 32.1000023, - "endTime" : 32.4, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 32.4, - "endTime" : 32.7, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 32.7, - "endTime" : 33, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 33, - "endTime" : 33.3000031, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 33.3000031, - "endTime" : 33.6000023, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 33.6000061, - "endTime" : 33.9, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 33.9, - "endTime" : 34.2000046, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 34.2000046, - "endTime" : 34.5000038, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 34.5000038, - "endTime" : 34.8000031, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 34.8000031, - "endTime" : 35.1000023, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 35.1000061, - "endTime" : 35.4, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 35.4, - "endTime" : 35.7, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 35.7000046, - "endTime" : 36, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 36, - "endTime" : 36.3000031, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 36.3000031, - "endTime" : 36.6000023, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 36.6000023, - "endTime" : 36.9, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 36.9, - "endTime" : 37.2, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 37.2000046, - "endTime" : 37.5, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 37.5, - "endTime" : 37.8, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 37.8000031, - "endTime" : 38.1, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 38.1, - "endTime" : 38.4, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 38.4, - "endTime" : 38.7, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 38.7, - "endTime" : 39, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 39, - "endTime" : 39.3, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 39.3000031, - "endTime" : 39.6, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 39.6000023, - "endTime" : 39.9, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 39.9, - "endTime" : 40.2, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 40.2, - "endTime" : 40.5, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 40.5000038, - "endTime" : 40.8, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 40.8000031, - "endTime" : 41.1000023, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 41.1000023, - "endTime" : 41.4, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 41.4, - "endTime" : 41.7, - "animationCurveType" : 0 - },{ - "startValue" : 2, - "endValue" : 1, - "startTime" : 41.7000046, - "endTime" : 42, - "animationCurveType" : 0 - } - ] - }, - "elementName" : "New Emission Color Change", - "tags" : [ - - ], - "elementGuid" : { - "value" : "0f6e0095-9423-4f30-8aef-2884d07abbc5" - }, - "attachedElementGuid" : { - "value" : "beb26640-d246-46d1-91f8-ad37b6bfd2cc" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", - "isOverridingDuration" : false, - "startTime" : -32767, - "endTime" : 32767, - "attachedElementGuid" : { - "value" : "0f6e0095-9423-4f30-8aef-2884d07abbc5" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.Displacement_BM,Assembly-CSharp", - "positionX" : { - "animatedFloatList" : [ - { - "startValue" : 0, - "endValue" : 2, - "startTime" : 30.6, - "endTime" : 30.75, - "animationCurveType" : 29 - },{ - "startValue" : 2, - "endValue" : 0, - "startTime" : 30.75, - "endTime" : 30.9, - "animationCurveType" : 29 - },{ - "startValue" : -2, - "endValue" : 0, - "startTime" : 30.9, - "endTime" : 31.5, - "animationCurveType" : 26 - },{ - "startValue" : 0, - "endValue" : 1, - "startTime" : 33.15, - "endTime" : 33.45, - "animationCurveType" : 26 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 33.45, - "endTime" : 33.75, - "animationCurveType" : 26 - },{ - "startValue" : 0, - "endValue" : 2, - "startTime" : 35.4, - "endTime" : 35.55, - "animationCurveType" : 29 - },{ - "startValue" : 2, - "endValue" : 0, - "startTime" : 35.55, - "endTime" : 35.7, - "animationCurveType" : 29 - },{ - "startValue" : -2, - "endValue" : 0, - "startTime" : 35.7, - "endTime" : 36.3000031, - "animationCurveType" : 26 - },{ - "startValue" : 0, - "endValue" : 1, - "startTime" : 37.3500023, - "endTime" : 37.65, - "animationCurveType" : 26 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 37.65, - "endTime" : 37.95, - "animationCurveType" : 26 - },{ - "startValue" : 0, - "endValue" : 1, - "startTime" : 37.9500046, - "endTime" : 38.2500038, - "animationCurveType" : 26 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 38.2500038, - "endTime" : 38.5500031, - "animationCurveType" : 26 - },{ - "startValue" : 0, - "endValue" : 2, - "startTime" : 40.2, - "endTime" : 40.35, - "animationCurveType" : 29 - },{ - "startValue" : 2, - "endValue" : 0, - "startTime" : 40.35, - "endTime" : 40.5, - "animationCurveType" : 29 - },{ - "startValue" : -2, - "endValue" : 0, - "startTime" : 40.5, - "endTime" : 41.1, - "animationCurveType" : 26 - },{ - "startValue" : 0, - "endValue" : 1, - "startTime" : 42.75, - "endTime" : 43.0500031, - "animationCurveType" : 26 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 43.0500031, - "endTime" : 43.35, - "animationCurveType" : 26 - },{ - "startValue" : 0, - "endValue" : 2, - "startTime" : 45, - "endTime" : 45.15, - "animationCurveType" : 29 - },{ - "startValue" : -2, - "endValue" : 0, - "startTime" : 45.3000031, - "endTime" : 45.9, - "animationCurveType" : 26 - },{ - "startValue" : 0, - "endValue" : 1, - "startTime" : 46.9500046, - "endTime" : 47.25, - "animationCurveType" : 26 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 47.25, - "endTime" : 47.5500031, - "animationCurveType" : 26 - },{ - "startValue" : 0, - "endValue" : 1, - "startTime" : 47.5500031, - "endTime" : 47.8500061, - "animationCurveType" : 26 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 47.8500061, - "endTime" : 48.15, - "animationCurveType" : 26 - } - ] - }, - "positionY" : { - "animatedFloatList" : [ - { - "startValue" : 0, - "endValue" : 0, - "startTime" : 28.8, - "endTime" : 29.1, - "animationCurveType" : 0 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 29.1, - "endTime" : 29.4, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 29.4000015, - "endTime" : 29.7, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 29.7, - "endTime" : 30, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 30.0000019, - "endTime" : 30.3000011, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 30.3000011, - "endTime" : 30.6, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 30.6000023, - "endTime" : 30.9000015, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 30.9000015, - "endTime" : 31.2, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 31.2000027, - "endTime" : 31.5000019, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 31.5000019, - "endTime" : 31.8000011, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 31.8000031, - "endTime" : 32.1000023, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 32.1000023, - "endTime" : 32.4, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 32.4, - "endTime" : 32.7000046, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 32.7, - "endTime" : 33.0000038, - "animationCurveType" : 5 - },{ - "startValue" : 0, - "endValue" : 1, - "startTime" : 33, - "endTime" : 33.3, - "animationCurveType" : 26 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 33.3, - "endTime" : 33.6, - "animationCurveType" : 26 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 33.6000023, - "endTime" : 33.9000053, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 33.9, - "endTime" : 34.2000046, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 34.2, - "endTime" : 34.5000038, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 34.5, - "endTime" : 34.8000031, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 34.8000031, - "endTime" : 35.1000061, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 35.1000023, - "endTime" : 35.4000053, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 36, - "endTime" : 36.3000031, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 36.3000031, - "endTime" : 36.6000061, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 36.6000023, - "endTime" : 36.9000053, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 36.9, - "endTime" : 37.2000046, - "animationCurveType" : 5 - },{ - "startValue" : 0, - "endValue" : 1, - "startTime" : 37.2, - "endTime" : 37.5, - "animationCurveType" : 26 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 37.5, - "endTime" : 37.8, - "animationCurveType" : 26 - },{ - "startValue" : 0, - "endValue" : 1, - "startTime" : 37.8000031, - "endTime" : 38.1000023, - "animationCurveType" : 26 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 38.1000023, - "endTime" : 38.4, - "animationCurveType" : 26 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 38.4, - "endTime" : 38.7000046, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 38.7, - "endTime" : 39.0000038, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 39, - "endTime" : 39.3000031, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 39.3000031, - "endTime" : 39.6000061, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 39.6000023, - "endTime" : 39.9000053, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 39.9, - "endTime" : 40.2000046, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 40.8000031, - "endTime" : 41.1000061, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 41.1000023, - "endTime" : 41.4000053, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 41.4, - "endTime" : 41.7000046, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 41.7, - "endTime" : 42.0000038, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 42, - "endTime" : 42.3000031, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 42.3000031, - "endTime" : 42.6000061, - "animationCurveType" : 5 - },{ - "startValue" : 0, - "endValue" : 1, - "startTime" : 42.6, - "endTime" : 42.9, - "animationCurveType" : 26 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 42.9, - "endTime" : 43.1999969, - "animationCurveType" : 26 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 43.2, - "endTime" : 43.5000038, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 43.5, - "endTime" : 43.8000031, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 43.8000031, - "endTime" : 44.1000061, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 44.1000023, - "endTime" : 44.4000053, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 44.4, - "endTime" : 44.7000046, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 44.7, - "endTime" : 45.0000038, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 45.6000023, - "endTime" : 45.9000053, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 45.9, - "endTime" : 46.2000046, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 46.2, - "endTime" : 46.5000038, - "animationCurveType" : 5 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 46.5, - "endTime" : 46.8000031, - "animationCurveType" : 5 - },{ - "startValue" : 0, - "endValue" : 1, - "startTime" : 46.8000031, - "endTime" : 47.1, - "animationCurveType" : 26 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 47.1, - "endTime" : 47.4, - "animationCurveType" : 26 - },{ - "startValue" : 0, - "endValue" : 1, - "startTime" : 47.4, - "endTime" : 47.7000046, - "animationCurveType" : 26 - },{ - "startValue" : 1, - "endValue" : 0, - "startTime" : 47.7000046, - "endTime" : 48, - "animationCurveType" : 26 - } - ] - }, - "positionZ" : { - "animatedFloatList" : [ - - ] - }, - "elementName" : "New Displacement", - "tags" : [ - - ], - "elementGuid" : { - "value" : "5c707552-8fd2-43db-a652-4871ee5e54cf" - }, - "attachedElementGuid" : { - "value" : "beb26640-d246-46d1-91f8-ad37b6bfd2cc" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", - "isOverridingDuration" : false, - "startTime" : -32767, - "endTime" : 32767, - "attachedElementGuid" : { - "value" : "5c707552-8fd2-43db-a652-4871ee5e54cf" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.EnvironmentObject_BM,Assembly-CSharp", - "isStatic" : false, - "themeBundleName" : "basic", - "objectName" : "EmptyObject", - "elementName" : "TrailG", - "tags" : [ - - ], - "elementGuid" : { - "value" : "9c810ec6-8de3-4c25-94ce-ef72ede7f9c1" - }, - "attachedElementGuid" : { - "value" : "68adca59-0aea-458e-8ab9-04115907516e" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", - "originalPosition" : { - "x" : 0, - "y" : 0, - "z" : 0 - }, - "originalEulerAngles" : { - "x" : 0, - "y" : 0, - "z" : 0 - }, - "originalScale" : { - "x" : 0, - "y" : 1, - "z" : 1 - }, - "attachedElementGuid" : { - "value" : "9c810ec6-8de3-4c25-94ce-ef72ede7f9c1" - } - },{ - "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", - "isOverridingDuration" : false, - "startTime" : -32767, - "endTime" : 32767, - "attachedElementGuid" : { - "value" : "9c810ec6-8de3-4c25-94ce-ef72ede7f9c1" + "value" : "4e724aa5-341b-4d1c-b491-10c3bc94da0d" } },{ "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", @@ -70785,61 +69143,27 @@ }, "originalEmissionIntensity" : 0, "attachedElementGuid" : { - "value" : "9c810ec6-8de3-4c25-94ce-ef72ede7f9c1" + "value" : "4e724aa5-341b-4d1c-b491-10c3bc94da0d" } },{ - "__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMTrail_BM,Assembly-CSharp", - "visibleTimeLength" : { - "animatedFloatList" : [ - - ] - }, - "enableTimes" : { - "animatedBoolList" : [ - { - "value" : false, - "time" : 0 - },{ - "value" : true, - "time" : 28.8 - },{ - "value" : false, - "time" : 47.4 - } - ] - }, - "enableProcessTime" : 0.5, - "headSize" : 1, - "headRotateSpeed" : { - "animatedFloatList" : [ - { - "startValue" : 15, - "endValue" : 15, - "startTime" : 0, - "endTime" : 0, - "animationCurveType" : 0 - } - ] - }, - "isStatic" : false, - "themeBundleName" : "departure_to_multiverse", - "objectName" : "DTM_Trail", - "elementName" : "New Environment Object", + "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", + "isShowingSphere" : true, + "elementName" : "PathNode5", "tags" : [ ], "elementGuid" : { - "value" : "0e31eb72-6cb9-4576-8c1b-048907070264" + "value" : "ef8483b0-a940-4eed-80fb-0253ffa57d00" }, "attachedElementGuid" : { - "value" : "9c810ec6-8de3-4c25-94ce-ef72ede7f9c1" + "value" : "191992a2-22e9-4440-8de7-a70fc2f29d2d" } },{ "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", "originalPosition" : { - "x" : 4, + "x" : 0, "y" : 0, - "z" : 0 + "z" : 150 }, "originalEulerAngles" : { "x" : 0, @@ -70847,12 +69171,12 @@ "z" : 0 }, "originalScale" : { - "x" : 1, + "x" : 0.1, "y" : 1, "z" : 1 }, "attachedElementGuid" : { - "value" : "0e31eb72-6cb9-4576-8c1b-048907070264" + "value" : "ef8483b0-a940-4eed-80fb-0253ffa57d00" } },{ "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", @@ -70860,7 +69184,7 @@ "startTime" : -32767, "endTime" : 32767, "attachedElementGuid" : { - "value" : "0e31eb72-6cb9-4576-8c1b-048907070264" + "value" : "ef8483b0-a940-4eed-80fb-0253ffa57d00" } },{ "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", @@ -70870,70 +69194,36 @@ "b" : 1, "a" : 1 }, - "emissionEnabled" : true, + "emissionEnabled" : false, "originalEmissionColor" : { - "r" : 1, + "r" : 0, "g" : 0, "b" : 0, "a" : 1 }, - "originalEmissionIntensity" : 2, + "originalEmissionIntensity" : 0, "attachedElementGuid" : { - "value" : "0e31eb72-6cb9-4576-8c1b-048907070264" + "value" : "ef8483b0-a940-4eed-80fb-0253ffa57d00" } },{ - "__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMTrail_BM,Assembly-CSharp", - "visibleTimeLength" : { - "animatedFloatList" : [ - - ] - }, - "enableTimes" : { - "animatedBoolList" : [ - { - "value" : false, - "time" : 0 - },{ - "value" : true, - "time" : 28.8 - },{ - "value" : false, - "time" : 47.4 - } - ] - }, - "enableProcessTime" : 0.5, - "headSize" : 1, - "headRotateSpeed" : { - "animatedFloatList" : [ - { - "startValue" : 15, - "endValue" : 15, - "startTime" : 0, - "endTime" : 0, - "animationCurveType" : 0 - } - ] - }, - "isStatic" : false, - "themeBundleName" : "departure_to_multiverse", - "objectName" : "DTM_Trail", - "elementName" : "New Environment Object", + "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", + "isShowingSphere" : true, + "elementName" : "PathNode6", "tags" : [ ], "elementGuid" : { - "value" : "656caaf3-314a-4060-a889-04dd1a4a1c8d" + "value" : "a6e988b1-3c66-4afd-ab5b-54f6d2a02213" }, "attachedElementGuid" : { - "value" : "9c810ec6-8de3-4c25-94ce-ef72ede7f9c1" + "value" : "191992a2-22e9-4440-8de7-a70fc2f29d2d" } },{ "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", "originalPosition" : { - "x" : -4, + "x" : -15, "y" : 0, - "z" : 0 + "z" : 175 }, "originalEulerAngles" : { "x" : 0, @@ -70941,12 +69231,12 @@ "z" : 0 }, "originalScale" : { - "x" : 1, + "x" : 0.1, "y" : 1, "z" : 1 }, "attachedElementGuid" : { - "value" : "656caaf3-314a-4060-a889-04dd1a4a1c8d" + "value" : "a6e988b1-3c66-4afd-ab5b-54f6d2a02213" } },{ "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", @@ -70954,7 +69244,7 @@ "startTime" : -32767, "endTime" : 32767, "attachedElementGuid" : { - "value" : "656caaf3-314a-4060-a889-04dd1a4a1c8d" + "value" : "a6e988b1-3c66-4afd-ab5b-54f6d2a02213" } },{ "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", @@ -70964,85 +69254,49 @@ "b" : 1, "a" : 1 }, - "emissionEnabled" : true, + "emissionEnabled" : false, "originalEmissionColor" : { - "r" : 1, + "r" : 0, "g" : 0, "b" : 0, "a" : 1 }, - "originalEmissionIntensity" : 2, + "originalEmissionIntensity" : 0, "attachedElementGuid" : { - "value" : "656caaf3-314a-4060-a889-04dd1a4a1c8d" + "value" : "a6e988b1-3c66-4afd-ab5b-54f6d2a02213" } },{ - "__type" : "Ichni.RhythmGame.Beatmap.Scale_BM,Assembly-CSharp", - "scaleX" : { - "animatedFloatList" : [ - { - "startValue" : 0, - "endValue" : 1, - "startTime" : 28.8, - "endTime" : 29.1, - "animationCurveType" : 2 - },{ - "startValue" : 1, - "endValue" : -1, - "startTime" : 33.3, - "endTime" : 33.6, - "animationCurveType" : 5 - },{ - "startValue" : -1, - "endValue" : 1, - "startTime" : 37.2, - "endTime" : 38.4, - "animationCurveType" : 6 - },{ - "startValue" : 1, - "endValue" : -1, - "startTime" : 42.9, - "endTime" : 43.2, - "animationCurveType" : 5 - },{ - "startValue" : -1, - "endValue" : 0, - "startTime" : 47.7, - "endTime" : 48, - "animationCurveType" : 4 - } - ] - }, - "scaleY" : { - "animatedFloatList" : [ - { - "startValue" : 0, - "endValue" : 0, - "startTime" : 28.8, - "endTime" : 29.1, - "animationCurveType" : 0 - } - ] - }, - "scaleZ" : { - "animatedFloatList" : [ - { - "startValue" : 0, - "endValue" : 0, - "startTime" : 28.8, - "endTime" : 29.1, - "animationCurveType" : 0 - } - ] - }, - "elementName" : "New Scale", + "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", + "isShowingSphere" : true, + "elementName" : "PathNode7", "tags" : [ ], "elementGuid" : { - "value" : "ff638bbf-8916-4e18-9ff3-aa38198efe3b" + "value" : "25341428-9c9e-4464-ace7-e76ae967c0f6" }, "attachedElementGuid" : { - "value" : "9c810ec6-8de3-4c25-94ce-ef72ede7f9c1" + "value" : "191992a2-22e9-4440-8de7-a70fc2f29d2d" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", + "originalPosition" : { + "x" : 0, + "y" : 0, + "z" : 200 + }, + "originalEulerAngles" : { + "x" : 0, + "y" : 0, + "z" : 0 + }, + "originalScale" : { + "x" : 0.1, + "y" : 1, + "z" : 1 + }, + "attachedElementGuid" : { + "value" : "25341428-9c9e-4464-ace7-e76ae967c0f6" } },{ "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", @@ -71050,40 +69304,59 @@ "startTime" : -32767, "endTime" : 32767, "attachedElementGuid" : { - "value" : "ff638bbf-8916-4e18-9ff3-aa38198efe3b" + "value" : "25341428-9c9e-4464-ace7-e76ae967c0f6" } },{ - "__type" : "Ichni.RhythmGame.Beatmap.Swirl_BM,Assembly-CSharp", - "eulerAngleX" : { - "animatedFloatList" : [ - - ] + "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", + "originalBaseColor" : { + "r" : 1, + "g" : 1, + "b" : 1, + "a" : 1 }, - "eulerAngleY" : { - "animatedFloatList" : [ - { - "startValue" : 0, - "endValue" : -30, - "startTime" : 47.7, - "endTime" : 48, - "animationCurveType" : 1 - } - ] + "emissionEnabled" : false, + "originalEmissionColor" : { + "r" : 0, + "g" : 0, + "b" : 0, + "a" : 1 }, - "eulerAngleZ" : { - "animatedFloatList" : [ - - ] - }, - "elementName" : "New Swirl", + "originalEmissionIntensity" : 0, + "attachedElementGuid" : { + "value" : "25341428-9c9e-4464-ace7-e76ae967c0f6" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", + "isShowingSphere" : true, + "elementName" : "PathNode8", "tags" : [ ], "elementGuid" : { - "value" : "d14e474f-44c2-4bcb-ae2e-f4cb9537f6f6" + "value" : "5a05258a-205a-472f-8984-4ab5f53ff1f8" }, "attachedElementGuid" : { - "value" : "9c810ec6-8de3-4c25-94ce-ef72ede7f9c1" + "value" : "191992a2-22e9-4440-8de7-a70fc2f29d2d" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", + "originalPosition" : { + "x" : 15, + "y" : 0, + "z" : 225 + }, + "originalEulerAngles" : { + "x" : 0, + "y" : 0, + "z" : 0 + }, + "originalScale" : { + "x" : 0.1, + "y" : 1, + "z" : 1 + }, + "attachedElementGuid" : { + "value" : "5a05258a-205a-472f-8984-4ab5f53ff1f8" } },{ "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", @@ -71091,7 +69364,446 @@ "startTime" : -32767, "endTime" : 32767, "attachedElementGuid" : { - "value" : "d14e474f-44c2-4bcb-ae2e-f4cb9537f6f6" + "value" : "5a05258a-205a-472f-8984-4ab5f53ff1f8" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", + "originalBaseColor" : { + "r" : 1, + "g" : 1, + "b" : 1, + "a" : 1 + }, + "emissionEnabled" : false, + "originalEmissionColor" : { + "r" : 0, + "g" : 0, + "b" : 0, + "a" : 1 + }, + "originalEmissionIntensity" : 0, + "attachedElementGuid" : { + "value" : "5a05258a-205a-472f-8984-4ab5f53ff1f8" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", + "isShowingSphere" : true, + "elementName" : "PathNode9", + "tags" : [ + + ], + "elementGuid" : { + "value" : "ec8e36e8-5c82-480e-91c2-19dcab9c411f" + }, + "attachedElementGuid" : { + "value" : "191992a2-22e9-4440-8de7-a70fc2f29d2d" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", + "originalPosition" : { + "x" : 0, + "y" : 0, + "z" : 250 + }, + "originalEulerAngles" : { + "x" : 0, + "y" : 0, + "z" : 0 + }, + "originalScale" : { + "x" : 0.1, + "y" : 1, + "z" : 1 + }, + "attachedElementGuid" : { + "value" : "ec8e36e8-5c82-480e-91c2-19dcab9c411f" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", + "isOverridingDuration" : false, + "startTime" : -32767, + "endTime" : 32767, + "attachedElementGuid" : { + "value" : "ec8e36e8-5c82-480e-91c2-19dcab9c411f" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", + "originalBaseColor" : { + "r" : 1, + "g" : 1, + "b" : 1, + "a" : 1 + }, + "emissionEnabled" : false, + "originalEmissionColor" : { + "r" : 0, + "g" : 0, + "b" : 0, + "a" : 1 + }, + "originalEmissionIntensity" : 0, + "attachedElementGuid" : { + "value" : "ec8e36e8-5c82-480e-91c2-19dcab9c411f" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", + "isShowingSphere" : true, + "elementName" : "PathNode10", + "tags" : [ + + ], + "elementGuid" : { + "value" : "01f02f1b-3e26-4983-8e11-f06583030dfd" + }, + "attachedElementGuid" : { + "value" : "191992a2-22e9-4440-8de7-a70fc2f29d2d" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", + "originalPosition" : { + "x" : -15, + "y" : 0, + "z" : 275 + }, + "originalEulerAngles" : { + "x" : 0, + "y" : 0, + "z" : 0 + }, + "originalScale" : { + "x" : 0.1, + "y" : 1, + "z" : 1 + }, + "attachedElementGuid" : { + "value" : "01f02f1b-3e26-4983-8e11-f06583030dfd" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", + "isOverridingDuration" : false, + "startTime" : -32767, + "endTime" : 32767, + "attachedElementGuid" : { + "value" : "01f02f1b-3e26-4983-8e11-f06583030dfd" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", + "originalBaseColor" : { + "r" : 1, + "g" : 1, + "b" : 1, + "a" : 1 + }, + "emissionEnabled" : false, + "originalEmissionColor" : { + "r" : 0, + "g" : 0, + "b" : 0, + "a" : 1 + }, + "originalEmissionIntensity" : 0, + "attachedElementGuid" : { + "value" : "01f02f1b-3e26-4983-8e11-f06583030dfd" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", + "isShowingSphere" : true, + "elementName" : "PathNode11", + "tags" : [ + + ], + "elementGuid" : { + "value" : "088fbe8d-931d-478c-aad6-20ccebd871b9" + }, + "attachedElementGuid" : { + "value" : "191992a2-22e9-4440-8de7-a70fc2f29d2d" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", + "originalPosition" : { + "x" : 0, + "y" : 0, + "z" : 300 + }, + "originalEulerAngles" : { + "x" : 0, + "y" : 0, + "z" : 0 + }, + "originalScale" : { + "x" : 0.1, + "y" : 1, + "z" : 1 + }, + "attachedElementGuid" : { + "value" : "088fbe8d-931d-478c-aad6-20ccebd871b9" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", + "isOverridingDuration" : false, + "startTime" : -32767, + "endTime" : 32767, + "attachedElementGuid" : { + "value" : "088fbe8d-931d-478c-aad6-20ccebd871b9" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", + "originalBaseColor" : { + "r" : 1, + "g" : 1, + "b" : 1, + "a" : 1 + }, + "emissionEnabled" : false, + "originalEmissionColor" : { + "r" : 0, + "g" : 0, + "b" : 0, + "a" : 1 + }, + "originalEmissionIntensity" : 0, + "attachedElementGuid" : { + "value" : "088fbe8d-931d-478c-aad6-20ccebd871b9" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", + "isShowingSphere" : true, + "elementName" : "PathNode12", + "tags" : [ + + ], + "elementGuid" : { + "value" : "1be2cca5-8d95-459d-bc92-513dce8fa2eb" + }, + "attachedElementGuid" : { + "value" : "191992a2-22e9-4440-8de7-a70fc2f29d2d" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", + "originalPosition" : { + "x" : 15, + "y" : 0, + "z" : 325 + }, + "originalEulerAngles" : { + "x" : 0, + "y" : 0, + "z" : 0 + }, + "originalScale" : { + "x" : 0.1, + "y" : 1, + "z" : 1 + }, + "attachedElementGuid" : { + "value" : "1be2cca5-8d95-459d-bc92-513dce8fa2eb" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", + "isOverridingDuration" : false, + "startTime" : -32767, + "endTime" : 32767, + "attachedElementGuid" : { + "value" : "1be2cca5-8d95-459d-bc92-513dce8fa2eb" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", + "originalBaseColor" : { + "r" : 1, + "g" : 1, + "b" : 1, + "a" : 1 + }, + "emissionEnabled" : false, + "originalEmissionColor" : { + "r" : 0, + "g" : 0, + "b" : 0, + "a" : 1 + }, + "originalEmissionIntensity" : 0, + "attachedElementGuid" : { + "value" : "1be2cca5-8d95-459d-bc92-513dce8fa2eb" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", + "isShowingSphere" : true, + "elementName" : "PathNode13", + "tags" : [ + + ], + "elementGuid" : { + "value" : "12bf26d3-acd0-425e-8fbb-6080967ae617" + }, + "attachedElementGuid" : { + "value" : "191992a2-22e9-4440-8de7-a70fc2f29d2d" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", + "originalPosition" : { + "x" : 0, + "y" : 0, + "z" : 350 + }, + "originalEulerAngles" : { + "x" : 0, + "y" : 0, + "z" : 0 + }, + "originalScale" : { + "x" : 0.1, + "y" : 1, + "z" : 1 + }, + "attachedElementGuid" : { + "value" : "12bf26d3-acd0-425e-8fbb-6080967ae617" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", + "isOverridingDuration" : false, + "startTime" : -32767, + "endTime" : 32767, + "attachedElementGuid" : { + "value" : "12bf26d3-acd0-425e-8fbb-6080967ae617" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", + "originalBaseColor" : { + "r" : 1, + "g" : 1, + "b" : 1, + "a" : 1 + }, + "emissionEnabled" : false, + "originalEmissionColor" : { + "r" : 0, + "g" : 0, + "b" : 0, + "a" : 1 + }, + "originalEmissionIntensity" : 0, + "attachedElementGuid" : { + "value" : "12bf26d3-acd0-425e-8fbb-6080967ae617" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", + "isShowingSphere" : true, + "elementName" : "PathNode14", + "tags" : [ + + ], + "elementGuid" : { + "value" : "76fc6d47-b98c-48db-9dc6-f6e9064e0803" + }, + "attachedElementGuid" : { + "value" : "191992a2-22e9-4440-8de7-a70fc2f29d2d" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", + "originalPosition" : { + "x" : -15, + "y" : 0, + "z" : 375 + }, + "originalEulerAngles" : { + "x" : 0, + "y" : 0, + "z" : 0 + }, + "originalScale" : { + "x" : 0.1, + "y" : 1, + "z" : 1 + }, + "attachedElementGuid" : { + "value" : "76fc6d47-b98c-48db-9dc6-f6e9064e0803" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", + "isOverridingDuration" : false, + "startTime" : -32767, + "endTime" : 32767, + "attachedElementGuid" : { + "value" : "76fc6d47-b98c-48db-9dc6-f6e9064e0803" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", + "originalBaseColor" : { + "r" : 1, + "g" : 1, + "b" : 1, + "a" : 1 + }, + "emissionEnabled" : false, + "originalEmissionColor" : { + "r" : 0, + "g" : 0, + "b" : 0, + "a" : 1 + }, + "originalEmissionIntensity" : 0, + "attachedElementGuid" : { + "value" : "76fc6d47-b98c-48db-9dc6-f6e9064e0803" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp", + "isShowingSphere" : true, + "elementName" : "PathNode15", + "tags" : [ + + ], + "elementGuid" : { + "value" : "5f34a959-75c8-4df9-bff4-47c2b9d90b30" + }, + "attachedElementGuid" : { + "value" : "191992a2-22e9-4440-8de7-a70fc2f29d2d" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", + "originalPosition" : { + "x" : 0, + "y" : 0, + "z" : 400 + }, + "originalEulerAngles" : { + "x" : 0, + "y" : 0, + "z" : 0 + }, + "originalScale" : { + "x" : 0.1, + "y" : 1, + "z" : 1 + }, + "attachedElementGuid" : { + "value" : "5f34a959-75c8-4df9-bff4-47c2b9d90b30" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", + "isOverridingDuration" : false, + "startTime" : -32767, + "endTime" : 32767, + "attachedElementGuid" : { + "value" : "5f34a959-75c8-4df9-bff4-47c2b9d90b30" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp", + "originalBaseColor" : { + "r" : 1, + "g" : 1, + "b" : 1, + "a" : 1 + }, + "emissionEnabled" : false, + "originalEmissionColor" : { + "r" : 0, + "g" : 0, + "b" : 0, + "a" : 1 + }, + "originalEmissionIntensity" : 0, + "attachedElementGuid" : { + "value" : "5f34a959-75c8-4df9-bff4-47c2b9d90b30" } } ], diff --git a/Assets/StreamingAssets/Export/Chaos Zone/BeatMap.bytes b/Assets/StreamingAssets/Export/Chaos Zone/BeatMap.bytes index 702f5df0..d6baf029 100644 Binary files a/Assets/StreamingAssets/Export/Chaos Zone/BeatMap.bytes and b/Assets/StreamingAssets/Export/Chaos Zone/BeatMap.bytes differ diff --git a/Assets/StreamingAssets/Export/Chaos Zone/CommandScripts.bytes b/Assets/StreamingAssets/Export/Chaos Zone/CommandScripts.bytes index c74a586b..dfff0a71 100644 --- a/Assets/StreamingAssets/Export/Chaos Zone/CommandScripts.bytes +++ b/Assets/StreamingAssets/Export/Chaos Zone/CommandScripts.bytes @@ -1 +1,2 @@ -XS1mC=,Cw).7 4O!"(oy9XRUh=4?6*w05%'r tͶoOyg{"_yzO0i7KlkXOGX:_џá}BTQa8(}~}X5n" \ No newline at end of file +Jj͑;`)4N%A&ʕPO!2hu;䆇U0'^e՛)7Fzl*T0 +AM}Jdz@"irmYiNA@^sMB\:~-Iȼ0G/<]C> N [}\"d(); + ripple.transform.localPosition = positionOffset; + ripple.transform.localEulerAngles = eulerAnglesOffset; + ripple.transform.localScale = scale; + ripple.transform.parent.transform.SetParent(null); + if (isCircle) + { + ripple.material.EnableKeyword("_ISCIRCLE_ON"); + } + else + { + ripple.material.DisableKeyword("_ISCIRCLE_ON"); + } + + ripple.material.SetFloat("_EdgeValue", 0f); + ripple.material.SetFloat("_Width", 1f); + ripple.material.SetFloat("_Opacity", 1f); + ripple.material.SetColor("_ImageColor", emissionColor * Mathf.Pow(2, emissionIntensity)); + ripple.material.DOFloat(0.5f, "_EdgeValue", rippleTime).SetEase(Ease.OutQuart).Play(); + ripple.material.DOFloat(0f, "_Width", rippleTime).SetEase(Ease.OutQuart).Play(); + ripple.material.DOFloat(0f, "_Opacity", rippleTime).SetEase(Ease.Linear).Play(); + LeanPool.Despawn(ripple.transform.parent.gameObject, rippleTime); + } + + public override EffectBase_BM ConvertToBM() + { + return new Beatmap.DTMRippleEffect_BM(isCircle, rippleTime, emissionColor, emissionIntensity, positionOffset, eulerAnglesOffset, scale); + } + + public override void SetUpInspector() + { + IHaveInspection inspector = EditorManager.instance.uiManager.inspector; + var container = inspector.GenerateContainer("DTM Ripple Effect"); + var effectSettings1 = container.GenerateSubcontainer(3); + var isCircleToggle = inspector.GenerateToggle(this, effectSettings1, "Is Circle", nameof(isCircle)); + var rippleTimeInputField = inspector.GenerateInputField(this, effectSettings1, "Ripple Time", nameof(rippleTime)); + var effectSettings2 = container.GenerateSubcontainer(1); + var emissionColorPicker = inspector.GenerateEmissionColorPicker(this, effectSettings2, "Color", "NULL", nameof(emissionColor), nameof(emissionIntensity)); + var positionOffsetInputField = inspector.GenerateVector3InputField(this, effectSettings2, "Position Offset", nameof(positionOffset)); + var eulerAnglesInputField = inspector.GenerateVector3InputField(this, effectSettings2, "Euler Angles", nameof(eulerAnglesOffset)); + var scaleInputField = inspector.GenerateVector3InputField(this, effectSettings2, "Scale", nameof(scale)); + } + + } + + namespace Beatmap + { + public class DTMRippleEffect_BM : EffectBase_BM + { + public bool isCircle; + public float rippleTime; + public Vector3 positionOffset; + public Vector3 eulerAngles; + public Vector3 scale; + public Color emissionColor = Color.white; + public float emissionIntensity = 0; + + public DTMRippleEffect_BM() + { + + } + + public DTMRippleEffect_BM(bool isCircle, float rippleTime, Color emissionColor, float emissionIntensity, Vector3 positionOffset, Vector3 eulerAngles, Vector3 scale) + { + this.isCircle = isCircle; + this.rippleTime = rippleTime; + this.positionOffset = positionOffset; + this.eulerAngles = eulerAngles; + this.scale = scale; + this.emissionColor = emissionColor; + this.emissionIntensity = emissionIntensity; + } + + public override EffectBase ConvertToGameType(GameElement attachedGameElement) + { + return new DTMRippleEffect(isCircle, rippleTime, emissionColor, emissionIntensity, positionOffset, eulerAngles, scale) + { + attachedGameElement = attachedGameElement + }; + } + } + } +} \ No newline at end of file diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Scripts/NoteEffect/DTMRippleEffect.cs.meta b/Assets/ThemeBundles/DepartureToMultiverse/Scripts/NoteEffect/DTMRippleEffect.cs.meta new file mode 100644 index 00000000..d4664c7f --- /dev/null +++ b/Assets/ThemeBundles/DepartureToMultiverse/Scripts/NoteEffect/DTMRippleEffect.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c727da5a60404cd439460f09572a8085 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Shders.meta b/Assets/ThemeBundles/DepartureToMultiverse/Shders.meta new file mode 100644 index 00000000..48c2b292 --- /dev/null +++ b/Assets/ThemeBundles/DepartureToMultiverse/Shders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4f92c943bdc04094bb6f3ab3d6edda2e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Shders/Pixelate.mat b/Assets/ThemeBundles/DepartureToMultiverse/Shders/Pixelate.mat new file mode 100644 index 00000000..a9f66ce2 --- /dev/null +++ b/Assets/ThemeBundles/DepartureToMultiverse/Shders/Pixelate.mat @@ -0,0 +1,195 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-1779936735614116135 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 7 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Pixelate + m_Shader: {fileID: 4800000, guid: 5fd213d22763447c4aa106605e06184e, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: + - _RECEIVESHADOWS_OFF + - _RECEIVE_SHADOWS_OFF + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AfterPostProcessTexture: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BaseMap: + 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} + - _CameraColorTexture: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _CameraOpaqueTexture: + 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: 0} + 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} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpeedDistortMap: + m_Texture: {fileID: 2800000, guid: 7f808d0c8608b954d8f20cb4132c3049, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Texture0: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TextureOverlay: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TextureOverlayMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _texcoord: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: + - _NBPostProcessFlags: 0 + m_Floats: + - _Alpha: 1 + - _AlphaClip: 0 + - _AlphaCutoff: 0.5 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Contrast: 1 + - _Cull: 2 + - _Cutoff: 0.5 + - _DeSaturateIntensity: 0 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DisappearEndDistance: 100 + - _DisappearStartDistance: 50 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _Fade: 0.1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _GridScale: 1 + - _InvertIntensity: 0 + - _LineWidth: 0.05 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _PixelateStrength: 1 + - _PixelateStrengthX: 320 + - _PixelateStrengthY: 180 + - _Plane: 0 + - _QueueControl: 0 + - _QueueOffset: 0 + - _ReceiveShadows: 0 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _TextureOverlayIntensity: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + - __dirty: 0 + m_Colors: + - _BackgroundColor: {r: 0, g: 0, b: 0, a: 0} + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _ChromaticAberrationVector: {r: 1, g: 0, b: 0, a: 0} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _CustomScreenCenter: {r: 0.5, g: 0.5, b: 0, a: 0} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FlashColor: {r: 1, g: 1, b: 1, a: 1} + - _LineColor: {r: 1, g: 1, b: 1, a: 1} + - _RadialBlurVec: {r: 1, g: 0, b: 0, a: 0} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + - _SpeedDistortVec: {r: 0, g: 0, b: 0, a: 0} + - _SpeedDistortVec2: {r: 0, g: 0, b: 0, a: 0} + - _TextureOverlayAnim: {r: 0, g: 0, b: 0, a: 0} + - _VignetteColor: {r: 0, g: 0, b: 0, a: 1} + - _VignetteVec: {r: 1, g: 0, b: 0, a: 0} + m_BuildTextureStacks: [] diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Shders/Pixelate.mat.meta b/Assets/ThemeBundles/DepartureToMultiverse/Shders/Pixelate.mat.meta new file mode 100644 index 00000000..69b9a619 --- /dev/null +++ b/Assets/ThemeBundles/DepartureToMultiverse/Shders/Pixelate.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f0cf39229422d1b428bf04e0bc828dc6 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Shders/PixelateFeature.cs b/Assets/ThemeBundles/DepartureToMultiverse/Shders/PixelateFeature.cs new file mode 100644 index 00000000..e292d0a2 --- /dev/null +++ b/Assets/ThemeBundles/DepartureToMultiverse/Shders/PixelateFeature.cs @@ -0,0 +1,47 @@ +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +public class PixelateFeature : ScriptableRendererFeature +{ + [System.Serializable] + public class Settings + { + public RenderPassEvent renderPassEvent = RenderPassEvent.AfterRenderingPostProcessing; + [Tooltip("用于像素化的材质")] + public Material pixelateMaterial = null; + } + + public Settings settings = new Settings(); + private PixelatePass m_PixelatePass; + + // 当Feature被创建或Inspector中的值被改变时调用 + public override void Create() + { + // 检查材质是否存在 + if (settings.pixelateMaterial != null) + { + m_PixelatePass = new PixelatePass(settings.pixelateMaterial); + // 将Inspector中设置的事件赋值给Pass + m_PixelatePass.renderPassEvent = settings.renderPassEvent; + } + else + { + // 如果材质为空,则不创建Pass,避免后续报错 + m_PixelatePass = null; + } + } + + // 【核心修正】这个方法现在非常干净,只负责将创建好的Pass入队 + public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) + { + if (m_PixelatePass == null) + { + // 如果Pass没有被成功创建(因为没材质),就直接返回 + return; + } + + // 将我们的Pass添加到渲染队列中,URP会在正确的时间执行它 + renderer.EnqueuePass(m_PixelatePass); + } +} \ No newline at end of file diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Shders/PixelateFeature.cs.meta b/Assets/ThemeBundles/DepartureToMultiverse/Shders/PixelateFeature.cs.meta new file mode 100644 index 00000000..6f36f33e --- /dev/null +++ b/Assets/ThemeBundles/DepartureToMultiverse/Shders/PixelateFeature.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f41bcf9b1f0eb6446907e2c52c9f2d39 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Shders/PixelatePass.cs b/Assets/ThemeBundles/DepartureToMultiverse/Shders/PixelatePass.cs new file mode 100644 index 00000000..0b4e8e64 --- /dev/null +++ b/Assets/ThemeBundles/DepartureToMultiverse/Shders/PixelatePass.cs @@ -0,0 +1,45 @@ +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +public class PixelatePass : ScriptableRenderPass +{ + private Material m_PixelateMaterial; + + // 构造函数,接收材质 + public PixelatePass(Material pixelateMaterial) + { + this.m_PixelateMaterial = pixelateMaterial; + } + + // 这个方法在每一帧渲染该Pass之前被调用 + public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) + { + // 1. 安全检查 + if (m_PixelateMaterial == null) + { + Debug.LogError("Pixelate Material not assigned to the pass."); + return; + } + // 如果渲染的不是游戏主相机(例如Scene视图的相机),则直接返回,避免在编辑器里也显示效果 + if (renderingData.cameraData.cameraType != CameraType.Game) + { + return; + } + + // 2. 获取命令缓冲区 + CommandBuffer cmd = CommandBufferPool.Get("PixelatePass"); + + // 3. 【核心修正】在Execute方法内部,安全地获取当前摄像机的渲染目标 + // URP 12+ 使用 renderingData.cameraData.renderer.cameraColorTargetHandle + RTHandle source = renderingData.cameraData.renderer.cameraColorTargetHandle; + + // 4. 执行Blit操作 + // 将源纹理(source)通过我们的材质处理后,再写回源纹理(source) + Blit(cmd, source, source, m_PixelateMaterial, 0); + + // 5. 执行并释放命令缓冲区 + context.ExecuteCommandBuffer(cmd); + CommandBufferPool.Release(cmd); + } +} \ No newline at end of file diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Shders/PixelatePass.cs.meta b/Assets/ThemeBundles/DepartureToMultiverse/Shders/PixelatePass.cs.meta new file mode 100644 index 00000000..7acdff56 --- /dev/null +++ b/Assets/ThemeBundles/DepartureToMultiverse/Shders/PixelatePass.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d1fa92947bbef246a8a112b2a6b96c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Shders/PixelateUnlit.shader b/Assets/ThemeBundles/DepartureToMultiverse/Shders/PixelateUnlit.shader new file mode 100644 index 00000000..86b1eb3c --- /dev/null +++ b/Assets/ThemeBundles/DepartureToMultiverse/Shders/PixelateUnlit.shader @@ -0,0 +1,1604 @@ +// Made with Amplify Shader Editor v1.9.5.1 +// Available at the Unity Asset Store - http://u3d.as/y3X +Shader "Soullies/PixelateUnlit" +{ + Properties + { + [HideInInspector] _AlphaCutoff("Alpha Cutoff ", Range(0, 1)) = 0.5 + [HideInInspector] _EmissionColor("Emission Color", Color) = (1,1,1,1) + _PixelateStrengthX("PixelateStrengthX", Float) = 0 + _PixelateStrengthY("PixelateStrengthY", Float) = 0 + _Alpha("Alpha", Range( 0 , 1)) = 1 + + + //_TessPhongStrength( "Tess Phong Strength", Range( 0, 1 ) ) = 0.5 + //_TessValue( "Tess Max Tessellation", Range( 1, 32 ) ) = 16 + //_TessMin( "Tess Min Distance", Float ) = 10 + //_TessMax( "Tess Max Distance", Float ) = 25 + //_TessEdgeLength ( "Tess Edge length", Range( 2, 50 ) ) = 16 + //_TessMaxDisp( "Tess Max Displacement", Float ) = 25 + + [HideInInspector] _QueueOffset("_QueueOffset", Float) = 0 + [HideInInspector] _QueueControl("_QueueControl", Float) = -1 + + [HideInInspector][NoScaleOffset] unity_Lightmaps("unity_Lightmaps", 2DArray) = "" {} + [HideInInspector][NoScaleOffset] unity_LightmapsInd("unity_LightmapsInd", 2DArray) = "" {} + [HideInInspector][NoScaleOffset] unity_ShadowMasks("unity_ShadowMasks", 2DArray) = "" {} + + [HideInInspector][ToggleOff] _ReceiveShadows("Receive Shadows", Float) = 1.0 + } + + SubShader + { + LOD 0 + + + + Tags { "RenderPipeline"="UniversalPipeline" "RenderType"="Transparent" "Queue"="Transparent" "UniversalMaterialType"="Unlit" } + + Cull Back + AlphaToMask Off + + + + HLSLINCLUDE + #pragma target 3.5 + #pragma prefer_hlslcc gles + // ensure rendering platforms toggle list is visible + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Filtering.hlsl" + + #ifndef ASE_TESS_FUNCS + #define ASE_TESS_FUNCS + float4 FixedTess( float tessValue ) + { + return tessValue; + } + + float CalcDistanceTessFactor (float4 vertex, float minDist, float maxDist, float tess, float4x4 o2w, float3 cameraPos ) + { + float3 wpos = mul(o2w,vertex).xyz; + float dist = distance (wpos, cameraPos); + float f = clamp(1.0 - (dist - minDist) / (maxDist - minDist), 0.01, 1.0) * tess; + return f; + } + + float4 CalcTriEdgeTessFactors (float3 triVertexFactors) + { + float4 tess; + tess.x = 0.5 * (triVertexFactors.y + triVertexFactors.z); + tess.y = 0.5 * (triVertexFactors.x + triVertexFactors.z); + tess.z = 0.5 * (triVertexFactors.x + triVertexFactors.y); + tess.w = (triVertexFactors.x + triVertexFactors.y + triVertexFactors.z) / 3.0f; + return tess; + } + + float CalcEdgeTessFactor (float3 wpos0, float3 wpos1, float edgeLen, float3 cameraPos, float4 scParams ) + { + float dist = distance (0.5 * (wpos0+wpos1), cameraPos); + float len = distance(wpos0, wpos1); + float f = max(len * scParams.y / (edgeLen * dist), 1.0); + return f; + } + + float DistanceFromPlane (float3 pos, float4 plane) + { + float d = dot (float4(pos,1.0f), plane); + return d; + } + + bool WorldViewFrustumCull (float3 wpos0, float3 wpos1, float3 wpos2, float cullEps, float4 planes[6] ) + { + float4 planeTest; + planeTest.x = (( DistanceFromPlane(wpos0, planes[0]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos1, planes[0]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos2, planes[0]) > -cullEps) ? 1.0f : 0.0f ); + planeTest.y = (( DistanceFromPlane(wpos0, planes[1]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos1, planes[1]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos2, planes[1]) > -cullEps) ? 1.0f : 0.0f ); + planeTest.z = (( DistanceFromPlane(wpos0, planes[2]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos1, planes[2]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos2, planes[2]) > -cullEps) ? 1.0f : 0.0f ); + planeTest.w = (( DistanceFromPlane(wpos0, planes[3]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos1, planes[3]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos2, planes[3]) > -cullEps) ? 1.0f : 0.0f ); + return !all (planeTest); + } + + float4 DistanceBasedTess( float4 v0, float4 v1, float4 v2, float tess, float minDist, float maxDist, float4x4 o2w, float3 cameraPos ) + { + float3 f; + f.x = CalcDistanceTessFactor (v0,minDist,maxDist,tess,o2w,cameraPos); + f.y = CalcDistanceTessFactor (v1,minDist,maxDist,tess,o2w,cameraPos); + f.z = CalcDistanceTessFactor (v2,minDist,maxDist,tess,o2w,cameraPos); + + return CalcTriEdgeTessFactors (f); + } + + float4 EdgeLengthBasedTess( float4 v0, float4 v1, float4 v2, float edgeLength, float4x4 o2w, float3 cameraPos, float4 scParams ) + { + float3 pos0 = mul(o2w,v0).xyz; + float3 pos1 = mul(o2w,v1).xyz; + float3 pos2 = mul(o2w,v2).xyz; + float4 tess; + tess.x = CalcEdgeTessFactor (pos1, pos2, edgeLength, cameraPos, scParams); + tess.y = CalcEdgeTessFactor (pos2, pos0, edgeLength, cameraPos, scParams); + tess.z = CalcEdgeTessFactor (pos0, pos1, edgeLength, cameraPos, scParams); + tess.w = (tess.x + tess.y + tess.z) / 3.0f; + return tess; + } + + float4 EdgeLengthBasedTessCull( float4 v0, float4 v1, float4 v2, float edgeLength, float maxDisplacement, float4x4 o2w, float3 cameraPos, float4 scParams, float4 planes[6] ) + { + float3 pos0 = mul(o2w,v0).xyz; + float3 pos1 = mul(o2w,v1).xyz; + float3 pos2 = mul(o2w,v2).xyz; + float4 tess; + + if (WorldViewFrustumCull(pos0, pos1, pos2, maxDisplacement, planes)) + { + tess = 0.0f; + } + else + { + tess.x = CalcEdgeTessFactor (pos1, pos2, edgeLength, cameraPos, scParams); + tess.y = CalcEdgeTessFactor (pos2, pos0, edgeLength, cameraPos, scParams); + tess.z = CalcEdgeTessFactor (pos0, pos1, edgeLength, cameraPos, scParams); + tess.w = (tess.x + tess.y + tess.z) / 3.0f; + } + return tess; + } + #endif //ASE_TESS_FUNCS + ENDHLSL + + + Pass + { + + Name "Forward" + Tags { "LightMode"="Grab" } + + Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha + ZWrite Off + ZTest LEqual + Offset 0 , 0 + ColorMask RGBA + + + + HLSLPROGRAM + #pragma shader_feature_local _RECEIVE_SHADOWS_OFF + #pragma multi_compile_instancing + #pragma instancing_options renderinglayer + #pragma multi_compile _ LOD_FADE_CROSSFADE + #pragma multi_compile_fog + #define ASE_FOG 1 + #define _SURFACE_TYPE_TRANSPARENT 1 + #define ASE_SRP_VERSION 140011 + + #pragma multi_compile _ DOTS_INSTANCING_ON + + #pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 + + #pragma multi_compile _ DIRLIGHTMAP_COMBINED + #pragma multi_compile _ LIGHTMAP_ON + #pragma multi_compile _ DYNAMICLIGHTMAP_ON + #pragma multi_compile_fragment _ DEBUG_DISPLAY + + #pragma vertex vert + #pragma fragment frag + + #define SHADERPASS SHADERPASS_UNLIT + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DBuffer.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" + + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Debug/Debugging3D.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SurfaceData.hlsl" + + #define ASE_NEEDS_FRAG_SCREEN_POSITION + + + struct VertexInput + { + float4 positionOS : POSITION; + float3 normalOS : NORMAL; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 positionCS : SV_POSITION; + float4 clipPosV : TEXCOORD0; + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + float3 positionWS : TEXCOORD1; + #endif + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + float4 shadowCoord : TEXCOORD2; + #endif + #ifdef ASE_FOG + float fogFactor : TEXCOORD3; + #endif + + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + CBUFFER_START(UnityPerMaterial) + float _PixelateStrengthX; + float _PixelateStrengthY; + float _Alpha; + #ifdef ASE_TESSELLATION + float _TessPhongStrength; + float _TessValue; + float _TessMin; + float _TessMax; + float _TessEdgeLength; + float _TessMaxDisp; + #endif + CBUFFER_END + + sampler2D _AfterPostProcessTexture; + + + + VertexOutput VertexFunction( VertexInput v ) + { + VertexOutput o = (VertexOutput)0; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + + + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.positionOS.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + + float3 vertexValue = defaultVertexValue; + + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.positionOS.xyz = vertexValue; + #else + v.positionOS.xyz += vertexValue; + #endif + + v.normalOS = v.normalOS; + + VertexPositionInputs vertexInput = GetVertexPositionInputs( v.positionOS.xyz ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + o.positionWS = vertexInput.positionWS; + #endif + + #ifdef ASE_FOG + o.fogFactor = ComputeFogFactor( vertexInput.positionCS.z ); + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + o.shadowCoord = GetShadowCoord( vertexInput ); + #endif + + o.positionCS = vertexInput.positionCS; + o.clipPosV = vertexInput.positionCS; + return o; + } + + #if defined(ASE_TESSELLATION) + struct VertexControl + { + float4 vertex : INTERNALTESSPOS; + float3 normalOS : NORMAL; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessellationFactors + { + float edge[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; + }; + + VertexControl vert ( VertexInput v ) + { + VertexControl o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + o.vertex = v.positionOS; + o.normalOS = v.normalOS; + + return o; + } + + TessellationFactors TessellationFunction (InputPatch v) + { + TessellationFactors o; + float4 tf = 1; + float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax; + float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp; + #if defined(ASE_FIXED_TESSELLATION) + tf = FixedTess( tessValue ); + #elif defined(ASE_DISTANCE_TESSELLATION) + tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); + #elif defined(ASE_LENGTH_TESSELLATION) + tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); + #elif defined(ASE_LENGTH_CULL_TESSELLATION) + tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); + #endif + o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; + return o; + } + + [domain("tri")] + [partitioning("fractional_odd")] + [outputtopology("triangle_cw")] + [patchconstantfunc("TessellationFunction")] + [outputcontrolpoints(3)] + VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) + { + return patch[id]; + } + + [domain("tri")] + VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) + { + VertexInput o = (VertexInput) 0; + o.positionOS = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; + o.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z; + + #if defined(ASE_PHONG_TESSELLATION) + float3 pp[3]; + for (int i = 0; i < 3; ++i) + pp[i] = o.positionOS.xyz - patch[i].normalOS * (dot(o.positionOS.xyz, patch[i].normalOS) - dot(patch[i].vertex.xyz, patch[i].normalOS)); + float phongStrength = _TessPhongStrength; + o.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.positionOS.xyz; + #endif + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + return VertexFunction(o); + } + #else + VertexOutput vert ( VertexInput v ) + { + return VertexFunction( v ); + } + #endif + + half4 frag ( VertexOutput IN ) : SV_Target + { + UNITY_SETUP_INSTANCE_ID( IN ); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + float3 WorldPosition = IN.positionWS; + #endif + + float4 ShadowCoords = float4( 0, 0, 0, 0 ); + + float4 ClipPos = IN.clipPosV; + float4 ScreenPos = ComputeScreenPos( IN.clipPosV ); + + #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + ShadowCoords = IN.shadowCoord; + #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) + ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); + #endif + #endif + + float4 ase_screenPosNorm = ScreenPos / ScreenPos.w; + ase_screenPosNorm.z = ( UNITY_NEAR_CLIP_VALUE >= 0 ) ? ase_screenPosNorm.z : ase_screenPosNorm.z * 0.5 + 0.5; + float2 appendResult54 = (float2(ase_screenPosNorm.x , ase_screenPosNorm.y)); + float2 appendResult58 = (float2(_PixelateStrengthX , _PixelateStrengthY)); + + float3 BakedAlbedo = 0; + float3 BakedEmission = 0; + float3 Color = tex2D( _AfterPostProcessTexture, ( ( floor( ( appendResult54 * appendResult58 ) ) + float2( 0.5,0.5 ) ) / appendResult58 ) ).rgb; + float Alpha = _Alpha; + float AlphaClipThreshold = 0.5; + float AlphaClipThresholdShadow = 0.5; + + #ifdef _ALPHATEST_ON + clip( Alpha - AlphaClipThreshold ); + #endif + + #if defined(_DBUFFER) + ApplyDecalToBaseColor(IN.positionCS, Color); + #endif + + #ifdef LOD_FADE_CROSSFADE + LODDitheringTransition( IN.positionCS.xyz, unity_LODFade.x ); + #endif + + #ifdef ASE_FOG + Color = MixFog( Color, IN.fogFactor ); + #endif + + return half4( Color, Alpha ); + } + ENDHLSL + } + + + Pass + { + + Name "ShadowCaster" + Tags { "LightMode"="ShadowCaster" } + + ZWrite On + ZTest LEqual + AlphaToMask Off + ColorMask 0 + + HLSLPROGRAM + #pragma multi_compile_instancing + #pragma multi_compile _ LOD_FADE_CROSSFADE + #define ASE_FOG 1 + #define _SURFACE_TYPE_TRANSPARENT 1 + #define ASE_SRP_VERSION 140011 + + #pragma multi_compile _ DOTS_INSTANCING_ON + + #pragma multi_compile_vertex _ _CASTING_PUNCTUAL_LIGHT_SHADOW + + #pragma vertex vert + #pragma fragment frag + + #define SHADERPASS SHADERPASS_SHADOWCASTER + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + + + + struct VertexInput + { + float4 positionOS : POSITION; + float3 normalOS : NORMAL; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 positionCS : SV_POSITION; + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + float3 positionWS : TEXCOORD0; + #endif + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + float4 shadowCoord : TEXCOORD1; + #endif + + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + CBUFFER_START(UnityPerMaterial) + float _PixelateStrengthX; + float _PixelateStrengthY; + float _Alpha; + #ifdef ASE_TESSELLATION + float _TessPhongStrength; + float _TessValue; + float _TessMin; + float _TessMax; + float _TessEdgeLength; + float _TessMaxDisp; + #endif + CBUFFER_END + + + + + float3 _LightDirection; + float3 _LightPosition; + + VertexOutput VertexFunction( VertexInput v ) + { + VertexOutput o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( o ); + + + + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.positionOS.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + + float3 vertexValue = defaultVertexValue; + + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.positionOS.xyz = vertexValue; + #else + v.positionOS.xyz += vertexValue; + #endif + + v.normalOS = v.normalOS; + + float3 positionWS = TransformObjectToWorld( v.positionOS.xyz ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + o.positionWS = positionWS; + #endif + + float3 normalWS = TransformObjectToWorldDir( v.normalOS ); + + #if _CASTING_PUNCTUAL_LIGHT_SHADOW + float3 lightDirectionWS = normalize(_LightPosition - positionWS); + #else + float3 lightDirectionWS = _LightDirection; + #endif + + float4 positionCS = TransformWorldToHClip(ApplyShadowBias(positionWS, normalWS, lightDirectionWS)); + + #if UNITY_REVERSED_Z + positionCS.z = min(positionCS.z, UNITY_NEAR_CLIP_VALUE); + #else + positionCS.z = max(positionCS.z, UNITY_NEAR_CLIP_VALUE); + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + VertexPositionInputs vertexInput = (VertexPositionInputs)0; + vertexInput.positionWS = positionWS; + vertexInput.positionCS = positionCS; + o.shadowCoord = GetShadowCoord( vertexInput ); + #endif + + o.positionCS = positionCS; + return o; + } + + #if defined(ASE_TESSELLATION) + struct VertexControl + { + float4 vertex : INTERNALTESSPOS; + float3 normalOS : NORMAL; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessellationFactors + { + float edge[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; + }; + + VertexControl vert ( VertexInput v ) + { + VertexControl o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + o.vertex = v.positionOS; + o.normalOS = v.normalOS; + + return o; + } + + TessellationFactors TessellationFunction (InputPatch v) + { + TessellationFactors o; + float4 tf = 1; + float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax; + float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp; + #if defined(ASE_FIXED_TESSELLATION) + tf = FixedTess( tessValue ); + #elif defined(ASE_DISTANCE_TESSELLATION) + tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); + #elif defined(ASE_LENGTH_TESSELLATION) + tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); + #elif defined(ASE_LENGTH_CULL_TESSELLATION) + tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); + #endif + o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; + return o; + } + + [domain("tri")] + [partitioning("fractional_odd")] + [outputtopology("triangle_cw")] + [patchconstantfunc("TessellationFunction")] + [outputcontrolpoints(3)] + VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) + { + return patch[id]; + } + + [domain("tri")] + VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) + { + VertexInput o = (VertexInput) 0; + o.positionOS = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; + o.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z; + + #if defined(ASE_PHONG_TESSELLATION) + float3 pp[3]; + for (int i = 0; i < 3; ++i) + pp[i] = o.positionOS.xyz - patch[i].normalOS * (dot(o.positionOS.xyz, patch[i].normalOS) - dot(patch[i].vertex.xyz, patch[i].normalOS)); + float phongStrength = _TessPhongStrength; + o.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.positionOS.xyz; + #endif + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + return VertexFunction(o); + } + #else + VertexOutput vert ( VertexInput v ) + { + return VertexFunction( v ); + } + #endif + + half4 frag(VertexOutput IN ) : SV_TARGET + { + UNITY_SETUP_INSTANCE_ID( IN ); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + float3 WorldPosition = IN.positionWS; + #endif + + float4 ShadowCoords = float4( 0, 0, 0, 0 ); + + #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + ShadowCoords = IN.shadowCoord; + #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) + ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); + #endif + #endif + + + + float Alpha = _Alpha; + float AlphaClipThreshold = 0.5; + float AlphaClipThresholdShadow = 0.5; + + #ifdef _ALPHATEST_ON + #ifdef _ALPHATEST_SHADOW_ON + clip(Alpha - AlphaClipThresholdShadow); + #else + clip(Alpha - AlphaClipThreshold); + #endif + #endif + + #ifdef LOD_FADE_CROSSFADE + LODDitheringTransition( IN.positionCS.xyz, unity_LODFade.x ); + #endif + + return 0; + } + ENDHLSL + } + + + Pass + { + + Name "DepthOnly" + Tags { "LightMode"="DepthOnly" } + + ZWrite On + ColorMask 0 + AlphaToMask Off + + HLSLPROGRAM + #pragma multi_compile_instancing + #pragma multi_compile _ LOD_FADE_CROSSFADE + #define ASE_FOG 1 + #define _SURFACE_TYPE_TRANSPARENT 1 + #define ASE_SRP_VERSION 140011 + + #pragma multi_compile _ DOTS_INSTANCING_ON + + #pragma vertex vert + #pragma fragment frag + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + + + + struct VertexInput + { + float4 positionOS : POSITION; + float3 normalOS : NORMAL; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 positionCS : SV_POSITION; + float4 clipPosV : TEXCOORD0; + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + float3 positionWS : TEXCOORD1; + #endif + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + float4 shadowCoord : TEXCOORD2; + #endif + + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + CBUFFER_START(UnityPerMaterial) + float _PixelateStrengthX; + float _PixelateStrengthY; + float _Alpha; + #ifdef ASE_TESSELLATION + float _TessPhongStrength; + float _TessValue; + float _TessMin; + float _TessMax; + float _TessEdgeLength; + float _TessMaxDisp; + #endif + CBUFFER_END + + + + + VertexOutput VertexFunction( VertexInput v ) + { + VertexOutput o = (VertexOutput)0; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + + + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.positionOS.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + + float3 vertexValue = defaultVertexValue; + + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.positionOS.xyz = vertexValue; + #else + v.positionOS.xyz += vertexValue; + #endif + + v.normalOS = v.normalOS; + + VertexPositionInputs vertexInput = GetVertexPositionInputs( v.positionOS.xyz ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + o.positionWS = vertexInput.positionWS; + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + o.shadowCoord = GetShadowCoord( vertexInput ); + #endif + + o.positionCS = vertexInput.positionCS; + o.clipPosV = vertexInput.positionCS; + return o; + } + + #if defined(ASE_TESSELLATION) + struct VertexControl + { + float4 vertex : INTERNALTESSPOS; + float3 normalOS : NORMAL; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessellationFactors + { + float edge[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; + }; + + VertexControl vert ( VertexInput v ) + { + VertexControl o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + o.vertex = v.positionOS; + o.normalOS = v.normalOS; + + return o; + } + + TessellationFactors TessellationFunction (InputPatch v) + { + TessellationFactors o; + float4 tf = 1; + float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax; + float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp; + #if defined(ASE_FIXED_TESSELLATION) + tf = FixedTess( tessValue ); + #elif defined(ASE_DISTANCE_TESSELLATION) + tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); + #elif defined(ASE_LENGTH_TESSELLATION) + tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); + #elif defined(ASE_LENGTH_CULL_TESSELLATION) + tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); + #endif + o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; + return o; + } + + [domain("tri")] + [partitioning("fractional_odd")] + [outputtopology("triangle_cw")] + [patchconstantfunc("TessellationFunction")] + [outputcontrolpoints(3)] + VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) + { + return patch[id]; + } + + [domain("tri")] + VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) + { + VertexInput o = (VertexInput) 0; + o.positionOS = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; + o.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z; + + #if defined(ASE_PHONG_TESSELLATION) + float3 pp[3]; + for (int i = 0; i < 3; ++i) + pp[i] = o.positionOS.xyz - patch[i].normalOS * (dot(o.positionOS.xyz, patch[i].normalOS) - dot(patch[i].vertex.xyz, patch[i].normalOS)); + float phongStrength = _TessPhongStrength; + o.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.positionOS.xyz; + #endif + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + return VertexFunction(o); + } + #else + VertexOutput vert ( VertexInput v ) + { + return VertexFunction( v ); + } + #endif + + half4 frag(VertexOutput IN ) : SV_TARGET + { + UNITY_SETUP_INSTANCE_ID(IN); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + float3 WorldPosition = IN.positionWS; + #endif + + float4 ShadowCoords = float4( 0, 0, 0, 0 ); + + float4 ClipPos = IN.clipPosV; + float4 ScreenPos = ComputeScreenPos( IN.clipPosV ); + + #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + ShadowCoords = IN.shadowCoord; + #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) + ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); + #endif + #endif + + + + float Alpha = _Alpha; + float AlphaClipThreshold = 0.5; + + #ifdef _ALPHATEST_ON + clip(Alpha - AlphaClipThreshold); + #endif + + #ifdef LOD_FADE_CROSSFADE + LODDitheringTransition( IN.positionCS.xyz, unity_LODFade.x ); + #endif + return 0; + } + ENDHLSL + } + + + Pass + { + + Name "SceneSelectionPass" + Tags { "LightMode"="SceneSelectionPass" } + + Cull Off + AlphaToMask Off + + HLSLPROGRAM + #define ASE_FOG 1 + #define _SURFACE_TYPE_TRANSPARENT 1 + #define ASE_SRP_VERSION 140011 + + #pragma multi_compile _ DOTS_INSTANCING_ON + + #pragma vertex vert + #pragma fragment frag + + #define ATTRIBUTES_NEED_NORMAL + #define ATTRIBUTES_NEED_TANGENT + #define SHADERPASS SHADERPASS_DEPTHONLY + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" + + + + struct VertexInput + { + float4 positionOS : POSITION; + float3 normalOS : NORMAL; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 positionCS : SV_POSITION; + + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + CBUFFER_START(UnityPerMaterial) + float _PixelateStrengthX; + float _PixelateStrengthY; + float _Alpha; + #ifdef ASE_TESSELLATION + float _TessPhongStrength; + float _TessValue; + float _TessMin; + float _TessMax; + float _TessEdgeLength; + float _TessMaxDisp; + #endif + CBUFFER_END + + + + + int _ObjectId; + int _PassValue; + + struct SurfaceDescription + { + float Alpha; + float AlphaClipThreshold; + }; + + VertexOutput VertexFunction(VertexInput v ) + { + VertexOutput o; + ZERO_INITIALIZE(VertexOutput, o); + + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + + + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.positionOS.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + + float3 vertexValue = defaultVertexValue; + + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.positionOS.xyz = vertexValue; + #else + v.positionOS.xyz += vertexValue; + #endif + + v.normalOS = v.normalOS; + + float3 positionWS = TransformObjectToWorld( v.positionOS.xyz ); + + o.positionCS = TransformWorldToHClip(positionWS); + + return o; + } + + #if defined(ASE_TESSELLATION) + struct VertexControl + { + float4 vertex : INTERNALTESSPOS; + float3 normalOS : NORMAL; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessellationFactors + { + float edge[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; + }; + + VertexControl vert ( VertexInput v ) + { + VertexControl o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + o.vertex = v.positionOS; + o.normalOS = v.normalOS; + + return o; + } + + TessellationFactors TessellationFunction (InputPatch v) + { + TessellationFactors o; + float4 tf = 1; + float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax; + float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp; + #if defined(ASE_FIXED_TESSELLATION) + tf = FixedTess( tessValue ); + #elif defined(ASE_DISTANCE_TESSELLATION) + tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); + #elif defined(ASE_LENGTH_TESSELLATION) + tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); + #elif defined(ASE_LENGTH_CULL_TESSELLATION) + tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); + #endif + o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; + return o; + } + + [domain("tri")] + [partitioning("fractional_odd")] + [outputtopology("triangle_cw")] + [patchconstantfunc("TessellationFunction")] + [outputcontrolpoints(3)] + VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) + { + return patch[id]; + } + + [domain("tri")] + VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) + { + VertexInput o = (VertexInput) 0; + o.positionOS = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; + o.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z; + + #if defined(ASE_PHONG_TESSELLATION) + float3 pp[3]; + for (int i = 0; i < 3; ++i) + pp[i] = o.positionOS.xyz - patch[i].normalOS * (dot(o.positionOS.xyz, patch[i].normalOS) - dot(patch[i].vertex.xyz, patch[i].normalOS)); + float phongStrength = _TessPhongStrength; + o.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.positionOS.xyz; + #endif + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + return VertexFunction(o); + } + #else + VertexOutput vert ( VertexInput v ) + { + return VertexFunction( v ); + } + #endif + + half4 frag(VertexOutput IN ) : SV_TARGET + { + SurfaceDescription surfaceDescription = (SurfaceDescription)0; + + + + surfaceDescription.Alpha = _Alpha; + surfaceDescription.AlphaClipThreshold = 0.5; + + #if _ALPHATEST_ON + float alphaClipThreshold = 0.01f; + #if ALPHA_CLIP_THRESHOLD + alphaClipThreshold = surfaceDescription.AlphaClipThreshold; + #endif + clip(surfaceDescription.Alpha - alphaClipThreshold); + #endif + + half4 outColor = half4(_ObjectId, _PassValue, 1.0, 1.0); + return outColor; + } + ENDHLSL + } + + + Pass + { + + Name "ScenePickingPass" + Tags { "LightMode"="Picking" } + + AlphaToMask Off + + HLSLPROGRAM + #define ASE_FOG 1 + #define _SURFACE_TYPE_TRANSPARENT 1 + #define ASE_SRP_VERSION 140011 + + #pragma multi_compile _ DOTS_INSTANCING_ON + + #pragma vertex vert + #pragma fragment frag + + #define ATTRIBUTES_NEED_NORMAL + #define ATTRIBUTES_NEED_TANGENT + + #define SHADERPASS SHADERPASS_DEPTHONLY + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" + + + + struct VertexInput + { + float4 positionOS : POSITION; + float3 normalOS : NORMAL; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 positionCS : SV_POSITION; + + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + CBUFFER_START(UnityPerMaterial) + float _PixelateStrengthX; + float _PixelateStrengthY; + float _Alpha; + #ifdef ASE_TESSELLATION + float _TessPhongStrength; + float _TessValue; + float _TessMin; + float _TessMax; + float _TessEdgeLength; + float _TessMaxDisp; + #endif + CBUFFER_END + + + + + float4 _SelectionID; + + struct SurfaceDescription + { + float Alpha; + float AlphaClipThreshold; + }; + + VertexOutput VertexFunction(VertexInput v ) + { + VertexOutput o; + ZERO_INITIALIZE(VertexOutput, o); + + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + + + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.positionOS.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + + float3 vertexValue = defaultVertexValue; + + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.positionOS.xyz = vertexValue; + #else + v.positionOS.xyz += vertexValue; + #endif + + v.normalOS = v.normalOS; + + float3 positionWS = TransformObjectToWorld( v.positionOS.xyz ); + o.positionCS = TransformWorldToHClip(positionWS); + return o; + } + + #if defined(ASE_TESSELLATION) + struct VertexControl + { + float4 vertex : INTERNALTESSPOS; + float3 normalOS : NORMAL; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessellationFactors + { + float edge[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; + }; + + VertexControl vert ( VertexInput v ) + { + VertexControl o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + o.vertex = v.positionOS; + o.normalOS = v.normalOS; + + return o; + } + + TessellationFactors TessellationFunction (InputPatch v) + { + TessellationFactors o; + float4 tf = 1; + float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax; + float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp; + #if defined(ASE_FIXED_TESSELLATION) + tf = FixedTess( tessValue ); + #elif defined(ASE_DISTANCE_TESSELLATION) + tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); + #elif defined(ASE_LENGTH_TESSELLATION) + tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); + #elif defined(ASE_LENGTH_CULL_TESSELLATION) + tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); + #endif + o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; + return o; + } + + [domain("tri")] + [partitioning("fractional_odd")] + [outputtopology("triangle_cw")] + [patchconstantfunc("TessellationFunction")] + [outputcontrolpoints(3)] + VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) + { + return patch[id]; + } + + [domain("tri")] + VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) + { + VertexInput o = (VertexInput) 0; + o.positionOS = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; + o.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z; + + #if defined(ASE_PHONG_TESSELLATION) + float3 pp[3]; + for (int i = 0; i < 3; ++i) + pp[i] = o.positionOS.xyz - patch[i].normalOS * (dot(o.positionOS.xyz, patch[i].normalOS) - dot(patch[i].vertex.xyz, patch[i].normalOS)); + float phongStrength = _TessPhongStrength; + o.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.positionOS.xyz; + #endif + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + return VertexFunction(o); + } + #else + VertexOutput vert ( VertexInput v ) + { + return VertexFunction( v ); + } + #endif + + half4 frag(VertexOutput IN ) : SV_TARGET + { + SurfaceDescription surfaceDescription = (SurfaceDescription)0; + + + + surfaceDescription.Alpha = _Alpha; + surfaceDescription.AlphaClipThreshold = 0.5; + + #if _ALPHATEST_ON + float alphaClipThreshold = 0.01f; + #if ALPHA_CLIP_THRESHOLD + alphaClipThreshold = surfaceDescription.AlphaClipThreshold; + #endif + clip(surfaceDescription.Alpha - alphaClipThreshold); + #endif + + half4 outColor = 0; + outColor = _SelectionID; + + return outColor; + } + + ENDHLSL + } + + + Pass + { + + Name "DepthNormals" + Tags { "LightMode"="DepthNormalsOnly" } + + ZTest LEqual + ZWrite On + + HLSLPROGRAM + #pragma multi_compile_instancing + #pragma multi_compile _ LOD_FADE_CROSSFADE + #define ASE_FOG 1 + #define _SURFACE_TYPE_TRANSPARENT 1 + #define ASE_SRP_VERSION 140011 + + #pragma multi_compile _ DOTS_INSTANCING_ON + + #pragma vertex vert + #pragma fragment frag + + #define ATTRIBUTES_NEED_NORMAL + #define ATTRIBUTES_NEED_TANGENT + #define VARYINGS_NEED_NORMAL_WS + + #define SHADERPASS SHADERPASS_DEPTHNORMALSONLY + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" + + + + struct VertexInput + { + float4 positionOS : POSITION; + float3 normalOS : NORMAL; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 positionCS : SV_POSITION; + float4 clipPosV : TEXCOORD0; + float3 normalWS : TEXCOORD1; + + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + CBUFFER_START(UnityPerMaterial) + float _PixelateStrengthX; + float _PixelateStrengthY; + float _Alpha; + #ifdef ASE_TESSELLATION + float _TessPhongStrength; + float _TessValue; + float _TessMin; + float _TessMax; + float _TessEdgeLength; + float _TessMaxDisp; + #endif + CBUFFER_END + + + + + struct SurfaceDescription + { + float Alpha; + float AlphaClipThreshold; + }; + + VertexOutput VertexFunction(VertexInput v ) + { + VertexOutput o; + ZERO_INITIALIZE(VertexOutput, o); + + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + + + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.positionOS.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + + float3 vertexValue = defaultVertexValue; + + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.positionOS.xyz = vertexValue; + #else + v.positionOS.xyz += vertexValue; + #endif + + v.normalOS = v.normalOS; + + VertexPositionInputs vertexInput = GetVertexPositionInputs( v.positionOS.xyz ); + + o.positionCS = vertexInput.positionCS; + o.clipPosV = vertexInput.positionCS; + o.normalWS = TransformObjectToWorldNormal( v.normalOS ); + return o; + } + + #if defined(ASE_TESSELLATION) + struct VertexControl + { + float4 vertex : INTERNALTESSPOS; + float3 normalOS : NORMAL; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessellationFactors + { + float edge[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; + }; + + VertexControl vert ( VertexInput v ) + { + VertexControl o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + o.vertex = v.positionOS; + o.normalOS = v.normalOS; + + return o; + } + + TessellationFactors TessellationFunction (InputPatch v) + { + TessellationFactors o; + float4 tf = 1; + float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax; + float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp; + #if defined(ASE_FIXED_TESSELLATION) + tf = FixedTess( tessValue ); + #elif defined(ASE_DISTANCE_TESSELLATION) + tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); + #elif defined(ASE_LENGTH_TESSELLATION) + tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); + #elif defined(ASE_LENGTH_CULL_TESSELLATION) + tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); + #endif + o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; + return o; + } + + [domain("tri")] + [partitioning("fractional_odd")] + [outputtopology("triangle_cw")] + [patchconstantfunc("TessellationFunction")] + [outputcontrolpoints(3)] + VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) + { + return patch[id]; + } + + [domain("tri")] + VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) + { + VertexInput o = (VertexInput) 0; + o.positionOS = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; + o.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z; + + #if defined(ASE_PHONG_TESSELLATION) + float3 pp[3]; + for (int i = 0; i < 3; ++i) + pp[i] = o.positionOS.xyz - patch[i].normalOS * (dot(o.positionOS.xyz, patch[i].normalOS) - dot(patch[i].vertex.xyz, patch[i].normalOS)); + float phongStrength = _TessPhongStrength; + o.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.positionOS.xyz; + #endif + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + return VertexFunction(o); + } + #else + VertexOutput vert ( VertexInput v ) + { + return VertexFunction( v ); + } + #endif + + half4 frag(VertexOutput IN ) : SV_TARGET + { + float4 ClipPos = IN.clipPosV; + float4 ScreenPos = ComputeScreenPos( IN.clipPosV ); + + + + float Alpha = _Alpha; + float AlphaClipThreshold = 0.5; + + #if _ALPHATEST_ON + clip( Alpha - AlphaClipThreshold ); + #endif + + #ifdef LOD_FADE_CROSSFADE + LODDitheringTransition( IN.positionCS.xyz, unity_LODFade.x ); + #endif + + float3 normalWS = IN.normalWS; + + return half4(NormalizeNormalPerPixel(normalWS), 0.0); + } + + ENDHLSL + } + + + } + + CustomEditor "UnityEditor.ShaderGraphUnlitGUI" + FallBack "Hidden/Shader Graph/FallbackError" + + Fallback Off +} +/*ASEBEGIN +Version=19501 +Node;AmplifyShaderEditor.DynamicAppendNode;54;-432,-48;Inherit;False;FLOAT2;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.DynamicAppendNode;58;-432,64;Inherit;False;FLOAT2;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.RangedFloatNode;14;-720,144;Inherit;False;Property;_PixelateStrengthX;PixelateStrengthX;0;0;Create;True;0;0;0;False;0;False;0;160;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;18;-720,224;Inherit;False;Property;_PixelateStrengthY;PixelateStrengthY;1;0;Create;True;0;0;0;False;0;False;0;90;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.ScreenPosInputsNode;1;-704,-80;Float;False;0;False;0;5;FLOAT4;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;56;-208,-16;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.FloorOpNode;65;-48,-16;Inherit;False;1;0;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleAddOpNode;64;96,-16;Inherit;False;2;2;0;FLOAT2;0.5,0;False;1;FLOAT2;0.5,0.5;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleDivideOpNode;60;240,32;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.RangedFloatNode;67;384,224;Inherit;False;Property;_Alpha;Alpha;2;0;Create;True;0;0;0;False;0;False;1;1;0;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.SamplerNode;39;400,16;Inherit;True;Global;_AfterPostProcessTexture;_AfterPostProcessTexture;3;0;Create;False;0;0;0;False;0;False;-1;None;;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;78;704,16;Float;False;False;-1;2;UnityEditor.ShaderGraphUnlitGUI;0;1;New Amplify Shader;2992e84f91cbeb14eab234972e07ea9d;True;ExtraPrePass;0;0;ExtraPrePass;5;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;False;False;False;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Unlit;True;3;True;12;all;0;False;True;1;1;False;;0;False;;0;1;False;;0;False;;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;True;True;True;True;0;False;;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;0;False;False;0;;0;0;Standard;0;False;0 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;79;704,16;Float;False;True;-1;2;UnityEditor.ShaderGraphUnlitGUI;0;13;Soullies/PixelateUnlit;2992e84f91cbeb14eab234972e07ea9d;True;Forward;0;1;Forward;8;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;False;False;False;True;4;RenderPipeline=UniversalPipeline;RenderType=Transparent=RenderType;Queue=Transparent=Queue=0;UniversalMaterialType=Unlit;True;3;True;12;all;0;False;True;1;5;False;;10;False;;1;1;False;;10;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;True;True;True;True;0;False;;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;2;False;;True;3;False;;True;True;0;False;;0;False;;True;1;LightMode=Grab;False;False;0;;0;0;Standard;22;Surface;1;638866098046279998; Blend;0;0;Two Sided;1;0;Forward Only;0;0;Cast Shadows;1;0; Use Shadow Threshold;0;0;Receive Shadows;1;0;GPU Instancing;1;0;LOD CrossFade;1;0;Built-in Fog;1;0;Meta Pass;0;0;Extra Pre Pass;0;0;Tessellation;0;0; Phong;0;0; Strength;0.5,False,;0; Type;0;0; Tess;16,False,;0; Min;10,False,;0; Max;25,False,;0; Edge Length;16,False,;0; Max Displacement;25,False,;0;Vertex Position,InvertActionOnDeselection;1;0;0;10;False;True;True;True;False;False;True;True;True;False;False;;False;0 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;80;704,16;Float;False;False;-1;2;UnityEditor.ShaderGraphUnlitGUI;0;1;New Amplify Shader;2992e84f91cbeb14eab234972e07ea9d;True;ShadowCaster;0;2;ShadowCaster;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;False;False;False;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Unlit;True;3;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;False;False;True;False;False;False;False;0;False;;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;False;True;1;LightMode=ShadowCaster;False;False;0;;0;0;Standard;0;False;0 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;81;704,16;Float;False;False;-1;2;UnityEditor.ShaderGraphUnlitGUI;0;1;New Amplify Shader;2992e84f91cbeb14eab234972e07ea9d;True;DepthOnly;0;3;DepthOnly;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;False;False;False;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Unlit;True;3;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;False;False;True;False;False;False;False;0;False;;False;False;False;False;False;False;False;False;False;True;1;False;;False;False;True;1;LightMode=DepthOnly;False;False;0;;0;0;Standard;0;False;0 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;82;704,16;Float;False;False;-1;2;UnityEditor.ShaderGraphUnlitGUI;0;1;New Amplify Shader;2992e84f91cbeb14eab234972e07ea9d;True;Meta;0;4;Meta;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;False;False;False;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Unlit;True;3;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;2;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;LightMode=Meta;False;False;0;;0;0;Standard;0;False;0 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;83;704,16;Float;False;False;-1;2;UnityEditor.ShaderGraphUnlitGUI;0;1;New Amplify Shader;2992e84f91cbeb14eab234972e07ea9d;True;Universal2D;0;5;Universal2D;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;False;False;False;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Unlit;True;3;True;12;all;0;False;True;1;1;False;;0;False;;0;1;False;;0;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;True;True;True;True;0;False;;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;1;LightMode=Universal2D;False;False;0;;0;0;Standard;0;False;0 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;84;704,16;Float;False;False;-1;2;UnityEditor.ShaderGraphUnlitGUI;0;1;New Amplify Shader;2992e84f91cbeb14eab234972e07ea9d;True;SceneSelectionPass;0;6;SceneSelectionPass;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;False;False;False;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Unlit;True;3;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;2;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;LightMode=SceneSelectionPass;False;False;0;;0;0;Standard;0;False;0 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;85;704,16;Float;False;False;-1;2;UnityEditor.ShaderGraphUnlitGUI;0;1;New Amplify Shader;2992e84f91cbeb14eab234972e07ea9d;True;ScenePickingPass;0;7;ScenePickingPass;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;False;False;False;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Unlit;True;3;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;LightMode=Picking;False;False;0;;0;0;Standard;0;False;0 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;86;704,16;Float;False;False;-1;2;UnityEditor.ShaderGraphUnlitGUI;0;1;New Amplify Shader;2992e84f91cbeb14eab234972e07ea9d;True;DepthNormals;0;8;DepthNormals;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;False;False;False;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Unlit;True;3;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;False;True;1;LightMode=DepthNormalsOnly;False;False;0;;0;0;Standard;0;False;0 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;87;704,16;Float;False;False;-1;2;UnityEditor.ShaderGraphUnlitGUI;0;1;New Amplify Shader;2992e84f91cbeb14eab234972e07ea9d;True;DepthNormalsOnly;0;9;DepthNormalsOnly;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;False;False;False;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Unlit;True;3;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;False;True;1;LightMode=DepthNormalsOnly;False;True;9;d3d11;metal;vulkan;xboxone;xboxseries;playstation;ps4;ps5;switch;0;;0;0;Standard;0;False;0 +WireConnection;54;0;1;1 +WireConnection;54;1;1;2 +WireConnection;58;0;14;0 +WireConnection;58;1;18;0 +WireConnection;56;0;54;0 +WireConnection;56;1;58;0 +WireConnection;65;0;56;0 +WireConnection;64;0;65;0 +WireConnection;60;0;64;0 +WireConnection;60;1;58;0 +WireConnection;39;1;60;0 +WireConnection;79;2;39;5 +WireConnection;79;3;67;0 +ASEEND*/ +//CHKSM=744A3FBB82FE73375085D29CAE654B1A97792B97 \ No newline at end of file diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Shders/PixelateUnlit.shader.meta b/Assets/ThemeBundles/DepartureToMultiverse/Shders/PixelateUnlit.shader.meta new file mode 100644 index 00000000..721fe8b2 --- /dev/null +++ b/Assets/ThemeBundles/DepartureToMultiverse/Shders/PixelateUnlit.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fb9c9eda58078b14688aa3ca7e93eb3b +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Shders/Ripple.shader b/Assets/ThemeBundles/DepartureToMultiverse/Shders/Ripple.shader new file mode 100644 index 00000000..64bbe256 --- /dev/null +++ b/Assets/ThemeBundles/DepartureToMultiverse/Shders/Ripple.shader @@ -0,0 +1,837 @@ +// Made with Amplify Shader Editor v1.9.5.1 +// Available at the Unity Asset Store - http://u3d.as/y3X +Shader "Chapter0/Ripple" +{ + Properties + { + [HideInInspector] _AlphaCutoff("Alpha Cutoff ", Range(0, 1)) = 0.5 + [HideInInspector] _EmissionColor("Emission Color", Color) = (1,1,1,1) + _EdgeValue("EdgeValue", Range( 0 , 1)) = 0.5 + [HDR]_ImageColor("ImageColor", Color) = (0,0,0,0) + _Width("Width", Range( 0 , 1)) = 0.5 + _Opacity("Opacity", Range( 0 , 1)) = 1 + [Toggle(_ISCIRCLE_ON)] _IsCircle("IsCircle", Float) = 0 + _MainTex("MainTex", 2D) = "white" {} + [HideInInspector] _texcoord( "", 2D ) = "white" {} + + [HideInInspector][NoScaleOffset] unity_Lightmaps("unity_Lightmaps", 2DArray) = "" {} + [HideInInspector][NoScaleOffset] unity_LightmapsInd("unity_LightmapsInd", 2DArray) = "" {} + [HideInInspector][NoScaleOffset] unity_ShadowMasks("unity_ShadowMasks", 2DArray) = "" {} + } + + SubShader + { + LOD 0 + + + + Tags { "RenderPipeline"="UniversalPipeline" "RenderType"="Transparent" "Queue"="Transparent" "UniversalMaterialType"="Lit" "ShaderGraphShader"="true" } + + Cull Off + HLSLINCLUDE + #pragma target 3.0 + #pragma prefer_hlslcc gles + // ensure rendering platforms toggle list is visible + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Filtering.hlsl" + ENDHLSL + + + Pass + { + Name "Sprite Lit" + Tags { "LightMode"="Universal2D" } + + Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha + ZTest LEqual + ZWrite Off + Offset 0 , 0 + ColorMask RGBA + + + HLSLPROGRAM + + #define ASE_SRP_VERSION 140011 + + + #pragma vertex vert + #pragma fragment frag + + #pragma multi_compile _ USE_SHAPE_LIGHT_TYPE_0 + #pragma multi_compile _ USE_SHAPE_LIGHT_TYPE_1 + #pragma multi_compile _ USE_SHAPE_LIGHT_TYPE_2 + #pragma multi_compile _ USE_SHAPE_LIGHT_TYPE_3 + + #define _SURFACE_TYPE_TRANSPARENT 1 + + #define SHADERPASS SHADERPASS_SPRITELIT + #define SHADERPASS_SPRITELIT + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl" + + #if USE_SHAPE_LIGHT_TYPE_0 + SHAPE_LIGHT(0) + #endif + + #if USE_SHAPE_LIGHT_TYPE_1 + SHAPE_LIGHT(1) + #endif + + #if USE_SHAPE_LIGHT_TYPE_2 + SHAPE_LIGHT(2) + #endif + + #if USE_SHAPE_LIGHT_TYPE_3 + SHAPE_LIGHT(3) + #endif + + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/CombinedShapeLightShared.hlsl" + + #pragma shader_feature_local _ISCIRCLE_ON + + + sampler2D _MainTex; + CBUFFER_START( UnityPerMaterial ) + float4 _MainTex_ST; + float4 _ImageColor; + float _EdgeValue; + float _Width; + float _Opacity; + CBUFFER_END + + + struct VertexInput + { + float4 positionOS : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 uv0 : TEXCOORD0; + float4 color : COLOR; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 positionCS : SV_POSITION; + float4 texCoord0 : TEXCOORD0; + float4 color : TEXCOORD1; + float4 screenPosition : TEXCOORD2; + float3 positionWS : TEXCOORD3; + float4 ase_color : COLOR; + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + #if ETC1_EXTERNAL_ALPHA + TEXTURE2D(_AlphaTex); SAMPLER(sampler_AlphaTex); + float _EnableAlphaTexture; + #endif + + + VertexOutput vert ( VertexInput v ) + { + VertexOutput o = (VertexOutput)0; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + o.ase_color = v.color; + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.positionOS.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + float3 vertexValue = defaultVertexValue; + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.positionOS.xyz = vertexValue; + #else + v.positionOS.xyz += vertexValue; + #endif + v.normal = v.normal; + v.tangent.xyz = v.tangent.xyz; + + VertexPositionInputs vertexInput = GetVertexPositionInputs(v.positionOS.xyz); + + o.texCoord0 = v.uv0; + o.color = v.color; + o.positionCS = vertexInput.positionCS; + o.screenPosition = vertexInput.positionNDC; + o.positionWS = vertexInput.positionWS; + return o; + } + + half4 frag ( VertexOutput IN ) : SV_Target + { + UNITY_SETUP_INSTANCE_ID( IN ); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); + float3 positionWS = IN.positionWS.xyz; + + float temp_output_79_0 = ( _EdgeValue * ( ( _Width - 1.0 ) * -2.0 ) ); + float2 temp_output_51_0 = ( IN.texCoord0.xy - float2( 0.5,0.5 ) ); + float2 break104 = temp_output_51_0; + #ifdef _ISCIRCLE_ON + float staticSwitch101 = distance( temp_output_51_0 , float2( 0,0 ) ); + #else + float staticSwitch101 = ( abs( break104.x ) + abs( break104.y ) ); + #endif + float temp_output_75_0 = ( staticSwitch101 / _EdgeValue ); + float smoothstepResult72 = smoothstep( temp_output_79_0 , temp_output_79_0 , temp_output_75_0); + float smoothstepResult69 = smoothstep( 1.0 , 1.0 , temp_output_75_0); + float2 uv_MainTex = IN.texCoord0.xy * _MainTex_ST.xy + _MainTex_ST.zw; + float4 break89 = ( tex2D( _MainTex, uv_MainTex ) * _ImageColor ); + float4 appendResult90 = (float4(break89.r , break89.g , break89.b , _Opacity)); + + float4 Color = ( saturate( ( smoothstepResult72 - smoothstepResult69 ) ) * IN.ase_color * appendResult90 ); + float4 Mask = float4(1,1,1,1); + float3 Normal = float3( 0, 0, 1 ); + + #if ETC1_EXTERNAL_ALPHA + float4 alpha = SAMPLE_TEXTURE2D(_AlphaTex, sampler_AlphaTex, IN.texCoord0.xy); + Color.a = lerp ( Color.a, alpha.r, _EnableAlphaTexture); + #endif + + Color *= IN.color; + + SurfaceData2D surfaceData; + InitializeSurfaceData(Color.rgb, Color.a, Mask, surfaceData); + InputData2D inputData; + InitializeInputData(IN.texCoord0.xy, half2(IN.screenPosition.xy / IN.screenPosition.w), inputData); + SETUP_DEBUG_DATA_2D(inputData, positionWS); + return CombinedShapeLightShared(surfaceData, inputData); + } + + ENDHLSL + } + + + Pass + { + + Name "Sprite Normal" + Tags { "LightMode"="NormalsRendering" } + + Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha + ZTest LEqual + ZWrite Off + Offset 0 , 0 + ColorMask RGBA + + + HLSLPROGRAM + + #define ASE_SRP_VERSION 140011 + + + #pragma vertex vert + #pragma fragment frag + + #define _SURFACE_TYPE_TRANSPARENT 1 + #define SHADERPASS SHADERPASS_SPRITENORMAL + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/NormalsRenderingShared.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" + + #define ASE_NEEDS_FRAG_COLOR + #pragma shader_feature_local _ISCIRCLE_ON + + + sampler2D _MainTex; + CBUFFER_START( UnityPerMaterial ) + float4 _MainTex_ST; + float4 _ImageColor; + float _EdgeValue; + float _Width; + float _Opacity; + CBUFFER_END + + + struct VertexInput + { + float4 positionOS : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 uv0 : TEXCOORD0; + float4 color : COLOR; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 positionCS : SV_POSITION; + float4 texCoord0 : TEXCOORD0; + float4 color : TEXCOORD1; + float3 normalWS : TEXCOORD2; + float4 tangentWS : TEXCOORD3; + float3 bitangentWS : TEXCOORD4; + + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + + VertexOutput vert ( VertexInput v ) + { + VertexOutput o = (VertexOutput)0; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.positionOS.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + float3 vertexValue = defaultVertexValue; + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.positionOS.xyz = vertexValue; + #else + v.positionOS.xyz += vertexValue; + #endif + v.normal = v.normal; + v.tangent.xyz = v.tangent.xyz; + + VertexPositionInputs vertexInput = GetVertexPositionInputs(v.positionOS.xyz); + + o.texCoord0 = v.uv0; + o.color = v.color; + o.positionCS = vertexInput.positionCS; + + float3 normalWS = TransformObjectToWorldNormal( v.normal ); + o.normalWS = -GetViewForwardDir(); + float4 tangentWS = float4( TransformObjectToWorldDir( v.tangent.xyz ), v.tangent.w ); + o.tangentWS = normalize( tangentWS ); + half crossSign = (tangentWS.w > 0.0 ? 1.0 : -1.0) * GetOddNegativeScale(); + o.bitangentWS = crossSign * cross( normalWS, tangentWS.xyz ) * tangentWS.w; + return o; + } + + half4 frag ( VertexOutput IN ) : SV_Target + { + UNITY_SETUP_INSTANCE_ID( IN ); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); + + float temp_output_79_0 = ( _EdgeValue * ( ( _Width - 1.0 ) * -2.0 ) ); + float2 temp_output_51_0 = ( IN.texCoord0.xy - float2( 0.5,0.5 ) ); + float2 break104 = temp_output_51_0; + #ifdef _ISCIRCLE_ON + float staticSwitch101 = distance( temp_output_51_0 , float2( 0,0 ) ); + #else + float staticSwitch101 = ( abs( break104.x ) + abs( break104.y ) ); + #endif + float temp_output_75_0 = ( staticSwitch101 / _EdgeValue ); + float smoothstepResult72 = smoothstep( temp_output_79_0 , temp_output_79_0 , temp_output_75_0); + float smoothstepResult69 = smoothstep( 1.0 , 1.0 , temp_output_75_0); + float2 uv_MainTex = IN.texCoord0.xy * _MainTex_ST.xy + _MainTex_ST.zw; + float4 break89 = ( tex2D( _MainTex, uv_MainTex ) * _ImageColor ); + float4 appendResult90 = (float4(break89.r , break89.g , break89.b , _Opacity)); + + float4 Color = ( saturate( ( smoothstepResult72 - smoothstepResult69 ) ) * IN.color * appendResult90 ); + float3 Normal = float3( 0, 0, 1 ); + + Color *= IN.color; + + return NormalsRenderingShared( Color, Normal, IN.tangentWS.xyz, IN.bitangentWS, IN.normalWS); + } + + ENDHLSL + } + + + Pass + { + + Name "Sprite Forward" + Tags { "LightMode"="UniversalForward" } + + Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha + ZTest LEqual + ZWrite Off + Offset 0 , 0 + ColorMask RGBA + + + HLSLPROGRAM + + #define ASE_SRP_VERSION 140011 + + + #pragma vertex vert + #pragma fragment frag + + + #define _SURFACE_TYPE_TRANSPARENT 1 + #define SHADERPASS SHADERPASS_SPRITEFORWARD + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/SurfaceData2D.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Debug/Debugging2D.hlsl" + + #define ASE_NEEDS_FRAG_COLOR + #pragma shader_feature_local _ISCIRCLE_ON + + + sampler2D _MainTex; + CBUFFER_START( UnityPerMaterial ) + float4 _MainTex_ST; + float4 _ImageColor; + float _EdgeValue; + float _Width; + float _Opacity; + CBUFFER_END + + + struct VertexInput + { + float4 positionOS : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 uv0 : TEXCOORD0; + float4 color : COLOR; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 positionCS : SV_POSITION; + float4 texCoord0 : TEXCOORD0; + float4 color : TEXCOORD1; + float3 positionWS : TEXCOORD2; + + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + #if ETC1_EXTERNAL_ALPHA + TEXTURE2D( _AlphaTex ); SAMPLER( sampler_AlphaTex ); + float _EnableAlphaTexture; + #endif + + + VertexOutput vert( VertexInput v ) + { + VertexOutput o = (VertexOutput)0; + UNITY_SETUP_INSTANCE_ID( v ); + UNITY_TRANSFER_INSTANCE_ID( v, o ); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( o ); + + + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.positionOS.xyz; + #else + float3 defaultVertexValue = float3( 0, 0, 0 ); + #endif + float3 vertexValue = defaultVertexValue; + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.positionOS.xyz = vertexValue; + #else + v.positionOS.xyz += vertexValue; + #endif + v.normal = v.normal; + v.tangent.xyz = v.tangent.xyz; + + VertexPositionInputs vertexInput = GetVertexPositionInputs( v.positionOS.xyz ); + + o.texCoord0 = v.uv0; + o.color = v.color; + o.positionCS = vertexInput.positionCS; + o.positionWS = vertexInput.positionWS; + + return o; + } + + half4 frag( VertexOutput IN ) : SV_Target + { + UNITY_SETUP_INSTANCE_ID( IN ); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); + + float3 positionWS = IN.positionWS.xyz; + + float temp_output_79_0 = ( _EdgeValue * ( ( _Width - 1.0 ) * -2.0 ) ); + float2 temp_output_51_0 = ( IN.texCoord0.xy - float2( 0.5,0.5 ) ); + float2 break104 = temp_output_51_0; + #ifdef _ISCIRCLE_ON + float staticSwitch101 = distance( temp_output_51_0 , float2( 0,0 ) ); + #else + float staticSwitch101 = ( abs( break104.x ) + abs( break104.y ) ); + #endif + float temp_output_75_0 = ( staticSwitch101 / _EdgeValue ); + float smoothstepResult72 = smoothstep( temp_output_79_0 , temp_output_79_0 , temp_output_75_0); + float smoothstepResult69 = smoothstep( 1.0 , 1.0 , temp_output_75_0); + float2 uv_MainTex = IN.texCoord0.xy * _MainTex_ST.xy + _MainTex_ST.zw; + float4 break89 = ( tex2D( _MainTex, uv_MainTex ) * _ImageColor ); + float4 appendResult90 = (float4(break89.r , break89.g , break89.b , _Opacity)); + + float4 Color = ( saturate( ( smoothstepResult72 - smoothstepResult69 ) ) * IN.color * appendResult90 ); + + #if defined(DEBUG_DISPLAY) + SurfaceData2D surfaceData; + InitializeSurfaceData(Color.rgb, Color.a, surfaceData); + InputData2D inputData; + InitializeInputData(positionWS.xy, half2(IN.texCoord0.xy), inputData); + half4 debugColor = 0; + + SETUP_DEBUG_DATA_2D(inputData, positionWS); + + if (CanDebugOverrideOutputColor(surfaceData, inputData, debugColor)) + { + return debugColor; + } + #endif + + #if ETC1_EXTERNAL_ALPHA + float4 alpha = SAMPLE_TEXTURE2D( _AlphaTex, sampler_AlphaTex, IN.texCoord0.xy ); + Color.a = lerp( Color.a, alpha.r, _EnableAlphaTexture ); + #endif + + Color *= IN.color; + + return Color; + } + + ENDHLSL + } + + Pass + { + + Name "SceneSelectionPass" + Tags { "LightMode"="SceneSelectionPass" } + + Cull Off + + HLSLPROGRAM + + #define ASE_SRP_VERSION 140011 + + + #pragma vertex vert + #pragma fragment frag + + #define _SURFACE_TYPE_TRANSPARENT 1 + #define ATTRIBUTES_NEED_NORMAL + #define ATTRIBUTES_NEED_TANGENT + #define FEATURES_GRAPH_VERTEX + #define SHADERPASS SHADERPASS_DEPTHONLY + #define SCENESELECTIONPASS 1 + + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" + + #pragma shader_feature_local _ISCIRCLE_ON + + + sampler2D _MainTex; + CBUFFER_START( UnityPerMaterial ) + float4 _MainTex_ST; + float4 _ImageColor; + float _EdgeValue; + float _Width; + float _Opacity; + CBUFFER_END + + + struct VertexInput + { + float3 positionOS : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 ase_texcoord : TEXCOORD0; + float4 ase_color : COLOR; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 positionCS : SV_POSITION; + float4 ase_texcoord : TEXCOORD0; + float4 ase_color : COLOR; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + + int _ObjectId; + int _PassValue; + + + VertexOutput vert(VertexInput v ) + { + VertexOutput o = (VertexOutput)0; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( o ); + + o.ase_texcoord.xy = v.ase_texcoord.xy; + o.ase_color = v.ase_color; + + //setting value to unused interpolator channels and avoid initialization warnings + o.ase_texcoord.zw = 0; + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.positionOS.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + float3 vertexValue = defaultVertexValue; + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.positionOS.xyz = vertexValue; + #else + v.positionOS.xyz += vertexValue; + #endif + + VertexPositionInputs vertexInput = GetVertexPositionInputs(v.positionOS.xyz); + float3 positionWS = TransformObjectToWorld(v.positionOS); + o.positionCS = TransformWorldToHClip(positionWS); + + return o; + } + + half4 frag(VertexOutput IN ) : SV_TARGET + { + float temp_output_79_0 = ( _EdgeValue * ( ( _Width - 1.0 ) * -2.0 ) ); + float2 temp_output_51_0 = ( IN.ase_texcoord.xy - float2( 0.5,0.5 ) ); + float2 break104 = temp_output_51_0; + #ifdef _ISCIRCLE_ON + float staticSwitch101 = distance( temp_output_51_0 , float2( 0,0 ) ); + #else + float staticSwitch101 = ( abs( break104.x ) + abs( break104.y ) ); + #endif + float temp_output_75_0 = ( staticSwitch101 / _EdgeValue ); + float smoothstepResult72 = smoothstep( temp_output_79_0 , temp_output_79_0 , temp_output_75_0); + float smoothstepResult69 = smoothstep( 1.0 , 1.0 , temp_output_75_0); + float2 uv_MainTex = IN.ase_texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw; + float4 break89 = ( tex2D( _MainTex, uv_MainTex ) * _ImageColor ); + float4 appendResult90 = (float4(break89.r , break89.g , break89.b , _Opacity)); + + float4 Color = ( saturate( ( smoothstepResult72 - smoothstepResult69 ) ) * IN.ase_color * appendResult90 ); + + half4 outColor = half4(_ObjectId, _PassValue, 1.0, 1.0); + return outColor; + } + + ENDHLSL + } + + + Pass + { + + Name "ScenePickingPass" + Tags { "LightMode"="Picking" } + + Cull Off + + HLSLPROGRAM + + #define ASE_SRP_VERSION 140011 + + + #pragma vertex vert + #pragma fragment frag + + #define _SURFACE_TYPE_TRANSPARENT 1 + #define ATTRIBUTES_NEED_NORMAL + #define ATTRIBUTES_NEED_TANGENT + #define FEATURES_GRAPH_VERTEX + #define SHADERPASS SHADERPASS_DEPTHONLY + #define SCENEPICKINGPASS 1 + + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" + + #pragma shader_feature_local _ISCIRCLE_ON + + + sampler2D _MainTex; + CBUFFER_START( UnityPerMaterial ) + float4 _MainTex_ST; + float4 _ImageColor; + float _EdgeValue; + float _Width; + float _Opacity; + CBUFFER_END + + + struct VertexInput + { + float3 positionOS : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 ase_texcoord : TEXCOORD0; + float4 ase_color : COLOR; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 positionCS : SV_POSITION; + float4 ase_texcoord : TEXCOORD0; + float4 ase_color : COLOR; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + float4 _SelectionID; + + + VertexOutput vert(VertexInput v ) + { + VertexOutput o = (VertexOutput)0; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( o ); + + o.ase_texcoord.xy = v.ase_texcoord.xy; + o.ase_color = v.ase_color; + + //setting value to unused interpolator channels and avoid initialization warnings + o.ase_texcoord.zw = 0; + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.positionOS.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + float3 vertexValue = defaultVertexValue; + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.positionOS.xyz = vertexValue; + #else + v.positionOS.xyz += vertexValue; + #endif + + VertexPositionInputs vertexInput = GetVertexPositionInputs(v.positionOS.xyz); + float3 positionWS = TransformObjectToWorld(v.positionOS); + o.positionCS = TransformWorldToHClip(positionWS); + + return o; + } + + half4 frag(VertexOutput IN ) : SV_TARGET + { + float temp_output_79_0 = ( _EdgeValue * ( ( _Width - 1.0 ) * -2.0 ) ); + float2 temp_output_51_0 = ( IN.ase_texcoord.xy - float2( 0.5,0.5 ) ); + float2 break104 = temp_output_51_0; + #ifdef _ISCIRCLE_ON + float staticSwitch101 = distance( temp_output_51_0 , float2( 0,0 ) ); + #else + float staticSwitch101 = ( abs( break104.x ) + abs( break104.y ) ); + #endif + float temp_output_75_0 = ( staticSwitch101 / _EdgeValue ); + float smoothstepResult72 = smoothstep( temp_output_79_0 , temp_output_79_0 , temp_output_75_0); + float smoothstepResult69 = smoothstep( 1.0 , 1.0 , temp_output_75_0); + float2 uv_MainTex = IN.ase_texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw; + float4 break89 = ( tex2D( _MainTex, uv_MainTex ) * _ImageColor ); + float4 appendResult90 = (float4(break89.r , break89.g , break89.b , _Opacity)); + + float4 Color = ( saturate( ( smoothstepResult72 - smoothstepResult69 ) ) * IN.ase_color * appendResult90 ); + half4 outColor = _SelectionID; + return outColor; + } + + ENDHLSL + } + + } + CustomEditor "ASEMaterialInspector" + Fallback "Hidden/InternalErrorShader" + +} +/*ASEBEGIN +Version=19501 +Node;AmplifyShaderEditor.Vector2Node;50;-2672,656;Inherit;False;Constant;_Vector2;Vector 0;0;0;Create;True;0;0;0;False;0;False;0.5,0.5;0,0;0;3;FLOAT2;0;FLOAT;1;FLOAT;2 +Node;AmplifyShaderEditor.TexCoordVertexDataNode;52;-2688,432;Inherit;True;0;2;0;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;51;-2432,544;Inherit;True;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.BreakToComponentsNode;104;-2128,384;Inherit;True;FLOAT2;1;0;FLOAT2;0,0;False;16;FLOAT;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT;5;FLOAT;6;FLOAT;7;FLOAT;8;FLOAT;9;FLOAT;10;FLOAT;11;FLOAT;12;FLOAT;13;FLOAT;14;FLOAT;15 +Node;AmplifyShaderEditor.AbsOpNode;60;-1824,384;Inherit;False;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.AbsOpNode;67;-1824,480;Inherit;False;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;87;-1568,1008;Inherit;False;Property;_Width;Width;2;0;Create;True;0;0;0;False;0;False;0.5;1;0;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.DistanceOpNode;98;-1872,688;Inherit;True;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleAddOpNode;61;-1632,352;Inherit;True;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;107;-1248,944;Inherit;False;2;0;FLOAT;0;False;1;FLOAT;1;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;106;-1072,944;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;-2;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;68;-1200,784;Inherit;False;Property;_EdgeValue;EdgeValue;0;0;Create;True;0;0;0;False;0;False;0.5;0;0;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.StaticSwitch;101;-1328,496;Inherit;False;Property;_IsCircle;IsCircle;4;0;Create;True;0;0;0;False;0;False;0;0;1;True;;Toggle;2;Key0;Key1;Create;True;True;All;9;1;FLOAT;0;False;0;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;4;FLOAT;0;False;5;FLOAT;0;False;6;FLOAT;0;False;7;FLOAT;0;False;8;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleDivideOpNode;75;-880,640;Inherit;False;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;79;-896,880;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0.95;False;1;FLOAT;0 +Node;AmplifyShaderEditor.ColorNode;86;-816,1296;Inherit;False;Property;_ImageColor;ImageColor;1;1;[HDR];Create;True;0;0;0;False;0;False;0,0,0,0;1,1,1,1;True;True;0;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.SamplerNode;110;-880,1056;Inherit;True;Property;_MainTex;MainTex;5;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.SmoothstepOpNode;72;-624,752;Inherit;True;3;0;FLOAT;0;False;1;FLOAT;0.44;False;2;FLOAT;1;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SmoothstepOpNode;69;-624,512;Inherit;True;3;0;FLOAT;0;False;1;FLOAT;1;False;2;FLOAT;1;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;111;-464,1040;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.BreakToComponentsNode;89;-144,976;Inherit;False;COLOR;1;0;COLOR;0,0,0,0;False;16;FLOAT;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT;5;FLOAT;6;FLOAT;7;FLOAT;8;FLOAT;9;FLOAT;10;FLOAT;11;FLOAT;12;FLOAT;13;FLOAT;14;FLOAT;15 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;73;-304,576;Inherit;True;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;88;-224,1280;Inherit;False;Property;_Opacity;Opacity;3;0;Create;True;0;0;0;False;0;False;1;1;0;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.DynamicAppendNode;90;0,976;Inherit;False;FLOAT4;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT4;0 +Node;AmplifyShaderEditor.VertexColorNode;81;-384,800;Inherit;False;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.SaturateNode;84;-64,608;Inherit;False;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;82;224,704;Inherit;False;3;3;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;2;FLOAT4;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;93;480,640;Float;False;True;-1;2;ASEMaterialInspector;0;16;Chapter0/Ripple;199187dac283dbe4a8cb1ea611d70c58;True;Sprite Lit;0;0;Sprite Lit;6;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;2;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;5;RenderPipeline=UniversalPipeline;RenderType=Transparent=RenderType;Queue=Transparent=Queue=0;UniversalMaterialType=Lit;ShaderGraphShader=true;True;2;True;12;all;0;False;True;2;5;False;;10;False;;3;1;False;;10;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;True;True;True;True;0;False;;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;2;False;;True;3;False;;True;True;0;False;;0;False;;True;1;LightMode=Universal2D;False;False;0;Hidden/InternalErrorShader;0;0;Standard;3;Vertex Position;1;0;Debug Display;0;0;External Alpha;0;0;0;5;True;True;True;True;True;False;;False;0 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;94;480,640;Float;False;False;-1;2;ASEMaterialInspector;0;1;New Amplify Shader;199187dac283dbe4a8cb1ea611d70c58;True;Sprite Normal;0;1;Sprite Normal;0;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;2;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;5;RenderPipeline=UniversalPipeline;RenderType=Transparent=RenderType;Queue=Transparent=Queue=0;UniversalMaterialType=Lit;ShaderGraphShader=true;True;0;True;12;all;0;False;True;2;5;False;;10;False;;3;1;False;;10;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;True;True;True;True;0;False;;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;2;False;;True;3;False;;True;True;0;False;;0;False;;True;1;LightMode=NormalsRendering;False;False;0;Hidden/InternalErrorShader;0;0;Standard;0;False;0 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;95;480,640;Float;False;False;-1;2;ASEMaterialInspector;0;1;New Amplify Shader;199187dac283dbe4a8cb1ea611d70c58;True;Sprite Forward;0;2;Sprite Forward;0;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;2;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;5;RenderPipeline=UniversalPipeline;RenderType=Transparent=RenderType;Queue=Transparent=Queue=0;UniversalMaterialType=Lit;ShaderGraphShader=true;True;0;True;12;all;0;False;True;2;5;False;;10;False;;3;1;False;;10;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;True;True;True;True;0;False;;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;2;False;;True;3;False;;True;True;0;False;;0;False;;True;1;LightMode=UniversalForward;False;False;0;Hidden/InternalErrorShader;0;0;Standard;0;False;0 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;96;480,640;Float;False;False;-1;2;ASEMaterialInspector;0;1;New Amplify Shader;199187dac283dbe4a8cb1ea611d70c58;True;SceneSelectionPass;0;3;SceneSelectionPass;0;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;2;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;5;RenderPipeline=UniversalPipeline;RenderType=Transparent=RenderType;Queue=Transparent=Queue=0;UniversalMaterialType=Lit;ShaderGraphShader=true;True;0;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;2;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;LightMode=SceneSelectionPass;False;False;0;Hidden/InternalErrorShader;0;0;Standard;0;False;0 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;97;480,640;Float;False;False;-1;2;ASEMaterialInspector;0;1;New Amplify Shader;199187dac283dbe4a8cb1ea611d70c58;True;ScenePickingPass;0;4;ScenePickingPass;0;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;2;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;5;RenderPipeline=UniversalPipeline;RenderType=Transparent=RenderType;Queue=Transparent=Queue=0;UniversalMaterialType=Lit;ShaderGraphShader=true;True;0;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;2;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;LightMode=Picking;False;False;0;Hidden/InternalErrorShader;0;0;Standard;0;False;0 +WireConnection;51;0;52;0 +WireConnection;51;1;50;0 +WireConnection;104;0;51;0 +WireConnection;60;0;104;0 +WireConnection;67;0;104;1 +WireConnection;98;0;51;0 +WireConnection;61;0;60;0 +WireConnection;61;1;67;0 +WireConnection;107;0;87;0 +WireConnection;106;0;107;0 +WireConnection;101;1;61;0 +WireConnection;101;0;98;0 +WireConnection;75;0;101;0 +WireConnection;75;1;68;0 +WireConnection;79;0;68;0 +WireConnection;79;1;106;0 +WireConnection;72;0;75;0 +WireConnection;72;1;79;0 +WireConnection;72;2;79;0 +WireConnection;69;0;75;0 +WireConnection;111;0;110;0 +WireConnection;111;1;86;0 +WireConnection;89;0;111;0 +WireConnection;73;0;72;0 +WireConnection;73;1;69;0 +WireConnection;90;0;89;0 +WireConnection;90;1;89;1 +WireConnection;90;2;89;2 +WireConnection;90;3;88;0 +WireConnection;84;0;73;0 +WireConnection;82;0;84;0 +WireConnection;82;1;81;0 +WireConnection;82;2;90;0 +WireConnection;93;1;82;0 +ASEEND*/ +//CHKSM=DED59771ADBAAE6060AB05C45A9554E6046D89B9 \ No newline at end of file diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Shders/Ripple.shader.meta b/Assets/ThemeBundles/DepartureToMultiverse/Shders/Ripple.shader.meta new file mode 100644 index 00000000..e636c59a --- /dev/null +++ b/Assets/ThemeBundles/DepartureToMultiverse/Shders/Ripple.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d54759aa63d2527499f0c933fdf37b78 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Textures/397ca6281acd097470b1742265f18dd1.png b/Assets/ThemeBundles/DepartureToMultiverse/Textures/397ca6281acd097470b1742265f18dd1.png new file mode 100644 index 00000000..aa5965b0 Binary files /dev/null and b/Assets/ThemeBundles/DepartureToMultiverse/Textures/397ca6281acd097470b1742265f18dd1.png differ diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Textures/397ca6281acd097470b1742265f18dd1.png.meta b/Assets/ThemeBundles/DepartureToMultiverse/Textures/397ca6281acd097470b1742265f18dd1.png.meta new file mode 100644 index 00000000..bb77766b --- /dev/null +++ b/Assets/ThemeBundles/DepartureToMultiverse/Textures/397ca6281acd097470b1742265f18dd1.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 307f43f0816d99a49acef69a5b12617d +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + 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: iPhone + 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: Android + 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/ThemeBundles/DepartureToMultiverse/Textures/Horizontal_013_c 1(1).jpg b/Assets/ThemeBundles/DepartureToMultiverse/Textures/Horizontal_013_c 1(1).jpg new file mode 100644 index 00000000..8e66d4f5 Binary files /dev/null and b/Assets/ThemeBundles/DepartureToMultiverse/Textures/Horizontal_013_c 1(1).jpg differ diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Textures/Horizontal_013_c 1(1).jpg.meta b/Assets/ThemeBundles/DepartureToMultiverse/Textures/Horizontal_013_c 1(1).jpg.meta new file mode 100644 index 00000000..6c428de7 --- /dev/null +++ b/Assets/ThemeBundles/DepartureToMultiverse/Textures/Horizontal_013_c 1(1).jpg.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 1b188f566ed9d72469ee7616c62de84b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + 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: iPhone + 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: Android + 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/ThemeBundles/DepartureToMultiverse/Textures/Horizontal_013_c 1.tga b/Assets/ThemeBundles/DepartureToMultiverse/Textures/Horizontal_013_c 1.tga new file mode 100644 index 00000000..e62e3fd7 Binary files /dev/null and b/Assets/ThemeBundles/DepartureToMultiverse/Textures/Horizontal_013_c 1.tga differ diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Textures/Horizontal_013_c 1.tga.meta b/Assets/ThemeBundles/DepartureToMultiverse/Textures/Horizontal_013_c 1.tga.meta new file mode 100644 index 00000000..037483c7 --- /dev/null +++ b/Assets/ThemeBundles/DepartureToMultiverse/Textures/Horizontal_013_c 1.tga.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 8fc19f88577f644479f21ad83860d448 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + 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: iPhone + 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: Android + 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/ThemeBundles/DepartureToMultiverse/Textures/Square.png b/Assets/ThemeBundles/DepartureToMultiverse/Textures/Square.png new file mode 100644 index 00000000..3410c682 Binary files /dev/null and b/Assets/ThemeBundles/DepartureToMultiverse/Textures/Square.png differ diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Textures/Square.png.meta b/Assets/ThemeBundles/DepartureToMultiverse/Textures/Square.png.meta new file mode 100644 index 00000000..e4cd0116 --- /dev/null +++ b/Assets/ThemeBundles/DepartureToMultiverse/Textures/Square.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: f5775a9d8f75ec744939ba3702a7fe05 +TextureImporter: + internalIDToNameTable: + - first: + 213: 7482667652216324306 + second: Square + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 256 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: 0 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + 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: iPhone + 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: Android + 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: + - serializedVersion: 2 + name: Square + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 2d009a6b596c7d760800000000000000 + internalID: 7482667652216324306 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + physicsShape: + - - {x: -128, y: 128} + - {x: -128, y: -128} + - {x: 128, y: -128} + - {x: 128, y: 128} + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: + Square: 7482667652216324306 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Textures/laserbeam_modular 1.png b/Assets/ThemeBundles/DepartureToMultiverse/Textures/laserbeam_modular 1.png new file mode 100644 index 00000000..29129de1 Binary files /dev/null and b/Assets/ThemeBundles/DepartureToMultiverse/Textures/laserbeam_modular 1.png differ diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Textures/laserbeam_modular 1.png.meta b/Assets/ThemeBundles/DepartureToMultiverse/Textures/laserbeam_modular 1.png.meta new file mode 100644 index 00000000..6a477cc6 --- /dev/null +++ b/Assets/ThemeBundles/DepartureToMultiverse/Textures/laserbeam_modular 1.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 28a32e0ab87cfc54990d400eab7b5a31 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + 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: iPhone + 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: Android + 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/ThemeBundles/DepartureToMultiverse/Textures/laserbeam_modular.png b/Assets/ThemeBundles/DepartureToMultiverse/Textures/laserbeam_modular.png new file mode 100644 index 00000000..29129de1 Binary files /dev/null and b/Assets/ThemeBundles/DepartureToMultiverse/Textures/laserbeam_modular.png differ diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Textures/laserbeam_modular.png.meta b/Assets/ThemeBundles/DepartureToMultiverse/Textures/laserbeam_modular.png.meta new file mode 100644 index 00000000..fd146528 --- /dev/null +++ b/Assets/ThemeBundles/DepartureToMultiverse/Textures/laserbeam_modular.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 59b0e215a2f6c6e4e8e05deb25f73f9a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 2 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 1 + spriteTessellationDetail: -1 + textureType: 8 + 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: iPhone + 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: Android + 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: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBPostProcessing/3DPostionShake.asset b/Packages/NBPostProcessing/3DPostionShake.asset new file mode 100644 index 00000000..af249979 --- /dev/null +++ b/Packages/NBPostProcessing/3DPostionShake.asset @@ -0,0 +1,100 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b7f59e54f2bfd184b9dd451a678d089b, type: 3} + m_Name: 3DPostionShake + m_EditorClassIdentifier: + PositionNoise: + - X: + Frequency: 3.2 + Amplitude: 0.011 + Constant: 1 + Y: + Frequency: 1.9 + Amplitude: 0.059 + Constant: 1 + Z: + Frequency: 3.33 + Amplitude: 0.021 + Constant: 1 + - X: + Frequency: 7.7 + Amplitude: 0.009 + Constant: 1 + Y: + Frequency: 9.1 + Amplitude: 0.04 + Constant: 0 + Z: + Frequency: 9.22 + Amplitude: 0.009 + Constant: 1 + - X: + Frequency: 51.51 + Amplitude: 0.002 + Constant: 1 + Y: + Frequency: 55.54 + Amplitude: 0.05 + Constant: 1 + Z: + Frequency: 58.55 + Amplitude: 0.017 + Constant: 1 + OrientationNoise: + - X: + Frequency: 6.17 + Amplitude: 1 + Constant: 0 + Y: + Frequency: 33.6 + Amplitude: 0.4 + Constant: 1 + Z: + Frequency: 50 + Amplitude: 0.29 + Constant: 1 + - X: + Frequency: 50 + Amplitude: 0.78 + Constant: 1 + Y: + Frequency: 1.18 + Amplitude: 0.01 + Constant: 0 + Z: + Frequency: 3.93 + Amplitude: 0.8 + Constant: 0 + - X: + Frequency: 0 + Amplitude: 0 + Constant: 0 + Y: + Frequency: 2.52 + Amplitude: 1.88 + Constant: 0 + Z: + Frequency: 4.75 + Amplitude: 1.1 + Constant: 0 + - X: + Frequency: 0 + Amplitude: 0 + Constant: 0 + Y: + Frequency: 0 + Amplitude: 0 + Constant: 0 + Z: + Frequency: 0 + Amplitude: 0 + Constant: 0 diff --git a/Packages/NBPostProcessing/3DPostionShake.asset.meta b/Packages/NBPostProcessing/3DPostionShake.asset.meta new file mode 100644 index 00000000..02f2c88c --- /dev/null +++ b/Packages/NBPostProcessing/3DPostionShake.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c3a1931bdb3088e4ebf4755df90c90e9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBPostProcessing/Editor.meta b/Packages/NBPostProcessing/Editor.meta new file mode 100644 index 00000000..7eb97032 --- /dev/null +++ b/Packages/NBPostProcessing/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0b3052f0c1288a045a0be3d63f109623 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBPostProcessing/Editor/PostProcessingControllerGUI.cs b/Packages/NBPostProcessing/Editor/PostProcessingControllerGUI.cs new file mode 100644 index 00000000..4a20af37 --- /dev/null +++ b/Packages/NBPostProcessing/Editor/PostProcessingControllerGUI.cs @@ -0,0 +1,356 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using UnityEditor.AnimatedValues; +using System.Reflection; +#if CINIMACHINE_3_0 +using Unity.Cinemachine; +#endif + +using System; +// using Unity.Properties; + +[CustomEditor(typeof(PostProcessingController))] +public class PostProcessingControllerGUI : Editor +{ + private SerializedProperty _managerProperty; + private SerializedProperty _indexProperty; + + private Action delayExcuteReflect = () => { }; + + public override void OnInspectorGUI() + { + PostProcessingController ppController = (PostProcessingController)target; + serializedObject.Update(); + + _managerProperty = serializedObject.FindProperty("_manager"); + _indexProperty = serializedObject.FindProperty("_index"); + EditorGUI.BeginDisabledGroup(true); + EditorGUILayout.PropertyField(_managerProperty); + EditorGUI.EndDisabledGroup(); + + EditorGUI.BeginChangeCheck(); + // ppController.customScreenCenterPos = EditorGUILayout.Vector2Field("自定义屏幕中心", ppController.customScreenCenterPos); + SerializedProperty customScreenCenterPosProp = serializedObject.FindProperty("customScreenCenterPos"); + EditorGUILayout.PropertyField(customScreenCenterPosProp,new GUIContent("自定义屏幕中心")); + + if (EditorGUI.EndChangeCheck()) + { + ReflectMethod("SetScreenCenterPos", ppController); + } + + SerializedProperty caToggleProp = serializedObject.FindProperty("chromaticAberrationToggle"); + DrawToggleFoldOut(ppController.AnimBools[0], "色散", caToggleProp, + drawEndChangeCheck: isChangeToggle => { ReflectMethod("InitAllSettings", ppController); } + , drawBlock: isToggle => + { + EditorGUI.BeginChangeCheck(); + // ppController.caFromDistort = EditorGUILayout.Toggle("色散UV跟随后处理扭曲", ppController.caFromDistort); + SerializedProperty caFromDistortProp = serializedObject.FindProperty("caFromDistort"); + EditorGUILayout.PropertyField(caFromDistortProp, new GUIContent("色散UV跟随后处理扭曲")); + if (EditorGUI.EndChangeCheck()) + { + ReflectMethod("SetUVFromDistort", ppController); + } + + // ppController.chromaticAberrationIntensity = EditorGUILayout.FloatField("色散强度", ppController.chromaticAberrationIntensity); + SerializedProperty caIntensityProps = serializedObject.FindProperty("chromaticAberrationIntensity"); + EditorGUILayout.PropertyField(caIntensityProps, new GUIContent("色散强度")); + + if (!ppController.caFromDistort) + { + // ppController.chromaticAberrationPos = EditorGUILayout.FloatField("色散位置", ppController.chromaticAberrationPos); + SerializedProperty caPosProp = serializedObject.FindProperty("chromaticAberrationPos"); + EditorGUILayout.PropertyField(caPosProp, new GUIContent("色散位置")); + + // ppController.chromaticAberrationRange = EditorGUILayout.FloatField("色散过渡范围", ppController.chromaticAberrationRange); + SerializedProperty caRangeProp = serializedObject.FindProperty("chromaticAberrationRange"); + EditorGUILayout.PropertyField(caRangeProp, new GUIContent("色散过渡范围")); + } + }); + + SerializedProperty distortSpeedToggleProp = serializedObject.FindProperty("distortSpeedToggle"); + DrawToggleFoldOut(ppController.AnimBools[1], "扭曲", distortSpeedToggleProp, drawEndChangeCheck: + isChangeToggle => { ReflectMethod("InitAllSettings", ppController); }, + drawBlock: isToggle => + { + EditorGUI.BeginChangeCheck(); + // ppController.distortScreenUVMode = EditorGUILayout.Toggle("后处理走常规屏幕坐标", ppController.distortScreenUVMode); + SerializedProperty distortScreenUVModeProp = serializedObject.FindProperty("distortScreenUVMode"); + EditorGUILayout.PropertyField(distortScreenUVModeProp,new GUIContent("后处理走常规屏幕坐标")); + if (EditorGUI.EndChangeCheck()) + { + ReflectMethod("SetUVFromDistort", ppController); + } + + EditorGUI.BeginChangeCheck(); + // ppController.distortSpeedTexture = (Texture2D)EditorGUILayout.ObjectField("后处理扭曲贴图", ppController.distortSpeedTexture, typeof(Texture2D)); + SerializedProperty distortSpeedTextureProp = serializedObject.FindProperty("distortSpeedTexture"); + EditorGUILayout.PropertyField(distortSpeedTextureProp, new GUIContent("后处理扭曲贴图")); + if (EditorGUI.EndChangeCheck()) + { + ReflectMethod("InitAllSettings", ppController); + } + + if (ppController.distortScreenUVMode) + { + EditorGUI.BeginChangeCheck(); + // ppController.distortTextureMidValue = EditorGUILayout.FloatField("扭曲贴图中间值", ppController.distortTextureMidValue); + SerializedProperty distortTextureMidValueProp = serializedObject.FindProperty("distortTextureMidValue"); + EditorGUILayout.PropertyField(distortTextureMidValueProp, new GUIContent("扭曲贴图中间值")); + if (EditorGUI.EndChangeCheck()) + { + ReflectMethod("SetTexture", ppController); + } + } + + + // ppController.distortSpeedTexSt = EditorGUILayout.Vector4Field("扭曲贴图ST", ppController.distortSpeedTexSt); + SerializedProperty distortSpeedTexStProp = serializedObject.FindProperty("distortSpeedTexSt"); + EditorGUILayout.PropertyField(distortSpeedTexStProp, new GUIContent("扭曲贴图缩放平移")); + // ppController.distortSpeedIntensity = EditorGUILayout.FloatField("扭曲强度", ppController.distortSpeedIntensity); + SerializedProperty distortSpeedIntensityProp = serializedObject.FindProperty("distortSpeedIntensity"); + EditorGUILayout.PropertyField(distortSpeedIntensityProp, new GUIContent("扭曲强度")); + + if (!ppController.distortScreenUVMode) + { + // ppController.distortSpeedPosition = EditorGUILayout.FloatField("扭曲位置", ppController.distortSpeedPosition); + SerializedProperty distortSpeedPositionProp = serializedObject.FindProperty("distortSpeedPosition"); + EditorGUILayout.PropertyField(distortSpeedPositionProp, new GUIContent("扭曲位置")); + // ppController.distortSpeedRange = EditorGUILayout.FloatField("扭曲过渡范围", ppController.distortSpeedRange); + SerializedProperty distortSpeedRangeProp = serializedObject.FindProperty("distortSpeedRange"); + EditorGUILayout.PropertyField(distortSpeedRangeProp, new GUIContent("扭曲过渡范围")); + } + + // ppController.distortSpeedMoveSpeedX = EditorGUILayout.FloatField("扭曲纹理流动X", ppController.distortSpeedMoveSpeedX); + SerializedProperty distortSpeedMoveSpeedXProp = serializedObject.FindProperty("distortSpeedMoveSpeedX"); + EditorGUILayout.PropertyField(distortSpeedMoveSpeedXProp, new GUIContent("扭曲纹理流动X")); + // ppController.distortSpeedMoveSpeed = EditorGUILayout.FloatField("扭曲纹理流动Y", ppController.distortSpeedMoveSpeed); + SerializedProperty distortSpeedMoveSpeed = serializedObject.FindProperty("distortSpeedMoveSpeed"); + EditorGUILayout.PropertyField(distortSpeedMoveSpeed , new GUIContent("扭曲纹理流动Y")); + }); + + + SerializedProperty radialBlurToggleProp = serializedObject.FindProperty("radialBlurToggle"); + DrawToggleFoldOut(ppController.AnimBools[2], "径向模糊", radialBlurToggleProp, drawEndChangeCheck: + isChangeToggle => { ReflectMethod("InitAllSettings", ppController); }, + drawBlock: isToggle => + { + EditorGUI.BeginChangeCheck(); + // ppController.radialBlurFromDistort = EditorGUILayout.Toggle("径向模糊跟随后处理扭曲", ppController.radialBlurFromDistort); + SerializedProperty radialBlurFromDistortProp = serializedObject.FindProperty("radialBlurFromDistort"); + EditorGUILayout.PropertyField(radialBlurFromDistortProp, new GUIContent("径向模糊跟随后处理扭曲")); + if (EditorGUI.EndChangeCheck()) + { + ReflectMethod("SetUVFromDistort", ppController); + } + + // ppController.radialBlurSampleCount = EditorGUILayout.IntSlider("采样次数", ppController.radialBlurSampleCount, 1, 12); + SerializedProperty radialBlurSampleCountProp = serializedObject.FindProperty("radialBlurSampleCount"); + EditorGUILayout.PropertyField(radialBlurSampleCountProp, new GUIContent("采样次数")); + // ppController.radialBlurIntensity = EditorGUILayout.FloatField("强度", ppController.radialBlurIntensity); + SerializedProperty radialBlurIntensityProp = serializedObject.FindProperty("radialBlurIntensity"); + EditorGUILayout.PropertyField(radialBlurIntensityProp, new GUIContent("强度")); + if (!ppController.radialBlurFromDistort) + { + // ppController.radialBlurPos = EditorGUILayout.FloatField("位置", ppController.radialBlurPos);\ + SerializedProperty radialBlurPosProp = serializedObject.FindProperty("radialBlurPos"); + EditorGUILayout.PropertyField(radialBlurPosProp, new GUIContent("位置")); + // ppController.radialBlurRange = EditorGUILayout.FloatField("过渡范围", ppController.radialBlurRange); + SerializedProperty radialBlurRangeProp = serializedObject.FindProperty("radialBlurRange"); + EditorGUILayout.PropertyField(radialBlurRangeProp, new GUIContent("过渡范围")); + } + }); + + #if CINIMACHINE_3_0 + SerializedProperty cameraShakeToggleProp = serializedObject.FindProperty("cameraShakeToggle"); + DrawToggleFoldOut(ppController.AnimBools[3], "震屏", cameraShakeToggleProp, drawEndChangeCheck: + isChangeToggle => + { + ReflectMethod("InitAllSettings",ppController); + }, + drawBlock: isToggle => + { + + EditorGUI.BeginChangeCheck(); + // ppController.cinemachineCamera = (CinemachineCamera)EditorGUILayout.ObjectField("绑定Cinemachine相机", ppController.cinemachineCamera, typeof(CinemachineCamera)); + SerializedProperty cinemachineCameraProp = serializedObject.FindProperty("cinemachineCamera"); + EditorGUILayout.PropertyField(cinemachineCameraProp, new GUIContent("绑定Cinemachine相机")); + if (EditorGUI.EndChangeCheck()) + { + // ReflectMethod("InitCinemachineCamera",ppController); + ppController.InitCinemachineCamera(); + } + + // ppController.cameraShakeIntensity = EditorGUILayout.FloatField("相机震动强度", ppController.cameraShakeIntensity); + SerializedProperty cameraShakeIntensityProp = serializedObject.FindProperty("cameraShakeIntensity"); + EditorGUILayout.PropertyField(cameraShakeIntensityProp, new GUIContent("相机震动强度")); + }); + #endif + + SerializedProperty overlayTextureToggleProp = serializedObject.FindProperty("overlayTextureToggle"); + DrawToggleFoldOut(ppController.AnimBools[4], "肌理叠加图", overlayTextureToggleProp, drawEndChangeCheck:isChangeToggle => + { + ReflectMethod("InitAllSettings", ppController); + }, + drawBlock: isToggle => + { + EditorGUI.BeginChangeCheck(); + // ppController.overlayTexturePolarCoordMode = EditorGUILayout.Toggle("肌理图极坐标模式", ppController.overlayTexturePolarCoordMode); + SerializedProperty overlayTexturePolarCoordModeProp = serializedObject.FindProperty("overlayTexturePolarCoordMode"); + EditorGUILayout.PropertyField(overlayTexturePolarCoordModeProp, new GUIContent("肌理图极坐标模式")); + // ppController.overlayTexture = (Texture2D)EditorGUILayout.ObjectField("肌理图", ppController.overlayTexture, typeof(Texture2D)); + SerializedProperty overlayTextureProp = serializedObject.FindProperty("overlayTexture"); + EditorGUILayout.PropertyField(overlayTextureProp, new GUIContent("肌理图")); + if (EditorGUI.EndChangeCheck()) + { + ReflectMethod("SetTexture",ppController); + } + + // ppController.overlayTextureSt = EditorGUILayout.Vector4Field("肌理图缩放平移", ppController.overlayTextureSt); + SerializedProperty overlayTextureStProp = serializedObject.FindProperty("overlayTextureSt"); + EditorGUILayout.PropertyField(overlayTextureStProp, new GUIContent("肌理图缩放平移")); + // ppController.overlayTextureAnim = EditorGUILayout.Vector2Field("肌理图偏移动画", ppController.overlayTextureAnim); + SerializedProperty overlayTextureAnimProp = serializedObject.FindProperty("overlayTextureAnim"); + EditorGUILayout.PropertyField(overlayTextureAnimProp, new GUIContent("肌理图偏移动画")); + // ppController.overlayTextureIntensity = EditorGUILayout.FloatField("肌理图强度", ppController.overlayTextureIntensity); + SerializedProperty overlayTextureIntensityProp = serializedObject.FindProperty("overlayTextureIntensity"); + EditorGUILayout.PropertyField(overlayTextureIntensityProp, new GUIContent("肌理图强度")); + + EditorGUI.BeginChangeCheck(); + // ppController.overlayMaskTexture = (Texture2D)EditorGUILayout.ObjectField("肌理蒙版图", ppController.overlayMaskTexture, typeof(Texture2D)); + SerializedProperty overlayMaskTextureProp = serializedObject.FindProperty("overlayMaskTexture"); + EditorGUILayout.PropertyField(overlayMaskTextureProp, new GUIContent("肌理蒙版图")); + if (EditorGUI.EndChangeCheck()) + { + ReflectMethod("SetTexture",ppController); + } + + // ppController.overlayMaskTextureSt = EditorGUILayout.Vector4Field("肌理图蒙版缩放平移", ppController.overlayMaskTextureSt); + SerializedProperty overlayMaskTextureStProp = serializedObject.FindProperty("overlayMaskTextureSt"); + EditorGUILayout.PropertyField(overlayMaskTextureStProp, new GUIContent("肌理图蒙版缩放平移")); + + }); + + SerializedProperty flashToggleProp = serializedObject.FindProperty("flashToggle"); + DrawToggleFoldOut(ppController.AnimBools[5], "反闪", flashToggleProp, drawEndChangeCheck: + isChangeToggle => + { + ReflectMethod("InitAllSettings",ppController); + }, + drawBlock: isToggle => + { + // ppController.flashInvertIntensity = EditorGUILayout.FloatField("反转度", ppController.flashInvertIntensity); + SerializedProperty flashInvertIntensityProp = serializedObject.FindProperty("flashInvertIntensity"); + EditorGUILayout.PropertyField(flashInvertIntensityProp, new GUIContent("反转度")); + // ppController.flashDeSaturateIntensity = EditorGUILayout.FloatField("饱和度", ppController.flashDeSaturateIntensity); + SerializedProperty flashDeSaturateIntensityProp = serializedObject.FindProperty("flashDeSaturateIntensity"); + EditorGUILayout.PropertyField(flashDeSaturateIntensityProp, new GUIContent("饱和度")); + // ppController.flashContrast = EditorGUILayout.FloatField("对比度", ppController.flashContrast); + SerializedProperty flashContrastProp = serializedObject.FindProperty("flashContrast"); + EditorGUILayout.PropertyField(flashContrastProp, new GUIContent("对比度")); + // ppController.flashColor = EditorGUILayout.ColorField("闪颜色", ppController.flashColor); + SerializedProperty flashColorProp = serializedObject.FindProperty("flashColor"); + EditorGUILayout.PropertyField(flashColorProp, new GUIContent("闪颜色")); + }); + + SerializedProperty vignetteToggleProp = serializedObject.FindProperty("vignetteToggle"); + DrawToggleFoldOut(ppController.AnimBools[6], "暗角", vignetteToggleProp, drawEndChangeCheck: + isChangeToggle => + { + ReflectMethod("InitAllSettings", ppController); + }, + drawBlock: isToggle => + { + // ppController.vignetteColor = EditorGUILayout.ColorField("暗角颜色", ppController.vignetteColor); + SerializedProperty vignetteColorProp = serializedObject.FindProperty("vignetteColor"); + EditorGUILayout.PropertyField(vignetteColorProp, new GUIContent("暗角颜色")); + // ppController.vignetteIntensity = EditorGUILayout.FloatField("暗角强度", ppController.vignetteIntensity); + SerializedProperty vignetteIntensityProp = serializedObject.FindProperty("vignetteIntensity"); + EditorGUILayout.PropertyField(vignetteIntensityProp, new GUIContent("暗角强度")); + // ppController.vignetteRoundness = EditorGUILayout.FloatField("暗角圆度", ppController.vignetteRoundness); + SerializedProperty vignetteRoundnessProp = serializedObject.FindProperty("vignetteRoundness"); + EditorGUILayout.PropertyField(vignetteRoundnessProp, new GUIContent("暗角圆度")); + // ppController.vignetteSmothness = EditorGUILayout.FloatField("暗角平滑度", ppController.vignetteSmothness); + SerializedProperty vignetteSmothnessProp = serializedObject.FindProperty("vignetteSmothness"); + EditorGUILayout.PropertyField(vignetteSmothnessProp, new GUIContent("暗角平滑度")); + }); + + if (GUILayout.Button("选择当前Manager")) + { + ReflectMethod("FindManager",ppController); + } + #if CINIMACHINE_3_0 + if (GUILayout.Button("选择当前CinemachineCamera")) + { + ppController.FindVirtualCamera(); + } + #endif + + serializedObject.ApplyModifiedProperties(); + + } + + public void DrawToggleFoldOut(AnimBool foldOutAnimBool,string label, SerializedProperty boolProperty, + bool isIndentBlock = true, + FontStyle fontStyle = FontStyle.Bold, + Action drawBlock = null, Action drawEndChangeCheck = null) + { + if (fontStyle == FontStyle.Bold) + { + EditorGUILayout.Space(); + } + + EditorGUILayout.BeginHorizontal(); + var rect = EditorGUILayout.GetControlRect(); + + var foldoutRect = new Rect(rect.x, rect.y, rect.width, rect.height); + // foldoutRect.width = toggleRect.x - foldoutRect.x; + var labelRect = new Rect(rect.x + 18f, rect.y, rect.width - 18f, rect.height); + + // bool isToggle = false; + // 必须先画Toggle,不然按钮会被FoldOut和Label覆盖。 + EditorGUI.BeginChangeCheck(); + EditorGUI.PropertyField(rect,boolProperty,new GUIContent("")); + // isToggle = EditorGUI.Toggle(rect, isToggle, EditorStyles.toggle); + if (EditorGUI.EndChangeCheck()) + { + drawEndChangeCheck?.Invoke(boolProperty.boolValue); + } + + // EditorGUI.DrawRect(foldoutRect,Color.red); + foldOutAnimBool.target = EditorGUI.Foldout(foldoutRect, foldOutAnimBool.target, string.Empty, true); + var origFontStyle = EditorStyles.label.fontStyle; + EditorStyles.label.fontStyle = fontStyle; + // EditorGUI.DrawRect(labelRect,Color.blue); + EditorGUI.LabelField(labelRect, label); + EditorStyles.label.fontStyle = origFontStyle; + EditorGUILayout.EndHorizontal(); + if (isIndentBlock) EditorGUI.indentLevel++; + float faded = foldOutAnimBool.faded; + if (faded == 0) faded = 0.00001f; //用于欺骗FadeGroup,不要让他真的关闭了。这样会藏不住相关的GUI。我们的目的是,GUI藏住,但是逻辑还是在跑。drawBlock要执行。 + EditorGUILayout.BeginFadeGroup(faded); + { + EditorGUI.BeginDisabledGroup(!boolProperty.boolValue); + drawBlock?.Invoke(boolProperty.boolValue); + EditorGUI.EndDisabledGroup(); + } + EditorGUILayout.EndFadeGroup(); + if (isIndentBlock) EditorGUI.indentLevel--; + } + + void ReflectMethod(string methodName,PostProcessingController controller) + { + serializedObject.ApplyModifiedProperties(); + MethodInfo privateMethod = typeof(PostProcessingController).GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance); + if (privateMethod != null) + { + privateMethod.Invoke(controller, null); + } + else + { + Debug.LogError("Private method " + methodName + " not found!"); + } + } +} \ No newline at end of file diff --git a/Packages/NBPostProcessing/Editor/PostProcessingControllerGUI.cs.meta b/Packages/NBPostProcessing/Editor/PostProcessingControllerGUI.cs.meta new file mode 100644 index 00000000..56b0cc48 --- /dev/null +++ b/Packages/NBPostProcessing/Editor/PostProcessingControllerGUI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ed187d8c0d9f5b14aa156ff45e7405c7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBPostProcessing/Editor/PostProcessingManagerGUI.cs b/Packages/NBPostProcessing/Editor/PostProcessingManagerGUI.cs new file mode 100644 index 00000000..8cf9c75b --- /dev/null +++ b/Packages/NBPostProcessing/Editor/PostProcessingManagerGUI.cs @@ -0,0 +1,70 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using System.Reflection; + +[CustomEditor(typeof(PostProcessingManager))] +public class PostProcessingManagerGUI : Editor +{ + private PostProcessingManager _ppManager; + public override void OnInspectorGUI() + { + + _ppManager = (PostProcessingManager)target; + serializedObject.Update(); + DrawToggle("controllerIndexFlags","_controllerIndexFlags"); + DrawToggle("色散开关",PostProcessingManager.chromaticAberrationToggles); + DrawToggle("径向扭曲开关",PostProcessingManager.distortSpeedToggles); + DrawToggle("径向模糊开关",PostProcessingManager.radialBlurToggles); + #if CINIMACHINE_3_0 + DrawToggle("震屏开关",PostProcessingManager.cameraShakeToggles); + #endif + DrawToggle("肌理开关",PostProcessingManager.overlayTextureToggles); + DrawToggle("黑白闪开关",PostProcessingManager.flashToggles); + DrawToggle("暗角开关",PostProcessingManager.vignetteToggles); + DrawToggle32("ShaderFlags", PostProcessingManager.material.GetInteger(NBPostProcessFlags.FlagsId)); + + } + + void DrawToggle(string label, string propertyName) + { + int intValue = ReflectIntValue(propertyName); + DrawToggle(label,intValue); + } + + void DrawToggle(string label, int intValue) + { + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField(label); + EditorGUILayout.LabelField(BinaryIntDrawer.DrawBinaryInt(intValue,8)); + EditorGUILayout.EndHorizontal(); + } + void DrawToggle32(string label, int intValue) + { + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField(label); + EditorGUILayout.LabelField(BinaryIntDrawer.DrawBinaryInt(intValue,32)); + EditorGUILayout.EndHorizontal(); + } + + int ReflectIntValue(string propertyName) + { + + FieldInfo privateField = typeof(PostProcessingManager).GetField(propertyName, BindingFlags.NonPublic | BindingFlags.Instance); + + if (privateField != null) + { + // 获取私有字段的值 + int value = (int)privateField.GetValue(_ppManager); + return value; + } + else + { + Debug.LogError("PostProcessingManagerGUI获取变量错误"); + return -1; + } + + } + +} \ No newline at end of file diff --git a/Packages/NBPostProcessing/Editor/PostProcessingManagerGUI.cs.meta b/Packages/NBPostProcessing/Editor/PostProcessingManagerGUI.cs.meta new file mode 100644 index 00000000..db7943c3 --- /dev/null +++ b/Packages/NBPostProcessing/Editor/PostProcessingManagerGUI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7bf2aa095c38c4972ba5c008ae40a3f3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBPostProcessing/Editor/com.xuanxuan.nb.postprocessing.Editor.asmdef b/Packages/NBPostProcessing/Editor/com.xuanxuan.nb.postprocessing.Editor.asmdef new file mode 100644 index 00000000..99f989ff --- /dev/null +++ b/Packages/NBPostProcessing/Editor/com.xuanxuan.nb.postprocessing.Editor.asmdef @@ -0,0 +1,27 @@ +{ + "name": "com.xuanxuan.nb.postprocessing.Editor", + "rootNamespace": "", + "references": [ + "GUID:a1f23b61b189bd949adfd0f7a353734f", + "GUID:8495541fcd41b0c40b5b6e6e7a7639d1", + "GUID:8f9e4d586616f13449cfeb86c5f704c2", + "GUID:4307f53044263cf4b835bd812fc161a4" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [ + { + "name": "com.unity.cinemachine", + "expression": "3.0", + "define": "CINIMACHINE_3_0" + } + ], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Packages/NBPostProcessing/Editor/com.xuanxuan.nb.postprocessing.Editor.asmdef.meta b/Packages/NBPostProcessing/Editor/com.xuanxuan.nb.postprocessing.Editor.asmdef.meta new file mode 100644 index 00000000..203bf75e --- /dev/null +++ b/Packages/NBPostProcessing/Editor/com.xuanxuan.nb.postprocessing.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 12fb0c569d0951c40a3f4013cd8758b5 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBPostProcessing/README.md b/Packages/NBPostProcessing/README.md new file mode 100644 index 00000000..5119ee6e --- /dev/null +++ b/Packages/NBPostProcessing/README.md @@ -0,0 +1,2 @@ +# NBPostProcessing +NBPostProcessing diff --git a/Packages/NBPostProcessing/README.md.meta b/Packages/NBPostProcessing/README.md.meta new file mode 100644 index 00000000..c9297598 --- /dev/null +++ b/Packages/NBPostProcessing/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 11345d4fc578e4c15a13b9e5a61107df +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBPostProcessing/Runtime.meta b/Packages/NBPostProcessing/Runtime.meta new file mode 100644 index 00000000..68ada299 --- /dev/null +++ b/Packages/NBPostProcessing/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4f0e3118134388949838b53cc48e9c89 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBPostProcessing/Runtime/NBPostProcess.cs b/Packages/NBPostProcessing/Runtime/NBPostProcess.cs new file mode 100644 index 00000000..d81c1fb5 --- /dev/null +++ b/Packages/NBPostProcessing/Runtime/NBPostProcess.cs @@ -0,0 +1,483 @@ +// using ConfigSystem.MConfig; +// using Sirenix.OdinInspector; +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; +using System.Collections.Generic; + +namespace MhRender.RendererFeatures +{ + public class NBPostProcess : ScriptableRendererFeature + { + private NBPostProcessRenderPass _renderPass; + private DisturbanceMaskRenderPass _disturbanceMaskRenderPass; + private ScreenColorRenderPass _screenColorRenderPass; + + + public static Material NBPostProcessMaterial; + + //public MaskFormat maskFormat = MaskFormat.RG32; + public Downsampling downSampling = Downsampling.None; + public LayerMask disturbanceLayerMask=1 << 25; + + private Material _disturbanceDownSampleMat; + private Material _screenColorDownSampleMat; + private float _screenHeight; + private ProfilingSampler _profilingSampler; + + // private PostProcessingManager manager;-+ + static Mesh s_FullscreenTriangle; + /// + /// A fullscreen triangle mesh.抄自Unity的后处理包,拿到一个全屏的Triangle。 + /// + static Mesh fullscreenTriangle; + // { + // get + // { + // if (s_FullscreenTriangle != null) + // return s_FullscreenTriangle; + // + // s_FullscreenTriangle = new Mesh + // { + // name = "Fullscreen Triangle" + // }; + // + // // Because we have to support older platforms (GLES2/3, DX9 etc) we can't do all of + // // this directly in the vertex shader using vertex ids :( + // s_FullscreenTriangle.SetVertices(new List + // { + // new Vector3 (-1f, -1f, 0f), + // new Vector3 (-1f, 3f, 0f), + // new Vector3 (3f, -1f, 0f) + // // new Vector3 (3f, -1f, 0f), + // // new Vector3 (-1f, 3f, 0f), + // // new Vector3 (-1f, -1f, 0f) + // }); + // s_FullscreenTriangle.SetIndices(new[] + // { + // 0, + // 1, + // 2 + // }, MeshTopology.Triangles, 0, false); + // s_FullscreenTriangle.UploadMeshData(false); + // + // meshTest = s_FullscreenTriangle; + // return s_FullscreenTriangle; + // } + // } + + + private bool canFind = false; + public override void Create() + { + + if (Shader.Find("XuanXuan/ColorBlit") == null || + Shader.Find("XuanXuan/Postprocess/NBPostProcessUber") == null) + { + canFind = false; + return; + } + else + { + canFind = true; + } + + #if UNIVERSAL_RP_13_1_2_OR_NEWER + _screenColorDownSampleMat = CoreUtils.CreateEngineMaterial(Shader.Find("XuanXuan/ColorBlit")); + #else + _screenColorDownSampleMat = CoreUtils.CreateEngineMaterial(Shader.Find("XuanXuan/ColorBufferBlit")); + #endif + _screenColorRenderPass = new ScreenColorRenderPass(_screenColorDownSampleMat, downSampling); + _screenColorRenderPass.renderPassEvent = RenderPassEvent.AfterRenderingTransparents; + + + _profilingSampler = new ProfilingSampler("DisturbanceRender"); + _disturbanceDownSampleMat = CoreUtils.CreateEngineMaterial(Shader.Find("XuanXuan/ColorBlit")); + _disturbanceMaskRenderPass = new DisturbanceMaskRenderPass(_profilingSampler,_disturbanceDownSampleMat,downSampling,disturbanceLayerMask); + _disturbanceMaskRenderPass.renderPassEvent = RenderPassEvent.AfterRenderingTransparents; + + + + #if !UNIVERSAL_RP_13_1_2_OR_NEWER + _profilingSampler = new ProfilingSampler("DisturbanceDownRTBlit"); + #endif + + if (fullscreenTriangle == null) + { + /*UNITY_NEAR_CLIP_VALUE*/ + float nearClipZ = -1; + if (SystemInfo.usesReversedZBuffer) + nearClipZ = 1; + + fullscreenTriangle = new Mesh(); + fullscreenTriangle.vertices = GetFullScreenTriangleVertexPosition(nearClipZ); + fullscreenTriangle.uv = GetFullScreenTriangleTexCoord(); + fullscreenTriangle.triangles = new int[3] { 0, 1, 2 }; + } + + // Shader shader = Shader.Find("XuanXuan/Postprocess/NBPostProcessUber"); + NBPostProcessMaterial = CoreUtils.CreateEngineMaterial(Shader.Find("XuanXuan/Postprocess/NBPostProcessUber")); + + PostProcessingManager.InitMat(); + + // if (Application.isPlaying) + // { + // manager = PostProcessingManager.Instance; + // } + _renderPass = new NBPostProcessRenderPass(NBPostProcessMaterial,fullscreenTriangle); + _renderPass.renderPassEvent = RenderPassEvent.AfterRenderingTransparents; + + } + + #if UNIVERSAL_RP_13_1_2_OR_NEWER + + public override void SetupRenderPasses(ScriptableRenderer renderer, in RenderingData renderingData) + { + if ((renderingData.cameraData.cameraType == CameraType.Game || + renderingData.cameraData.cameraType == CameraType.SceneView) && canFind) + { + //_disturbanceMaskRenderPass.SetUp(renderer.cameraDepthTargetHandle); + //if (renderingData.cameraData.cameraType == CameraType.Game) + //{ + // _screenHeight = renderer.cameraDepthTargetHandle.rt.descriptor.height; + //} + + _disturbanceMaskRenderPass.ConfigureInput(ScriptableRenderPassInput.Color); + _disturbanceMaskRenderPass.SetUp(renderer.cameraColorTargetHandle); + + _screenColorRenderPass.ConfigureInput(ScriptableRenderPassInput.Color); + _screenColorRenderPass.SetUp(renderer.cameraColorTargetHandle); + } + } + + #endif + + public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) + { + if ((renderingData.cameraData.cameraType == CameraType.Game || + renderingData.cameraData.cameraType == CameraType.SceneView) && canFind) + { + + #if !UNIVERSAL_RP_13_1_2_OR_NEWER + // _disturbanceMaskRenderPass.ConfigureInput(ScriptableRenderPassInput.Color); + // _disturbanceMaskRenderPass.SetUp(renderer.cameraColorTargetHandle); + _screenColorRenderPass.ConfigureInput(ScriptableRenderPassInput.Color); + _screenColorRenderPass.SetUp(renderer); + #endif + renderer.EnqueuePass(_screenColorRenderPass); + renderer.EnqueuePass(_disturbanceMaskRenderPass); + renderer.EnqueuePass(_renderPass); + } + } + + // Should match Common.hlsl + static Vector3[] GetFullScreenTriangleVertexPosition(float z /*= UNITY_NEAR_CLIP_VALUE*/) + { + var r = new Vector3[3]; + for (int i = 0; i < 3; i++) + { + Vector2 uv = new Vector2((i << 1) & 2, i & 2); + r[i] = new Vector3(uv.x * 2.0f - 1.0f, uv.y * 2.0f - 1.0f, z); + } + return r; + } + + // Should match Common.hlsl + static Vector2[] GetFullScreenTriangleTexCoord() + { + var r = new Vector2[3]; + for (int i = 0; i < 3; i++) + { + if (SystemInfo.graphicsUVStartsAtTop) + r[i] = new Vector2((i << 1) & 2, 1.0f - (i & 2)); + else + r[i] = new Vector2((i << 1) & 2, i & 2); + } + return r; + } + + protected override void Dispose(bool disposing) + { + CoreUtils.Destroy(_disturbanceDownSampleMat); + //CoreUtils.Destroy(NBPostProcessMaterial); + _disturbanceMaskRenderPass?.Dispose(); + CoreUtils.Destroy(_screenColorDownSampleMat); + _screenColorRenderPass?.Dispose(); + + + } + } + public class DisturbanceMaskRenderPass : ScriptableRenderPass + { + + private ProfilingSampler _profilingSampler; + #if UNIVERSAL_RP_13_1_2_OR_NEWER + private RTHandle _DisturbanceMaskRTHandle; + private RTHandle _cameraDepthRTHandle; + private RTHandle _DownRT; + #else + private static readonly int _DisturbanceMaskRTID = Shader.PropertyToID("_DisturbanceMaskRT"); + private static readonly int _DownRTID = Shader.PropertyToID("_DisturbanceMaskTex"); + private RenderTargetIdentifier _DisturbanceMaskRTHandle = new RenderTargetIdentifier (_DisturbanceMaskRTID); + private RenderTargetIdentifier _cameraDepthRTHandle; + private RenderTargetIdentifier _DownRT = new RenderTargetIdentifier (_DownRTID); + #endif + private Material tempMat; + + private readonly Downsampling _downSampling; + //private readonly MaskFormat _maskFormat; + + private Material _renderMaskMat ; + public LayerMask _DisturbanceMaskLayer = 1 << 25; + private FilteringSettings _Filtering; + private static readonly int CameraTexture = Shader.PropertyToID("_CameraTexture"); + private static readonly int SampleOffset = Shader.PropertyToID("_SampleOffset"); + + private readonly List _shaderTag = new List() + { + new ShaderTagId("UniversalForward"), + new ShaderTagId("SRPDefaultUnlit"), + new ShaderTagId("UniversalForwardOnly") + }; + + public DisturbanceMaskRenderPass(ProfilingSampler profilingSampler,Material DisturbanceMaskMat, Downsampling downSampling,LayerMask disturbanceMaskLayer) + { + _profilingSampler = profilingSampler; + _renderMaskMat = DisturbanceMaskMat; + _downSampling = downSampling; + _DisturbanceMaskLayer = disturbanceMaskLayer; + } + + #if UNIVERSAL_RP_13_1_2_OR_NEWER + + public void SetUp ( RTHandle cameraRTHandle ) + { + + RenderTextureDescriptor descrip = cameraRTHandle.rt.descriptor; + + descrip.colorFormat = RenderTextureFormat.RG32; + descrip.depthBufferBits = 0; + RenderingUtils.ReAllocateIfNeeded(ref _DisturbanceMaskRTHandle, descrip, name: "DisturbanceMaskRT"); + + + switch (_downSampling) + { + case Downsampling._2xBilinear: + descrip.width /= 2; + descrip.height /= 2; + break; + case Downsampling._4xBilinear: + descrip.width /= 4; + descrip.height /= 4; + break; + case Downsampling._4xBox: + descrip.width /= 4; + descrip.height /= 4; + break; + } + RenderingUtils.ReAllocateIfNeeded(ref _DownRT, descrip, name:"MaskDownCopyRT"); + } + #else + //在AddPass之前触发 + + public void SetUpDisturbanceMask(RenderTextureDescriptor descrip ,CommandBuffer cmd) + { + + descrip.colorFormat = RenderTextureFormat.RG32; + descrip.depthBufferBits = 0; + cmd.GetTemporaryRT(_DisturbanceMaskRTID, descrip,FilterMode.Bilinear); + + switch (_downSampling) + { + case Downsampling._2xBilinear: + descrip.width /= 2; + descrip.height /= 2; + break; + case Downsampling._4xBilinear: + descrip.width /= 4; + descrip.height /= 4; + break; + case Downsampling._4xBox: + descrip.width /= 4; + descrip.height /= 4; + break; + } + cmd.GetTemporaryRT(_DownRTID, descrip,FilterMode.Bilinear); + } + #endif + + public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData) + { + _Filtering = new FilteringSettings(RenderQueueRange.all, _DisturbanceMaskLayer); + #if UNIVERSAL_RP_13_1_2_OR_NEWER + _cameraDepthRTHandle = renderingData.cameraData.renderer.cameraDepthTargetHandle; + #else + _cameraDepthRTHandle = renderingData.cameraData.renderer.cameraDepthTarget; + SetUpDisturbanceMask(renderingData.cameraData.cameraTargetDescriptor,cmd); + #endif + + } + + private readonly Color _clearDisturbanceMaskColor = new Color(0.5f, 0.5f, 0f, 1f); + + public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor) + { +#if UNIVERSAL_RP_13_1_2_OR_NEWER + ConfigureTarget(_DisturbanceMaskRTHandle, _cameraDepthRTHandle); +#else + ConfigureTarget(_DisturbanceMaskRTID, _cameraDepthRTHandle); + +#endif + //将RT清空 + ConfigureClear(ClearFlag.Color, _clearDisturbanceMaskColor); + } + + public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) + { + + if (!(renderingData.cameraData.cameraType == CameraType.Game || renderingData.cameraData.cameraType == CameraType.SceneView)) + return; + + if (!_renderMaskMat) + { + return; + } + + var DisturbanceDraw = CreateDrawingSettings(_shaderTag, ref renderingData, renderingData.cameraData.defaultOpaqueSortFlags); + + CommandBuffer cmd = CommandBufferPool.Get(); + using (new ProfilingScope(cmd, _profilingSampler)) + { + context.DrawRenderers(renderingData.cullResults, ref DisturbanceDraw, ref _Filtering); + +#if UNIVERSAL_RP_13_1_2_OR_NEWER + _renderMaskMat.SetTexture(CameraTexture, _DisturbanceMaskRTHandle); + switch (_downSampling) + { + case Downsampling._2xBilinear: + Blitter.BlitTexture(cmd, _DisturbanceMaskRTHandle, _DownRT, _renderMaskMat, 0); + break; + case Downsampling._4xBilinear: + Blitter.BlitTexture(cmd, _DisturbanceMaskRTHandle, _DownRT, _renderMaskMat, 0); + break; + case Downsampling._4xBox: + _renderMaskMat.SetFloat(SampleOffset, 2); + Blitter.BlitTexture(cmd, _DisturbanceMaskRTHandle, _DownRT, _renderMaskMat, 1); + break; + default: + Blitter.BlitTexture(cmd, _DisturbanceMaskRTHandle, _DownRT, _renderMaskMat, 0); + break; + } + +#else + + // cmd.SetGlobalTexture(_DisturbanceMaskRTID, _DisturbanceMaskRTHandle); + //Bug:在非播放状态时,_DisturbanceMaskRTID在这里会经常丢失。造成画面闪烁。但是,只要有一个DistortObject在Scene中,并LockInspector,就不会闪烁,非常奇怪。 + cmd.SetGlobalTexture(CameraTexture, _DisturbanceMaskRTHandle); + // _renderMaskMat.SetTexture(CameraTexture, Shader.GetGlobalTexture(_DisturbanceMaskRTID)); + cmd.SetRenderTarget(_DownRT); + switch (_downSampling) + { + case Downsampling._2xBilinear: + // Blitter.BlitTexture(cmd, _DisturbanceMaskRTHandle, _DownRT, _renderMaskMat, 0); + // cmd.Blit(_DisturbanceMaskRTHandle, _DownRT, _renderMaskMat, 0); + // cmd.DrawMesh(RenderingUtils.fullscreenMesh, Matrix4x4.identity, _renderMaskMat, 0, 2); + Blit(cmd, _DisturbanceMaskRTHandle,_DownRT,_renderMaskMat,0); + break; + case Downsampling._4xBilinear: + // Blitter.BlitTexture(cmd, _DisturbanceMaskRTHandle, _DownRT, _renderMaskMat, 0); + // cmd.Blit(_DisturbanceMaskRTHandle, _DownRT, _renderMaskMat, 0); + // cmd.DrawMesh(RenderingUtils.fullscreenMesh, Matrix4x4.identity, _renderMaskMat, 0, 2); + Blit(cmd, _DisturbanceMaskRTHandle,_DownRT,_renderMaskMat,0); + break; + case Downsampling._4xBox: + _renderMaskMat.SetFloat(SampleOffset, 2); + // Blitter.BlitTexture(cmd, _DisturbanceMaskRTHandle, _DownRT, _renderMaskMat, 1); + // cmd.Blit(_DisturbanceMaskRTHandle, _DownRT, _renderMaskMat, 1); + // cmd.DrawMesh(RenderingUtils.fullscreenMesh, Matrix4x4.identity, _renderMaskMat, 0, 3); + Blit(cmd, _DisturbanceMaskRTHandle,_DownRT,_renderMaskMat,1); + break; + default: + // Blitter.BlitTexture(cmd, _DisturbanceMaskRTHandle, _DownRT, _renderMaskMat, 0); + // cmd.Blit(_DisturbanceMaskRTHandle, _DownRT, _renderMaskMat, 0); + // cmd.DrawMesh(RenderingUtils.fullscreenMesh, Matrix4x4.identity, _renderMaskMat, 0, 2); + Blit(cmd, _DisturbanceMaskRTHandle,_DownRT,_renderMaskMat,0); + break; + } +#endif + cmd.SetGlobalTexture("_DisturbanceMaskTex", _DownRT); + + } + context.ExecuteCommandBuffer(cmd); + CommandBufferPool.Release(cmd); + } + + #if !UNIVERSAL_RP_13_1_2_OR_NEWER + // Cleanup any allocated resources that were created during the execution of this render pass. + public override void OnCameraCleanup(CommandBuffer cmd) + { + cmd.ReleaseTemporaryRT(_DisturbanceMaskRTID); + cmd.ReleaseTemporaryRT(_DownRTID); + } + + //JustForSimple + public void Dispose() + { + } + #else + + public void Dispose() + { + _DisturbanceMaskRTHandle?.Release(); + _DownRT?.Release(); + } + #endif + } + public class NBPostProcessRenderPass : ScriptableRenderPass + { + private ProfilingSampler _profilingSampler; + public static Material _material; + public Mesh _fullScreenMesh; + + public NBPostProcessFlags _shaderFlag => PostProcessingManager.flags; + + private Vector4 _lastOutlineProps; + public Vector4 outLinePorps = Vector4.one; + + public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) + { + if (!(renderingData.cameraData.cameraType == CameraType.Game || renderingData.cameraData.cameraType == CameraType.SceneView)) + return; + + // if(!_shaderFlag.CheckFlagBits(NBPostProcessFlags.FLAG_BIT_NB_POSTPROCESS_ON))return;//Disturbance需要执行 + + //ConfigureTarget() + CommandBuffer cmdBuffer = CommandBufferPool.Get(); + cmdBuffer.Clear(); + // cmdBuffer.name = "NBPostProcess"; + + using (new ProfilingScope(cmdBuffer,_profilingSampler)) + { + Camera camera = renderingData.cameraData.camera; + cmdBuffer.SetViewProjectionMatrices(Matrix4x4.identity, Matrix4x4.identity); + + if(_material == null) return; + cmdBuffer.DrawMesh(RenderingUtils.fullscreenMesh, Matrix4x4.identity, _material, 0, 0); + + cmdBuffer.SetViewProjectionMatrices(camera.worldToCameraMatrix, camera.projectionMatrix); + + } + + context.ExecuteCommandBuffer(cmdBuffer); + CommandBufferPool.Release(cmdBuffer); + } + + public NBPostProcessRenderPass(Material mat,Mesh mesh) + { + _material = mat; + _fullScreenMesh = mesh; + _profilingSampler ??= new ProfilingSampler("NBPostProcess"); + + } + } +} diff --git a/Packages/NBPostProcessing/Runtime/NBPostProcess.cs.meta b/Packages/NBPostProcessing/Runtime/NBPostProcess.cs.meta new file mode 100644 index 00000000..e1753857 --- /dev/null +++ b/Packages/NBPostProcessing/Runtime/NBPostProcess.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d5a1f9350d8fc2c46a372955ef0e73b5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBPostProcessing/Runtime/NBPostprocessFlags.cs b/Packages/NBPostProcessing/Runtime/NBPostprocessFlags.cs new file mode 100644 index 00000000..09d91ed7 --- /dev/null +++ b/Packages/NBPostProcessing/Runtime/NBPostprocessFlags.cs @@ -0,0 +1,36 @@ +using UnityEngine; + +public class NBPostProcessFlags: ShaderFlagsBase +{ + public const string FlagsName = "_NBPostProcessFlags"; + public static int FlagsId = Shader.PropertyToID(FlagsName); + + protected override int GetShaderFlagsId(int index = 0) + { + return FlagsId; + } + + protected override string GetShaderFlagsName(int index = 0) + { + return FlagsName; + } + + public NBPostProcessFlags(Material material = null): base(material) + { + } + + public const int FLAG_BIT_NB_POSTPROCESS_ON = 1 << 0; + public const int FLAG_BIT_DISTORT_SPEED = 1 << 1; + public const int FLAG_BIT_OVERLAYTEXTURE = 1 << 2; + public const int FLAG_BIT_FLASH = 1 << 3; + public const int FLAG_BIT_CHORATICABERRAT = 1 << 4; + public const int FLAG_BIT_RADIALBLUR = 1 << 5; + public const int FLAG_BIT_VIGNETTE = 1 << 6; + public const int FLAG_BIT_OVERLAYTEXTURE_POLLARCOORD = 1 << 7; + public const int FLAG_BIT_OVERLAYTEXTURE_MASKMAP = 1 << 8; + public const int FLAG_BIT_POST_DISTORT_SCREEN_UV = 1 << 9;//默认来自于PolarUV + public const int FLAG_BIT_RADIALBLUR_BY_DISTORT = 1 << 10;//默认来自于PolarUV + public const int FLAG_BIT_CHORATICABERRAT_BY_DISTORT = 1 << 11;//默认来自于PolarUV + + +} \ No newline at end of file diff --git a/Packages/NBPostProcessing/Runtime/NBPostprocessFlags.cs.meta b/Packages/NBPostProcessing/Runtime/NBPostprocessFlags.cs.meta new file mode 100644 index 00000000..12f79afb --- /dev/null +++ b/Packages/NBPostProcessing/Runtime/NBPostprocessFlags.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be6a95b97f4bc3846bdada66138f6da1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBPostProcessing/Runtime/PostProcessingController.cs b/Packages/NBPostProcessing/Runtime/PostProcessingController.cs new file mode 100644 index 00000000..d31018f0 --- /dev/null +++ b/Packages/NBPostProcessing/Runtime/PostProcessingController.cs @@ -0,0 +1,602 @@ +using System; +using UnityEngine; +// using Sirenix.OdinInspector; +#if CINIMACHINE_3_0 +using Unity.Cinemachine; +#endif +// using Unity.Cinemachine.Editor; +#if UNITY_EDITOR +using UnityEditor.AnimatedValues; +using UnityEditor; +#endif + + + +[ExecuteInEditMode] +public class PostProcessingController : MonoBehaviour +{ + #if UNITY_EDITOR + public AnimBool[] AnimBools = new AnimBool[10]; + #endif + // [ShowInInspector][ReadOnly] + [SerializeField] + private PostProcessingManager _manager; + + public int index + { + get + { + return _index; + } + } + + // [ShowInInspector][ReadOnly] + private int _index; + + public void SetIndex(int controllerIndex) + { + _index = controllerIndex; + } + + + // [OnValueChanged("SetScreenCenterPos")] + // [LabelText("自定义屏幕中心")] + public Vector2 customScreenCenterPos = new Vector2(0.5f, 0.5f); + + private Vector2 _lastCustomScreenCenterPos = new Vector2(0.5f, 0.5f); + + + // [OnValueChanged("SetToggles")] + // [ToggleGroup("chromaticAberrationToggle", "色散")] + // [OnValueChanged("InitAllSettings")] + public bool chromaticAberrationToggle = false; + + // [OnValueChanged("SetUVFromDistort")] + // [LabelText("色散UV跟随后处理扭曲")] + // [ToggleGroup("chromaticAberrationToggle")] + public bool caFromDistort = false; + + // [LabelText("色散强度")] + // [ToggleGroup("chromaticAberrationToggle")] + public float chromaticAberrationIntensity = 0.2f; + + // [HideIf("caFromDistort")] + // [LabelText("色散位置")] + // [ToggleGroup("chromaticAberrationToggle")] + public float chromaticAberrationPos = 0.5f; + + // [HideIf("caFromDistort")] + // [LabelText("色散过渡范围")] + // [ToggleGroup("chromaticAberrationToggle")] + public float chromaticAberrationRange = 0.5f; + + // [OnValueChanged("SetToggles")] + // [ToggleGroup("distortSpeedToggle", "扭曲")] + public bool distortSpeedToggle = false; + + // [ToggleGroup("distortSpeedToggle")] + // [LabelText("后处理走常规屏幕坐标")] + // [OnValueChanged("SetUVFromDistort")] + public bool distortScreenUVMode = false; + + // [LabelText("后处理扭曲")] + // [ToggleGroup("distortSpeedToggle")] + // [OnValueChanged("InitAllSettings")] + public Texture2D distortSpeedTexture; + + // [LabelText("扭曲贴图中间值")] + // [ToggleGroup("distortSpeedToggle")] + // [OnValueChanged("SetTexture")] + public float distortTextureMidValue = 1; + + // [LabelText("扭曲贴图ST")] + // [ToggleGroup("distortSpeedToggle")] + public Vector4 distortSpeedTexSt = new Vector4(30,1,0,0); + + + // [LabelText("扭曲强度")] + // [ToggleGroup("distortSpeedToggle")] + public float distortSpeedIntensity = 1f; + + // [HideIf("distortScreenUVMode")] + // [LabelText("扭曲位置")] + // [ToggleGroup("distortSpeedToggle")] + public float distortSpeedPosition = 0.5f; + + // [HideIf("distortScreenUVMode")] + // [LabelText("扭曲范围")] + // [ToggleGroup("distortSpeedToggle")] + public float distortSpeedRange = 1f; + + // [LabelText("扭曲纹理流动X")] + // [ToggleGroup("distortSpeedToggle")] + public float distortSpeedMoveSpeedX = 0.1f; + // [LabelText("扭曲纹理流动Y")] + // [ToggleGroup("distortSpeedToggle")] + public float distortSpeedMoveSpeed = -0.5f;//因为老的做法是没有X偏移的,只有Y的偏移,不改变量兼容老做法。 + private readonly int _distortSpeedTextureID = Shader.PropertyToID("_SpeedDistortMap"); + private readonly int _distortSpeedTextureStID = Shader.PropertyToID("_SpeedDistortMap_ST"); + + // [ToggleGroup("radialBlurToggle", "径向模糊")] + // [OnValueChanged("InitAllSettings")] + public bool radialBlurToggle = false; + + // [OnValueChanged("SetUVFromDistort")] + // [ToggleGroup("radialBlurToggle")] [LabelText("径向模糊跟随后处理扭曲")] + public bool radialBlurFromDistort = false; + + // [ToggleGroup("radialBlurToggle")] + // [LabelText("采样次数")] + [Range(1,12)] + public int radialBlurSampleCount = 4; + // [ToggleGroup("radialBlurToggle")] + // [LabelText("强度")] + public float radialBlurIntensity = 1; + // [HideIf("radialBlurFromDistort")] + // [LabelText("位置")] + // [ToggleGroup("radialBlurToggle")] + public float radialBlurPos = 0.5f; + // [HideIf("radialBlurFromDistort")] + // [LabelText("过度范围")] + // [ToggleGroup("radialBlurToggle")] + public float radialBlurRange = 0.5f; + + #if CINIMACHINE_3_0 + // [OnValueChanged("SetToggles")] + // [ToggleGroup("cameraShakeToggle", "震屏")] + // [OnValueChanged("InitAllSettings")] + public bool cameraShakeToggle = false; + + // [ToggleGroup("cameraShakeToggle")] + // [LabelText("绑定Cinemachine相机")] + // [OnValueChanged("InitCinemachineCamera")] + public CinemachineCamera cinemachineCamera; + + // [ToggleGroup("cameraShakeToggle")] + // [LabelText("相机震动强度")] + public float cameraShakeIntensity; + #endif + + // [ToggleGroup("overlayTextureToggle", "肌理叠加图")] + // [OnValueChanged("InitAllSettings")] + public bool overlayTextureToggle = false; + + // [LabelText("肌理图极坐标模式")] [ToggleGroup("overlayTextureToggle")] + // [OnValueChanged("SetTexture")] + public bool overlayTexturePolarCoordMode = false; + + // [ToggleGroup("overlayTextureToggle")] + // [LabelText("肌理图")] + // [OnValueChanged("SetTexture")] + public Texture2D overlayTexture; + + private readonly int _overlayTextureID = Shader.PropertyToID("_TextureOverlay"); + private readonly int _overlayTextureStID = Shader.PropertyToID("_TextureOverlay_ST"); + private readonly int _textureOverlayAnimProperty = Shader.PropertyToID("_TextureOverlayAnim"); + private readonly int _textureOverlayMaskProperty = Shader.PropertyToID("_TextureOverlayMask"); + private readonly int _textureOverlayMaskStProperty = Shader.PropertyToID("_TextureOverlayMask_ST"); + + + // [LabelText("肌理图缩放平移")] [ToggleGroup("overlayTextureToggle")] + public Vector4 overlayTextureSt = new Vector4(1, 1, 0, 0); + // [LabelText("肌理图偏移动画")] [ToggleGroup("overlayTextureToggle")] + public Vector2 overlayTextureAnim = new Vector2(0, 0); + // [LabelText("肌理图强度")] [ToggleGroup("overlayTextureToggle")] + public float overlayTextureIntensity = 1f; + // [LabelText("肌理图蒙板")] [ToggleGroup("overlayTextureToggle")] + // [OnValueChanged("SetTexture")] + public Texture2D overlayMaskTexture; + // [LabelText("肌理图蒙板缩放平移")] [ToggleGroup("overlayTextureToggle")] + public Vector4 overlayMaskTextureSt; + + // [ToggleGroup("flashToggle", "反闪")] + // [OnValueChanged("InitAllSettings")] + public bool flashToggle = false; + // [LabelText("反转度")] [ToggleGroup("flashToggle")] + public float flashInvertIntensity = 1f; + // [LabelText("饱和度")] [ToggleGroup("flashToggle")] + public float flashDeSaturateIntensity = 1f; + // [LabelText("对比度")] [ToggleGroup("flashToggle")] + public float flashContrast = 1f; + public Color flashColor = new Color(1f,1f,1f,1f); + + // [ToggleGroup("vignetteToggle", "暗角")] + // [OnValueChanged("InitAllSettings")] + public bool vignetteToggle = false; + // [ToggleGroup("vignetteToggle")] + // [LabelText("暗角颜色")] + public Color vignetteColor = Color.black; + private readonly int _vignetteColorID = Shader.PropertyToID("_VignetteColor"); + // [ToggleGroup("vignetteToggle")] + // [LabelText("暗角强度")] + public float vignetteIntensity = 1; + // [ToggleGroup("vignetteToggle")] + // [LabelText("暗角圆度")] + public float vignetteRoundness = 1; + // [ToggleGroup("vignetteToggle")] + // [LabelText("暗角平滑度")] + public float vignetteSmothness = 10; + + + public void InitController() + { + if (this.isActiveAndEnabled == false) + { + return; + } + + _manager = PostProcessingManager.Instance; + + _manager.InitController(this); + InitAllSettings(); + + } + + void InitAllSettings() + { + SetScreenCenterPos(); + SetToggles(); + SetUVFromDistort(); + SetTexture(); + #if CINIMACHINE_3_0 + InitCinemachineCamera(); + #endif + } + + void SetScreenCenterPos() + { + PostProcessingManager.customScreenCenterPos = customScreenCenterPos; + _lastCustomScreenCenterPos = customScreenCenterPos; + } + + void SetUVFromDistort() + { + PostProcessingManager.isDistortScreenUVMode = distortScreenUVMode; + PostProcessingManager.isCaByDistort = caFromDistort; + PostProcessingManager.isRadialBlurByDistort = radialBlurFromDistort; + } + + private void SetTexture() + { + if(PostProcessingManager.material == null) return; + if (distortSpeedToggle) + { + if (distortSpeedTexture != null) + { + PostProcessingManager.material.SetTexture(_distortSpeedTextureID, distortSpeedTexture); + PostProcessingManager.distortTextureMidValue = distortTextureMidValue; + } + else + { + PostProcessingManager.material.SetTexture(_distortSpeedTextureID, null); + } + } + + if (overlayTextureToggle) + { + if (overlayTexturePolarCoordMode) + { + PostProcessingManager.flags.SetFlagBits(NBPostProcessFlags.FLAG_BIT_OVERLAYTEXTURE_POLLARCOORD); + } + else + { + PostProcessingManager.flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_OVERLAYTEXTURE_POLLARCOORD); + } + + if (overlayTexture) + { + Debug.Log("SetOverlayTexture"); + PostProcessingManager.material.SetTexture(_overlayTextureID,overlayTexture); + } + else + { + Debug.Log("ClearOverlayTexture"); + PostProcessingManager.material.SetTexture(_overlayTextureID,null); + } + + if (overlayMaskTexture) + { + Debug.Log("SetOverlayMaskTexture"); + PostProcessingManager.material.SetTexture(_textureOverlayMaskProperty,overlayMaskTexture); + PostProcessingManager.flags.SetFlagBits(NBPostProcessFlags.FLAG_BIT_OVERLAYTEXTURE_MASKMAP); + } + else + { + Debug.Log("ClearOverlayMaskTexture"); + PostProcessingManager.flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_OVERLAYTEXTURE_MASKMAP); + } + } + + } + + private void SetToggles() + { + SetBit(ref PostProcessingManager.chromaticAberrationToggles,index,chromaticAberrationToggle); + SetBit(ref PostProcessingManager.distortSpeedToggles,index,distortSpeedToggle); + #if CINIMACHINE_3_0 + SetBit(ref PostProcessingManager.cameraShakeToggles,index,cameraShakeToggle); + #endif + SetBit(ref PostProcessingManager.overlayTextureToggles,index,overlayTextureToggle); + SetBit(ref PostProcessingManager.flashToggles,index,flashToggle); + SetBit(ref PostProcessingManager.radialBlurToggles,index,radialBlurToggle); + SetBit(ref PostProcessingManager.vignetteToggles,index,vignetteToggle); + +#if UNITY_EDITOR + SetTexture(); +#endif + + } + + private void ClearToggles() + { + SetBit(ref PostProcessingManager.chromaticAberrationToggles,index,false); + SetBit(ref PostProcessingManager.distortSpeedToggles,index,false); + #if CINIMACHINE_3_0 + SetBit(ref PostProcessingManager.cameraShakeToggles,index,false); + #endif + SetBit(ref PostProcessingManager.overlayTextureToggles,index,false); + SetBit(ref PostProcessingManager.flashToggles,index,false); + SetBit(ref PostProcessingManager.radialBlurToggles,index,false); + SetBit(ref PostProcessingManager.vignetteToggles,index,false); + } + + private bool _lastChormaticAberrationToggle = false; + private bool _lastDistortSpeedToggle = false; + #if CINIMACHINE_3_0 + private bool _lastCamerashakeToggle = false; + #endif + private bool _lastOverlayTextureToggle = false; + private bool _lastFlashToggle= false; + private bool _lastRadialBlurToggle= false; + private bool _lastVignetteToggle= false; + + bool checkIfToggleChanged(ref bool lastTogggle, bool currentToggle) + { + if (lastTogggle != currentToggle) + { + lastTogggle = currentToggle; + return true; + } + else + { + return false; + } + } + + + + private static void SetBit(ref int bit, int index,bool bitToggle) + { + if (bitToggle) + { + bit |= (1 << index); + } + else + { + bit &= ~(1 << index); + } + } + + // [LabelText("跳过数值锁定")] public bool isSkipUpdate = false; + +#if UNITY_EDITOR + // [Button("选择当前Manager")] + void FindManager() + { + UnityEditor.Selection.activeObject = _manager.gameObject; + } + + #if CINIMACHINE_3_0 + // [Button("选择当前VituralCamera")] + public void FindVirtualCamera() + { + UnityEditor.Selection.activeObject = _manager.currentVirtualCamera; + } + + public void InitCinemachineCamera() + { + if (cinemachineCamera) + { + // _perlin = ; + if (!cinemachineCamera.gameObject.TryGetComponent(out var _perlin)) + { + _perlin = cinemachineCamera.gameObject.AddComponent(); + } + + if (_perlin) + { + _perlin.NoiseProfile = + UnityEditor.AssetDatabase.LoadAssetAtPath( + "Packages/com.xuanxuan.nb.postprocessing/3DPostionShake.asset"); + _perlin.FrequencyGain = 5f; //做一个自定义 + _perlin.AmplitudeGain = 0f; //一开始先不要震动 + } + + #if UNITY_EDITOR + if (_manager) + { + _manager.currentVirtualCamera = cinemachineCamera; + } + #endif + } + + } + #endif +#endif + + + private void OnEnable() + { + // Debug.Log("InitController"); + InitController(); + #if UNITY_EDITOR + // 注册编辑器帧更新事件 + EditorApplication.update += ControllerEditorUpdate; + _manager.ReRegistEditorUpdate();//保证Manager的注册在最后 + #endif + } + + private void OnDisable() + { + // Debug.Log("EndController"); + EndController(); + #if UNITY_EDITOR + // 注册编辑器帧更新事件 + EditorApplication.update -= ControllerEditorUpdate; + #endif + } + + bool isFirstUpdate = true; + // Update is called once per frame + void Update() + { + if (isFirstUpdate) + { + isFirstUpdate = false; + return; + } + if(!PostProcessingManager.material) return; +//#if UNITY_EDITOR + //Odin的ToggleGroup和OnValueChange功能冲突,导致不一定生效。不好调试。所以用手动的方式更新。 + bool isToggleChanged = false; + isToggleChanged |= checkIfToggleChanged(ref _lastChormaticAberrationToggle, chromaticAberrationToggle); + isToggleChanged |= checkIfToggleChanged(ref _lastDistortSpeedToggle, distortSpeedToggle); + #if CINIMACHINE_3_0 + isToggleChanged |= checkIfToggleChanged(ref _lastCamerashakeToggle, cameraShakeToggle); + #endif + isToggleChanged |= checkIfToggleChanged(ref _lastOverlayTextureToggle, overlayTextureToggle); + isToggleChanged |= checkIfToggleChanged(ref _lastFlashToggle, flashToggle); + isToggleChanged |= checkIfToggleChanged(ref _lastRadialBlurToggle, radialBlurToggle); + isToggleChanged |= checkIfToggleChanged(ref _lastVignetteToggle, vignetteToggle); + if (isToggleChanged) + { + SetToggles(); + } +//#endif + + if (customScreenCenterPos != _lastCustomScreenCenterPos) + { + SetScreenCenterPos(); + } + + + if (chromaticAberrationToggle) + { + PostProcessingManager.chromaticAberrationIntensity = + Mathf.Max(PostProcessingManager.chromaticAberrationIntensity, chromaticAberrationIntensity); + PostProcessingManager.chromaticAberrationPos = + Mathf.Max(PostProcessingManager.chromaticAberrationPos, chromaticAberrationPos); + PostProcessingManager.chromaticAberrationRange = + Mathf.Max(PostProcessingManager.chromaticAberrationRange, chromaticAberrationRange); + } + + if (distortSpeedToggle) + { + if (index == PostProcessingManager.laseUpdateControllerIndex) + { + //只有这里才会更新Scale + PostProcessingManager.material.SetVector(_distortSpeedTextureStID, distortSpeedTexSt); + } + + PostProcessingManager.distortSpeedIntensity = + Mathf.Max(PostProcessingManager.distortSpeedIntensity, distortSpeedIntensity); + PostProcessingManager.distortSpeedPosition = + Mathf.Max(PostProcessingManager.distortSpeedPosition, distortSpeedPosition); + PostProcessingManager.distortSpeedRange = + Mathf.Max(PostProcessingManager.distortSpeedRange, distortSpeedRange); + PostProcessingManager.distortSpeedMoveSpeedX = + Mathf.Abs(PostProcessingManager.distortSpeedMoveSpeedX) > Mathf.Abs(distortSpeedMoveSpeedX) + ? PostProcessingManager.distortSpeedMoveSpeedX + : distortSpeedMoveSpeedX; + PostProcessingManager.distortSpeedMoveSpeedY = + Mathf.Abs(PostProcessingManager.distortSpeedMoveSpeedY) > Mathf.Abs(distortSpeedMoveSpeed) + ? PostProcessingManager.distortSpeedMoveSpeedY + : distortSpeedMoveSpeed; + } + + #if CINIMACHINE_3_0 + if (cameraShakeToggle) + { + PostProcessingManager.cameraShakeIntensity = + Mathf.Max(PostProcessingManager.cameraShakeIntensity, cameraShakeIntensity); + + } + #endif + + if (overlayTextureToggle) + { + if (index == PostProcessingManager.laseUpdateControllerIndex) + { + PostProcessingManager.material.SetVector(_overlayTextureStID, overlayTextureSt); + PostProcessingManager.material.SetVector(_textureOverlayMaskStProperty, overlayMaskTextureSt); + PostProcessingManager.material.SetVector(_textureOverlayAnimProperty,overlayTextureAnim); + } + + PostProcessingManager.overlayTextureIntensity = Mathf.Max(PostProcessingManager.overlayTextureIntensity, + overlayTextureIntensity); + } + + if (flashToggle) + { + PostProcessingManager.flashDesaturateIntensity = + Mathf.Max(PostProcessingManager.flashDesaturateIntensity, flashDeSaturateIntensity); + PostProcessingManager.flashInvertIntensity = + Mathf.Max(PostProcessingManager.flashInvertIntensity, flashInvertIntensity); + PostProcessingManager.flashContrast = + Mathf.Max(PostProcessingManager.flashContrast, flashContrast); + PostProcessingManager.flashColor = flashColor; + } + + if (radialBlurToggle) + { + PostProcessingManager.radialBlurIntensity = + Mathf.Max(PostProcessingManager.radialBlurIntensity, radialBlurIntensity); + PostProcessingManager.radialBlurSampleCount = Mathf.Max(PostProcessingManager.radialBlurSampleCount, + radialBlurSampleCount); + PostProcessingManager.radialBlurPos = Mathf.Max(PostProcessingManager.radialBlurPos, radialBlurPos); + PostProcessingManager.radialBlurRange = Mathf.Max(PostProcessingManager.radialBlurRange, radialBlurRange); + } + + if (vignetteToggle) + { + PostProcessingManager.vignetteIntensity = + Mathf.Max(PostProcessingManager.vignetteIntensity, vignetteIntensity); + PostProcessingManager.vignetteRoundness = Mathf.Max(PostProcessingManager.vignetteRoundness, vignetteRoundness); + PostProcessingManager.vignetteSmothness = Mathf.Max(PostProcessingManager.vignetteSmothness, vignetteSmothness); + if (index == PostProcessingManager.laseUpdateControllerIndex) + { + PostProcessingManager.material.SetColor(_vignetteColorID,vignetteColor); + } + } + + + } + + + void EndController() + { + ClearToggles(); + _manager.EndController(this); + } + + +#if UNITY_EDITOR + [UnityEditor.MenuItem("GameObject/创建NB后处理特效")] + static void CreatMenu() + { + GameObject Effect = new GameObject(); + Effect.name = "NBPostprocessController"; + PostProcessingController controller = Effect.AddComponent(); + + UnityEditor.Selection.activeObject = Effect; + } + + void ControllerEditorUpdate() + { + if (!Application.isPlaying) + { + Update(); + } + } +#endif +} \ No newline at end of file diff --git a/Packages/NBPostProcessing/Runtime/PostProcessingController.cs.meta b/Packages/NBPostProcessing/Runtime/PostProcessingController.cs.meta new file mode 100644 index 00000000..64bfbc70 --- /dev/null +++ b/Packages/NBPostProcessing/Runtime/PostProcessingController.cs.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 909ea7d136ae0c349a24f02cac1f5f71 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - manager: {instanceID: 0} + - distortSpeedTexture: {fileID: 2800000, guid: 7f808d0c8608b954d8f20cb4132c3049, type: 3} + - overlayTexture: {instanceID: 0} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBPostProcessing/Runtime/PostProcessingManager.cs b/Packages/NBPostProcessing/Runtime/PostProcessingManager.cs new file mode 100644 index 00000000..1845c727 --- /dev/null +++ b/Packages/NBPostProcessing/Runtime/PostProcessingManager.cs @@ -0,0 +1,720 @@ +using System; +using UnityEngine; +// using Sirenix.OdinInspector; + +// #if UNITY_EDITOR +// using Sirenix.OdinInspector.Editor; +// #endif +#if UNITY_EDITOR +using UnityEditor; +#endif + +#if CINIMACHINE_3_0 +using Unity.Cinemachine; +#endif + +using MhRender.RendererFeatures; + + +[ExecuteAlways] +public class PostProcessingManager : MonoBehaviour +{ + //单例实现 + private static PostProcessingManager _instance = null; + + public static PostProcessingManager Instance + { + get + { + if (_instance == null) + { + #if UNITY_2022_1_OR_NEWER + _instance = FindFirstObjectByType(); + #else + _instance = FindObjectOfType(); + #endif + if (_instance == null) + { + GameObject singletonObj = new GameObject(); + _instance = singletonObj.AddComponent(); + if (Application.isPlaying) + { + singletonObj.name = "NBPostProcessManager"; + DontDestroyOnLoad(singletonObj); + } + else + { + singletonObj.name = "测试用NB后处理管理器,请美术删除此脚本再上传"; + } + } + } + + return _instance; + } + } + + + private void Awake() + { + if (_instance == null) + { + _instance = this; + } + else + { + DestroyImmediate(this); + } + } + + // [ReadOnly] public Volume volume; + // private static VolumeProfile profile; + // [ReadOnly] + public static Material material + { + get + { + return NBPostProcess.NBPostProcessMaterial; + } + } + + public static NBPostProcessFlags flags = new NBPostProcessFlags(); + + // public CinemachineBrain cameraBrain; + // public CinemachineVirtualCamera currentVirtualCamera; + #if CINIMACHINE_3_0 + public CinemachineCamera currentVirtualCamera; + private CinemachineBasicMultiChannelPerlin _perlin; + #endif + + public static void InitMat() + { + flags.SetMaterial(PostProcessingManager.material); + if (_instance) + { + _instance.ResetEffect(); + } + } + private void OnEnable() + { +#if UNITY_EDITOR + if (_controllerIndexFlags > 0) + { + ReRegistEditorUpdate(); + } + else + { + EditorApplication.update += EditorUpdate; + } + // 注册编辑器帧更新事件 +#endif + // //TODO 后续版本要找比较准确快的找Volume的方式 + // volume = GameObject.FindObjectOfType(); + // if (volume != null) + // { + // profile = volume.profile; + // } + + // #if UNITY_EDITOR + // //仅仅用于测试。 + // if (currentVirtualCamera == null) + // { + // currentVirtualCamera = FindFirstObjectByType(); + // + // if (currentVirtualCamera) + // { + // if (!currentVirtualCamera.gameObject.TryGetComponent(out _perlin)) + // { + // _perlin = currentVirtualCamera.gameObject.AddComponent(); + // } + // } + // + // if (_perlin) + // { + // _perlin.NoiseProfile = + // // ResourceManager.LoadAssetAsync("Assets/AddressableAssets/Shader/CustomPostprocess/3DPostionShake.asset"); + // //在runtime下是找不到的。但设计是美术做好然后存引用在预制件里。 + // UnityEditor.AssetDatabase.LoadAssetAtPath( + // "Packages/com.r2.render.postprocessing/3DPostionShake.asset"); + // _perlin.FrequencyGain = 5f; //做一个自定义 + // _perlin.AmplitudeGain = 0f; //一开始先不要震动 + // } + // } + // + // #endif + + + //重置Flag + flags = new NBPostProcessFlags(material); + flags.SetFlagBits(0); + } + + private void OnDisable() + { +#if UNITY_EDITOR + // 注册编辑器帧更新事件 + EditorApplication.update -= EditorUpdate; +#endif + flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_NB_POSTPROCESS_ON); + } + + +// [ShowInInspector] +// #if UNITY_EDITOR +// [BinaryInt(8)] +// #endif + private int _controllerIndexFlags = 0; + + public static int laseUpdateControllerIndex; + + private int GetControllerIndex() + { + for (int i = 0; i < 31; i++) + { + if (((~_controllerIndexFlags) & (1 << i)) != 0) + { + _controllerIndexFlags |= (1 << i); + laseUpdateControllerIndex = i; + return i; + } + } + return 32; + } + + private void ReleaseControllerIndex(int index) + { + _controllerIndexFlags &= ~(1 << index); + } + + private int CountBit(int bit) + { + int count = 0; + while (bit > 0) + { + bit = bit & (bit - 1); + count++; + } + + return count; + } + //每次Controller触发Play都会触发Init + public void InitController(PostProcessingController controller) + { + #if CINIMACHINE_3_0 + if (controller.cinemachineCamera != null) + { + currentVirtualCamera = controller.cinemachineCamera; + _perlin = currentVirtualCamera.gameObject.GetComponent(); + } + #endif + + controller.SetIndex(GetControllerIndex()); + } + + public void EndController(PostProcessingController controller) + { + #if CINIMACHINE_3_0 + if (currentVirtualCamera == controller.cinemachineCamera) + { + currentVirtualCamera = null; + _perlin = null; + } + #endif + + ReleaseControllerIndex(controller.index); + controller.SetIndex(32); //设置32为关闭index + } + + private void EffectUpdater(Action initEffect,Action updateEffect,Action endEffect,ref bool lastIsEffect,int effectToggles) + { + if (effectToggles > 0) + { + if (!lastIsEffect) + { + initEffect(); + } + updateEffect(); + lastIsEffect = true; + } + else + { + if (lastIsEffect) + { + endEffect(); + lastIsEffect = false; + } + } + + + } + + private bool isFirstUpdate = true; + + private void ResetEffect() + { + if (_lastIsChromaticAberration) + { + EndChromaticAberration(); + _lastIsChromaticAberration = false; + } + + if (_lastIsRadialBlur) + { + EndRadialBlur(); + _lastIsRadialBlur = false; + } + + if (_lastIsDistortSpeed) + { + EndDistortSpeed(); + _lastIsDistortSpeed = false; + } + +#if CINIMACHINE_3_0 + if (_lastIsCameraShake) + { + EndCameraShake(); + _lastIsCameraShake = false; + } +#endif + + if (_lastIsOverlayTexture) + { + EndOverlayTexture(); + _lastIsOverlayTexture = false; + } + + if (_lastIsFlash) + { + EndFlash(); + _lastIsFlash = false; + } + + if (_lastIsVignette) + { + EndVignette(); + _lastIsVignette = false; + } + } + + private void LateUpdate()//晚于所有脚本触发。 + { + if (isFirstUpdate) + { + isFirstUpdate = false; + return; + } + + if(!material) return; + /* +#if UNITY_EDITOR + if (flags.GetMaterial() != PostProcessingManager.material) + { + flags.SetMaterial(PostProcessingManager.material); + } +#endif + */ + + if (_controllerIndexFlags == 0) + { + ResetEffect(); + flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_NB_POSTPROCESS_ON); + return; + } + + EffectUpdater(InitChromaticAberration,UpdateChromaticAberration,EndChromaticAberration,ref _lastIsChromaticAberration,chromaticAberrationToggles); + EffectUpdater(InitDistortSpeed,UpdateDistortSpeed,EndDistortSpeed,ref _lastIsDistortSpeed,distortSpeedToggles); + EffectUpdater(InitRadialBlur, UpdateRadialBlur, EndRadialBlur,ref _lastIsRadialBlur, radialBlurToggles); + + bool isSetCustomScreenCenterPos = (chromaticAberrationToggles | distortSpeedToggles | radialBlurToggles) > 0; + + if (isSetCustomScreenCenterPos) + { + material.SetVector(_customScreenCenterProperty, + new Vector4(customScreenCenterPos.x, customScreenCenterPos.y, 0, 0)); + } + + #if CINIMACHINE_3_0 + EffectUpdater(() => { },UpdateCameraShake,EndCameraShake,ref _lastIsCameraShake,cameraShakeToggles); + #endif + EffectUpdater(InitOverlayTexture, UpdateOverlayTexture, EndOverlayTexture,ref _lastIsOverlayTexture, overlayTextureToggles); + EffectUpdater(InitFlash, UpdateFlash, EndFlash,ref _lastIsFlash, flashToggles); + EffectUpdater(InitVignette, UpdateVignette, EndVignette,ref _lastIsVignette, vignetteToggles); + + bool hasEffect = + ( + chromaticAberrationToggles| + distortSpeedToggles| + #if CINIMACHINE_3_0 + cameraShakeToggles| + #endif + radialBlurToggles| + overlayTextureToggles| + flashToggles| + vignetteToggles + ) >0; + + if (hasEffect) + { + flags.SetFlagBits(NBPostProcessFlags.FLAG_BIT_NB_POSTPROCESS_ON); + } + else + { + flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_NB_POSTPROCESS_ON); + } + } + + + private readonly int _customScreenCenterProperty = Shader.PropertyToID("_CustomScreenCenter"); + public static Vector2 customScreenCenterPos = new Vector2(0.5f, 0.5f); + + + + + #region 色散 + + //色散相关 + // private ChromaticAberration chromaticAberrationComp; + // private bool preserveChromaticAberrationActive; + // private float preserveChromaticAberrationIntensity; + private bool _lastIsChromaticAberration = false; + private readonly int _chromaticAberrationVecProperty = Shader.PropertyToID("_ChromaticAberrationVec"); + + public static int chromaticAberrationToggles = 0; + + public static bool isCaByDistort= false; + private bool _lastIsCaByDistort = false; + + public static float chromaticAberrationIntensity = 0; + public static float chromaticAberrationPos = 0; + public static float chromaticAberrationRange = 0; + + private void InitChromaticAberration() + { + // Debug.Log("InitCA"); + flags.SetFlagBits(NBPostProcessFlags.FLAG_BIT_CHORATICABERRAT); + } + + private void UpdateChromaticAberration() + { + if (_lastIsCaByDistort != isCaByDistort) + { + if (isCaByDistort) + { + flags.SetFlagBits(NBPostProcessFlags.FLAG_BIT_CHORATICABERRAT_BY_DISTORT); + } + else + { + flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_CHORATICABERRAT_BY_DISTORT); + } + + _lastIsCaByDistort = isCaByDistort; + } + + material.SetVector(_chromaticAberrationVecProperty, new Vector4(chromaticAberrationIntensity,chromaticAberrationPos,chromaticAberrationRange)); + chromaticAberrationIntensity = 0;//等待下一次update + chromaticAberrationPos = 0;//等待下一次update + chromaticAberrationRange = 0;//等待下一次update + } + + private void EndChromaticAberration() + { + // Debug.Log("EndCA"); + flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_CHORATICABERRAT); + } + #endregion + + #region 径向速度扭曲 + //径向速度扭曲相关 + private readonly int _distortVecProperty = Shader.PropertyToID("_SpeedDistortVec"); + private readonly int _distortVec2Property = Shader.PropertyToID("_SpeedDistortVec2"); + private bool _lastIsDistortSpeed = false; + + public static bool isDistortScreenUVMode; + private bool _lastIsDistortScreenUVMode; +// [ShowInInspector] +// [LabelText("径向扭曲开关")] +// #if UNITY_EDITOR +// [BinaryInt(8)] +// #endif + public static int distortSpeedToggles; + + public static Texture2D distortTexture2D; + + public static float distortSpeedIntensity = 0; + public static float distortSpeedPosition = 0; + public static float distortSpeedRange = 0; + public static float distortSpeedMoveSpeedX = 0; + public static float distortSpeedMoveSpeedY = 0; + public static float distortTextureMidValue = 0; + + private void InitDistortSpeed() + { + flags.SetFlagBits(NBPostProcessFlags.FLAG_BIT_DISTORT_SPEED); + } + + private void UpdateDistortSpeed() + { + if (_lastIsDistortScreenUVMode!=isDistortScreenUVMode) + { + if (isDistortScreenUVMode) + { + flags.SetFlagBits(NBPostProcessFlags.FLAG_BIT_POST_DISTORT_SCREEN_UV); + } + else + { + flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_POST_DISTORT_SCREEN_UV); + } + _lastIsDistortScreenUVMode = isDistortScreenUVMode; + } + Vector4 distortVec = new Vector4(distortSpeedIntensity, distortSpeedPosition, distortSpeedRange, + distortTextureMidValue); + Vector4 distortVec2 = new Vector4(distortSpeedMoveSpeedX, distortSpeedMoveSpeedY, 0, 0); + material.SetVector(_distortVecProperty, distortVec); + material.SetVector(_distortVec2Property, distortVec2); + distortSpeedIntensity = 0; + distortSpeedPosition = 0; + distortSpeedRange = 0; + distortSpeedMoveSpeedX = 0; + distortSpeedMoveSpeedY = 0; + } + + private void EndDistortSpeed() + { + flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_DISTORT_SPEED); + } + #endregion + + #region 径向模糊 + // [ShowInInspector] + // [LabelText("径向模糊开关")] + // #if UNITY_EDITOR + // [BinaryInt(8)] + // #endif + public static int radialBlurToggles = 0; + private readonly int _radialBlurVecProperty = Shader.PropertyToID("_RadialBlurVec"); + public static float radialBlurIntensity = 0; + public static float radialBlurPos = 0; + public static float radialBlurRange = 0; + public static int radialBlurSampleCount = 4; + public static bool isRadialBlurByDistort = false; + private bool _lastIsRadialBlurByDistort = false; + + private bool _lastIsRadialBlur = false; + + private void InitRadialBlur() + { + // Debug.Log("InitRB"); + flags.SetFlagBits(NBPostProcessFlags.FLAG_BIT_RADIALBLUR); + } + + private void UpdateRadialBlur() + { + if (_lastIsRadialBlurByDistort != isRadialBlurByDistort) + { + if (isRadialBlurByDistort) + { + flags.SetFlagBits(NBPostProcessFlags.FLAG_BIT_RADIALBLUR_BY_DISTORT); + } + else + { + flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_RADIALBLUR_BY_DISTORT); + } + + _lastIsRadialBlurByDistort = isRadialBlurByDistort; + } + Vector4 radialBlurVec = new Vector4(radialBlurIntensity*0.1f/radialBlurSampleCount, radialBlurPos, radialBlurRange, radialBlurSampleCount); + material.SetVector(_radialBlurVecProperty,radialBlurVec); + radialBlurIntensity = 0; + radialBlurSampleCount = 0; + radialBlurPos = 0; + radialBlurRange = 0; + } + + private void EndRadialBlur() + { + // Debug.Log("EndRB"); + flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_RADIALBLUR); + } + + #endregion + + #region 震屏 + #if CINIMACHINE_3_0 + + public static int cameraShakeToggles = 0; + + + private bool _lastIsCameraShake = false; + public static float cameraShakeIntensity = 0; + private void UpdateCameraShake() + { + if (_perlin) + { + _perlin.AmplitudeGain = cameraShakeIntensity; + } + + cameraShakeIntensity = 0; + // #if UNITY_EDITOR + if (currentVirtualCamera ) + { + CinemachineCore.SoloCamera = currentVirtualCamera; + } + // #endif + // Debug.Log(_perlin.m_AmplitudeGain); + } + + private void EndCameraShake() + { + if (_perlin) + { + _perlin.AmplitudeGain = 0; + } + CinemachineCore.SoloCamera = null; + } + #endif + #endregion + + #region 肌理叠加 + + //肌理图 + //注意,肌理图就是硬切,只有intensity可以做差值。 +// [ShowInInspector] +// [LabelText("肌理开关")] +// #if UNITY_EDITOR +// [BinaryInt(8)] +// #endif + public static int overlayTextureToggles = 0; + + private bool _lastIsOverlayTexture = false; + + public static float overlayTextureIntensity = 0; + + private readonly int _overlayTextureProperty = Shader.PropertyToID("_TextureOverlay"); + private readonly int _overlayTextureStProperty = Shader.PropertyToID("_TextureOverlay_ST"); + private readonly int _overlayTextureIntensityProperty = Shader.PropertyToID("_TextureOverlayIntensity"); + + private void InitOverlayTexture() + { + flags.SetFlagBits(NBPostProcessFlags.FLAG_BIT_OVERLAYTEXTURE); + } + + private void UpdateOverlayTexture() + { + material.SetFloat(_overlayTextureIntensityProperty, overlayTextureIntensity); + overlayTextureIntensity = 0; + } + + private void EndOverlayTexture() + { + flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_OVERLAYTEXTURE); + } + + #endregion + + #region 黑白闪 + +// [ShowInInspector] +// [LabelText("黑白闪开关")] +// #if UNITY_EDITOR +// [BinaryInt(8)] +// #endif + public static int flashToggles = 0; + + private bool _lastIsFlash = false; + + public static float flashDesaturateIntensity = 0; + + public static float flashInvertIntensity = 0; + + public static float flashContrast = 0; + + public static Color flashColor = new Color(1, 1, 1, 1); + + private readonly int _flashDesaturateProperty = Shader.PropertyToID("_DeSaturateIntensity"); + private readonly int _flashInvertProperty = Shader.PropertyToID("_InvertIntensity"); + private readonly int _flashContrastProperty = Shader.PropertyToID("_Contrast"); + private readonly int _flashColorProperty = Shader.PropertyToID("_FlashColor"); + + private void InitFlash() + { + flags.SetFlagBits(NBPostProcessFlags.FLAG_BIT_FLASH); + } + + private void UpdateFlash() + { + material.SetFloat(_flashDesaturateProperty, flashDesaturateIntensity); + material.SetFloat(_flashInvertProperty, flashInvertIntensity); + material.SetFloat(_flashContrastProperty, flashContrast); + material.SetColor(_flashColorProperty,flashColor); + flashDesaturateIntensity = 0; + flashInvertIntensity = 0; + flashContrast = 0; + flashColor = Color.white; + } + + private void EndFlash() + { + flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_FLASH); + } + #endregion + + #region 暗角 + +// [ShowInInspector] +// [LabelText("暗角开关")] +// #if UNITY_EDITOR +// [BinaryInt(8)] +// #endif + public static int vignetteToggles = 0; + + private bool _lastIsVignette; + + public static float vignetteIntensity = 0f; + public static float vignetteRoundness = 0f; + public static float vignetteSmothness = 0f; + + private readonly int _vignetteVecProperty = Shader.PropertyToID("_VignetteVec"); + + private void InitVignette() + { + flags.SetFlagBits(NBPostProcessFlags.FLAG_BIT_VIGNETTE); + } + + + private void UpdateVignette() + { + Vector4 vignetteVec = new Vector4(vignetteIntensity, vignetteRoundness, vignetteSmothness, 0); + material.SetVector(_vignetteVecProperty,vignetteVec); + vignetteIntensity = 0; + vignetteRoundness = 0; + vignetteSmothness = 0; + } + + private void EndVignette() + { + flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_VIGNETTE); + } + + + #endregion + + + #if UNITY_EDITOR + void EditorUpdate() + { + if (!Application.isPlaying) + { + LateUpdate();//每帧Update会导致SceneView闪 + } + } + + public void ReRegistEditorUpdate() + { + EditorApplication.update -= EditorUpdate; + EditorApplication.update += EditorUpdate; + } + #endif + +} + + diff --git a/Packages/NBPostProcessing/Runtime/PostProcessingManager.cs.meta b/Packages/NBPostProcessing/Runtime/PostProcessingManager.cs.meta new file mode 100644 index 00000000..40820cf7 --- /dev/null +++ b/Packages/NBPostProcessing/Runtime/PostProcessingManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fe30e455c04f33342bb3d1c227855682 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBPostProcessing/Runtime/ScreenColorRenderPass.cs b/Packages/NBPostProcessing/Runtime/ScreenColorRenderPass.cs new file mode 100644 index 00000000..e990aaec --- /dev/null +++ b/Packages/NBPostProcessing/Runtime/ScreenColorRenderPass.cs @@ -0,0 +1,189 @@ +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; +using System.Reflection; + +namespace MhRender.RendererFeatures +{ + public class ScreenColorRenderPass : ScriptableRenderPass + { +#if UNIVERSAL_RP_13_1_2_OR_NEWER + private RTHandle _screenColorHandle; + private RTHandle _tempRTHandle; +#else + private RenderTargetIdentifier _screenColorHandle; + private static readonly int _screenColorRTID = Shader.PropertyToID("_screenColorRT"); + private RenderTargetIdentifier _tempRTHandle = new RenderTargetIdentifier(_tempRTID); + private static readonly int _tempRTID = Shader.PropertyToID("CopyColorRT"); + + +#endif + private ProfilingSampler _profilingSampler; + private readonly Downsampling _downSampling; + readonly Material _material; + private static readonly int CameraTexture = Shader.PropertyToID("_CameraTexture"); + private static readonly int SampleOffset = Shader.PropertyToID("_SampleOffset"); + + public ScreenColorRenderPass(Material material, Downsampling downSampling) + { + _material = material; + _downSampling = downSampling; + } + + +#if UNIVERSAL_RP_13_1_2_OR_NEWER + public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData) + { + ConfigureTarget(_screenColorHandle); + + } + + public void SetUp(RTHandle colorHandle) + { + _profilingSampler ??= new ProfilingSampler("ScreenColorRender"); + _screenColorHandle = colorHandle; + RenderTextureDescriptor descriptor = _screenColorHandle.rt.descriptor; + descriptor.autoGenerateMips = true; + descriptor.useMipMap = true; + switch (_downSampling) + { + case Downsampling._2xBilinear: + descriptor.width /= 2; + descriptor.height /= 2; + break; + case Downsampling._4xBilinear: + descriptor.width /= 4; + descriptor.height /= 4; + break; + case Downsampling._4xBox: + descriptor.width /= 4; + descriptor.height /= 4; + break; + } + RenderingUtils.ReAllocateIfNeeded(ref _tempRTHandle, descriptor,name:"CopyColorRT"); + } + + +#else + + FieldInfo cameraColorAttachment = typeof(UniversalRenderer).GetField("m_ActiveCameraColorAttachment", BindingFlags.NonPublic|BindingFlags.Instance); + + + public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData) + { + + var renderer = (UniversalRenderer)renderingData.cameraData.renderer; + + // cmd.SetGlobalTexture(_screenColorRTID,_screenColorHandle); + SetUpCopyColorRT(renderer,renderingData.cameraData.cameraTargetDescriptor,cmd); + ConfigureTarget(_tempRTHandle); + ConfigureClear(ClearFlag.Color, Color.clear); + } + + public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor) + { + } + + public void SetUp(ScriptableRenderer renderer) + { + RenderTargetHandle value = (RenderTargetHandle)cameraColorAttachment.GetValue(renderer); + _screenColorHandle = value.Identifier(); + // _screenColorHandle = colorTarget; + } + + public void SetUpCopyColorRT(ScriptableRenderer renderer,RenderTextureDescriptor descriptor ,CommandBuffer cmd) + { + descriptor.autoGenerateMips = true; + descriptor.useMipMap = true; + switch (_downSampling) + { + case Downsampling._2xBilinear: + descriptor.width /= 2; + descriptor.height /= 2; + break; + case Downsampling._4xBilinear: + descriptor.width /= 4; + descriptor.height /= 4; + break; + case Downsampling._4xBox: + descriptor.width /= 4; + descriptor.height /= 4; + break; + } + cmd.GetTemporaryRT( _tempRTID, descriptor,FilterMode.Bilinear); + } + + public override void OnCameraCleanup(CommandBuffer cmd) + { + cmd.ReleaseTemporaryRT(_tempRTID); + } +#endif + + public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) + { + if (!(renderingData.cameraData.cameraType == CameraType.Game || renderingData.cameraData.cameraType == CameraType.SceneView)) + return; + if (_material == null) + return; + CommandBuffer cmd = CommandBufferPool.Get(); + + using (new ProfilingScope(cmd, _profilingSampler)) + { +#if UNIVERSAL_RP_13_1_2_OR_NEWER + + _material.SetTexture(CameraTexture, _screenColorHandle); + switch (_downSampling) + { + case Downsampling._2xBilinear: + Blitter.BlitTexture(cmd, _screenColorHandle, _tempRTHandle, _material, 0); + break; + case Downsampling._4xBilinear: + Blitter.BlitTexture(cmd, _screenColorHandle, _tempRTHandle, _material, 0); + break; + case Downsampling._4xBox: + _material.SetFloat(SampleOffset,2); + Blitter.BlitTexture(cmd, _screenColorHandle, _tempRTHandle, _material, 1); + break; + default: + Blitter.BlitTexture(cmd, _screenColorHandle, _tempRTHandle, _material, 0); + break; + } +#else + cmd.SetGlobalTexture(_screenColorRTID,_screenColorHandle); + + _material.SetTexture(CameraTexture,Shader.GetGlobalTexture(_screenColorRTID)); + cmd.SetRenderTarget(_tempRTHandle); + switch (_downSampling) + { + case Downsampling._2xBilinear: + cmd.DrawMesh(RenderingUtils.fullscreenMesh, Matrix4x4.identity, _material, 0,0); + break; + case Downsampling._4xBilinear: + cmd.DrawMesh(RenderingUtils.fullscreenMesh, Matrix4x4.identity, _material, 0,0); + break; + case Downsampling._4xBox: + _material.SetFloat(SampleOffset,2); + cmd.DrawMesh(RenderingUtils.fullscreenMesh, Matrix4x4.identity, _material, 0,1); + break; + default: + cmd.DrawMesh(RenderingUtils.fullscreenMesh, Matrix4x4.identity, _material, 0,0); + break; + } + +#endif + cmd.SetGlobalTexture("_ScreenColorCopy1", _tempRTHandle); + } + + context.ExecuteCommandBuffer(cmd); + cmd.Clear(); + CommandBufferPool.Release(cmd); + } + + public void Dispose() + { + #if UNIVERSAL_RP_13_1_2_OR_NEWER + _tempRTHandle?.Release(); + #endif + } + } +} \ No newline at end of file diff --git a/Packages/NBPostProcessing/Runtime/ScreenColorRenderPass.cs.meta b/Packages/NBPostProcessing/Runtime/ScreenColorRenderPass.cs.meta new file mode 100644 index 00000000..ef85a01b --- /dev/null +++ b/Packages/NBPostProcessing/Runtime/ScreenColorRenderPass.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ff8358dc3f3531d4c92a43a49d07f36c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBPostProcessing/Runtime/com.xuanxuan.nb.postprocessing.asmdef b/Packages/NBPostProcessing/Runtime/com.xuanxuan.nb.postprocessing.asmdef new file mode 100644 index 00000000..bdec4d46 --- /dev/null +++ b/Packages/NBPostProcessing/Runtime/com.xuanxuan.nb.postprocessing.asmdef @@ -0,0 +1,30 @@ +{ + "name": "com.xuanxuan.nb.postprocessing", + "rootNamespace": "", + "references": [ + "GUID:df380645f10b7bc4b97d4f5eb6303d95", + "GUID:15fc0a57446b3144c949da3e2b9737a9", + "GUID:4307f53044263cf4b835bd812fc161a4", + "GUID:8f9e4d586616f13449cfeb86c5f704c2" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [ + { + "name": "com.unity.cinemachine", + "expression": "3.0", + "define": "CINIMACHINE_3_0" + }, + { + "name": "com.unity.render-pipelines.universal", + "expression": "13.1.2", + "define": "UNIVERSAL_RP_13_1_2_OR_NEWER" + } + ], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Packages/NBPostProcessing/Runtime/com.xuanxuan.nb.postprocessing.asmdef.meta b/Packages/NBPostProcessing/Runtime/com.xuanxuan.nb.postprocessing.asmdef.meta new file mode 100644 index 00000000..0cc23c51 --- /dev/null +++ b/Packages/NBPostProcessing/Runtime/com.xuanxuan.nb.postprocessing.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a1f23b61b189bd949adfd0f7a353734f +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBPostProcessing/Shader.meta b/Packages/NBPostProcessing/Shader.meta new file mode 100644 index 00000000..67b64f3f --- /dev/null +++ b/Packages/NBPostProcessing/Shader.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b96c6f78e9ea0924b92677f2c4812124 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBPostProcessing/Shader/ColorBlit.shader b/Packages/NBPostProcessing/Shader/ColorBlit.shader new file mode 100644 index 00000000..78a0f8f0 --- /dev/null +++ b/Packages/NBPostProcessing/Shader/ColorBlit.shader @@ -0,0 +1,238 @@ +Shader "XuanXuan/ColorBlit" +{ + HLSLINCLUDE + #pragma target 2.0 + #pragma editor_sync_compilation + #pragma multi_compile _ DISABLE_TEXTURE2D_X_ARRAY + #pragma multi_compile _ BLIT_SINGLE_SLICE + // Core.hlsl for XR dependencies + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl" + ENDHLSL + + SubShader + { + Tags + { + "RenderType"="Opaque" "RenderPipeline" = "UniversalPipeline" + } + ZWrite Off Cull Off + Pass + { + Name "ColorBlitPass0" + + HLSLPROGRAM + #pragma vertex vert + // #pragma vertex vert + // #pragma fragment FragNearest + #pragma fragment frag + #pragma enable_d3d11_debug_symbols + + Texture2D _CameraTexture; + // Texture2D _CameraTexture; + // + // struct MyAttributes + // { + // float4 positionOS : POSITION; + // float4 texCoord : TEXCOORD0; + // }; + + // + // Varyings vert(MyAttributes IN) + // { + // Varyings OUT = (Varyings)0; + // OUT.positionCS = float4(IN.positionOS.xyz,1); + // half4 clipVertex = OUT.positionCS/OUT.positionCS.w; + // OUT.texcoord = ComputeScreenPos(clipVertex); + // return OUT; + // } + + Varyings vert(Attributes input)//避开官方_BlitScaleBias为0的错误。 + { + Varyings output; + UNITY_SETUP_INSTANCE_ID(input); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + + #if SHADER_API_GLES + float4 pos = input.positionOS; + float2 uv = input.uv; + #else + float4 pos = GetFullScreenTriangleVertexPosition(input.vertexID); + float2 uv = GetFullScreenTriangleTexCoord(input.vertexID); + #endif + + output.positionCS = pos; + // output.texcoord = uv * _BlitScaleBias.xy + _BlitScaleBias.zw; + output.texcoord = uv; + return output; + } + + half4 frag (Varyings input) : SV_Target + { + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); + + float4 color = SAMPLE_TEXTURE2D_X(_CameraTexture, sampler_LinearRepeat, input.texcoord); + + return color; + } + ENDHLSL + } + Pass + { + Name "BoxDownsample" + + ZWrite Off + Cull Off + + HLSLPROGRAM + // #pragma vertex Vert + #pragma vertex vert + #pragma fragment FragBoxDownsample + #pragma enable_d3d11_debug_symbols + + + Texture2D _CameraTexture; + SAMPLER(sampler_CameraTexture); + + #if UNITY_VERSION < 202320 + float4 _BlitTexture_TexelSize; + #endif + + Varyings vert(Attributes input)//避开官方_BlitScaleBias为0的错误。 + { + Varyings output; + UNITY_SETUP_INSTANCE_ID(input); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + + #if SHADER_API_GLES + float4 pos = input.positionOS; + float2 uv = input.uv; + #else + float4 pos = GetFullScreenTriangleVertexPosition(input.vertexID); + float2 uv = GetFullScreenTriangleTexCoord(input.vertexID); + #endif + + output.positionCS = pos; + // output.texcoord = uv * _BlitScaleBias.xy + _BlitScaleBias.zw; + output.texcoord = uv; + return output; + } + + float _SampleOffset; + + half4 FragBoxDownsample(Varyings input) : SV_Target + { + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); + + float2 uv = UnityStereoTransformScreenSpaceTex(input.texcoord); + float4 d = _BlitTexture_TexelSize.xyxy * float4(-_SampleOffset, -_SampleOffset, _SampleOffset, + _SampleOffset); + + half4 s; + + s = SAMPLE_TEXTURE2D_X(_CameraTexture, sampler_CameraTexture, uv + d.xy); + s += SAMPLE_TEXTURE2D_X(_CameraTexture, sampler_CameraTexture, uv + d.zy); + s += SAMPLE_TEXTURE2D_X(_CameraTexture, sampler_CameraTexture, uv + d.xw); + s += SAMPLE_TEXTURE2D_X(_CameraTexture, sampler_CameraTexture, uv + d.zw); + + return s * 0.25h; + } + ENDHLSL + } + Pass + { + Name "ColorBlitPass_URP_13_1_2_OR_OLDER" + + HLSLPROGRAM + #pragma vertex vert + // #pragma vertex vert + // #pragma fragment FragNearest + #pragma fragment frag + #pragma enable_d3d11_debug_symbols + + Texture2D _CameraTexture; + // Texture2D _CameraTexture; + + struct MyAttributes + { + float4 positionOS : POSITION; + float4 texCoord : TEXCOORD0; + }; + + + Varyings vert(MyAttributes IN) + { + Varyings OUT = (Varyings)0; + OUT.positionCS = float4(IN.positionOS.xyz,1); + half4 clipVertex = OUT.positionCS/OUT.positionCS.w; + OUT.texcoord = ComputeScreenPos(clipVertex); + return OUT; + } + half4 frag (Varyings input) : SV_Target + { + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); + + float4 color = SAMPLE_TEXTURE2D_X(_CameraTexture, sampler_LinearRepeat, input.texcoord); + + return color; + } + ENDHLSL + } + Pass + { + Name "BoxDownsample_URP_13_1_2_OR_OLDER" + + ZWrite Off + Cull Off + + HLSLPROGRAM + #pragma vertex vert + #pragma fragment FragBoxDownsample + #pragma enable_d3d11_debug_symbols + + + Texture2D _CameraTexture; + SAMPLER(sampler_CameraTexture); + + #if UNITY_VERSION < 202320 + float4 _BlitTexture_TexelSize; + #endif + + + float _SampleOffset; + struct MyAttributes + { + float4 positionOS : POSITION; + float4 texCoord : TEXCOORD0; + }; + + Varyings vert(MyAttributes IN) + { + Varyings OUT = (Varyings)0; + OUT.positionCS = float4(IN.positionOS.xyz,1); + half4 clipVertex = OUT.positionCS/OUT.positionCS.w; + OUT.texcoord = ComputeScreenPos(clipVertex); + return OUT; + } + + half4 FragBoxDownsample(Varyings input) : SV_Target + { + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); + + float2 uv = UnityStereoTransformScreenSpaceTex(input.texcoord); + float4 d = _BlitTexture_TexelSize.xyxy * float4(-_SampleOffset, -_SampleOffset, _SampleOffset, + _SampleOffset); + + half4 s; + + s = SAMPLE_TEXTURE2D_X(_CameraTexture, sampler_CameraTexture, uv + d.xy); + s += SAMPLE_TEXTURE2D_X(_CameraTexture, sampler_CameraTexture, uv + d.zy); + s += SAMPLE_TEXTURE2D_X(_CameraTexture, sampler_CameraTexture, uv + d.xw); + s += SAMPLE_TEXTURE2D_X(_CameraTexture, sampler_CameraTexture, uv + d.zw); + + return s * 0.25h; + } + ENDHLSL + } + } +} \ No newline at end of file diff --git a/Packages/NBPostProcessing/Shader/ColorBlit.shader.meta b/Packages/NBPostProcessing/Shader/ColorBlit.shader.meta new file mode 100644 index 00000000..2da1d64c --- /dev/null +++ b/Packages/NBPostProcessing/Shader/ColorBlit.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3e92fe624a4f13d4eadc7753e236006a +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBPostProcessing/Shader/ColorBufferBlit.shader b/Packages/NBPostProcessing/Shader/ColorBufferBlit.shader new file mode 100644 index 00000000..8642524a --- /dev/null +++ b/Packages/NBPostProcessing/Shader/ColorBufferBlit.shader @@ -0,0 +1,105 @@ +Shader "XuanXuan/ColorBufferBlit" +{ + HLSLINCLUDE + #pragma target 2.0 + #pragma editor_sync_compilation + #pragma multi_compile _ DISABLE_TEXTURE2D_X_ARRAY + #pragma multi_compile _ BLIT_SINGLE_SLICE + // Core.hlsl for XR dependencies + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl" + ENDHLSL + + SubShader + { + Tags + { + "RenderType"="Opaque" "RenderPipeline" = "UniversalPipeline" + } + ZWrite Off Cull Off + Pass + { + Name "ColorBlitPass0" + + HLSLPROGRAM + // #pragma vertex Vert + #pragma vertex vert + // #pragma fragment FragNearest + #pragma fragment frag + #pragma enable_d3d11_debug_symbols + + + Texture2D _CameraColorTexture; + SAMPLER(sampler_CameraColorTexture); + + struct MyAttributes + { + float4 positionOS : POSITION; + float4 texCoord : TEXCOORD0; + }; + + + Varyings vert(MyAttributes IN) + { + Varyings OUT = (Varyings)0; + OUT.positionCS = float4(IN.positionOS.xyz,1); + half4 clipVertex = OUT.positionCS/OUT.positionCS.w; + OUT.texcoord = ComputeScreenPos(clipVertex); + return OUT; + } + half4 frag (Varyings input) : SV_Target + { + // UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); + float4 color = SAMPLE_TEXTURE2D_X(_CameraColorTexture, sampler_LinearRepeat, input.texcoord); + + + return color; + } + ENDHLSL + } + Pass + { + Name "BoxDownsample" + + ZWrite Off + Cull Off + + HLSLPROGRAM + #pragma vertex Vert + #pragma fragment FragBoxDownsample + #pragma enable_d3d11_debug_symbols + + + // Texture2D _CameraTexture; + // SAMPLER(sampler_CameraTexture); + Texture2D _CameraColorTexture; + SAMPLER(sampler_CameraColorTexture); + + #if UNITY_VERSION < 202320 + float4 _BlitTexture_TexelSize; + #endif + + + float _SampleOffset; + + half4 FragBoxDownsample(Varyings input) : SV_Target + { + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); + + float2 uv = UnityStereoTransformScreenSpaceTex(input.texcoord); + float4 d = _BlitTexture_TexelSize.xyxy * float4(-_SampleOffset, -_SampleOffset, _SampleOffset, + _SampleOffset); + + half4 s; + + s = SAMPLE_TEXTURE2D_X(_CameraColorTexture, sampler_CameraColorTexture, uv + d.xy); + s += SAMPLE_TEXTURE2D_X(_CameraColorTexture, sampler_CameraColorTexture, uv + d.zy); + s += SAMPLE_TEXTURE2D_X(_CameraColorTexture, sampler_CameraColorTexture, uv + d.xw); + s += SAMPLE_TEXTURE2D_X(_CameraColorTexture, sampler_CameraColorTexture, uv + d.zw); + + return s * 0.25h; + } + ENDHLSL + } + } +} \ No newline at end of file diff --git a/Packages/NBPostProcessing/Shader/ColorBufferBlit.shader.meta b/Packages/NBPostProcessing/Shader/ColorBufferBlit.shader.meta new file mode 100644 index 00000000..9e84e657 --- /dev/null +++ b/Packages/NBPostProcessing/Shader/ColorBufferBlit.shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3150dab783854cd6b791d5db3be4a966 +timeCreated: 1747582276 \ No newline at end of file diff --git a/Packages/NBPostProcessing/Shader/DistortSpeedNoise.png b/Packages/NBPostProcessing/Shader/DistortSpeedNoise.png new file mode 100644 index 00000000..6e092a3a Binary files /dev/null and b/Packages/NBPostProcessing/Shader/DistortSpeedNoise.png differ diff --git a/Packages/NBPostProcessing/Shader/DistortSpeedNoise.png.meta b/Packages/NBPostProcessing/Shader/DistortSpeedNoise.png.meta new file mode 100644 index 00000000..6cb127ae --- /dev/null +++ b/Packages/NBPostProcessing/Shader/DistortSpeedNoise.png.meta @@ -0,0 +1,156 @@ +fileFormatVersion: 2 +guid: 7f808d0c8608b954d8f20cb4132c3049 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + 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: 4 + 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: 4 + 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: 4 + 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 + - serializedVersion: 4 + buildTarget: Android + 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: 4 + buildTarget: iOS + 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: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBPostProcessing/Shader/Disturbance.shader b/Packages/NBPostProcessing/Shader/Disturbance.shader new file mode 100644 index 00000000..bca5c29a --- /dev/null +++ b/Packages/NBPostProcessing/Shader/Disturbance.shader @@ -0,0 +1,113 @@ +Shader "XuanXuan/Disturbance" +{ + Properties + { + [MhGroup(Main)]_mainTex("Main", float) = 0 + [MhTexture(Main)] _MaskMap("Mask Map", 2D) = "white" {} + + [MhTexture(Main,_Strength,on)]_NoiseMap("Noise Map", 2D) = "white"{} + [HideInInspector]_Strength("Strength", Range(-0.2,0.2)) =0.1 + [MhToggleKeyword(Main,_PARTICLE_CUSTOMDATA_ON)]_ParticleCustomDataOn("Particle customData Strength", float) = 0 + [HideInInspector]_SurfaceType("surfaceType",float)=1 + [HideInInspector] _QueueOffset("Queue offset", Float) = 0.0 + } + + // The SubShader block containing the Shader code. + SubShader + { + // SubShader Tags define when and under which conditions a SubShader block or + // a pass is executed. + Tags + { + "RenderType" = "Transparent" "RenderPipeline" = "UniversalPipeline" "Queue" = "Transparent" "IgnoreProjector" = "True" + } + + Pass + { + Blend SrcAlpha OneMinusSrcAlpha + //ZTest Always + Cull Off + HLSLPROGRAM + //gpuInstancing on + #pragma multi_compile_instancing + #pragma instancing_options renderinglayer + #pragma multi_compile _ DOTS_INSTANCING_ON + #pragma target 3.5 DOTS_INSTANCING_ON + + #pragma shader_feature_local_fragment _PARTICLE_CUSTOMDATA_ON + #pragma enable_d3d11_debug_symbols + + + // This line defines the name of the vertex shader. + #pragma vertex vert + // This line defines the name of the fragment shader. + #pragma fragment frag + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + + + // This example uses the Attributes structure as an input structure in + // the vertex shader. + struct Attributes + { + float4 positionOS : POSITION; + float4 uv : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct Varyings + { + // The positions in this struct must have the SV_POSITION semantic. + float4 positionHCS : SV_POSITION; + float4 uv :TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + Texture2D _NoiseMap; + SAMPLER(sampler_NoiseMap); + + Texture2D _MaskMap; + SAMPLER(sampler_MaskMap); + float _Strength; + + CBUFFER_START(UnityPerMaterial) + + float4 _NoiseMap_ST; + + CBUFFER_END + + + Varyings vert(Attributes IN) + { + Varyings OUT; + // Declaring the output object (OUT) with the Varyings struct. + + UNITY_SETUP_INSTANCE_ID(IN); + UNITY_TRANSFER_INSTANCE_ID(IN, OUT); + + OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz); + OUT.uv = IN.uv; + return OUT; + } + + half4 frag(Varyings IN) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(IN); + + half2 screenSpaceUV = IN.positionHCS.xy / _ScaledScreenParams.xy; + const half2 noiseUV = screenSpaceUV * _NoiseMap_ST.xy + _NoiseMap_ST.zw; + + half noise = SAMPLE_TEXTURE2D(_NoiseMap, sampler_NoiseMap, noiseUV).r * 2 - 1; + half mask = SAMPLE_TEXTURE2D(_MaskMap, sampler_MaskMap, IN.uv.xy).r; + noise = lerp(0, noise, mask); + + //noise = (noise * _Strength * 5) * 0.5 + 0.5; + noise = (noise * _Strength) * 1.25 + 0.5; + + return half4(noise.xxx, 1.0); + } + ENDHLSL + } + } + customEditor "ShaderEditor.MhBaseShaderGUI" +} \ No newline at end of file diff --git a/Packages/NBPostProcessing/Shader/Disturbance.shader.meta b/Packages/NBPostProcessing/Shader/Disturbance.shader.meta new file mode 100644 index 00000000..ebf3b63b --- /dev/null +++ b/Packages/NBPostProcessing/Shader/Disturbance.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1b530af6d4d97eb4c8f3725d4cd3e9b8 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBPostProcessing/Shader/FullScreenDisturbance.shader b/Packages/NBPostProcessing/Shader/FullScreenDisturbance.shader new file mode 100644 index 00000000..43aa7062 --- /dev/null +++ b/Packages/NBPostProcessing/Shader/FullScreenDisturbance.shader @@ -0,0 +1,84 @@ +Shader "XuanXuan/FullScreenDisturbance" +{ + Properties + { + _Strength("Strength", Range(-0.2,0.2)) =0 + _BaseMap("Base Map", 2D) = "white" + //_Mask("Mask", 2D) = "white" + + } + + // The SubShader block containing the Shader code. + SubShader + { + // SubShader Tags define when and under which conditions a SubShader block or + // a pass is executed. + Tags + { + "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" + } + + Pass + { + + stencil + { + Ref 1 + Comp equal + Pass keep + } + HLSLPROGRAM + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + // This line defines the name of the vertex shader. + #pragma vertex vert + // This line defines the name of the fragment shader. + #pragma fragment frag + + Texture2D _BlitTexture; + SAMPLER(sampler_BlitTexture); + Texture2D _BaseMap; + SAMPLER(sampler_BaseMap); + Texture2D _Mask; + SAMPLER(simpler_Mask); + float _Strength; + + struct Attributes + { + #if UNITY_ANY_INSTANCING_ENABLED + uint instanceID : INSTANCEID_SEMANTIC; + #endif + uint vertexID : VERTEXID_SEMANTIC; + }; + + struct Varyings + { + float4 position : SV_POSITION; + float2 uv : TEXCOORD0; + #if UNITY_ANY_INSTANCING_ENABLED + uint instanceID : CUSTOM_INSTANCE_ID; + #endif + }; + + + Varyings vert(Attributes input) + { + Varyings output; + output.position = GetFullScreenTriangleVertexPosition(input.vertexID, UNITY_NEAR_CLIP_VALUE); + output.uv = output.position.xy * 0.5 + 0.5; + return output; + } + + float4 frag(Varyings packedInput):SV_TARGET + { + float2 baseUV = packedInput.position / _ScreenParams.xy; + float3 noise = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, baseUV); + noise=lerp(0,noise,noise.b); + baseUV += noise.xy * _Strength; + return SAMPLE_TEXTURE2D(_BlitTexture, sampler_BlitTexture, baseUV); + } + ENDHLSL + } + } + +} \ No newline at end of file diff --git a/Packages/NBPostProcessing/Shader/FullScreenDisturbance.shader.meta b/Packages/NBPostProcessing/Shader/FullScreenDisturbance.shader.meta new file mode 100644 index 00000000..26011dd2 --- /dev/null +++ b/Packages/NBPostProcessing/Shader/FullScreenDisturbance.shader.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 126dad763ce350945945655d5c062248 +ShaderImporter: + externalObjects: {} + defaultTextures: + - _BaseMap: {instanceID: 0} + - _Mask: {instanceID: 0} + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBPostProcessing/Shader/HLSL.meta b/Packages/NBPostProcessing/Shader/HLSL.meta new file mode 100644 index 00000000..bbfc38db --- /dev/null +++ b/Packages/NBPostProcessing/Shader/HLSL.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e73bff430617bbc44ae5b87fb0fa9abf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBPostProcessing/Shader/HLSL/PostProcessingFlags.hlsl b/Packages/NBPostProcessing/Shader/HLSL/PostProcessingFlags.hlsl new file mode 100644 index 00000000..dcd3a04b --- /dev/null +++ b/Packages/NBPostProcessing/Shader/HLSL/PostProcessingFlags.hlsl @@ -0,0 +1,28 @@ +#ifndef POST_PROCESSING_FLAGS +#define POST_PROCESSING_FLAGS + + +#if defined(CUSTOM_POSTPROCESS) + uint _NBPostProcessFlags; + #define FLAG_BIT_NB_POSTPROCESS_ON (1 << 0) + #define FLAG_BIT_DISTORT_SPEED (1 << 1) + #define FLAG_BIT_OVERLAYTEXTURE (1 << 2) + #define FLAG_BIT_FLASH (1 << 3) + #define FLAG_BIT_CHORATICABERRAT (1 << 4) + #define FLAG_BIT_RADIALBLUR (1 << 5) + #define FLAG_BIT_VIGNETTE (1 << 6) + #define FLAG_BIT_OVERLAYTEXTURE_POLLARCOORD (1 << 7) + #define FLAG_BIT_OVERLAYTEXTURE_MASKMAP (1 << 8) + #define FLAG_BIT_POST_DISTORT_SCREEN_UV (1 << 9) + #define FLAG_BIT_RADIALBLUR_BY_DISTORT (1 << 10) + #define FLAG_BIT_CHORATICABERRAT_BY_DISTORT (1 << 11) + + + + bool CheckLocalFlags(uint bits) + { + return (_NBPostProcessFlags&bits) != 0; + } +#endif + +#endif \ No newline at end of file diff --git a/Packages/NBPostProcessing/Shader/HLSL/PostProcessingFlags.hlsl.meta b/Packages/NBPostProcessing/Shader/HLSL/PostProcessingFlags.hlsl.meta new file mode 100644 index 00000000..6a154330 --- /dev/null +++ b/Packages/NBPostProcessing/Shader/HLSL/PostProcessingFlags.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8d59b331ef0707e49a98c91244bd0c1a +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBPostProcessing/Shader/NBPostProcessUber.shader b/Packages/NBPostProcessing/Shader/NBPostProcessUber.shader new file mode 100644 index 00000000..0eb0add2 --- /dev/null +++ b/Packages/NBPostProcessing/Shader/NBPostProcessUber.shader @@ -0,0 +1,377 @@ +Shader "XuanXuan/Postprocess/NBPostProcessUber" +{ + Properties + { +// [MainTexture] _BaseMap("Base Map", 2D) = "white" + _SpeedDistortMap("速度径向扭曲贴图", 2D) = "white" + _SpeedDistortVec("速度径向 x强度y位置z范围w速度",Vector) = (0,0,0,0) + _SpeedDistortVec2("速度径向 x:uvX速度 y:uvY速度",Vector) = (0,0,0,0) + + _TextureOverlay("肌理附加图",2D) = "white" + _TextureOverlayIntensity("肌理附加强度",Float) = 0 + _TextureOverlayAnim("机理图动画",Vector) = (0,0,0,0) + _TextureOverlayMask("肌理图蒙板",2D) = "white" + + _InvertIntensity("反向强度",Float) = 0 + _DeSaturateIntensity("饱和度强度",Float) = 0 + _Contrast("对比度",Float) = 1 + _FlashColor("闪颜色", Vector) = (1, 1, 1, 1) + + + [HideInInspector] _NBPostProcessFlags("_NBPostProcessFlags", Integer) = 0 + _ChromaticAberrationVector("色散矢量",Vector) = (1,0,0,0) + + _CustomScreenCenter("自定义屏幕中心",Vector) = (0.5,0.5,0,0) + _RadialBlurVec("径向模糊矢量 x强度",Vector) = (1,0,0,0) + _VignetteVec("暗角矢量 x强度,y圆度,z光滑度",Vector) = (1,0,0,0) + + + //不知道为什么,这里写成Color老是出错。 + _VignetteColor("暗角颜色",Vector) = (0.0,0.0,0.0,1.0) + + } + + // The SubShader block containing the Shader code. + SubShader + { + // SubShader Tags define when and under which conditions a SubShader block or + // a pass is executed. + Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" } + + Pass + { + Blend SrcAlpha OneMinusSrcAlpha + HLSLPROGRAM + // This line defines the name of the vertex shader. + #pragma vertex vert + // This line defines the name of the fragment shader. + #pragma fragment frag + #define CUSTOM_POSTPROCESS + // #define _POLARCOORDINATES + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + + #include "HLSL/PostProcessingFlags.hlsl" + #include "Packages/com.xuanxuan.render.utility/Shader/HLSL/XuanXuan_Utility.hlsl" + + // This example uses the Attributes structure as an input structure in + // the vertex shader. + + + struct Attributes + { + float4 positionOS : POSITION; + }; + + struct Varyings + { + // The positions in this struct must have the SV_POSITION semantic. + float4 positionHCS : SV_POSITION; + half2 uv :TEXCOORD0; + }; + + TEXTURE2D(_ScreenColorCopy1); + SAMPLER(_linear_clamp); + SAMPLER(sampler_ScreenColorCopy1); + + TEXTURE2D(_DisturbanceMaskTex); + SAMPLER(sampler_DisturbanceMaskTex); + + Texture2D _SpeedDistortMap; + SAMPLER(sampler_SpeedDistortMap); + + TEXTURE2D(_TextureOverlay); + SAMPLER(sampler_TextureOverlay); + TEXTURE2D(_TextureOverlayMask); + SAMPLER(sampler_TextureOverlayMask); + + #if UNITY_VERSION < 202210 + SAMPLER(sampler_LinearClamp); + #endif + + CBUFFER_START(UnityPerMaterial) + + float4 _SpeedDistortMap_ST; + half4 _SpeedDistortVec; + float4 _SpeedDistortVec2; + + half4 _TextureOverlay_ST; + half _TextureOverlayIntensity; + half4 _TextureOverlayMask_ST; + half4 _TextureOverlayAnim; + + half _InvertIntensity; + half _DeSaturateIntensity; + half _Contrast; + half3 _FlashColor; + + half4 _ChromaticAberrationVec; + half4 _CustomScreenCenter; + half4 _RadialBlurVec; + half4 _VignetteVec; + half4 _VignetteColor; + + CBUFFER_END + + half4 SAMPLE_TEXTURE2D_CHORATICABERRAT(half2 screenUV,half2 distortUV,half2 blurVec,half distToCenter) + { + if(CheckLocalFlags(FLAG_BIT_CHORATICABERRAT_BY_DISTORT)) + { + blurVec = blurVec*0.25*_ChromaticAberrationVec.x; + } + else + { + half intensity = 1; + half range = _ChromaticAberrationVec.z*0.5f; + intensity = NB_Remap(distToCenter,_ChromaticAberrationVec.y-range,_ChromaticAberrationVec.y+range,0,1); + blurVec = blurVec*0.25*_ChromaticAberrationVec.x*intensity; + } + half r = SAMPLE_TEXTURE2D_X(_ScreenColorCopy1, sampler_LinearClamp, screenUV + distortUV ).x; + half g = SAMPLE_TEXTURE2D_X(_ScreenColorCopy1, sampler_LinearClamp, blurVec + screenUV + distortUV ).y; + half b = SAMPLE_TEXTURE2D_X(_ScreenColorCopy1, sampler_LinearClamp, blurVec * 2.0 + screenUV + distortUV).z; + + half a = dot(blurVec,blurVec)*100000; + return half4(r,g,b,a); + } + + + + Varyings vert(Attributes IN) + { + // Declaring the output object (OUT) with the Varyings struct. + Varyings OUT; + OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz); + half4 clipVertex = OUT.positionHCS/OUT.positionHCS.w; + OUT.uv = ComputeScreenPos(clipVertex); + // Returning the output. + return OUT; + } + + half4 frag(Varyings IN) : SV_Target + { + half2 screenUV = IN.uv; + half2 distortUV = 0; + half2 distortUVWithoutIntensity=0; + + half4 color = 0; + + half2 polarCoordinates = 0; + + //half disturbanceMask = (SAMPLE_TEXTURE2D(_DisturbanceMaskTex, _linear_clamp, screenUV)) * 2 - 1 + 0.00392; //8位0.5校准 + //disturbanceMask *= 0.4; + //half2 disturbanceMask = (SAMPLE_TEXTURE2D(_DisturbanceMaskTex, _linear_clamp, screenUV).xy) * 0.8 - 0.398432; //上面两行合并 + + half2 disturbanceMask = (SAMPLE_TEXTURE2D(_DisturbanceMaskTex, _linear_clamp, screenUV).xy) * 0.8 - 0.4; //上面两行合并 + + + color.a = SimpleSmoothstep(0,0.01,abs(disturbanceMask.x + disturbanceMask.y)); + screenUV += disturbanceMask; + + UNITY_BRANCH + if (!CheckLocalFlags(FLAG_BIT_NB_POSTPROCESS_ON)) + { + color.rgb = SAMPLE_TEXTURE2D(_ScreenColorCopy1, _linear_clamp, screenUV).rgb; + } + + UNITY_BRANCH + if((CheckLocalFlags(FLAG_BIT_DISTORT_SPEED)& (!CheckLocalFlags(FLAG_BIT_POST_DISTORT_SCREEN_UV)))|CheckLocalFlags(FLAG_BIT_OVERLAYTEXTURE_POLLARCOORD)) + { + polarCoordinates= PolarCoordinates(screenUV,_CustomScreenCenter.xy); + } + + + UNITY_BRANCH + if(CheckLocalFlags(FLAG_BIT_DISTORT_SPEED)) + { + _SpeedDistortMap_ST.zw += _SpeedDistortVec2.xy * _Time.y; + // return half4(polarCoordinates,0,1); + half2 distortSpeedUV; + if(CheckLocalFlags(FLAG_BIT_POST_DISTORT_SCREEN_UV)) + { + distortSpeedUV = screenUV* _SpeedDistortMap_ST.xy+_SpeedDistortMap_ST.zw; + half2 noise = SAMPLE_TEXTURE2D(_SpeedDistortMap,sampler_SpeedDistortMap,distortSpeedUV); + noise = noise * 2-1+_SpeedDistortVec.w*0.1; + half distortStrength = _SpeedDistortVec.x * 0.2; + distortUVWithoutIntensity = noise; + distortUV = noise * distortStrength; + + } + else + { + distortSpeedUV = polarCoordinates * _SpeedDistortMap_ST.xy + _SpeedDistortMap_ST.zw; + half noise = SAMPLE_TEXTURE2D(_SpeedDistortMap,sampler_SpeedDistortMap,distortSpeedUV); + noise *= SimpleSmoothstep(_SpeedDistortVec.y,_SpeedDistortVec.y+_SpeedDistortVec.z,(distortSpeedUV.y - _SpeedDistortMap_ST.w)/_SpeedDistortMap_ST.y); + half distortStrength = - _SpeedDistortVec.x * 0.2; + distortUV = normalize(screenUV-_CustomScreenCenter.xy)*noise; + distortUVWithoutIntensity = distortUV; + distortUV *= distortStrength; + } + + + color.a += dot(distortUV,distortUV)*100000; + } + else + { + distortUVWithoutIntensity = disturbanceMask; + } + + // return half4(((dot(distortUV,distortUV)*100000)).rrr,1); + + UNITY_BRANCH + if(CheckLocalFlags(FLAG_BIT_CHORATICABERRAT) || CheckLocalFlags(FLAG_BIT_RADIALBLUR)) + { + float2 blurVec = 0; + half dist = 0; + + if(!CheckLocalFlags(FLAG_BIT_CHORATICABERRAT_BY_DISTORT)|!CheckLocalFlags(FLAG_BIT_RADIALBLUR_BY_DISTORT)) + { + blurVec = _CustomScreenCenter.xy - screenUV; + dist = dot(blurVec,blurVec)*4; + } + + float2 choraticaBerratBlurVec; + if(CheckLocalFlags(FLAG_BIT_CHORATICABERRAT)) + { + if(CheckLocalFlags(FLAG_BIT_CHORATICABERRAT_BY_DISTORT)) + { + choraticaBerratBlurVec = distortUVWithoutIntensity; + } + else + { + choraticaBerratBlurVec = blurVec; + } + } + + + + + if(CheckLocalFlags(FLAG_BIT_RADIALBLUR)) + { + + float2 radialblurVec; + if(CheckLocalFlags(FLAG_BIT_RADIALBLUR_BY_DISTORT)) + { + radialblurVec = distortUVWithoutIntensity*_RadialBlurVec.x; + } + else + { + _RadialBlurVec.z *= 0.5; + half rangeIntensity = NB_Remap(dist,_RadialBlurVec.y-_RadialBlurVec.z,_RadialBlurVec.y+_RadialBlurVec.z,0,1); + rangeIntensity = saturate(rangeIntensity); + radialblurVec = blurVec*_RadialBlurVec.x*rangeIntensity; + } + color.a += dot(blurVec,blurVec)*100; + + half3 acumulateColor = half3(0, 0, 0); + + int iteration = _RadialBlurVec.w; + [unroll(12)] + for(int i = 0;i mats = new List(); + private Shader shader; + private MaterialEditor matEditor; + public List shaderFlags = new List(); + + private int lastFlagBit; + private bool isCustomedStencil = false; + + private StencilValuesConfig _stencilValuesConfig; + + public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] props) + { + //一定要初始化在第一行 + mats.Clear(); + shaderFlags.Clear(); + for (int i = 0; i < materialEditor.targets.Length; i++) + { + var _targetMat = materialEditor.targets[i] as Material; + + mats.Add(_targetMat); + shaderFlags.Add(new W9ParticleShaderFlags(mats[i])); + } + matEditor = materialEditor; + + if (!_stencilValuesConfig) + { + _stencilValuesConfig = AssetDatabase.LoadAssetAtPath("Packages/com.xuanxuan.nb.shaders/Shader/StencilConfig.asset"); + } + matEditor = materialEditor; + isCustomedStencil = false; + helper.Init(materialEditor, props, shaderFlags.ToArray(), mats); + + DrawBigBlockFoldOut(W9ParticleShaderFlags.foldOutBitMeshOption,3,"模式设置", () => DrawMeshOptions()); + DrawBigBlockFoldOut(W9ParticleShaderFlags.foldOutBitMainTexOption,3,"主贴图功能", () => DrawMainTexOptions()); + DrawBigBlockFoldOut(W9ParticleShaderFlags.foldOutBitBaseOption,3,"基本全局功能", () => DrawBaseOptions()); + DrawBigBlockFoldOut(W9ParticleShaderFlags.foldOutBitFeatureOption,3,"特别功能", () => DrawFeatureOptions()); + DrawBigBlockFoldOut(W9ParticleShaderFlags.foldOutTaOption,4,"TA调试", () => DrawTaOptions()); + + //遍历整个场景,看哪些 粒子系统 用了这个材质。会填充m_RenderersUsingThisMaterial + if (mats.Count == 1) + { + CacheRenderersUsingThisMaterial(mats[0], 0); + + + if (!_uieffectEnabled||_uiParticleEnabled) + { + DoVertexStreamsArea(mats[0], m_RenderersUsingThisMaterial, 0);//填充stream和stremList + } + else + { + mats[0].DisableKeyword("_CUSTOMDATA"); + } + } + + DoAfterDraw(); + + + // int flagBit = mat.GetInteger(W9ParticleShaderFlags.FlagsId); + // if (flagBit != lastFlagBit) + // { + // FlagBitTest.Log(mat); + // lastFlagBit = flagBit; + // } + // Debug.Log(mat.GetInt(W9ParticleShaderFlags.FlagsId)); + // Debug.Log(shaderFlag.CheckFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_USETEXCOORD2)); + } + + bool _uieffectEnabled = false; + bool _uiParticleEnabled = false; + bool _noiseEnabled = false;//扭曲 + // bool _uieffectSpriteMode = false; + private MeshSourceMode _meshSourceMode; + private TransparentMode _transparentMode; + public void DrawMeshOptions() + { + // if (shaderFlag.CheckIsUVModeOn(W9ParticleShaderFlags.UVMode.DefaultUVChannel)) + // { + // EditorGUILayout.LabelField("UVMode.DefaultUVChannel"); + // } + // if (shaderFlag.CheckIsUVModeOn(W9ParticleShaderFlags.UVMode.SpecialUVChannel)) + // { + // EditorGUILayout.LabelField("UVMode.SpecialUVChannel"); + // } + // if (shaderFlag.CheckIsUVModeOn(W9ParticleShaderFlags.UVMode.PolarOrTwirl)) + // { + // EditorGUILayout.LabelField("UVMode.PolarOrTwirl"); + // } + // if (shaderFlag.CheckIsUVModeOn(W9ParticleShaderFlags.UVMode.Cylinder)) + // { + // EditorGUILayout.LabelField("UVMode.Cylinder"); + // } + // SetMeshSourceModeToOriginSet();//防止就旧数据被复写。 + + // SetUVModeByOldSettings(); + + helper.DrawPopUp("Mesh来源模式","_MeshSourceMode",_meshSourceModeNames,drawBlock: mode => + { + + _meshSourceMode = (MeshSourceMode)mode; + if (_meshSourceMode == MeshSourceMode.UIEffectRawImage || _meshSourceMode == MeshSourceMode.UIEffectSprite || _meshSourceMode == MeshSourceMode.UIEffectBaseMap||_meshSourceMode == MeshSourceMode.UIParticle) + { + _uieffectEnabled = true; + } + else + { + _uieffectEnabled = false; + } + + if (_meshSourceMode == MeshSourceMode.UIParticle) + { + _uiParticleEnabled = true; + } + else + { + _uiParticleEnabled = false; + } + + if (checkIsParicleSystem) + { + if (!(_meshSourceMode != MeshSourceMode.Particle || !_uiParticleEnabled)) + { + EditorGUILayout.HelpBox("检测到材质用在粒子系统上,和设置不匹配",MessageType.Error); + } + } + else + { + //这个不能Log,因为在Project面板下打开是不知道在不在粒子系统里的。 + // if (_meshSourceMode == MeshSourceMode.Particle) + // { + // EditorGUILayout.HelpBox("检测到材质没有用在粒子系统上,和设置不匹配",MessageType.Error); + // } + } + }); + + // helper.DrawToggle("2D/UI模式", "_UIEffect_Toggle",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_UIEFFECT_ON ,drawBlock:(isToggle) => + // { + // _uieffectEnabled = isToggle; + // if (isToggle) + // { + // matEditor.ShaderProperty(helper.GetProperty("_Color"), "贴图颜色叠加"); + // // mat.renderQueue = 3000 + (int)helper.GetProperty("_QueueBias").floatValue; + // helper.DrawToggle("精灵模式",flagBitsName:W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_UIEFFECT_SPRITE_MODE,flagIndex:1,drawBlock: + // isSpriteModeToggle => + // { + // _uieffectSpriteMode = isSpriteModeToggle; + // }); + // } + // else + // { + // shaderFlag.ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_UIEFFECT_SPRITE_MODE,null,1); + // EditorGUILayout.Space(); + // // mat.renderQueue = 3100 + (int)helper.GetProperty("_QueueBias").floatValue; //3D粒子永远最前显示 + // } + // }); + + helper.DrawPopUp("透明模式","_TransparentMode",transparentModeNames); + if (mats.Count == 1) + { + _transparentMode = (TransparentMode)mats[0].GetFloat("_TransparentMode"); + if (_transparentMode == TransparentMode.CutOff) + { + matEditor.ShaderProperty(helper.GetProperty("_Cutoff"),"裁剪位置"); + } + + if (_transparentMode == TransparentMode.Transparent) + { + helper.DrawPopUp("混合模式","_Blend",blendModeNames); + } + } + } + + public void DrawMainTexOptions() + { + Action drawAfterMainTex = ()=> + { + if (_meshSourceMode != MeshSourceMode.UIEffectSprite) + { + bool hasMainTex = mats[0].GetTexture("_MainTex") || mats[0].GetTexture("_BaseMap"); + DrawUVModeSelect(W9ParticleShaderFlags.foldOutBit2UVModeMainTex,4,"主贴图UV来源",W9ParticleShaderFlags.FLAG_BIT_UVMODE_POS_0_MAINTEX,0,hasMap:hasMainTex); + } + + if (!_uieffectEnabled||_uiParticleEnabled) + { + DrawCustomDataSelect("主贴图X轴偏移自定义曲线",W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_MAINTEX_OFFSET_X,0); + DrawCustomDataSelect("主贴图Y轴偏移自定义曲线",W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_MAINTEX_OFFSET_Y,0); + } + if (_meshSourceMode != MeshSourceMode.UIEffectSprite) + { + + helper.DrawVector4In2Line("_BaseMapMaskMapOffset", "偏移速度"); + + helper.DrawSlider("主贴图旋转", "_BaseMapUVRotation", 0f, 360f); + } + + DrawNoiseAffectBlock(() => + { + helper.DrawSlider("主贴图扭曲强度","_TexDistortion_intensity",-1.0f,1.0f); + + }); + + + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutBitHueShift,3,"主贴图色相偏移","_HueShift_Toggle",W9ParticleShaderFlags.FLAG_BIT_HUESHIFT_ON,isIndentBlock:true,drawBlock:(isToggle)=>{ + helper.DrawSlider("色相","_HueShift",0,1); + DrawCustomDataSelect("色相自定义曲线",W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_HUESHIFT,0); + }); + + + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutBitSaturability,3,"主贴图饱和度","_ChangeSaturability_Toggle",W9ParticleShaderFlags.FLAG_BIT_SATURABILITY_ON,isIndentBlock:true,drawBlock:(isToggle)=>{ + helper.DrawSlider("饱和度","_Saturability",0,1); + DrawCustomDataSelect("饱和度强度自定义曲线",W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_SATURATE,1); + }); + + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutMianTexContrast,4,"主贴图对比度","_Contrast_Toggle",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_MAINTEX_CONTRAST,1,isIndentBlock:true,drawBlock:(isToggle)=>{ + matEditor.ShaderProperty(helper.GetProperty("_ContrastMidColor"),"对比度中值颜色"); + helper.DrawSlider("对比度","_Contrast",0,5); + DrawCustomDataSelect("对比度自定义曲线",W9ParticleShaderFlags.FLAGBIT_POS_2_CUSTOMDATA_MAINTEX_CONTRAST,2); + }); + + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutMainTexColorRefine,4,"主贴图颜色修正","_BaseMapColorRefine_Toggle",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_MAINTEX_COLOR_REFINE,1,isIndentBlock:true,drawBlock: + (isToggle) => + { + helper.DrawVector4Componet("A:主颜色相乘","_BaseMapColorRefine","x",false); + helper.DrawVector4Componet("B:主颜色Power","_BaseMapColorRefine","y",false); + helper.DrawVector4Componet("B:主颜色Power后相乘","_BaseMapColorRefine","z",false); + helper.DrawVector4Componet("A/B线性差值","_BaseMapColorRefine","w",true,0f,1f); + }); + }; + + if (!_uieffectEnabled || _uiParticleEnabled || _meshSourceMode == MeshSourceMode.UIEffectBaseMap) + { + DrawTextureFoldOut(W9ParticleShaderFlags.foldOutBitBaseMap,3,"主贴图","_BaseMap","_BaseColor",drawWrapMode:true,flagBitsName:W9ParticleShaderFlags.FLAG_BIT_WRAPMODE_BASEMAP,flagIndex:2,drawBlock: + theBaseMap => + { + drawAfterMainTex(); + }); + // helper.DrawTexture("主贴图","_BaseMap","_BaseColor",drawWrapMode:true,flagBitsName:W9ParticleShaderFlags.FLAG_BIT_WRAPMODE_BASEMAP,flagIndex:2); + } + else + { + //实际上贴图来自_MainTex + matEditor.ShaderProperty(helper.GetProperty("_Color"), "贴图颜色叠加"); + helper.DrawVector4In2Line("_UI_MainTex_ST", "Tilling","Offset"); + drawAfterMainTex(); + } + + } + + public void DrawBaseOptions() + { + helper.DrawFloat("整体颜色强度","_BaseColorIntensityForTimeline"); + helper.DrawSlider("整体透明度","_AlphaAll",0f,1f); + if (!_uieffectEnabled) + { + helper.DrawPopUp("深度测试","_ZTest",Enum.GetNames(typeof(CompareFunction))); + } + else + { + helper.GetProperty("_ZTest").floatValue = 4.0f;//UI层使用默认值LessEqual + } + + // helper.DrawPopUp("时间模式","_TimeMode",Enum.GetNames(typeof(TimeMode))); + helper.DrawPopUp("渲染面向","_Cull",Enum.GetNames(typeof(RenderFace))); + + + + if (!_uieffectEnabled) + { + if (mats.Count == 1) + { + if (_transparentMode == TransparentMode.Transparent) + { + bool isBackFirstPass = false; + helper.DrawToggle("预渲染反面", "_BackFristPassToggle", drawBlock: (isToggle) => + { + mats[0].SetShaderPassEnabled("SRPDefaultUnlit", isToggle); + isBackFirstPass = isToggle; + }); + + if (isBackFirstPass) + { + EditorGUILayout.HelpBox("预渲染反面会导致打断动态合批,请谨慎使用。",MessageType.Warning); + mats[0].SetFloat("_Cull", (float)RenderFace.Front); + } + + helper.DrawToggle("强制深度写入", "_ForceZWriteToggle"); + } + } + + + + EditorGUILayout.BeginHorizontal(); + helper.DrawToggle("背面颜色","_BaseBackColor_Toggle",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_BACKCOLOR,drawBlock: + (isToggle) => + { + matEditor.ColorProperty(helper.GetProperty("_BaseBackColor"), ""); + }); + EditorGUILayout.EndHorizontal(); + + + } + // helper.DrawToggle("使用3U作为UV来源","_UseUV1_Toggle",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_USETEXCOORD2); + + + + + if (!_uieffectEnabled) + { + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutBitDistanceFade, 3,"近距离透明","_DistanceFade_Toggle",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_DISTANCEFADE_ON,isIndentBlock:true,drawBlock:(isToggle) => + { + helper.DrawVector4In2Line("_Fade","透明过度范围"); + }); + } + else + { + for (int i = 0; i < mats.Count; i++) + { + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_DISTANCEFADE_ON); + } + } + + if (!_uieffectEnabled) + { + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutBitSoftParticles,3,"软粒子","_SoftParticlesEnabled",shaderKeyword:"_SOFTPARTICLES_ON",isIndentBlock:true,drawBlock: + (isToggle) => + { + helper.DrawVector4In2Line("_SoftParticleFadeParams","远近裁剪面"); + }); + + + + helper.DrawToggle("剔除主角色",shaderKeyword:"_STENCIL_WITHOUT_PLAYER", drawBlock: isToggle => + { + if (isToggle) + { + for (int i = 0; i < mats.Count; i++) + { + StencilTestHelper.SetMaterialStencil(mats[i], "ParticleWithoutPlayer", _stencilValuesConfig, + out int queue); + } + + isCustomedStencil = true; + } + },drawEndChangeCheck: isToggle => + { + if (!isToggle) + { + helper.GetProperty("_CustomStencilTest").floatValue = 0f; + } + }); + helper.DrawToggle("忽略顶点色","_IgnoreVetexColor_Toggle",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_IGNORE_VERTEX_COLOR,flagIndex:1); + helper.DrawSlider("雾影响强度","_fogintensity",0f,1f); + } + else + { + helper.GetProperty("_fogintensity").floatValue = 0; + } + } + + public void DrawFeatureOptions() + { + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutBitMask,3,"遮罩","_Mask_Toggle",shaderKeyword:"_MASKMAP_ON",fontStyle:FontStyle.Bold,drawBlock:(isToggle) =>{ + // helper.DrawToggle("遮罩","_Mask_Toggle",shaderKeyword:"_MASKMAP_ON",fontStyle:FontStyle.Bold,drawBlock: (isToggle) =>{ + // if (isToggle) + // { + DrawTextureFoldOut(W9ParticleShaderFlags.foldOutBitMaskMap,3,"遮罩贴图","_MaskMap",drawWrapMode:true,flagBitsName:W9ParticleShaderFlags.FLAG_BIT_WRAPMODE_MASKMAP,flagIndex:2,drawBlock: + theMaskMap => + { + // if (theMaskMap) + // { + DrawUVModeSelect(W9ParticleShaderFlags.foldOutBit2UVModeMaskMap,4,"遮罩贴图UV来源",W9ParticleShaderFlags.FLAG_BIT_UVMODE_POS_0_MASKMAP,0,hasMap:theMaskMap); + DrawCustomDataSelect("Mask图X轴偏移自定义曲线",W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_MASK_OFFSET_X,0); + DrawCustomDataSelect("Mask图Y轴偏移自定义曲线",W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_MASK_OFFSET_Y,0); + helper.DrawVector4Componet("遮罩强度","_MaskMapVec","x",false); + helper.DrawVector4In2Line("_MaskMapOffsetAnition","遮罩偏移速度"); + helper.DrawFloat("遮罩旋转","_MaskMapUVRotation"); + + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutBitMaskRotate,3,"遮罩旋转速度","_Mask_RotationToggle",W9ParticleShaderFlags + .FLAG_BIT_PARTILCE_MASKMAPROTATIONANIMATION_ON,isIndentBlock:false,drawBlock: (isToggle2) =>{ + helper.DrawFloat("旋转速度", "_MaskMapRotationSpeed"); + }); + // EditorGUI.BeginDisabledGroup(!_noiseEnabled); + // + // EditorGUI.EndDisabledGroup(); + DrawNoiseAffectBlock(() => {helper.DrawSlider("遮罩扭曲强度","_MaskDistortion_intensity",-2,2);}); + //没有必要自动归位 + // if(!_noiseEnabled) + // { + // helper.GetProperty("_MaskDistortion_intensity").floatValue = 0f; + // } + + // } + + }); + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutBitMask2,3,"遮罩2","_Mask2_Toggle",flagBitsName:W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_MASK_MAP2,flagIndex:1,isIndentBlock:true,drawBlock: + (isToggle) => + { + helper.DrawTexture("遮罩2贴图","_MaskMap2",drawWrapMode:true,flagBitsName:W9ParticleShaderFlags.FLAG_BIT_WRAPMODE_MASKMAP2,flagIndex:2, + drawBlock:theMaskMap2Texture => + { + DrawUVModeSelect(W9ParticleShaderFlags.foldOutBit2UVModeMaskMap2,4,"遮罩2UV来源",W9ParticleShaderFlags.FLAG_BIT_UVMODE_POS_0_MASKMAP_2,0,hasMap:theMaskMap2Texture); + helper.DrawVector4In2Line("_MaskMapOffsetAnition",secondLineLabel:"遮罩2偏移速度"); + }); + // helper.DrawTexture("遮罩2贴图","_MaskMap2",drawWrapMode:true,flagBitsName:W9ParticleShaderFlags.FLAG_BIT_WRAPMODE_MASKMAP2,flagIndex:2); + + }); + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutBitMask3,3,"遮罩3",flagBitsName:W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_MASK_MAP3,flagIndex:1,isIndentBlock:true,drawBlock: + (isToggle) => + { + helper.DrawTexture("遮罩3贴图","_MaskMap3",drawWrapMode:true,flagBitsName:W9ParticleShaderFlags.FLAG_BIT_WRAPMODE_MASKMAP3,flagIndex:2,drawBlock:theMaskMap3Texture=> + { + DrawUVModeSelect(W9ParticleShaderFlags.foldOutBit2UVModeMaskMap3,4,"遮罩3UV来源",W9ParticleShaderFlags.FLAG_BIT_UVMODE_POS_0_MASKMAP_3,0,hasMap:theMaskMap3Texture); + helper.DrawVector4In2Line("_MaskMap3OffsetAnition",firstLineLabel:"遮罩3偏移速度"); + }); + }); + // helper.DrawTexture("遮罩贴图","_MaskMap",drawWrapMode:true,flagBitsName:W9ParticleShaderFlags.FLAG_BIT_WRAPMODE_MASKMAP,flagIndex:2); + // if (mat.GetTexture("_MaskMap")) + // } + }); + + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutBitNoise,3,"扭曲","_noisemapEnabled",shaderKeyword:"_NOISEMAP",fontStyle:FontStyle.Bold,drawBlock:(isToggle) => { + + _noiseEnabled = isToggle; + + helper.DrawToggle("用于屏幕扰动",shaderKeyword:"_SCREEN_DISTORT_MODE",drawBlock: isScreenDistortToggle => + { + if (isScreenDistortToggle) + { + //强制设置为Clamp模式。 + for (int i = 0; i < mats.Count; i++) + { + shaderFlags[i].SetFlagBits(W9ParticleShaderFlags.FLAG_BIT_WRAPMODE_BASEMAP, index: 2); + } + } + }); + // if (isToggle) + // { + // EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField("扭曲贴图RG双通道则为FlowMap,FlowMap贴图设置应该去掉sRGB勾选"); + DrawTextureFoldOut(W9ParticleShaderFlags.foldOutBitNoiseMap,3,"扭曲贴图","_NoiseMap",drawWrapMode:true,flagBitsName:W9ParticleShaderFlags.FLAG_BIT_WRAPMODE_NOISEMAP,flagIndex:2,drawBlock: + theNoiseMap => + { + DrawUVModeSelect(W9ParticleShaderFlags.foldOutBit2UVModeNoiseMap,4,"扭曲贴图UV来源",W9ParticleShaderFlags.FLAG_BIT_UVMODE_POS_0_NOISE_MAP,0); + helper.DrawSlider("主贴图扭曲强度","_TexDistortion_intensity",-1.0f,1.0f); + DrawCustomDataSelect("扭曲强度自定义曲线",W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_NOISE_INTENSITY,1); + helper.DrawVector4In2Line("_DistortionDirection","扭曲方向强度"); + DrawCustomDataSelect("扭曲方向强度X自定义曲线",W9ParticleShaderFlags.FLAGBIT_POS_2_CUSTOMDATA_NOISE_DIRECTION_X,2); + DrawCustomDataSelect("扭曲方向强度Y自定义曲线",W9ParticleShaderFlags.FLAGBIT_POS_2_CUSTOMDATA_NOISE_DIRECTION_Y,2); + + helper.DrawSlider("扭曲旋转","_NoiseMapUVRotation",0f,360f); + helper.DrawVector4In2Line("_NoiseOffset","扭曲偏移速度"); + helper.DrawToggle("0.5为中值,双向扭曲","_DistortionBothDirection_Toggle",flagBitsName:W9ParticleShaderFlags.FLAG_BIT_PARTICLE_NOISEMAP_NORMALIZEED_ON,isIndentBlock:false); + }); + + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutBitNoiseMaskToggle,3,"扭曲遮罩","_noiseMaskMap_Toggle",flagBitsName:W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_NOISE_MASKMAP,flagIndex:1,drawBlock: + isNoiseMaskToggle => + { + // if (isNoiseMaskToggle) + // { + helper.DrawTexture("扭曲遮罩贴图","_NoiseMaskMap",drawWrapMode:true,flagBitsName:W9ParticleShaderFlags.FLAG_BIT_WRAPMODE_NOISE_MASKMAP,drawBlock: + theNoiseMaskMap => + { + DrawUVModeSelect(W9ParticleShaderFlags.foldOutBit2UVModeNoiseMaskMap,4,"扭曲遮罩贴图UV来源",W9ParticleShaderFlags.FLAG_BIT_UVMODE_POS_0_NOISE_MASK_MAP,0,theNoiseMaskMap); + }); + // } + }); + // } + }); + + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutBitDistortionChoraticaberrat, 3,"扭曲色散","_Distortion_Choraticaberrat_Toggle",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CHORATICABERRAT,isIndentBlock:true,fontStyle:FontStyle.Bold,drawBlock: + (is_Choraticaberrat_Toggle) => + { + // if (is_Choraticaberrat_Toggle) + // { + DrawNoiseAffectBlock(() => { helper.DrawToggle("色散强度受扭曲强度影响","_Distortion_Choraticaberrat_WithNoise_Toggle",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_NOISE_CHORATICABERRAT_WITH_NOISE);}); + helper.DrawVector4Componet("色散强度", "_DistortionDirection", "z", false); + DrawCustomDataSelect("色散强度自定义曲线",W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_CHORATICABERRAT_INTENSITY,0); + // } + }); + + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutBitEmission,3,"流光","_EmissionEnabled",shaderKeyword:"_EMISSION",isIndentBlock:true,fontStyle:FontStyle.Bold,drawBlock: (isToggle) =>{ + // if (isToggle) + // { + helper.DrawTexture("流光贴图","_EmissionMap","_EmissionMapColor",drawWrapMode:true,flagBitsName:W9ParticleShaderFlags.FLAG_BIT_WRAPMODE_EMISSIONMAP,flagIndex:2,drawBlock:theEmissionMap=> + { + DrawUVModeSelect(W9ParticleShaderFlags.foldOutBit2UVModeEmissionMap,4,"流光贴图UV来源",W9ParticleShaderFlags.FLAG_BIT_UVMODE_POS_0_EMISSION_MAP,0,theEmissionMap); + }); + helper.DrawFloat("流光颜色强度","_EmissionMapColorIntensity"); + helper.DrawSlider("流光贴图旋转","_EmissionMapUVRotation",0f,360f); + DrawNoiseAffectBlock(() => {helper.DrawFloat("流光贴图扭曲强度","_Emi_Distortion_intensity"); }); + //没有必要自动归位 + // if (!_noiseEnabled) + // { + // helper.GetProperty("_Emi_Distortion_intensity").floatValue = 0; + // } + + helper.DrawVector4In2Line("_EmissionMapUVOffset", "流光贴图偏移速度"); + // helper.DrawSlider("LiuuvRapSoft","_uvRapSoft",0f,1f); + // helper.DrawFloat("_CustomData2X","_CustomData2X"); + // } + }); + + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutDissolve,3,"溶解","_Dissolve_Toggle",shaderKeyword:"_DISSOLVE",isIndentBlock:true,fontStyle:FontStyle.Bold,drawBlock:(isToggle) =>{ + // if (isToggle) + // { + DrawTextureFoldOut(W9ParticleShaderFlags.foldOutDissolveMap,3,"溶解贴图","_DissolveMap",drawScaleOffset:false,drawWrapMode:true,flagBitsName:W9ParticleShaderFlags.FLAG_BIT_WRAPMODE_DISSOLVE_MAP,flagIndex:2,drawBlock:(dissolveTex)=> + { + matEditor.TextureScaleOffsetProperty(helper.GetProperty("_DissolveMap")); + DrawCustomDataSelect("溶解贴图X轴偏移自定义曲线",W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_DISSOLVE_OFFSET_X,1); + DrawCustomDataSelect("溶解贴图Y轴偏移自定义曲线",W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_DISSOLVE_OFFSET_Y,1); + DrawUVModeSelect(W9ParticleShaderFlags.foldOutBit2UVModeDissolveMap,4,"溶解贴图UV来源",W9ParticleShaderFlags.FLAG_BIT_UVMODE_POS_0_DISSOLVE_MAP,0); + helper.DrawVector4In2Line("_DissolveOffsetRotateDistort","溶解贴图偏移速度"); + helper.DrawVector4Componet("溶解贴图旋转","_DissolveOffsetRotateDistort","z",true,0f,360f); + }); + helper.DrawToggle("溶解度黑白值测试","_Dissolve_Test_Toggle",shaderKeyword:"_DISSOLVE_EDITOR_TEST"); + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutDissolveVoronoi,3,"程序化噪波叠加","_DissolveVoronoi_Toggle",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_DISSOVLE_VORONOI,flagIndex:1,isIndentBlock:true,drawBlock:isVoronoiToggle=>{ + // if (isVoronoiToggle) + // { + // helper.DrawVector4Componet("噪波1缩放","_DissolveVoronoi_Vec","x",false); + helper.DrawVector4In2Line("_DissolveVoronoi_Vec","噪波1缩放"); + helper.DrawVector4Componet("噪波1速度","_DissolveVoronoi_Vec2","z",false); + helper.DrawVector4In2Line("_DissolveVoronoi_Vec4","噪波1偏移"); + DrawCustomDataSelect("噪波1偏移速度X自定义曲线",W9ParticleShaderFlags.FLAGBIT_POS_2_CUSTOMDATA_DISSOLVE_NOISE1_OFFSET_X,2); + DrawCustomDataSelect("噪波1偏移速度Y自定义曲线",W9ParticleShaderFlags.FLAGBIT_POS_2_CUSTOMDATA_DISSOLVE_NOISE1_OFFSET_Y,2); + helper.DrawVector4In2Line("_DissolveVoronoi_Vec3","噪波1偏移速度"); + EditorGUILayout.Space(); + helper.DrawVector4In2Line("_DissolveVoronoi_Vec",secondLineLabel:"噪波2缩放"); + // helper.DrawVector4Componet("噪波2缩放","_DissolveVoronoi_Vec","z",false); + helper.DrawVector4Componet("噪波2速度","_DissolveVoronoi_Vec2","w",false); + helper.DrawVector4In2Line("_DissolveVoronoi_Vec4",secondLineLabel: "噪波2偏移"); + DrawCustomDataSelect("噪波2偏移速度X自定义曲线",W9ParticleShaderFlags.FLAGBIT_POS_2_CUSTOMDATA_DISSOLVE_NOISE2_OFFSET_X,2); + DrawCustomDataSelect("噪波2偏移速度Y自定义曲线",W9ParticleShaderFlags.FLAGBIT_POS_2_CUSTOMDATA_DISSOLVE_NOISE2_OFFSET_Y,2); + helper.DrawVector4In2Line("_DissolveVoronoi_Vec3",secondLineLabel: "噪波2偏移速度"); + EditorGUILayout.Space(); + EditorGUILayout.Space(); + helper.DrawVector4Componet("噪波1和噪波2混合系数(圆尖)","_DissolveVoronoi_Vec2","x",true); + helper.DrawVector4Componet("噪波整体和溶解贴图混合系数","_DissolveVoronoi_Vec2","y",true); + EditorGUILayout.Space(); + // } + + }); + + DrawNoiseAffectBlock(()=>{ + helper.DrawVector4Componet("溶解贴图扭曲强度","_DissolveOffsetRotateDistort","w",false); + }); + + helper.DrawVector4In2Line("_Dissolve_Vec2","溶解丝滑度(溶解值黑白调整)"); + helper.DrawVector4Componet("溶解强度","_Dissolve","x",true,-1f,2f); + DrawCustomDataSelect("溶解强度自定义曲线",W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_DISSOLVE_INTENSITY,0); + helper.DrawVector4Componet("溶解硬度","_Dissolve","w",true,0f,1f); + + // else + // { + // + // Vector4 value = helper.GetProperty("_DissolveOffsetRotateDistort").vectorValue; + // value = new Vector4(value.x, value.y, value.z, 0); + // helper.GetProperty("_DissolveOffsetRotateDistort").vectorValue = value; + // } + + helper.DrawVector4Componet("溶解描边范围","_Dissolve","y",true,0f,1f); + matEditor.ColorProperty(helper.GetProperty("_DissolveLineColor"),"溶解描边颜色"); + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutDissolveRampMap,3,"溶解Ramp图功能","_Dissolve_useRampMap_Toggle",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_DISSOVLE_USE_RAMP,flagIndex:1,isIndentBlock:true,drawBlock: + isDissolveUseRampToggle => + { + // if (isDissolveUseRampToggle) + // { + helper.DrawTexture("溶解Ramp图","_DissolveRampMap","_DissolveRampColor",drawScaleOffset:true,drawWrapMode:true,flagBitsName:W9ParticleShaderFlags.FLAG_BIT_WRAPMODE_DISSOLVE_RAMPMAP,flagIndex:2); + // } + }); + + + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutDissolveMask,3,"局部溶解","_DissolveMask_Toggle",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_DISSOLVE_MASK,drawBlock: + (isToggle) => + { + // if (isToggle) + // { + helper.DrawTexture("局部溶解蒙版","_DissolveMaskMap",drawWrapMode:true,flagBitsName:W9ParticleShaderFlags.FLAG_BIT_WRAPMODE_DISSOLVE_MASKMAP,flagIndex:2); + DrawUVModeSelect(W9ParticleShaderFlags.foldOutBit2UVModeDissolveMaskMap,4,"局部溶解蒙板UV来源",W9ParticleShaderFlags.FLAG_BIT_UVMODE_POS_0_DISSOLVE_MASK_MAP,0); + helper.DrawVector4Componet("局部控制强度","_Dissolve","z",false); + DrawCustomDataSelect("局部溶解强度自定义曲线",W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_DISSOLVE_MASK_INTENSITY,1); + + // } + + }); + + // } + + }); + + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutColorBlend,3,"颜色渐变","_ColorBlendMap_Toggle",shaderKeyword:"_COLORMAPBLEND",isIndentBlock:true,fontStyle:FontStyle.Bold,drawBlock:(isToggle) => + { + // if (isToggle) + // { + helper.DrawTexture("颜色渐变贴图","_ColorBlendMap",drawWrapMode:true,flagBitsName:W9ParticleShaderFlags.FLAG_BIT_WRAPMODE_COLORBLENDMAP,flagIndex:2); + matEditor.ColorProperty(helper.GetProperty("_ColorBlendColor"), "颜色渐变叠加"); + DrawUVModeSelect(W9ParticleShaderFlags.foldOutBit2UVModeColorBlendMap,4,"颜色渐变贴图UV来源",W9ParticleShaderFlags.FLAG_BIT_UVMODE_POS_0_COLOR_BLEND_MAP,0); + helper.DrawVector4In2Line("_ColorBlendMapOffset","颜色渐变贴图偏移速度"); + // } + }); + + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutFresnel,3,"菲涅尔","_fresnelEnabled",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_FRESNEL_ON,isIndentBlock:true,fontStyle:FontStyle.Bold,drawBlock: + (isToggle) => + { + // if (isToggle) + // { + helper.DrawPopUp("菲涅尔模式","_FresnelMode",Enum.GetNames(typeof(FresnelMode))); + helper.DrawVector4Componet("菲涅尔强度","_FresnelUnit","z",true); + + if (mats.Count == 1) + { + FresnelMode fresnelMode = (FresnelMode)mats[0].GetFloat("_FresnelMode"); + switch (fresnelMode) + { + case FresnelMode.Color: + matEditor.ColorProperty(helper.GetProperty("_FresnelColor"), "菲涅尔颜色"); + shaderFlags[0].SetFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_FRESNEL_COLOR_ON); + shaderFlags[0].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_FRESNEL_FADE_ON); + break; + case FresnelMode.Fade: + shaderFlags[0].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_FRESNEL_COLOR_ON); + shaderFlags[0].SetFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_FRESNEL_FADE_ON); + break; + } + } + + helper.DrawVector4Componet("菲涅尔位置","_FresnelUnit","x",true,-1f,1f); + DrawCustomDataSelect("菲尼尔位置自定义曲线",W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_FRESNEL_OFFSET,0); + helper.DrawVector4Componet("菲涅尔范围","_FresnelUnit","y",true,0f,10f); + helper.DrawVector4Componet("菲涅尔硬度","_FresnelUnit","w",true,0f,1f); + helper.DrawToggle("翻转菲涅尔","_InvertFresnel_Toggle",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_FRESNEL_INVERT_ON); + matEditor.VectorProperty(helper.GetProperty("_FresnelRotation"),"菲涅尔方向偏移"); + + // } + }); + if (!_uieffectEnabled) + { + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutDepthOutline,3,"深度描边", "_DepthOutline_Toggle", + flagBitsName: W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_DEPTH_OUTLINE,fontStyle:FontStyle.Bold, flagIndex: 1, + isIndentBlock: true, drawBlock: + (isToggle) => + { + // if (isToggle) + // { + matEditor.ColorProperty(helper.GetProperty("_DepthOutline_Color"), "深度描边颜色"); + helper.DrawVector4In2Line("_DepthOutline_Vec", "深度描边距离"); + // } + }); + + helper.DrawToggle("深度贴花", "_DepthDecal_Toggle", shaderKeyword: "_DEPTH_DECAL",fontStyle:FontStyle.Bold, drawBlock: (isToggle) => + { + if (isToggle) + { + for (int i = 0; i < mats.Count; i++) + { + StencilTestHelper.SetMaterialStencil(mats[i], "ParticleBaseDecal", _stencilValuesConfig, + out int ignore); + } + + isCustomedStencil = true; + helper.GetProperty("_Cull").floatValue = (float)RenderFace.Back; + helper.GetProperty("_ZTest").floatValue = (float)CompareFunction.GreaterEqual; + } + },drawEndChangeCheck: (isToggle) => + { + if (!isToggle) + { + if (!isToggle) + { + helper.GetProperty("_CustomStencilTest").floatValue = 0f; + helper.GetProperty("_Cull").floatValue = (float)RenderFace.Front; + helper.GetProperty("_ZTest").floatValue = (float)CompareFunction.LessEqual; + } + } + + } + ); + } + + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutVertexOffset,3,"顶点偏移","_VertexOffset_Toggle",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_VERTEX_OFFSET_ON,isIndentBlock:true,fontStyle:FontStyle.Bold,drawBlock: + isToggle => + { + // if (isToggle) + // { + helper.DrawTexture("顶点偏移贴图","_VertexOffset_Map",drawScaleOffset:true,drawWrapMode:true,flagBitsName:W9ParticleShaderFlags.FLAG_BIT_WRAPMODE_VERTEXOFFSETMAP,flagIndex:2); + DrawCustomDataSelect("顶点扰动X轴偏移自定义曲线",W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_VERTEX_OFFSET_X,1); + DrawCustomDataSelect("顶点扰动Y轴偏移自定义曲线",W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_VERTEX_OFFSET_Y,1); + DrawUVModeSelect(W9ParticleShaderFlags.foldOutBit2UVModeVertexOffsetMap,4,"顶点偏移贴图UV来源",W9ParticleShaderFlags.FLAG_BIT_UVMODE_POS_0_VERTEX_OFFSET_MAP,0); + + helper.DrawVector4In2Line("_VertexOffset_Vec","顶点偏移动画"); + helper.DrawVector4Componet("顶点偏移强度","_VertexOffset_Vec","z",false); + DrawCustomDataSelect("顶点扰动强度自定义曲线",W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_VERTEXOFFSET_INTENSITY,1); + helper.DrawToggle("顶点偏移从零开始","_VertexOffset_StartFromZero",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_VERTEXOFFSET_START_FROM_ZERO,1); + helper.DrawToggle("顶点偏移使用法线方向","_VertexOffset_NormalDir_Toggle",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_VERTEX_OFFSET_NORMAL_DIR,isIndentBlock:false,drawBlock: + isToggle => + { + if (!isToggle) + { + matEditor.ShaderProperty(helper.GetProperty("_VertexOffset_CustomDir"),"顶点偏移本地方向"); + } + }); + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutVertexOffsetMask,4,"顶点偏移遮罩","_VertexOffset_Mask_Toggle",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_VERTEXOFFSET_MASKMAP,1, + drawBlock:isMaskToggle => + { + helper.DrawTexture("顶点偏移遮罩图","_VertexOffset_MaskMap",drawScaleOffset:true,drawWrapMode:true,flagBitsName:W9ParticleShaderFlags.FLAG_BIT_WRAPMODE_VERTEXOFFSET_MASKMAP,flagIndex:2); + DrawCustomDataSelect("顶点扰动遮罩X轴偏移自定义曲线",W9ParticleShaderFlags.FLAGBIT_POS_3_CUSTOMDATA_VERTEX_OFFSET_MASK_X,3); + DrawCustomDataSelect("顶点扰动遮罩Y轴偏移自定义曲线",W9ParticleShaderFlags.FLAGBIT_POS_3_CUSTOMDATA_VERTEX_OFFSET_MASK_Y,3); + DrawUVModeSelect(W9ParticleShaderFlags.foldOutBit2UVModeVertexOffsetMaskMap,4,"顶点偏移遮罩图UV来源",W9ParticleShaderFlags.FLAG_BIT_UVMODE_POS_0_VERTEX_OFFSET_MASKMAP,0); + helper.DrawVector4In2Line("_VertexOffset_MaskMap_Vec","顶点偏移遮罩动画"); + helper.DrawVector4Componet("顶点偏移遮罩强度","_VertexOffset_MaskMap_Vec","z",true); + }); + // } + + }); + + if (!_uieffectEnabled) + { + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutParallexMapping,3,"遮蔽视差", "_ParallaxMapping_Toggle", shaderKeyword: "_PARALLAX_MAPPING", + isIndentBlock: true,fontStyle:FontStyle.Bold, drawBlock: + isTogggle => + { + // if (isTogggle) + // { + helper.DrawTexture("视差贴图", "_ParallaxMapping_Map", drawWrapMode: true, + flagBitsName: W9ParticleShaderFlags.FLAG_BIT_WRAPMODE_PARALLAXMAPPINGMAP, flagIndex: 2); + helper.DrawSlider("视差", "_ParallaxMapping_Intensity", 0, 0.1f); + + helper.DrawVector4Componet("遮蔽视差最小层数","_ParallaxMapping_Vec","x",true,0f,100f); + helper.DrawVector4Componet("遮蔽视差最大层数","_ParallaxMapping_Vec","y",true,0f,100f); + Vector4 parallexMappingVecValue = helper.GetProperty("_ParallaxMapping_Vec").vectorValue; + if (parallexMappingVecValue.y < parallexMappingVecValue.x+1) + { + parallexMappingVecValue.y = parallexMappingVecValue.x+1; + } + helper.GetProperty("_ParallaxMapping_Vec").vectorValue = parallexMappingVecValue; + if (parallexMappingVecValue.y > 20f) + { + EditorGUILayout.HelpBox("遮蔽视差层数过高将影响性能",MessageType.Warning); + } + + + + // } + }); + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutPortal,4,"模板视差", "_Portal_Toggle", fontStyle:FontStyle.Bold,drawBlock: isPortalToggle => + { + // if (isPortalToggle) + // { + if (isPortalToggle) + { + isCustomedStencil = true; + } + helper.DrawToggle("模板视差蒙版", "_Portal_MaskToggle", drawBlock: isPortalMaskToggle => + { + + if (isPortalMaskToggle) + { + for (int i = 0; i < mats.Count; i++) + { + StencilTestHelper.SetMaterialStencil(mats[i], "ParticalBasePortalMask", + _stencilValuesConfig, out int Ignore); + } + + if (helper.GetProperty("_TransparentMode").floatValue == (float)TransparentMode.Transparent) + { + helper.GetProperty("_TransparentMode").floatValue = (float)TransparentMode.CutOff; + } + + helper.GetProperty("_ZTest").floatValue = (float)CompareFunction.LessEqual; + } + else if(isPortalToggle) + { + for (int i = 0; i < mats.Count; i++) + { + StencilTestHelper.SetMaterialStencil(mats[i], "ParticalBasePortal", + _stencilValuesConfig, out int Ignore); + } + + helper.GetProperty("_ZTest").floatValue = (float)CompareFunction.GreaterEqual; + } + + }); + // } + },drawEndChangeCheck: (isToggle) => + { + if (!isToggle) + { + helper.GetProperty("_CustomStencilTest").floatValue = 0f; + helper.GetProperty("_TransparentMode").floatValue = (float)TransparentMode.Transparent; + helper.GetProperty("_ZTest").floatValue = (float)CompareFunction.LessEqual; + } + } + ); + } + + + + //粒子序列帧融帧的逻辑,是将UV0为第一格,UV1234推到第二格,中间用AnimBlend融合)。所以多UV是必然和这个矛盾的。 + if (mats.Count == 1) + { + helper.DrawToggle("序列帧融帧(丝滑)", "_FlipbookBlending", shaderKeyword: "_FLIPBOOKBLENDING_ON", + fontStyle: FontStyle.Bold, drawBlock: (isToggle) => + { + if (isToggle) + { + if (_meshSourceMode == MeshSourceMode.Particle) + { + if (shaderFlags[0].CheckIsUVModeOn(W9ParticleShaderFlags.UVMode.SpecialUVChannel)) + { + EditorGUILayout.HelpBox("序列帧融帧和特殊UV通道同时开启,粒子序列帧应该影响UV0和UV1两个通道,特殊通道只能使用UV3(原始UV)", + MessageType.Warning); + } + else + { + EditorGUILayout.HelpBox("AnimationSheet的AffectUVChannel需要有UV0和UV1", + MessageType.Info); + } + } + else if (_meshSourceMode == MeshSourceMode.Mesh) + { + EditorGUILayout.HelpBox("需要添加AnimationSheetHelper脚本", MessageType.Info); + } + } + }); + } + + + } + + public void DrawTaOptions() + { + if (!_uieffectEnabled) + { + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutZOffset,4,"深度偏移", "_ZOffset_Toggle", fontStyle:FontStyle.Bold,drawBlock: (isToggle) => + { + // if (isToggle) + // { + matEditor.ShaderProperty(helper.GetProperty("_offsetFactor"), "OffsetFactor"); + matEditor.ShaderProperty(helper.GetProperty("_offsetUnits"), "Offset单位"); + // } + if(!isToggle) + { + helper.GetProperty("_offsetFactor").floatValue = 0; + helper.GetProperty("_offsetUnits").floatValue = 0; + } + }); + } + + if (!_uieffectEnabled||_uiParticleEnabled) + { + #region CustomData旧版本 +/* + + + + { + + EditorGUILayout.Space(); + + bool isCustomedData1X = false, + isCustomedData1Y = false, + isCustomedData1Z = false, + isCustomedData1W = false, + isCustomedData2X = false, + isCustomedData2Y = false, + isCustomedData2Z = false, + isCustomedData2W = false; + + + // helper.DrawToggle("CustomData1X主贴图X轴偏移","_CustomData1X_MainTexOffsetX_Toggle",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1X_MAINTEXOFFSETX,drawBlock: + // (isToggle) => { isCustomedData1X = isToggle;}); + // helper.DrawToggle("CustomData1Y主贴图Y轴偏移","_CustomData1Y_MainTexOffsetY_Toggle",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1Y_MAINTEXOFFSETY,drawBlock: + // (isToggle) => { isCustomedData1Y = isToggle;}); + // helper.DrawToggle("CustomData1Z溶解强度","_CustomData1Z_Dissolve_Toggle",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1Z_DISSOLVE_ON,drawBlock: + // (isToggle) => { isCustomedData1Z = isToggle;}); + // helper.DrawToggle("CustomData1W色相偏移","_CustomData1W_HueShift_Toggle",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1W_HUESHIFT,drawBlock: + // (isToggle) => { isCustomedData1W = isToggle;}); + // helper.DrawToggle("CustomData2XMask图X轴偏移","_CustomData2X_MaskMapOffsetX_Toggle",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA2X_MASKMAPOFFSETX,drawBlock: + // (isToggle) => { isCustomedData2X = isToggle;}); + // helper.DrawToggle("CustomData2YMask图Y轴偏移","_CustomData2Y_MaskMapOffsetY_Toggle",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA2Y_MASKMAPOFFSETY,drawBlock: + // (isToggle) => { isCustomedData2Y = isToggle;}); + // helper.DrawToggle("CustomData2Z菲涅尔范围","_CustomData2Z_FresnelOffset_Toggle",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA2Z_FRESNELOFFSET,drawBlock: + // (isToggle) => { isCustomedData2Z = isToggle;}); + + helper.DrawPopUp("CustomData1X", "_CustomData1X_MainTexOffsetX_Toggle", CustomData1XModeName, + drawBlock: (f) => + { + switch ((CustomData1XMode)f) + { + case CustomData1XMode.none: + shaderFlag.ClearFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1X_MAINTEXOFFSETX, index: 0); + shaderFlag.ClearFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1X_DISSOLVETEXOFFSETX, index: 1); + isCustomedData1X = false; + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_DISSOLVE_OFFSET_X,0); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_MAINTEX_OFFSET_X,1); + break; + case CustomData1XMode.MainTexOffsetX: + shaderFlag.SetFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1X_MAINTEXOFFSETX, index: 0); + shaderFlag.ClearFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1X_DISSOLVETEXOFFSETX, index: 1); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.CustomData1X,W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_MAINTEX_OFFSET_X,0); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_DISSOLVE_OFFSET_X,1); + isCustomedData1X = true; + break; + case CustomData1XMode.DissolveTexOffseX: + shaderFlag.ClearFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1X_MAINTEXOFFSETX, index: 0); + shaderFlag.SetFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1X_DISSOLVETEXOFFSETX, index: 1); + isCustomedData1X = true; + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_MAINTEX_OFFSET_X,0); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.CustomData1X,W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_DISSOLVE_OFFSET_X,1); + break; + } + }); + + helper.DrawPopUp("CustomData1Y", "_CustomData1Y_MainTexOffsetY_Toggle", CustomData1YModeName, + drawBlock: (f) => + { + switch ((CustomData1YMode)f) + { + case CustomData1YMode.none: + shaderFlag.ClearFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1Y_MAINTEXOFFSETY, index: 0); + shaderFlag.ClearFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1Y_DISSOLVETEXOFFSETY, index: 1); + isCustomedData1Y = false; + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_MAINTEX_OFFSET_Y,0); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_DISSOLVE_OFFSET_Y,1); + break; + case CustomData1YMode.MainTexOffsetY: + shaderFlag.SetFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1Y_MAINTEXOFFSETY, index: 0); + shaderFlag.ClearFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1Y_DISSOLVETEXOFFSETY, index: 1); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.CustomData1Y,W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_MAINTEX_OFFSET_Y,0); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_DISSOLVE_OFFSET_Y,1); + isCustomedData1Y = true; + break; + case CustomData1YMode.DissolveOffsexY: + shaderFlag.ClearFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1Y_MAINTEXOFFSETY, index: 0); + shaderFlag.SetFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1Y_DISSOLVETEXOFFSETY, index: 1); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_MAINTEX_OFFSET_Y,0); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.CustomData1Y,W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_DISSOLVE_OFFSET_Y,1); + isCustomedData1Y = true; + break; + } + }); + + helper.DrawPopUp("CustomData1Z", "_CustomData1Z_Dissolve_Toggle", CustomData1ZModeName, + drawBlock: (f) => + { + switch ((CustomData1ZMode)f) + { + case CustomData1ZMode.none: + shaderFlag.ClearFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1Z_DISSOLVE_ON, index: 0); + shaderFlag.ClearFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1Z_NOISE_INTENSITY, index: 1); + isCustomedData1Z = false; + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_DISSOLVE_INTENSITY,0); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_NOISE_INTENSITY,1); + break; + case CustomData1ZMode.DissolveIntensity: + shaderFlag.SetFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1Z_DISSOLVE_ON, + index: 0); + shaderFlag.ClearFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1Z_NOISE_INTENSITY, index: 1); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.CustomData1Z,W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_DISSOLVE_INTENSITY,0); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_NOISE_INTENSITY,1); + isCustomedData1Z = true; + break; + case CustomData1ZMode.NoiseIntensity: + shaderFlag.ClearFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1Z_DISSOLVE_ON, index: 0); + shaderFlag.SetFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1Z_NOISE_INTENSITY, index: 1); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_DISSOLVE_INTENSITY,0); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.CustomData1Z,W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_NOISE_INTENSITY,1); + isCustomedData1Z = true; + break; + } + }); + + helper.DrawPopUp("CustomData1W", "_CustomData1W_HueShift_Toggle", CustomData1WModeName, + drawBlock: (f) => + { + switch ((CustomData1WMode)f) + { + case CustomData1WMode.none: + shaderFlag.ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1W_HUESHIFT, + index: 0); + shaderFlag.ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1W_SATURATE, + index: 1); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_HUESHIFT,0); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_SATURATE,1); + isCustomedData1W = false; + break; + case CustomData1WMode.HueShift: + shaderFlag.SetFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1W_HUESHIFT, + index: 0); + shaderFlag.ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1W_SATURATE, + index: 1); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.CustomData1W,W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_HUESHIFT,0); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_SATURATE,1); + isCustomedData1W = true; + break; + case CustomData1WMode.Saturate: + shaderFlag.ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1W_HUESHIFT, + index: 0); + shaderFlag.SetFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1W_SATURATE, + index: 1); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_HUESHIFT,0); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.CustomData1W,W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_SATURATE,1); + isCustomedData1W = true; + break; + } + }); + + helper.DrawPopUp("CustomData2X", "_CustomData2X_MaskMapOffsetX_Toggle", CustomData2XModeName, + drawBlock: (f) => + { + switch ((CustomData2XMode)f) + { + case CustomData2XMode.none: + shaderFlag.ClearFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA2X_MASKMAPOFFSETX, index: 0); + shaderFlag.ClearFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA2X_VERTEXOFFSETX, index: 1); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_MASK_OFFSET_X,0); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_VERTEX_OFFSET_X,1); + isCustomedData2X = false; + break; + case CustomData2XMode.MaskOffsetX: + shaderFlag.SetFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA2X_MASKMAPOFFSETX, index: 0); + shaderFlag.ClearFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA2X_VERTEXOFFSETX, index: 1); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.CustomData2X,W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_MASK_OFFSET_X,0); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_VERTEX_OFFSET_X,1); + isCustomedData2X = true; + break; + case CustomData2XMode.VertexOffsetX: + shaderFlag.ClearFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA2X_MASKMAPOFFSETX, index: 0); + shaderFlag.SetFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA2X_VERTEXOFFSETX, index: 1); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_MASK_OFFSET_X,0); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.CustomData2X,W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_VERTEX_OFFSET_X,1); + isCustomedData2X = true; + break; + } + }); + + helper.DrawPopUp("CustomData2Y", "_CustomData2Y_MaskMapOffsetY_Toggle", CustomData2YModeName, + drawBlock: (f) => + { + switch ((CustomData2YMode)f) + { + case CustomData2YMode.none: + shaderFlag.ClearFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA2Y_MASKMAPOFFSETY, index: 0); + shaderFlag.ClearFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA2Y_VERTEXOFFSETY, index: 1); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_MASK_OFFSET_Y,0); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_VERTEX_OFFSET_Y,1); + isCustomedData2Y = false; + break; + case CustomData2YMode.MaskOffsetY: + shaderFlag.SetFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA2Y_MASKMAPOFFSETY, index: 0); + shaderFlag.ClearFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA2Y_VERTEXOFFSETY, index: 1); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.CustomData2Y,W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_MASK_OFFSET_Y,0); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_VERTEX_OFFSET_Y,1); + isCustomedData2Y = true; + break; + case CustomData2YMode.VertexOffsetY: + shaderFlag.ClearFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA2Y_MASKMAPOFFSETY, index: 0); + shaderFlag.SetFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA2Y_VERTEXOFFSETY, index: 1); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_MASK_OFFSET_Y,0); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.CustomData2Y,W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_VERTEX_OFFSET_Y,1); + isCustomedData2Y = true; + break; + } + }); + + helper.DrawPopUp("CustomData2Z", "_CustomData2Z_FresnelOffset_Toggle", CustomData2ZModeName, + drawBlock: (f) => + { + switch ((CustomData2ZMode)f) + { + case CustomData2ZMode.none: + shaderFlag.ClearFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA2Z_FRESNELOFFSET, index: 0); + shaderFlag.ClearFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_CUSTOMDATA2Z_VERTEXOFFSET_INTENSITY, + index: 1); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_FRESNEL_OFFSET,0); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_VERTEXOFFSET_INTENSITY,1); + isCustomedData2Z = false; + break; + case CustomData2ZMode.FresnelOffset: + shaderFlag.SetFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA2Z_FRESNELOFFSET, index: 0); + shaderFlag.ClearFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_CUSTOMDATA2Z_VERTEXOFFSET_INTENSITY, + index: 1); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.CustomData2Z,W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_FRESNEL_OFFSET,0); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_VERTEXOFFSET_INTENSITY,1); + isCustomedData2Z = true; + break; + case CustomData2ZMode.VertexOffsetIntensity: + shaderFlag.ClearFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA2Z_FRESNELOFFSET, index: 0); + shaderFlag.SetFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_CUSTOMDATA2Z_VERTEXOFFSET_INTENSITY, + index: 1); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_FRESNEL_OFFSET,0); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.CustomData2Z,W9ParticleShaderFlags.FLAGBIT_POS_1_CUSTOMDATA_VERTEXOFFSET_INTENSITY,1); + isCustomedData2Z = true; + break; + } + }); + + helper.DrawPopUp("CustomData2W", "_CustomData2W_Toggle", CustomData2WModeName, drawBlock: (f) => + { + switch ((CustomData2WMode)f) + { + case CustomData2WMode.none: + shaderFlag.ClearFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA2W_CHORATICABERRAT_INTENSITY, + index: 1); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.Off,W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_CHORATICABERRAT_INTENSITY,0); + + isCustomedData2W = false; + break; + case CustomData2WMode.ChoraticaberratIntensity: + shaderFlag.SetFlagBits( + W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA2W_CHORATICABERRAT_INTENSITY, + index: 1); + shaderFlag.SetCustomDataFlag(W9ParticleShaderFlags.CutomDataComponent.CustomData2W,W9ParticleShaderFlags.FLAGBIT_POS_0_CUSTOMDATA_CHORATICABERRAT_INTENSITY,0); + isCustomedData2W = true; + break; + } + }); + + + bool isCustomedData1 = isCustomedData1X || isCustomedData1Y || isCustomedData1Z || isCustomedData1W; + isCustomedData1 = isCustomedData1 || shaderFlag.IsCustomData1On(); + + if (isCustomedData1) + { + shaderFlag.SetFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1_ON); + } + else + { + shaderFlag.ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1_ON); + } + + bool isCustomedData2 = isCustomedData2X || isCustomedData2Y || isCustomedData2Z ||isCustomedData2W; + isCustomedData2 = isCustomedData2 || shaderFlag.IsCustomData2On(); + if (isCustomedData2) + { + shaderFlag.SetFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA2_ON); + } + else + { + shaderFlag.ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA2_ON); + } + //旧版本结束。 + } + */ + #endregion + + for (int i = 0; i < mats.Count; i++) + { + if (shaderFlags[i].IsCustomData1On()) + { + shaderFlags[i].SetFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1_ON); + } + else + { + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1_ON); + } + + if (shaderFlags[i].IsCustomData2On()) + { + shaderFlags[i].SetFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA2_ON); + } + else + { + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA2_ON); + } + } + + } + // matEditor.RenderQueueField(); + helper.DrawRenderQueue(helper.GetProperty("_QueueBias")); + + if (isCustomedStencil) + { + helper.GetProperty("_CustomStencilTest").floatValue = 1f; + } + + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutCustomStencilTest,4,"模板调试开关","_CustomStencilTest",drawBlock: isTogle => + { + matEditor.ShaderProperty(helper.GetProperty("_Stencil"),"模板值"); + matEditor.ShaderProperty(helper.GetProperty("_StencilComp"),"模板比较方式"); + matEditor.ShaderProperty(helper.GetProperty("_StencilOp"),"模板处理方式"); + isCustomedStencil = isTogle; + + }); + + if (!isCustomedStencil && !_uieffectEnabled) + { + for (int i = 0; i < mats.Count; i++) + { + StencilTestHelper.SetMaterialStencil(mats[i], "ParticleBaseDefault", _stencilValuesConfig, out int ignore); + } + } + } + void DrawNoiseAffectBlock(Action drawBlock) + { + EditorGUI.BeginDisabledGroup(!_noiseEnabled); + drawBlock(); + EditorGUI.EndDisabledGroup(); + } + + public string[] blendModeNames = + { + "透明度混合AlphaBlend", + "预乘PreMultiply", + "叠加Additive", + "正片叠底Multiply" + }; + + public enum BlendMode + { + Alpha, // Old school alpha-blending mode, fresnel does not affect amount of transparency + Premultiply, // Physically plausible transparency mode, implemented as alpha pre-multiply + Additive, + Multiply, + Opaque + } + + public enum TimeMode + { + Default, + UnScaleTime, + ScriptableTime + } + + public enum RenderFace + { + Front = 2, + Back = 1, + Both = 0 + } + + public enum FresnelMode + { + Color = 0, + Fade = 1 + } + + public string[] transparentModeNames = + { + "不透明Opaque", + "半透明Transparent", + "不透明裁剪CutOff" + }; + + public enum TransparentMode + { + Opaque = 0, + Transparent = 1, + CutOff = 2 + } + + public enum CustomData1XMode + { + none = 0, + MainTexOffsetX = 1, + DissolveTexOffseX = 2 + } + + private string[] CustomData1XModeName = new string[] + { + "无", + "主贴图X轴偏移", + "溶解贴图X轴偏移" + }; + + + public enum CustomData1YMode + { + none = 0, + MainTexOffsetY = 1, + DissolveOffsexY = 2 + } + + private string[] CustomData1YModeName = new string[] + { + "无", + "主贴图Y轴偏移", + "溶解贴图Y轴偏移" + }; + public enum CustomData1ZMode + { + none = 0, + DissolveIntensity = 1, + NoiseIntensity = 2 + } + + private string[] CustomData1ZModeName = new string[] + { + "无", + "溶解强度", + "扭曲强度" + }; + + public enum CustomData1WMode + { + none = 0, + HueShift = 1, + Saturate = 2 + } + private string[] CustomData1WModeName = new string[] + { + "无", + "色相偏移", + "饱和度强度" + }; + + public enum CustomData2XMode + { + none = 0, + MaskOffsetX = 1, + VertexOffsetX = 2 + } + + private string[] CustomData2XModeName = new string[] + { + "无", + "Mask图X轴偏移", + "顶点扰动X轴偏移" + }; + + public enum CustomData2YMode + { + none = 0, + MaskOffsetY = 1, + VertexOffsetY = 2 + } + + private string[] CustomData2YModeName = new string[] + { + "无", + "Mask图Y轴偏移", + "顶点扰动Y轴偏移" + }; + public enum CustomData2ZMode + { + none = 0, + FresnelOffset = 1, + VertexOffsetIntensity = 2 + } + private string[] CustomData2ZModeName = new string[] + { + "无", + "菲涅尔范围", + "顶点扰动强度" + }; + public enum CustomData2WMode + { + none = 0, + ChoraticaberratIntensity = 1 + } + private string[] CustomData2WModeName = new string[] + { + "无", + "通道偏移强度" + }; + + void DoAfterDraw() + { + for (int i = 0; i < mats.Count; i++) + { + switch (_meshSourceMode) + { + case MeshSourceMode.Particle: + shaderFlags[i].SetFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_IS_PARTICLE_SYSTEM, index: 1); + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_UV_FROM_MESH, index: 1); + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_UIEFFECT_ON, index: 0); + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_UIEFFECT_SPRITE_MODE, + index: 1); + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_UIEFFECT_BASEMAP_MODE, + index: 1); + + //如果是粒子系统,则不需要走AnimationSheetHelper + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_ANIMATION_SHEET_HELPER); + break; + case MeshSourceMode.Mesh: + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_IS_PARTICLE_SYSTEM, + index: 1); + shaderFlags[i].SetFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_UV_FROM_MESH, index: 1); + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_UIEFFECT_ON, index: 0); + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_UIEFFECT_SPRITE_MODE, + index: 1); + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_UIEFFECT_BASEMAP_MODE, + index: 1); + break; + case MeshSourceMode.UIEffectRawImage: + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_IS_PARTICLE_SYSTEM, + index: 1); + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_UV_FROM_MESH, index: 1); + shaderFlags[i].SetFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_UIEFFECT_ON, index: 0); + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_UIEFFECT_SPRITE_MODE, + index: 1); + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_UIEFFECT_BASEMAP_MODE, + index: 1); + break; + case MeshSourceMode.UIEffectSprite: + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_IS_PARTICLE_SYSTEM, + index: 1); + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_UV_FROM_MESH, index: 1); + shaderFlags[i].SetFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_UIEFFECT_ON, index: 0); + shaderFlags[i].SetFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_UIEFFECT_SPRITE_MODE, + index: 1); + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_UIEFFECT_BASEMAP_MODE, + index: 1); + break; + case MeshSourceMode.UIEffectBaseMap: + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_IS_PARTICLE_SYSTEM, + index: 1); + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_UV_FROM_MESH, index: 1); + shaderFlags[i].SetFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_UIEFFECT_ON, index: 0); + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_UIEFFECT_SPRITE_MODE, + index: 1); + shaderFlags[i].SetFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_UIEFFECT_BASEMAP_MODE, + index: 1); + break; + } + + if (!shaderFlags[i].CheckIsUVModeOn(W9ParticleShaderFlags.UVMode.SpecialUVChannel)) + { + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_USE_TEXCOORD1, index: 1); + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_USE_TEXCOORD2, index: 1); + } + + if (!shaderFlags[i].CheckIsUVModeOn(W9ParticleShaderFlags.UVMode.Cylinder)) + { + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_CYLINDER_CORDINATE, index: 1); + } + + + TransparentMode transparentMode = (TransparentMode)mats[i].GetFloat("_TransparentMode"); + switch (_transparentMode) + { + case TransparentMode.Opaque: + mats[i].SetInt("_ZWrite", (int)1); + mats[i].renderQueue = 2100 + (int)helper.GetProperty("_QueueBias").floatValue; //3D粒子永远最前显示 + mats[i].SetInt("_Blend", (int)BlendMode.Opaque); + break; + case TransparentMode.Transparent: + if (helper.GetProperty("_ForceZWriteToggle").floatValue > 0.5f) + { + mats[i].SetInt("_ZWrite", (int)1); + } + else + { + mats[i].SetInt("_ZWrite", (int)0); + } + + int defaultQueue = 3100; + if (_uieffectEnabled||_uiParticleEnabled) + { + defaultQueue = 3000; + } + + mats[i].renderQueue = defaultQueue + (int)helper.GetProperty("_QueueBias").floatValue; //3D粒子永远最前显示 + + BlendMode bm = (BlendMode)mats[i].GetFloat("_Blend"); + if (bm == BlendMode.Opaque) + { + mats[i].SetFloat("_Blend", (float)BlendMode.Alpha); //如果设置错误则强制设置。 + } + + break; + case TransparentMode.CutOff: + mats[i].SetInt("_ZWrite", (int)1); + mats[i].renderQueue = 2450 + (int)helper.GetProperty("_QueueBias").floatValue; //3D粒子永远最前显示 + mats[i].SetInt("_Blend", (int)BlendMode.Opaque); + break; + } + + if (_transparentMode == TransparentMode.CutOff) + { + mats[i].EnableKeyword("_ALPHATEST_ON"); + } + else + { + mats[i].DisableKeyword("_ALPHATEST_ON"); + } + + + + // blendMode + BlendMode blendMode = (BlendMode)mats[i].GetFloat("_Blend"); + + switch (blendMode) + { + case BlendMode.Alpha: + mats[i].SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha); + mats[i].SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + // mat.DisableKeyword("_ALPHAPREMULTIPLY_ON"); + break; + case BlendMode.Premultiply: + mats[i].SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + mats[i].SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + // mat.EnableKeyword("_ALPHAPREMULTIPLY_ON"); + break; + case BlendMode.Additive: + mats[i].SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha); + mats[i].SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + // mat.DisableKeyword("_ALPHAPREMULTIPLY_ON"); + break; + case BlendMode.Multiply: + mats[i].SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + mats[i].SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); + // mat.DisableKeyword("_ALPHAPREMULTIPLY_ON"); + // mat.EnableKeyword("_ALPHAMODULATE_ON"); + break; + case BlendMode.Opaque: + mats[i].SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + mats[i].SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); + break; + } + + TimeMode timeMode = (TimeMode)mats[i].GetFloat("_TimeMode"); + + switch (timeMode) + { + case TimeMode.Default: + // setMaterialFlags(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_UNSCALETIME_ON, false); + // setMaterialFlags(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_SCRIPTABLETIME_ON, false); + shaderFlags[i].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_UNSCALETIME_ON); + shaderFlags[i].CheckFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_SCRIPTABLETIME_ON); + break; + case TimeMode.UnScaleTime: + // setMaterialFlags(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_UNSCALETIME_ON, true); + // setMaterialFlags(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_SCRIPTABLETIME_ON, false); + shaderFlags[i].SetFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_UNSCALETIME_ON); + shaderFlags[i].CheckFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_SCRIPTABLETIME_ON); + break; + case TimeMode.ScriptableTime: + // setMaterialFlags(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_UNSCALETIME_ON, false); + // setMaterialFlags(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_SCRIPTABLETIME_ON, true); + shaderFlags[i].CheckFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_UNSCALETIME_ON); + shaderFlags[i].SetFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_SCRIPTABLETIME_ON); + break; + } + } + } + + public static GUIContent VertexStreams = new GUIContent("顶点流统计", + "The vertex streams needed for this Material to function properly."); + + public static string streamPositionText = "Position (POSITION.xyz)"; + public static string streamNormalText = "Normal (NORMAL.xyz)"; + public static string streamColorText = "Color (COLOR.xyzw)"; + public static string streamUVText = "UV (TEXCOORD0.xy)"; + public static string streamUV3Text = "UV3 (TEXCOORD0.zw)"; + public static string streamUV2Text = "UV2 (TEXCOORD0.zw)"; + public static string streamUV2AndAnimBlendText = "UV2 (TEXCOORD3.zw)"; + public static string streamUV3AndAnimBlendText = "UV3 (TEXCOORD3.zw)"; + public static string streamAnimBlendText = "AnimBlend (TEXCOORD3.x)"; + public static string streamTangentText = "Tangent (TANGENT.xyzw)"; + public static string streamCustom1Text = "Custom1.xyzw(TEXCOORD1.xyzw)"; + public static string streamCustom2Text = "Custom2.xyzw(TEXCOORD2.xyzw)"; + + + public static GUIContent streamApplyToAllSystemsText = new GUIContent("使粒子与材质顶点流相同", + "Apply the vertex stream layout to all Particle Systems using this material"); + + public static string undoApplyCustomVertexStreams = L10n.Tr("Apply custom vertex streams from material"); + + List m_RenderersUsingThisMaterial = new List(); + + private bool checkIsParicleSystem = false; + void CacheRenderersUsingThisMaterial(Material material, int matID) + { + checkIsParicleSystem = false; + m_RenderersUsingThisMaterial.Clear(); + #if UNITY_2022_1_OR_NEWER + ParticleSystemRenderer[] renderers = + UnityEngine.Object.FindObjectsByType(typeof(ParticleSystemRenderer),FindObjectsSortMode.None) as ParticleSystemRenderer[]; + #else + ParticleSystemRenderer[] renderers = + UnityEngine.Object.FindObjectsOfType(typeof(ParticleSystemRenderer)) as ParticleSystemRenderer[]; + #endif + foreach (ParticleSystemRenderer renderer in renderers) + { + if (renderer.sharedMaterial == material || renderer.trailMaterial == material) + { + checkIsParicleSystem = true; + shaderFlags[matID].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_ANIMATION_SHEET_HELPER,index:1);//如果是粒子系统用,就主动关掉Helper的类型。 + m_RenderersUsingThisMaterial.Add(renderer); + } + } + } + + //雨轩:UnityEditorInternal命名空间下提供 一个类ReorderableList可以实现通过拖曳来达到列表元素的重新排序。 + private static ReorderableList vertexStreamList; + //构建粒子系统顶点流界面 + public void DoVertexStreamsArea(Material material, List renderers, + int matID, bool useLighting = false) + { + EditorGUILayout.Space(); + + // bool useFlipbookBlending = (material.GetFloat("_FlipbookBlending") > 0.0f); + bool useFlipbookBlending = material.IsKeywordEnabled("_FLIPBOOKBLENDING_ON"); + bool useSpecialUVChannel = shaderFlags[matID].CheckIsUVModeOn(W9ParticleShaderFlags.UVMode.SpecialUVChannel); + bool isUseUV3ForSpecialUV = + shaderFlags[matID].CheckFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_USE_TEXCOORD2, index:1); + // bool CustomDataEnabled = (material.GetFloat("_CustomData") > 0.0f); + bool isCustomData1 = shaderFlags[matID].CheckFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA1_ON); + bool isCustomData2 = shaderFlags[matID].CheckFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_CUSTOMDATA2_ON); + + + // Build the list of expected vertex streams + List streams = new List(); + List streamList = new List(); + + streams.Add(ParticleSystemVertexStream.Position); //必然会传递有顶点位置信息 + streamList.Add(streamPositionText); //记录顶点位置信息,给GUI面板用 + + bool needTangent = false; + bool needNormal = false; + + needNormal = (material.GetFloat("_VertexOffset_NormalDir_Toggle") > 0.5f); + + //如果有灯光,必有法线信息。如果有法线贴图,必有顶点切线法线信息。 + //菲涅尔效果需要用到法线内容。 + if (material.GetFloat("_fresnelEnabled") > 0.5f) + { + needNormal = true; + needTangent = true; + } + + if (material.GetFloat("_ParallaxMapping_Toggle") > 0.5f) + { + needTangent = true; + } + + bool useUV3AsMainUV = shaderFlags[matID].CheckFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_USETEXCOORD2); + + if (needTangent) + { + streams.Add(ParticleSystemVertexStream.Tangent); + streamList.Add(streamTangentText); + } + + if (needNormal) + { + streams.Add(ParticleSystemVertexStream.Normal); + streamList.Add(streamNormalText); + } + + //粒子着色器,必有顶点颜色信息。 + streams.Add(ParticleSystemVertexStream.Color); + streamList.Add(streamColorText); + + //TEXCOORD0填充 + //必有顶点第一套UV信息。 + streams.Add(ParticleSystemVertexStream.UV); + streamList.Add(streamUVText); + //在做动画序列帧时,需要:TEXCOORD1(xy为正常uv,zw为Blend用的第二套uv),:TEXCOORD2(x为Blend混合值) + if (useFlipbookBlending && useSpecialUVChannel) + { + streams.Add(ParticleSystemVertexStream.UV2); + streamList.Add(streamUV2Text); + } + else if (useSpecialUVChannel & !useFlipbookBlending) + { + + if (isUseUV3ForSpecialUV) + { + streams.Add(ParticleSystemVertexStream.UV3); + streamList.Add(streamUV3Text); + } + else + { + streams.Add(ParticleSystemVertexStream.UV2); + streamList.Add(streamUV2Text); + } + + } + else if (useFlipbookBlending & !useSpecialUVChannel) + { + if (!streams.Contains(ParticleSystemVertexStream.UV2)) + { + streams.Add(ParticleSystemVertexStream.UV2); + streamList.Add(streamUV2Text); + } + } + else if(isCustomData1 || isCustomData2) + { + streams.Add(ParticleSystemVertexStream.UV2); + streamList.Add(streamUV2Text); + } + + + //填充TEXCOORD1 + bool isFillSkipUV2 = false;//因为如果要使用UV3,粒子系统必须填充UV2才能激活 + if (isCustomData1 || isCustomData2 || useFlipbookBlending) + { + streams.Add(ParticleSystemVertexStream.Custom1XYZW); + streamList.Add(streamCustom1Text); + } + else if(useSpecialUVChannel & isUseUV3ForSpecialUV) + { + streams.Add(ParticleSystemVertexStream.UV2); + streamList.Add("TEXCOORD1.xy"); + isFillSkipUV2 = true; + } + + //填充TEXCOORD2 + if (isCustomData2 || useFlipbookBlending) + { + streams.Add(ParticleSystemVertexStream.Custom2XYZW); + streamList.Add(streamCustom2Text); + } + else if(useSpecialUVChannel & isUseUV3ForSpecialUV & !isFillSkipUV2) + { + streams.Add(ParticleSystemVertexStream.UV2); + streamList.Add("TEXCOORD2.xy"); + isFillSkipUV2 = true; + } + + //填充TEXCOORD3 + if (useFlipbookBlending) + { + streams.Add(ParticleSystemVertexStream.AnimBlend); + streamList.Add(streamAnimBlendText); + if (useSpecialUVChannel) + { + if (isUseUV3ForSpecialUV) + { + streams.Add(ParticleSystemVertexStream.UV3); + streamList.Add(streamUV3AndAnimBlendText); + } + } + } + else if(useSpecialUVChannel & isUseUV3ForSpecialUV & !isFillSkipUV2) + { + streams.Add(ParticleSystemVertexStream.UV2); + streamList.Add("TEXCOORD3.xy"); + } + + // //如果是融合序列帧,则要跨越到Texcoord3 + // //如果是使用UV3,则需要用一个UV2开启来让粒子系统输出UV3 + // if (useFlipbookBlending || isUseUV3ForSpecialUV) + // { + // + // //利用Custom1XYZW跨过TEXCOORD1; + // if (!streams.Contains(ParticleSystemVertexStream.Custom1XYZW)) + // { + // + // } + // + // //利用Custom1XYZW跨过TEXCOORD2; + // if (!streams.Contains(ParticleSystemVertexStream.Custom2XYZW)) + // { + // streams.Add(ParticleSystemVertexStream.Custom2XYZW); + // streamList.Add(streamCustom2Text); + // } + // + // + // } + // + // + // if (isCustomData1 || isCustomData2) //是否在使用后可以自定义开启,不需要另外写开关 + // { + // if (!streams.Contains(ParticleSystemVertexStream.UV2)) + // { + // streams.Add(ParticleSystemVertexStream.UV2); //需要跨过UV2,所以加入UV2 + // streamList.Add(streamUV2Text); + // } + // + // if (!streams.Contains(ParticleSystemVertexStream.Custom1XYZW)) + // { + // streams.Add(ParticleSystemVertexStream.Custom1XYZW); + // streamList.Add(streamCustom1Text); + // } + // + // if (isCustomData2) + // { + // if (!streams.Contains(ParticleSystemVertexStream.Custom2XYZW)) + // { + // streams.Add(ParticleSystemVertexStream.Custom2XYZW); + // streamList.Add(streamCustom2Text); + // } + // } + // } + + + //可排序列表绘制。 + //创建一个可排序列表 + vertexStreamList = new ReorderableList(streamList, typeof(string), false, true, false, false); + + //创建表头。ReorderableList下面还有很多回调。可以按需选择。 + vertexStreamList.drawHeaderCallback = (Rect rect) => { EditorGUI.LabelField(rect, "Vertex Streams"); }; + + vertexStreamList.DoLayoutList(); //执行表格绘制。 + + // Display a warning if any renderers have incorrect vertex streams + string Warnings = ""; + List rendererStreams = new List(); + foreach (ParticleSystemRenderer renderer in renderers) //每个使用该材质的粒子系统都会进行比较 + { + renderer.GetActiveVertexStreams(rendererStreams); //获得ParticleSystemRenderer的顶点流 + if (!rendererStreams.SequenceEqual(streams)) //重点!是否和我们拼装的顶点流一致。 + Warnings += "-" + renderer.name + "\n"; + } + + // + if (!string.IsNullOrEmpty(Warnings)) + { + //如果有Warning + EditorGUILayout.HelpBox( + "下面的粒子系统Renderer顶点流不正确:\n" + + Warnings, MessageType.Error, true); + // Set the streams on all systems using this materialz + if (GUILayout.Button("使粒子与材质顶点流相同", EditorStyles.miniButton, + GUILayout.ExpandWidth(true))) + { + //做一个撤回记录。 + Undo.RecordObjects(renderers.Where(r => r != null).ToArray(), "Apply custom vertex streams from material"); + + //重点!直接赋值我们拼装好的顶点流。 + foreach (ParticleSystemRenderer renderer in renderers) + { + renderer.SetActiveVertexStreams(streams); + + } + } + } + + //从2022.3.11开始添加这个功能。 + #if UNITY_2022_3_OR_NEWER && !(UNITY_2022_3_0 ||UNITY_2022_3_1||UNITY_2022_3_2||UNITY_2022_3_3||UNITY_2022_3_4||UNITY_2022_3_5||UNITY_2022_3_6||UNITY_2022_3_7||UNITY_2022_3_8||UNITY_2022_3_9||UNITY_2022_3_10) + // Display a warning if any renderers have incorrect vertex streams + string trailWarnings = ""; + List trailRendererStreams = new List(); + foreach (ParticleSystemRenderer renderer in renderers) //每个使用该材质的粒子系统都会进行比较 + { + renderer.GetActiveTrailVertexStreams(trailRendererStreams); //获得ParticleSystemRenderer的顶点流 + if (!trailRendererStreams.SequenceEqual(streams)) //重点!是否和我们拼装的顶点流一致。 + trailWarnings += "-" + renderer.name + "\n"; + } + + if (!string.IsNullOrEmpty(trailWarnings)) + { + //如果有Warning + EditorGUILayout.HelpBox( + "下面的粒子系统Renderer拖尾顶点流不正确:\n" + + trailWarnings, MessageType.Error, true); + // Set the streams on all systems using this material + if (GUILayout.Button("使粒子拖尾与材质顶点流相同", EditorStyles.miniButton, + GUILayout.ExpandWidth(true))) + { + //做一个撤回记录。 + Undo.RecordObjects(renderers.Where(r => r != null).ToArray(), "Apply custom vertex streams from material"); + + //重点!直接赋值我们拼装好的顶点流。 + foreach (ParticleSystemRenderer renderer in renderers) + { + renderer.SetActiveTrailVertexStreams(streams); + } + } + } + #endif + + /* + */ + } + + private string[] _customDataOptions = + { + "**不使用**", + "CustomData1_X", + "CustomData1_Y", + "CustomData1_Z", + "CustomData1_W", + "CustomData2_X", + "CustomData2_Y", + "CustomData2_Z", + "CustomData2_W" + }; + + public void DrawCustomDataSelect(string label, int dataBitPos, int dataIndex) + { + // if(!_isUseParticleSystem)return;//只有粒子系统才会处理相关内容。 + if (mats.Count != 1) return; //仅单选触发 + + if(!(_meshSourceMode == MeshSourceMode.Particle || _uiParticleEnabled) ) return; + EditorGUI.showMixedValue = + helper.GetProperty(shaderFlags[0].GetCustomDataFlagPropertyName(dataIndex)).hasMixedValue; + W9ParticleShaderFlags.CutomDataComponent component = shaderFlags[0].GetCustomDataFlag(dataBitPos, dataIndex); + EditorGUI.BeginChangeCheck(); + GUIContent[] optionGUIContents = new GUIContent[_customDataOptions.Length]; + for (int i = 0; i < optionGUIContents.Length; i++) + { + optionGUIContents[i] = new GUIContent(_customDataOptions[i]); + } + component = (W9ParticleShaderFlags.CutomDataComponent)EditorGUILayout.Popup(new GUIContent(label), (int)component, optionGUIContents); + if (EditorGUI.EndChangeCheck()) + { + shaderFlags[0].SetCustomDataFlag(component,dataBitPos,dataIndex); + } + EditorGUI.showMixedValue = false; + } + + + private string[] _uvModeNames = + { + "默认UV通道", + "特殊UV通道", + "极坐标|旋转", + "圆柱无缝" + }; + + enum SpecialUVChannelMode + { + UV2_Texcoord1, + UV3_Texcoord2 + } + public void DrawUVModeSelect(int foldOutFlagBit, int foldOutFlagIndex,string label, int dataBitPos, int dataIndex,bool hasMap = true) + { + if (mats.Count != 1) return; //仅单选触发 + EditorGUI.BeginDisabledGroup(!hasMap); + EditorGUI.indentLevel++; + // EditorGUILayout.BeginHorizontal(); + EditorGUI.showMixedValue = helper.GetProperty(shaderFlags[0].GetUVModePropName(dataIndex)).hasMixedValue; + W9ParticleShaderFlags.UVMode uvMode = shaderFlags[0].GetUVMode(dataBitPos, dataIndex); + EditorGUI.BeginChangeCheck(); + GUIContent[] optinGUIContents = new GUIContent[_uvModeNames.Length]; + for (int i = 0; i < _uvModeNames.Length; i++) + { + optinGUIContents[i] = new GUIContent(_uvModeNames[i]); + } + + // uvMode = (W9ParticleShaderFlags.UVMode)EditorGUILayout.Popup(new GUIContent(label), (int)uvMode,optinGUIContents); + + EditorGUILayout.BeginHorizontal(); + + + Rect rect = EditorGUILayout.GetControlRect(); + var labelRect = new Rect(rect.x + 2f, rect.y, rect.width - 2f, rect.height); + var popUpRect = helper.GetRectAfterLabelWidth(rect,true); + uvMode = (W9ParticleShaderFlags.UVMode) EditorGUI.Popup(popUpRect, (int)uvMode, optinGUIContents); + bool foldOutState = shaderFlags[0].CheckFlagBits(foldOutFlagBit, index: foldOutFlagIndex); + AnimBool animBool = GetAnimBool(foldOutFlagBit, foldOutFlagIndex-3, foldOutFlagIndex); + animBool.target = foldOutState; + animBool.target = EditorGUI.Foldout(rect, animBool.target, string.Empty, true); + foldOutState = animBool.target; + if (foldOutState) + { + shaderFlags[0].SetFlagBits(foldOutFlagBit, index: foldOutFlagIndex); + } + else + { + shaderFlags[0].ClearFlagBits(foldOutFlagBit, index: foldOutFlagIndex); + } + EditorGUI.LabelField(labelRect,label); + + + + EditorGUILayout.EndHorizontal(); + + if (EditorGUI.EndChangeCheck()) + { + shaderFlags[0].SetUVMode(uvMode, dataBitPos, dataIndex); + } + + EditorGUI.showMixedValue = false; + + EditorGUI.indentLevel++; + // if (foldOutState) + // { + float faded = animBool.faded; + if (faded == 0) faded = 0.0001f; + EditorGUILayout.BeginFadeGroup(faded); + if (uvMode != W9ParticleShaderFlags.UVMode.DefaultUVChannel) + { + EditorGUILayout.LabelField("以下设置材质内通用:",EditorStyles.boldLabel); + } + + switch (uvMode) + { + case W9ParticleShaderFlags.UVMode.SpecialUVChannel: + helper.DrawPopUp("特殊UV通道选择","_SpecialUVChannelMode", Enum.GetNames(typeof(SpecialUVChannelMode)), + drawBlock: + specialUVChannelMode => + { + //这个设置就是全局的。 + SpecialUVChannelMode spUVMode = (SpecialUVChannelMode)specialUVChannelMode; + switch (spUVMode) + { + case SpecialUVChannelMode.UV2_Texcoord1: + shaderFlags[0].SetFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_USE_TEXCOORD1,index:1); + shaderFlags[0].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_USE_TEXCOORD2,index:1); + break; + case SpecialUVChannelMode.UV3_Texcoord2: + shaderFlags[0].ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_USE_TEXCOORD1,index:1); + shaderFlags[0].SetFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_USE_TEXCOORD2,index:1); + break; + } + }); + break; + case W9ParticleShaderFlags.UVMode.PolarOrTwirl: + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutBitTwril,3,"旋转扭曲","_UTwirlEnabled",flagBitsName:W9ParticleShaderFlags.FLAG_BIT_PARTICLE_UTWIRL_ON,drawBlock:(isToggle) =>{ + helper.DrawVector4In2Line("_TWParameter","旋转扭曲中心"); + helper.DrawFloat("旋转扭曲强度","_TWStrength"); + }); + + DrawToggleFoldOut(W9ParticleShaderFlags.foldOutBitPolar,3,"极坐标", "_PolarCoordinatesEnabled",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_POLARCOORDINATES_ON,drawBlock:(isToggle) =>{ + // helper.DrawToggle("极坐标只影响特殊功能","_PolarCordinateOnlySpecialFunciton_Toggle",W9ParticleShaderFlags.FLAG_BIT_PARTICLE_PC_ONLYSPECIALFUNC); + helper.DrawVector4In2Line("_PCCenter","极坐标中心"); + helper.DrawVector4Componet("极坐标强度","_PCCenter","z",true,0f,1f); + }); + break; + case W9ParticleShaderFlags.UVMode.Cylinder: + EditorGUILayout.LabelField("圆柱模式消耗比较大,慎用"); + helper.DrawVector4XYZComponet("圆柱坐标旋转","_CylinderUVRotate"); + helper.DrawVector4XYZComponet("圆柱坐标偏移","_CylinderUVPosOffset"); + Matrix4x4 cylinderMatrix = + Matrix4x4.Translate(helper.GetProperty("_CylinderUVPosOffset").vectorValue) * + Matrix4x4.Rotate(Quaternion.Euler(helper.GetProperty("_CylinderUVRotate").vectorValue)); + helper.GetProperty("_CylinderMatrix0").vectorValue =cylinderMatrix.GetRow(0); + helper.GetProperty("_CylinderMatrix1").vectorValue =cylinderMatrix.GetRow(1); + helper.GetProperty("_CylinderMatrix2").vectorValue =cylinderMatrix.GetRow(2); + helper.GetProperty("_CylinderMatrix3").vectorValue =cylinderMatrix.GetRow(3); + shaderFlags[0].SetFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_CYLINDER_CORDINATE,index:1); + break; + } + + // } + EditorGUILayout.EndFadeGroup(); + EditorGUI.indentLevel--; + EditorGUI.indentLevel--; + EditorGUI.EndDisabledGroup(); + + } + + private string[] _meshSourceModeNames = + { + "粒子系统", + "模型(非粒子发射)", + "2D RawImage", + "2D 精灵", + "2D 材质贴图", + "2D UIParticle" + }; + + enum MeshSourceMode + { + Particle, + Mesh, + UIEffectRawImage, + UIEffectSprite, + UIEffectBaseMap, + UIParticle + } + void SetUVModeByOldSettings() + { + bool isTwril = shaderFlags[0].CheckFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_UTWIRL_ON); + bool isPolar = shaderFlags[0].CheckFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_POLARCOORDINATES_ON); + bool baseMapNoPolar = + shaderFlags[0].CheckFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_PC_ONLYSPECIALFUNC); + + for (int j = 0; j < 16; j++) + { + if (isTwril || isPolar) + { + if (j == 0) + { + if (baseMapNoPolar) + { + shaderFlags[0].SetUVMode(W9ParticleShaderFlags.UVMode.DefaultUVChannel, j * 2); + continue; + } + } + + shaderFlags[0].SetUVMode(W9ParticleShaderFlags.UVMode.PolarOrTwirl, j * 2); + } + } + } + + public void DrawTextureFoldOut(int foldOutFlagBit,int foldOutFlagIndex,string label, string texturePropertyName, + string colorPropertyName = null, bool drawScaleOffset = true, bool drawWrapMode = false, + int flagBitsName = 0, int flagIndex = 2, Action drawBlock = null) + { + bool foldOutState = shaderFlags[0].CheckFlagBits(foldOutFlagBit, index: foldOutFlagIndex); + AnimBool animBool = GetAnimBool(foldOutFlagBit, foldOutFlagIndex - 3, foldOutFlagIndex); + animBool.target = foldOutState; + helper.DrawTextureFoldOut(ref animBool, label, texturePropertyName, colorPropertyName, drawScaleOffset, + drawWrapMode, flagBitsName, flagIndex, drawBlock); + foldOutState = animBool.target; + if (foldOutState) + { + shaderFlags[0].SetFlagBits(foldOutFlagBit, index: foldOutFlagIndex); + } + else + { + shaderFlags[0].ClearFlagBits(foldOutFlagBit, index: foldOutFlagIndex); + } + } + + public void DrawToggleFoldOut(int foldOutFlagBit,int foldOutFlagIndex, string label, string propertyName = null, + int flagBitsName = 0, + int flagIndex = 0, string shaderKeyword = null, string shaderPassName = null, bool isIndentBlock = true, FontStyle fontStyle = FontStyle.Normal, + Action drawBlock = null,Action drawEndChangeCheck = null) + { + bool foldOutState = shaderFlags[0].CheckFlagBits(foldOutFlagBit, index: foldOutFlagIndex); + AnimBool animBool = GetAnimBool(foldOutFlagBit, foldOutFlagIndex - 3, foldOutFlagIndex); //foldOut里的第一组。 + animBool.target = foldOutState; + helper.DrawToggleFoldOut(ref animBool, label, propertyName, flagBitsName, flagIndex, shaderKeyword, + shaderPassName, isIndentBlock, fontStyle, drawBlock, drawEndChangeCheck); + foldOutState = animBool.target; + if (foldOutState) + { + shaderFlags[0].SetFlagBits(foldOutFlagBit, index: foldOutFlagIndex); + } + else + { + shaderFlags[0].ClearFlagBits(foldOutFlagBit, index: foldOutFlagIndex); + } + } + + public void DrawBigBlockFoldOut(int foldOutFlagBit,int foldOutFlagIndex ,string label, Action drawBlock) + { + bool foldOutState = shaderFlags[0].CheckFlagBits(foldOutFlagBit, index: foldOutFlagIndex); + AnimBool animBool = GetAnimBool(foldOutFlagBit, foldOutFlagIndex - 3, foldOutFlagIndex); + animBool.target = foldOutState; + helper.DrawBigBlockFoldOut(ref animBool, label, drawBlock); + foldOutState = animBool.target; + if (foldOutState) + { + shaderFlags[0].SetFlagBits(foldOutFlagBit, index: foldOutFlagIndex); + } + else + { + shaderFlags[0].ClearFlagBits(foldOutFlagBit, index: foldOutFlagIndex); + } + } + + private AnimBool[] animBoolArr = new AnimBool[96];//先假定有3组。和存好的bit一一对应。 + + //不是 + AnimBool GetAnimBool(int flagBit, int AnimBoolIndex,int flagIndex) + { + int bitPos = 0; + for (int i = 0; i < 32; i++) + { + if ((flagBit & (1 << i)) > 0) + { + bitPos = i; + break; + } + } + int arrIndex = AnimBoolIndex * 32 + bitPos; + // Debug.Log(arrIndex.ToString() +"---"+ animBoolArr[arrIndex]); + if (animBoolArr[arrIndex] == null) + { + animBoolArr[arrIndex] = new AnimBool(shaderFlags[0].CheckFlagBits(flagBit,index:flagIndex)); + } + + return animBoolArr[arrIndex]; + } + } +} \ No newline at end of file diff --git a/Packages/NBShaders/Editor/ParticleBaseGUI.cs.meta b/Packages/NBShaders/Editor/ParticleBaseGUI.cs.meta new file mode 100644 index 00000000..0ef4d295 --- /dev/null +++ b/Packages/NBShaders/Editor/ParticleBaseGUI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 01d5272ee28d1384d9f555c579592a6b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBShaders/Editor/com.xuanxuan.nb.shaders.Editor.asmdef b/Packages/NBShaders/Editor/com.xuanxuan.nb.shaders.Editor.asmdef new file mode 100644 index 00000000..d6a97061 --- /dev/null +++ b/Packages/NBShaders/Editor/com.xuanxuan.nb.shaders.Editor.asmdef @@ -0,0 +1,20 @@ +{ + "name": "com.xuanxuan.nb.shaders.Editor", + "rootNamespace": "", + "references": [ + "GUID:0e3b0e6ce60c7a34094f8f9822c0b7f2", + "GUID:8495541fcd41b0c40b5b6e6e7a7639d1", + "GUID:8f9e4d586616f13449cfeb86c5f704c2" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Packages/NBShaders/Editor/com.xuanxuan.nb.shaders.Editor.asmdef.meta b/Packages/NBShaders/Editor/com.xuanxuan.nb.shaders.Editor.asmdef.meta new file mode 100644 index 00000000..a60870d2 --- /dev/null +++ b/Packages/NBShaders/Editor/com.xuanxuan.nb.shaders.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5e03fab8dc9c256468083d9bc82a73c3 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBShaders/LICENSE b/Packages/NBShaders/LICENSE new file mode 100644 index 00000000..033f7953 --- /dev/null +++ b/Packages/NBShaders/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 xuanshushu + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Packages/NBShaders/LICENSE.meta b/Packages/NBShaders/LICENSE.meta new file mode 100644 index 00000000..f7ec6661 --- /dev/null +++ b/Packages/NBShaders/LICENSE.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1b8d5ffb7acb5d647b3ad813acc372da +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBShaders/README.md b/Packages/NBShaders/README.md new file mode 100644 index 00000000..892d5e93 --- /dev/null +++ b/Packages/NBShaders/README.md @@ -0,0 +1,2 @@ +# NBShaders +This is a powerful and versatile Unity VFX shader. diff --git a/Packages/NBShaders/README.md.meta b/Packages/NBShaders/README.md.meta new file mode 100644 index 00000000..53729686 --- /dev/null +++ b/Packages/NBShaders/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: add0a5ef687222e46a7319724739db61 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBShaders/Runtime.meta b/Packages/NBShaders/Runtime.meta new file mode 100644 index 00000000..ce5efe5a --- /dev/null +++ b/Packages/NBShaders/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4684518ac782305428f8c0434c85d1c0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBShaders/Runtime/NBShaderSpriteHelper.cs b/Packages/NBShaders/Runtime/NBShaderSpriteHelper.cs new file mode 100644 index 00000000..bca96a9c --- /dev/null +++ b/Packages/NBShaders/Runtime/NBShaderSpriteHelper.cs @@ -0,0 +1,90 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; +// using Sirenix.OdinInspector; + +[ExecuteAlways] +public class NBShaderSpriteHelper : MonoBehaviour +{ + public Sprite sprite; + // [ReadOnly] + public SpriteRenderer spRenderer; + // [ReadOnly] + public Image image; + + [InspectorButton("初始化","Init")] + public bool ButtomInspector; + + private Material mat; + + + + // Start is called before the first frame update + void Start() + { + Init(); + } + + void Init() + { + if (TryGetComponent(out SpriteRenderer spr)) + { + spRenderer = spr; + sprite = spr.sprite; + } + else + { + if (TryGetComponent(out Image im)) + { + image = im; + sprite = im.sprite; + } + } + + + + if (sprite) + { + Texture texture = sprite.texture; + Rect rect = sprite.textureRect; + // sharedMaterial.SetVector("_BaseMapReverseST",CalScaleOffset(spRenderer.sprite.textureRect,spRenderer.sprite.texture)); + + if (spRenderer) + { + if (Application.isPlaying) + { + mat = spRenderer.material; + } + else + { + mat = spRenderer.sharedMaterial; + } + } + else if(image) + { + mat = image.material; + } + + if (mat && mat.shader.name == "XuanXuan/Effects/Particle_NiuBi") + { + mat.SetVector("_MainTex_Reverse_ST",CalScaleOffset(rect,texture)); + Debug.Log(mat.name); + } + } + + + + } + + Vector4 CalScaleOffset(Rect textureRect,Texture texture) + { + //这是一个反向的scale offset。 + //算法:如果原scale offset。转换后会是 scaleAfter= 1 / scale , offsetAfter = - offset/scale; + Vector2 scaleAfter = new Vector2(texture.width / textureRect.width, texture.height / textureRect.height); + Vector2 offsetAfter = new Vector2(-(textureRect.x / texture.width) * scaleAfter.x, + -(textureRect.y / texture.height) * scaleAfter.y); + Vector4 scaleOffset = new Vector4(scaleAfter.x,scaleAfter.y,offsetAfter.x,offsetAfter.y); + return scaleOffset; + } +} diff --git a/Packages/NBShaders/Runtime/NBShaderSpriteHelper.cs.meta b/Packages/NBShaders/Runtime/NBShaderSpriteHelper.cs.meta new file mode 100644 index 00000000..959dac85 --- /dev/null +++ b/Packages/NBShaders/Runtime/NBShaderSpriteHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 58ec7ff2f9b58f5459946ac86028eacf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBShaders/Runtime/W9ParticleShaderFlags.cs b/Packages/NBShaders/Runtime/W9ParticleShaderFlags.cs new file mode 100644 index 00000000..bcc1a20c --- /dev/null +++ b/Packages/NBShaders/Runtime/W9ParticleShaderFlags.cs @@ -0,0 +1,664 @@ +using System; +using UnityEngine; + +public class W9ParticleShaderFlags: ShaderFlagsBase +{ + public const string FlagsName = "_W9ParticleShaderFlags"; + public static int FlagsId = Shader.PropertyToID(FlagsName); + + + public const string Flags1Name = "_W9ParticleShaderFlags1"; + public static int Flags1Id = Shader.PropertyToID(Flags1Name); + + public const string WrapFlagsName = "_W9ParticleShaderWrapFlags"; + public static int WrapFlagsId = Shader.PropertyToID(WrapFlagsName); + + public const string foldOutFlagName = "_W9ParticleShaderGUIFoldToggle"; + public static int foldOutFlagId = Shader.PropertyToID(foldOutFlagName); + + public const string foldOutFlagName1 = "_W9ParticleShaderGUIFoldToggle1"; + public static int foldOutFlagId1 = Shader.PropertyToID(foldOutFlagName1); + + + protected override int GetShaderFlagsId(int index = 0) + { + switch (index) + { + case 0: + return FlagsId; + + case 1: + return Flags1Id; + + case 2: + return WrapFlagsId; + + case 3: + return foldOutFlagId; + + case 4: + return foldOutFlagId1; + + default: + return FlagsId; + } + } + + protected override string GetShaderFlagsName(int index = 0) + { + switch (index) + { + case 0: + return FlagsName; + + case 1: + return Flags1Name; + + case 2: + return WrapFlagsName; + + case 3: + return foldOutFlagName; + + case 4: + return foldOutFlagName1; + + default: + return FlagsName; + } + } + + + + + + public W9ParticleShaderFlags(Material material = null): base(material) + { + } + public const int FLAG_BIT_SATURABILITY_ON = 1 << 0; + public const int FLAG_BIT_PARTICLE_NOISE_CHORATICABERRAT_WITH_NOISE = 1 << 1; + public const int FLAG_BIT_PARTICLE_FRESNEL_FADE_ON = 1 << 2; + public const int FLAG_BIT_PARTICLE_FRESNEL_COLOR_ON = 1 << 3; + public const int FLAG_BIT_PARTICLE_USETEXCOORD2 = 1 << 4; + public const int FLAG_BIT_PARTICLE_DISTANCEFADE_ON = 1 << 5; + public const int FLAG_BIT_PARTICLE_CHORATICABERRAT= 1 << 6; + public const int FLAG_BIT_PARTILCE_MASKMAPROTATIONANIMATION_ON = 1 << 7; + public const int FLAG_BIT_PARTICLE_POLARCOORDINATES_ON = 1 << 8; + public const int FLAG_BIT_PARTICLE_UTWIRL_ON = 1 << 9; + public const int FLAG_BIT_PARTICLE_LINEARTOGAMMA_ON = 1 << 10; + public const int FLAG_BIT_PARTICLE_FRESNEL_ON = 1 << 11; + public const int FLAG_BIT_PARTICLE_NOISEMAP_NORMALIZEED_ON = 1 << 12; + public const int FLAG_BIT_PARTICLE_CUSTOMDATA1Z_DISSOLVE_ON = 1 << 13; + public const int FLAG_BIT_PARTICLE_UIEFFECT_ON = 1 << 14; + public const int FLAG_BIT_PARTICLE_UNSCALETIME_ON = 1 << 15; + public const int FLAG_BIT_PARTICLE_SCRIPTABLETIME_ON = 1 << 16; + public const int FLAG_BIT_PARTICLE_CUSTOMDATA1_ON = 1 << 17; + public const int FLAG_BIT_PARTICLE_FRESNEL_INVERT_ON = 1 << 18; + public const int FLAG_BIT_HUESHIFT_ON = 1 << 19; + public const int FLAG_BIT_PARTICLE_CUSTOMDATA2_ON = 1 << 20; + public const int FLAG_BIT_PARTICLE_CUSTOMDATA1X_MAINTEXOFFSETX = 1 << 21; + public const int FLAG_BIT_PARTICLE_CUSTOMDATA1Y_MAINTEXOFFSETY = 1 << 22; + + public const int FLAG_BIT_PARTICLE_CUSTOMDATA1W_HUESHIFT = 1 << 23; + public const int FLAG_BIT_PARTICLE_CUSTOMDATA2X_MASKMAPOFFSETX = 1 << 24; + public const int FLAG_BIT_PARTICLE_CUSTOMDATA2Y_MASKMAPOFFSETY = 1 << 25; + public const int FLAG_BIT_PARTICLE_CUSTOMDATA2Z_FRESNELOFFSET = 1 << 26; + public const int FLAG_BIT_PARTICLE_DISSOLVE_MASK = 1 << 27; + public const int FLAG_BIT_PARTICLE_BACKCOLOR = 1 << 28; + public const int FLAG_BIT_PARTICLE_PC_ONLYSPECIALFUNC = 1 << 29; + public const int FLAG_BIT_PARTICLE_VERTEX_OFFSET_ON = 1 << 30; + public const int FLAG_BIT_PARTICLE_VERTEX_OFFSET_NORMAL_DIR= 1 << 31; + + public const int FLAG_BIT_PARTICLE_1_DEPTH_OUTLINE= 1 << 0; + public const int FLAG_BIT_PARTICLE_1_PARALLAX_MAPPING= 1 << 1; + public const int FLAG_BIT_PARTICLE_CUSTOMDATA1X_DISSOLVETEXOFFSETX= 1 << 2; + public const int FLAG_BIT_PARTICLE_CUSTOMDATA1Y_DISSOLVETEXOFFSETY = 1 << 3; + public const int FLAG_BIT_PARTICLE_CUSTOMDATA1Z_NOISE_INTENSITY = 1 << 4; + public const int FLAG_BIT_PARTICLE_CUSTOMDATA1W_SATURATE = 1 << 5; + public const int FLAG_BIT_PARTICLE_CUSTOMDATA2X_VERTEXOFFSETX = 1 << 6; + public const int FLAG_BIT_PARTICLE_CUSTOMDATA2Y_VERTEXOFFSETY = 1 << 7; + public const int FLAG_BIT_PARTICLE_CUSTOMDATA2W_CHORATICABERRAT_INTENSITY = 1 << 8; + public const int FLAG_BIT_PARTICLE_1_IGNORE_VERTEX_COLOR = 1 << 9; + public const int FLAG_BIT_PARTICLE_1_DISSOVLE_VORONOI = 1 << 10; + public const int FLAG_BIT_PARTICLE_1_DISSOVLE_USE_RAMP = 1 << 11; + public const int FLAG_BIT_PARTICLE_1_MASK_MAP2 = 1 << 12; + public const int FLAG_BIT_PARTICLE_1_MASK_MAP3 = 1 << 13; + public const int FLAG_BIT_PARTICLE_1_NOISE_MASKMAP = 1 << 14; + public const int FLAG_BIT_PARTICLE_1_ANIMATION_SHEET_HELPER = 1 << 15; + public const int FLAG_BIT_PARTICLE_1_CUSTOMDATA2Z_VERTEXOFFSET_INTENSITY= 1 << 16; + public const int FLAG_BIT_PARTICLE_1_UIEFFECT_SPRITE_MODE= 1 << 17; + public const int FLAG_BIT_PARTICLE_1_USE_TEXCOORD1= 1 << 18; + public const int FLAG_BIT_PARTICLE_1_USE_TEXCOORD2= 1 << 19; + public const int FLAG_BIT_PARTICLE_1_CYLINDER_CORDINATE= 1 << 20; + public const int FLAG_BIT_PARTICLE_1_UV_FROM_MESH= 1 << 21;//3D条件下,如果不是来源于Mesh,就默认来源于粒子。 + public const int FLAG_BIT_PARTICLE_1_UIEFFECT_BASEMAP_MODE= 1 << 22;//3D条件下,如果不是来源于Mesh,就默认来源于粒子。 + public const int FLAG_BIT_PARTICLE_1_IS_PARTICLE_SYSTEM= 1 << 23;//3D条件下,如果不是来源于Mesh,就默认来源于粒子。 + public const int FLAG_BIT_PARTICLE_1_MAINTEX_CONTRAST= 1 << 24; + public const int FLAG_BIT_PARTICLE_1_VERTEXOFFSET_START_FROM_ZERO= 1 << 25; + public const int FLAG_BIT_PARTICLE_1_VERTEXOFFSET_MASKMAP= 1 << 26; + public const int FLAG_BIT_PARTICLE_1_MAINTEX_COLOR_REFINE= 1 << 27; + + + public const int FLAG_BIT_WRAPMODE_BASEMAP= 1 << 0; + public const int FLAG_BIT_WRAPMODE_MASKMAP= 1 << 1; + public const int FLAG_BIT_WRAPMODE_MASKMAP2= 1 << 2; + public const int FLAG_BIT_WRAPMODE_NOISEMAP= 1 << 3; + public const int FLAG_BIT_WRAPMODE_EMISSIONMAP= 1 << 4; + public const int FLAG_BIT_WRAPMODE_DISSOLVE_MAP= 1 << 5; + public const int FLAG_BIT_WRAPMODE_DISSOLVE_MASKMAP= 1 << 6; + public const int FLAG_BIT_WRAPMODE_DISSOLVE_RAMPMAP= 1 << 7; + public const int FLAG_BIT_WRAPMODE_COLORBLENDMAP= 1 << 8; + public const int FLAG_BIT_WRAPMODE_VERTEXOFFSETMAP= 1 << 9; + public const int FLAG_BIT_WRAPMODE_PARALLAXMAPPINGMAP = 1 << 10; + public const int FLAG_BIT_WRAPMODE_MASKMAP3= 1 << 11; + public const int FLAG_BIT_WRAPMODE_NOISE_MASKMAP= 1 << 12; + public const int FLAG_BIT_WRAPMODE_VERTEXOFFSET_MASKMAP= 1 << 13; + + public const int foldOutBitMeshOption = 1 << 0; + public const int foldOutBitMainTexOption = 1 << 1; + public const int foldOutBitBaseOption = 1 << 2; + public const int foldOutBitFeatureOption = 1 << 3; + public const int foldOutBitBaseMap = 1 << 4; + public const int foldOutBitMask = 1 << 5; + public const int foldOutBitMaskMap = 1 << 6; + public const int foldOutBitMask2 = 1 << 7; + public const int foldOutBitMask3 = 1 << 8; + public const int foldOutBitTwril = 1 << 9; + public const int foldOutBitPolar = 1 << 10; + public const int foldOutBitHueShift = 1 << 11; + public const int foldOutBitSaturability = 1 << 12; + public const int foldOutBitDistanceFade = 1 << 13; + public const int foldOutBitSoftParticles = 1 << 14; + public const int foldOutBitMaskRotate = 1 << 15; + public const int foldOutBitNoise = 1 << 16; + public const int foldOutBitNoiseMap = 1 << 17; + public const int foldOutBitNoiseMaskToggle = 1 << 18; + public const int foldOutBitEmission= 1 << 19; + public const int foldOutBitDistortionChoraticaberrat= 1 << 20; + public const int foldOutDissolve= 1 << 21; + public const int foldOutDissolveMap= 1 << 22; + public const int foldOutDissolveVoronoi= 1 << 23; + public const int foldOutDissolveRampMap= 1 << 24; + public const int foldOutDissolveMask= 1 << 25; + public const int foldOutColorBlend= 1 << 26; + public const int foldOutFresnel= 1 << 27; + public const int foldOutDepthOutline= 1 << 28; + public const int foldOutVertexOffset= 1 << 29; + public const int foldOutParallexMapping= 1 << 30; + // public const int foldOutPortal= 1 << 31; + + + + + public const int foldOutBit2UVModeMainTex = 1 << 0; + public const int foldOutBit2UVModeMaskMap= 1 << 1; + public const int foldOutBit2UVModeMaskMap2= 1 << 2; + public const int foldOutBit2UVModeMaskMap3= 1 << 3; + public const int foldOutBit2UVModeNoiseMap = 1 << 4; + public const int foldOutBit2UVModeNoiseMaskMap = 1 << 5; + public const int foldOutBit2UVModeEmissionMap = 1 << 6; + public const int foldOutBit2UVModeDissolveMap = 1 << 7; + public const int foldOutBit2UVModeDissolveMaskMap = 1 << 8; + public const int foldOutBit2UVModeColorBlendMap = 1 << 9; + public const int foldOutBit2UVModeVertexOffsetMap = 1 << 10; + public const int foldOutBit2UVModeVertexOffsetMaskMap = 1 << 11; + + //留一些位置给以后可能会增加的贴图。 + public const int foldOutPortal= 1 << 20; + public const int foldOutZOffset= 1 << 21; + public const int foldOutCustomStencilTest= 1 << 22; + public const int foldOutTaOption = 1 << 23; + public const int foldOutMianTexContrast= 1 << 24; + public const int foldOutVertexOffsetMask= 1 << 25; + public const int foldOutMainTexColorRefine= 1 << 26; + + + #region CustomDataCodes + + + + + public const string CustomDataFlag0Name = "_W9ParticleCustomDataFlag0"; + public const string CustomDataFlag1Name = "_W9ParticleCustomDataFlag1"; + public const string CustomDataFlag2Name = "_W9ParticleCustomDataFlag2"; + public const string CustomDataFlag3Name = "_W9ParticleCustomDataFlag3"; + public static int CustomDataFlag0Id = Shader.PropertyToID(CustomDataFlag0Name); + public static int CustomDataFlag1Id = Shader.PropertyToID(CustomDataFlag1Name); + public static int CustomDataFlag2Id = Shader.PropertyToID(CustomDataFlag2Name); + public static int CustomDataFlag3Id = Shader.PropertyToID(CustomDataFlag3Name); + + public enum CutomDataComponent + { + Off, + CustomData1X, + CustomData1Y, + CustomData1Z, + CustomData1W, + CustomData2X, + CustomData2Y, + CustomData2Z, + CustomData2W, + } + + public const int FLAGBIT_POS_0_CUSTOMDATA_MAINTEX_OFFSET_X = 0 * 4; + public const int FLAGBIT_POS_0_CUSTOMDATA_MAINTEX_OFFSET_Y = 1 * 4; + public const int FLAGBIT_POS_0_CUSTOMDATA_DISSOLVE_INTENSITY = 2 * 4; + public const int FLAGBIT_POS_0_CUSTOMDATA_HUESHIFT = 3 * 4; + public const int FLAGBIT_POS_0_CUSTOMDATA_MASK_OFFSET_X = 4 * 4; + public const int FLAGBIT_POS_0_CUSTOMDATA_MASK_OFFSET_Y = 5 * 4; + public const int FLAGBIT_POS_0_CUSTOMDATA_FRESNEL_OFFSET = 6 * 4; + public const int FLAGBIT_POS_0_CUSTOMDATA_CHORATICABERRAT_INTENSITY = 7 * 4; + + public const int FLAGBIT_POS_1_CUSTOMDATA_DISSOLVE_OFFSET_X = 0 * 4; + public const int FLAGBIT_POS_1_CUSTOMDATA_DISSOLVE_OFFSET_Y = 1 * 4; + public const int FLAGBIT_POS_1_CUSTOMDATA_NOISE_INTENSITY = 2 * 4; + public const int FLAGBIT_POS_1_CUSTOMDATA_SATURATE = 3 * 4; + public const int FLAGBIT_POS_1_CUSTOMDATA_VERTEX_OFFSET_X = 4 * 4; + public const int FLAGBIT_POS_1_CUSTOMDATA_VERTEX_OFFSET_Y = 5 * 4; + public const int FLAGBIT_POS_1_CUSTOMDATA_VERTEXOFFSET_INTENSITY = 6 * 4; + public const int FLAGBIT_POS_1_CUSTOMDATA_DISSOLVE_MASK_INTENSITY = 7 * 4; + + public const int FLAGBIT_POS_2_CUSTOMDATA_DISSOLVE_NOISE1_OFFSET_X = 0*4; + public const int FLAGBIT_POS_2_CUSTOMDATA_DISSOLVE_NOISE1_OFFSET_Y = 1*4; + public const int FLAGBIT_POS_2_CUSTOMDATA_DISSOLVE_NOISE2_OFFSET_X = 2*4; + public const int FLAGBIT_POS_2_CUSTOMDATA_DISSOLVE_NOISE2_OFFSET_Y = 3*4; + public const int FLAGBIT_POS_2_CUSTOMDATA_NOISE_DIRECTION_X= 4*4; + public const int FLAGBIT_POS_2_CUSTOMDATA_NOISE_DIRECTION_Y= 5*4; + public const int FLAGBIT_POS_2_CUSTOMDATA_MAINTEX_CONTRAST= 6*4; + //---->这里还有一个坑可以用哦 + + public const int FLAGBIT_POS_3_CUSTOMDATA_VERTEX_OFFSET_MASK_X= 0*4; + public const int FLAGBIT_POS_3_CUSTOMDATA_VERTEX_OFFSET_MASK_Y= 1*4; + + + public const int isCustomDataBit = 1 << 3; + public const int Data12Bit = 1 << 2;//true CustomData1 / false CustomData2 + public const int DataXYorZWBit = 1 << 1;//true xy / false zw + public const int DataXZorYWBit = 1 << 0;//true xz / false yw + public const int CustomData1XBit = isCustomDataBit | Data12Bit | DataXYorZWBit | DataXZorYWBit; + public const int CustomData1YBit = isCustomDataBit | Data12Bit | DataXYorZWBit ; + public const int CustomData1ZBit = isCustomDataBit | Data12Bit | DataXZorYWBit; + public const int CustomData1WBit = isCustomDataBit | Data12Bit; + public const int CustomData2XBit = isCustomDataBit | DataXYorZWBit | DataXZorYWBit; + public const int CustomData2YBit = isCustomDataBit | DataXYorZWBit; + public const int CustomData2ZBit = isCustomDataBit | DataXZorYWBit; + public const int CustomData2WBit = isCustomDataBit; + + private int GetCustomDataFlagID(int dataIndex) + { + switch (dataIndex) + { + case 0 : + return CustomDataFlag0Id; + + case 1 : + return CustomDataFlag1Id; + + case 2 : + return CustomDataFlag2Id; + case 3 : + return CustomDataFlag3Id; + + } + + return 0; + } + + public string GetCustomDataFlagPropertyName(int dataIndex) + { + switch (dataIndex) + { + case 0 : + return CustomDataFlag0Name; + + case 1 : + return CustomDataFlag1Name; + + case 2: + return CustomDataFlag2Name; + + case 3: + return CustomDataFlag3Name; + + } + + return null; + } + + public CutomDataComponent GetCustomDataFlag(int dataBitPos, int dataIndex) + { + int bit = material.GetInteger(GetCustomDataFlagID(dataIndex)); + + bit = bit >> dataBitPos; + bit &= 15; // binary 1111 + + if ((bit & isCustomDataBit) == 0) + { + return CutomDataComponent.Off; + } + else if (bit == CustomData1XBit) + { + return CutomDataComponent.CustomData1X; + } + else if (bit == CustomData1YBit) + { + return CutomDataComponent.CustomData1Y; + } + else if (bit == CustomData1ZBit) + { + return CutomDataComponent.CustomData1Z; + } + else if (bit == CustomData1WBit) + { + return CutomDataComponent.CustomData1W; + } + else if (bit == CustomData2XBit) + { + return CutomDataComponent.CustomData2X; + } + else if (bit == CustomData2YBit) + { + return CutomDataComponent.CustomData2Y; + } + else if (bit == CustomData2ZBit) + { + return CutomDataComponent.CustomData2Z; + } + else if (bit == CustomData2WBit) + { + return CutomDataComponent.CustomData2W; + } + else + { + } + Debug.Log("不可能存在的情况"); + return CutomDataComponent.Off; + + } + + public void SetCustomDataFlag(CutomDataComponent cutomDataComponent,int dataBitPos, int dataIndex) + { + int bit = 0; + switch (cutomDataComponent) + { + case CutomDataComponent.Off: + bit = 0; + break; + case CutomDataComponent.CustomData1X: + bit = CustomData1XBit; + break; + case CutomDataComponent.CustomData1Y: + bit = CustomData1YBit; + break; + case CutomDataComponent.CustomData1Z: + bit = CustomData1ZBit; + break; + case CutomDataComponent.CustomData1W: + bit = CustomData1WBit; + break; + case CutomDataComponent.CustomData2X: + bit = CustomData2XBit; + break; + case CutomDataComponent.CustomData2Y: + bit = CustomData2YBit; + break; + case CutomDataComponent.CustomData2Z: + bit = CustomData2ZBit; + break; + case CutomDataComponent.CustomData2W: + bit = CustomData2WBit; + break; + } + bit = bit << dataBitPos; + int clearBit = ~(15 << dataBitPos);//~ (1111 << dataBitPos) + + int materialBit = material.GetInteger(GetCustomDataFlagID(dataIndex)); + materialBit = materialBit & clearBit; + materialBit = materialBit | bit; + material.SetInteger(GetCustomDataFlagID(dataIndex),materialBit); + } + + public bool IsCustomDataOn() + { + int prop0Flag = material.GetInteger(CustomDataFlag0Id); + int prop1Flag = material.GetInteger(CustomDataFlag1Id); + int prop2Flag = material.GetInteger(CustomDataFlag2Id); + int prop3Flag = material.GetInteger(CustomDataFlag3Id); + uint dataOnBit = 0b_1000_1000_1000_1000_1000_1000_1000_1000;//10001000100010001000100010001000; + + return ((prop0Flag & dataOnBit) >0) || ((prop1Flag & dataOnBit)>0) || ((prop2Flag & dataOnBit)>0)||((prop3Flag & dataOnBit)>0); + } + + bool CheckCustomData(int dataIndex, int flagIndex) + { + int flagID = 0; + switch (flagIndex) + { + case 0: + flagID = CustomDataFlag0Id; + break; + case 1: + flagID = CustomDataFlag1Id; + break; + case 2: + flagID = CustomDataFlag2Id; + break; + case 3: + flagID = CustomDataFlag3Id; + break; + } + + int flag = material.GetInteger(flagID); + int i = 0; + while (i<8) + { + int bit = flag >> (4 * i); + if (dataIndex == 1) + { + if ((bit & 0b_1000) > 0 && (bit & 0b_0100) > 0) + { + return true; + } + } + else if(dataIndex == 2) + { + if ((bit & 0b_1000) > 0 && (bit & 0b_0100) == 0) + { + return true; + } + } + + i += 1; + } + return false; + } + + public bool IsCustomData1On() + { + if (!IsCustomDataOn()) + { + return false; + } + + bool isCustomData1On = false; + isCustomData1On |= CheckCustomData(1, 0); + isCustomData1On |= CheckCustomData(1, 1); + isCustomData1On |= CheckCustomData(1, 2); + isCustomData1On |= CheckCustomData(1, 3); + return isCustomData1On; + + // int prop0Flag = material.GetInteger(CustomDataFlag0Id); + // + // int i = 0; + // while (i<8) + // { + // int bit = prop0Flag >> (4 * i); + // if ((bit & 0b_1000) > 0 && (bit & 0b_0100) > 0) + // { + // return true; + // } + // + // i += 1; + // } + // + // i = 0; + // int prop1Flag = material.GetInteger(CustomDataFlag1Id); + // while (i<8) + // { + // int bit = prop1Flag >> (4 * i); + // if ((bit & 0b_1000) > 0 && (bit & 0b_0100) > 0) + // { + // return true; + // } + // i += 1; + // } + // return false; + } + + public bool IsCustomData2On() + { + if (!IsCustomDataOn()) + { + return false; + } + bool isCustomData1On = false; + isCustomData1On |= CheckCustomData(2, 0); + isCustomData1On |= CheckCustomData(2, 1); + isCustomData1On |= CheckCustomData(2, 2); + isCustomData1On |= CheckCustomData(2, 3); + return isCustomData1On; + // int prop0Flag = material.GetInteger(CustomDataFlag0Id); + // + // int i = 0; + // while (i<8) + // { + // int bit = prop0Flag >> (4 * i); + // if ((bit & 0b_1000) > 0 && (bit & 0b_0100) == 0) + // { + // return true; + // } + // + // i += 1; + // } + // + // i = 0; + // int prop1Flag = material.GetInteger(CustomDataFlag1Id); + // while (i<8) + // { + // int bit = prop1Flag >> (4 * i); + // if ((bit & 0b_1000) > 0 && (bit & 0b_0100) == 0) + // { + // return true; + // } + // i += 1; + // } + // return false; + } + #endregion + + public const string UVModeFlag0Name = "_UVModeFlag0"; + public static int UVModeFlag0PropID = Shader.PropertyToID(UVModeFlag0Name); + + public string GetUVModePropName(int dataIndex) + { + switch (dataIndex) + { + case 0: + return UVModeFlag0Name; + } + + return null; + } + + public enum UVMode + { + DefaultUVChannel, //0 0b_00 + SpecialUVChannel, //1 0b_01 + PolarOrTwirl, //2 0b_10 + Cylinder //3 0b_11 + } + + // public enum MeshSourceMode + // { + // ParticleSystem, + // Mesh, + // RawImage, + // Sprite + // } + + public const int FLAG_BIT_UVMODE_POS_0_MAINTEX = 0 * 2; + public const int FLAG_BIT_UVMODE_POS_0_MASKMAP = 1 * 2; + public const int FLAG_BIT_UVMODE_POS_0_MASKMAP_2 = 2 * 2; + public const int FLAG_BIT_UVMODE_POS_0_MASKMAP_3 = 3 * 2; + public const int FLAG_BIT_UVMODE_POS_0_NOISE_MAP = 4 * 2; + public const int FLAG_BIT_UVMODE_POS_0_NOISE_MASK_MAP = 5 * 2; + public const int FLAG_BIT_UVMODE_POS_0_EMISSION_MAP = 6 * 2; + public const int FLAG_BIT_UVMODE_POS_0_DISSOLVE_MAP = 7 * 2; + public const int FLAG_BIT_UVMODE_POS_0_DISSOLVE_MASK_MAP = 8 * 2; + public const int FLAG_BIT_UVMODE_POS_0_COLOR_BLEND_MAP = 9 * 2; + public const int FLAG_BIT_UVMODE_POS_0_VERTEX_OFFSET_MAP = 10 * 2; + public const int FLAG_BIT_UVMODE_POS_0_VERTEX_OFFSET_MASKMAP = 11 * 2; + + public int GetUVModeFlagPropID(int flagIndex) + { + switch (flagIndex) + { + case 0: + return UVModeFlag0PropID; + } + + return 0; + } + + public void SetUVMode(UVMode mode, int uvModePos, int flagIndex = 0) + { + int uvModeFlagPropId = GetUVModeFlagPropID(flagIndex); + int uvModeFlag = material.GetInteger(uvModeFlagPropId); + + + int clearFlag = 0b_11 << uvModePos; + clearFlag = ~ clearFlag; + + uvModeFlag &= clearFlag; + int modeBit = (int)mode << uvModePos; + uvModeFlag |= modeBit; + + material.SetInteger(uvModeFlagPropId,uvModeFlag); + } + + public UVMode GetUVMode(int uvModePos, int flagIndex = 0) + { + int uvModeFlagPropId = GetUVModeFlagPropID(flagIndex); + int uvModeFlag = material.GetInteger(uvModeFlagPropId); + uvModeFlag = uvModeFlag >> uvModePos; + uvModeFlag &= 0b_11; + return (UVMode)uvModeFlag; + } + + public bool CheckIsUVModeOn(UVMode mode) + { + uint uvModeFlag0 = (uint)material.GetInteger(UVModeFlag0PropID); + + uint uvModeBit = (uint)mode; + + bool isUvMode = false; + for (int i = 0; i < 16; i++) + { + uint checkBit = uvModeFlag0 >> (i * 2); + checkBit = checkBit & 0b_11; + // Debug.Log("i:"+i); + // Debug.Log("uvModeFlag0:"+Convert.ToString(uvModeFlag0,2)); + // Debug.Log("checkBit:"+Convert.ToString(checkBit,2)); + // Debug.Log("uvModeBit:"+Convert.ToString(uvModeBit,2)); + if (checkBit == uvModeBit) + { + isUvMode = true; + break; + } + } + return isUvMode; + } + + + +} diff --git a/Packages/NBShaders/Runtime/W9ParticleShaderFlags.cs.meta b/Packages/NBShaders/Runtime/W9ParticleShaderFlags.cs.meta new file mode 100644 index 00000000..be8e6638 --- /dev/null +++ b/Packages/NBShaders/Runtime/W9ParticleShaderFlags.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b13c8a972207b57458dd444106acbf3a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBShaders/Runtime/com.xuanxuan.nb.shaders.asmdef b/Packages/NBShaders/Runtime/com.xuanxuan.nb.shaders.asmdef new file mode 100644 index 00000000..5d255961 --- /dev/null +++ b/Packages/NBShaders/Runtime/com.xuanxuan.nb.shaders.asmdef @@ -0,0 +1,16 @@ +{ + "name": "com.xuanxuan.nb.shaders", + "rootNamespace": "", + "references": [ + "GUID:8f9e4d586616f13449cfeb86c5f704c2" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Packages/NBShaders/Runtime/com.xuanxuan.nb.shaders.asmdef.meta b/Packages/NBShaders/Runtime/com.xuanxuan.nb.shaders.asmdef.meta new file mode 100644 index 00000000..6b5d9b1c --- /dev/null +++ b/Packages/NBShaders/Runtime/com.xuanxuan.nb.shaders.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0e3b0e6ce60c7a34094f8f9822c0b7f2 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBShaders/Shader.meta b/Packages/NBShaders/Shader.meta new file mode 100644 index 00000000..d35795a3 --- /dev/null +++ b/Packages/NBShaders/Shader.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5fdc89efbf4a9bf4c9449cc01f16d08a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBShaders/Shader/HLSL.meta b/Packages/NBShaders/Shader/HLSL.meta new file mode 100644 index 00000000..aaf3843f --- /dev/null +++ b/Packages/NBShaders/Shader/HLSL.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 944a1679494774748b2936893c18c9ce +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBShaders/Shader/HLSL/EffectFlags.hlsl b/Packages/NBShaders/Shader/HLSL/EffectFlags.hlsl new file mode 100644 index 00000000..086f30cb --- /dev/null +++ b/Packages/NBShaders/Shader/HLSL/EffectFlags.hlsl @@ -0,0 +1,227 @@ +#ifndef EFFECT_FLAGS +#define EFFECT_FLAGS + + #define FLAG_BIT_SATURABILITY_ON (1 << 0) + #define FLAG_BIT_PARTICLE_NOISE_CHORATICABERRAT_WITH_NOISE (1 << 1) + #define FLAG_BIT_PARTICLE_FRESNEL_FADE_ON (1 << 2) + #define FLAG_BIT_PARTICLE_FRESNEL_COLOR_ON (1 << 3) + #define FLAG_BIT_PARTICLE_USETEXCOORD2 (1 << 4) + #define FLAG_BIT_PARTICLE_DISTANCEFADE_ON (1 << 5) + #define FLAG_BIT_PARTICLE_CHORATICABERRAT (1 << 6) + #define FLAG_BIT_PARTILCE_MASKMAPROTATIONANIMATION_ON (1 << 7) + #define FLAG_BIT_PARTICLE_POLARCOORDINATES_ON (1 << 8) + #define FLAG_BIT_PARTICLE_UTWIRL_ON (1 << 9) + #define FLAG_BIT_PARTICLE_LINEARTOGAMMA_ON (1 << 10) + #define FLAG_BIT_PARTICLE_FRESNEL_ON (1 << 11) + #define FLAG_BIT_PARTICLE_NOISEMAP_NORMALIZEED_ON (1 << 12) + #define FLAG_BIT_PARTICLE_CUSTOMDATA1Z_DISSOLVE_ON (1 << 13) + #define FLAG_BIT_PARTICLE_UIEFFECT_ON (1 << 14) + #define FLAG_BIT_PARTICLE_UNSCALETIME_ON (1 << 15) + #define FLAG_BIT_PARTICLE_SCRIPTABLETIME_ON (1 << 16) + #define FLAG_BIT_PARTICLE_CUSTOMDATA1_ON (1 << 17) + #define FLAG_BIT_PARTICLE_FRESNEL_INVERT_ON (1 << 18) + #define FLAG_BIT_HUESHIFT_ON (1 << 19) + #define FLAG_BIT_PARTICLE_CUSTOMDATA2_ON (1 << 20) + #define FLAG_BIT_PARTICLE_CUSTOMDATA1X_MAINTEXOFFSETX (1 << 21) + #define FLAG_BIT_PARTICLE_CUSTOMDATA1Y_MAINTEXOFFSETY (1 << 22) + #define FLAG_BIT_PARTICLE_CUSTOMDATA1W_HUESHIFT (1 << 23) + #define FLAG_BIT_PARTICLE_CUSTOMDATA2X_MASKMAPOFFSETX (1 << 24) + #define FLAG_BIT_PARTICLE_CUSTOMDATA2Y_MASKMAPOFFSETY (1 << 25) + #define FLAG_BIT_PARTICLE_CUSTOMDATA2Z_FRESNELOFFSET (1 << 26) + #define FLAG_BIT_PARTICLE_DISSOLVE_MASK (1 << 27) + #define FLAG_BIT_PARTICLE_BACKCOLOR (1 << 28) + #define FLAG_BIT_PARTICLE_PC_ONLYSPECIALFUNC (1 << 29) + #define FLAG_BIT_PARTICLE_VERTEX_OFFSET_ON (1 << 30) + #define FLAG_BIT_PARTICLE_VERTEX_OFFSET_NORMAL_DIR (1 << 31) + // uint _W9ParticleShaderFlags; + + #define FLAG_BIT_PARTICLE_1_DEPTH_OUTLINE (1 << 0) + #define FLAG_BIT_PARTICLE_1_PARALLAX_MAPPING (1 << 1) + #define FLAG_BIT_PARTICLE_CUSTOMDATA1X_DISSOLVETEXOFFSETX (1 << 2) + #define FLAG_BIT_PARTICLE_CUSTOMDATA1Y_DISSOLVETEXOFFSETY (1 << 3) + #define FLAG_BIT_PARTICLE_CUSTOMDATA1Z_NOISE_INTENSITY (1 << 4) + #define FLAG_BIT_PARTICLE_CUSTOMDATA1W_SATURATE (1 << 5) + #define FLAG_BIT_PARTICLE_CUSTOMDATA2X_VERTEXOFFSETX (1 << 6) + #define FLAG_BIT_PARTICLE_CUSTOMDATA2Y_VERTEXOFFSETY (1 << 7) + #define FLAG_BIT_PARTICLE_CUSTOMDATA2W_CHORATICABERRAT_INTENSITY (1 << 8) + #define FLAG_BIT_PARTICLE_1_IGNORE_VERTEX_COLOR (1 << 9) + #define FLAG_BIT_PARTICLE_1_DISSOVLE_VORONOI (1 << 10) + #define FLAG_BIT_PARTICLE_1_DISSOVLE_USE_RAMP (1 << 11) + #define FLAG_BIT_PARTICLE_1_MASK_MAP2 (1 << 12) + #define FLAG_BIT_PARTICLE_1_MASK_MAP3 (1 << 13) + #define FLAG_BIT_PARTICLE_1_NOISE_MASKMAP (1 << 14) + #define FLAG_BIT_PARTICLE_1_ANIMATION_SHEET_HELPER (1 << 15) + #define FLAG_BIT_PARTICLE_1_CUSTOMDATA2Z_VERTEXOFFSET_INTENSITY (1 << 16) + #define FLAG_BIT_PARTICLE_1_UIEFFECT_SPRITE_MODE (1 << 17) + #define FLAG_BIT_PARTICLE_1_USE_TEXCOORD1 (1 << 18) + #define FLAG_BIT_PARTICLE_1_USE_TEXCOORD2 (1 << 19) + #define FLAG_BIT_PARTICLE_1_CYLINDER_CORDINATE (1 << 20) + #define FLAG_BIT_PARTICLE_1_UV_FROM_MESH (1 << 21) + #define FLAG_BIT_PARTICLE_1_UIEFFECT_BASEMAP_MODE (1 << 22) + #define FLAG_BIT_PARTICLE_1_IS_PARTICLE_SYSTEM (1 << 23) + #define FLAG_BIT_PARTICLE_1_MAINTEX_CONTRAST (1 << 24) + #define FLAG_BIT_PARTICLE_1_VERTEXOFFSET_START_FROM_ZERO (1 << 25) + #define FLAG_BIT_PARTICLE_1_VERTEXOFFSET_MASKMAP (1 << 26) + #define FLAG_BIT_PARTICLE_1_MAINTEX_COLOR_REFINE (1 << 27) + + + //WrapMode不能够超过16位(因为会占用x和x+16两个bit位) + #define FLAG_BIT_WRAPMODE_BASEMAP (1 << 0) + #define FLAG_BIT_WRAPMODE_MASKMAP (1 << 1) + #define FLAG_BIT_WRAPMODE_MASKMAP2 (1 << 2) + #define FLAG_BIT_WRAPMODE_NOISEMAP (1 << 3) + #define FLAG_BIT_WRAPMODE_EMISSIONMAP (1 << 4) + #define FLAG_BIT_WRAPMODE_DISSOLVE_MAP (1 << 5) + #define FLAG_BIT_WRAPMODE_DISSOLVE_MASKMAP (1 << 6) + #define FLAG_BIT_WRAPMODE_DISSOLVE_RAMPMAP (1 << 7) + #define FLAG_BIT_WRAPMODE_COLORBLENDMAP (1 << 8) + #define FLAG_BIT_WRAPMODE_VERTEXOFFSETMAP (1 << 9) + #define FLAG_BIT_WRAPMODE_PARALLAXMAPPINGMAP (1 << 10) + #define FLAG_BIT_WRAPMODE_MASKMAP3 (1 << 11) + #define FLAG_BIT_WRAPMODE_NOISE_MASKMAP (1 << 12) + #define FLAG_BIT_WRAPMODE_VERTEXOFFSET_MASKMAP (1 << 13) + + #define FLAGBIT_POS_0_CUSTOMDATA_MAINTEX_OFFSET_X (0*4) + #define FLAGBIT_POS_0_CUSTOMDATA_MAINTEX_OFFSET_Y (1*4) + #define FLAGBIT_POS_0_CUSTOMDATA_DISSOLVE_INTENSITY (2*4) + #define FLAGBIT_POS_0_CUSTOMDATA_HUESHIFT (3*4) + #define FLAGBIT_POS_0_CUSTOMDATA_MASK_OFFSET_X (4*4) + #define FLAGBIT_POS_0_CUSTOMDATA_MASK_OFFSET_Y (5*4) + #define FLAGBIT_POS_0_CUSTOMDATA_FRESNEL_OFFSET (6*4) + #define FLAGBIT_POS_0_CUSTOMDATA_CHORATICABERRAT_INTENSITY (7*4) + + #define FLAGBIT_POS_1_CUSTOMDATA_DISSOLVE_OFFSET_X (0*4) + #define FLAGBIT_POS_1_CUSTOMDATA_DISSOLVE_OFFSET_Y (1*4) + #define FLAGBIT_POS_1_CUSTOMDATA_NOISE_INTENSITY (2*4) + #define FLAGBIT_POS_1_CUSTOMDATA_SATURATE (3*4) + #define FLAGBIT_POS_1_CUSTOMDATA_VERTEX_OFFSET_X (4*4) + #define FLAGBIT_POS_1_CUSTOMDATA_VERTEX_OFFSET_Y (5*4) + #define FLAGBIT_POS_1_CUSTOMDATA_VERTEXOFFSET_INTENSITY (6*4) + #define FLAGBIT_POS_1_CUSTOMDATA_DISSOLVE_MASK_INTENSITY (7*4) + + #define FLAGBIT_POS_2_CUSTOMDATA_DISSOLVE_NOISE1_OFFSET_X (0*4) + #define FLAGBIT_POS_2_CUSTOMDATA_DISSOLVE_NOISE1_OFFSET_Y (1*4) + #define FLAGBIT_POS_2_CUSTOMDATA_DISSOLVE_NOISE2_OFFSET_X (2*4) + #define FLAGBIT_POS_2_CUSTOMDATA_DISSOLVE_NOISE2_OFFSET_Y (3*4) + #define FLAGBIT_POS_2_CUSTOMDATA_NOISE_DIRECTION_X (4*4) + #define FLAGBIT_POS_2_CUSTOMDATA_NOISE_DIRECTION_Y (5*4) + #define FLAGBIT_POS_2_CUSTOMDATA_MAINTEX_CONTRAST (6*4) + //---->这里还有一个坑可以用哦 + + #define FLAGBIT_POS_3_CUSTOMDATA_VERTEX_OFFSET_MASK_X (0*4) + #define FLAGBIT_POS_3_CUSTOMDATA_VERTEX_OFFSET_MASK_Y (1*4) + + #define isCustomDataBit (1 << 3) + #define Data12Bit (1 << 2) + #define DataXYorZWBit (1 << 1) + #define DataXZorYWBit (1 << 0) + + #define FLAG_BIT_UVMODE_POS_0_MAINTEX (0*2) + #define FLAG_BIT_UVMODE_POS_0_MASKMAP (1*2) + #define FLAG_BIT_UVMODE_POS_0_MASKMAP_2 (2*2) + #define FLAG_BIT_UVMODE_POS_0_MASKMAP_3 (3*2) + #define FLAG_BIT_UVMODE_POS_0_NOISE_MAP (4*2) + #define FLAG_BIT_UVMODE_POS_0_NOISE_MASK_MAP (5*2) + #define FLAG_BIT_UVMODE_POS_0_EMISSION_MAP (6*2) + #define FLAG_BIT_UVMODE_POS_0_DISSOLVE_MAP (7*2) + #define FLAG_BIT_UVMODE_POS_0_DISSOLVE_MASK_MAP (8*2) + #define FLAG_BIT_UVMODE_POS_0_COLOR_BLEND_MAP (9*2) + #define FLAG_BIT_UVMODE_POS_0_VERTEX_OFFSET_MAP (10*2) + #define FLAG_BIT_UVMODE_POS_0_VERTEX_OFFSET_MASKMAP (11*2) + + float GetCustomData(uint flagProperty,int flagPos,float orignValue,half4 cutstomData1,half4 customData2) + { + uint bit = flagProperty >> flagPos; + + // bit &= 15;// binary 1111 这一步可能是没必要的。 + UNITY_BRANCH + if((bit & isCustomDataBit) == 0) + { + return orignValue; + } + else + { + half4 customData = 0; + if((bit & Data12Bit)) + { + customData = cutstomData1; + + } + else + { + customData = customData2; + } + + if(bit & DataXYorZWBit) + { + if(bit & DataXZorYWBit) + { + return customData.x; + } + else + { + return customData.y; + } + } + else + { + if(bit & DataXZorYWBit) + { + return customData.z; + } + else + { + return customData.w; + } + } + } + return 999;//提示错误 + } + + float2 GetUVByUVMode(uint flagProperty,int flagPos,float2 defaultUVChannel,float2 specialUVChannel,float2 polarOrTwirl,float2 cylinderUV) + { + flagProperty = flagProperty >> flagPos; + flagProperty = flagProperty & 3; + if(flagProperty == 0) + { + return defaultUVChannel; + } + if(flagProperty == 1) + { + return specialUVChannel; + } + if(flagProperty == 2) + { + return polarOrTwirl; + } + return cylinderUV; + } + + struct BaseUVs + { + float2 defaultUVChannel; + float2 specialUVChannel; + float2 uvAfterTwirlPolar; + float2 cylinderUV; + }; + + float2 GetUVByUVMode(uint flagProperty,int flagPos,BaseUVs baseUVs) + { + flagProperty = flagProperty >> flagPos; + flagProperty = flagProperty & 3; + if(flagProperty == 0) + { + return baseUVs.defaultUVChannel; + } + if(flagProperty == 1) + { + return baseUVs.specialUVChannel; + } + if(flagProperty == 2) + { + return baseUVs.uvAfterTwirlPolar; + } + return baseUVs.cylinderUV; + } + +#endif \ No newline at end of file diff --git a/Packages/NBShaders/Shader/HLSL/EffectFlags.hlsl.meta b/Packages/NBShaders/Shader/HLSL/EffectFlags.hlsl.meta new file mode 100644 index 00000000..770e62c6 --- /dev/null +++ b/Packages/NBShaders/Shader/HLSL/EffectFlags.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4918b275ae4dce948a5cedc6f3612066 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBShaders/Shader/HLSL/ParticlesUnlitForwardPassNew.hlsl b/Packages/NBShaders/Shader/HLSL/ParticlesUnlitForwardPassNew.hlsl new file mode 100644 index 00000000..8b3f9928 --- /dev/null +++ b/Packages/NBShaders/Shader/HLSL/ParticlesUnlitForwardPassNew.hlsl @@ -0,0 +1,743 @@ +#ifndef PARTICLESUNLITFORWARDPASS + #define PARTICLESUNLITFORWARDPASS + + struct AttributesParticle//即URP语境下的appdata + { + float4 vertex: POSITION; + float3 normalOS: NORMAL; + half4 color: COLOR; + #if defined(_FLIPBOOKBLENDING_ON) + float4 texcoords: TEXCOORD0; //texcoords.zw就是粒子那边新建的UV2 + float3 texcoordBlend: TEXCOORD3;//注意,假如需要UI支持,則Canvas要開放相關Channel + #else + float4 texcoords: TEXCOORD0; + #endif + + #ifdef _PARALLAX_MAPPING + float4 tangentOS : TANGENT; + #endif + + float4 Custom1: TEXCOORD1; + float4 Custom2: TEXCOORD2; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VaryingsParticle//即URP语境下的v2f + { + float4 clipPos: SV_POSITION; + + half4 color: COLOR; + float4 texcoord: TEXCOORD0; // 主帖图 和 mask + + #if defined (_EMISSION) || defined(_COLORMAPBLEND) + float4 emissionColorBlendTexcoord: TEXCOORD1; // 流光 + #endif + + #ifdef _NOISEMAP + float4 noisemapTexcoord:TEXCOORD2;//Noise + #endif + + #if defined(_DISSOLVE) + + float4 dissolveTexcoord:TEXCOORD15; + float4 dissolveNoiseTexcoord: TEXCOORD5; + + #endif + + + float4 positionWS: TEXCOORD3; + float4 positionOS: TEXCOORD12; + + float4 texcoord2AndSpecialUV: TEXCOORD6; // UV2和SpecialUV + + float4 positionNDC: TEXCOORD7; + + + float4 VaryingsP_Custom1: TEXCOORD8; + float4 VaryingsP_Custom2: TEXCOORD9; + + + float4 normalWSAndAnimBlend: TEXCOORD10; + + float3 fresnelViewDir :TEXCOORD11; + + float3 viewDirWS :TEXCOORD13; + float4 texcoordMaskMap2 : TEXCOORD14; + + #ifdef _PARALLAX_MAPPING + half3 tangentViewDir : TEXCOORD16; + #endif + + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + bool isProcessUVInFrag() + { + if(CheckLocalFlags(FLAG_BIT_PARTICLE_POLARCOORDINATES_ON) || CheckLocalFlags(FLAG_BIT_PARTICLE_UTWIRL_ON)) + { + return true; + } + #if defined(_DEPTH_DECAL) || defined(_PARALLAX_MAPPING) || defined(_SCREEN_DISTORT_MODE) + return true; + #endif + return false; + } + + + /////////////////////////////////////////////////////////////////////////////// + // Vertex and Fragment functions // + + + VaryingsParticle vertParticleUnlit(AttributesParticle input) + { + VaryingsParticle output = (VaryingsParticle)0; + + output.VaryingsP_Custom1 = input.Custom1; + output.VaryingsP_Custom2 = input.Custom2; + + UNITY_SETUP_INSTANCE_ID(input); + UNITY_TRANSFER_INSTANCE_ID(input, output); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + + time = _Time.y; + + float4 positionOS = input.vertex; + + if(CheckLocalFlags(FLAG_BIT_PARTICLE_VERTEX_OFFSET_ON)) + { + //因为极坐标和旋转会强制到Frag计算,所以顶点在这边特殊处理一遍。 + BaseUVs baseUVsForVertexOffset = ProcessBaseUVs(input.texcoords,0,output.VaryingsP_Custom1,output.VaryingsP_Custom2,positionOS); + + _VertexOffset_Map_ST.z += GetCustomData(_W9ParticleCustomDataFlag1,FLAGBIT_POS_1_CUSTOMDATA_VERTEX_OFFSET_X,0,input.Custom1,input.Custom2); + _VertexOffset_Map_ST.w += GetCustomData(_W9ParticleCustomDataFlag1,FLAGBIT_POS_1_CUSTOMDATA_VERTEX_OFFSET_Y,0,input.Custom1,input.Custom2); + _VertexOffset_Vec.z = GetCustomData(_W9ParticleCustomDataFlag1,FLAGBIT_POS_1_CUSTOMDATA_VERTEXOFFSET_INTENSITY,_VertexOffset_Vec.z,input.Custom1,input.Custom2); + + if (CheckLocalFlags1(FLAG_BIT_PARTICLE_1_VERTEXOFFSET_MASKMAP)) + { + _VertexOffset_MaskMap_ST.z += GetCustomData(_W9ParticleCustomDataFlag3,FLAGBIT_POS_3_CUSTOMDATA_VERTEX_OFFSET_MASK_X,0,input.Custom1,input.Custom2); + _VertexOffset_MaskMap_ST.w += GetCustomData(_W9ParticleCustomDataFlag3,FLAGBIT_POS_3_CUSTOMDATA_VERTEX_OFFSET_MASK_Y,0,input.Custom1,input.Custom2); + } + + float2 vertexOffsetUVs = GetUVByUVMode(_UVModeFlag0,FLAG_BIT_UVMODE_POS_0_VERTEX_OFFSET_MAP,baseUVsForVertexOffset); + float2 vertexOffsetMaskUVs = GetUVByUVMode(_UVModeFlag0,FLAG_BIT_UVMODE_POS_0_VERTEX_OFFSET_MASKMAP,baseUVsForVertexOffset); + + positionOS.xyz = VetexOffset(positionOS,vertexOffsetUVs,vertexOffsetMaskUVs,input.normalOS); + } + + + // position ws is used to compute eye depth in vertFading + output.positionWS.xyz = mul(unity_ObjectToWorld, positionOS).xyz; + output.positionOS.xyz = positionOS; + + output.clipPos = TransformObjectToHClip(positionOS); + + #ifdef _PARALLAX_MAPPING + //视差贴图,需要在Tangent空间下计算。 + float3x3 objectToTangent = + float3x3( + input.tangentOS.xyz, + cross(input.normalOS,input.tangentOS.xyz) * input.tangentOS.w,//Bitangent + input.normalOS + ); + output.tangentViewDir = mul(objectToTangent,GetObjectSpaceNormalizeViewDir(positionOS)); + #endif + + float unityFogFactor = ComputeFogFactor(output.clipPos.z); + + output.positionWS.w = unityFogFactor; + + output.color = TryLinearize(input.color); + + output.viewDirWS = GetWorldSpaceNormalizeViewDir(output.positionWS.xyz); + output.normalWSAndAnimBlend.xyz = TransformObjectToWorldNormal(input.normalOS.xyz); + + + UNITY_FLATTEN + if(CheckLocalFlags(FLAG_BIT_PARTICLE_FRESNEL_ON)) + { + output.fresnelViewDir = output.viewDirWS; + } + + output.texcoord.xy = input.texcoords.xy; + + + + + + //顶点处理的原则: + //Twirl和极坐标,贴花处理,在片段着色器层处理UV。 + //BaseMap,遮罩Mask,Noise,高光(自发光) 和极坐标处理相关。 + if(!isProcessUVInFrag()) + { + + float2 specialUVInTexcoord3 = 0; + //如果同时在粒子系统里开启序列帧融帧和特殊UV通道模式。 + #if _FLIPBOOKBLENDING_ON + if(CheckLocalFlags1(FLAG_BIT_PARTICLE_1_IS_PARTICLE_SYSTEM) & (CheckLocalFlags1(FLAG_BIT_PARTICLE_1_USE_TEXCOORD1)|CheckLocalFlags1(FLAG_BIT_PARTICLE_1_USE_TEXCOORD2))) + { + specialUVInTexcoord3 = input.texcoordBlend.yz; + output.texcoord2AndSpecialUV.zw = specialUVInTexcoord3; + } + #endif + ParticleUVs particleUVs = (ParticleUVs)0; + float2 screenUV = 0; + + ParticleProcessUV(input.texcoords, specialUVInTexcoord3,particleUVs,output.VaryingsP_Custom1,output.VaryingsP_Custom2,screenUV,output.positionOS.xyz); + output.texcoord2AndSpecialUV.xy = particleUVs.animBlendUV; + output.texcoord2AndSpecialUV.zw= particleUVs.specUV; + output.texcoord.xy = particleUVs.mainTexUV; + output.texcoord.zw = particleUVs.maskMapUV; + + output.texcoordMaskMap2.xy = particleUVs.maskMap2UV; + output.texcoordMaskMap2.zw = particleUVs.maskMap3UV; + #if defined (_EMISSION) || defined(_COLORMAPBLEND) + output.emissionColorBlendTexcoord.xy = particleUVs.emissionUV; + output.emissionColorBlendTexcoord.zw = particleUVs.colorBlendUV; + #endif + + #ifdef _NOISEMAP + output.noisemapTexcoord.xy = particleUVs.noiseMapUV; + output.noisemapTexcoord.zw = particleUVs.noiseMaskMapUV; + #endif + #if defined(_DISSOLVE) + output.dissolveTexcoord.xy = particleUVs.dissolve_uv; + output.dissolveTexcoord.zw = particleUVs.dissolve_mask_uv; + output.dissolveNoiseTexcoord.xy = particleUVs.dissolve_noise1_UV; + output.dissolveNoiseTexcoord.zw = particleUVs.dissolve_noise2_UV; + #endif + } + else + { + output.texcoord = input.texcoords; + #if _FLIPBOOKBLENDING_ON + if(CheckLocalFlags1(FLAG_BIT_PARTICLE_1_IS_PARTICLE_SYSTEM) & CheckLocalFlags1(FLAG_BIT_PARTICLE_1_USE_TEXCOORD2)) + { + output.texcoord2AndSpecialUV.zw = input.texcoordBlend.yz; + } + #endif + } + #ifdef _FLIPBOOKBLENDING_ON + //粒子帧融合的情况,兼容一下。 + output.normalWSAndAnimBlend.w = input.texcoordBlend.x; + #endif + + + + + + UNITY_BRANCH + if(needEyeDepth()) + { + float4 ndc = output.clipPos*0.5f; + output.positionNDC.xy = float2(ndc.x, ndc.y * _ProjectionParams.x) + ndc.w; + output.positionNDC.zw = output.clipPos.zw; + } + + return output; + } + + + ///////////////////////Fragment functions //////////////////////// + + half4 fragParticleUnlit(VaryingsParticle input, half facing : VFACE): SV_Target + { + + input.viewDirWS = normalize(input.viewDirWS ); + + + UNITY_SETUP_INSTANCE_ID(input); + + time = _Time.y; + + float2 screenUV = input.clipPos.xy / _ScaledScreenParams.xy; + + real sceneZBufferDepth = 0; + real sceneZ = 0; + + UNITY_BRANCH + if(needSceneDepth()) + { + #if UNITY_REVERSED_Z + sceneZBufferDepth = SampleSceneDepth(screenUV); + #else + // Adjust z to match NDC for OpenGL + sceneZBufferDepth = lerp(UNITY_NEAR_CLIP_VALUE, 1, SampleSceneDepth(screenUV)); + #endif + sceneZ = (unity_OrthoParams.w == 0) ? LinearEyeDepth(sceneZBufferDepth, _ZBufferParams) : LinearDepthToEyeDepth(sceneZBufferDepth);//场景当前深度 + } + + real thisZ = 0; + if(needEyeDepth()) + { + thisZ = LinearEyeDepth(input.positionNDC.z / input.positionNDC.w, _ZBufferParams);//当前Frag深度。 + } + + + #ifdef _DEPTH_DECAL + float3 fragWorldPos = ComputeWorldSpacePosition(screenUV, sceneZBufferDepth, UNITY_MATRIX_I_VP); + float3 fragobjectPos = TransformWorldToObject(fragWorldPos); + + float3 absFragObjectPos = abs(fragobjectPos); + half clipValue = step(absFragObjectPos.x,0.5); + clipValue *= step(absFragObjectPos.y,0.5); + clipValue *= step(absFragObjectPos.z,0.5); + half decalAlpha = NB_Remap (abs(fragobjectPos.y),0.1,0.5,1,0); + decalAlpha *= clipValue; + float2 decalUV = fragobjectPos.xz + 0.5; + + #endif + + float4 uv = input.texcoord; + #ifdef _DEPTH_DECAL + uv.xy = decalUV; + #endif + + float3 blendUv; + blendUv.xy = input.texcoord2AndSpecialUV.xy; + blendUv.z = input.normalWSAndAnimBlend.w; + float2 MaskMapuv; + float2 MaskMapuv2; + float2 MaskMapuv3; + float2 noiseMap_uv; + float2 noiseMaskMap_uv; + float2 colorBlendMap_uv; + float2 emission_uv; + float2 dissolve_uv; + float2 dissolve_mask_uv; + float4 dissolve_noise_uv; + + //如果同时在粒子系统里开启序列帧融帧和特殊UV通道模式。 + + if(isProcessUVInFrag()) + { + float2 specialUVInTexcoord3 = 0; + #if _FLIPBOOKBLENDING_ON + if(CheckLocalFlags1(FLAG_BIT_PARTICLE_1_IS_PARTICLE_SYSTEM) & (CheckLocalFlags1(FLAG_BIT_PARTICLE_1_USE_TEXCOORD2))) + { + specialUVInTexcoord3 = input.texcoord2AndSpecialUV.zw; + } + + #endif + ParticleUVs particleUVs = (ParticleUVs)0; + ParticleProcessUV(uv,specialUVInTexcoord3,particleUVs,input.VaryingsP_Custom1,input.VaryingsP_Custom2,screenUV,input.positionOS.xyz); + uv.xy = particleUVs.mainTexUV; + blendUv.xy = particleUVs.animBlendUV; + MaskMapuv = particleUVs.maskMapUV; + MaskMapuv2 = particleUVs.maskMap2UV; + MaskMapuv3 = particleUVs.maskMap3UV; + emission_uv = particleUVs.emissionUV; + dissolve_uv = particleUVs.dissolve_uv; + dissolve_mask_uv = particleUVs.dissolve_mask_uv; + colorBlendMap_uv = particleUVs.colorBlendUV; + noiseMap_uv = particleUVs.noiseMapUV; + noiseMaskMap_uv = particleUVs.noiseMaskMapUV; + dissolve_noise_uv = float4(particleUVs.dissolve_noise1_UV,particleUVs.dissolve_noise2_UV); + + } + else + { + MaskMapuv = input.texcoord.zw; + MaskMapuv2 = input.texcoordMaskMap2.xy; + MaskMapuv3 = input.texcoordMaskMap2.zw; + #ifdef _NOISEMAP + noiseMap_uv = input.noisemapTexcoord.xy; + noiseMaskMap_uv = input.noisemapTexcoord.zw; + #endif + + #if defined (_EMISSION) || defined(_COLORMAPBLEND) + emission_uv = input.emissionColorBlendTexcoord.xy; + colorBlendMap_uv = input.emissionColorBlendTexcoord.zw; + #endif + + #ifdef _DISSOLVE + dissolve_uv = input.dissolveTexcoord.xy; + dissolve_mask_uv = input.dissolveTexcoord.zw; + dissolve_noise_uv = input.dissolveNoiseTexcoord; + #endif + } + half2 originUV = uv; + + #ifdef _PARALLAX_MAPPING + uv.xy = ParallaxOcclusionMapping(uv,input.tangentViewDir); + #endif + + half2 cum_noise = 0; + half2 cum_noise_xy = 0.5; + half noiseMask = 1; + #if defined(_NOISEMAP) + half4 noiseSample = SampleNoise(_NoiseOffset, _NoiseMap, noiseMap_uv, input.positionWS.xyz); + cum_noise = noiseSample.xy; + UNITY_FLATTEN + if(CheckLocalFlags(FLAG_BIT_PARTICLE_NOISEMAP_NORMALIZEED_ON)) + { + cum_noise = cum_noise * 2 - 1; + } + UNITY_BRANCH + if(CheckLocalFlags1(FLAG_BIT_PARTICLE_1_NOISE_MASKMAP)) + { + noiseMask= SampleTexture2DWithWrapFlags(_NoiseMaskMap,noiseMaskMap_uv,FLAG_BIT_WRAPMODE_NOISE_MASKMAP).r; + noiseMask *= noiseSample.a; + } + _TexDistortion_intensity = GetCustomData(_W9ParticleCustomDataFlag1,FLAGBIT_POS_1_CUSTOMDATA_NOISE_INTENSITY,_TexDistortion_intensity,input.VaryingsP_Custom1,input.VaryingsP_Custom2); + + _DistortionDirection.x += GetCustomData(_W9ParticleCustomDataFlag2,FLAGBIT_POS_2_CUSTOMDATA_NOISE_DIRECTION_X,0,input.VaryingsP_Custom1,input.VaryingsP_Custom2); + _DistortionDirection.y += GetCustomData(_W9ParticleCustomDataFlag2,FLAGBIT_POS_2_CUSTOMDATA_NOISE_DIRECTION_Y,0,input.VaryingsP_Custom1,input.VaryingsP_Custom2); + // 将扭曲放到post去做 + #if defined(_SCREEN_DISTORT_MODE) + cum_noise_xy = cum_noise * _TexDistortion_intensity * _DistortionDirection.xy; + cum_noise_xy = cum_noise_xy * 1.25 + 0.5; + #endif + + float2 mainTexNoise = cum_noise * noiseMask * _TexDistortion_intensity * _DistortionDirection.xy; + uv.xy += mainTexNoise;//主贴图纹理扭曲 + blendUv.xy += mainTexNoise; + #endif + + // SampleAlbedo-------------------- + half4 albedo = 0; + #if defined(_SCREEN_DISTORT_MODE) + albedo = half4(cum_noise_xy, 1.0, noiseMask); + #else + UNITY_FLATTEN + if(CheckLocalFlags(FLAG_BIT_PARTICLE_BACKCOLOR)) + { + _BaseColor = facing > 0 ? _BaseColor : _BaseBackColor; + } + + + Texture2D baseMap; + + #ifdef _SCREEN_DISTORT_MODE + baseMap = _ScreenColorCopy1; + #else + baseMap = _BaseMap; + #endif + + + UNITY_BRANCH + if (CheckLocalFlags(FLAG_BIT_PARTICLE_UIEFFECT_ON) & !CheckLocalFlags1(FLAG_BIT_PARTICLE_1_UIEFFECT_BASEMAP_MODE)) + { + albedo = BlendTexture(_MainTex, uv, blendUv) * _Color; + } + else if (CheckLocalFlags(FLAG_BIT_PARTICLE_CHORATICABERRAT)) + { + + _DistortionDirection.z = GetCustomData(_W9ParticleCustomDataFlag0,FLAGBIT_POS_0_CUSTOMDATA_CHORATICABERRAT_INTENSITY,_DistortionDirection.z,input.VaryingsP_Custom1,input.VaryingsP_Custom2); + _DistortionDirection.z *= 0.1; + albedo = DistortionChoraticaberrat(baseMap,originUV,uv,_DistortionDirection.z,FLAG_BIT_WRAPMODE_BASEMAP); + } + else + { + albedo = BlendTexture(baseMap, uv, blendUv,FLAG_BIT_WRAPMODE_BASEMAP); + + } + albedo *= _BaseColor ; + albedo.rgb *= _BaseColorIntensityForTimeline; + + #endif + + + + half alpha = albedo.a; + half3 result = albedo.rgb; + + UNITY_BRANCH + if(CheckLocalFlags(FLAG_BIT_HUESHIFT_ON)) + { + half3 hsv = RgbToHsv(result); + _HueShift = GetCustomData(_W9ParticleCustomDataFlag0,FLAGBIT_POS_0_CUSTOMDATA_HUESHIFT,_HueShift,input.VaryingsP_Custom1,input.VaryingsP_Custom2); + hsv.r += _HueShift; + result = HsvToRgb(hsv); + } + + if (CheckLocalFlags1(FLAG_BIT_PARTICLE_1_MAINTEX_CONTRAST)) + { + _Contrast = GetCustomData(_W9ParticleCustomDataFlag2,FLAGBIT_POS_2_CUSTOMDATA_MAINTEX_CONTRAST,_Contrast,input.VaryingsP_Custom1,input.VaryingsP_Custom2); + result.rgb = lerp(_ContrastMidColor,result.rgb,_Contrast); + } + + + if (CheckLocalFlags1(FLAG_BIT_PARTICLE_1_MAINTEX_COLOR_REFINE)) + { + half3 colorA = result.rgb*_BaseMapColorRefine.x; + half3 colorB = pow(result.rgb,_BaseMapColorRefine.y)*_BaseMapColorRefine.z; + result.rgb = lerp(colorA,colorB,_BaseMapColorRefine.w); + } + + + + //流光部分 + half4 emission = half4(0, 0, 0,1); + #if defined(_EMISSION) + #ifdef _NOISEMAP + emission_uv += cum_noise * _Emi_Distortion_intensity; + #endif + // emission = tex2D_TryLinearizeWithoutAlphaFX(_EmissionMap,emission_uv); + emission = SampleTexture2DWithWrapFlags(_EmissionMap,emission_uv,FLAG_BIT_WRAPMODE_EMISSIONMAP); + emission.xyz *= emission.a; + _EmissionMapColor *= _EmissionMapColorIntensity; + emission.xyz *= _EmissionMapColor; + + #endif + + result += emission; + + //溶解部分 + #if defined(_DISSOLVE) + #ifdef _NOISEMAP + dissolve_uv += cum_noise * _DissolveOffsetRotateDistort.w; + + UNITY_FLATTEN + if(CheckLocalFlags(FLAG_BIT_PARTICLE_DISSOLVE_MASK)) + { + dissolve_mask_uv += cum_noise * _DissolveOffsetRotateDistort.w; + } + #endif + half dissolveValue; + + dissolveValue = SampleTexture2DWithWrapFlags(_DissolveMap,dissolve_uv,FLAG_BIT_WRAPMODE_DISSOLVE_MAP); + + UNITY_BRANCH + if(CheckLocalFlags1(FLAG_BIT_PARTICLE_1_DISSOVLE_VORONOI)) + { + half cell; + half noise1; + noise1 = SimplexNoise(dissolve_noise_uv.xy,_Time.y*_DissolveVoronoi_Vec2.z); + + half noise2; + Unity_Voronoi_float(dissolve_noise_uv.zw,_Time.y*_DissolveVoronoi_Vec2.w,_DissolveVoronoi_Vec.zw,noise2,cell); + half overlayVoroni; + + half dissolveSample = dissolveValue; + Unity_Blend_HardLight_half(noise1,noise2,_DissolveVoronoi_Vec2.x,overlayVoroni); + + Unity_Blend_HardLight_half(overlayVoroni,dissolveSample,_DissolveVoronoi_Vec2.y,dissolveValue); + + + } + + dissolveValue = SimpleSmoothstep(_Dissolve_Vec2.x,_Dissolve_Vec2.y,dissolveValue); + + #ifdef _DISSOLVE_EDITOR_TEST //后续Test类的关键字要找机会排除 + return half4(dissolveValue.rrr,1); + #endif + + + half dissolveMaskValue = 0; + UNITY_BRANCH + if(CheckLocalFlags(FLAG_BIT_PARTICLE_DISSOLVE_MASK)) + { + dissolveMaskValue = SampleTexture2DWithWrapFlags(_DissolveMaskMap,dissolve_mask_uv,FLAG_BIT_WRAPMODE_DISSOLVE_MASKMAP); + _Dissolve.z += GetCustomData(_W9ParticleCustomDataFlag1,FLAGBIT_POS_1_CUSTOMDATA_DISSOLVE_MASK_INTENSITY,0,input.VaryingsP_Custom1,input.VaryingsP_Custom2); + dissolveMaskValue *= _Dissolve.z; + dissolveValue = lerp(dissolveValue,1.01,dissolveMaskValue); + } + half originDissolve = dissolveValue; + + _Dissolve.x += GetCustomData(_W9ParticleCustomDataFlag0,FLAGBIT_POS_0_CUSTOMDATA_DISSOLVE_INTENSITY,0,input.VaryingsP_Custom1,input.VaryingsP_Custom2); + + dissolveValue = dissolveValue-_Dissolve.x; + half dissolveValueBeforeSoftStep = dissolveValue; + half softStep = _Dissolve.w; + dissolveValue = SimpleSmoothstep(0,softStep,(dissolveValue)); + + alpha *= dissolveValue; + if(CheckLocalFlags1(FLAG_BIT_PARTICLE_1_DISSOVLE_USE_RAMP)) + { + half rampRange = 1-dissolveValueBeforeSoftStep ; + rampRange = rampRange * _DissolveRampMap_ST.x +_DissolveRampMap_ST.z; + + half4 rampSample = SampleTexture2DWithWrapFlags(_DissolveRampMap,half2(rampRange,0.5),FLAG_BIT_WRAPMODE_DISSOLVE_RAMPMAP); + result = lerp(result,rampSample.rgb*_DissolveRampColor.rgb,rampSample.a*_DissolveRampColor.a); + } + + half lineMask = 1 - smoothstep(0,softStep,alpha * (dissolveValueBeforeSoftStep - _Dissolve.y)); + result = lerp(result,_DissolveLineColor.rgb,lineMask*_DissolveLineColor.a); + + + + #endif + + //颜色渐变 + #ifdef _COLORMAPBLEND + half4 colorBlend = SampleTexture2DWithWrapFlags(_ColorBlendMap,colorBlendMap_uv,FLAG_BIT_WRAPMODE_COLORBLENDMAP); + colorBlend.rgb = colorBlend.rgb * _ColorBlendColor.rgb; + result.rgb = lerp(result.rgb,result.rgb * colorBlend.rgb,_ColorBlendColor.a); + #endif + + //菲涅 + + UNITY_BRANCH + if(CheckLocalFlags(FLAG_BIT_PARTICLE_FRESNEL_ON)) + { + half fresnelValue = 0; + if(!ignoreFresnel()) + { + half3 fresnelDir = normalize(input.fresnelViewDir+_FresnelRotation.rgb); + + half dotNV = dot(fresnelDir,input.normalWSAndAnimBlend.xyz) ; + fresnelValue = dotNV; + + + _FresnelUnit.x += GetCustomData(_W9ParticleCustomDataFlag0,FLAGBIT_POS_0_CUSTOMDATA_FRESNEL_OFFSET,0,input.VaryingsP_Custom1,input.VaryingsP_Custom2);; + + fresnelValue = NB_Remap(fresnelValue,_FresnelUnit.x,1,0,1); + UNITY_BRANCH + if(!CheckLocalFlags(FLAG_BIT_PARTICLE_FRESNEL_INVERT_ON)) + { + fresnelValue = 1- fresnelValue; + } + fresnelValue = pow(fresnelValue,_FresnelUnit.y); + + half fresnelHardness = (1 - _FresnelUnit.w)*0.5; + + fresnelValue = smoothstep(0.5-fresnelHardness,0.5+fresnelHardness,fresnelValue); + } + + UNITY_BRANCH + if(CheckLocalFlags(FLAG_BIT_PARTICLE_FRESNEL_COLOR_ON)) + { + float fresnelColorIntensity = fresnelValue*_FresnelColor.a*_FresnelUnit.z; + + result = lerp(result,_FresnelColor.rgb,fresnelColorIntensity); + alpha = max(alpha,fresnelColorIntensity);//颜色要不要不被主贴图Alpha影响呢? + } + + UNITY_BRANCH + if(CheckLocalFlags(FLAG_BIT_PARTICLE_FRESNEL_FADE_ON)) + { + fresnelValue *= alpha; + alpha = lerp(alpha,fresnelValue,_FresnelUnit.z); + } + + } + + UNITY_BRANCH + if(CheckLocalFlags1(FLAG_BIT_PARTICLE_1_DEPTH_OUTLINE)) + { + half depthOutlineValue = 1- SoftParticles(_DepthOutline_Vec.x, _DepthOutline_Vec.y, sceneZ,thisZ); + depthOutlineValue *= _DepthOutline_Color.a; + half3 originResult = result; + //如何在一个pass里,完美的给出两个颜色的Fade。这个问题,没有想清楚。 + result = lerp(result,_DepthOutline_Color.rgb,clamp(depthOutlineValue*3,0,1)); + result = lerp(result,originResult,clamp(alpha-depthOutlineValue,0,1)); + alpha = max(alpha,depthOutlineValue); + + } + + + + //遮罩部分 + #if defined(_MASKMAP_ON) + + #if defined(_NOISEMAP) + MaskMapuv += cum_noise * _MaskDistortion_intensity; //加入扭曲效果 + #endif + half4 maskmap1 = SampleTexture2DWithWrapFlags(_MaskMap, MaskMapuv,FLAG_BIT_WRAPMODE_MASKMAP); + + UNITY_BRANCH + if(CheckLocalFlags1(FLAG_BIT_PARTICLE_1_MASK_MAP2)) + { + half maskMap2 = SampleTexture2DWithWrapFlags(_MaskMap2, MaskMapuv2,FLAG_BIT_WRAPMODE_MASKMAP2).r; + maskmap1 *= maskMap2; + } + + UNITY_BRANCH + if(CheckLocalFlags1(FLAG_BIT_PARTICLE_1_MASK_MAP3)) + { + half maskMap3 = SampleTexture2DWithWrapFlags(_MaskMap3, MaskMapuv3,FLAG_BIT_WRAPMODE_MASKMAP3).r; + maskmap1 *= maskMap3; + } + + maskmap1.rgb = lerp(1,maskmap1.rgb,_MaskMapVec.x); + maskmap1.rgb = saturate(maskmap1.rgb); + + maskmap1.rgb *= maskmap1.a;//预乘 + + alpha *= maskmap1.r; //mask边缘 + #endif + + + //可以看https://www.cyanilux.com/tutorials/depth/ + // float4 projectedPosition = input.positionNDC; + // float thisZ1 = LinearEyeDepth(projectedPosition.z / projectedPosition.w, _ZBufferParams); + + + UNITY_BRANCH + if(CheckLocalFlags(FLAG_BIT_PARTICLE_DISTANCEFADE_ON)) + { + half fade = DepthFactor(thisZ, _Fade.x, _Fade.y); + alpha *= fade; + } + + + #if defined(_SOFTPARTICLES_ON) + + half softAlpha = SoftParticles(SOFT_PARTICLE_NEAR_FADE, SOFT_PARTICLE_INV_FADE_DISTANCE, sceneZ,thisZ); + alpha *= softAlpha; + + #endif + + + + + + UNITY_BRANCH + if(CheckLocalFlags(FLAG_BIT_SATURABILITY_ON)) + { + half3 resultWB = luminance(result); + _Saturability = GetCustomData(_W9ParticleCustomDataFlag1,FLAGBIT_POS_1_CUSTOMDATA_SATURATE,_Saturability,input.VaryingsP_Custom1,input.VaryingsP_Custom2); + result.rgb = lerp(resultWB.rgb, result.rgb, _Saturability); + } + + + //和粒子颜色信息运算。雨轩:乘顶点色。 + if(!CheckLocalFlags1(FLAG_BIT_PARTICLE_1_IGNORE_VERTEX_COLOR)) + { + result *= input.color.rgb; + alpha *= input.color.a; + } + // 程序额外的颜色 + result *= _ColorA.rgb; + alpha *= _ColorA.a; + // // alpha *= _ColorA * 0.8; + + + #ifdef _DEPTH_DECAL + alpha *= decalAlpha; + #endif + + + + half3 beforeFogResult = result; + result = MixFog(result,input.positionWS.w); + result = lerp(beforeFogResult, result, _fogintensity); + + + + #ifndef _SCREEN_DISTORT_MODE + result.rgb = result.rgb * alpha; + #endif + + UNITY_FLATTEN + if(CheckLocalFlags(FLAG_BIT_PARTICLE_LINEARTOGAMMA_ON)) + { + result.rgb = LinearToGammaSpace(result.rgb); + } + + + alpha *= _AlphaAll; + + half4 color = half4(result, alpha); + + #ifdef _ALPHATEST_ON + clip(color.a - _Cutoff); + + #endif + + return color; + } + +#endif diff --git a/Packages/NBShaders/Shader/HLSL/ParticlesUnlitForwardPassNew.hlsl.meta b/Packages/NBShaders/Shader/HLSL/ParticlesUnlitForwardPassNew.hlsl.meta new file mode 100644 index 00000000..8e3f4d72 --- /dev/null +++ b/Packages/NBShaders/Shader/HLSL/ParticlesUnlitForwardPassNew.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9187c1d488f62d9458d6ce67858a43b3 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/NBShaders/Shader/HLSL/ParticlesUnlitInputNew.hlsl b/Packages/NBShaders/Shader/HLSL/ParticlesUnlitInputNew.hlsl new file mode 100644 index 00000000..a852447c --- /dev/null +++ b/Packages/NBShaders/Shader/HLSL/ParticlesUnlitInputNew.hlsl @@ -0,0 +1,988 @@ +#ifndef PARTICLESUNLITINPUT + #define PARTICLESUNLITINPUT + + + + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareDepthTexture.hlsl" + + + //---------------particleInput------------------- + CBUFFER_START(UnityPerMaterial) + float4 _SoftParticleFadeParams; + float4 _CameraFadeParams; + // #ifdef _INTERSECT_ON + float _IntersectRadius; + half4 _IntersectColor; + // #endif + half _Saturability; + half _HueShift; + half _Contrast; + half3 _ContrastMidColor; + half4 _BaseMapColorRefine; + half _AlphaAll; + float4 _BaseMap_ST; + float4 _BaseMap_AnimationSheetBlend_ST;//20240826 暂时只是给AnimationSheetHelper用。 + half _AnimationSheetHelperBlendIntensity; + float4 _MaskMap_ST; + half4 _BaseColor; + half4 _BaseBackColor; + half _BaseColorIntensityForTimeline; + half4 _EmissionMap_ST; + half4 _NoiseMap_ST; + half4 _NoiseMaskMap_ST; + half4 _DistortionDirection; + half4 _BaseColorAddSubDiff; + half _fogintensity; + half _Emi_Distortion_intensity; + half _BaseMapUVRotation; + float _MaskMapUVRotation; + float _NoiseMapUVRotation; + half _uvRapSoft; + half4 _EmissionMapColor; + half _EmissionMapColorIntensity; + + half _EdgeFade; + half4 _NoiseOffset; + half4 _EmissionMapUVOffset; + half _EmissionMapUVRotation; + half _EmissionSelfAlphaWeight; + half _TexDistortion_intensity; + // //half _RJ_Distortion_intensity; + // half _XianXingCH_UVRota; + // half _jingxiangCH_dire; + + half _MaskDistortion_intensity; + half4 _BaseMapMaskMapOffset; + half4 _MaskMapOffsetAnition; + half4 _MaskMap3OffsetAnition; + half4 _MaskMapVec; + float4 _PCCenter; + float4 _TWParameter; + float _TWStrength; + float4 _Fade; + float _MaskMapRotationSpeed; + + + half _FrePower; + half _FresnelInOutSlider; + half4 _FresnelRotation; + half _FresnelSelfAlphaWeight; + half4 _FresnelUnit; + half4 _FresnelUnit2; + half4 _DepthOutline_Vec; + half4 _DepthOutline_Color; + half4 _FresnelColor; + half4 _ColorA; + float4 _ClipRect; + + float4 _CylinderMatrix0; + float4 _CylinderMatrix1; + float4 _CylinderMatrix2; + float4 _CylinderMatrix3; + + half4 _Color; + float4 _UI_MainTex_ST;//在UI中,RawImage组件的功能和正常的TexST不一致,所以这里使用另外传的方式。 + float4 _MainTex_Reverse_ST; + + half _Cutoff; + + float4 _MaskMap2_ST; + float4 _MaskMap3_ST; + + float time; + half _FresnelFadeDistance; + + half4 LB_RT; + + half4 _Dissolve; + half4 _DissolveMap_ST; + half4 _DissolveOffsetRotateDistort; + half4 _DissolveMaskMap_ST; + + half4 _DissolveLineColor; + half4 _DissolveRampColor; + float4 _DissolveVoronoi_Vec; + half4 _DissolveVoronoi_Vec2; + float4 _DissolveVoronoi_Vec3; + float4 _DissolveVoronoi_Vec4; + half4 _DissolveRampMap_ST; + half4 _Dissolve_Vec2; + + half4 _ColorBlendMap_ST; + half2 _ColorBlendMapOffset; + half4 _ColorBlendColor; + + half3 _VertexOffset_Vec; + half3 _VertexOffset_CustomDir; + half4 _VertexOffset_Map_ST; + + half4 _VertexOffset_MaskMap_ST; + half3 _VertexOffset_MaskMap_Vec; + + half _ParallaxMapping_Intensity; + half4 _ParallaxMapping_Map_ST; + half4 _ParallaxMapping_Vec; + + uint _W9ParticleShaderFlags; + + uint _W9ParticleShaderFlags1; + + uint _W9ParticleShaderWrapFlags; + + uint _W9ParticleCustomDataFlag0; + uint _W9ParticleCustomDataFlag1; + uint _W9ParticleCustomDataFlag2; + uint _W9ParticleCustomDataFlag3; + + uint _UVModeFlag0; + + CBUFFER_END + + + bool CheckLocalFlags(uint bits) + { + return (_W9ParticleShaderFlags&bits) != 0; + } + bool CheckLocalFlags1(uint bits) + { + return (_W9ParticleShaderFlags1&bits) != 0; + } + int CheckLocalWrapFlags(uint bits) + { + bool bit0 = (_W9ParticleShaderWrapFlags&bits) != 0; + bool bit1 = (_W9ParticleShaderWrapFlags&(bits<<16)) != 0; + if(!bit0 && !bit1) + { + return 0; + } + else if(bit0 && !bit1) + { + return 1; + } + else if(!bit0 && bit1) + { + return 2; + } + else if(bit0 && bit1) + { + return 3; + } + else + { + return -1; + } + } + + SamplerState sampler_linear_repeat; + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_RepeatU_ClampV; + SamplerState sampler_linear_ClampU_RepeatV; + + half4 SampleTexture2DWithWrapFlags(Texture2D tex,float2 uv,uint bits,bool sampleLOD = false,int lod = 0) + { + const int wrapMode = CheckLocalWrapFlags(bits); + switch (wrapMode) + { + case 0: + if (sampleLOD) + { + return SAMPLE_TEXTURE2D_LOD(tex,sampler_linear_repeat,uv,lod); + + } + else + { + return tex.Sample(sampler_linear_repeat,uv); + } + break; + case 1: + if (sampleLOD) + { + return SAMPLE_TEXTURE2D_LOD(tex,sampler_linear_clamp,uv,lod); + + } + else + { + return tex.Sample(sampler_linear_clamp,uv); + } + break; + case 2: + if (sampleLOD) + { + return SAMPLE_TEXTURE2D_LOD(tex,sampler_linear_RepeatU_ClampV,uv,lod); + + } + else + { + return tex.Sample(sampler_linear_RepeatU_ClampV,uv); + } + break; + case 3: + if (sampleLOD) + { + return SAMPLE_TEXTURE2D_LOD(tex,sampler_linear_ClampU_RepeatV,uv,lod); + + } + else + { + return tex.Sample(sampler_linear_ClampU_RepeatV,uv); + } + break; + default: + if (sampleLOD) + { + return SAMPLE_TEXTURE2D_LOD(tex,sampler_linear_repeat,uv,lod); + + } + else + { + return tex.Sample(sampler_linear_repeat,uv); + } + break; + } + } + + + + #include "../HLSL/EffectFlags.hlsl" + + + samplerCUBE _FresnelHDRITex; + sampler2D _MainTex; + + + + #define SOFT_PARTICLE_NEAR_FADE _SoftParticleFadeParams.x //�궨��SOFT_PARTICLE_NEAR_FADE ��Ϊ_SoftParticleFadeParams���Ե�x����~ + #define SOFT_PARTICLE_INV_FADE_DISTANCE _SoftParticleFadeParams.y + + #define CAMERA_NEAR_FADE _CameraFadeParams.x + #define CAMERA_INV_FADE_DISTANCE _CameraFadeParams.y + + Texture2D _BaseMap; + Texture2D _NoiseMap; + Texture2D _NoiseMaskMap; + Texture2D _EmissionMap; + Texture2D _MaskMap; + Texture2D _MaskMap2; + Texture2D _MaskMap3; + + #ifdef _SCREEN_DISTORT_MODE + Texture2D _ScreenColorCopy1; + #endif + + // Pre-multiplied alpha helper + #if defined(_ALPHAPREMULTIPLY_ON) //if( blend: One OneMinusSrcAlpha) + #define ALBEDO_MUL albedo + #else + #define ALBEDO_MUL albedo.a + #endif + + + #ifdef SOFT_UI_FRAME + sampler2D _SoftUIFrameMask; + // half4 LB_RT; + #endif + + #ifdef _DISSOLVE + Texture2D _DissolveMap; + Texture2D _DissolveMaskMap; + Texture2D _DissolveRampMap; + #endif + + # ifdef _COLORMAPBLEND + Texture2D _ColorBlendMap; + #endif + + + + half4 tex2D_TryLinearizeWithoutAlphaFX(sampler2D tex, float2 uv) + { + half4 outColor = 0; + + #if defined(PARTICLE)//UI下使用ParticleBase不需要做 Gamma2Linear 转换 + UNITY_FLATTEN + if(CheckLocalFlags(FLAG_BIT_PARTICLE_UIEFFECT_ON)) + { + outColor = tex2D(tex, uv); + } + else + { + outColor = TryLinearizeWithoutAlpha(tex2D(tex, uv)); + } + #endif + return outColor; + } + // + // Color blending fragment function + float4 MixParticleColor(float4 baseColor, float4 particleColor, float4 colorAddSubDiff) + { + #if defined(_COLOROVERLAY_ON) // Overlay blend + float4 output = baseColor; + output.rgb = lerp(1 - 2 * (1 - baseColor.rgb) * (1 - particleColor.rgb), 2 * baseColor.rgb * particleColor.rgb, step(baseColor.rgb, 0.5)); + output.a *= particleColor.a; + return output; + #elif defined(_COLORCOLOR_ON) // Color blend + half3 aHSL = RgbToHsv(baseColor.rgb); + half3 bHSL = RgbToHsv(particleColor.rgb); + half3 rHSL = half3(bHSL.x, bHSL.y, aHSL.z); + return half4(HsvToRgb(rHSL), baseColor.a * particleColor.a); + #elif defined(_COLORADDSUBDIFF_ON) // Additive, Subtractive and Difference blends based on 'colorAddSubDiff' + float4 output = baseColor; + output.rgb = baseColor.rgb + particleColor.rgb * colorAddSubDiff.x; + output.rgb = lerp(output.rgb, abs(output.rgb), colorAddSubDiff.y); + output.a *= particleColor.a; + return output; + #else // Default to Multiply blend + return baseColor * particleColor; + #endif + } + + // Soft particles - returns alpha value for fading particles based on the depth to the background pixel + float SoftParticles(float near, float far, float sceneZ,float thisZ) + { + float fade = 1; + if (near > 0.0 || far > 0.0) + { + // fade = saturate(far * ((sceneZ - near) - thisZ)); + float dist = sceneZ - thisZ; + fade = NB_Remap(dist, near,far,0,1); + } + return fade; + } + + + // Camera fade - returns alpha value for fading particles based on camera distance + half CameraFade(float near, float far, float thisZ) + { + return saturate((thisZ - near) * far); + } + + //相交位置渐变功能 + half4 Intersect(float IntersectRadius,half4 IntersectColor,float sceneZ,float thisZ) + { + half fade = sceneZ - thisZ; + fade =1- NB_Remap(fade,0,IntersectRadius,0,1); + + half4 c = 0; + c.rgb = IntersectColor.rgb; + c.a = fade*IntersectColor.a; + + return c; + } + + //遮挡穿透显示功能。 + half OccludeOpacity(half preAlpha,half _OccludeOpacity,half sceneZ,half thisZ) + { + half fakeZtest = step(thisZ,sceneZ); + return lerp(preAlpha*_OccludeOpacity,preAlpha,fakeZtest); + } + + + // Sample a texture and do blending for texture sheet animation if needed + half4 BlendTexture(sampler2D _Texture, float2 uv, float3 blendUv) + { + half4 color = tex2D_TryLinearizeWithoutAlphaFX(_Texture, uv); + + half4 color2; + #ifdef _FLIPBOOKBLENDING_ON + color2 = tex2D_TryLinearizeWithoutAlphaFX(_Texture, blendUv.xy); + color = lerp(color, color2, blendUv.z); + #endif + + // if(CheckLocalFlags1(FLAG_BIT_PARTICLE_1_ANIMATION_SHEET_HELPER)) + // { + // color2 = tex2D_TryLinearizeWithoutAlphaFX(_Texture, blendUv.xy); + // color = lerp(color, color2, blendUv.z); + // } + return color; + } + + half4 BlendTexture(Texture2D _Texture, float2 uv, float3 blendUv,uint bits) + { + half4 color = SampleTexture2DWithWrapFlags(_Texture,uv,bits); + half4 color2; + #ifdef _FLIPBOOKBLENDING_ON + color2 = SampleTexture2DWithWrapFlags(_Texture,blendUv.xy,bits); + color = lerp(color, color2, blendUv.z); + #endif + + // if(CheckLocalFlags1(FLAG_BIT_PARTICLE_1_ANIMATION_SHEET_HELPER)) + // { + // color2 = SampleTexture2DWithWrapFlags(_Texture, blendUv.xy,bits); + // color = lerp(color, color2, blendUv.z); + // } + return color; + } + + float2 UVOffsetAnimaiton(float2 UV,half2 OffsetSpeed) + { + float2 newUV = float2(OffsetSpeed.x*time+UV.x,OffsetSpeed.y*time+UV.y); + return newUV; + } + + // 采样噪波 + half4 SampleNoise(half4 NoiseOffset, Texture2D _Texture,float2 UV, half3 wordPos) + { + + float2 UV2 = float2(NoiseOffset.x * time + UV.x, NoiseOffset.y * time + UV.y); //_Time.y + + half4 color = SampleTexture2DWithWrapFlags(_Texture, UV2 ,FLAG_BIT_WRAPMODE_NOISEMAP); + // color.xy *= color.a; + + return color; + } + + + // // 替换颜色 + // half3 ReplaceColor_float(float3 In, float3 From, float3 To, float Range, float Fuzziness) + // { + // float Distance = distance(From, In); + // half3 Out = lerp(To, In, saturate((Distance - Range) / max(Fuzziness, 0.001))); //e-f? 0.00001 + // return Out; + // } + + //漩涡 圆形区域内变形。圆圈中心处的像素会旋转指定角度;圆圈中其他像素的旋转会随着相对于中心距离的变化而减小,在圆圈边缘处减小为零 + float2 UTwirl(float2 UV, float2 Center, float Strength) + { + float2 delta = UV - Center; + float angle = Strength * length(delta); + float x = cos(angle) * delta.x - sin(angle) * delta.y; + float y = sin(angle) * delta.x + cos(angle) * delta.y; + return float2(x + Center.x , y + Center.y ); + + } + + //Fresnel + half4 Unity_FresnelEffect(float3 Normal, float3 ViewDir, float Power, float Dire,half fresnelPos) + { + // half aa = saturate(dot(normalize(Normal), (ViewDir))); + half aa = dot(normalize(Normal), (ViewDir)); + aa = (aa+1)*0.5; + aa = NB_Remap(aa,fresnelPos,1,0,1); + aa = lerp(aa, (1 - aa), Dire); + half Out = pow( aa, Power); + return Out; + } + + half3 Rotation(half3 normalizedDirection,half3 rotation) + { + half4 Dir = half4(normalizedDirection,1); + float4x4 M_RotationX = float4x4( + + 1,0,0,0, + 0,cos(rotation.x),sin(rotation.x),0, + 0,-sin(rotation.x),cos(rotation.x),0, + 0,0,0,1 + + ); + float4x4 M_RotationY = float4x4( + + cos(rotation.y),0,sin(rotation.y),0, + 0,1,0,0, + -sin(rotation.y),0,cos(rotation.y),0, + 0,0,0,1 + + ); + float4x4 M_RotationZ = float4x4( + + cos(rotation.z),sin(rotation.z),0,0, + -sin(rotation.z),cos(rotation.z),0,0, + 0,0,1,0, + 0,0,0,1 + + ); + + return mul(M_RotationZ,mul(M_RotationY,mul(M_RotationX,Dir))); + + } + + //----------------公告板功能-----------------// + half3 BillBoard(float3 camPos, float3 vertexPos, int billboardType, int _ReverseZ) + { + float3 Z = normalize(mul(unity_WorldToObject, float4(_WorldSpaceCameraPos,1))); + if(_ReverseZ == 1) + { + Z *= -1; + } + Z.y *= billboardType; + + float3 Y = float3(0,1,0); + float3 X = normalize(cross(Z,Y)); + Y = normalize(cross(X,Z)); + float4x4 M = float4x4( + X.x, Y.x, Z.x, 0, + X.y, Y.y, Z.y, 0, + X.z, Y.z, Z.z, 0, + 0,0,0,1 + ); + float3 newPos = mul(M, vertexPos); + return newPos; + } + + half3 BillBoardNormal(float3 camPos, float3 vertexPos, int billboardType, int _ReverseZ) + { + float3 Z = normalize(mul(unity_WorldToObject, float4(_WorldSpaceCameraPos,1))); + if(_ReverseZ == 1) + { + Z *= -1; + } + Z.y *= billboardType; + + float3 Y = float3(0,1,0); + float3 X = normalize(cross(Y,Z)); + Y = normalize(cross(X,Z)); + float4x4 M = float4x4( + X.x, Y.x, Z.x, 0, + X.y, Y.y, Z.y, 0, + X.z, Y.z, Z.z, 0, + 0,0,0,1 + ); + float3 newPos = -mul(M, vertexPos); + return newPos; + } + + + float2 ParticleUVCommonProcess(float2 originUVAfterTwirlPolar,float4 scaleTilling,float2 offset = float2(0,0),float rotation = 0,float2 rotationCenter = float2(0.5,0.5)) + { + float2 uv = originUVAfterTwirlPolar; + uv = Rotate_Radians_float(uv,rotationCenter,rotation); + uv = uv*scaleTilling.xy + scaleTilling.zw; + + uv = UVOffsetAnimaiton(uv,offset); + + return uv; + } + + struct ParticleUVs + { + float2 mainTexUV; + float2 specUV; + float2 animBlendUV; + float2 maskMapUV; + float2 maskMap2UV; + float2 maskMap3UV; + float2 emissionUV; + float2 dissolve_uv; + float2 dissolve_mask_uv; + float2 dissolve_noise1_UV; + float2 dissolve_noise2_UV; + float2 colorBlendUV; + float2 noiseMapUV; + float2 noiseMaskMapUV; + }; + + BaseUVs ProcessBaseUVs(float4 meshTexcoord0, float2 specialUVInTexcoord3,float4 VaryingsP_Custom1,float4 VaryingsP_Custom2,float3 postionOS) + { + //UV2的内容在外边就决定好。 + float2 defaultUVChannel = meshTexcoord0.xy; + float2 specialUVChannel = meshTexcoord0.zw; + #if _FLIPBOOKBLENDING_ON + if(CheckLocalFlags1(FLAG_BIT_PARTICLE_1_IS_PARTICLE_SYSTEM) & CheckLocalFlags1(FLAG_BIT_PARTICLE_1_USE_TEXCOORD2)) + { + specialUVChannel = specialUVInTexcoord3; + } + #else + if(CheckLocalFlags1(FLAG_BIT_PARTICLE_1_UV_FROM_MESH)) + { + //Mesh条件下开启使用特殊UV通道的情况 + if (CheckLocalFlags1(FLAG_BIT_PARTICLE_1_USE_TEXCOORD1)) + { + specialUVChannel = VaryingsP_Custom1.xy; + } + if(CheckLocalFlags1(FLAG_BIT_PARTICLE_1_USE_TEXCOORD2)) + { + specialUVChannel = VaryingsP_Custom2.xy; + } + } + else + { + //只有在粒子系统下开启特殊通道的情况,会在面板层引导合并相关内容。UI/Mesh不开启特殊通道没有意义。 + specialUVChannel = meshTexcoord0.zw; + } + #endif + + + if(CheckLocalFlags1(FLAG_BIT_PARTICLE_1_UIEFFECT_SPRITE_MODE)) + { + defaultUVChannel = defaultUVChannel*_MainTex_Reverse_ST.xy +_MainTex_Reverse_ST.zw; + } + //TODO:补写MeshUV的实现 + float2 cylinderUV = meshTexcoord0.xy; + if(CheckLocalFlags1(FLAG_BIT_PARTICLE_1_CYLINDER_CORDINATE)) + { + float4x4 _CylinderUVMatrix = float4x4(_CylinderMatrix0,_CylinderMatrix1,_CylinderMatrix2,_CylinderMatrix3); + postionOS = mul(_CylinderUVMatrix,float4(postionOS,1)); + cylinderUV = CylinderCoordinate(postionOS); + } + + float2 UVAfterTwirlPolar = defaultUVChannel; + if(CheckLocalFlags(FLAG_BIT_PARTICLE_UTWIRL_ON)) + { + UVAfterTwirlPolar = UTwirl(defaultUVChannel,_TWParameter.xy, _TWStrength); + } + if(CheckLocalFlags(FLAG_BIT_PARTICLE_POLARCOORDINATES_ON)) + { + float2 UVAfterTwirl = UVAfterTwirlPolar; + UVAfterTwirlPolar = PolarCoordinates(UVAfterTwirlPolar,_PCCenter.xy); + UVAfterTwirlPolar = lerp(UVAfterTwirl,UVAfterTwirlPolar,_PCCenter.z); + } + BaseUVs baseUVs = (BaseUVs)0; + baseUVs.defaultUVChannel = defaultUVChannel; + baseUVs.specialUVChannel = specialUVChannel; + baseUVs.uvAfterTwirlPolar = UVAfterTwirlPolar; + baseUVs.cylinderUV = cylinderUV; + return baseUVs; + } + + void ParticleProcessUV(float4 meshTexcoord0, float2 specialUVInTexcoord3,inout ParticleUVs particleUVs,float4 VaryingsP_Custom1,float4 VaryingsP_Custom2,float2 screenUV,float3 postionOS) + { + BaseUVs baseUVs= ProcessBaseUVs(meshTexcoord0,specialUVInTexcoord3,VaryingsP_Custom1,VaryingsP_Custom2,postionOS); + + particleUVs.specUV = baseUVs.specialUVChannel; + float2 baseMapUV = GetUVByUVMode(_UVModeFlag0,FLAG_BIT_UVMODE_POS_0_MAINTEX,baseUVs); + + #ifdef _FLIPBOOKBLENDING_ON //开启序列帧融合 + if(CheckLocalFlags1(FLAG_BIT_PARTICLE_1_ANIMATION_SHEET_HELPER)) + { + //走AnimationSheetHelper脚本的情况,永远和baseMap同步。 + particleUVs.animBlendUV = baseMapUV*_BaseMap_AnimationSheetBlend_ST.xy+_BaseMap_AnimationSheetBlend_ST.zw; + } + else + { + //走粒子的情况 + particleUVs.animBlendUV = meshTexcoord0.zw; + } + #endif + + + #ifdef _SCREEN_DISTORT_MODE + particleUVs.mainTexUV = screenUV; + #else + baseMapUV = Rotate_Radians_float(baseMapUV, half2(0.5, 0.5), _BaseMapUVRotation); //主贴图旋转 + UNITY_BRANCH + if(CheckLocalFlags(FLAG_BIT_PARTICLE_UIEFFECT_ON) & !CheckLocalFlags1(FLAG_BIT_PARTICLE_1_UIEFFECT_BASEMAP_MODE)) + { + if (CheckLocalFlags1(FLAG_BIT_PARTICLE_1_UIEFFECT_SPRITE_MODE)) + { + float2 originUV = meshTexcoord0.xy;//精灵主贴图不调整。 + particleUVs.mainTexUV = originUV*_UI_MainTex_ST.xy+_UI_MainTex_ST.zw; + } + else + { + particleUVs.mainTexUV = baseMapUV*_UI_MainTex_ST.xy+_UI_MainTex_ST.zw; + } + } + else + { + baseMapUV.x += GetCustomData(_W9ParticleCustomDataFlag0,FLAGBIT_POS_0_CUSTOMDATA_MAINTEX_OFFSET_X,0,VaryingsP_Custom1,VaryingsP_Custom2); + baseMapUV.y += GetCustomData(_W9ParticleCustomDataFlag0,FLAGBIT_POS_0_CUSTOMDATA_MAINTEX_OFFSET_Y,0,VaryingsP_Custom1,VaryingsP_Custom2); + particleUVs.mainTexUV = TRANSFORM_TEX(baseMapUV, _BaseMap); //主帖图UV重复和偏移 + } + particleUVs.mainTexUV = UVOffsetAnimaiton(particleUVs.mainTexUV,_BaseMapMaskMapOffset.xy); + + #endif + + + #if defined(_MASKMAP_ON) + + float2 MaskMapuv = GetUVByUVMode(_UVModeFlag0,FLAG_BIT_UVMODE_POS_0_MASKMAP,baseUVs); + + UNITY_BRANCH + if(CheckLocalFlags(FLAG_BIT_PARTILCE_MASKMAPROTATIONANIMATION_ON)) + { + _MaskMapUVRotation += time * _MaskMapRotationSpeed; + } + + MaskMapuv= Rotate_Radians_float(MaskMapuv, half2(0.5, 0.5), _MaskMapUVRotation); + + MaskMapuv = TRANSFORM_TEX(MaskMapuv, _MaskMap); + + MaskMapuv.x += GetCustomData(_W9ParticleCustomDataFlag0,FLAGBIT_POS_0_CUSTOMDATA_MASK_OFFSET_X,0,VaryingsP_Custom1,VaryingsP_Custom2); + MaskMapuv.y += GetCustomData(_W9ParticleCustomDataFlag0,FLAGBIT_POS_0_CUSTOMDATA_MASK_OFFSET_Y,0,VaryingsP_Custom1,VaryingsP_Custom2); + + MaskMapuv = UVOffsetAnimaiton(MaskMapuv,_MaskMapOffsetAnition.xy); + particleUVs.maskMapUV = MaskMapuv; + + UNITY_BRANCH + if(CheckLocalFlags1(FLAG_BIT_PARTICLE_1_MASK_MAP2)) + { + float2 maskMap2UV = GetUVByUVMode(_UVModeFlag0,FLAG_BIT_UVMODE_POS_0_MASKMAP_2,baseUVs); + maskMap2UV = maskMap2UV * _MaskMap2_ST.xy + _MaskMap2_ST.zw; + + maskMap2UV = UVOffsetAnimaiton(maskMap2UV,_MaskMapOffsetAnition.zw); + particleUVs.maskMap2UV = maskMap2UV; + } + + UNITY_BRANCH + if(CheckLocalFlags1(FLAG_BIT_PARTICLE_1_MASK_MAP3)) + { + float2 maskMap3UV = GetUVByUVMode(_UVModeFlag0,FLAG_BIT_UVMODE_POS_0_MASKMAP_3,baseUVs); + maskMap3UV = maskMap3UV* _MaskMap3_ST.xy + _MaskMap3_ST.zw; + + maskMap3UV = UVOffsetAnimaiton(maskMap3UV,_MaskMap3OffsetAnition.xy); + particleUVs.maskMap3UV = maskMap3UV; + } + + #endif + + #if defined(_EMISSION) + float2 emissionUV = GetUVByUVMode(_UVModeFlag0,FLAG_BIT_UVMODE_POS_0_EMISSION_MAP,baseUVs); + particleUVs.emissionUV = ParticleUVCommonProcess(emissionUV,_EmissionMap_ST,_EmissionMapUVOffset.xy,_EmissionMapUVRotation); + #endif + + #if defined(_DISSOLVE) + // if(CheckLocalFlags1(FLAG_BIT_PARTICLE_CUSTOMDATA1X_DISSOLVETEXOFFSETX)) + // { + // _DissolveMap_ST.z += VaryingsP_Custom1.x; + // } + // if(CheckLocalFlags1(FLAG_BIT_PARTICLE_CUSTOMDATA1Y_DISSOLVETEXOFFSETY)) + // { + // _DissolveMap_ST.w += VaryingsP_Custom1.y; + // } + _DissolveMap_ST.z += GetCustomData(_W9ParticleCustomDataFlag1,FLAGBIT_POS_1_CUSTOMDATA_DISSOLVE_OFFSET_X,0,VaryingsP_Custom1,VaryingsP_Custom2); + _DissolveMap_ST.w += GetCustomData(_W9ParticleCustomDataFlag1,FLAGBIT_POS_1_CUSTOMDATA_DISSOLVE_OFFSET_Y,0,VaryingsP_Custom1,VaryingsP_Custom2); + + float2 dissolveUV = GetUVByUVMode(_UVModeFlag0,FLAG_BIT_UVMODE_POS_0_DISSOLVE_MAP,baseUVs); + particleUVs.dissolve_uv = ParticleUVCommonProcess(dissolveUV,_DissolveMap_ST,_DissolveOffsetRotateDistort.xy,_DissolveOffsetRotateDistort.z); + if(CheckLocalFlags(FLAG_BIT_PARTICLE_DISSOLVE_MASK)) + { + float2 dissolveMaskUV = GetUVByUVMode(_UVModeFlag0,FLAG_BIT_UVMODE_POS_0_DISSOLVE_MASK_MAP,baseUVs); + particleUVs.dissolve_mask_uv = ParticleUVCommonProcess(dissolveMaskUV,_DissolveMaskMap_ST,float2(0,0),_DissolveOffsetRotateDistort.z); + } + if(CheckLocalFlags1(FLAG_BIT_PARTICLE_1_DISSOVLE_VORONOI)) + { + float2 halfUV = dissolveUV; + // halfUV.x = abs(halfUV.x-0.5);//20240729不明白当时为什么要做这个ABS处理。先注销掉看看。 + _DissolveVoronoi_Vec4.x += GetCustomData(_W9ParticleCustomDataFlag2,FLAGBIT_POS_2_CUSTOMDATA_DISSOLVE_NOISE1_OFFSET_X,0,VaryingsP_Custom1,VaryingsP_Custom2); + _DissolveVoronoi_Vec4.y += GetCustomData(_W9ParticleCustomDataFlag2,FLAGBIT_POS_2_CUSTOMDATA_DISSOLVE_NOISE1_OFFSET_Y,0,VaryingsP_Custom1,VaryingsP_Custom2); + _DissolveVoronoi_Vec4.z += GetCustomData(_W9ParticleCustomDataFlag2,FLAGBIT_POS_2_CUSTOMDATA_DISSOLVE_NOISE2_OFFSET_X,0,VaryingsP_Custom1,VaryingsP_Custom2); + _DissolveVoronoi_Vec4.w += GetCustomData(_W9ParticleCustomDataFlag2,FLAGBIT_POS_2_CUSTOMDATA_DISSOLVE_NOISE2_OFFSET_Y,0,VaryingsP_Custom1,VaryingsP_Custom2); + particleUVs.dissolve_noise1_UV = halfUV * _DissolveVoronoi_Vec.xy + _DissolveVoronoi_Vec4.xy + time*_DissolveVoronoi_Vec3.xy; + particleUVs.dissolve_noise2_UV = halfUV * _DissolveVoronoi_Vec.zw + _DissolveVoronoi_Vec4.zw + time*_DissolveVoronoi_Vec3.zw; + } + #endif + + #ifdef _COLORMAPBLEND + float2 colorBlendUV = GetUVByUVMode(_UVModeFlag0,FLAG_BIT_UVMODE_POS_0_COLOR_BLEND_MAP,baseUVs); + particleUVs.colorBlendUV = ParticleUVCommonProcess(colorBlendUV,_ColorBlendMap_ST,_ColorBlendMapOffset.xy); + #endif + + half cum_noise = 0; + + //TODO + + #if defined(_NOISEMAP) + + //和ParticleUVCommonProcess相比,此处没有UV动画,NoiseMap的UV流动在最终的SampleNoise中进行 + float2 noiseMapUV = GetUVByUVMode(_UVModeFlag0,FLAG_BIT_UVMODE_POS_0_NOISE_MAP,baseUVs); + particleUVs.noiseMapUV = ParticleUVCommonProcess(noiseMapUV,_NoiseMap_ST,half2(0,0),_NoiseMapUVRotation); + + UNITY_BRANCH + if(CheckLocalFlags1(FLAG_BIT_PARTICLE_1_NOISE_MASKMAP)) + { + float2 noiseMaskMapUV = GetUVByUVMode(_UVModeFlag0,FLAG_BIT_UVMODE_POS_0_NOISE_MASK_MAP,baseUVs); + particleUVs.noiseMaskMapUV = ParticleUVCommonProcess(noiseMaskMapUV,_NoiseMaskMap_ST,half2(0,0),0); + + } + #endif + } + + Texture2D _VertexOffset_Map; + Texture2D _VertexOffset_MaskMap; + + // half3 _VertexOffset_Vec; + // half3 _VertexOffset_CustomDir; + // half4 _VertexOffset_Map_ST; + + half3 VetexOffset(half3 positionOS,half2 originUV,half2 originMaskUV,half3 normalOS) + { + half2 uv = TRANSFORM_TEX(originUV,_VertexOffset_Map); + uv = UVOffsetAnimaiton(uv,_VertexOffset_Vec.xy); + // half vertexOffsetSample = tex2Dlod(_VertexOffset_Map,half4(uv,0,0)); + half vertexOffsetSample = SampleTexture2DWithWrapFlags(_VertexOffset_Map,uv,FLAG_BIT_WRAPMODE_VERTEXOFFSET_MASKMAP,true,0); + // UNITY_BRANCH + // if(CheckLocalWrapFlags(FLAG_BIT_WRAPMODE_VERTEXOFFSETMAP)) + // { + // vertexOffsetSample = SAMPLE_TEXTURE2D_LOD(_VertexOffset_Map,sampler_linear_clamp,uv,0); + // } + // else + // { + // vertexOffsetSample = SAMPLE_TEXTURE2D_LOD(_VertexOffset_Map,sampler_linear_repeat,uv,0); + // } + + if (!CheckLocalFlags1(FLAG_BIT_PARTICLE_1_VERTEXOFFSET_START_FROM_ZERO)) + { + vertexOffsetSample = vertexOffsetSample*2-1; + } + + half3 finalPos; + half vertexOffsetMask = 1; + if (CheckLocalFlags1(FLAG_BIT_PARTICLE_1_VERTEXOFFSET_MASKMAP)) + { + half2 maskUV = TRANSFORM_TEX(originMaskUV,_VertexOffset_MaskMap); + maskUV = UVOffsetAnimaiton(maskUV,_VertexOffset_MaskMap_Vec.xy); + half vertexOffsetMaskSample = SampleTexture2DWithWrapFlags(_VertexOffset_MaskMap,maskUV,FLAG_BIT_WRAPMODE_VERTEXOFFSET_MASKMAP,true,0); + vertexOffsetMask = lerp(1,vertexOffsetMaskSample,_VertexOffset_MaskMap_Vec.z); + } + + UNITY_BRANCH + if(CheckLocalFlags(FLAG_BIT_PARTICLE_VERTEX_OFFSET_NORMAL_DIR)) + { + finalPos = positionOS + normalOS*_VertexOffset_Vec.z*vertexOffsetSample*vertexOffsetMask; + } + else + { + finalPos = positionOS + _VertexOffset_CustomDir*_VertexOffset_Vec.z*vertexOffsetSample*vertexOffsetMask; + } + + + return finalPos; + + } + + //向UV横向两边的色散。 + half4 DistortionChoraticaberrat(Texture2D baseTexture,half2 originUV, half2 uvAfterNoise,half ChoraticaberratIntensity,uint bits) + { + half2 delta = half2(originUV.x *2-1,0); + + if(CheckLocalFlags(FLAG_BIT_PARTICLE_NOISE_CHORATICABERRAT_WITH_NOISE)) + { + half2 NoiseIntensity = uvAfterNoise - originUV; + half noiseXIntensity = abs(NoiseIntensity.x); + delta *= ChoraticaberratIntensity*noiseXIntensity; + } + else + { + delta *= ChoraticaberratIntensity; + } + + half2 ra = SampleTexture2DWithWrapFlags(baseTexture,uvAfterNoise,bits).xw; + ra.r *= ra.y; + half2 ga = SampleTexture2DWithWrapFlags(baseTexture,uvAfterNoise - delta,bits).yw; + ga.r *= ga.y; + half2 ba = SampleTexture2DWithWrapFlags(baseTexture,uvAfterNoise - delta*2,bits).zw; + ba.r *= ba.y; + return half4(ra.r,ga.r,ba.r,clamp(ra.y*0.5+ga.y*0.5+ba.y*0.5,0,1)); + } + + bool needSceneDepth() + { + #if defined(_DEPTH_DECAL) || defined(_SOFTPARTICLES_ON) + return true; + #endif + + if(CheckLocalFlags1(FLAG_BIT_PARTICLE_1_DEPTH_OUTLINE)) + { + return true; + } + + return false; + } + + bool needEyeDepth() + { + #if defined(_SOFTPARTICLES_ON) + return true; + #endif + + if(CheckLocalFlags1(FLAG_BIT_PARTICLE_1_DEPTH_OUTLINE)||CheckLocalFlags(FLAG_BIT_PARTICLE_DISTANCEFADE_ON)) + { + return true; + } + + return false; + } + + bool ignoreFresnel() + { + #if defined(PARTICLE_BACKFACE_PASS) + return true; + #endif + return false; + } + + Texture2D _ParallaxMapping_Map; + + half2 ParallaxMappingSimple(half2 texCoords, half3 viewDir) + { + float height = SampleTexture2DWithWrapFlags(_ParallaxMapping_Map,texCoords,FLAG_BIT_WRAPMODE_PARALLAXMAPPINGMAP).r; + height *= _ParallaxMapping_Intensity; + viewDir = normalize(viewDir); + viewDir.xy /= (viewDir.z); + texCoords -= viewDir.xy * height; + return texCoords; + } + + half2 ParallaxMappingPeelDepth(half2 texCoords, half3 viewDir) + { + const float minLayers = 2; + const float maxLayers = 32; + float numLayers = lerp(maxLayers, minLayers, abs(dot(half3(0.0, 0.0, 1.0), viewDir)));//视线越垂直于表面,层数越少,反之越多。 + float layerDepth = 1/numLayers; + float currentLayerDepth = 0; + // viewDir.xy/=viewDir.z; + half2 p = viewDir.xy*_ParallaxMapping_Intensity; + half2 deltaTexcoord = p/numLayers; + + half2 currentTexcoords = texCoords; + float currentMapDepthValue = SampleTexture2DWithWrapFlags(_ParallaxMapping_Map,currentTexcoords,FLAG_BIT_WRAPMODE_PARALLAXMAPPINGMAP).r; + + [loop] + while (currentLayerDepth < currentMapDepthValue ) + { + currentTexcoords -= deltaTexcoord; + currentMapDepthValue = SampleTexture2DWithWrapFlags(_ParallaxMapping_Map,currentTexcoords,FLAG_BIT_WRAPMODE_PARALLAXMAPPINGMAP).r; + currentLayerDepth += layerDepth; + } + + return currentTexcoords; + + } + half2 ParallaxOcclusionMapping(half2 texCoords, half3 viewDir) + { + // number of depth layers + // const float minLayers = 10; + // const float maxLayers = 10; + const float minLayers = _ParallaxMapping_Vec.x; + const float maxLayers = _ParallaxMapping_Vec.y; + float numLayers = lerp(maxLayers, minLayers, abs(dot(half3(0.0, 0.0, 1.0), viewDir))); + // calculate the size of each layer + float layerDepth = 1.0 / numLayers; + // depth of current layer + float currentLayerDepth = 0.0; + // the amount to shift the texture coordinates per layer (from vector P) + half2 P = viewDir.xy / viewDir.z * _ParallaxMapping_Intensity; + half2 deltaTexCoords = P / numLayers; + + // get initial values + half2 currentTexCoords = texCoords; + float currentDepthMapValue = SampleTexture2DWithWrapFlags(_ParallaxMapping_Map, currentTexCoords,FLAG_BIT_WRAPMODE_PARALLAXMAPPINGMAP).r; + currentLayerDepth = clamp(currentLayerDepth,0,1); + + int i = 0; + [loop] + while(currentLayerDepth < currentDepthMapValue && i