diff options
Diffstat (limited to 'Assets/Scripts/Unit/LensEffect')
-rw-r--r-- | Assets/Scripts/Unit/LensEffect/LensEffect_BlurRim.cs | 110 | ||||
-rw-r--r-- | Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs | 89 | ||||
-rw-r--r-- | Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs.meta | 11 |
3 files changed, 160 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 diff --git a/Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs b/Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs new file mode 100644 index 00000000..9111bd68 --- /dev/null +++ b/Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs @@ -0,0 +1,89 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering; + +public class LensEffect_Dash : LensEffectBase +{ + public override ERenderingEvent renderingEvents => ERenderingEvent.AfterForwardOpaque; + + Color rimColor; + int tempID; + float lifeTime; + UnitSnapshot snapshot; + + public LensEffect_Dash(Color color, float lifeTime) : base() + { + rimColor = color; + tempID = Shader.PropertyToID("_BlurRim_RT0"); + this.lifeTime = lifeTime; + } + + public override void AfterForwardOpaque(EStage stage, CommandBuffer cb) + { + if (stage == EStage.Before) + { + Before(cb); + } + else if (stage == EStage.Iterate) + { + Iterate(cb); + } + else if (stage == EStage.After) + { + 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 diff --git a/Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs.meta b/Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs.meta new file mode 100644 index 00000000..f0c4f6ab --- /dev/null +++ b/Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3fac41ebc7706eb4abec04ae44602464 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: |