diff --git a/Assets/Plugins/Easy Save 3/Resources/ES3/ES3Defaults.asset b/Assets/Plugins/Easy Save 3/Resources/ES3/ES3Defaults.asset index 624873c74..c02b702c0 100644 --- a/Assets/Plugins/Easy Save 3/Resources/ES3/ES3Defaults.asset +++ b/Assets/Plugins/Easy Save 3/Resources/ES3/ES3Defaults.asset @@ -70,6 +70,7 @@ MonoBehaviour: - sc.terrain.painter.runtime - StompyRobot.SRDebugger - StompyRobot.SRF + - Unified.Universal.Blur - Unity.InputSystem.RebindingUI - VInspector - WaveHarmonic.Crest diff --git a/Assets/ResRaw/Fgui/Common/Common_atlas_dheveg 1.png b/Assets/ResRaw/Fgui/Common/Common_atlas_dheveg 1.png new file mode 100644 index 000000000..731e45241 Binary files /dev/null and b/Assets/ResRaw/Fgui/Common/Common_atlas_dheveg 1.png differ diff --git a/Assets/ResRaw/Fgui/Common/Common_atlas_dheveg 1.png.meta b/Assets/ResRaw/Fgui/Common/Common_atlas_dheveg 1.png.meta new file mode 100644 index 000000000..086a1609c --- /dev/null +++ b/Assets/ResRaw/Fgui/Common/Common_atlas_dheveg 1.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: ce1d66b01b6bc94428f78630abd1b832 +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: 1 + 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: 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 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ResRaw/Shader.meta b/Assets/ResRaw/Shader.meta new file mode 100644 index 000000000..68322d1c5 --- /dev/null +++ b/Assets/ResRaw/Shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0d75f8392a4f4ec2b66f2577ea80a356 +timeCreated: 1770108032 \ No newline at end of file diff --git a/Assets/ResRaw/Shader/DualKawaseBlur.shader b/Assets/ResRaw/Shader/DualKawaseBlur.shader new file mode 100644 index 000000000..d8380dfae --- /dev/null +++ b/Assets/ResRaw/Shader/DualKawaseBlur.shader @@ -0,0 +1,77 @@ +Shader "Hidden/URP/DualKawaseBlur" +{ + SubShader + { + Tags { "RenderPipeline"="UniversalPipeline" } + ZWrite Off ZTest Always Cull Off + + HLSLINCLUDE + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + + // RenderGraph AddBlitPass 默认绑定的属性: + TEXTURE2D_X(_BlitTexture); + SAMPLER(sampler_LinearClamp); + float4 _BlitTexture_TexelSize; + float4 _BlitScaleBias; // xy scale, zw bias + float _Offset; + + struct Attributes { float4 positionOS:POSITION; float2 uv:TEXCOORD0; }; + struct Varyings { float4 positionHCS:SV_POSITION; float2 uv:TEXCOORD0; }; + + Varyings vert(Attributes v) + { + Varyings o; + o.positionHCS = TransformObjectToHClip(v.positionOS.xyz); + o.uv = v.uv; + return o; + } + + float2 BlitUV(float2 uv) { return uv * _BlitScaleBias.xy + _BlitScaleBias.zw; } + + half4 DownsampleFrag(Varyings i) : SV_Target + { + float2 uv = BlitUV(i.uv); + float2 d = _BlitTexture_TexelSize.xy * _Offset; + + half4 c = 0; + c += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv) * 0.5; + c += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv + float2( d.x, d.y)) * 0.125; + c += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv + float2(-d.x, d.y)) * 0.125; + c += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv + float2( d.x, -d.y)) * 0.125; + c += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv + float2(-d.x, -d.y)) * 0.125; + return c; + } + + half4 UpsampleFrag(Varyings i) : SV_Target + { + float2 uv = BlitUV(i.uv); + float2 d = _BlitTexture_TexelSize.xy * _Offset; + + half4 c = 0; + c += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv + float2( d.x, d.y)); + c += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv + float2(-d.x, d.y)); + c += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv + float2( d.x, -d.y)); + c += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv + float2(-d.x, -d.y)); + return c * 0.25; + } + ENDHLSL + + Pass + { + Name "Downsample" + HLSLPROGRAM + #pragma vertex vert + #pragma fragment DownsampleFrag + ENDHLSLPROGRAM + } + + Pass + { + Name "Upsample" + HLSLPROGRAM + #pragma vertex vert + #pragma fragment UpsampleFrag + ENDHLSLPROGRAM + } + } +} diff --git a/Assets/ResRaw/Shader/DualKawaseBlur.shader.meta b/Assets/ResRaw/Shader/DualKawaseBlur.shader.meta new file mode 100644 index 000000000..b31de7e3a --- /dev/null +++ b/Assets/ResRaw/Shader/DualKawaseBlur.shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 049554a5919b4543b166b26c451603ec +timeCreated: 1770108188 \ No newline at end of file diff --git a/Assets/Scenes/StartUp.unity b/Assets/Scenes/StartUp.unity index 460a627e9..9f2577832 100644 --- a/Assets/Scenes/StartUp.unity +++ b/Assets/Scenes/StartUp.unity @@ -909,6 +909,122 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &841111717 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 841111722} + - component: {fileID: 841111721} + - component: {fileID: 841111720} + - component: {fileID: 841111719} + - component: {fileID: 841111718} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &841111718 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 841111717} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b189222c6db8433db1239d314f92cf9f, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::DontDestroy +--- !u!114 &841111719 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 841111717} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.GraphicRaycaster + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4513599 +--- !u!114 &841111720 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 841111717} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.CanvasScaler + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &841111721 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 841111717} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &841111722 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 841111717} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1627092178} + - {fileID: 1972043149} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} --- !u!1 &884989002 GameObject: m_ObjectHideFlags: 0 @@ -1128,6 +1244,229 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1208969643 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1208969644} + - component: {fileID: 1208969646} + - component: {fileID: 1208969645} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1208969644 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1208969643} + 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: 1972043149} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1208969645 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1208969643} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Button + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4281479730 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_characterHorizontalScale: 1 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1208969646 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1208969643} + m_CullTransparentMesh: 1 +--- !u!1 &1627092174 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1627092178} + - component: {fileID: 1627092177} + - component: {fileID: 1627092176} + - component: {fileID: 1627092175} + m_Layer: 5 + m_Name: RawImage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1627092175 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1627092174} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d6c5972785cf41e997b1bd6164a04e00, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::NBF.Blur.TestBlur + raw: {fileID: 1627092176} +--- !u!114 &1627092176 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1627092174} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.RawImage + m_Material: {fileID: 2100000, guid: f6d46f1e916b3486c90a448a441fac6a, type: 2} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1627092177 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1627092174} + m_CullTransparentMesh: 1 +--- !u!224 &1627092178 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1627092174} + 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: 841111722} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1920, y: 1080} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &1729919008 GameObject: m_ObjectHideFlags: 0 @@ -1347,6 +1686,139 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1879421339} m_CullTransparentMesh: 1 +--- !u!1 &1972043148 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1972043149} + - component: {fileID: 1972043152} + - component: {fileID: 1972043151} + - component: {fileID: 1972043150} + m_Layer: 5 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1972043149 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1972043148} + 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: 1208969644} + m_Father: {fileID: 841111722} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: -160.63} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1972043150 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1972043148} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Button + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1972043151} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1627092175} + m_TargetAssemblyTypeName: NBF.Blur.TestBlur, Assembly-CSharp + m_MethodName: Test + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1972043151 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1972043148} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1972043152 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1972043148} + m_CullTransparentMesh: 1 --- !u!1 &1990881977 GameObject: m_ObjectHideFlags: 3 @@ -1858,3 +2330,4 @@ SceneRoots: - {fileID: 1199298675} - {fileID: 646846706} - {fileID: 159075240} + - {fileID: 841111722} diff --git a/Assets/Scripts/Common/Blur.meta b/Assets/Scripts/Common/Blur.meta new file mode 100644 index 000000000..77daa8f18 --- /dev/null +++ b/Assets/Scripts/Common/Blur.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: bedf4887d50d409fb132fee064bc8b37 +timeCreated: 1770108259 \ No newline at end of file diff --git a/Assets/Scripts/Common/Blur/TestBlur.cs b/Assets/Scripts/Common/Blur/TestBlur.cs new file mode 100644 index 000000000..d20fdd9ab --- /dev/null +++ b/Assets/Scripts/Common/Blur/TestBlur.cs @@ -0,0 +1,25 @@ +using UnityEngine; +using UnityEngine.UI; + +namespace NBF.Blur +{ + public class TestBlur : MonoBehaviour + { + public RawImage raw; + + public void Test() + { + Shader.SetGlobalInt("_UIBlurRefresh", 1); + + // var blur = URPRendererFeatureUtil.GetRendererFeature(); + // blur?.RefreshOnce(); + } + + + void LateUpdate() + { + if (!raw) return; + raw.texture = Shader.GetGlobalTexture("_UIBlurTexture"); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Common/Blur/TestBlur.cs.meta b/Assets/Scripts/Common/Blur/TestBlur.cs.meta new file mode 100644 index 000000000..0e33d7446 --- /dev/null +++ b/Assets/Scripts/Common/Blur/TestBlur.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d6c5972785cf41e997b1bd6164a04e00 +timeCreated: 1770108402 \ No newline at end of file diff --git a/Assets/Scripts/Common/Blur/UIBlurDualKawaseFeature.cs b/Assets/Scripts/Common/Blur/UIBlurDualKawaseFeature.cs new file mode 100644 index 000000000..e78e6714e --- /dev/null +++ b/Assets/Scripts/Common/Blur/UIBlurDualKawaseFeature.cs @@ -0,0 +1,179 @@ +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; +using UnityEngine.Rendering.RenderGraphModule; +using UnityEngine.Rendering.RenderGraphModule.Util; + +public class UIBlurDualKawaseFeature : ScriptableRendererFeature +{ + [System.Serializable] + public class Settings + { + public RenderPassEvent passEvent = RenderPassEvent.AfterRenderingTransparents; + + [Range(0.25f, 1f)] public float downscale = 0.5f; // 0.5(中高端) / 0.25(低端更稳) + [Range(1, 6)] public int blurPasses = 4; // 3~4 移动端常用 + [Range(0.5f, 4f)] public float offset = 1.0f; // 糊的“扩散感” + + public bool updateEveryFrame = false; // 推荐 false,只在需要时刷新 + public string refreshFlagName = "_UIBlurRefresh"; // UI 触发用 + public string globalTextureName = "_UIBlurTexture"; + + public Shader blurShader; // Hidden/URP/DualKawaseBlur + } + + public Settings settings = new Settings(); + + class Pass : ScriptableRenderPass + { + readonly Settings s; + readonly Material mat; + + // 持久 RT:让 UI 能跨帧拿到(需要 ImportTexture):contentReference[oaicite:2]{index=2} + RTHandle persistentOutput; + + static readonly int SourceTexId = Shader.PropertyToID("_SourceTex"); + static readonly int OffsetId = Shader.PropertyToID("_Offset"); + + public Pass(Settings settings, Material material) + { + s = settings; + mat = material; + } + + public RTHandle OutputRT => persistentOutput; + + public void EnsureOutput(ref RenderTextureDescriptor desc, int w, int h) + { + desc.width = w; + desc.height = h; + desc.depthBufferBits = 0; + desc.msaaSamples = 1; + desc.useMipMap = false; + desc.autoGenerateMips = false; + + RenderingUtils.ReAllocateIfNeeded( + ref persistentOutput, + desc, + FilterMode.Bilinear, + TextureWrapMode.Clamp, + name: s.globalTextureName + ); + } + + public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer frameData) + { + // 资源/相机数据(官方示例也是这么取 activeColorTexture):contentReference[oaicite:3]{index=3} + var resourceData = frameData.Get(); + var cameraData = frameData.Get(); + + // 避免从 backbuffer blit(官方示例也这么做):contentReference[oaicite:4]{index=4} + if (resourceData.isActiveTargetBackBuffer) + return; + + // 刷新策略:不每帧更新时,只有收到 UI 请求才做一轮 + if (!s.updateEveryFrame) + { + if (Shader.GetGlobalInt(s.refreshFlagName) == 0) + return; + + Shader.SetGlobalInt(s.refreshFlagName, 0); + } + + // 基础描述符(跟相机一致) + var desc = cameraData.cameraTargetDescriptor; + desc.depthBufferBits = 0; + desc.msaaSamples = 1; + + int baseW = Mathf.Max(16, Mathf.RoundToInt(desc.width * s.downscale)); + int baseH = Mathf.Max(16, Mathf.RoundToInt(desc.height * s.downscale)); + + EnsureOutput(ref desc, baseW, baseH); + + // 把持久 RTHandle 导入 RenderGraph(跨帧可用):contentReference[oaicite:5]{index=5} + TextureHandle outTex = renderGraph.ImportTexture(persistentOutput); + + // 生成金字塔:0层(base), 1层(/2), 2层(/4)... + int n = Mathf.Clamp(s.blurPasses, 1, 8); + TextureHandle[] pyr = new TextureHandle[n]; + + for (int i = 0; i < n; i++) + { + int w = Mathf.Max(8, baseW >> i); + int h = Mathf.Max(8, baseH >> i); + + var d = desc; + d.width = w; + d.height = h; + pyr[i] = UniversalRenderer.CreateRenderGraphTexture(renderGraph, d, $"_UIBlurPyr{i}", false); + } + + mat.SetFloat(OffsetId, s.offset); + + // source:相机颜色 + TextureHandle src = resourceData.activeColorTexture; + + // Downsample chain (pass 0) + { + var p = new RenderGraphUtils.BlitMaterialParameters(src, pyr[0], mat, 0); + renderGraph.AddBlitPass(p, "UIBlur DualKawase Down 0"); + } + for (int i = 1; i < n; i++) + { + var p = new RenderGraphUtils.BlitMaterialParameters(pyr[i - 1], pyr[i], mat, 0); + renderGraph.AddBlitPass(p, $"UIBlur DualKawase Down {i}"); + } + + // Upsample chain (pass 1) + for (int i = n - 1; i > 0; i--) + { + var p = new RenderGraphUtils.BlitMaterialParameters(pyr[i], pyr[i - 1], mat, 1); + renderGraph.AddBlitPass(p, $"UIBlur DualKawase Up {i}"); + } + + // 最终写到持久输出 RT + { + var p = new RenderGraphUtils.BlitMaterialParameters(pyr[0], outTex, mat, 1); + renderGraph.AddBlitPass(p, "UIBlur DualKawase Final"); + } + } + + public void Cleanup() + { + persistentOutput?.Release(); + persistentOutput = null; + } + } + + Material _mat; + Pass _pass; + + public override void Create() + { + if (settings.blurShader == null) + settings.blurShader = Shader.Find("Hidden/URP/DualKawaseBlur"); + + if (settings.blurShader != null) + _mat = CoreUtils.CreateEngineMaterial(settings.blurShader); + + _pass = new Pass(settings, _mat) { renderPassEvent = settings.passEvent }; + } + + public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) + { + if (_mat == null) return; + if (renderingData.cameraData.cameraType != CameraType.Game) return; + + // 这里提前把全局纹理指向持久 RT(即使本帧不刷新,也能用旧结果) + if (_pass.OutputRT != null) + Shader.SetGlobalTexture(settings.globalTextureName, _pass.OutputRT); + + renderer.EnqueuePass(_pass); + } + + protected override void Dispose(bool disposing) + { + _pass?.Cleanup(); + CoreUtils.Destroy(_mat); + } +} diff --git a/Assets/Scripts/Common/Blur/UIBlurDualKawaseFeature.cs.meta b/Assets/Scripts/Common/Blur/UIBlurDualKawaseFeature.cs.meta new file mode 100644 index 000000000..180d819b6 --- /dev/null +++ b/Assets/Scripts/Common/Blur/UIBlurDualKawaseFeature.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1d992ccf80d34101a9e62b066d753dc3 +timeCreated: 1770108262 \ No newline at end of file diff --git a/Assets/Scripts/Init.cs b/Assets/Scripts/Init.cs index c432bfea3..a454465b3 100644 --- a/Assets/Scripts/Init.cs +++ b/Assets/Scripts/Init.cs @@ -61,7 +61,7 @@ namespace NBF // await Task.Delay(100); CommonTopPanel.Show(); // SettingPanel.Show(); - LoginPanel.Show(); + // LoginPanel.Show(); // PreviewPanel.Show(); } } diff --git a/Assets/Settings/PC_Renderer.asset b/Assets/Settings/PC_Renderer.asset index 9a2541f6d..b614ac20b 100644 --- a/Assets/Settings/PC_Renderer.asset +++ b/Assets/Settings/PC_Renderer.asset @@ -1,5 +1,28 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!114 &-4516549268562882661 +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: 980a78cc4df543b29a2663be288cd2f5, type: 3} + m_Name: UniversalBlurFeature + m_EditorClassIdentifier: Unified.Universal.Blur::Unified.UniversalBlur.Runtime.UniversalBlurFeature + m_Active: 1 + iterations: 4 + downsample: 2 + enableMipMaps: 1 + scale: 1 + offset: 1 + scaleBlurWith: 1 + scaleReferenceSize: 1080 + blurType: 0 + injectionPoint: 600 + shader: {fileID: 4800000, guid: bb11bdc2e8aaf4c80b5315f3778d7ad4, type: 3} --- !u!114 &11400000 MonoBehaviour: m_ObjectHideFlags: 0 @@ -27,7 +50,8 @@ MonoBehaviour: m_RendererFeatures: - {fileID: 7833122117494664109} - {fileID: 8739427562667641280} - m_RendererFeatureMap: ad6b866f10d7b46cc009109510af4879 + - {fileID: -4516549268562882661} + m_RendererFeatureMap: ad6b866f10d7b46cc009109510af48799b4fc2b45efe51c1 m_UseNativeRenderPass: 1 xrSystemData: {fileID: 0} postProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2} diff --git a/Packages/manifest.json b/Packages/manifest.json index c8428da0c..501097770 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -1,6 +1,7 @@ { "dependencies": { "com.fantasy.unity": "2025.2.1422", + "com.unify.unified-universal-blur": "https://github.com/lukakldiashvili/Unified-Universal-Blur.git", "com.unity.2d.sprite": "1.0.0", "com.unity.ai.navigation": "2.0.9", "com.unity.burst": "1.8.25", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 332ecf5bf..02c4f24ba 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -216,6 +216,15 @@ "com.unity.shadergraph": "14.0.7" } }, + "com.unify.unified-universal-blur": { + "version": "https://github.com/lukakldiashvili/Unified-Universal-Blur.git", + "depth": 0, + "source": "git", + "dependencies": { + "com.unity.render-pipelines.universal": "14.0.11" + }, + "hash": "31d65c1cf2133476d5d80060305b2335f7a784ab" + }, "com.unity.2d.sprite": { "version": "1.0.0", "depth": 0,