diff options
author | chai <chaifix@163.com> | 2021-09-21 19:51:10 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2021-09-21 19:51:10 +0800 |
commit | df1e3842c7571cf6db8f8238b893bde049abf651 (patch) | |
tree | 3207c672d3257fa90d3352b59ae62fc0a940ecd4 /Assets/Scripts/Unit/LensEffect | |
parent | b5645c779a3e3c4ca758400cd9a718a7bc0c2bc6 (diff) |
*custom rendering pipeline
Diffstat (limited to 'Assets/Scripts/Unit/LensEffect')
-rw-r--r-- | Assets/Scripts/Unit/LensEffect/LensEffectBase.cs | 42 | ||||
-rw-r--r-- | Assets/Scripts/Unit/LensEffect/LensEffect_MotionBlur.cs | 19 |
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();
}
}
|