From ea4624fbef6e9d8f58da12be363807eb19a37b53 Mon Sep 17 00:00:00 2001 From: chai Date: Fri, 17 Sep 2021 09:33:17 +0800 Subject: +glitch --- .../Materials/Unit/ImageEffect/unit_img_glitch.mat | 77 ++++++++++++++++++++++ .../Unit/ImageEffect/unit_img_glitch.mat.meta | 8 +++ Assets/Bundle/Scenes/Demo/AnimationEditScene.unity | 4 +- .../Unit/ImageEffect/unit_img_glitch.shader | 26 ++++---- .../Unit/ImageEffect/unit_img_motionBlur.shader | 4 +- .../Unit/PC/Erika/AnimationData/Air_Dash.asset | 36 ++++++++-- .../Scripts/Managers/ResourceManager_Materials.cs | 2 + Assets/Scripts/Unit/Components/UnitImageEffect.cs | 41 ++++++++++-- Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs | 3 +- Assets/Scripts/Unit/UnitDetail.cs | 1 - Assets/Scripts/Utils/ListPool.cs | 2 +- .../MToon/MToon/Resources/Shaders/MToon.shader | 2 +- 12 files changed, 179 insertions(+), 27 deletions(-) create mode 100644 Assets/Bundle/Materials/Unit/ImageEffect/unit_img_glitch.mat create mode 100644 Assets/Bundle/Materials/Unit/ImageEffect/unit_img_glitch.mat.meta (limited to 'Assets') diff --git a/Assets/Bundle/Materials/Unit/ImageEffect/unit_img_glitch.mat b/Assets/Bundle/Materials/Unit/ImageEffect/unit_img_glitch.mat new file mode 100644 index 00000000..e999362f --- /dev/null +++ b/Assets/Bundle/Materials/Unit/ImageEffect/unit_img_glitch.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: unit_img_glitch + m_Shader: {fileID: 4800000, guid: f1567ae3bc1c0964cb12b2cf79240e61, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _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: 8600000, guid: 183fd8602e9304d46ae2ce82856d08c7, type: 2} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Bundle/Materials/Unit/ImageEffect/unit_img_glitch.mat.meta b/Assets/Bundle/Materials/Unit/ImageEffect/unit_img_glitch.mat.meta new file mode 100644 index 00000000..f675e8e4 --- /dev/null +++ b/Assets/Bundle/Materials/Unit/ImageEffect/unit_img_glitch.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e25e334493e9fd34585cd75b58ad2cc4 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Bundle/Scenes/Demo/AnimationEditScene.unity b/Assets/Bundle/Scenes/Demo/AnimationEditScene.unity index 11eec290..bce02def 100644 --- a/Assets/Bundle/Scenes/Demo/AnimationEditScene.unity +++ b/Assets/Bundle/Scenes/Demo/AnimationEditScene.unity @@ -62425,7 +62425,7 @@ MonoBehaviour: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 687023027} - m_Enabled: 1 + m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 948f4100a11a5c24981795d21301da5c, type: 3} m_Name: @@ -62433,7 +62433,7 @@ MonoBehaviour: volumeTrigger: {fileID: 687023028} volumeLayer: serializedVersion: 2 - m_Bits: 512 + m_Bits: 768 stopNaNPropagation: 1 finalBlitToCameraTarget: 0 antialiasingMode: 0 diff --git a/Assets/Bundle/Shaders/Unit/ImageEffect/unit_img_glitch.shader b/Assets/Bundle/Shaders/Unit/ImageEffect/unit_img_glitch.shader index 2e2c9fa2..62f75459 100644 --- a/Assets/Bundle/Shaders/Unit/ImageEffect/unit_img_glitch.shader +++ b/Assets/Bundle/Shaders/Unit/ImageEffect/unit_img_glitch.shader @@ -1,4 +1,4 @@ -Shader "Unlit/unit_effect_glitch" +Shader "Erika/Unit/ImageEffect/unit_img_glitch" { Properties { @@ -6,16 +6,19 @@ } SubShader { - Tags { "RenderType"="Opaque" } - LOD 100 + Tags { "RenderType" = "Opaque" "Queue" = "Transparent-1"} + LOD 100 + + ZWrite Off + ZTest LEqual + + Blend SrcAlpha OneMinusSrcAlpha Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag - // make fog work - #pragma multi_compile_fog #include "UnityCG.cginc" @@ -28,7 +31,6 @@ struct v2f { float2 uv : TEXCOORD0; - UNITY_FOG_COORDS(1) float4 vertex : SV_POSITION; }; @@ -40,17 +42,19 @@ v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); - UNITY_TRANSFER_FOG(o,o.vertex); return o; } fixed4 frag (v2f i) : SV_Target { + float amount = 0.01; // sample the texture - fixed4 col = tex2D(_MainTex, i.uv); - // apply fog - UNITY_APPLY_FOG(i.fogCoord, col); - return col; + fixed4 col = tex2D(_MainTex, i.uv + fixed2(0, 0)); + fixed4 col2 = tex2D(_MainTex, i.uv + fixed2(amount, 0)); + fixed4 col3 = tex2D(_MainTex, i.uv + fixed2(-amount, 0)); + fixed4 col4 = tex2D(_MainTex, i.uv + fixed2(0, 0)); + fixed4 color = fixed4(col.r, col2.g, col3.b, col4.a); + return color; } ENDCG } diff --git a/Assets/Bundle/Shaders/Unit/ImageEffect/unit_img_motionBlur.shader b/Assets/Bundle/Shaders/Unit/ImageEffect/unit_img_motionBlur.shader index e3308547..c5cfcf26 100644 --- a/Assets/Bundle/Shaders/Unit/ImageEffect/unit_img_motionBlur.shader +++ b/Assets/Bundle/Shaders/Unit/ImageEffect/unit_img_motionBlur.shader @@ -11,7 +11,7 @@ Shader "Erika/Unit/ImageEffect/unit_img_motionBlur" } SubShader { - Tags { "RenderType"="Opaque" "Queue" = "Geometry"} + Tags { "RenderType"="Opaque" "Queue" = "Transparent-1"} LOD 100 ZWrite Off @@ -63,7 +63,7 @@ Shader "Erika/Unit/ImageEffect/unit_img_motionBlur" { fixed2 uv = i.uv; fixed2 offset = fixed2(0.05, 0.05); - const float sampleCount = 20; + const float sampleCount = 30; fixed4 color = fixed4(0,0,0,0); float radian = radians(_Angle); float distance = _Distance; diff --git a/Assets/Bundle/Unit/PC/Erika/AnimationData/Air_Dash.asset b/Assets/Bundle/Unit/PC/Erika/AnimationData/Air_Dash.asset index fca27ca9..4e3ed5f6 100644 --- a/Assets/Bundle/Unit/PC/Erika/AnimationData/Air_Dash.asset +++ b/Assets/Bundle/Unit/PC/Erika/AnimationData/Air_Dash.asset @@ -19,8 +19,8 @@ MonoBehaviour: - {fileID: 0} - {fileID: 0} - {fileID: 114895186165284124} - - {fileID: 114829983908477250} - - {fileID: 114461861979665892} + - {fileID: 114100994216008508} + - {fileID: 114514857844340108} hurtBoxes: - collider: type: 0 @@ -167,6 +167,20 @@ MonoBehaviour: properties: m_keys: m_values: [] +--- !u!114 &114100994216008508 +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: a4957372b8a4fd946b86016c20f83750, type: 3} + m_Name: EventMesh_VisibilityInMainCamera + m_EditorClassIdentifier: + startFrame: 5 + isVisible: 0 --- !u!114 &114163276615738028 MonoBehaviour: m_ObjectHideFlags: 0 @@ -243,6 +257,20 @@ MonoBehaviour: m_EditorClassIdentifier: startFrame: 21 isVisible: 1 +--- !u!114 &114514857844340108 +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: a4957372b8a4fd946b86016c20f83750, type: 3} + m_Name: EventMesh_VisibilityInMainCamera + m_EditorClassIdentifier: + startFrame: 20 + isVisible: 1 --- !u!114 &114677701672343994 MonoBehaviour: m_ObjectHideFlags: 0 @@ -300,6 +328,6 @@ MonoBehaviour: m_Name: EventMesh_ImageEffect_MotionBlur m_EditorClassIdentifier: startFrame: 4 - lifeTime: 0.1 + lifeTime: 0.2 angle: 10 - distance: 0.4 + distance: 0.3 diff --git a/Assets/Scripts/Managers/ResourceManager_Materials.cs b/Assets/Scripts/Managers/ResourceManager_Materials.cs index 410fb844..39b90606 100644 --- a/Assets/Scripts/Managers/ResourceManager_Materials.cs +++ b/Assets/Scripts/Managers/ResourceManager_Materials.cs @@ -8,10 +8,12 @@ public partial class ResourceManager : Singleton { MotionBlur, Glitch, + ColorDrift, } public readonly Dictionary imageEffectMaterails = new Dictionary() { { EImageEffectMaterails.MotionBlur, "Assets/Bundle/Materials/Unit/ImageEffect/unit_img_motionBlur.mat"}, + { EImageEffectMaterails.Glitch, "Assets/Bundle/Materials/Unit/ImageEffect/unit_img_glitch.mat"}, }; } \ No newline at end of file diff --git a/Assets/Scripts/Unit/Components/UnitImageEffect.cs b/Assets/Scripts/Unit/Components/UnitImageEffect.cs index 999740f3..a2689ca1 100644 --- a/Assets/Scripts/Unit/Components/UnitImageEffect.cs +++ b/Assets/Scripts/Unit/Components/UnitImageEffect.cs @@ -31,10 +31,13 @@ public class UnitImageEffectHandle public class UnitImageEffect : UnitComponent { public List effects = new List(); - public static GameObject effectPlane; + + public static GameObject effectPlane; private Dictionary/*pool*/> m_HolderPool = new Dictionary>(); + private ObjectPool m_HandlePool = new ObjectPool(null, null); + public override void OnUpdate() { base.OnUpdate(); @@ -55,6 +58,7 @@ public class UnitImageEffect : UnitComponent temp[j].holder.gameObject.SetActive(false); ReleaseHolder(ref temp[j].holder); effects.Remove(temp[j]); + m_HandlePool.Release(temp[j]); } ListPool.Release(temp); } @@ -123,7 +127,8 @@ public class UnitImageEffect : UnitComponent public void ShowMotionBlur(float lifeTime, float angle, float distance) { - UnitImageEffectHandle handle = new UnitImageEffectHandle(); + UnitImageEffectHandle handle = m_HandlePool.Get(); + handle.lifeTime = lifeTime; handle.curTime = 0; float size = UnitManager.Instance.pc.unitDetail.snapshotBound; @@ -143,13 +148,41 @@ public class UnitImageEffect : UnitComponent handle.holder.gameObject.transform.position = UnitManager.Instance.pc.center; handle.holder.renderer.GetPropertyBlock(block); - block.SetFloat("_Distance", (normalTime) * distance); + block.SetFloat("_Distance", /*(normalTime) * */distance); + handle.holder.renderer.SetPropertyBlock(block); + }; + + effects.Add(handle); + } + + public void ShowGlitch(float lifeTime) + { + UnitImageEffectHandle handle = m_HandlePool.Get(); + + handle.lifeTime = lifeTime; + handle.curTime = 0; + float size = UnitManager.Instance.pc.unitDetail.snapshotBound; + handle.holder = ClaimHolder(size); + handle.holder.gameObject.SetActive(true); + string matPath = ResourceManager.Instance.imageEffectMaterails[ResourceManager.EImageEffectMaterails.Glitch]; + handle.holder.renderer.sharedMaterial = ResourceManager.Instance.LoadAsset(matPath); + + MaterialPropertyBlock block = new MaterialPropertyBlock(); + handle.holder.renderer.GetPropertyBlock(block); + handle.holder.renderer.SetPropertyBlock(block); + + handle.stepFunc = (float normalTime) => + { + handle.holder.gameObject.transform.position = UnitManager.Instance.pc.center; + + handle.holder.renderer.GetPropertyBlock(block); handle.holder.renderer.SetPropertyBlock(block); }; effects.Add(handle); } - #endregion + + #endregion } \ No newline at end of file diff --git a/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs b/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs index a55ba99b..0bb8df5c 100644 --- a/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs +++ b/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs @@ -180,7 +180,8 @@ public partial class TimelineEventProxy return; float angle = motionBlur.angle; angle = owner.isTowardRight ? angle : 180 - angle; - ((PCController)owner).unitImageEffect.ShowMotionBlur(motionBlur.lifeTime, angle, motionBlur.distance); + // ((PCController)owner).unitImageEffect.ShowMotionBlur(motionBlur.lifeTime, angle, motionBlur.distance); + ((PCController)owner).unitImageEffect.ShowGlitch(motionBlur.lifeTime); } #endregion diff --git a/Assets/Scripts/Unit/UnitDetail.cs b/Assets/Scripts/Unit/UnitDetail.cs index 03d26fdd..3d075451 100644 --- a/Assets/Scripts/Unit/UnitDetail.cs +++ b/Assets/Scripts/Unit/UnitDetail.cs @@ -140,7 +140,6 @@ public class UnitDetail : MonoBehaviour } } - public Vector3 center { get diff --git a/Assets/Scripts/Utils/ListPool.cs b/Assets/Scripts/Utils/ListPool.cs index b9fbd2b8..9819aa48 100644 --- a/Assets/Scripts/Utils/ListPool.cs +++ b/Assets/Scripts/Utils/ListPool.cs @@ -21,7 +21,7 @@ public static class ListPool }); } -internal class ObjectPool where T : new() +public class ObjectPool where T : new() { private readonly Stack m_Stack = new Stack(); private readonly UnityAction m_ActionOnGet; diff --git a/Assets/ThirdParty/VRM/VRMShaders/MToon/MToon/Resources/Shaders/MToon.shader b/Assets/ThirdParty/VRM/VRMShaders/MToon/MToon/Resources/Shaders/MToon.shader index 496ac558..dafcf557 100644 --- a/Assets/ThirdParty/VRM/VRMShaders/MToon/MToon/Resources/Shaders/MToon.shader +++ b/Assets/ThirdParty/VRM/VRMShaders/MToon/MToon/Resources/Shaders/MToon.shader @@ -51,7 +51,7 @@ Shader "VRM/MToon" // for SM 3.0 SubShader { - Tags { "RenderType" = "Opaque" "Queue" = "Geometry" } + Tags { "RenderType" = "Opaque" /* "Queue" = "Geometry" */ "Queue"="Transparent"} // Forward Base Pass -- cgit v1.1-26-g67d0