diff options
Diffstat (limited to 'Assets/Scripts/Unit/LensEffect/LensEffect_BlurRim.cs')
-rw-r--r-- | Assets/Scripts/Unit/LensEffect/LensEffect_BlurRim.cs | 110 |
1 files changed, 60 insertions, 50 deletions
diff --git a/Assets/Scripts/Unit/LensEffect/LensEffect_BlurRim.cs b/Assets/Scripts/Unit/LensEffect/LensEffect_BlurRim.cs index 4f90a777..6c61f2e7 100644 --- a/Assets/Scripts/Unit/LensEffect/LensEffect_BlurRim.cs +++ b/Assets/Scripts/Unit/LensEffect/LensEffect_BlurRim.cs @@ -7,70 +7,80 @@ public class LensEffect_BlurRim : LensEffectBase {
public override ERenderingEvent renderingEvents => ERenderingEvent.AfterForwardOpaque;
+ Color rimColor;
int tempID;
- public override void AfterForwardOpaque(EStage stage, CommandBuffer cb)
+ public LensEffect_BlurRim(Color color) : base()
+ {
+ rimColor = color;
+ tempID = Shader.PropertyToID("_BlurRim_RT0");
+ }
+
+ public override void AfterForwardOpaque(EStage stage, CommandBuffer cb)
{
if (stage == EStage.Before)
{
- tempID = Shader.PropertyToID("_Temp1");
-
- cb.GetTemporaryRT(tempID, -1, -1, 24, FilterMode.Bilinear);
- cb.SetRenderTarget(tempID);
- cb.ClearRenderTarget(true, true, new Color(0, 0, 0, 0)); + Before(cb); }
else if (stage == EStage.Iterate)
{
- Matrix4x4 obj2Wod = Matrix4x4.identity;
- int subMeshCount = 0;
- if (curBodypartRenderer.renderer is 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 (curBodypartRenderer.renderer is MeshRenderer)
- {
- obj2Wod = curBodypartRenderer.renderer.transform.localToWorldMatrix;
- subMeshCount = curBodypartRenderer.renderer.GetComponent<MeshFilter>().sharedMesh.subMeshCount;
- }
-
- for (int i = 0; i < subMeshCount; ++i)
- {
- MaterialEntry mat = ClaimMaterial(StaticDefine.shaders[EShader.SolidColor].name);
- mat.material.SetColor("_Color", Color.red);
- mat.material.SetMatrix("_ObjectToWorld", obj2Wod);
- cb.DrawRenderer(curBodypartRenderer.renderer, mat.material, i);
-
- mat = ClaimMaterial(StaticDefine.shaders[EShader.SolidColor].name);
- mat.material.SetColor("_Color", Color.red);
- obj2Wod = Matrix4x4.Translate(new Vector3(1,0,0)) * obj2Wod;
- mat.material.SetMatrix("_ObjectToWorld", obj2Wod);
- cb.DrawRenderer(curBodypartRenderer.renderer, mat.material, i);
-
- mat = ClaimMaterial(StaticDefine.shaders[EShader.SolidColor].name);
- mat.material.SetColor("_Color", Color.red);
- obj2Wod = Matrix4x4.Translate(new Vector3(-2, 0, 0)) * obj2Wod;
- mat.material.SetMatrix("_ObjectToWorld", obj2Wod);
- cb.DrawRenderer(curBodypartRenderer.renderer, mat.material, i);
- } - }
+ Iterate(cb); + }
else if (stage == EStage.After)
{
- MaterialEntry blur = ClaimMaterial(StaticDefine.shaders[EShader.Blur].name);
-
- Vector4 tileOffset = RenderingUtility.GetTillingOffset(MainCamera.Instance.camera, owner.center, owner.unitDetail.snapshotBound);
- blur.material.SetVector("_TileOffset", tileOffset);
-
- cb.Blit(tempID, BuiltinRenderTextureType.CameraTarget, blur.material);
- tempID = Shader.PropertyToID("_Temp1");
- cb.ReleaseTemporaryRT(tempID); + After(cb); }
else if (stage == EStage.Finished)
{
}
}
+ void Before(CommandBuffer cb)
+ {
+ cb.GetTemporaryRT(tempID, -1, -1, 24, FilterMode.Bilinear);
+ cb.SetRenderTarget(tempID);
+ cb.ClearRenderTarget(true, true, new Color(0, 0, 0, 0));
+ }
+
+ void Iterate(CommandBuffer cb)
+ {
+ Matrix4x4 obj2Wod = Matrix4x4.identity;
+ int subMeshCount = 0;
+ if (curBodypartRenderer.renderer is SkinnedMeshRenderer)
+ {
+ SkinnedMeshRenderer smr = curBodypartRenderer.renderer as SkinnedMeshRenderer;
+ Vector3 pos = smr.rootBone.transform.position;
+ Quaternion rot = smr.rootBone.transform.rotation;
+ obj2Wod = MatrixUtility.RotateAndTranslate(pos, rot);
+ obj2Wod = Matrix4x4.Translate(new Vector3(1, 0, 0)) * obj2Wod;
+ subMeshCount = smr.sharedMesh.subMeshCount;
+ }
+ else if (curBodypartRenderer.renderer is MeshRenderer)
+ {
+ obj2Wod = curBodypartRenderer.renderer.transform.localToWorldMatrix;
+ obj2Wod = Matrix4x4.Translate(new Vector3(1, 0, 0)) * obj2Wod;
+ subMeshCount = curBodypartRenderer.renderer.GetComponent<MeshFilter>().sharedMesh.subMeshCount;
+ }
+
+ for (int i = 0; i < subMeshCount; ++i)
+ {
+ MaterialEntry mat = ClaimMaterial(StaticDefine.shaders[EShader.SolidColor].name);
+ mat.material.SetColor("_Color", rimColor);
+ mat.material.SetMatrix("_ObjectToWorld", obj2Wod);
+ mat.material.SetTexture("_MainTex", curBodypartRenderer.renderer.sharedMaterial.GetTexture("_MainTex"));
+ cb.DrawRenderer(curBodypartRenderer.renderer, mat.material, i);
+ }
+ }
+
+ void After(CommandBuffer cb)
+ {
+ MaterialEntry blur = ClaimMaterial(StaticDefine.shaders[EShader.Blur].name);
+
+ Vector4 tileOffset = RenderingUtility.GetTillingOffset(MainCamera.Instance.camera, owner.center, owner.unitDetail.snapshotBound);
+ blur.material.SetVector("_TileOffset", tileOffset);
+
+ cb.Blit(tempID, BuiltinRenderTextureType.CameraTarget, blur.material);
+ cb.ReleaseTemporaryRT(tempID);
+ }
+
}
\ No newline at end of file |