From df1e3842c7571cf6db8f8238b893bde049abf651 Mon Sep 17 00:00:00 2001 From: chai Date: Tue, 21 Sep 2021 19:51:10 +0800 Subject: *custom rendering pipeline --- Assets/Scripts/Unit/LensEffect/LensEffectBase.cs | 42 +++++++++++++--------- .../Unit/LensEffect/LensEffect_MotionBlur.cs | 19 +++++----- 2 files changed, 36 insertions(+), 25 deletions(-) (limited to 'Assets/Scripts/Unit/LensEffect') diff --git a/Assets/Scripts/Unit/LensEffect/LensEffectBase.cs b/Assets/Scripts/Unit/LensEffect/LensEffectBase.cs index 08e20217..8457a959 100644 --- a/Assets/Scripts/Unit/LensEffect/LensEffectBase.cs +++ b/Assets/Scripts/Unit/LensEffect/LensEffectBase.cs @@ -25,6 +25,10 @@ public abstract class LensEffectBase : MonoBehaviour private List m_InUseMaterials = new List(); + #region upvalues + public BodyPartRenderer curBodypartRenderer; + #endregion + private static MaterialEntry _ClaimMaterial(string shader) { List mats; @@ -74,28 +78,34 @@ public abstract class LensEffectBase : MonoBehaviour m_InUseMaterials.Clear(); } - public virtual void BeforeDepthTexture(EStage stage, CommandBuffer cb, BodyPartRenderer renderer = null) { } - public virtual void AfterDepthTexture(EStage stage, CommandBuffer cb, BodyPartRenderer renderer = null) { } + public virtual void BeforeDepthTexture(EStage stage, CommandBuffer cb) { } + public virtual void AfterDepthTexture(EStage stage, CommandBuffer cb) { } + + public virtual void BeforeDepthNormalsTexture(EStage stage, CommandBuffer cb) { } + public virtual void AfterDepthNormalsTexture(EStage stage, CommandBuffer cb) { } - public virtual void BeforeDepthNormalsTexture(EStage stage, CommandBuffer cb, BodyPartRenderer renderer = null) { } - public virtual void AfterDepthNormalsTexture(EStage stage, CommandBuffer cb, BodyPartRenderer renderer = null) { } + public virtual void BeforeForwardOpaque(EStage stage, CommandBuffer cb) { } + public virtual void AfterForwardOpaque(EStage stage, CommandBuffer cb) { } - public virtual void BeforeForwardOpaque(EStage stage, CommandBuffer cb, BodyPartRenderer renderer = null) { } - public virtual void AfterForwardOpaque(EStage stage, CommandBuffer cb, BodyPartRenderer renderer = null) { } + public virtual void BeforeImageEffectsOpaque(EStage stage, CommandBuffer cb) { } + public virtual void AfterImageEffectsOpaque(EStage stage, CommandBuffer cb) { } - public virtual void BeforeImageEffectsOpaque(EStage stage, CommandBuffer cb, BodyPartRenderer renderer = null) { } - public virtual void AfterImageEffectsOpaque(EStage stage, CommandBuffer cb, BodyPartRenderer renderer = null) { } + public virtual void BeforeSkybox(EStage stage, CommandBuffer cb) { } + public virtual void AfterSkybox(EStage stage, CommandBuffer cb) { } - public virtual void BeforeSkybox(EStage stage, CommandBuffer cb, BodyPartRenderer renderer = null) { } - public virtual void AfterSkybox(EStage stage, CommandBuffer cb, BodyPartRenderer renderer = null) { } + public virtual void BeforeForwardAlpha(EStage stage, CommandBuffer cb) { } + public virtual void AfterForwardAlpha(EStage stage, CommandBuffer cb) { } - public virtual void BeforeForwardAlpha(EStage stage, CommandBuffer cb, BodyPartRenderer renderer = null) { } - public virtual void AfterForwardAlpha(EStage stage, CommandBuffer cb, BodyPartRenderer renderer = null) { } + public virtual void BeforeImageEffects(EStage stage, CommandBuffer cb) { } + public virtual void AfterImageEffects(EStage stage, CommandBuffer cb) { } - public virtual void BeforeImageEffects(EStage stage, CommandBuffer cb, BodyPartRenderer renderer = null) { } - public virtual void AfterImageEffects(EStage stage, CommandBuffer cb, BodyPartRenderer renderer = null) { } + public virtual void BeforeEverything(EStage stage, CommandBuffer cb) { } + public virtual void AfterEverything(EStage stage, CommandBuffer cb) { } - public virtual void BeforeEverything(EStage stage, CommandBuffer cb, BodyPartRenderer renderer = null) { } - public virtual void AfterEverything(EStage stage, CommandBuffer cb, BodyPartRenderer renderer = null) { } + // 角色渲染完毕 + public virtual void OnRenderFinish() + { + ReleaseAllInUsedMaterials(); + } } \ No newline at end of file diff --git a/Assets/Scripts/Unit/LensEffect/LensEffect_MotionBlur.cs b/Assets/Scripts/Unit/LensEffect/LensEffect_MotionBlur.cs index 9ec7d056..086c92eb 100644 --- a/Assets/Scripts/Unit/LensEffect/LensEffect_MotionBlur.cs +++ b/Assets/Scripts/Unit/LensEffect/LensEffect_MotionBlur.cs @@ -13,7 +13,7 @@ public class LensEffect_MotionBlur : LensEffectBase public override ERenderingEvent renderingEvents => ERenderingEvent.AfterImageEffectsOpaque; - public override void AfterImageEffectsOpaque(EStage stage, CommandBuffer cb, BodyPartRenderer renderer = null) + public override void AfterImageEffectsOpaque(EStage stage, CommandBuffer cb) { if(stage == EStage.Before) { @@ -27,18 +27,18 @@ public class LensEffect_MotionBlur : LensEffectBase { Matrix4x4 obj2Wod = Matrix4x4.identity; int subMeshCount = 0; - if (renderer.renderer is SkinnedMeshRenderer) + if (curBodypartRenderer.renderer is SkinnedMeshRenderer) { - SkinnedMeshRenderer smr = renderer.renderer as SkinnedMeshRenderer; + SkinnedMeshRenderer smr = curBodypartRenderer.renderer as SkinnedMeshRenderer; Vector3 pos = smr.rootBone.transform.position; Quaternion rot = smr.rootBone.transform.rotation; obj2Wod = MatrixUtility.RotateAndTranslate(pos, rot); subMeshCount = smr.sharedMesh.subMeshCount; } - else if (renderer.renderer is MeshRenderer) + else if (curBodypartRenderer.renderer is MeshRenderer) { - obj2Wod = renderer.renderer.transform.localToWorldMatrix; - subMeshCount = renderer.renderer.GetComponent().sharedMesh.subMeshCount; + obj2Wod = curBodypartRenderer.renderer.transform.localToWorldMatrix; + subMeshCount = curBodypartRenderer.renderer.GetComponent().sharedMesh.subMeshCount; } for (int i = 0; i < subMeshCount; ++i) @@ -47,17 +47,18 @@ public class LensEffect_MotionBlur : LensEffectBase mat.material.SetColor("_Color", Color.red); mat.material.SetMatrix("_ObjectToWorld", obj2Wod); - cb.DrawRenderer(renderer.renderer, mat.material, i); + cb.DrawRenderer(curBodypartRenderer.renderer, mat.material, i); } } else if(stage == EStage.After) { MaterialEntry blur = ClaimMaterial(StaticDefine.shaders[EShader.Blur].name); - cb.Blit(tempID, BuiltinRenderTextureType.CameraTarget, blur.material); + cb.Blit(tempID, BuiltinRenderTextureType.CameraTarget, blur.material); + tempID = Shader.PropertyToID("_Temp1"); + cb.ReleaseTemporaryRT(tempID); } else if(stage == EStage.Finished) { - ReleaseAllInUsedMaterials(); } } -- cgit v1.1-26-g67d0