summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Unit/LensEffect
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-09-21 19:51:10 +0800
committerchai <chaifix@163.com>2021-09-21 19:51:10 +0800
commitdf1e3842c7571cf6db8f8238b893bde049abf651 (patch)
tree3207c672d3257fa90d3352b59ae62fc0a940ecd4 /Assets/Scripts/Unit/LensEffect
parentb5645c779a3e3c4ca758400cd9a718a7bc0c2bc6 (diff)
*custom rendering pipeline
Diffstat (limited to 'Assets/Scripts/Unit/LensEffect')
-rw-r--r--Assets/Scripts/Unit/LensEffect/LensEffectBase.cs42
-rw-r--r--Assets/Scripts/Unit/LensEffect/LensEffect_MotionBlur.cs19
2 files changed, 36 insertions, 25 deletions
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<MaterialEntry> m_InUseMaterials = new List<MaterialEntry>();
+ #region upvalues
+ public BodyPartRenderer curBodypartRenderer;
+ #endregion
+
private static MaterialEntry _ClaimMaterial(string shader)
{
List<MaterialEntry> 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<MeshFilter>().sharedMesh.subMeshCount;
+ obj2Wod = curBodypartRenderer.renderer.transform.localToWorldMatrix;
+ subMeshCount = curBodypartRenderer.renderer.GetComponent<MeshFilter>().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();
}
}