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/Camera/CustomRenderingPipeline.cs | 99 ---------------------- .../Scripts/Camera/CustomRenderingPipeline.cs.meta | 11 --- Assets/Scripts/Rendering.meta | 8 ++ Assets/Scripts/Rendering/CustomLighting.cs | 9 ++ Assets/Scripts/Rendering/CustomLighting.cs.meta | 11 +++ .../Scripts/Rendering/CustomRenderingPipeline.cs | 46 ++++++++++ .../Rendering/CustomRenderingPipeline.cs.meta | 11 +++ Assets/Scripts/Rendering/RenderingUtility.cs | 66 +++++++++++++++ Assets/Scripts/Rendering/RenderingUtility.cs.meta | 11 +++ Assets/Scripts/Unit/Components/UnitLensEffect.cs | 43 ++++++++-- Assets/Scripts/Unit/LensEffect/LensEffectBase.cs | 42 +++++---- .../Unit/LensEffect/LensEffect_MotionBlur.cs | 19 +++-- 12 files changed, 232 insertions(+), 144 deletions(-) delete mode 100644 Assets/Scripts/Camera/CustomRenderingPipeline.cs delete mode 100644 Assets/Scripts/Camera/CustomRenderingPipeline.cs.meta create mode 100644 Assets/Scripts/Rendering.meta create mode 100644 Assets/Scripts/Rendering/CustomLighting.cs create mode 100644 Assets/Scripts/Rendering/CustomLighting.cs.meta create mode 100644 Assets/Scripts/Rendering/CustomRenderingPipeline.cs create mode 100644 Assets/Scripts/Rendering/CustomRenderingPipeline.cs.meta create mode 100644 Assets/Scripts/Rendering/RenderingUtility.cs create mode 100644 Assets/Scripts/Rendering/RenderingUtility.cs.meta (limited to 'Assets/Scripts') diff --git a/Assets/Scripts/Camera/CustomRenderingPipeline.cs b/Assets/Scripts/Camera/CustomRenderingPipeline.cs deleted file mode 100644 index c11cc785..00000000 --- a/Assets/Scripts/Camera/CustomRenderingPipeline.cs +++ /dev/null @@ -1,99 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.Rendering; - -// https://docs.unity3d.com/ScriptReference/Rendering.CameraEvent.html -// 前向渲染的camera events -// * DepthTexture -// * DepthNormalTexture -// * ForwardOpaque -// * ImageEffectsOpaque -// * Skybox -// * ForwardAlpha -// * ImageEffects -// * Everything - -[Flags] -public enum ERenderingEvent -{ - None = 0, - BeforeDepthTexture = 1, - BeforeDepthNormalsTexture = 1 << 1, - BeforeForwardOpaque = 1 << 2, - BeforeImageEffectsOpaque = 1 << 3, - BeforeSkybox = 1 << 4, - BeforeForwardAlpha = 1 << 5, - BeforeImageEffects = 1 << 6, - //BeforeEverything = 1 << 7, - AfterDepthTexture = 1 << 8, - AfterDepthNormalsTexture = 1 << 9, - AfterForwardOpaque = 1 << 10, - AfterImageEffectsOpaque = 1 << 11, - AfterSkybox = 1 << 12, - AfterForwardAlpha = 1 << 13, - AfterImageEffects = 1 << 14, - AfterEverything = 1 << 15, -} - -[RequireComponent(typeof(MainCamera))] -public class CustomRenderingPipeline : MonoBehaviour -{ - public static Dictionary RenderingEventToCameraEvent = new Dictionary { - {ERenderingEvent.BeforeDepthTexture, CameraEvent.BeforeDepthTexture }, - {ERenderingEvent.BeforeDepthNormalsTexture, CameraEvent.BeforeDepthNormalsTexture }, - {ERenderingEvent.BeforeForwardOpaque, CameraEvent.BeforeForwardOpaque }, - {ERenderingEvent.BeforeImageEffectsOpaque, CameraEvent.BeforeImageEffectsOpaque }, - {ERenderingEvent.BeforeSkybox, CameraEvent.BeforeSkybox }, - {ERenderingEvent.BeforeForwardAlpha, CameraEvent.BeforeForwardAlpha }, - {ERenderingEvent.BeforeImageEffects, CameraEvent.BeforeImageEffects }, - {ERenderingEvent.AfterDepthTexture, CameraEvent.AfterDepthTexture }, - {ERenderingEvent.AfterDepthNormalsTexture, CameraEvent.AfterDepthNormalsTexture }, - {ERenderingEvent.AfterForwardOpaque, CameraEvent.AfterForwardOpaque }, - {ERenderingEvent.AfterImageEffectsOpaque, CameraEvent.AfterImageEffectsOpaque }, - {ERenderingEvent.AfterSkybox, CameraEvent.AfterSkybox }, - {ERenderingEvent.AfterForwardAlpha, CameraEvent.AfterForwardAlpha }, - {ERenderingEvent.AfterImageEffects, CameraEvent.AfterImageEffects }, - {ERenderingEvent.AfterEverything, CameraEvent.AfterEverything }, - }; - - Camera m_Camera; - - public delegate void RenderEventHandler(); - public event RenderEventHandler onPreCull; - public event RenderEventHandler onPreRender; - public event RenderEventHandler onPostRender; - - private void OnEable() - { - m_Camera = GetComponent(); - } - - private void Start() - { - - } - - private void OnPreCull() - { - onPreCull?.Invoke(); - } - - private void OnPreRender() - { - onPreRender?.Invoke(); - } - - private void OnPostRender() - { - onPostRender?.Invoke(); - } - - #region 贴图 - - #endregion - - - -} \ No newline at end of file diff --git a/Assets/Scripts/Camera/CustomRenderingPipeline.cs.meta b/Assets/Scripts/Camera/CustomRenderingPipeline.cs.meta deleted file mode 100644 index 1a3cac2c..00000000 --- a/Assets/Scripts/Camera/CustomRenderingPipeline.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: aaca34c56e4ce4f41a13d30db14959aa -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Rendering.meta b/Assets/Scripts/Rendering.meta new file mode 100644 index 00000000..b2cccc29 --- /dev/null +++ b/Assets/Scripts/Rendering.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b102672570dd0d946bb29c221b22f3f3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Rendering/CustomLighting.cs b/Assets/Scripts/Rendering/CustomLighting.cs new file mode 100644 index 00000000..57597e21 --- /dev/null +++ b/Assets/Scripts/Rendering/CustomLighting.cs @@ -0,0 +1,9 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class CustomLightingSystem : Singleton +{ + + +} diff --git a/Assets/Scripts/Rendering/CustomLighting.cs.meta b/Assets/Scripts/Rendering/CustomLighting.cs.meta new file mode 100644 index 00000000..c1f70391 --- /dev/null +++ b/Assets/Scripts/Rendering/CustomLighting.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 483db9507b5e5924a86daaffdf7e33cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Rendering/CustomRenderingPipeline.cs b/Assets/Scripts/Rendering/CustomRenderingPipeline.cs new file mode 100644 index 00000000..af70e760 --- /dev/null +++ b/Assets/Scripts/Rendering/CustomRenderingPipeline.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering; + +[RequireComponent(typeof(MainCamera))] +public class CustomRenderingPipeline : MonoBehaviour +{ + + public delegate void RenderEventHandler(); + public event RenderEventHandler onPreCull; + public event RenderEventHandler onPreRender; + public event RenderEventHandler onPostRender; + + #region 公共贴图 + + #endregion + + Camera m_Camera; + + private void OnEable() + { + m_Camera = GetComponent(); + } + + private void Start() + { + } + + private void OnPreCull() + { + onPreCull?.Invoke(); + } + + private void OnPreRender() + { + onPreRender?.Invoke(); + } + + private void OnPostRender() + { + onPostRender?.Invoke(); + } + +} \ No newline at end of file diff --git a/Assets/Scripts/Rendering/CustomRenderingPipeline.cs.meta b/Assets/Scripts/Rendering/CustomRenderingPipeline.cs.meta new file mode 100644 index 00000000..1a3cac2c --- /dev/null +++ b/Assets/Scripts/Rendering/CustomRenderingPipeline.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aaca34c56e4ce4f41a13d30db14959aa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Rendering/RenderingUtility.cs b/Assets/Scripts/Rendering/RenderingUtility.cs new file mode 100644 index 00000000..297a9b79 --- /dev/null +++ b/Assets/Scripts/Rendering/RenderingUtility.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering; + +// https://docs.unity3d.com/Manual/GraphicsCommandBuffers.html +// https://docs.unity3d.com/ScriptReference/Rendering.CameraEvent.html + +// 前向渲染的camera events +// * DepthTexture +// * DepthNormalTexture +// * ForwardOpaque +// * ImageEffectsOpaque +// * Skybox +// * ForwardAlpha +// * ImageEffects +// * Everything + +[Flags] +public enum ERenderingEvent +{ + None = 0, + BeforeDepthTexture = 1, + BeforeDepthNormalsTexture = 1 << 1, + BeforeForwardOpaque = 1 << 2, + BeforeImageEffectsOpaque = 1 << 3, + BeforeSkybox = 1 << 4, + BeforeForwardAlpha = 1 << 5, + BeforeImageEffects = 1 << 6, + //BeforeEverything = 1 << 7, + AfterDepthTexture = 1 << 8, + AfterDepthNormalsTexture = 1 << 9, + AfterForwardOpaque = 1 << 10, + AfterImageEffectsOpaque = 1 << 11, + AfterSkybox = 1 << 12, + AfterForwardAlpha = 1 << 13, + AfterImageEffects = 1 << 14, + AfterEverything = 1 << 15, +} + +public static class RenderingUtility +{ + public static Dictionary renderingEventToCameraEventDic = new Dictionary { + {ERenderingEvent.BeforeDepthTexture, CameraEvent.BeforeDepthTexture }, + {ERenderingEvent.BeforeDepthNormalsTexture, CameraEvent.BeforeDepthNormalsTexture }, + {ERenderingEvent.BeforeForwardOpaque, CameraEvent.BeforeForwardOpaque }, + {ERenderingEvent.BeforeImageEffectsOpaque, CameraEvent.BeforeImageEffectsOpaque }, + {ERenderingEvent.BeforeSkybox, CameraEvent.BeforeSkybox }, + {ERenderingEvent.BeforeForwardAlpha, CameraEvent.BeforeForwardAlpha }, + {ERenderingEvent.BeforeImageEffects, CameraEvent.BeforeImageEffects }, + {ERenderingEvent.AfterDepthTexture, CameraEvent.AfterDepthTexture }, + {ERenderingEvent.AfterDepthNormalsTexture, CameraEvent.AfterDepthNormalsTexture }, + {ERenderingEvent.AfterForwardOpaque, CameraEvent.AfterForwardOpaque }, + {ERenderingEvent.AfterImageEffectsOpaque, CameraEvent.AfterImageEffectsOpaque }, + {ERenderingEvent.AfterSkybox, CameraEvent.AfterSkybox }, + {ERenderingEvent.AfterForwardAlpha, CameraEvent.AfterForwardAlpha }, + {ERenderingEvent.AfterImageEffects, CameraEvent.AfterImageEffects }, + {ERenderingEvent.AfterEverything, CameraEvent.AfterEverything }, + }; + + public static CameraEvent ToCameraEvent(this ERenderingEvent e) + { + return renderingEventToCameraEventDic[e]; + } +} diff --git a/Assets/Scripts/Rendering/RenderingUtility.cs.meta b/Assets/Scripts/Rendering/RenderingUtility.cs.meta new file mode 100644 index 00000000..83570ebb --- /dev/null +++ b/Assets/Scripts/Rendering/RenderingUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bc9ab0eb4b2a0754e9bb9ec7a2f945c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Unit/Components/UnitLensEffect.cs b/Assets/Scripts/Unit/Components/UnitLensEffect.cs index 18328fc8..fee02a7c 100644 --- a/Assets/Scripts/Unit/Components/UnitLensEffect.cs +++ b/Assets/Scripts/Unit/Components/UnitLensEffect.cs @@ -5,8 +5,6 @@ using System.Collections.Generic; using UnityEngine; using UnityEngine.Rendering; -//https://docs.unity3d.com/ScriptReference/Rendering.RenderTargetIdentifier.html - // Unit效果之一,镜头效果,通过command buffer实现 public class UnitLensEffect : UnitComponent @@ -17,6 +15,7 @@ public class UnitLensEffect : UnitComponent private List m_Effects; + // 每个角色维护单独的command buffers,而不是共享command buffer private Dictionary m_InUseCommandBuffers; private Dictionary m_CachedCommandBuffers; @@ -82,24 +81,25 @@ public class UnitLensEffect : UnitComponent { cb.Value.Clear(); ERenderingEvent re = cb.Key; - CameraEvent ce = CustomRenderingPipeline.RenderingEventToCameraEvent[re]; + CameraEvent ce = re.ToCameraEvent(); for (int i = 0; i < m_Effects.Count; ++i) { LensEffectBase eff = m_Effects[i]; if (!eff.renderingEvents.HasFlag(re)) continue; - MethodInfo method = eff.GetType().GetMethod(re.ToString(), BindingFlags.Instance | BindingFlags.Public, null, new Type[] { typeof(LensEffectBase.EStage), typeof(CommandBuffer), typeof(BodyPartRenderer) }, null); + MethodInfo method = eff.GetType().GetMethod(re.ToString(), BindingFlags.Instance | BindingFlags.Public, null, new Type[] { typeof(LensEffectBase.EStage), typeof(CommandBuffer) }, null); if (method == null) continue; - method.Invoke(eff, new object[] { LensEffectBase.EStage.Before, cb.Value, null }); + method.Invoke(eff, new object[] { LensEffectBase.EStage.Before, cb.Value }); for (int j = 0; j < body.renderers.Length; ++j) { var renderer = body.renderers[j]; if (renderer == null) continue; - method.Invoke(eff, new object[] { LensEffectBase.EStage.Iterate, cb.Value, renderer }); + eff.curBodypartRenderer = renderer; + method.Invoke(eff, new object[] { LensEffectBase.EStage.Iterate, cb.Value }); } - method.Invoke(eff, new object[] { LensEffectBase.EStage.After, cb.Value, null }); + method.Invoke(eff, new object[] { LensEffectBase.EStage.After, cb.Value }); } MainCamera.Instance.camera.AddCommandBuffer(ce, cb.Value); } @@ -107,9 +107,34 @@ public class UnitLensEffect : UnitComponent private void OnRenderUnit() { - foreach(var cb in m_InUseCommandBuffers) + // 执行每个event的finish + foreach (var cb in m_InUseCommandBuffers) + { + ERenderingEvent re = cb.Key; + for (int i = 0; i < m_Effects.Count; ++i) + { + LensEffectBase eff = m_Effects[i]; + if (!eff.renderingEvents.HasFlag(re)) + continue; + MethodInfo method = eff.GetType().GetMethod(re.ToString(), BindingFlags.Instance | BindingFlags.Public, null, new Type[] { typeof(LensEffectBase.EStage), typeof(CommandBuffer) }, null); + if (method == null) + continue; + method.Invoke(eff, new object[] { LensEffectBase.EStage.Finished, cb.Value }); + } + } + + for (int i = 0; i < m_Effects.Count; ++i) + { + LensEffectBase eff = m_Effects[i]; + MethodInfo method = eff.GetType().GetMethod("OnRenderFinish", BindingFlags.Instance | BindingFlags.Public); + if (method == null) + continue; + method.Invoke(eff, new object[] { }); + } + + foreach (var cb in m_InUseCommandBuffers) { - CameraEvent ce = CustomRenderingPipeline.RenderingEventToCameraEvent[cb.Key]; + CameraEvent ce = cb.Key.ToCameraEvent(); MainCamera.Instance.camera.RemoveCommandBuffer(ce, cb.Value); } var temp = m_CachedCommandBuffers; 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