提交毛玻璃测试

This commit is contained in:
Bob.Song
2026-02-03 17:47:50 +08:00
parent da95507d5a
commit 10c6fabd73
16 changed files with 923 additions and 2 deletions

View File

@@ -70,6 +70,7 @@ MonoBehaviour:
- sc.terrain.painter.runtime
- StompyRobot.SRDebugger
- StompyRobot.SRF
- Unified.Universal.Blur
- Unity.InputSystem.RebindingUI
- VInspector
- WaveHarmonic.Crest

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

View File

@@ -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:

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 0d75f8392a4f4ec2b66f2577ea80a356
timeCreated: 1770108032

View File

@@ -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
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 049554a5919b4543b166b26c451603ec
timeCreated: 1770108188

View File

@@ -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}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: bedf4887d50d409fb132fee064bc8b37
timeCreated: 1770108259

View File

@@ -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<UIBlurDualKawaseFeature>();
// blur?.RefreshOnce();
}
void LateUpdate()
{
if (!raw) return;
raw.texture = Shader.GetGlobalTexture("_UIBlurTexture");
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: d6c5972785cf41e997b1bd6164a04e00
timeCreated: 1770108402

View File

@@ -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<UniversalResourceData>();
var cameraData = frameData.Get<UniversalCameraData>();
// 避免从 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);
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 1d992ccf80d34101a9e62b066d753dc3
timeCreated: 1770108262

View File

@@ -61,7 +61,7 @@ namespace NBF
// await Task.Delay(100);
CommonTopPanel.Show();
// SettingPanel.Show();
LoginPanel.Show();
// LoginPanel.Show();
// PreviewPanel.Show();
}
}

View File

@@ -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}

View File

@@ -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",

View File

@@ -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,